<?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' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-9610337</id><updated>2011-12-14T18:44:17.030-08:00</updated><title type='text'>Steve's stuff</title><subtitle type='html'>Some random thoughts and musings</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://stevemargetts.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9610337/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://stevemargetts.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Steve Margetts</name><uri>http://www.blogger.com/profile/14659994614281523642</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>30</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-9610337.post-8279704519794307214</id><published>2007-05-16T05:30:00.000-07:00</published><updated>2007-05-16T06:18:21.850-07:00</updated><title type='text'></title><content type='html'>&lt;a href="http://www.keima.co.uk/Composer.aspx"&gt;&lt;br /&gt;&lt;img src="http://www.keima.co.uk/Images/Composer/Banner.png"/&gt;&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;We released our first product today: &lt;a href="http://www.keima.co.uk/Composer.aspx"&gt;Keima Composer&lt;/a&gt;. In a nutshell, it helps mobile phone and wireless broadband engineers design their networks, by guiding the engineer to the best selection of sites from existing or available assets. More details can be found in the &lt;a href="http://www.keima.co.uk/Products/Keima%20Composer/Keima%20Composer%201.0%20Data%20Sheet.pdf"&gt;datasheet&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Releasing our first product has been a learning experience for all of us, and it's been fascinating to watch the product grow. Although this is &amp;quot;version 1.0&amp;quot;, we've been using it in consultancy projects for some time. Earlier this year, we used Composer to reduce the number of sites needed rollout by a client by 30%.&lt;br /&gt;&lt;br /&gt;We've got loads of ideas for new features and additions; watch this space...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9610337-8279704519794307214?l=stevemargetts.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevemargetts.blogspot.com/feeds/8279704519794307214/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9610337&amp;postID=8279704519794307214&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9610337/posts/default/8279704519794307214'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9610337/posts/default/8279704519794307214'/><link rel='alternate' type='text/html' href='http://stevemargetts.blogspot.com/2007/05/we-released-our-first-product-today.html' title=''/><author><name>Steve Margetts</name><uri>http://www.blogger.com/profile/14659994614281523642</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9610337.post-116368796088680803</id><published>2006-11-16T06:34:00.000-08:00</published><updated>2006-11-16T06:39:20.920-08:00</updated><title type='text'></title><content type='html'>I'm pleased to report that our company &lt;a href="http://www.keima.co.uk"&gt;Keima&lt;/a&gt; has just announced a partnership with &lt;a href="http://www.wavecall.com/"&gt;WaveCall&lt;/a&gt;. We're all very excited about the opportunities this will open up for us.&lt;br /&gt;&lt;br /&gt;The full text of the press release can be found &lt;a href="http://www.keima.co.uk/News.aspx?item=2006-11-16T14:08:13Z"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9610337-116368796088680803?l=stevemargetts.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevemargetts.blogspot.com/feeds/116368796088680803/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9610337&amp;postID=116368796088680803&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9610337/posts/default/116368796088680803'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9610337/posts/default/116368796088680803'/><link rel='alternate' type='text/html' href='http://stevemargetts.blogspot.com/2006/11/im-pleased-to-report-that-our-company.html' title=''/><author><name>Steve Margetts</name><uri>http://www.blogger.com/profile/14659994614281523642</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9610337.post-116073068907420333</id><published>2006-10-13T02:07:00.000-07:00</published><updated>2006-11-24T01:09:29.783-08:00</updated><title type='text'></title><content type='html'>&lt;p&gt;&lt;br /&gt;Update: The bug has been fixed! Now that's what I call service.&lt;br /&gt;&lt;/P&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;Update: the bug has been &lt;a href="https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=227571"&gt;reported&lt;/a&gt;.&lt;br /&gt;&lt;/P&gt;&lt;br /&gt;&lt;br /&gt;&lt;P&gt;I've been working with a number of classes that expose events. These classes are marked as serializable so that they can be&amp;nbsp;saved to the disk. However, I don't want the events to be serialized, as the built-in serializer will try to serialize all the subscribers to these events, and not all subscribers will be serializable (windows forms, for example). So, following the guidelines I've tagged the events of these classes with the [field:NonSerialized] attribute to prevent the subscribers to these events from being serialized. Unfortunately, this attribute appears to have no effect if the class is written in C++/CLI, although it does work for classes written in C#.&lt;/P&gt;&lt;br /&gt;&lt;P&gt;To demonstrate this, consider the following class that implements a String "Text" property and exposes a simple "TextChanged" event that can be used to notify interested parties of changes to it:&lt;/P&gt;&lt;PRE&gt;[Serializable]&lt;br /&gt;public class TestClass&lt;br /&gt;{&lt;br /&gt;    String text_;&lt;br /&gt;    public TestClass(String text)&lt;br /&gt;    {&lt;br /&gt;        text_ = text;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public String Text&lt;br /&gt;    {&lt;br /&gt;        get&lt;br /&gt;        {&lt;br /&gt;            return text_;&lt;br /&gt;        }&lt;br /&gt;        set&lt;br /&gt;        {&lt;br /&gt;            if (text_ != value)&lt;br /&gt;            {&lt;br /&gt;                text_ = value;&lt;br /&gt;                TextChanged(this, new EventArgs());&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    [field:NonSerialized]&lt;br /&gt;    public event EventHandler TextChanged;&lt;br /&gt;}&lt;br /&gt;&lt;/PRE&gt;&lt;br /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;br /&gt;&lt;P&gt;If I wire up the "TextChanged" event to a control on a windows form, I can serialize instances&amp;nbsp;of this class without worrying about it also trying to serialize the windows form as it does so.&lt;/P&gt;&lt;br /&gt;&lt;P&gt;Now implement the same class in C++/CLI:&lt;/P&gt;&lt;PRE&gt;[Serializable]&lt;br /&gt;public ref class TestClass2&lt;br /&gt;{&lt;br /&gt;public:&lt;br /&gt;    TestClass2(String^ text)&lt;br /&gt;        : text_(text)&lt;br /&gt;    {}&lt;br /&gt;&lt;br /&gt;    property String^ Text&lt;br /&gt;    {&lt;br /&gt;        String^ get()&lt;br /&gt;        {&lt;br /&gt;            return text_;&lt;br /&gt;        }&lt;br /&gt;        void set(String^ text)&lt;br /&gt;        {&lt;br /&gt;            if (text_ != text)&lt;br /&gt;            {&lt;br /&gt;                text_ = text;&lt;br /&gt;                TextChanged(this, gcnew EventArgs());&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    [field:NonSerialized]&lt;br /&gt;    event EventHandler^ TextChanged;&lt;br /&gt;&lt;br /&gt;private:&lt;br /&gt;    String^ text_;&lt;br /&gt;};&lt;br /&gt;&lt;/PRE&gt;&lt;br /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;br /&gt;&lt;P&gt;Wiring up&amp;nbsp;the "TextChanged" event of this class up to a windows form control and then try to serialize it causes a "Type 'Form1' in Assembly 'TestApp, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' is not marked as serializable" error. This occurs because the serializer has tried to serialize the event (and it's subscriber, the windows form) even though it was explicitly marked with the [field:NonSerialized] attribute.&lt;/P&gt;&lt;br /&gt;&lt;P&gt;I think this is just an error in the implementation of [field:NonSerialized] for C++ / CLI: I've tried using &lt;A href="http://www.aisto.com/roeder/dotnet/"&gt;Lutz Roeder's Reflector&lt;/A&gt; to look at the contents of the assemblies, and it does seem to show that the [field:NonSerialized] attribute is missing from the C++ version.&lt;/P&gt;&lt;br /&gt;&lt;P&gt;A work around is to implement the event explicitly in the C++ version of the class by implementing "add" and "remove", and providing a suitable [NonSerialized] delegate as the event's backing store. However, it would obviously be better if the&amp;nbsp;[field:NonSerialized] attribute worked correctly!&lt;/P&gt;&lt;br /&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;a href="https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=227571"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9610337-116073068907420333?l=stevemargetts.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevemargetts.blogspot.com/feeds/116073068907420333/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9610337&amp;postID=116073068907420333&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9610337/posts/default/116073068907420333'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9610337/posts/default/116073068907420333'/><link rel='alternate' type='text/html' href='http://stevemargetts.blogspot.com/2006/10/update-bug-has-been-fixed-now-thats.html' title=''/><author><name>Steve Margetts</name><uri>http://www.blogger.com/profile/14659994614281523642</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9610337.post-114622566471625496</id><published>2006-04-28T04:31:00.000-07:00</published><updated>2006-04-28T05:01:04.746-07:00</updated><title type='text'></title><content type='html'>The eclectic corners of the Web never cease to amaze. Take &lt;a href="http://www.fieggen.com/shoelace/index.htm"&gt;Ian's Shoelace Site&lt;/a&gt; for example: there's more information about shoelaces there than I ever thought possible. &lt;br /&gt;&lt;br /&gt;On the face of it, a website about shoelaces didn't sound very promising. But as I dug a little deeper, my inner boy-scout became fascinated by the different &lt;a href="http://www.fieggen.com/shoelace/slipping.htm"&gt;knots for shoelaces&lt;/a&gt;. I'm tempted to learn how to do the &amp;quot;&lt;a href="http://www.fieggen.com/shoelace/betterbowknot.htm"&gt;Better bow&lt;/a&gt;&amp;quot; just so that I don't have to spend as much tying my son's shoes...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9610337-114622566471625496?l=stevemargetts.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevemargetts.blogspot.com/feeds/114622566471625496/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9610337&amp;postID=114622566471625496&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9610337/posts/default/114622566471625496'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9610337/posts/default/114622566471625496'/><link rel='alternate' type='text/html' href='http://stevemargetts.blogspot.com/2006/04/eclectic-corners-of-web-never-cease-to.html' title=''/><author><name>Steve Margetts</name><uri>http://www.blogger.com/profile/14659994614281523642</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9610337.post-114104429623618029</id><published>2006-02-27T04:43:00.000-08:00</published><updated>2006-02-27T04:44:56.250-08:00</updated><title type='text'></title><content type='html'>A &lt;a href="http://www.transmogrifier.org/ch/comics/search.cgi"&gt;searchable Calvin and Hobbes online database&lt;/a&gt;: how cool is that?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9610337-114104429623618029?l=stevemargetts.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevemargetts.blogspot.com/feeds/114104429623618029/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9610337&amp;postID=114104429623618029&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9610337/posts/default/114104429623618029'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9610337/posts/default/114104429623618029'/><link rel='alternate' type='text/html' href='http://stevemargetts.blogspot.com/2006/02/searchable-calvin-and-hobbes-online.html' title=''/><author><name>Steve Margetts</name><uri>http://www.blogger.com/profile/14659994614281523642</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9610337.post-113957355617482808</id><published>2006-02-09T21:09:00.000-08:00</published><updated>2006-02-10T04:12:36.186-08:00</updated><title type='text'></title><content type='html'>This &lt;a href="http://video.google.com/videoplay?docid=8926325136071596338&amp;q="&gt;video&lt;/a&gt; shows that Rube Goldberg lives on in Halflife 2. This really shows off the possibilities of the physics engine (but it also proves that some people have way too much time on their hands...)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9610337-113957355617482808?l=stevemargetts.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevemargetts.blogspot.com/feeds/113957355617482808/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9610337&amp;postID=113957355617482808&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9610337/posts/default/113957355617482808'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9610337/posts/default/113957355617482808'/><link rel='alternate' type='text/html' href='http://stevemargetts.blogspot.com/2006/02/this-video-shows-that-rube-goldberg.html' title=''/><author><name>Steve Margetts</name><uri>http://www.blogger.com/profile/14659994614281523642</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9610337.post-113934182675703107</id><published>2006-02-07T11:48:00.000-08:00</published><updated>2006-02-07T11:50:26.766-08:00</updated><title type='text'></title><content type='html'>I've always been a big fan of Technical Lego, but Andrew Carol's &lt;a href="http://acarol.woz.org/"&gt;Lego Difference Engine&lt;/a&gt; is really quite amazing. Very impressive!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9610337-113934182675703107?l=stevemargetts.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevemargetts.blogspot.com/feeds/113934182675703107/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9610337&amp;postID=113934182675703107&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9610337/posts/default/113934182675703107'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9610337/posts/default/113934182675703107'/><link rel='alternate' type='text/html' href='http://stevemargetts.blogspot.com/2006/02/ive-always-been-big-fan-of-technical.html' title=''/><author><name>Steve Margetts</name><uri>http://www.blogger.com/profile/14659994614281523642</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9610337.post-113632208114108431</id><published>2006-01-03T13:00:00.000-08:00</published><updated>2006-01-03T13:02:03.970-08:00</updated><title type='text'>Update on Controlling GoogleEarth from JScript</title><content type='html'>It seems that &lt;a href="http://www.google.com"&gt;Google&lt;/a&gt; have updated their APIs in the newer versions of &lt;a href="http://earth.google.com/"&gt;GoogleEarth&lt;/a&gt;. However, the changes make the code I wrote in &lt;a href="http://stevemargetts.blogspot.com/2005/07/controling-google-earth-from-jscript.html"&gt;Controlling GoogleEarth from JScript&lt;/a&gt; even simpler:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&amp;lt;html&amp;gt;&lt;br /&gt;   &amp;lt;head&amp;gt;&lt;br /&gt;      &amp;lt;script&amp;gt;&lt;br /&gt;         function moveToCoordinates(lat, long)&lt;br /&gt;         {&lt;br /&gt;            try&lt;br /&gt;            {&lt;br /&gt;               googleEarth.setViewParams(lat,lon,1000,45,0,0,0.2);&lt;br /&gt;            }&lt;br /&gt;            catch (e)&lt;br /&gt;            {&lt;br /&gt;               alert(e.description);&lt;br /&gt;            }&lt;br /&gt;         }&lt;br /&gt;      &amp;lt;/script&amp;gt;&lt;br /&gt;   &amp;lt;/head&amp;gt;&lt;br /&gt;   &amp;lt;body&amp;gt;&lt;br /&gt;      &amp;lt;object&lt;br /&gt;         classid="clsid:AFD07A5E-3E20-4D77-825C-2F6D1A50BE5B"&lt;br /&gt;         id="googleEarth"&lt;br /&gt;      &amp;gt;&lt;br /&gt;      &amp;lt;/object&amp;gt;&lt;br /&gt;      &amp;lt;button&lt;br /&gt;         onclick="moveToCoordinates(51.5256937588635, -3.20453415360346)"&lt;br /&gt;      &amp;gt;&lt;br /&gt;         Go To Steve's House&lt;br /&gt;      &amp;lt;/button&amp;gt;&lt;br /&gt;   &amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;(Note that may need to enable ActiveX controls to get this to work. You'll also need to have Google Earth installed, and it might not work with nonIE browsers)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9610337-113632208114108431?l=stevemargetts.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevemargetts.blogspot.com/feeds/113632208114108431/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9610337&amp;postID=113632208114108431&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9610337/posts/default/113632208114108431'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9610337/posts/default/113632208114108431'/><link rel='alternate' type='text/html' href='http://stevemargetts.blogspot.com/2006/01/update-on-controlling-googleearth-from.html' title='Update on Controlling GoogleEarth from JScript'/><author><name>Steve Margetts</name><uri>http://www.blogger.com/profile/14659994614281523642</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9610337.post-113632202061435396</id><published>2006-01-03T12:55:00.000-08:00</published><updated>2006-01-03T13:00:20.636-08:00</updated><title type='text'></title><content type='html'>It seems that &lt;a href="http://www.google.com"&gt;Google&lt;/a&gt; have updated their APIs in the newer versions of &lt;a href="http://earth.google.com/"&gt;GoogleEarth&lt;/a&gt;. However, the changes make the code I wrote in &lt;a href="http://stevemargetts.blogspot.com/2005/07/controling-google-earth-from-jscript.html"&gt;Controlling GoogleEarth from JScript&lt;/a&gt; even simpler:&lt;br /&gt;&lt;br /&gt;(Note that may need to enable ActiveX controls to get this to work. You'll also need to have Google Earth installed, and it might not work with nonIE browsers)&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&amp;lt;html&amp;gt;&lt;br /&gt;   &amp;lt;head&amp;gt;&lt;br /&gt;      &amp;lt;script&amp;gt;&lt;br /&gt;         function moveToCoordinates(lat, long)&lt;br /&gt;         {&lt;br /&gt;            try&lt;br /&gt;            {&lt;br /&gt;               googleEarth.setViewParams(lat,lon,1000,45,0,0,0.2);&lt;br /&gt;            }&lt;br /&gt;            catch (e)&lt;br /&gt;            {&lt;br /&gt;               alert(e.description);&lt;br /&gt;            }&lt;br /&gt;         }&lt;br /&gt;      &amp;lt;/script&amp;gt;&lt;br /&gt;   &amp;lt;/head&amp;gt;&lt;br /&gt;   &amp;lt;body&amp;gt;&lt;br /&gt;      &amp;lt;object&lt;br /&gt;         classid="clsid:AFD07A5E-3E20-4D77-825C-2F6D1A50BE5B"&lt;br /&gt;         id="googleEarth"&lt;br /&gt;      &amp;gt;&lt;br /&gt;      &amp;lt;/object&amp;gt;&lt;br /&gt;      &amp;lt;button&lt;br /&gt;         onclick="moveToCoordinates(51.5256937588635, -3.20453415360346)"&lt;br /&gt;      &amp;gt;&lt;br /&gt;         Go To Steve's House&lt;br /&gt;      &amp;lt;/button&amp;gt;&lt;br /&gt;   &amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9610337-113632202061435396?l=stevemargetts.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevemargetts.blogspot.com/feeds/113632202061435396/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9610337&amp;postID=113632202061435396&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9610337/posts/default/113632202061435396'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9610337/posts/default/113632202061435396'/><link rel='alternate' type='text/html' href='http://stevemargetts.blogspot.com/2006/01/it-seems-that-google-have-updated.html' title=''/><author><name>Steve Margetts</name><uri>http://www.blogger.com/profile/14659994614281523642</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9610337.post-113171382967566494</id><published>2005-11-11T04:45:00.000-08:00</published><updated>2005-11-11T04:57:09.690-08:00</updated><title type='text'></title><content type='html'>Amazon have released a beta of their &lt;a href="http://www.amazon.com/gp/browse.html/104-6411693-2937545?node=15879911"&gt;Amazon Mechanical Turk&lt;/a&gt;. The idea is that they will use their micropayment system to reward people for completing tasks that computers are bad at. Their example involves classifying images: the user has to select which phot best represents a buisness on a high street.&lt;br /&gt;&lt;br /&gt;For the programmer, there's an API that you can use to add new items to the processing queue. And there seem to be various methods to validate that you're getting back useful information (and not a link to a network of bots). However, some people have &lt;a href="http://37signals.com/svn/archives2/amazons_new_artificial_artificial_intelligence.php?12#comments"&gt;raised concerns&lt;/a&gt; that this system could be used to defeat the &amp;quot;What words are in this picture&amp;quot; anti-spam measures that are used by Blogger and others.&lt;br /&gt;&lt;br /&gt;It's a fascinating idea though.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9610337-113171382967566494?l=stevemargetts.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevemargetts.blogspot.com/feeds/113171382967566494/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9610337&amp;postID=113171382967566494&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9610337/posts/default/113171382967566494'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9610337/posts/default/113171382967566494'/><link rel='alternate' type='text/html' href='http://stevemargetts.blogspot.com/2005/11/amazon-have-released-beta-of-their.html' title=''/><author><name>Steve Margetts</name><uri>http://www.blogger.com/profile/14659994614281523642</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9610337.post-113109510688858027</id><published>2005-11-04T00:47:00.000-08:00</published><updated>2005-11-04T01:05:06.900-08:00</updated><title type='text'></title><content type='html'>Microsoft has launched it's new range of &lt;a href="http://www.microsoft.com/learning/mcp/newgen/"&gt;certifications&lt;/a&gt;, targeted at the .NET framework 2.0. This new series of certifications looks to address some of the shortcomings of the old one: not all qualifications are exam-based (the &amp;quot;Architect&amp;quot; qualification requires a viva), and some require periodic recerification.&lt;br /&gt;&lt;br /&gt;The first exams are due in 2006; it'll be interesting to see what the takeup is like.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9610337-113109510688858027?l=stevemargetts.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevemargetts.blogspot.com/feeds/113109510688858027/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9610337&amp;postID=113109510688858027&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9610337/posts/default/113109510688858027'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9610337/posts/default/113109510688858027'/><link rel='alternate' type='text/html' href='http://stevemargetts.blogspot.com/2005/11/microsoft-has-launched-its-new-range.html' title=''/><author><name>Steve Margetts</name><uri>http://www.blogger.com/profile/14659994614281523642</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9610337.post-112773708958293152</id><published>2005-09-25T20:35:00.000-07:00</published><updated>2005-09-26T05:18:09.596-07:00</updated><title type='text'></title><content type='html'>I found Scott Berkun's essay &lt;a href="http://www.scottberkun.com/essays/essay46.htm"&gt;Why software sucks (And what to do about it)&lt;/a&gt; fascinating. He gives two laws that govern software construction:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;If you don’t apply the right skills at the right time, you will make things that suck.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;No matter what you do, someone, somewhere will think your software sucks.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;The first law could be rephrased as: &amp;quot;To a man with a hammer, everything looks like a nail&amp;quot;. In ther words, if the designer doesn't understand the user's problem domain, then the software is likely to suck.&lt;br /&gt;&lt;br /&gt;The second law basically says that you can't please everyone. His diagram says it all:&lt;br /&gt;&lt;img width="300" height="223" src="http://www.scottberkun.com/images/46-1.jpg"/&gt;&lt;br /&gt;&lt;br /&gt;He also some interesting things to say about the value of Computer Science degrees. I've often thought that &amp;quot;Computer Science&amp;quot; as a subject is of little practical value unless it's backed up with some domain knowledge, and he seems to agree:&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family:courier; font-size:9pt; margin-left:3em"&gt;&lt;br /&gt;Graduating with a degree in Computer science does not prevent you from making software that sucks. In fact it might increase the odds of suckage, since it gives you powerful skills to make something, but little understanding of how many factors contribute to making something good. A specialized degree gives you little awareness of the skills you don't have.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;There are some other essays on the same site that are well worth reading too. For example: &lt;a href="http://www.scottberkun.com/essays/essay43.htm"&gt;How to survive a bad manager&lt;/a&gt; and &lt;a href="http://"&gt;How to learn from your mistakes&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9610337-112773708958293152?l=stevemargetts.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevemargetts.blogspot.com/feeds/112773708958293152/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9610337&amp;postID=112773708958293152&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9610337/posts/default/112773708958293152'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9610337/posts/default/112773708958293152'/><link rel='alternate' type='text/html' href='http://stevemargetts.blogspot.com/2005/09/i-found-scott-berkuns-essay-why.html' title=''/><author><name>Steve Margetts</name><uri>http://www.blogger.com/profile/14659994614281523642</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9610337.post-112246490812549271</id><published>2005-07-27T04:35:00.000-07:00</published><updated>2005-07-27T04:48:28.133-07:00</updated><title type='text'>ClearSpeed co-processor</title><content type='html'>I'd love to have a play with one of &lt;a href="http://www.clearspeed.com/"&gt;these&lt;/a&gt;: it's a 96 element, 25 GFLOP co-processor you can stick in your PC. The company also provides a software development environment for it (for C), as well as ports of several linear algebra libraries (&lt;a href="http://www.mathworks.com/"&gt;MatLab&lt;/a&gt;, &lt;a href="http://www.netlib.org/blas/"&gt;BLAS&lt;/a&gt;, and so forth). No mention of cost on the site though.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9610337-112246490812549271?l=stevemargetts.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevemargetts.blogspot.com/feeds/112246490812549271/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9610337&amp;postID=112246490812549271&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9610337/posts/default/112246490812549271'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9610337/posts/default/112246490812549271'/><link rel='alternate' type='text/html' href='http://stevemargetts.blogspot.com/2005/07/clearspeed-co-processor.html' title='ClearSpeed co-processor'/><author><name>Steve Margetts</name><uri>http://www.blogger.com/profile/14659994614281523642</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9610337.post-112185043966773418</id><published>2005-07-20T02:06:00.000-07:00</published><updated>2005-07-20T02:51:36.846-07:00</updated><title type='text'>Controling Google Earth from JScript</title><content type='html'>Simon's recent post on &lt;a href="http://simonchapman.blogspot.com/2005/07/controlling-google-earth-from-c.html"&gt;controlling Google Earth from C++&lt;/a&gt; got me thinking about doing the same thing in JScript. It turns out it's pretty easy: you just need set up an &amp;lt;object&amp;gt; element with the right class id. As an example, here's a small HTML document that launches &lt;a href="http://earth.google.com/"&gt;Google Earth&lt;/a&gt; and then navigates to my house on the click of a button:&lt;br /&gt;&lt;br /&gt;(Note that may need to enable ActiveX controls to get this to work. You'll also need to have Google Earth installed too)&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&amp;lt;html&amp;gt;&lt;br /&gt;   &amp;lt;head&amp;gt;&lt;br /&gt;      &amp;lt;script&amp;gt;&lt;br /&gt;         function moveToCoordinates(lat, long)&lt;br /&gt;         {&lt;br /&gt;            try&lt;br /&gt;            {&lt;br /&gt;               var viewInfo = googleEarth.currentView;&lt;br /&gt;               viewInfo.latitude = lat;&lt;br /&gt;               viewInfo.longitude = long;&lt;br /&gt;               viewInfo.range = 1000;&lt;br /&gt;               viewInfo.tilt = 45;&lt;br /&gt;               viewInfo.azimuth = 30;&lt;br /&gt;               googleEarth.setView(viewInfo, 0.1);&lt;br /&gt;            }&lt;br /&gt;            catch (e)&lt;br /&gt;            {&lt;br /&gt;               alert(e.description);&lt;br /&gt;            }&lt;br /&gt;         }&lt;br /&gt;      &amp;lt;/script&amp;gt;&lt;br /&gt;   &amp;lt;/head&amp;gt;&lt;br /&gt;   &amp;lt;body&amp;gt;&lt;br /&gt;      &amp;lt;object&lt;br /&gt;         classid="clsid:AFD07A5E-3E20-4D77-825C-2F6D1A50BE5B"&lt;br /&gt;         id="googleEarth"&lt;br /&gt;      &amp;gt;&lt;br /&gt;      &amp;lt;/object&amp;gt;&lt;br /&gt;      &amp;lt;button&lt;br /&gt;         onclick="moveToCoordinates(51.5256937588635, -3.20453415360346)"&lt;br /&gt;      &amp;gt;&lt;br /&gt;         Go To Steve's House&lt;br /&gt;      &amp;lt;/button&amp;gt;&lt;br /&gt;   &amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;(Interestingly, inserting the &amp;lt;object&amp;gt; element into this post causes Google Earth to launch everytime this blog entry loads).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9610337-112185043966773418?l=stevemargetts.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevemargetts.blogspot.com/feeds/112185043966773418/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9610337&amp;postID=112185043966773418&amp;isPopup=true' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9610337/posts/default/112185043966773418'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9610337/posts/default/112185043966773418'/><link rel='alternate' type='text/html' href='http://stevemargetts.blogspot.com/2005/07/controling-google-earth-from-jscript.html' title='Controling Google Earth from JScript'/><author><name>Steve Margetts</name><uri>http://www.blogger.com/profile/14659994614281523642</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9610337.post-111875183793707431</id><published>2005-06-14T05:15:00.000-07:00</published><updated>2005-06-14T06:56:19.056-07:00</updated><title type='text'>Gnod</title><content type='html'>&lt;a href="http://www.gnod.net/"&gt;Gnod&lt;/a&gt; is fascinating: it attempts to use AI techniques to identify similarities between books, films and music. There are very few details about how it works, but it claims to be driven purely by user feedback. But based on the way the entities dance around the music map, my guess is that it's powered by a &lt;a href="http://www.cs.bham.ac.uk/resources/courses/SEM2A2/Web/Kohonen.htm"&gt;Kohonen network&lt;/a&gt;. If so, it's the first really useful example of automatic clustering and unsupervised learning techniques that I've seen.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.gnoosic.com/"&gt;Gnoosic&lt;/a&gt;, the music component of Gnod, can suggest bands that are similar to bands that you already know about. Even better, the &lt;a href="http://www.music-map.com/"&gt;Music Map&lt;/a&gt; component can generate a visual representation of how close various bands are to a source band. As a quick test, generating the map for &lt;a href="http://www.u2.com"&gt;U2&lt;/a&gt; gives &lt;a href="http://www.remhq.com/"&gt;R.E.M&lt;/a&gt;, &lt;a href="http://www.stingetc.com/"&gt;Police&lt;/a&gt;, &lt;a href="http://www.inxs.com"&gt;Inxs&lt;/a&gt; and &lt;a href="http://www.stingetc.com/"&gt;Sting&lt;/a&gt; as nearest neighbours, which seems pretty good.&lt;br /&gt;&lt;br /&gt;Gnod can also generate maps for films (&lt;a href="http://www.gnovies.com/"&gt;Gnovies&lt;/a&gt;) and authors (&lt;a href="http://www.gnooks.com/"&gt;Gnooks&lt;/a&gt;). The data for authors seems pretty good (looking for &lt;a href="http://www.clarkefoundation.org/"&gt;Arthur C Clarke&lt;/a&gt; finds &lt;a href="http://www.asimovonline.com/"&gt;Azimov&lt;/a&gt;, &lt;a href="http://www.douglasadams.com/"&gt;Douglas Adams&lt;/a&gt;, &lt;a href="http://www.hatrack.com/"&gt;Orson Scott Card&lt;/a&gt; and so on), but the one for films seems to be a bit random (searching for &lt;a href="http://disney.go.com/disneyvideos/andysroom/"&gt;Toy Story&lt;/a&gt; returned &lt;a href="http://www.imdb.com/title/tt0087843/"&gt;Once Upon a Time In America&lt;/a&gt; as the closest match)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9610337-111875183793707431?l=stevemargetts.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevemargetts.blogspot.com/feeds/111875183793707431/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9610337&amp;postID=111875183793707431&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9610337/posts/default/111875183793707431'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9610337/posts/default/111875183793707431'/><link rel='alternate' type='text/html' href='http://stevemargetts.blogspot.com/2005/06/gnod.html' title='Gnod'/><author><name>Steve Margetts</name><uri>http://www.blogger.com/profile/14659994614281523642</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9610337.post-111822300714744874</id><published>2005-06-08T02:01:00.000-07:00</published><updated>2005-06-08T03:40:22.113-07:00</updated><title type='text'>Joel on Software</title><content type='html'>&lt;a href="http://www.joelonsoftware.com/"&gt;Joel Spolsky&lt;/a&gt; has had an interesting career, having worked for both Microsoft and Viacom. His blog &lt;a href="http://www.joelonsoftware.com/"&gt;Joel on Software&lt;/a&gt; covers a wide range of things, but his thoughts on software development are pretty entertaining. As an example, &lt;a href="http://www.joelonsoftware.com/articles/fog0000000043.html"&gt;The Joel Test: 12 Steps to Better Code&lt;/a&gt; is excellent, as is &lt;a href="http://www.joelonsoftware.com/articles/fog0000000067.html"&gt;Top Five (Wrong) Reasons You Don't Have Testers&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I particularly liked his &lt;a href="http://www.joelonsoftware.com/navLinks/fog0000000262.html"&gt;programmer's reccomended reading list&lt;/a&gt;, which outlines pretty much all the classic texts on software development and user interface design I've ever heard of. It's a good source of brain food.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9610337-111822300714744874?l=stevemargetts.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevemargetts.blogspot.com/feeds/111822300714744874/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9610337&amp;postID=111822300714744874&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9610337/posts/default/111822300714744874'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9610337/posts/default/111822300714744874'/><link rel='alternate' type='text/html' href='http://stevemargetts.blogspot.com/2005/06/joel-on-software.html' title='Joel on Software'/><author><name>Steve Margetts</name><uri>http://www.blogger.com/profile/14659994614281523642</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9610337.post-111485178316891169</id><published>2005-04-30T01:49:00.000-07:00</published><updated>2005-04-30T02:05:34.550-07:00</updated><title type='text'>More election fun</title><content type='html'>Ever thought that there was no point in voting for your favourite political party because there was no chance of them getting in? Well, the the &lt;a href="http://www.tacticalvoter.net/"&gt;tactical voter&lt;/a&gt; website provides an interesting way to make your vote count by swapping it with someone else. The webiste describes how it works as follows:&lt;br /&gt;&lt;br /&gt;&lt;div style="MARGIN-LEFT: 3em"&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;In the past, a Liberal Democrat in a seat where his party were running third and had no prospect of winning had two choices: vote LibDem, knowing his vote would be thrown away; or vote tactically for the Labour Party to try and prevent a Conservative from winning.&lt;br /&gt;&lt;br /&gt;Vote swapping offers a new option: use the Internet to find a Labour supporter stranded somewhere Labour can't win, and make a pact to &amp;quot;swap&amp;quot; votes, support each other's parties and have the best chance of beating the Conservatives in both seats.&lt;br /&gt;&lt;br /&gt;That way, you get a tactical vote for your party in exchange: two votes that can make a difference instead of two votes that are thrown away.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Vote swapping has a long history, for more details see &lt;a href="http://www.newscientist.com/channel/opinion/mg18624974.700"&gt;this article&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9610337-111485178316891169?l=stevemargetts.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevemargetts.blogspot.com/feeds/111485178316891169/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9610337&amp;postID=111485178316891169&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9610337/posts/default/111485178316891169'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9610337/posts/default/111485178316891169'/><link rel='alternate' type='text/html' href='http://stevemargetts.blogspot.com/2005/04/more-election-fun.html' title='More election fun'/><author><name>Steve Margetts</name><uri>http://www.blogger.com/profile/14659994614281523642</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9610337.post-111460283041950689</id><published>2005-04-27T04:53:00.000-07:00</published><updated>2005-04-28T02:33:06.416-07:00</updated><title type='text'>C++ Template Metaprogramming</title><content type='html'>I've just finished reading &lt;a href="http://www.amazon.co.uk/exec/obidos/redirect?tag=willswords-21&amp;creative=6738&amp;camp=1634&amp;link_code=ur2&amp;path=ASIN/0321227255/qid=1114602352/sr=8-1/ref=sr_8_xs_ap_i1_xgl"&gt;C++ Template Metaprogramming: Concepts, Tools, and Techniques from Boost and Beyond&lt;/a&gt;&lt;img src="http://www.assoc-amazon.co.uk/e/ir?t=willswords-21&amp;l=ur2&amp;o=2" width="1" height="1" border="0" alt="" /&gt;, and I'll admit it's blown my mind. I had no idea that the template resolution system in C++ could be so powerful. C++ is a huge language, but this book makes me realise that it's a lot bigger than I expected.&lt;br /&gt;&lt;br /&gt;In my first year in University we were taught &lt;a href="http://www.engin.umd.umich.edu/CIS/course.des/cis400/miranda/miranda.html"&gt;Miranda&lt;/a&gt;, a &lt;a href="http://en.wikipedia.org/wiki/Functional_programming"&gt;functional programming language&lt;/a&gt;. At the time we wondered why we were being taught a relatively unknown language with few real practical applications. The functional aspects of Miranda made it very different to the the &lt;a href="http://en.wikipedia.org/wiki/Procedural_programming_language"&gt;procedural languages&lt;/a&gt; that most of us had encountered previously (which was of course one of the reasons why they taught it to us). However, I'm very glad that we were taught Miranda all those years ago, as it's made understanding the concepts of other functional langauges such as &lt;a href="http://www.w3.org/TR/xslt"&gt;XSLT&lt;/a&gt; and now the &lt;a href="http://www.boost.org/libs/mpl/doc/index.html"&gt;Boost MPL&lt;/a&gt; much easier.&lt;br /&gt;&lt;br /&gt;The book is well presented and readable, and it provides a great overview of what template metaprogramming is all about and how the Boost MPL can help you. The middle sections of the book go into the details of how and why the MPL works; if you find this heavy going then I suggest you read the first few chapters and the last few, as these concentrate on the uses of template metaprogramming in C++.&lt;br /&gt;&lt;br /&gt;I particularly liked the concept of Domain Specific Embedded Languages (DSEL) which are outlined in the last few chapters. In essence these are micro-programming languages for specific problem domains that are embedded in C++. As an example, the last chapter shows how to implementate a language to generate finite state machines using the MPL. The implementation ends up being beautifully efficient as most of the work is done at compile time.&lt;br /&gt;&lt;br /&gt;This book is well worth reading, but you'll need a good understanding of templates to do so.&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://rcm-uk.amazon.co.uk/e/cm?t=willswords-21&amp;o=2&amp;p=8&amp;l=as1&amp;asins=0321227255&amp;fc1=FFFFFF&amp;=1&amp;lc1=FF3300&amp;bc1=000000&amp;lt1=_blank&amp;IS2=1&amp;f=ifr&amp;bg1=000000" width="120" height="240" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;br /&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9610337-111460283041950689?l=stevemargetts.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevemargetts.blogspot.com/feeds/111460283041950689/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9610337&amp;postID=111460283041950689&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9610337/posts/default/111460283041950689'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9610337/posts/default/111460283041950689'/><link rel='alternate' type='text/html' href='http://stevemargetts.blogspot.com/2005/04/c-template-metaprogramming.html' title='C++ Template Metaprogramming'/><author><name>Steve Margetts</name><uri>http://www.blogger.com/profile/14659994614281523642</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9610337.post-111391031369863073</id><published>2005-04-19T04:18:00.000-07:00</published><updated>2005-04-19T04:33:12.100-07:00</updated><title type='text'>Election fun</title><content type='html'>Lots of fun politcal websites have appeared following the announcement of the general election next month. These came from a friend.&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://www.politicalcompass.org/"&gt;Political Compass&lt;/a&gt; website has a test that measures where you lie on a 2-dimensional political scale. The 2-d scale combines the usual right / left distinction with an authoritarian / libertarian scale. I came out as a libertarian lefty with roughly the same political stance as Nelson Mandela.&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://www.whoshouldyouvotefor.com/"&gt;Who Should You Vote For&lt;/a&gt; website asks you questions about various issues (healthcare, European union etc.) and then compares your answer with the manifestos of the five main UK political parties (Labour, Conservatives, Liberal Democrats, UK Independence Party and the Green party). I should vote for the Lib Dems, apparently.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9610337-111391031369863073?l=stevemargetts.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevemargetts.blogspot.com/feeds/111391031369863073/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9610337&amp;postID=111391031369863073&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9610337/posts/default/111391031369863073'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9610337/posts/default/111391031369863073'/><link rel='alternate' type='text/html' href='http://stevemargetts.blogspot.com/2005/04/election-fun.html' title='Election fun'/><author><name>Steve Margetts</name><uri>http://www.blogger.com/profile/14659994614281523642</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9610337.post-111168384541370924</id><published>2005-03-24T08:56:00.000-08:00</published><updated>2005-03-24T09:04:05.413-08:00</updated><title type='text'>Terminating Windows processes from code</title><content type='html'>&lt;a href="http://simonchapman.blogspot.com/"&gt;Simon&lt;/a&gt; found a great article by &lt;a href="http://www.alexfedotov.com"&gt;Alex Fedotov&lt;/a&gt; on &lt;a href="http://www.alexfedotov.com/articles/killproc.asp"&gt;terminating Windows processes from code&lt;/a&gt;. He also gives a function which can be used to terminate the entire process tree, much like the function available in TaskManger.&lt;br /&gt;&lt;br /&gt;There's a related article on &lt;a href="http://www.codeproject.com"&gt;The Code Project&lt;/a&gt; by &lt;a href="http://www.codeproject.com/threads/killprocess.asp"&gt;Eugene Polonsky&lt;/a&gt; which uses Alex Fedotov's ideas to make a function which kills processes by name.&lt;br /&gt;&lt;br /&gt;There's also a great article on &lt;a href="http://support.microsoft.com/default.aspx?scid=KB;en-us;q178893"&gt;MSDN&lt;/a&gt; about how to terminate applications in Win32.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9610337-111168384541370924?l=stevemargetts.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevemargetts.blogspot.com/feeds/111168384541370924/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9610337&amp;postID=111168384541370924&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9610337/posts/default/111168384541370924'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9610337/posts/default/111168384541370924'/><link rel='alternate' type='text/html' href='http://stevemargetts.blogspot.com/2005/03/terminating-windows-processes-from.html' title='Terminating Windows processes from code'/><author><name>Steve Margetts</name><uri>http://www.blogger.com/profile/14659994614281523642</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9610337.post-111011036743593215</id><published>2005-03-06T03:32:00.000-08:00</published><updated>2005-03-06T09:07:07.496-08:00</updated><title type='text'>MSDN technical briefing: Visual Studio Team System (4th March 2005, London)</title><content type='html'>&lt;span style="font-family:verdana;"&gt;I attended an MSDN briefing on &lt;a href="http://lab.msdn.microsoft.com/teamsystem/"&gt;Visual Studio 2005 Team System&lt;/a&gt; on Friday. The briefing was given by &lt;/span&gt;&lt;span style="font-family:verdana;"&gt;&lt;a href="http://spaces.msn.com/members/hansusblogolus/"&gt;Hans Verbeeck&lt;/a&gt;, Ajay Sudan and Sean Puffett (I can't find blogs for the last two presenters), and its purpose was to give an overview of Team System. The day included several demos of the product, lots of free biscuits and coffee and was held in the pleasant (but underground) surroundings of the &lt;a href="http://www.cavendishconference.com"&gt;Cavendish Conference Centre&lt;/a&gt;. &lt;/span&gt;&lt;span style="font-family:verdana;"&gt;There's lots of information about what Team System does at the MSDN website, so I won't try and explain it all here. Instead I'll try and give some details of the bits I found interesting.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;strong&gt;Overview&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;The initial offering for Team System will be as four separate products. Three of these will be versions of Visual Studio tuned to different roles in the development process: &lt;a href="http://lab.msdn.microsoft.com/teamsystem/teamcenters/architect/default.aspx"&gt;Architect&lt;/a&gt;, &lt;a href="http://lab.msdn.microsoft.com/teamsystem/teamcenters/developer/default.aspx"&gt;Developer&lt;/a&gt;, and &lt;a href="http://lab.msdn.microsoft.com/teamsystem/teamcenters/tester/default.aspx"&gt;Tester&lt;/a&gt;. These three versions share various components with each other, but I imagine the Developer version will be the most popular. The fourth part is the Team System Foundation Server, which is the SQL Server -based back-end of Team System.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;A little was mentioned about the pricing structure of the clients: MSDN Universal subscribers will be able to get a Team System client for a "small additional cost". However, each subscriber will only be able to have one of the three client versions (Architect, Developer, Tester); the Team Foundation Server will have to be purchased separately. I suspect that upgrading from an MSDN Universal license to a Team System license will be cheaper than purchasing it outright.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;strong&gt;Demos&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;The demo of the Developer client showed off some really nice features, such as static code analysis (based on &lt;a href="http://www.gotdotnet.com/team/fxcop/"&gt;FXCop&lt;/a&gt;: apparently the guy who developed it now works for Microsoft), unit testing and so on. &lt;/span&gt;&lt;span style="font-family:verdana;"&gt;The static analysis module allows you to run a set of rules against the source code on compilation. This allows you to generate warning for things like the capitalization of variable names, but it can also spot other things like potentially unsafe pointer artimetic or array traversals (and it runs on native and managed code). All these rules can be tried to the checkin policy, so you can set up rules to only allow a checkin if all the static code checker tests pass.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;The unit test facilities are also great (the actual tests are compatible with those used by &lt;a href="http://www.nunit.org/"&gt;NUnit&lt;/a&gt;). You can automatically create template unit tests at the namespace, class and method level simply by right-cicking on the appropriate part of the code. These tests can be built into a separate project, which you can choose to run at the end of every build. Again, you can set up checkin policies to prevent code being checked in that fails a unit test.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;We also saw some of the features of the source control system. Being built on Sql Server, it scale pretty well (apparently, the entire Team System group is already using it, and they're planning to roll it out to the other Microsoft development groups this year). It gives you all the standard source control things such as merging, branching, parallel development and the like. They also have a client that runs over HTTP , so remote development isn't a problem. One nice feature is the ability to "shelve" currently checked-out files: this sends them back to the server for safe-keeping but doesn't check them in. Amongst other things, it allows you to easily return to where you are if you're interrupted while working on a given task.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;As an aside, I was somewhat surprised to hear that they are still going to support Visual Source Safe: version 8 will ship with Visual Studio .NET 2005. They said that for teams of five or less, there was no reason to upgrade to Team System. That said, Team System is able to import a Source Safe database, so upgrading should be simple if required.&lt;/span&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-family:Verdana;"&gt;We also saw some of the reports that the Team System Foundation Server generates. Each project has its own "project webpage", built on Windows SharePoint Services, which can hold dynamic information about the status of a project. The build automation tools will automatically generate a large number of statistics at the end of each nightly build (things like unit test code coverage, code churn, number of bugs fixed, number of bug outstanding and so on). These statistics can be graphed and published to the SharePoint (or wherever) using standard SQL Server reporting facilities. These reports are intended to let a project manager (or other stakeholder) get an insight into the development process without needing to arrange a status meeting. It all looked pretty good, but the demo was a bit brief and I'd have to see it in action on a real project before making any conclusions.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Verdana;"&gt;The other demo that caught my eye was on Work Item Tracking. A "Work Item" in Team System speak is any unit of work (bug, feature, task, etc), and they're managed rather like tasks in Outlook. The nice things about Team System is the integration of work items throughout the entire product suite: testers can create work items for failed test cases, product managers can group work items into features, the automated build system will create work items for failed builds and so on. Work items appear to be very customizable - they're described using a bit of XML which makes it very easy to add new fields, rules, forms or states. They are also well integrated with other Office tools such as MS Outlook, MS Excel and MS Project. This makes it possible for a Project Manager to work with work items without firing up Visual Studio.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Verdana;"&gt;&lt;strong&gt;Thoughts and musings&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:verdana;"&gt;Two messages came over particularly strongly at the conference. The first is that they have big plans for their next release. Somewhat disappointingly, the current release does not seem to have much support for C++ (for example, there's no support for C++ in the class designer). But the next &lt;a href="http://msdn.microsoft.com/vstudio/productinfo/roadmap.aspx"&gt;version&lt;/a&gt; will have this much more - it promises to be something really special.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:verdana;"&gt;The second message that came across was that Team System is easily customizable. It appears that everything can be customized in some way or other, either by tweaking an XML file somewhere or by writing code to access an API. The most striking example of this is the ability to fit Team System to whatever process you're currently using. The boxed version of Team System ships with the &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnvsent/html/vsts-msf.asp"&gt;Microsoft Solutions Framework&lt;/a&gt; and two process templates (one formal, one Agile), but you can easily extend these or add your own. &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Verdana;"&gt;it was well worth attending this conference, and I'd consider going to other technical briefings on the strength of this one. If you're interested, t&lt;/span&gt;&lt;span style="font-family:Verdana;"&gt;he slides used at the conference will be available &lt;a href="http://www.microsoft.com/uk/msdn/postevents"&gt;here&lt;/a&gt; from the 10th of March onward.&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9610337-111011036743593215?l=stevemargetts.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevemargetts.blogspot.com/feeds/111011036743593215/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9610337&amp;postID=111011036743593215&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9610337/posts/default/111011036743593215'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9610337/posts/default/111011036743593215'/><link rel='alternate' type='text/html' href='http://stevemargetts.blogspot.com/2005/03/msdn-technical-briefing-visual-studio.html' title='MSDN technical briefing: Visual Studio Team System (4th March 2005, London)'/><author><name>Steve Margetts</name><uri>http://www.blogger.com/profile/14659994614281523642</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9610337.post-110953645767761428</id><published>2005-02-27T12:07:00.000-08:00</published><updated>2005-02-27T12:34:17.680-08:00</updated><title type='text'>Keyhole</title><content type='html'>&lt;span style="font-family:verdana;"&gt;&lt;a href="http://www.google.com"&gt;Google&lt;/a&gt; acquired &lt;/span&gt;&lt;span style="font-family:verdana;"&gt;&lt;a href="http://www.keyhole.com/"&gt;Keyhole&lt;/a&gt; in October 2004 (as described in &lt;a href="http://www.google.com/press/pressrel/keyhole.html"&gt;this&lt;/a&gt; press release), and it looks like they've continued to develop it. It's a portal to a vast archive of satellite imagery (currently over 12 Terrabytes). It makes good use of the power of modern graphics cards to display satellite (and other) images overlayed on height-mapped terrain in realtime: you can zoom in from space and fly through the streets if you want to. &lt;/span&gt;&lt;span style="font-family:verdana;"&gt;In this respect it's similar to NASA's &lt;a href="http://worldwind.arc.nasa.gov/"&gt;Worldwind&lt;/a&gt;, but the data appears to be of higher resolution.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;One feature that caught my eye is the ability to drape your own images over the terrain. I can imagine lots of uses for this sort of technology, especially if they let you add push-pins and images programatically.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;It will be interesting to see where Google decide to take application, and to see what they do with the obvious synergy with &lt;a href="http://simonchapman.blogspot.com/2005/02/google-maps.html"&gt;Google Maps&lt;/a&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9610337-110953645767761428?l=stevemargetts.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevemargetts.blogspot.com/feeds/110953645767761428/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9610337&amp;postID=110953645767761428&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9610337/posts/default/110953645767761428'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9610337/posts/default/110953645767761428'/><link rel='alternate' type='text/html' href='http://stevemargetts.blogspot.com/2005/02/keyhole.html' title='Keyhole'/><author><name>Steve Margetts</name><uri>http://www.blogger.com/profile/14659994614281523642</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9610337.post-110932365320309974</id><published>2005-02-25T01:13:00.000-08:00</published><updated>2005-02-25T01:27:33.206-08:00</updated><title type='text'>ITArchitect: Distributed System Designers in Visual Studio Team System</title><content type='html'>&lt;span style="font-family:verdana;"&gt;There are some great technical articles on &lt;/span&gt;&lt;a href="http://www.itarchitect.co.uk/articles/"&gt;&lt;span style="font-family:verdana;"&gt;ITArchitect&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:verdana;"&gt;, including an interesting overview of the &lt;/span&gt;&lt;a href="http://www.itarchitect.co.uk/articles/display.asp?id=126"&gt;&lt;span style="font-family:verdana;"&gt;Distributed System Designers&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:verdana;"&gt; in Microsoft's forthcoming &lt;/span&gt;&lt;a href="http://lab.msdn.microsoft.com/teamsystem/"&gt;&lt;span style="font-family:verdana;"&gt;Visual Studio Team System&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:verdana;"&gt;. These design tools let you visualise and configure the layout of a distributed application. &lt;/span&gt;&lt;span style="font-family:verdana;"&gt;There's a more detailed overview on the MSDN site &lt;/span&gt;&lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnvsent/html/vsts-over.asp"&gt;&lt;span style="font-family:verdana;"&gt;here&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:verdana;"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9610337-110932365320309974?l=stevemargetts.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevemargetts.blogspot.com/feeds/110932365320309974/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9610337&amp;postID=110932365320309974&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9610337/posts/default/110932365320309974'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9610337/posts/default/110932365320309974'/><link rel='alternate' type='text/html' href='http://stevemargetts.blogspot.com/2005/02/itarchitect-distributed-system.html' title='ITArchitect: Distributed System Designers in Visual Studio Team System'/><author><name>Steve Margetts</name><uri>http://www.blogger.com/profile/14659994614281523642</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9610337.post-110915711944012264</id><published>2005-02-23T03:00:00.000-08:00</published><updated>2005-02-23T03:13:19.586-08:00</updated><title type='text'>SkyScanner</title><content type='html'>&lt;a href="http://www.skyscanner.net"&gt;&lt;span style="font-family:verdana;"&gt;Skyscanner&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:verdana;"&gt; is a meta search engine that searches the websites of the low-cost airlines and collates the results in useful ways. It's a great example of how data can be harvested from multiple sources on the web, combined and presented to the user in simple but useful fashion. For example, you can look at a specific route such as "Cardiff to Paris" and see how the cost of the cheapest tickets varies over the a given month. Or you can choose a specific date or weekend and look at where you could go on that date. They also provide links to allow you to recheck the prices and book tickets.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Arial;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9610337-110915711944012264?l=stevemargetts.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevemargetts.blogspot.com/feeds/110915711944012264/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9610337&amp;postID=110915711944012264&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9610337/posts/default/110915711944012264'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9610337/posts/default/110915711944012264'/><link rel='alternate' type='text/html' href='http://stevemargetts.blogspot.com/2005/02/skyscanner.html' title='SkyScanner'/><author><name>Steve Margetts</name><uri>http://www.blogger.com/profile/14659994614281523642</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9610337.post-110513151067167184</id><published>2005-01-07T11:40:00.000-08:00</published><updated>2005-01-09T10:19:12.936-08:00</updated><title type='text'>Microsoft Certification: 070-316</title><content type='html'>&lt;span style="font-family:verdana;"&gt;I became a &lt;a href="http://www.microsoft.com/learning/mcp/mcp/default.asp"&gt;Microsoft Certified Professional&lt;/a&gt; earlier today, after passing the exam "&lt;/span&gt;&lt;span style="font-family:Verdana;"&gt;&lt;a href="http://www.microsoft.com/learning/exams/70-316.asp"&gt;70-316 Developing and Implementing Windows-based Applications with Microsoft Visual C# .NET and Microsoft Visual Studio .NET&lt;/a&gt;". It wasn't easy, but then I didn't expect it to be: it's taken me one day a week for the past six months to prepare for it. I'm very pleased that I passed!&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;Why did I do it? I've always enjoyed learning new things, and I've wanted to learn .NET for a long while now. &lt;/span&gt;&lt;span style="font-family:Verdana;"&gt;Having the exam to work towards helped keep me interested and gave me something to aim for.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Georgia;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;How did I do it? The main source I used in preparation was Amit Kalani's excellent book "&lt;/span&gt;&lt;span style="font-family:Verdana;"&gt;&lt;a href="http://www.amazon.co.uk/exec/obidos/ASIN/0789728230/qid=1105127100/sr=1-3/ref=sr_1_3_3/026-9639385-4476460"&gt;MCAD Training Guide 70-316: Developing and Implementing Windows-based Applications with C# and Visual Studio.NET&lt;/a&gt;". This covers most of what you need to know for the exam, and serves as an excellent introduction to the .NET framework as it's very clear and well written. As well as the source material, the book contains lots of tutorials and hands-on sessions which help explain and illustrate the concepts. It also details the certification process and offers hints and tips for the exam itself.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;To help you pass the exam, the book also contains around 15 &lt;/span&gt;&lt;span style="font-family:Verdana;"&gt;practice questions at the end of each chapter, and a full practice test at the end of the book. I found these to be very helpful when revising (although I must say that the actual questions are somewhat harder than those in the book!). &lt;/span&gt;&lt;span style="font-family:Verdana;"&gt;The book also comes with a CD which contains the entire contents of the book in both PDF and Microsoft Word formats which is useful when trying to find topics during revision. &lt;/span&gt;&lt;span style="font-family:Verdana;"&gt;The CD also comes with a practice test from &lt;/span&gt;&lt;span style="font-family:Verdana;"&gt;&lt;a href="http://www.preplogic.com/"&gt;PrepLogic&lt;/a&gt;, but I wouldn't reccomend it - as well as being out of date, it's also very difficult to use, particularly with long questions as it's hard to get enough of the question on the screen to see it.&lt;/span&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-family:Verdana;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Verdana;"&gt;The other resource I made a lot of use of is the online documentation at &lt;a href="http://msdn.microsoft.com/"&gt;MSDN&lt;/a&gt;. The exam requires you to know most obscure things about the class library, and this is the best place to get this type of information. I can particularly reccomend the series of articles under the "Programming with the .NET framework" entry.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;/span&gt;&lt;span style="font-family:Verdana;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;If you look around, there are hundreds of vendors selling exam simulation software for Microsoft Certification exams. Some, such as "&lt;a href="http://www.measureup.com"&gt;MeasureUp&lt;/a&gt;" are recommended by Microsoft itself; most will let you download an evaluation version of their software for free. &lt;/span&gt;&lt;span style="font-family:Verdana;"&gt;I used the simulator provided by &lt;/span&gt;&lt;span style="font-family:Verdana;"&gt;&lt;a href="http://www.transcender.com/"&gt;Trancender&lt;/a&gt;; I found theirs to be the best, but your milage may vary. I found the detailed explainations about why a particular answer was correct (or not) be be particularly helpful. They also &lt;/span&gt;&lt;span style="font-family:Verdana;"&gt;bundled a copy of their Flash Review software with the simulator - this is a set of around 400 questions and answers that operate as computerised flash-cards, and it was also useful in preparation.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;Finally, the exam itself isn't free. &lt;a href="http://www.vue.com/"&gt;Pearson Vue&lt;/a&gt; charges £103.40 (£88 + VAT) for each exam, but you can do better by looking around. I got an international Pearson VUE voucher from &lt;/span&gt;&lt;span style="font-family:Verdana;"&gt;&lt;a href="http://www.getcertify4less.com/"&gt;GetCertify4Less&lt;/a&gt; for $165, and this came with a free download of the exam simulation software from &lt;a href="http://www.transcender.com/"&gt;Trancender&lt;/a&gt;. It's still a lot of money, but the exchange rate was in my favour and anything is better than paying full price. (Interestingly, you can get exam vouchers far cheaper in the States than in the UK).&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;/span&gt;&lt;span style="font-family:Verdana;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Verdana;"&gt;So... Would I recommend doing a certification exam? It depends what you want from it. I suspect it won't make much difference to my career, but it's probably too soon to tell and that's not why I did it. I wanted to mark the end of a long and interesting journey through .NET land, and sitting the exam seemed like the natural thing to do. I'm glad I did it.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;span style="font-family:Verdana;"&gt;&lt;p&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-family:Verdana;"&gt;&lt;/span&gt;&lt;p&gt;&lt;span style="font-family:Verdana;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Verdana;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9610337-110513151067167184?l=stevemargetts.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevemargetts.blogspot.com/feeds/110513151067167184/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9610337&amp;postID=110513151067167184&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9610337/posts/default/110513151067167184'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9610337/posts/default/110513151067167184'/><link rel='alternate' type='text/html' href='http://stevemargetts.blogspot.com/2005/01/microsoft-certification-070-316.html' title='Microsoft Certification: 070-316'/><author><name>Steve Margetts</name><uri>http://www.blogger.com/profile/14659994614281523642</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9610337.post-110501518902330541</id><published>2005-01-06T04:28:00.000-08:00</published><updated>2005-01-06T04:39:49.023-08:00</updated><title type='text'>Disc Stakka CD and DVD Management System</title><content type='html'>&lt;span style="font-family:Verdana;"&gt;While flicking through the latest &lt;a href="http://msdn.microsoft.com/msdnmag/"&gt;MSDN Magazine&lt;/a&gt;, an advert for Imations's &lt;a href="http://msdn.imation.com/"&gt;Disc Stakka&lt;/a&gt; caught my eye. This is a USB device that lets you archive up to 100 CDs/DVDs in a single box. The disks are mounted when requested, and it's fully integrated into Windows Explorer so you never have to touch the disks once they're loaded. If you need to store more than 100 disks, you can daisy-chain up to five boxes to store up to 500 disks in one big stack.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;a href="http://www.imation.com/"&gt;Imation&lt;/a&gt; are currently marketing it specifically to MSDN subscribers, and they seems to have a special utility to import the MSDN indexes (I guess to save you from typing in reams of reference information). However, &lt;/span&gt;&lt;span style="font-family:Verdana;"&gt;I think that the ability to have a large number of CDs or DVDs online without having to physically get them out of their packets could be very useful.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9610337-110501518902330541?l=stevemargetts.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevemargetts.blogspot.com/feeds/110501518902330541/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9610337&amp;postID=110501518902330541&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9610337/posts/default/110501518902330541'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9610337/posts/default/110501518902330541'/><link rel='alternate' type='text/html' href='http://stevemargetts.blogspot.com/2005/01/disc-stakka-cd-and-dvd-management.html' title='Disc Stakka CD and DVD Management System'/><author><name>Steve Margetts</name><uri>http://www.blogger.com/profile/14659994614281523642</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9610337.post-110425210896985737</id><published>2004-12-28T08:37:00.000-08:00</published><updated>2004-12-28T08:41:48.970-08:00</updated><title type='text'>Christmas fun!</title><content type='html'>&lt;span style="font-family:Verdana;"&gt;If you're bored over the Christmas period I can recommend "&lt;a href="http://www.speedysanta.com"&gt;Speedy Santa&lt;/a&gt;"... My best time so far is 11.293 seconds...&lt;/span&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9610337-110425210896985737?l=stevemargetts.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevemargetts.blogspot.com/feeds/110425210896985737/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9610337&amp;postID=110425210896985737&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9610337/posts/default/110425210896985737'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9610337/posts/default/110425210896985737'/><link rel='alternate' type='text/html' href='http://stevemargetts.blogspot.com/2004/12/christmas-fun.html' title='Christmas fun!'/><author><name>Steve Margetts</name><uri>http://www.blogger.com/profile/14659994614281523642</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9610337.post-110362634558655902</id><published>2004-12-21T02:47:00.000-08:00</published><updated>2004-12-21T02:52:25.586-08:00</updated><title type='text'>"Top 10 recurring mistakes on software development projects"</title><content type='html'>&lt;span style="font-family:verdana;"&gt;There's an interesting (and short) article &lt;a href="http://consulting.dthomas.co.uk/ooad_articles_resources/top-10-mistakes-fact-sheet.pdf"&gt;here&lt;/a&gt; by &lt;a href="http://consulting.dthomas.co.uk/"&gt;Dunstan Thomas Consulting&lt;/a&gt; on the reasons why software projects fail. Much of the information is available elsewhere, but it's good to have a short summary. It's also kinda scarey to see how the current projects I'm working on measure up.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9610337-110362634558655902?l=stevemargetts.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevemargetts.blogspot.com/feeds/110362634558655902/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9610337&amp;postID=110362634558655902&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9610337/posts/default/110362634558655902'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9610337/posts/default/110362634558655902'/><link rel='alternate' type='text/html' href='http://stevemargetts.blogspot.com/2004/12/top-10-recurring-mistakes-on-software.html' title='&quot;Top 10 recurring mistakes on software development projects&quot;'/><author><name>Steve Margetts</name><uri>http://www.blogger.com/profile/14659994614281523642</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9610337.post-110310455038832966</id><published>2004-12-15T01:22:00.000-08:00</published><updated>2004-12-15T01:55:50.386-08:00</updated><title type='text'>Code Complete 2</title><content type='html'>&lt;span style="font-family:Verdana;font-size:100%;"&gt;Just finished reading &lt;a href="http://www.cc2e.com/"&gt;"Code Complete 2"&lt;/a&gt; by Steve Mc Connell. It's the best book I've read on software engineering, and it's stuffed with interesting observations backed up with hard data. &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:100%;"&gt;I particularly liked the insightful code snippets that litter the chapters, although I must admit that some of the &lt;/span&gt;&lt;span style="font-family:Verdana;font-size:100%;"&gt;"coding horrors" were a little too familar...&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;font-size:100%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;font-size:100%;"&gt;The downside? It weighs in at around 850 pages, so unless you have Popeye's forarms it's kinda tricky to read unless you're sat at a desk.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;font-size:100%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;font-size:100%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;font-size:100%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9610337-110310455038832966?l=stevemargetts.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevemargetts.blogspot.com/feeds/110310455038832966/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9610337&amp;postID=110310455038832966&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9610337/posts/default/110310455038832966'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9610337/posts/default/110310455038832966'/><link rel='alternate' type='text/html' href='http://stevemargetts.blogspot.com/2004/12/code-complete-2.html' title='Code Complete 2'/><author><name>Steve Margetts</name><uri>http://www.blogger.com/profile/14659994614281523642</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9610337.post-110304126661795558</id><published>2004-12-14T08:16:00.000-08:00</published><updated>2004-12-14T08:21:06.616-08:00</updated><title type='text'>Welcome</title><content type='html'>&lt;span style="font-family:verdana;"&gt;Finally got me a blog. Hope you like it...&lt;/span&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9610337-110304126661795558?l=stevemargetts.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9610337/posts/default/110304126661795558'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9610337/posts/default/110304126661795558'/><link rel='alternate' type='text/html' href='http://stevemargetts.blogspot.com/2004/12/welcome.html' title='Welcome'/><author><name>Steve Margetts</name><uri>http://www.blogger.com/profile/14659994614281523642</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry></feed>
