<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Rambling Comments - Len Holgate&#39;s blog</title>
    <link>https://lenholgate.com/</link>
    <description>Recent content from Rambling Comments - Len Holgate&#39;s blog</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-uk</language>
    <lastBuildDate>Mon, 12 Jan 2026 15:47:12 +0000</lastBuildDate><atom:link href="https://lenholgate.com/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>JetByte News: New Year, 2026</title>
      <link>https://lenholgate.com/news/2026/01/new-year-2026.html</link>
      <pubDate>Mon, 12 Jan 2026 15:47:12 +0000</pubDate>
      
      <guid>https://lenholgate.com/news/2026/01/new-year-2026.html</guid>
      <description>Another year, 2026.
We had an exciting 2025, with lots of interesting work on complicated projects. Our focus remains the same as ever, helping clients with high performance, reliable, server systems on Windows and Linux. This year we will begin our 30th year of software development consultancy and, it seems that the more things change, the more they stay the same.
The highlight of the year was probably Phase 2 of our server development for our large, American postal company.</description>
    </item>
    
    <item>
      <title>Time is an illusion, CLOCK_REALTIME, doubly so...</title>
      <link>https://lenholgate.com/blog/2025/10/time-is-an-illusion-clock_realtime-doubly-so.html</link>
      <pubDate>Wed, 29 Oct 2025 07:17:02 +0100</pubDate>
      
      <guid>https://lenholgate.com/blog/2025/10/time-is-an-illusion-clock_realtime-doubly-so.html</guid>
      <description>A few days ago one of my build machines started to have unexpected test failures during regular integration builds of one of my client&amp;rsquo;s codebases. My other build machines ran the tests fine and the failures were intermittent and spread over a worryingly large array of tests.
TL;DRDon&amp;rsquo;t use CLOCK_REALTIME to measure wait or delay times as it can be changed and the time reported can move unexpectedly; absolute timeouts do not play nicely with this clock.</description>
    </item>
    
    <item>
      <title>Compiler Versioning and Continuous Integration</title>
      <link>https://lenholgate.com/blog/2025/06/compiler-versioning-and-continuous-integration.html</link>
      <pubDate>Wed, 04 Jun 2025 07:10:00 +0100</pubDate>
      
      <guid>https://lenholgate.com/blog/2025/06/compiler-versioning-and-continuous-integration.html</guid>
      <description>I have been using a home-grown continuous integration system based on a hacked version of CruiseControl.Net since 2007. Whilst it&amp;rsquo;s not perfect, it works, and I have quite a bit of custom tooling that builds configurations for it for various client projects and builds of various versions of The Server Framework.
TL;DRBy exporting the configuration of Visual Studio as a vsconfig file you can create a custom installation with specific tools in a stand-alone directory structure that can be referenced by build tools, and you can then link specific revisions of code to specific versions of Visual Studio so that they &amp;lsquo;always build&amp;rsquo;, even if the installed compiler is incompatible.</description>
    </item>
    
    <item>
      <title>JetByte News: Going Postal, again...</title>
      <link>https://lenholgate.com/news/2025/05/going-postal-again.html</link>
      <pubDate>Wed, 21 May 2025 12:10:55 +0000</pubDate>
      
      <guid>https://lenholgate.com/news/2025/05/going-postal-again.html</guid>
      <description>We&amp;rsquo;re pleased to have resumed work with our nameless, large, American postal company, who, back in 2019 took our mail-sorting server software into an extended pilot programme. Things went well, they have over 300 servers running the software and are processing over 554 million pieces of mail a day, each one of which results in multiple messages processed by our server software. They now want us to fix a couple of issues and extend the system to support TLS.</description>
    </item>
    
    <item>
      <title>AFD datagram performance</title>
      <link>https://lenholgate.com/blog/2025/01/afd-datagram-performance.html</link>
      <pubDate>Sat, 25 Jan 2025 12:10:00 +0100</pubDate>
      
      <guid>https://lenholgate.com/blog/2025/01/afd-datagram-performance.html</guid>
      <description>I&amp;rsquo;ve been playing around with the low-level access to the Windows networking stack that is provided by \Device\Afd. This provides a &amp;lsquo;readiness&amp;rsquo; interface rather than the &amp;lsquo;completion&amp;rsquo; interface provided by traditional IOCP designs. I&amp;rsquo;ve been meaning to do some comparative performance tests, much in the same way that I did for my investigations of the RIO API, but I&amp;rsquo;ve been too busy.
Instead, what has happened is that the AFD code has made its way into the version of The Server Framework that I&amp;rsquo;m using with my Online Game Company client.</description>
    </item>
    
    <item>
      <title>JetByte News: 2025</title>
      <link>https://lenholgate.com/news/2025/01/2025.html</link>
      <pubDate>Sat, 11 Jan 2025 12:21:55 +0000</pubDate>
      
      <guid>https://lenholgate.com/news/2025/01/2025.html</guid>
      <description>Welcome to 2025.
2024 was a good year for us, we continued to work with the secretive Online Gaming Company adding to and improving the cloud gaming server that we wrote for them. It&amp;rsquo;s quite nice to have a client that uses our server code to support over 1.4 billion monthly players and to continue to extend and improve the code that we&amp;rsquo;ve now been a part of for over 16 years.</description>
    </item>
    
    <item>
      <title>This project cannot build given the current state of the project.</title>
      <link>https://lenholgate.com/blog/2024/10/this-project-cannot-build-given-the-current-state-of-the-project.html</link>
      <pubDate>Wed, 02 Oct 2024 15:10:00 +0100</pubDate>
      
      <guid>https://lenholgate.com/blog/2024/10/this-project-cannot-build-given-the-current-state-of-the-project.html</guid>
      <description>I&amp;rsquo;ve been cleaning up a continuous integration build system for my cloud gaming client&amp;rsquo;s server system. The codebase is pretty big, and my build system on Windows is pretty rubbish but works&amp;hellip; It has been getting slower and slower due to how I build the system, and I wanted to make it faster. Whilst doing this, I ran into a Visual Studio error message that I hadn&amp;rsquo;t seen before, and it took me a while to work out what was going on&amp;hellip;</description>
    </item>
    
    <item>
      <title>A multi-connection AFD-based echo server</title>
      <link>https://lenholgate.com/blog/2024/06/a-multi-connection-afd-server.html</link>
      <pubDate>Sat, 22 Jun 2024 12:10:00 +0100</pubDate>
      
      <guid>https://lenholgate.com/blog/2024/06/a-multi-connection-afd-server.html</guid>
      <description>Last time I looked at way of using \Device\Afd to perform individual socket polling for readiness. This differed from the previous approach to using \Device\Afd, which batched up the sockets and issued a single poll for multiple sockets.
The individual socket polling approach appeals to me as it would appear to scale more easily, and putting together an echo server that supports multiple connections is now much easier. It doesn&amp;rsquo;t map as well to the way other operating systems do things though, so if that&amp;rsquo;s your primary goal, then you&amp;rsquo;re probably better off continuing with the &amp;lsquo;set of sockets&amp;rsquo; approach.</description>
    </item>
    
    <item>
      <title>Socket readiness without \Device\Afd</title>
      <link>https://lenholgate.com/blog/2024/06/socket-readiness-without-device-afd.html</link>
      <pubDate>Fri, 14 Jun 2024 14:20:00 +0100</pubDate>
      
      <guid>https://lenholgate.com/blog/2024/06/socket-readiness-without-device-afd.html</guid>
      <description>Recently, I&amp;rsquo;be been exploring socket readiness notifications on Windows using the \Device\Afd interface. My initial forays into this were from a Linux epoll direction as the use of the \Device\Afd API provides a similar interface to the epoll API and makes it possible to build something almost the same on Windows which can help when writing cross platform code.
I&amp;rsquo;d got to the point where I had a simple client and server working nicely and had taken a pause before the next step which was to add support for multiple sockets.</description>
    </item>
    
    <item>
      <title>Visual Studio solution files with unix line-end crash explorer...</title>
      <link>https://lenholgate.com/blog/2024/06/visual-studio-solution-files-with-unix-line-ends-crash-explorer.html</link>
      <pubDate>Fri, 14 Jun 2024 10:10:15 +0100</pubDate>
      
      <guid>https://lenholgate.com/blog/2024/06/visual-studio-solution-files-with-unix-line-ends-crash-explorer.html</guid>
      <description>I&amp;rsquo;ve just had to deal with a situation where Windows 11 Explorer crashes and restarts every time I browse to a particular directory. The directory contained the source to my AFD code and I somehow managed to guess at the cause and fix the offending file&amp;hellip;
The problem was that I had some Visual Studio sln files checked in to a git repository and at some point git had changed the line ends from windows \r\n to unix \n.</description>
    </item>
    
    <item>
      <title>More \Device\Afd goodness</title>
      <link>https://lenholgate.com/blog/2024/05/more-device-afd-goodness.html</link>
      <pubDate>Sat, 04 May 2024 12:10:00 +0100</pubDate>
      
      <guid>https://lenholgate.com/blog/2024/05/more-device-afd-goodness.html</guid>
      <description>For a while now I&amp;rsquo;ve been playing around with the low-level access to the Windows networking stack that is provided by \Device\Afd. Recently I had a comment from a reader, Matt James, who pointed me in the direction of his work over at https://github.com/Emjayen/napi which does a lot more with the \Device\Afd interface than I have. It&amp;rsquo;s well worth checking out.
This code includes, as reference, a set of NT Native API headers from the Process Hacker project, which in itself is interesting stuff, but Matt&amp;rsquo;s code goes far beyond my megre investigations and provides enough information to produce a full featured network API that appears to be able to everything you might need through the \Device\Afd interface.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Bug in OOB data handling</title>
      <link>https://lenholgate.com/asynchronousevents/2024/04/bug-in-oob-data-handling.html</link>
      <pubDate>Wed, 24 Apr 2024 10:30:00 +0100</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2024/04/bug-in-oob-data-handling.html</guid>
      <description>There&amp;rsquo;s a bug in the TCP OOB (out of band) data handling code in all versions of The Server Framework from 6.6 through to 7.4. This issue manifests as a purecall during socket destruction and is due to a race condition during the release of the last two references held on a socket. If you don&amp;rsquo;t use OOB then a simple work around is to comment out the following in TAsyncSocket.</description>
    </item>
    
    <item>
      <title>Debugging yourself...</title>
      <link>https://lenholgate.com/blog/2024/04/debugging-yourself.html</link>
      <pubDate>Wed, 17 Apr 2024 08:30:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2024/04/debugging-yourself.html</guid>
      <description>Recently I spent quite a long time debugging a heap corruption bug. When I eventually found the issue, it was such a classic buffer overrun bug that it was actually quite laughable how long it had taken to track it down. It was just SO obvious that I immediately spotted it as soon as I looked at the code. The problem was that it took me so long to actually look at this piece of code.</description>
    </item>
    
    <item>
      <title>The US government&#39;s view on memory safe code is not the whole story</title>
      <link>https://lenholgate.com/blog/2024/03/why-the-us-governments-view-on-memory-safe-code-is-not-the-whole-story.html</link>
      <pubDate>Wed, 20 Mar 2024 10:00:00 +0100</pubDate>
      
      <guid>https://lenholgate.com/blog/2024/03/why-the-us-governments-view-on-memory-safe-code-is-not-the-whole-story.html</guid>
      <description>There&amp;rsquo;s a lot of noise about how &amp;ldquo;Joe Biden&amp;rsquo;s government wants you to move away from using C++&amp;rdquo;. This is as a result of the US government releasing a report, Back to the building blocks: A path toward secure and measurable software which suggests:
Uncle Sam says &amp;#34;no!&amp;#34;&amp;ldquo;Memory safety vulnerabilities are a class of vulnerability affecting how memory can be accessed, written, allocated, or deallocated in unintended ways. Experts have identified a few programming languages that both lack traits associated with memory safety and also have high proliferation across critical systems, such as C and C++.</description>
    </item>
    
    <item>
      <title>Oops, broken .htaccess update and 301s leading to 404s</title>
      <link>https://lenholgate.com/blog/2024/02/oops.html</link>
      <pubDate>Mon, 26 Feb 2024 10:11:00 +0100</pubDate>
      
      <guid>https://lenholgate.com/blog/2024/02/oops.html</guid>
      <description>I just broken my .htaccess file for about an hour and this resulting in /blog/ 301 redirecting to / which wasn&amp;rsquo;t intended&amp;hellip; Fixed now.</description>
    </item>
    
    <item>
      <title>MiniDumpWriteDump now mostly useless for in process use</title>
      <link>https://lenholgate.com/blog/2024/02/minidumpwritedump-now-mostly-useless-.html</link>
      <pubDate>Mon, 19 Feb 2024 09:00:00 +0100</pubDate>
      
      <guid>https://lenholgate.com/blog/2024/02/minidumpwritedump-now-mostly-useless-.html</guid>
      <description>I&amp;rsquo;ve been using the MiniDumpWriteDump() API from DbgHelp.dll for 20 years or so. It has proven to be a useful diagnostic tool, and I use it in all manner of places, including many where others may simply use an assert(). It&amp;rsquo;s a heavy-weight debugging tool, but it has proved useful over the years; rather than just throwing an exception because things that shouldn&amp;rsquo;t happen have happened, I often also generate a dump file so that I can get far more data than you could ever log or report in another way.</description>
    </item>
    
    <item>
      <title>Old and cranky me from 20 years ago</title>
      <link>https://lenholgate.com/blog/2024/02/old-and-cranky-me-from-20-years-ago.html</link>
      <pubDate>Thu, 01 Feb 2024 16:36:00 +0100</pubDate>
      
      <guid>https://lenholgate.com/blog/2024/02/old-and-cranky-me-from-20-years-ago.html</guid>
      <description>Back in 2004 I wrote this, I wonder why I used to make some people unhappy&amp;hellip;
I&amp;rsquo;m starting to believe that, at 37, I must now be old and cranky because to be quite honest with you; if you&amp;rsquo;re not writing code in such a way that you define concepts and abstractions in such a way that the actual main line business logic code that you write is clear and easy to understand then you&amp;rsquo;re just not doing it right.</description>
    </item>
    
    <item>
      <title>Adventures with \Device\Afd - a simple server</title>
      <link>https://lenholgate.com/blog/2024/01/adventures-with-afd-a-simple-server.html</link>
      <pubDate>Sat, 27 Jan 2024 12:04:00 +0100</pubDate>
      
      <guid>https://lenholgate.com/blog/2024/01/adventures-with-afd-a-simple-server.html</guid>
      <description>The only difference between a client and a server is the way in which the connection is established. For a client, you create a socket and call &amp;ldquo;connect&amp;rdquo; on it. For a server, we have a socket that is &amp;ldquo;listening&amp;rdquo; for connections, &amp;ldquo;accepts&amp;rdquo; new incoming connections and returns a socket that is then indistinguishable from a client connection.
In the past, I&amp;rsquo;ve created bad abstractions at this point. A socket connection and a listening socket are both represented by the operating system API as the same type, and the only differences are the calls that you make on the type.</description>
    </item>
    
    <item>
      <title>Adventures with \Device\Afd - a simple client</title>
      <link>https://lenholgate.com/blog/2024/01/adventures-with-afd-a-simple-client.html</link>
      <pubDate>Wed, 24 Jan 2024 07:00:00 +0100</pubDate>
      
      <guid>https://lenholgate.com/blog/2024/01/adventures-with-afd-a-simple-client.html</guid>
      <description>Now that I have a reasonably easy to use event-driven socket class I can start to use it. The first thing to build is a simple client. This will connect to a server and expect that server to echo anything that is sent to it. The client will send data and read it back and compare it with what it sent.
A simple, single-threaded, client Last time, I put together a tcp_socket object that made it easier to work with the \Device\Afd interface that I&amp;rsquo;ve been playing with.</description>
    </item>
    
    <item>
      <title>Adventures with \Device\Afd - test driven design</title>
      <link>https://lenholgate.com/blog/2024/01/adventures-with-afd-test-driven-design.html</link>
      <pubDate>Tue, 23 Jan 2024 14:08:00 +0100</pubDate>
      
      <guid>https://lenholgate.com/blog/2024/01/adventures-with-afd-test-driven-design.html</guid>
      <description>I&amp;rsquo;ve been investigating the &amp;lsquo;sparsely documented&amp;rsquo; \Device\Afd interface that lies below the Winsock2 layer. Today I use a test-driven method for building some code to make using this API a little easier.
Using the API In my previous posts on the \Device\Afd interface I focused on exploring and understanding the API itself. Since it&amp;rsquo;s &amp;lsquo;sparsely documented&amp;rsquo; I used unit tests to explore and record my findings. This has left me with some code that is easy to come back to and pick up, which is lucky since it&amp;rsquo;s been quite a while since I last had some time to tinker with it.</description>
    </item>
    
    <item>
      <title>Merging L&#39;Hexapod&#39;s content...</title>
      <link>https://lenholgate.com/blog/2024/01/merging-lhexapod-content.html</link>
      <pubDate>Sat, 06 Jan 2024 19:30:00 +0100</pubDate>
      
      <guid>https://lenholgate.com/blog/2024/01/merging-lhexapod-content.html</guid>
      <description>Back in 2009 I started playing around with embedded assembly language on simple hardware with the intention of building a robot spider. This was hosted on a separate website, L&amp;rsquo;Hexapod.com It was a lot of fun but once my children came along the project took up too much time for me to focus on it.
Back in 2010 I thought that the birth of my first son, Scott, would be just a small blip in my journey into robotics but, looking back, it seems to have been the end of that chapter.</description>
    </item>
    
    <item>
      <title>JetByte News: 2024</title>
      <link>https://lenholgate.com/news/2024/01/2024.html</link>
      <pubDate>Sat, 06 Jan 2024 12:13:55 +0000</pubDate>
      
      <guid>https://lenholgate.com/news/2024/01/2024.html</guid>
      <description>2023 was a good year. We finished off a project for our Industrial Control Client and everyone seems happy, which is always nice.
Our work with the secretive Online Gaming Company is taking up most of our time as we continue to enhance the cloud gaming server that we wrote for them. They continue to go from strength to strength, which is good. We have been rolling out a series of changes into their live environment and increasing test coverage and our ability to test and debug using light-weight journals of communication sessions.</description>
    </item>
    
    <item>
      <title>JetByte News: Long distance debugging</title>
      <link>https://lenholgate.com/news/2023/12/long-distance-debugging.html</link>
      <pubDate>Fri, 08 Dec 2023 16:45:00 +0100</pubDate>
      
      <guid>https://lenholgate.com/news/2023/12/long-distance-debugging.html</guid>
      <description>We&amp;rsquo;ve now reached the end of the recent embedded development project for our Industrial Control Client.
The final phase was made more complicated by the difficulty in debugging the changes. The embedded hardware had no screen, and the network debug facility that it supported was unreliable; it sometimes just lost messages. So the first step was to work around this issue with some debug messages in-line with the normal TCP/IP data channel from the hardware.</description>
    </item>
    
    <item>
      <title>How little things kick you out of the zone</title>
      <link>https://lenholgate.com/blog/2023/12/how-little-things-kick-you-out-of-the-zone.html</link>
      <pubDate>Thu, 07 Dec 2023 10:07:00 +0100</pubDate>
      
      <guid>https://lenholgate.com/blog/2023/12/how-little-things-kick-you-out-of-the-zone.html</guid>
      <description>I had an internet outage this morning. This shouldn&amp;rsquo;t have been much of a problem for me as all of the code that I needed to be working on is on my local git server and all of the dependencies are local. Or so I thought. The client has a c# shim layer that builds as part of the C++ server build. They rely on NuGet to grab some components from somewhere for some reason.</description>
    </item>
    
    <item>
      <title>JetByte News: Punch card programming...</title>
      <link>https://lenholgate.com/news/2023/11/punch-card-programming.html</link>
      <pubDate>Tue, 07 Nov 2023 09:45:00 +0100</pubDate>
      
      <guid>https://lenholgate.com/news/2023/11/punch-card-programming.html</guid>
      <description>The second of our &amp;ldquo;reanimation&amp;rdquo; projects has reached a significant milestone. We ran the whole new system on the real hardware last week, and it mostly works. This is a big step for us and the client as the project has been quite complex in terms of how the development has been done.
As I said, our secret Industrial Control Client has had us working on a program that compiles in Visual C++ 6 on an XP VM.</description>
    </item>
    
    <item>
      <title>Setting the preferred NUMA node for a Windows Service (and making it work after a reboot)</title>
      <link>https://lenholgate.com/blog/2023/09/setting-the-preferred-numa-node-for-a-windows-service.html</link>
      <pubDate>Thu, 14 Sep 2023 09:28:00 +0100</pubDate>
      
      <guid>https://lenholgate.com/blog/2023/09/setting-the-preferred-numa-node-for-a-windows-service.html</guid>
      <description>When your machine has multiple NUMA nodes it&amp;rsquo;s often useful to restrict a process to using just one for performance reasons. It&amp;rsquo;s sometimes hard to fully utilize multiple NUMA nodes and, if you get it wrong, it can cost in performance as the nodes need to keep their caches consistent and potentially access memory over a slower link than the memory that is closer to the node, these things can be relatively expensive.</description>
    </item>
    
    <item>
      <title>JetByte News: Reanimator!</title>
      <link>https://lenholgate.com/news/2023/06/reanimator.html</link>
      <pubDate>Thu, 29 Jun 2023 07:55:00 +0100</pubDate>
      
      <guid>https://lenholgate.com/news/2023/06/reanimator.html</guid>
      <description>We recently had an old client contact us with an unusual request. We last worked with VEXIS Systems Inc. back in 2010 when we extended the telephony server we&amp;rsquo;d built for them to support CLR hosting, using The Server Framework&amp;rsquo;s CLR Hosting Option. We then built a managed plugin system that integrated with the existing unmanaged system so that they could write their business logic in either unmanaged code or in a managed language such as C#.</description>
    </item>
    
    <item>
      <title>Multi-threaded testing</title>
      <link>https://lenholgate.com/blog/2023/06/multi-threaded-testing.html</link>
      <pubDate>Mon, 26 Jun 2023 07:36:00 +0100</pubDate>
      
      <guid>https://lenholgate.com/blog/2023/06/multi-threaded-testing.html</guid>
      <description>I&amp;rsquo;ve always found testing multi-threaded code in C++ a humbling experience. It&amp;rsquo;s just so easy to make stupid mistakes and for those mistakes to lurk in code until the circumstances are just right for them to show themselves.
This weekend a unit test that has run thousands of times for many years started to fail. The reason for the failure was a fairly obvious race condition in the test code. This issue had lain dormant and only been exposed by running the tests on my new development machine.</description>
    </item>
    
    <item>
      <title>Sick PC</title>
      <link>https://lenholgate.com/blog/2023/06/sick-pc.html</link>
      <pubDate>Tue, 13 Jun 2023 08:42:00 +0100</pubDate>
      
      <guid>https://lenholgate.com/blog/2023/06/sick-pc.html</guid>
      <description>I&amp;rsquo;ve had a sick PC for several weeks now. It has cost me a surprising amount of time and thought.
It started with my main work machine randomly hanging. This is Windows 11 with a Ryzen 9 5900X, and it has previously run faultlessly for two years or so. The hangs were, at first, annoying and I assumed that it was some driver that had been updated and was playing up, and initially I hoped that it would just fix itself with another update.</description>
    </item>
    
    <item>
      <title>Rust - Borrowing mutable references</title>
      <link>https://lenholgate.com/blog/2023/06/borrowing-mutable-references.html</link>
      <pubDate>Fri, 02 Jun 2023 16:00:00 +0100</pubDate>
      
      <guid>https://lenholgate.com/blog/2023/06/borrowing-mutable-references.html</guid>
      <description>Previously publishedThis article was previously published on len-learns-rust.com. A full index of these articles can be found here.
In addition to managing the lifetimes of references to variables, the Rust compiler&amp;rsquo;s borrow checker also deals with enforcing Rust&amp;rsquo;s guarantees about mutability and so helps to prevent data races.
Basically, you can have any number of immutable references to a variable, but only if there are no mutable references to it at the same time, and you can only ever have a single mutable reference.</description>
    </item>
    
    <item>
      <title>Rust - Lifetimes</title>
      <link>https://lenholgate.com/blog/2023/06/lifetimes.html</link>
      <pubDate>Thu, 01 Jun 2023 15:30:00 +0100</pubDate>
      
      <guid>https://lenholgate.com/blog/2023/06/lifetimes.html</guid>
      <description>Previously publishedThis article was previously published on len-learns-rust.com. A full index of these articles can be found here.
One of the jobs of the Rust compiler&amp;rsquo;s &amp;ldquo;borrow checker&amp;rdquo; is to track the life of each reference to a variable so that it can prevent dangling references. To do this, it annotates each variable and reference with details of the scope in which it is valid. This annotation is called a lifetime.</description>
    </item>
    
    <item>
      <title>Debugging network protocols with journaling</title>
      <link>https://lenholgate.com/blog/2023/05/debugging-network-protocols-with-journals.html</link>
      <pubDate>Tue, 30 May 2023 13:00:00 +0100</pubDate>
      
      <guid>https://lenholgate.com/blog/2023/05/debugging-network-protocols-with-journals.html</guid>
      <description>One of my long-term clients has hundreds of cloud machines running instances of their server, each server maintains thousands of reliable UDP connections using a custom protocol that we&amp;rsquo;ve developed over the years. When things go wrong it&amp;rsquo;s often hard to work out why. Even though we have reasonable unit test coverage of the code that runs the UDP protocol, it&amp;rsquo;s hard to build tests that cover every possible scenario.</description>
    </item>
    
    <item>
      <title>Rust - Deadlocks</title>
      <link>https://lenholgate.com/blog/2023/05/deadlocks.html</link>
      <pubDate>Sun, 28 May 2023 20:50:00 +0100</pubDate>
      
      <guid>https://lenholgate.com/blog/2023/05/deadlocks.html</guid>
      <description>Previously publishedThis article was previously published on len-learns-rust.com. A full index of these articles can be found here.
One reason that access shared data using locks is a bad idea is that, in complex code, it may be possible to deadlock. At their simplest, deadlocks are caused when one thread (thread a) obtains and holds a lock which another thread (thread b) requires whilst itself being blocked from obtaining a lock that it requires because thread b already holds it&amp;hellip; Unfortunately, whilst Rust has eliminated data races in multithreaded code, it doesn&amp;rsquo;t prevent the possibility of deadlocks.</description>
    </item>
    
    <item>
      <title>Rust - Accessing the Id Manager from multiple threads</title>
      <link>https://lenholgate.com/blog/2023/05/accessing-the-id-manager-from-multiple-threads.html</link>
      <pubDate>Fri, 26 May 2023 09:00:00 +0100</pubDate>
      
      <guid>https://lenholgate.com/blog/2023/05/accessing-the-id-manager-from-multiple-threads.html</guid>
      <description>Previously publishedThis article was previously published on len-learns-rust.com. A full index of these articles can be found here.
Since I now understand a little about how to share data between threads I can try and use my Id Manager from multiple threads.
Following the same pattern as I&amp;rsquo;ve been using with the other threading code, something like this might work&amp;hellip;
#[test] fn test_channel_thread_with_id_manager() { let id_manager = Arc::new(IdManager::&amp;lt;u8&amp;gt;::new(ReuseSlow)); let shared_manager = Arc::clone(&amp;amp;id_manager); let data = Arc::new(Mutex::new(HashMap::&amp;lt;String, Id&amp;lt;u8&amp;gt;&amp;gt;::new())); let shared_data = Arc::clone(&amp;amp;data); let mut thread = ChannelThread::new(move |message| { let id = shared_manager.</description>
    </item>
    
    <item>
      <title>Rust - Sharing data between threads</title>
      <link>https://lenholgate.com/blog/2023/05/sharing-data-between-threads.html</link>
      <pubDate>Thu, 25 May 2023 12:00:00 +0100</pubDate>
      
      <guid>https://lenholgate.com/blog/2023/05/sharing-data-between-threads.html</guid>
      <description>Previously publishedThis article was previously published on len-learns-rust.com. A full index of these articles can be found here.
Now that we can send messages to threads I want to see how we can access shared data from those threads. This isn&amp;rsquo;t the best design choice as shared data needs to be protected by locks so that it is accessed in an atomic fashion and the various threads involved with this data will contend with each other over the locks.</description>
    </item>
    
    <item>
      <title>Testing, discipline and detail</title>
      <link>https://lenholgate.com/blog/2023/05/testing-discipline-and-detail.html</link>
      <pubDate>Tue, 23 May 2023 12:01:00 +0100</pubDate>
      
      <guid>https://lenholgate.com/blog/2023/05/testing-discipline-and-detail.html</guid>
      <description>The manual process around updating broken links is due to be replaced by a simple link checker that I&amp;rsquo;ve been writing in Rust. It&amp;rsquo;s not quite ready yet but it&amp;rsquo;s nearly there&amp;hellip;
I was updating a few broken links today and came across this from 2004;
&amp;ldquo;Software development is about discipline and detail; code quality starts to decay as soon as developers forget this. All code decays, but tests can help to make this decay obvious earlier.</description>
    </item>
    
    <item>
      <title>Rust - Simple threading</title>
      <link>https://lenholgate.com/blog/2023/05/simple-threading.html</link>
      <pubDate>Mon, 22 May 2023 09:31:00 +0100</pubDate>
      
      <guid>https://lenholgate.com/blog/2023/05/simple-threading.html</guid>
      <description>Previously publishedThis article was previously published on len-learns-rust.com. A full index of these articles can be found here.
The simplest threading is already covered by most Rust books. Starting up a thread, passing stuff to it, letting it run and waiting for it to finish.
Something like this is the basic thread example in Rust.
This work&amp;rsquo;s and is easy to understand and reason about. The spawned thread clearly runs for less time than the main thread as we join with it before the main thread completes but we rely on the spawned thread to decide when to shut down, this isn&amp;rsquo;t that important here as the spawned thread has a finite amount of work to do, but for threads that do a potentially infinite amount of work I will need a way to ask the thread to stop&amp;hellip;</description>
    </item>
    
    <item>
      <title>Rust - Thinking about threading</title>
      <link>https://lenholgate.com/blog/2023/05/thinking-about-threading.html</link>
      <pubDate>Mon, 22 May 2023 09:21:00 +0100</pubDate>
      
      <guid>https://lenholgate.com/blog/2023/05/thinking-about-threading.html</guid>
      <description>Previously publishedThis article was previously published on len-learns-rust.com. A full index of these articles can be found here.
My threading background in C++ on Windows and Linux goes back a long way and that means that I have some set ways of doing things that may not map directly to the Rust way of doing things. I tend to use threads with the following patterns at present:
A thread starts up, waits on one or more externally controlled &amp;rsquo;events&amp;rsquo; and, when one of these is triggered the thread does something, or shuts down.</description>
    </item>
    
    <item>
      <title>Wayback</title>
      <link>https://lenholgate.com/blog/2023/05/wayback.html</link>
      <pubDate>Thu, 04 May 2023 22:44:00 +0100</pubDate>
      
      <guid>https://lenholgate.com/blog/2023/05/wayback.html</guid>
      <description>This blog has been around a long time and the internet tends to rot. This means that quite a lot of the links on old posts are broken. I&amp;rsquo;m slowly fixing these broken links to use &amp;ldquo;The Wayback Machine&amp;rdquo; but it&amp;rsquo;s complicated to automate as the resulting URLs need to include a timestamp of a valid snapshot and can&amp;rsquo;t just include a &amp;lsquo;rough idea of the date&amp;rsquo;. So I&amp;rsquo;m fixing the broken links manually by watching the posts that are accessed the most and manually checking the links and fixing them up.</description>
    </item>
    
    <item>
      <title>20 years of blogging...</title>
      <link>https://lenholgate.com/blog/2023/05/20-years-of-blogging.html</link>
      <pubDate>Wed, 03 May 2023 14:00:00 +0100</pubDate>
      
      <guid>https://lenholgate.com/blog/2023/05/20-years-of-blogging.html</guid>
      <description>On the 3rd of May 2003 I posted the first entry on this blog. I then proceeded to &amp;ldquo;back fill&amp;rdquo; the blog with various things that had either been posted before in other places or had been laying around waiting for me to have somewhere to put them. This is why although the blog began in 2003 the archives go back to 1992.
What I said on the 10th anniversary of this blog is still apt:</description>
    </item>
    
    <item>
      <title>Adventures with \Device\Afd - test driven understanding</title>
      <link>https://lenholgate.com/blog/2023/05/adventures-with-afd-test-driven-understanding.html</link>
      <pubDate>Wed, 03 May 2023 09:13:00 +0100</pubDate>
      
      <guid>https://lenholgate.com/blog/2023/05/adventures-with-afd-test-driven-understanding.html</guid>
      <description>I&amp;rsquo;ve been investigating the &amp;lsquo;sparsely documented&amp;rsquo; \Device\Afd interface that lies below the Winsock2 layer. Today I use a test driven method for understanding and documenting the API.
TDU - Test Driven Understanding When trying to understand a new API I always like to end up with executable documentation in the form of tests that show the behaviour of the API. I write these tests in the same way that I write any tests; writing a test that fails and then adjusting so that it passes.</description>
    </item>
    
    <item>
      <title>Quick and dirty analysis of memory allocations in Visual Studio code</title>
      <link>https://lenholgate.com/blog/2023/04/quick-and-dirty-analysis-of-memory-allocations-in-visual-studio-code.html</link>
      <pubDate>Fri, 28 Apr 2023 15:50:00 +0100</pubDate>
      
      <guid>https://lenholgate.com/blog/2023/04/quick-and-dirty-analysis-of-memory-allocations-in-visual-studio-code.html</guid>
      <description>Yesterday I was bemoaning encapsulation and how it was hiding what was going on inside my objects (and quite right too, what good would it be otherwise?). The issue is that the object I was interested in, and each of the objects that formed it, were allocating more memory that expected. It wasn&amp;rsquo;t so much that the object was bigger than expected, just that there were more allocations than I expected and that for some reason destroying lots of these objects is taking longer than I would expect.</description>
    </item>
    
    <item>
      <title>The cost of encapsulation</title>
      <link>https://lenholgate.com/blog/2023/04/the-cost-of-encapsulation.html</link>
      <pubDate>Thu, 27 Apr 2023 13:30:00 +0100</pubDate>
      
      <guid>https://lenholgate.com/blog/2023/04/the-cost-of-encapsulation.html</guid>
      <description>I&amp;rsquo;m debugging performance issues with a C++ server that has been stalling and then failing to recover. I&amp;rsquo;ve reached a point where we can generate the problem using a network interruption that causes multiple connections to disconnect at the same time. The fixed sized thread pool that services these connections becomes overloaded with work that requires it to clean up connection objects for the disconnected connections and all of the threads in the pool spend far too long fighting over the lock to the heap as they try and return memory to it to clean up the connection objects.</description>
    </item>
    
    <item>
      <title>Building OpenSSL 3.x for x86 and x64 on Windows for side by side deployment</title>
      <link>https://lenholgate.com/blog/2023/04/building-openssl-3x-for-x86-and-x64-on-windows-for-side-by-side-deployment.html</link>
      <pubDate>Wed, 26 Apr 2023 18:00:00 +0100</pubDate>
      
      <guid>https://lenholgate.com/blog/2023/04/building-openssl-3x-for-x86-and-x64-on-windows-for-side-by-side-deployment.html</guid>
      <description>Back in August 2012 I shared my scripts for building OpenSSL on Windows. These have changed a little since the ones I had for the 1.0.x and 0.9.x releases of OpenSSL. The main idea is the same, the scripts build the OpenSSL code as both static libs and DLLs for both x86 and x64 and allow you to have all of the files next to each other in the same directory by adding various &amp;lsquo;warts&amp;rsquo; to the file names.</description>
    </item>
    
    <item>
      <title>Practical Testing: 41 - GoogleTest</title>
      <link>https://lenholgate.com/blog/2023/04/practical-testing-41-googletest.html</link>
      <pubDate>Tue, 25 Apr 2023 15:30:00 +0100</pubDate>
      
      <guid>https://lenholgate.com/blog/2023/04/practical-testing-41-googletest.html</guid>
      <description>I&amp;rsquo;ve been writing a series of blog posts, called &amp;ldquo;Practical Testing&amp;rdquo;, about testing real-world, multi-threaded code. Up until now I&amp;rsquo;ve used my own, home grown, unit testing framework. When I started out with this series back in 2004 there wasn&amp;rsquo;t much in the way of mature testing frameworks for C++ and, over the years I haven&amp;rsquo;t really found a need to switch from my own stuff that I understand and that works pretty well.</description>
    </item>
    
    <item>
      <title>Practical Testing: 40 - Code updates and new functionality</title>
      <link>https://lenholgate.com/blog/2023/04/practical-testing-40-code-updates-and-new-functionality.html</link>
      <pubDate>Mon, 24 Apr 2023 14:30:00 +0100</pubDate>
      
      <guid>https://lenholgate.com/blog/2023/04/practical-testing-40-code-updates-and-new-functionality.html</guid>
      <description>Nineteen years ago I began a series of blog posts, called &amp;ldquo;Practical Testing&amp;rdquo;, about testing real-world, multi-threaded code. As with most code that works well, and is used by lots of people, we&amp;rsquo;re still changing it and improving it and using it. I&amp;rsquo;ve just done a precis of how we got here and now it&amp;rsquo;s time to continue the journey.
As I hinted at the end of the last episode, there were some outstanding issues to deal with and some new functionality to add and test.</description>
    </item>
    
    <item>
      <title>GoogleTest - the first test</title>
      <link>https://lenholgate.com/blog/2023/04/googletest-the-first-test.html</link>
      <pubDate>Fri, 21 Apr 2023 07:00:00 +0100</pubDate>
      
      <guid>https://lenholgate.com/blog/2023/04/googletest-the-first-test.html</guid>
      <description>I&amp;rsquo;m in the process of investigating GoogleTest and the experience has been interesting. I&amp;rsquo;ve been unit testing code and doing Test Driven Development for a long time now; almost 20 years and I&amp;rsquo;m still learning. I&amp;rsquo;ve had my own test code, a simple test framework, that has served me well but it&amp;rsquo;s not always appropriate so I&amp;rsquo;m looking for alternatives. I&amp;rsquo;ll no doubt write about my thoughts on GoogleTest later, once I&amp;rsquo;ve played a bit more and put my thoughts in order.</description>
    </item>
    
    <item>
      <title>VS2022 Version 17.6.0 Preview 3.0 - Standard Library Modules warnings (std.ixx)</title>
      <link>https://lenholgate.com/blog/2023/04/latest-vs2022-preview-warning-issues.html</link>
      <pubDate>Mon, 17 Apr 2023 11:58:00 +0100</pubDate>
      
      <guid>https://lenholgate.com/blog/2023/04/latest-vs2022-preview-warning-issues.html</guid>
      <description>So, this morning I&amp;rsquo;m back from my Easter break and working on some code for a client and the first thing I do is kick off my CI build and things start failing. It seems that my &amp;ldquo;cunning plan&amp;rdquo; to have my CI build use the preview version of Visual Studio 2022 whilst the client uses earlier versions has paid off again&amp;hellip;
We build with all warnings enabled and treat warnings as errors.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Windows Registered I/O code update</title>
      <link>https://lenholgate.com/asynchronousevents/2023/04/windows-registered-io-code-update.html</link>
      <pubDate>Sat, 15 Apr 2023 15:35:00 +0100</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2023/04/windows-registered-io-code-update.html</guid>
      <description>The code for this series of articles is now available on GitHub and has been updated for Visual Studio 2022. This code is licensed with the MIT license.
I&amp;rsquo;ve updated the code as I expect it will be useful as a comparison to the code that I eventually come up with for using \Device\Afd to access the Windows networking stack. You can read about my adventures with Afd here</description>
    </item>
    
    <item>
      <title>Adventures with \Device\Afd</title>
      <link>https://lenholgate.com/blog/2023/04/adventures-with-afd.html</link>
      <pubDate>Fri, 14 Apr 2023 13:17:00 +0100</pubDate>
      
      <guid>https://lenholgate.com/blog/2023/04/adventures-with-afd.html</guid>
      <description>I&amp;rsquo;ve been playing around with Rust recently and whilst investigating asynchronous programming in Rust I was looking at Tokio, an async runtime. From there I started looking at Mio, the cross-platform, low-level, I/O code that Tokio uses.
For Windows platforms Mio uses wepoll, which is a Windows implementation of the Linux epoll API on Windows and is based on the code that is used by libuv for Node.js. This uses networking code that is NOT your standard high-performance Windows networking code using I/O completion ports and instead uses the &amp;lsquo;sparsely documented&amp;rsquo; \Device\Afd interface that lies below the Winsock2 layer.</description>
    </item>
    
    <item>
      <title>Practical Testing: 39 - 19 years&#39; unit testing the same code</title>
      <link>https://lenholgate.com/blog/2023/04/practical-testing-39-19-years-unit-testing-the-same-code.html</link>
      <pubDate>Thu, 13 Apr 2023 15:10:00 +0100</pubDate>
      
      <guid>https://lenholgate.com/blog/2023/04/practical-testing-39-19-years-unit-testing-the-same-code.html</guid>
      <description>Back in 2004 I started a series of blog posts called &amp;ldquo;Practical Testing&amp;rdquo;, about unit testing a non-trivial piece of C++ code. The idea was to show how adding unit tests to existing, real-world, code could be useful and could support future development and refactoring. Episodes 1 though 13 were written in 2004 and covered getting the code under test and fixing some bugs that were complicated to reproduce in a live environment.</description>
    </item>
    
    <item>
      <title>Currently reading - Rust Brain Teasers</title>
      <link>https://lenholgate.com/blog/2023/04/currently-reading-rust-brain-teasers.html</link>
      <pubDate>Thu, 13 Apr 2023 09:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2023/04/currently-reading-rust-brain-teasers.html</guid>
      <description>I&amp;rsquo;m currently reading Rust Brain Teasers by Herbert Wolverson. It&amp;rsquo;s a nice book of bite-sized puzzles in Rust that are ideal for the way I like to learn (randomly jumping around from subject to subject that happen to interest me).
Each puzzle presents some code, asks you what you think it does and then shows you the hidden complexity. At the end of each section are some links to further reading.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Stability</title>
      <link>https://lenholgate.com/asynchronousevents/2023/04/stability.html</link>
      <pubDate>Wed, 12 Apr 2023 14:32:00 +0100</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2023/04/stability.html</guid>
      <description>It seems amazing but the last time we did a release of The Server Framework was in 2021. Since then the mainline development of the framework has been pretty stable with no new bug reports. Most of the time the code doesn&amp;rsquo;t need a new release to handle minor changes in compiler version and often it&amp;rsquo;s easy enough for client&amp;rsquo;s to do these changes themselves.
I&amp;rsquo;m planning a maintenance release, 7.</description>
    </item>
    
    <item>
      <title>LockExplorer is no more</title>
      <link>https://lenholgate.com/blog/2023/04/lock-explorer-is-no-more.html</link>
      <pubDate>Wed, 12 Apr 2023 12:00:00 +0100</pubDate>
      
      <guid>https://lenholgate.com/blog/2023/04/lock-explorer-is-no-more.html</guid>
      <description>I&amp;rsquo;ve finally done what I should have done several years ago and shut down the LockExplorer site.
I haven&amp;rsquo;t had the time required to keep the tool up to date and fewer people were interested than I originally expected.
I may make the source code available at some point.</description>
    </item>
    
    <item>
      <title>SetServiceStatus framework bug</title>
      <link>https://lenholgate.com/blog/2023/03/setservicestatus_framework_bug.html</link>
      <pubDate>Thu, 23 Mar 2023 15:26:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2023/03/setservicestatus_framework_bug.html</guid>
      <description>One of my clients has been reporting an intermittent issue with the deployment of new releases of their game server. This runs as a Windows service on many, many, cloud machines and, just sometimes, the service seems to have issues during start up after upgrading the code on a machine that it has otherwise been running fine on.
I&amp;rsquo;ve been adding debug code to our service start up code to try and work out what&amp;rsquo;s going on and today we had our first hit.</description>
    </item>
    
    <item>
      <title>Currently reading - Rust Atomics and Locks</title>
      <link>https://lenholgate.com/blog/2023/03/currently-reading-rust-atomics-and-locks.html</link>
      <pubDate>Mon, 20 Mar 2023 09:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2023/03/currently-reading-rust-atomics-and-locks.html</guid>
      <description>I&amp;rsquo;m currently reading Rust Atomics and Locks by Mara Bos and it&amp;rsquo;s excellent.
Really approachable, concise and detailed.
A pleasure to read.</description>
    </item>
    
    <item>
      <title>Migrating to Hugo</title>
      <link>https://lenholgate.com/blog/2023/03/migrating_to_hugo.html</link>
      <pubDate>Wed, 15 Mar 2023 10:32:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2023/03/migrating_to_hugo.html</guid>
      <description>I have just completed migrating the blog from Movable Type to Hugo. Hopefully everything still works and is in the right place, but do let me know if you find any issues. The comments have been migrated to Disqus.
I&amp;rsquo;ve been wanting to update my websites for quite a while now. I spent quite a lot of effort trying to find someone to do it for me but all of the web companies seemed to lose interest when they realised that I didn&amp;rsquo;t want an ongoing &amp;ldquo;SEO&amp;rdquo; package (I&amp;rsquo;ve always viewed SEO as &amp;ldquo;snake oil&amp;rdquo;).</description>
    </item>
    
    <item>
      <title>L&#39;Hexapod: More than just a delay, it seems...</title>
      <link>https://lenholgate.com/blog/2023/03/delays.html</link>
      <pubDate>Mon, 06 Mar 2023 00:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2023/03/delays.html</guid>
      <description>Previously publishedThis article was previously published on lhexapod.com as part of my journey of discovery into robotics and embedded assembly programming. A full index of these articles can be found here.
Back in 2010 I thought that the birth of my first son, Scott, would be just a small blip in my journey into robotics but, looking back, it seems to have been the end of that chapter. Of course, raising children takes time, and Scott was just the first; he was followed shortly after by Max and if I thought assembly and robotics was complex to learn it&amp;rsquo;s nothing compared to raising kids!</description>
    </item>
    
    <item>
      <title>Rust - Threading</title>
      <link>https://lenholgate.com/blog/2023/02/threading.html</link>
      <pubDate>Fri, 03 Feb 2023 09:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2023/02/threading.html</guid>
      <description>Previously publishedThis article was previously published on len-learns-rust.com. A full index of these articles can be found here.
Now that I have my generic IdManager I&amp;rsquo;d like to use it from multiple threads. As I said, this code would normally be used for things like connection ids for network protocols and I&amp;rsquo;ve spent the past 20 years or so writing servers that use small numbers of threads to handle many thousands of connections with work for each connection being given to a thread from a thread pool to perform.</description>
    </item>
    
    <item>
      <title>JetByte News: Onwards into 2023!</title>
      <link>https://lenholgate.com/news/2023/01/onwards-into-2023.html</link>
      <pubDate>Tue, 31 Jan 2023 09:13:55 +0000</pubDate>
      
      <guid>https://lenholgate.com/news/2023/01/onwards-into-2023.html</guid>
      <description>It felt like things almost got back to normal in 2022, which was good. We like normal&amp;hellip;
It was another good year for us and we&amp;rsquo;re still happy doing what we love, writing C++ on multiple platforms and developing interesting code for diverse clients.
Our gaming clients are all doing wonderfully well; our industrial control clients are happy and planning new projects; the large American postal company that will remain nameless is looking to extend the system we built for them a few years ago and our SIP TLS Gateway project now supports secure WebSockets as well as TCP.</description>
    </item>
    
    <item>
      <title>Rust - The journey so far</title>
      <link>https://lenholgate.com/blog/2023/01/the-journey-so-far.html</link>
      <pubDate>Mon, 23 Jan 2023 12:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2023/01/the-journey-so-far.html</guid>
      <description>Previously publishedThis article was previously published on len-learns-rust.com. A full index of these articles can be found here.
I&amp;rsquo;ve now built a generic IdManager which does everything I want it to do, for now. I&amp;rsquo;ve bumbled along in a very non-scientific manner, mostly using the compiler errors to guide me towards things I&amp;rsquo;ve then looked up on the web. The code works and is tested, but it&amp;rsquo;s now time to go back to the books with a series of questions that this journey has got me thinking about:</description>
    </item>
    
    <item>
      <title>Rust - Clean up and additional functionality</title>
      <link>https://lenholgate.com/blog/2023/01/completing_the_functionality.html</link>
      <pubDate>Fri, 13 Jan 2023 08:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2023/01/completing_the_functionality.html</guid>
      <description>Previously publishedThis article was previously published on len-learns-rust.com. A full index of these articles can be found here.
We now have a generic IdManager so now we just need to finish off the required functionality. The missing pieces are:
a &amp;ldquo;reuse policy&amp;rdquo;, so we can dictate how new ids are allocated the ability to restrict the range of ids used. the ability to mark some ids as used The first of these is to allow us to use the id range &amp;ldquo;in order&amp;rdquo; before we start using ids that have been returned to us.</description>
    </item>
    
    <item>
      <title>Rust - Generic code in Rust</title>
      <link>https://lenholgate.com/blog/2023/01/generic-code-in-rust.html</link>
      <pubDate>Thu, 12 Jan 2023 08:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2023/01/generic-code-in-rust.html</guid>
      <description>Previously publishedThis article was previously published on len-learns-rust.com. A full index of these articles can be found here.
Now that we have an IdManager that works reasonably well and does much of what we require of it we can look at how to make it a bit more flexible.
At present the IdManager can only provide Ids that are BYTE sized. I&amp;rsquo;d like to make it a generic type so that we can specify the data type to used for the Id that is provided.</description>
    </item>
    
    <item>
      <title>Rust - Renaming without restructuring</title>
      <link>https://lenholgate.com/blog/2023/01/renaming-without-restructuring.html</link>
      <pubDate>Wed, 11 Jan 2023 15:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2023/01/renaming-without-restructuring.html</guid>
      <description>Previously publishedThis article was previously published on len-learns-rust.com. A full index of these articles can be found here.
We now have a ThreadSafeIdManager that can provide SmartId&amp;rsquo;s. It would probably be better to simply have an IdManager that provides Id&amp;rsquo;s, especially since, in Rust, we can&amp;rsquo;t even reliably use the original IdManager implementation.
I&amp;rsquo;m adverse to renaming the code at this point as that breaks the ease of comparison with earlier versions.</description>
    </item>
    
    <item>
      <title>Rust - Smart Ids; object lifetime and mutability</title>
      <link>https://lenholgate.com/blog/2023/01/smart-ids-object-lifetime-and-mutability.html</link>
      <pubDate>Wed, 11 Jan 2023 12:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2023/01/smart-ids-object-lifetime-and-mutability.html</guid>
      <description>Previously publishedThis article was previously published on len-learns-rust.com. A full index of the articles from this len-learns-rust.com can be found here.
The simple id manager that I built last time is just that, simple. However, it&amp;rsquo;s enough to start exploring some more complex ideas in Rust.
With the current interface you can allocate an id from the id manager and never give it back. In fact, it&amp;rsquo;s easier to do that than it is to use it properly and always give the id back when you&amp;rsquo;re done with it.</description>
    </item>
    
    <item>
      <title>Rust - Building an id manager from a collection of intervals</title>
      <link>https://lenholgate.com/blog/2023/01/building-an-id-manager-from-a-collection-of-intervals.html</link>
      <pubDate>Wed, 11 Jan 2023 09:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2023/01/building-an-id-manager-from-a-collection-of-intervals.html</guid>
      <description>Previously publishedThis article was previously published on len-learns-rust.com. A full index of these articles can be found here.
Now that we have a collection of intervals we can begin to build our id manager.
The id manager turns the collection of intervals on its head a bit in that the intervals represent the available ids, so the manager allocates an id by removing it from the collection.
The simplest id manager looks a bit like this:</description>
    </item>
    
    <item>
      <title>Rust - Removing values</title>
      <link>https://lenholgate.com/blog/2023/01/removing-values.html</link>
      <pubDate>Tue, 10 Jan 2023 12:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2023/01/removing-values.html</guid>
      <description>Previously publishedThis article was previously published on len-learns-rust.com. A full index of these articles can be found here.
Now that we can insert intervals into our collection we need to be able to remove them. There are three ways to remove values from our collection:
remove the first interval in the collection remove the first value in the collection remove an arbitrary value from the collection The first is the easiest and the following tests show how it should work:</description>
    </item>
    
    <item>
      <title>Rust - Adding intervals correctly</title>
      <link>https://lenholgate.com/blog/2023/01/adding-intervals-correctly.html</link>
      <pubDate>Tue, 10 Jan 2023 09:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2023/01/adding-intervals-correctly.html</guid>
      <description>Previously publishedThis article was previously published on len-learns-rust.com. A full index of these articles can be found here.
Our simple collection of intervals has a major failing, it doesn&amp;rsquo;t merge intervals and so we end up with as many intervals as we perform insert operations. For example, if we start with an empty collection and add [4] and then [6] we should have [4], [6], which we currently do.</description>
    </item>
    
    <item>
      <title>Rust - A collection of intervals</title>
      <link>https://lenholgate.com/blog/2023/01/a-collection-of-intervals.html</link>
      <pubDate>Mon, 09 Jan 2023 15:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2023/01/a-collection-of-intervals.html</guid>
      <description>Previously publishedThis article was previously published on len-learns-rust.com. A full index of these articles can be found here.
Now that I have a simple interval I need a collection of them to represent the available ids that we can allocate. I&amp;rsquo;m going to create a new file for this new struct, intervals.rs and move the code from last time into interval.rs. I realise that I could leave it all in lib.</description>
    </item>
    
    <item>
      <title>Rust - An interval</title>
      <link>https://lenholgate.com/blog/2023/01/an-interval.html</link>
      <pubDate>Mon, 09 Jan 2023 11:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2023/01/an-interval.html</guid>
      <description>Previously publishedThis article was previously published on len-learns-rust.com. A full index of these articles can be found here.
We&amp;rsquo;ll start with an interval, this is a struct with an upper and lower limit and represents an inclusive range, such as [0,255] or [1] where both upper and lower are the same value, 1. I&amp;rsquo;m sure there&amp;rsquo;s a better way to do this, such as using std::ops::Range&amp;lt;&amp;gt; but for now this is nice and simple.</description>
    </item>
    
    <item>
      <title>Rust - An Id Manager</title>
      <link>https://lenholgate.com/blog/2023/01/an-id-manager.html</link>
      <pubDate>Sun, 01 Jan 2023 14:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2023/01/an-id-manager.html</guid>
      <description>Previously publishedThis article was previously published on len-learns-rust.com. A full index of these articles can be found here.
The first piece of code that I&amp;rsquo;m going to play with in Rust is a &amp;ldquo;reusable id manager&amp;rdquo;. This is a collection of numerical ids which can be allocated, used and then released back to a pool for later reuse. I tend to use this kind of code for network protocols where something like a peer-id is required; these ids can be within a given range (usually limited by the data type that represents them), and are &amp;ldquo;in use&amp;rdquo; for a period of time and then return to the collection.</description>
    </item>
    
    <item>
      <title>Rust - Introduction</title>
      <link>https://lenholgate.com/blog/2023/01/introduction.html</link>
      <pubDate>Sun, 01 Jan 2023 13:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2023/01/introduction.html</guid>
      <description>Previously publishedThis article was previously published on len-learns-rust.com. A full index of these articles can be found here.
I&amp;rsquo;m a long term C++ programmer who is coming to Rust with lots of baggage. I&amp;rsquo;d like to write Rust in an idiomatic style but I may end up writing bad Rust in a C++ style. Hopefully people will help me avoid that.
I&amp;rsquo;ve read the Rust Book1, or at least some of it.</description>
    </item>
    
    <item>
      <title>Allowing renaming but not deleting for files on Windows</title>
      <link>https://lenholgate.com/blog/2022/09/allowing-renaming-but-not-deleting-for-files-on-windows.html</link>
      <pubDate>Thu, 15 Sep 2022 11:38:37 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2022/09/allowing-renaming-but-not-deleting-for-files-on-windows.html</guid>
      <description>I&amp;rsquo;ve had a client ask if it&amp;rsquo;s possible to rename his server log file whilst the server is running but not allow deletion. This is harder than you&amp;rsquo;d expect to achieve. The established view of &amp;ldquo;the internet&amp;rdquo; is that NTFS doesn&amp;rsquo;t support permissions to allow file renaming and still prevent file deletion. This is true. If you want to allow renaming you need to create or open the file with FILE_SHARE_DELETE access and this allows rename AND delete.</description>
    </item>
    
    <item>
      <title>Unsupported protocol - and the geeks score another own goal...</title>
      <link>https://lenholgate.com/blog/2022/02/unsupported-protocol---and-the-geeks-score-another-own-goal.html</link>
      <pubDate>Mon, 21 Feb 2022 14:06:42 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2022/02/unsupported-protocol---and-the-geeks-score-another-own-goal.html</guid>
      <description>As of the latest Chrome, Edge, Opera, and FireFox updates all of my &amp;lsquo;obsolete&amp;rsquo; hardware (routers, NAS drives, network switches, etc) are inaccessible as they don&amp;rsquo;t use TLS 1.2. I&amp;rsquo;m unlikely to be alone in this. I can understand the technical decision but IMHO it&amp;rsquo;s wrong and, actually pretty stupid. To make it more than a click through warning to access these obsolete devices on my local subnet. Sure ban connections to other subnets (that would cause me pain too as I manage some stuff via a VPN) but 90% of users would be fine.</description>
    </item>
    
    <item>
      <title>JetByte News: More of the same...</title>
      <link>https://lenholgate.com/news/2022/02/more-of-the-same.html</link>
      <pubDate>Thu, 03 Feb 2022 14:49:43 +0000</pubDate>
      
      <guid>https://lenholgate.com/news/2022/02/more-of-the-same.html</guid>
      <description>2021 was another &amp;ldquo;interesting&amp;rdquo; year. We hope that things worked out OK for you. We&amp;rsquo;ve stayed nice and busy doing the things we love to do. So lots more C++ on various platforms for various clients.
For us, and a few of our clients, 2021 was the year that NUMA really started to be a thing. Mostly, up until now, we&amp;rsquo;ve been able to ignore NUMA hardware. Most clients scale out across cheap hardware and we&amp;rsquo;re used to dealing with that.</description>
    </item>
    
    <item>
      <title>Breakpoints that are conditional on other breakpoints...</title>
      <link>https://lenholgate.com/blog/2021/11/breakpoints-that-are-conditional-on-other-breakpoints.html</link>
      <pubDate>Fri, 19 Nov 2021 10:12:46 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2021/11/breakpoints-that-are-conditional-on-other-breakpoints.html</guid>
      <description>Back in 2009 I mused on the idea of &amp;lsquo;breakpoint sequences&amp;rsquo;, where a breakpoint was only hit if a series of previous breakpoints have been hit.
This functionality now exists in Visual Studio 2022, and it&amp;rsquo;s wonderful. It&amp;rsquo;s useful enough for me to immediately switch from VS2017 to VS2022 as my &amp;ldquo;day to day&amp;rdquo; IDE for Windows. Normally I take forever to make the move as I have tools that manage projects and solutions across all the compilers that I support, I just develop in the one that works best for me.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Recent release notifications</title>
      <link>https://lenholgate.com/asynchronousevents/2021/09/recent-release-notifications.html</link>
      <pubDate>Thu, 16 Sep 2021 08:38:33 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2021/09/recent-release-notifications.html</guid>
      <description>We&amp;rsquo;ve just found out that an email misconfiguration means that some emails to serverframework.com email addresses have been bouncing. This should be fixed now! Sorry about the inconvenience. If you have contacted us recently and not had a reply, please try again now!</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Recent releases and 8.0 beta</title>
      <link>https://lenholgate.com/asynchronousevents/2021/09/recent-releases-and-80-beta-1.html</link>
      <pubDate>Sun, 12 Sep 2021 19:30:04 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2021/09/recent-releases-and-80-beta-1.html</guid>
      <description>As you&amp;rsquo;ll see, we released 3 new versions of The Server Framework today. Of these, only the 7.3 release includes code changes. The 7.2 release updates almost every header file in the framework to remove &amp;lsquo;old style&amp;rsquo; include guards and touches lots of source files to remove lint directives that we no longer use. This kind of change creates a lot of noise in an update and so it has been done separately to the functional changes to make it easier for users of the framework to see what has actually been changed in 7.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Latest release of The Server Framework: 7.4</title>
      <link>https://lenholgate.com/asynchronousevents/2021/09/latest-release-of-the-server-framework-74.html</link>
      <pubDate>Sun, 12 Sep 2021 19:30:02 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2021/09/latest-release-of-the-server-framework-74.html</guid>
      <description>Version 7.4 of The Server Framework was released today.
This release includes no bug fixes and no new code. It removes deprecated code and removes support for Visual Studio 2015.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Latest release of The Server Framework: 7.3</title>
      <link>https://lenholgate.com/asynchronousevents/2021/09/latest-release-of-the-server-framework-73.html</link>
      <pubDate>Sun, 12 Sep 2021 19:30:01 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2021/09/latest-release-of-the-server-framework-73.html</guid>
      <description>Version 7.3 of The Server Framework was released today.
This release includes bug fixes and new code.
As always, see the release notes here, for full details of all changes.
Bug fixes:
Fixed a bug with JetByteTools::Core::CCallbackTimerWheel which would show up if the time provider was providing ticks at a different granularity than the granularity of the wheel. Fixed a bug in CDatagramSocketConnectionManager and CDatagramSocketServer where the buffers returned in write and sendTo completion callbacks had an incorrect number of bytes set as &amp;lsquo;used&amp;rsquo;.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Latest release of The Server Framework: 7.2</title>
      <link>https://lenholgate.com/asynchronousevents/2021/09/latest-release-of-the-server-framework-72.html</link>
      <pubDate>Sun, 12 Sep 2021 19:30:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2021/09/latest-release-of-the-server-framework-72.html</guid>
      <description>Version 7.2 of The Server Framework was released today.
This release includes no bug fixes and no new code. It adds support for Visual Studio 2022 and removes redundant manual include guards from most header files and removes unused &amp;ldquo;lint&amp;rdquo; directives from some of the older files. As such this release just serves as a stepping stone to the 7.3 release and makes it easier to see the changes that are made in the 7.</description>
    </item>
    
    <item>
      <title>Be careful what you ask for...</title>
      <link>https://lenholgate.com/blog/2021/08/be-careful-what-you-ask-for.html</link>
      <pubDate>Mon, 23 Aug 2021 12:17:21 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2021/08/be-careful-what-you-ask-for.html</guid>
      <description>As I mentioned in May last year, I&amp;rsquo;d was having trouble with a client&amp;rsquo;s system where a UDP DDOS was causing Windows Server machines to use all available non-paged pool and then blue screen.
The issue could be reproduced with, what I thought at the time was, a minimal test program that simply created a UDP socket, bound it to a port and then didn&amp;rsquo;t do anything with it. If something sent a stream of datagrams to that port then non-paged pool usage would grow in an uncontrolled manner until the box became unusable and eventually died.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Latest release of The Server Framework: 7.1</title>
      <link>https://lenholgate.com/asynchronousevents/2021/01/latest-release-of-the-server-framework-71.html</link>
      <pubDate>Fri, 29 Jan 2021 08:49:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2021/01/latest-release-of-the-server-framework-71.html</guid>
      <description>Version 7.1 of The Server Framework was released today.
This release includes no bug fixes but begins to apply transformations that will allow code to compile on different platforms.
The next release, 7.2, will add in functional changes and bug fixes. If you haven&amp;rsquo;t yet migrated to 7.x, please see the 7.0 release notes. There will be no more releases of the 6.9.x release stream.
As always, see the release notes here, for full details of all changes.</description>
    </item>
    
    <item>
      <title>Framework releases</title>
      <link>https://lenholgate.com/blog/2021/01/framework-releases.html</link>
      <pubDate>Mon, 18 Jan 2021 12:55:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2021/01/framework-releases.html</guid>
      <description>Back in October 2019 I pointed out that I didn&amp;rsquo;t normally do roadmaps of where the framework was going but did one anyway. Looking at how long it has taken to get from there to here I think I&amp;rsquo;m generally correct not to do roadmaps&amp;hellip; I&amp;rsquo;ve been very busy with client work and the pandemic has caused us some disruption, but thankfully not too much. However, I think the main reason that it has taken so long to get the 7.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Latest release of The Server Framework: 7.0</title>
      <link>https://lenholgate.com/asynchronousevents/2021/01/latest-release-of-the-server-framework-70.html</link>
      <pubDate>Mon, 18 Jan 2021 12:40:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2021/01/latest-release-of-the-server-framework-70.html</guid>
      <description>Version 7.0 of The Server Framework was released today.
This release includes no functional changes or bug fixes but moves code that could compile on different platforms out of the Win32Tools library and into a new CoreTools library. It also updates all include paths to use / rather than \ as / is valid on Unix-based systems and also on Windows.
The next release, 7.1, will begin to move the code towards cross platform compilation and the release after that will add in functional changes and bug fixes.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Latest release of The Server Framework: 6.9.5</title>
      <link>https://lenholgate.com/asynchronousevents/2021/01/latest-release-of-the-server-framework-695.html</link>
      <pubDate>Mon, 18 Jan 2021 10:45:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2021/01/latest-release-of-the-server-framework-695.html</guid>
      <description>Version 6.9.5 of The Server Framework was released today.
This release includes changes to support Visual Studio 2019 (16.5 - 16.9), some new functionality and a bug fixes.
As always, see the release notes here, for full details of all changes.
Bug fixes:
Bug fix in JetByteTools::SChannel::CServerContext::ContinueHandshake() so that we return HandshakeFatalError and set the last status correctly on failure rather than throwing an exception. This allows us to correctly report, or not, the issue to the other side.</description>
    </item>
    
    <item>
      <title>JetByte News: Well, that was different...</title>
      <link>https://lenholgate.com/news/2021/01/well-that-was-different.html</link>
      <pubDate>Fri, 01 Jan 2021 20:21:01 +0000</pubDate>
      
      <guid>https://lenholgate.com/news/2021/01/well-that-was-different.html</guid>
      <description>2020 was probably a challenging year for everyone. We were especially lucky in that all of our loved ones managed to stay safe and healthy and our working style was easy to adjust to fit with the various challenges of the year. We hope that things worked out OK for you too.
We ended up having a fairly good year. The games companies using The Server Framework were busy and had lots of work to send our way.</description>
    </item>
    
    <item>
      <title>Are all fully patched Windows boxes really vulnerable to this easy UDP DDOS attack?</title>
      <link>https://lenholgate.com/blog/2020/07/are-all-fully-patched-windows-boxes-really-vulnerable-to-this-easy-udp-ddos-attack.html</link>
      <pubDate>Thu, 02 Jul 2020 21:47:53 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2020/07/are-all-fully-patched-windows-boxes-really-vulnerable-to-this-easy-udp-ddos-attack.html</guid>
      <description>UPDATED: 23 August 2021 see here
As I mentioned a while ago, it seems there&amp;rsquo;s a strangely fatal bug in the Windows networking stack at present. This manifests as massive non-paged pool memory usage if a process creates a UDP socket, binds it to an address and fails to read from it faster than other people are writing to it. The issue appears to be present on all current Windows operating systems but is NOT present on Windows Server 2012 R2 if recent patches have NOT been applied but IS present as soon as the box is patched up to date&amp;hellip; My test box was patched up until March 2020 and ran fine, as soon as it was patched to June 2020 it started to behave badly.</description>
    </item>
    
    <item>
      <title>Strangely fatal UDP issue on Windows...</title>
      <link>https://lenholgate.com/blog/2020/05/strangely-fatal-udp-issue-on-windows.html</link>
      <pubDate>Fri, 01 May 2020 11:16:47 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2020/05/strangely-fatal-udp-issue-on-windows.html</guid>
      <description>UPDATED: 23 August 2021 see here
One of my clients runs game servers on the cloud. They have an AWFUL lot of them and have run them for a long time. Every so often they have problems with DDOS attacks on their servers. They have upstream DDOS protection from their hosting providers but these take a while to recognise the attacks and so there&amp;rsquo;s usually a period when the servers are vulnerable.</description>
    </item>
    
    <item>
      <title>Practical Testing: 38 - Bringing the code up to date, again...</title>
      <link>https://lenholgate.com/blog/2020/04/practical-testing-38---bringing-the-code-up-to-date-again.html</link>
      <pubDate>Fri, 17 Apr 2020 14:53:30 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2020/04/practical-testing-38---bringing-the-code-up-to-date-again.html</guid>
      <description>Previously on &amp;ldquo;Practical Testing&amp;rdquo;&amp;hellip; The last time I updated the code was in 2016, things have changed quite a lot since then with several new compilers and several compilers that I no longer support. There are very few actual code changes, but the code now builds with Visual Studio 2019 (16.6 preview 3.0) and Visual Studio 2017. I&amp;rsquo;ve removed support for anything before Visual Studio 2015.
The code is here on GitHub and new rules apply.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Latest release of The Server Framework: 6.9.4</title>
      <link>https://lenholgate.com/asynchronousevents/2020/01/latest-release-of-the-server-framework-694.html</link>
      <pubDate>Fri, 17 Jan 2020 12:15:20 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2020/01/latest-release-of-the-server-framework-694.html</guid>
      <description>Version 6.9.4 of The Server Framework was released today.
This release includes changes to support Visual Studio 2019 (16.4), some new functionality and a bug fix to our OpenSSL ALPN handling code.
As always, see the release notes here, for full details of all changes.
Bug fixes:
Bug fix to JetByteTools::OpenSSL::CAsyncConnector. We were dealing with ALPN callbacks incorrectly and this could cause an access violation. Changes:
Added a debug log message to alert you to the fact that a JetByteTools::IO::CAsyncFileLog instance has had OnPendingWriteLimit() called.</description>
    </item>
    
    <item>
      <title>JetByte News: Happy New Year!</title>
      <link>https://lenholgate.com/news/2020/01/happy-new-year-2.html</link>
      <pubDate>Wed, 08 Jan 2020 16:25:23 +0000</pubDate>
      
      <guid>https://lenholgate.com/news/2020/01/happy-new-year-2.html</guid>
      <description>Wow. Things are going from strength to strength here at JetByte. As ever we have lots of games companies using The Server Framework and they tend to push us more than our finance clients ever did. Our secretive Online Gaming Company now has more than 400 million players per month on their cloud hosted server system and we&amp;rsquo;re still developing the native C++ side of this for them. It&amp;rsquo;s matured into a stable and flexible system and they just keep on pushing it in new directions.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Latest release of The Server Framework: 6.9.3</title>
      <link>https://lenholgate.com/asynchronousevents/2019/10/latest-release-of-the-server-framework-693.html</link>
      <pubDate>Thu, 10 Oct 2019 10:10:19 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2019/10/latest-release-of-the-server-framework-693.html</guid>
      <description>Version 6.9.3 of The Server Framework was released today.
This release includes changes to support Visual Studio 2019 (16.3), lots of code changes to migrate towards &amp;ldquo;modern C++&amp;rdquo; idioms, issues raised by Resharper++ and changes in include path separators and file name case to support compilation on Linux. We have also removed some code that was previously deprecated and dropped support for Visual Studio 2013.
There are no bug fixes or intentional functionality changes to this release but a LOT of files have been touched; we decided to put this release out so that functionality and bug fix changes can be more easily seen going forwards.</description>
    </item>
    
    <item>
      <title>I don&#39;t do roadmaps, but...</title>
      <link>https://lenholgate.com/blog/2019/10/server-framework-releases.html</link>
      <pubDate>Wed, 09 Oct 2019 12:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2019/10/server-framework-releases.html</guid>
      <description>I&amp;rsquo;m in the process of putting together a series of releases for The Server Framework. It&amp;rsquo;s a little more complex than usual so I thought I&amp;rsquo;d explain why that is.For the past year we&amp;rsquo;ve been working on a Linux/Mac version of The Server Framework with several clients. This has involved adjusting a lot of the code and moving some stuff around; for example there was code in our &amp;ldquo;Win32Tools&amp;rdquo; library that isn&amp;rsquo;t Win32 or even Windows specific and so that now lives in a new tools library, &amp;ldquo;CoreTools&amp;rdquo;, that contains code that can build on all platforms.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Latest release of The Server Framework: 6.9.2</title>
      <link>https://lenholgate.com/asynchronousevents/2019/07/latest-release-of-the-server-framework-692.html</link>
      <pubDate>Mon, 01 Jul 2019 09:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2019/07/latest-release-of-the-server-framework-692.html</guid>
      <description>Version 6.9.2 of The Server Framework was released today.
This release includes changes to support Visual Studio 2017 (15.9), Visual Studio 2019 (16.2), design changes to the PerfMon tools library to improve performance and some bug fixes.
As always, see the release notes here, for full details of all changes.
Bug fixes:
Bug fix to JetByteTools::Win32::TimeChangeNotificationMonitor and JetByteTools::Win32::CSystemShutdownMonitor so that we don&amp;rsquo;t truncate the pointer passed SetWindowLongPtr(). Truncation was rarely occurring to just the top bits.</description>
    </item>
    
    <item>
      <title>JetByte News: Linux port, new framework releases, mail sorting and industrial control software</title>
      <link>https://lenholgate.com/news/2019/02/linux-port-new-framework-releases-mail-sorting-and-industrial-control-software.html</link>
      <pubDate>Mon, 04 Feb 2019 10:09:03 +0000</pubDate>
      
      <guid>https://lenholgate.com/news/2019/02/linux-port-new-framework-releases-mail-sorting-and-industrial-control-software.html</guid>
      <description>The Linux port of The Server Framework is going really well and we now have investigated both libuv and epoll back ends. There&amp;rsquo;s still a lot of work to do before this will be something that we&amp;rsquo;re releasing generally but the client&amp;rsquo;s that are working with us on this are really excited by how well it&amp;rsquo;s going.
The massively modernised, and far in the future 7.0 release of The Server Framework will include the Linux changes and our 6.</description>
    </item>
    
    <item>
      <title>JetByte News: Busy, busy, busy...</title>
      <link>https://lenholgate.com/news/2018/07/busy-busy-busy.html</link>
      <pubDate>Tue, 03 Jul 2018 09:34:28 +0000</pubDate>
      
      <guid>https://lenholgate.com/news/2018/07/busy-busy-busy.html</guid>
      <description>We&amp;rsquo;re going to be really busy for the rest of the year as we&amp;rsquo;ve just won a large contract with our Industrial Control Client in Germany. We&amp;rsquo;ll be working on the systems that we&amp;rsquo;ve worked on for them before, adding new functionality and integrating The Server Framework into some applications that we haven&amp;rsquo;t worked on before.
The Linux port of The Server Framework is going really well and we now have a server and client system running on Linux using our custom reliable UDP network layer.</description>
    </item>
    
    <item>
      <title>JetByte News: Linux port, .NET Core, Mail sorting servers, WebRTC</title>
      <link>https://lenholgate.com/news/2018/05/linux-port-net-core-mail-sorting-servers-webrtc.html</link>
      <pubDate>Thu, 10 May 2018 13:47:42 +0000</pubDate>
      
      <guid>https://lenholgate.com/news/2018/05/linux-port-net-core-mail-sorting-servers-webrtc.html</guid>
      <description>We&amp;rsquo;re currently working on a proof of concept Linux port of one of our more complex server systems for a client. This is interesting stuff and surprisingly easy. Most of our framework code ported pretty quickly and now runs nicely on a test Ubuntu 16.04 box as well as on Windows. We&amp;rsquo;re using CLion and CMake on Linux and this has provided a surprisingly familiar environment to work in. It&amp;rsquo;s very early days but things look good and I expect we&amp;rsquo;ll eventually do this work again properly and roll it out as part of The Server Framework.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Latest release of The Server Framework: 6.9.1</title>
      <link>https://lenholgate.com/asynchronousevents/2018/01/latest-release-of-the-server-framework-691.html</link>
      <pubDate>Thu, 18 Jan 2018 14:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2018/01/latest-release-of-the-server-framework-691.html</guid>
      <description>Version 6.9.1 of The Server Framework was released today.
This release includes changes to support Visual Studio 2017 15.5 and some bug fixes. It&amp;rsquo;s required if you&amp;rsquo;re using Visual Studio 2017.
As always, see the release notes here, for full details of all changes.
Bug fixes:
Bug fix to JetByteTools::Win32::TimeChangeNotificationMonitor so that it doesn&amp;rsquo;t leak window timer handles. Note the leak was, at worst, one handle per object lifetime. Bug fix to JetByteTools::Win32::TZeroInitialiseExpandableBuffer for when it&amp;rsquo;s instantiated with non-POD types.</description>
    </item>
    
    <item>
      <title>C&#43;&#43; Tools - Deleaker</title>
      <link>https://lenholgate.com/blog/2017/11/c-tools---deleaker.html</link>
      <pubDate>Tue, 28 Nov 2017 16:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2017/11/c-tools---deleaker.html</guid>
      <description>I&amp;rsquo;ve just purchased a license for Deleaker by Softanics. I found out about the tool from Bartek&amp;rsquo;s coding blog where he writes about the tool here.
I downloaded the trial edition and it found quite a few subtle issues in some of my unit test code. Nothing too serious, but stuff that other tools have missed. The run-time overhead doesn&amp;rsquo;t appear to be that great, my server tests still run at a reasonable speed and nothing fails because of the instrumentation.</description>
    </item>
    
    <item>
      <title>C&#43;&#43; Tools - CppDepend - 2017 update...</title>
      <link>https://lenholgate.com/blog/2017/11/c-tools---cppdepend---2017-update.html</link>
      <pubDate>Mon, 27 Nov 2017 12:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2017/11/c-tools---cppdepend---2017-update.html</guid>
      <description>I&amp;rsquo;ve been trying various static analysis tools on the C++ code of The Server Framework. I&amp;rsquo;ve now been using Resharper C++ quite regularly for over a year and I still use the Gimpel PC-Lint Plus Beta on a regular basis. I haven&amp;rsquo;t used CppDepend as much, mainly because once I&amp;rsquo;d fixed the issues that it raised, and that I decided I needed to fix, I pretty much left it alone. This is possibly because I run it as an external tool and I run both Resharper and PC-Lint as fully integrated Visual Studio extensions.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Latest release of The Server Framework: 6.9</title>
      <link>https://lenholgate.com/asynchronousevents/2017/11/latest-release-of-the-server-framework-69.html</link>
      <pubDate>Mon, 27 Nov 2017 10:15:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2017/11/latest-release-of-the-server-framework-69.html</guid>
      <description>Version 6.9 of The Server Framework was released today.
This release includes lots of code change due to: the removal of support for Visual Studio 2012 and the results of lots of static analysis.
As always, see the release notes here, for full details of all changes.
Bug fixes:
Bug fix to JetByteTools::Win32::TAddressOrderedMultiLock::Unlock() which was not setting the &amp;rsquo;locked&amp;rsquo; flag correctly and so could lead to locks being unlocked multiple times.</description>
    </item>
    
    <item>
      <title>VMWare bridged networking intermittently failing</title>
      <link>https://lenholgate.com/blog/2017/10/vmware-bridged-networking-intermittently-failing.html</link>
      <pubDate>Mon, 16 Oct 2017 13:51:57 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2017/10/vmware-bridged-networking-intermittently-failing.html</guid>
      <description>This is one of those &amp;rsquo;note to self&amp;rsquo; postings&amp;hellip;
I have a VMWare box that uses bridged networking and has a static DHCP address that I use for a specific client&amp;rsquo;s testing as a db server. Every so often the virtual machine fails to connect to the network properly and ends up with a bogus ip address. I then spend ages trying to work out what&amp;rsquo;s going wrong&amp;hellip;
This link, may help.</description>
    </item>
    
    <item>
      <title>JetByte News: WebRTC, TLS hardening and Scalable game servers</title>
      <link>https://lenholgate.com/news/2017/08/webrtc-tls-and-scalable-game-servers.html</link>
      <pubDate>Thu, 17 Aug 2017 12:03:30 +0000</pubDate>
      
      <guid>https://lenholgate.com/news/2017/08/webrtc-tls-and-scalable-game-servers.html</guid>
      <description>This year is proving to be yet another busy one for us. We&amp;rsquo;ve continued to work with Eonic Gaming on their servers for the Turf Battles Triumphus 3D MMORPG and we have done quite a bit of work with various clients regarding hardening their TLS servers. The main focus though has been digging into WebRTC data channels.
The WebRTC work is nice, though fairly complex. It&amp;rsquo;s based on lots of RFCs and the initial learning curve was pretty steep.</description>
    </item>
    
    <item>
      <title>How to determine if a non-IFS LSP is installed</title>
      <link>https://lenholgate.com/blog/2017/01/setfilecompletionnotificationmodes-can-cause-iocp-to-fail-if-a-non-ifs-lsp-is-installed.html</link>
      <pubDate>Fri, 13 Jan 2017 08:59:14 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2017/01/setfilecompletionnotificationmodes-can-cause-iocp-to-fail-if-a-non-ifs-lsp-is-installed.html</guid>
      <description>Enabling FILE_SKIP_COMPLETION_PORT_ON_SUCCESS on a handle associated with an I/O completion port can improve performance and reduce context switching by allowing the thread that calls the API that can complete asynchronously to handle the completion &amp;ldquo;inline&amp;rdquo; if the call can complete synchronously. This is especially useful for TCP reads when there&amp;rsquo;s already data in the network stack&amp;rsquo;s buffers, or writes when there is space in the buffers. Whilst there are design issues that must be taken into consideration before simply enabling this flag (beware recursion!</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Latest release of The Server Framework: 6.8</title>
      <link>https://lenholgate.com/asynchronousevents/2016/12/latest-release-of-the-server-framework-68.html</link>
      <pubDate>Mon, 05 Dec 2016 09:31:08 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2016/12/latest-release-of-the-server-framework-68.html</guid>
      <description>Version 6.8 of The Server Framework was released today.
This release includes important bug fixes. It also includes lots of code change due to: the removal of support for Visual Studio 2010, adding support for Visual Studio 2017 and the results of lots of static analysis.
This release is essential for users of Release 6.7.
As always, see the release notes here, for full details of all changes.
Bug fixes:</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Bug in multi-buffer writes in 6.7</title>
      <link>https://lenholgate.com/asynchronousevents/2016/12/bug-in-multi-buffer-writes-in-67.html</link>
      <pubDate>Mon, 05 Dec 2016 09:31:01 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2016/12/bug-in-multi-buffer-writes-in-67.html</guid>
      <description>A bug has been discovered in Release 6.7 in the code that deals with TCP socket writes that involve more than a single buffer. These &amp;lsquo;multi-buffer writes&amp;rsquo; are writes that involves either a buffer chain or a block of data passed as a pointer and a length where the length exceeds the size of the buffer allocator that the connection is using.
The bug prevents the &amp;lsquo;multi-buffer write&amp;rsquo; from being executed as a single atomic write at the network layer and so can cause corruption of a TCP data stream if multiple sockets are writing to the same connection concurrently.</description>
    </item>
    
    <item>
      <title>C&#43;&#43; Tools - JetBrains ReSharper C&#43;&#43; - purchased...</title>
      <link>https://lenholgate.com/blog/2016/11/c-tools---jetbrains-resharper-c---purchased.html</link>
      <pubDate>Tue, 15 Nov 2016 16:16:11 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2016/11/c-tools---jetbrains-resharper-c---purchased.html</guid>
      <description>I&amp;rsquo;ve been looking at Resharper C++ by JetBrains for a while now and the trial period has finally run out. I immediately bought a license which shows how my feelings have changed about the product during the trial.
Initially I found that the tool got in my way too much, I still find it a little sluggish at times but I think that my initial tests were hurt by the fact that I was running multiple copies of Visual Studio (as is my way) with multiple large projects and generating code inspection reports in all of them at the same time&amp;hellip; Well, that&amp;rsquo;s how I&amp;rsquo;d want to use it&amp;hellip; Anyway, when limiting myself to one or two concurrent instances things were better.</description>
    </item>
    
    <item>
      <title>C&#43;&#43; Tools - CppDepend</title>
      <link>https://lenholgate.com/blog/2016/11/c-tools---cppdepend.html</link>
      <pubDate>Mon, 14 Nov 2016 13:45:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2016/11/c-tools---cppdepend.html</guid>
      <description>I&amp;rsquo;ve been trying various static analysis tools on the C++ code of The Server Framework. So far I&amp;rsquo;m using Resharper C++ and the Gimpel PC-Lint Plus Beta on a regular basis and I&amp;rsquo;ve now added CppDepend into the loop.
Full disclosure. I have been given a CppDepend license.
As I&amp;rsquo;ve said before, whilst CppDepend is easy to get hold of, easy to install and &amp;ldquo;just works&amp;rdquo; I don&amp;rsquo;t find it that useful.</description>
    </item>
    
    <item>
      <title>Practical Testing: 37 - Bringing the code up to date</title>
      <link>https://lenholgate.com/blog/2016/11/practical-testing-37---bringing-the-code-up-to-date.html</link>
      <pubDate>Fri, 11 Nov 2016 13:45:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2016/11/practical-testing-37---bringing-the-code-up-to-date.html</guid>
      <description>Previously on &amp;ldquo;Practical Testing&amp;rdquo;&amp;hellip; Having just resurrected this series of blog posts about testing a non-trivial piece of real-world C++ code I&amp;rsquo;ve fixed a few bugs and done a bit of refactoring. There&amp;rsquo;s one more step required to bring the code in this article right up to date.
The timer queue that is the focus of these blog posts is part of The Server Framework. This body of code has been around since 2001 and has evolved to support new platforms and compilers.</description>
    </item>
    
    <item>
      <title>C&#43;&#43; Tools - JetBrains ReSharper C&#43;&#43; is slowly winning me over</title>
      <link>https://lenholgate.com/blog/2016/11/c-tools---jetbrains-resharper-c-is-slowly-winning-me-over.html</link>
      <pubDate>Fri, 11 Nov 2016 08:50:13 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2016/11/c-tools---jetbrains-resharper-c-is-slowly-winning-me-over.html</guid>
      <description>I&amp;rsquo;ve been looking at Resharper C++ by JetBrains for a while now and I expect I&amp;rsquo;m nearing the end of the trial period. Initially I found it got in my way but slowly I think it&amp;rsquo;s training me to ignore the niggles and I&amp;rsquo;m finding the functionality quite compelling.
At present, I&amp;rsquo;m most interested in the &amp;ldquo;code inspection&amp;rdquo; report from Resharper. Comparing it to the similar functionality in PC-Lint and CppDepend, etc.</description>
    </item>
    
    <item>
      <title>Practical Testing: 36 - Timeout handle wrap</title>
      <link>https://lenholgate.com/blog/2016/11/practical-testing-36---timeout-handle-wrap.html</link>
      <pubDate>Thu, 10 Nov 2016 13:45:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2016/11/practical-testing-36---timeout-handle-wrap.html</guid>
      <description>Previously on &amp;ldquo;Practical Testing&amp;rdquo;&amp;hellip; I&amp;rsquo;ve just fixed a new bug in the timer queue and in doing so I updated the code used in the blog posts to the latest version that ships with The Server Framework. This code included two fixes that had been fixed some time ago and which I hadn&amp;rsquo;t documented here. They also lacked unit tests&amp;hellip; Last time, I wrote tests for, and fixed, the first bug.</description>
    </item>
    
    <item>
      <title>Practical Testing: 35 - Heap corruption</title>
      <link>https://lenholgate.com/blog/2016/11/practical-testing-35---heap-corruption.html</link>
      <pubDate>Wed, 09 Nov 2016 13:45:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2016/11/practical-testing-35---heap-corruption.html</guid>
      <description>Previously on &amp;ldquo;Practical Testing&amp;rdquo;&amp;hellip; I&amp;rsquo;ve just fixed a new bug in the timer queue and in doing so I updated the code used in the blog posts to the latest version that ships with The Server Framework. This code included two fixes that had been fixed some time ago and which I hadn&amp;rsquo;t documented here. They also lacked unit tests&amp;hellip; In this episode I find and fix the first of these issues by writing a unit test that triggers the issue.</description>
    </item>
    
    <item>
      <title>C&#43;&#43; Tools - Some thoughts on JetBrains ReSharper C&#43;&#43;</title>
      <link>https://lenholgate.com/blog/2016/11/c-tools---some-thoughts-on-jetbrains-resharper-c.html</link>
      <pubDate>Wed, 09 Nov 2016 09:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2016/11/c-tools---some-thoughts-on-jetbrains-resharper-c.html</guid>
      <description>Following on from my rant about C++ tooling and its follow up. I&amp;rsquo;ve been looking at JetBrains ReSharper for C++. This isn&amp;rsquo;t a review, more just my initial thoughts.
TL;DR I&amp;rsquo;d like to like it. It does some good things but it also gets in my way and slows me down.
ReSharper is a Visual Studio add-in. In general I don&amp;rsquo;t like add-ins but this comes from my years working short contracts and multiple clients where it was easiest to be at home in a clean Visual Studio installation as no two clients would have the same add-ins installed.</description>
    </item>
    
    <item>
      <title>Practical Testing: 34 - Potential reentrant locking deadlock</title>
      <link>https://lenholgate.com/blog/2016/11/practical-testing-34---potential-recursive-locking-deadlock.html</link>
      <pubDate>Tue, 08 Nov 2016 13:45:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2016/11/practical-testing-34---potential-recursive-locking-deadlock.html</guid>
      <description>Back in 2004, I wrote a series of articles called &amp;ldquo;Practical Testing&amp;rdquo; where I took a piece of complicated multi-threaded code and wrote tests for it. I then rebuild the code from scratch in a test driven development style to show how writing your tests before your code changes how you design your code. Since the original articles there have been several bug fixes and redesigns all of which have been supported by the original unit tests and many of which have led to the development of more tests.</description>
    </item>
    
    <item>
      <title>More thoughts on C&#43;&#43; Tools (on Windows)</title>
      <link>https://lenholgate.com/blog/2016/10/more-thoughts-on-c-tools-on-windows-1.html</link>
      <pubDate>Fri, 14 Oct 2016 14:26:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2016/10/more-thoughts-on-c-tools-on-windows-1.html</guid>
      <description>Last Friday&amp;rsquo;s rant about C++ static and dynamic analysis tools was picked up by Reddit and I have had quite a few helpful suggestions for other tools to try. Thanks!
Dr. Memory.
Microsoft&amp;rsquo;s Application Verifier.
CPPDepend
PVS Studio
Microsoft&amp;rsquo;s CRT Debug heap.
CLang - various options, especially using AddressSanitizer.
So far I&amp;rsquo;ve had a quick look at Dr. Memory, which seems to be pretty good. Free, easy to download and install and it&amp;rsquo;s faster than DevPartner and &amp;lsquo;just works&amp;rsquo;.</description>
    </item>
    
    <item>
      <title>It must be about time for a &#39;the state of C&#43;&#43; tooling&#39; rant...</title>
      <link>https://lenholgate.com/blog/2016/10/it-must-be-about-time-for-a-the-state-of-c-tooling-rant.html</link>
      <pubDate>Fri, 07 Oct 2016 11:45:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2016/10/it-must-be-about-time-for-a-the-state-of-c-tooling-rant.html</guid>
      <description>I tend to develop code with JITT (Just in time testing), this is like TDD when I&amp;rsquo;m doing it but it doesn&amp;rsquo;t always get done. What does get done, generally, is the &amp;ldquo;first test&amp;rdquo; for each class. This ensures that subsequent testing is possible as the code doesn&amp;rsquo;t have hidden dependencies and it gives me a test harness that&amp;rsquo;s ready to go when I find that I need it. More complex code end up being TDD, easier bits end up as JITT where the tests are only written when I&amp;rsquo;ve wasted time banging my head on the desk trying to debug problems the &amp;ldquo;old fashioned way&amp;rdquo;.</description>
    </item>
    
    <item>
      <title>Hosting .Net Core in C&#43;&#43;</title>
      <link>https://lenholgate.com/blog/2016/09/hosting-net-core-in-c.html</link>
      <pubDate>Fri, 30 Sep 2016 13:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2016/09/hosting-net-core-in-c.html</guid>
      <description>One of the things that came out of my conversations with clients last night was an interest in hosting .Net Core from native code.
Of course we already host the CLR and provide an easy way to write servers that do the heavy lifting in native code and call out to managed code for the business logic. We have several clients using this to host managed &amp;ldquo;plugins&amp;rdquo; inside a native host and it works very well.</description>
    </item>
    
    <item>
      <title>London MMO Meetup - Christof Wegmann from Exit Games and Ben Hollis from King</title>
      <link>https://lenholgate.com/blog/2016/09/london-mmo-meetup---christof-from-exit-games-and-ben-hollis-from-king.html</link>
      <pubDate>Fri, 30 Sep 2016 10:30:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2016/09/london-mmo-meetup---christof-from-exit-games-and-ben-hollis-from-king.html</guid>
      <description>I dragged myself into London last night for the London MMO Meetup. I had some clients that I wanted to chat to who were going and the programme looked good.
This was the first &amp;ldquo;meetup&amp;rdquo; that I&amp;rsquo;d been to, it was good and the format worked well. We were hosted by King at their London office on Wardour Street. The office was great, the presentation space was good and they provided a nice spread of food and drink.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Supporting Visual Studio 2015 Update 3</title>
      <link>https://lenholgate.com/asynchronousevents/2016/07/supporting-visual-studio-2015-update-3.html</link>
      <pubDate>Mon, 11 Jul 2016 10:15:12 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2016/07/supporting-visual-studio-2015-update-3.html</guid>
      <description>Visual Studio Update 3 adds some new warnings for precompiled header generation. One of these, C4598, will prevent precompiled header builds of framework code due to our warnings as errors policy.
A fix for this issue is to add the new warning to the list of disabled warnings in the project file. The easiest way to do this is to do a search and replace across your source tree for *.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Latest release of The Server Framework: 6.7</title>
      <link>https://lenholgate.com/asynchronousevents/2016/06/latest-release-of-the-server-framework-67.html</link>
      <pubDate>Thu, 09 Jun 2016 14:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2016/06/latest-release-of-the-server-framework-67.html</guid>
      <description>Version 6.7 of The Server Framework was released today.
This release is mainly a code simplification release which removes support for legacy compilers and operating systems. See here for more details. However, there are some breaking changes where smart buffers have replaced buffer references and this causes function signature changes. In addition there has been considerable churn in the Streaming Media Option Pack with knock on changes in the HTTP library code which needed to be made more complete to deal with serving HLS streams.</description>
    </item>
    
    <item>
      <title>Visual Studio Component Cache bug looks like it&#39;s here to stay...</title>
      <link>https://lenholgate.com/blog/2016/06/visual-studio-component-cache-bug-looks-like-its-here-to-stay.html</link>
      <pubDate>Wed, 08 Jun 2016 12:00:02 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2016/06/visual-studio-component-cache-bug-looks-like-its-here-to-stay.html</guid>
      <description>So, it&amp;rsquo;s nearly a year since I first started noticing issues with VS2015 on my build servers. The bug in question now has an entry on Microsoft Connect and Google can help with some work arounds which don&amp;rsquo;t require turning the machine off and on again a random number of times until it works&amp;hellip; There&amp;rsquo;s even a Visual Studio extension that fixes the issue for you (!).
I find it disappointing that this hasn&amp;rsquo;t been fixed, it&amp;rsquo;s a fundamental usability issue which seems to be causing lots of people lots of pain.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: 6.7 - Potentially faster code, in some circumstances...</title>
      <link>https://lenholgate.com/asynchronousevents/2016/06/67---potentially-faster-code-in-some-circumstances.html</link>
      <pubDate>Wed, 08 Jun 2016 10:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2016/06/67---potentially-faster-code-in-some-circumstances.html</guid>
      <description>I hinted at the end of the last post that the 6.7 release might increase performance a little. Well, whilst the bulk of the changes in 6.7 are purely code cleaning and the removal of legacy support there is a fairly major functional change as well.
In most situations references or pointers to I/O buffers have been replaced with smart pointers. This change may cause some issues during an upgrade as you need to change some function signatures from IBuffer refs to CSmartBuffers.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Another release is coming...</title>
      <link>https://lenholgate.com/asynchronousevents/2016/06/another-release-is-coming.html</link>
      <pubDate>Tue, 07 Jun 2016 13:06:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2016/06/another-release-is-coming.html</guid>
      <description>We&amp;rsquo;ve only just shipped Release 6.6.5 of The Server Framework but we already have another release that&amp;rsquo;s just about to ship. This isn&amp;rsquo;t because some horrible bug has slipped through our testing, it&amp;rsquo;s because we&amp;rsquo;ve been planning to produce a &amp;lsquo;clean up&amp;rsquo; release for some time. 6.7 is that release.
Lets be straight here, 6.7 is a release for us more than for you. The aim is to simplify our build/test and release process, remove dead code whilst introducing no new bugs and removing no functionality that you rely on.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Latest release of The Server Framework: 6.6.5</title>
      <link>https://lenholgate.com/asynchronousevents/2016/06/latest-release-of-the-server-framework-665.html</link>
      <pubDate>Thu, 02 Jun 2016 09:50:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2016/06/latest-release-of-the-server-framework-665.html</guid>
      <description>Version 6.6.5 of The Server Framework was released today.
This release is mainly a feature release with a few bug fixes.
As always, see the release notes here, for full details of all changes.
Bug fixes:
Bug fix to JetByteTools::Socket::TAsyncSocket::ProcessAndGetNextOperation(). We now wrap the body of the function in an exception handler and abort the connection with JetByteTools::Socket::ConnectionClosureReason::FatalErrorAbort if an exception is thrown during processing. This fixes a bug whereby the connection would otherwise hang in these situations.</description>
    </item>
    
    <item>
      <title>JetByte News: Things have been busy!</title>
      <link>https://lenholgate.com/news/2016/05/things-have-been-busy.html</link>
      <pubDate>Tue, 24 May 2016 15:06:30 +0000</pubDate>
      
      <guid>https://lenholgate.com/news/2016/05/things-have-been-busy.html</guid>
      <description>We&amp;rsquo;ve been busy with lots of custom development work over the last few months. Working with Eonic Gaming on their server for the Turf Battles Triumphus 3D MMORPG. Working with one of our security company clients on their video streaming server, adding RTP over TCP and HLS streams to the RTP over UDP of the original design. Improving the performance and functionality of the pluggable server that we wrote for one of our other gaming clients as they scale out into the cloud.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: TLS 1.2 handshake failure for certificates signed with MD5</title>
      <link>https://lenholgate.com/asynchronousevents/2015/12/tls-12-handshake-failure-for-certificates-signed-with-md5.html</link>
      <pubDate>Wed, 16 Dec 2015 15:52:39 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2015/12/tls-12-handshake-failure-for-certificates-signed-with-md5.html</guid>
      <description>A while back a client of mine had an issue with a TLS 1.2 connection failing during the TLS handshake. We couldn&amp;rsquo;t see any issues with the code and if we only enabled TLS 1.1 on the server then the connection handshake worked just fine.
Eventually we tracked the issue down to the fact that the certificate in use had been signed with MD5 and that MD5 isn&amp;rsquo;t a valid hash algorithm for TLS 1.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Latest release of The Server Framework: 6.6.4</title>
      <link>https://lenholgate.com/asynchronousevents/2015/12/latest-release-of-the-server-framework-664.html</link>
      <pubDate>Mon, 14 Dec 2015 14:44:44 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2015/12/latest-release-of-the-server-framework-664.html</guid>
      <description>Version 6.6.4 of The Server Framework was released today.
This release is mainly a bug fix release for clients using WebSockets over SSL.
As always, see the release notes here, for full details of all changes.
Bug fixes:
Bug fix to JetByteTools::Win32::CallbackTimerQueueBase which prevents the timeout handle from ever being incremented to zero. It&amp;rsquo;s unlikely but possible. Bug fix to JetByteTools::Win32::CBuffer and JetByteTools::Win32::CLockFreeBuffer to make code take notice of when m_maxBytesToRead is set.</description>
    </item>
    
    <item>
      <title>SChannel ALPN support, documentation &#39;bug&#39;...</title>
      <link>https://lenholgate.com/blog/2015/11/schannel-alpn-support-documentation-bug.html</link>
      <pubDate>Thu, 05 Nov 2015 15:17:11 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2015/11/schannel-alpn-support-documentation-bug.html</guid>
      <description>I&amp;rsquo;m looking at adding support for the TLS Application-Layer Protocol Negotiation Extension to The Server Framework as a precursor to looking into HTTP 2.0 support. This TLS extension is supported by both SChannel and OpenSSL. It&amp;rsquo;s relatively new (only having been included in SChannel since June 2014 (!)) but there seems to be no documentation on MSDN for the structures and how to use them to add the appropriate entries to the TLS handshake and then to select and validate the protocol of your choice&amp;hellip; Searching today with Google for something like &amp;ldquo;SEC_APPLICATION_PROTOCOL_NEGOTIATION_EXT&amp;rdquo; just gives just the usual selection of hits to people who think it&amp;rsquo;s clever to run the Windows header files through their document generators and then publish the results on the web&amp;hellip;</description>
    </item>
    
    <item>
      <title>GetVersionInfoEx() deliberately broken in Windows 8.1/10</title>
      <link>https://lenholgate.com/blog/2015/09/getversioninfoex-deliberately-broken-in-windows-8110.html</link>
      <pubDate>Wed, 16 Sep 2015 10:36:34 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2015/09/getversioninfoex-deliberately-broken-in-windows-8110.html</guid>
      <description>There should be a Developer Advocate position within Microsoft. They seriously need someone who doesn&amp;rsquo;t &amp;ldquo;Drink the Kool-Aid&amp;rdquo; who can step in and tell the Program Managers or Marketing bods or whoever it is who makes all the really STUPID decisions that the decision is stupid and that they should get back in their box and leave the developers who support the Windows ecosystem by building software that runs on it to just get on with their lives&amp;hellip;</description>
    </item>
    
    <item>
      <title>Visual Studio 2015 Bugs - Save As existing file crash</title>
      <link>https://lenholgate.com/blog/2015/08/visual-studio-2015-bugs---save-as-existing-file-crash.html</link>
      <pubDate>Fri, 28 Aug 2015 15:31:23 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2015/08/visual-studio-2015-bugs---save-as-existing-file-crash.html</guid>
      <description>As I said a while ago, Visual Studio 2015 appears to have lots of pretty serious bugs.
One that probably bites me more than many people is this Save As bug. If you have a project and you select a file in that project and do a &amp;ldquo;Save As&amp;rdquo; such that the target file is also in the project then the VS2015 IDE crashes.
I tweeted about this a while back, and the Visual Studio Program Manager, Cathy Sullivan, wanted me to create a new project and see if the problem happened with it&amp;hellip; Not quite sure why she couldn&amp;rsquo;t do this herself, but anyway, here&amp;rsquo;s a zip of a project created with VS2015 where there&amp;rsquo;s a file called SaveMeAsTargetver.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Latest release of The Server Framework: 6.6.3</title>
      <link>https://lenholgate.com/asynchronousevents/2015/08/latest-release-of-the-server-framework-663.html</link>
      <pubDate>Tue, 25 Aug 2015 10:30:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2015/08/latest-release-of-the-server-framework-663.html</guid>
      <description>Version 6.6.3 of The Server Framework was released today.
This release is mainly a bug fix release but it also adds support for Visual Studio 2015 and Windows 10 (though we don&amp;rsquo;t explicitly use any Windows 10 APIs). There are quite a lot of small changes due to us running Gimpel Lint over the code. Most of the changes will have fixed potential issues rather than issues that have actually been reported.</description>
    </item>
    
    <item>
      <title>Visual Studio 2015 RTM - I hope the first service release is soon...</title>
      <link>https://lenholgate.com/blog/2015/07/visual-studio-2015-rtm---i-hope-the-first-service-release-is-soon.html</link>
      <pubDate>Fri, 24 Jul 2015 21:00:40 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2015/07/visual-studio-2015-rtm---i-hope-the-first-service-release-is-soon.html</guid>
      <description>As usual I have used VMs to play with the CTP releases for the new version of Visual Studio and fixed up new warnings and build failures in my source so that I&amp;rsquo;m not too surprised when the RTM comes along.
Unfortunately as soon as I put VS2015 RTM on my build server and started running it as part of my CI system I started noticing strange things&amp;hellip;
The first is that it seems to be possible to get VS2015 into a state where it will refuse to load C++ projects.</description>
    </item>
    
    <item>
      <title>The real solution to &#39;error MSB4175: The task factory &#39;CodeTaskFactory&#39; could not be loaded from the assembly&#39;</title>
      <link>https://lenholgate.com/blog/2015/07/the-real-solution-to-error-msb4175-the-task-factory-codetaskfactory-could-not-be-loaded-from-the-ass.html</link>
      <pubDate>Wed, 15 Jul 2015 08:55:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2015/07/the-real-solution-to-error-msb4175-the-task-factory-codetaskfactory-could-not-be-loaded-from-the-ass.html</guid>
      <description>I now have a real solution to the problem that I outlined on Saturday night and this solution, unlike the one developed during my &amp;ldquo;Macallan driven development&amp;rdquo; session on Saturday evening actually works.
The problem is that when using code to run build using VS2010 by running a project into devenv.com I get the following error message:
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v12.0\CodeAnalysis\Microsoft.CodeAnalysis.targets(214,5): error MSB4175: The task factory &amp;#34;CodeTaskFactory&amp;#34; could not be loaded from the assembly &amp;#34;C:\Windows\Microsoft.</description>
    </item>
    
    <item>
      <title>Solution to &#39;error MSB4175: The task factory &#39;CodeTaskFactory&#39; could not be loaded from the assembly&#39;</title>
      <link>https://lenholgate.com/blog/2015/07/solution-to-error-msb4175-the-task-factory-codetaskfactory-could-not-be-loaded-from-the-assembly.html</link>
      <pubDate>Sat, 11 Jul 2015 21:41:54 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2015/07/solution-to-error-msb4175-the-task-factory-codetaskfactory-could-not-be-loaded-from-the-assembly.html</guid>
      <description>Updated: 12 July 2015 - It seems that this is all incorrect&amp;hellip; Upon running my tests again this morning I find that the x64 task runner also fails to run VS2010 correctly and so the environment differences are unlikely to be the cause&amp;hellip;
So, having decided that my continuous integration system could be better, and having looked at JetBrains&amp;rsquo; TeamCity and decided that it doesn&amp;rsquo;t quite fit I&amp;rsquo;m looking back at some code that I wrote back in 2008 when I last thought about this kind of thing&amp;hellip;</description>
    </item>
    
    <item>
      <title>Bug hunting</title>
      <link>https://lenholgate.com/blog/2015/07/bug-hunting.html</link>
      <pubDate>Wed, 01 Jul 2015 11:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2015/07/bug-hunting.html</guid>
      <description>I&amp;rsquo;ve just spent a day tracking down a bug in a pending release of The Server Framework. It was an interesting, and actually quite enjoyable, journey but one that I shouldn&amp;rsquo;t have had to make. The bug was due to a Windows API call being inserted between the previous API call and the call to GetLastError() to retrieve the error code on failure. The new API call overwrote the previous error value and this confused the error handling code for the previous API call.</description>
    </item>
    
    <item>
      <title>Hotfix now available for Slim Reader/Writer lock issue</title>
      <link>https://lenholgate.com/blog/2015/06/hotfix-now-available-for-slim-readerwriter-lock-issue.html</link>
      <pubDate>Wed, 03 Jun 2015 08:34:13 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2015/06/hotfix-now-available-for-slim-readerwriter-lock-issue.html</guid>
      <description>Back in September I mentioned that I had found a problem with my usage of Slim reader/writer locks. I expected this to be something that I was doing wrong but it turned out that it was a kernel bug.
This morning Johan Torp tweeted that a hotfix for this issue is now available.
The note on the hotfix states: &amp;ldquo;Note These issues are not obvious and are difficult to debug. This update is intended for applicable systems to apply proactively in order to increase the reliability of these systems.</description>
    </item>
    
    <item>
      <title>Video streaming from IoT devices</title>
      <link>https://lenholgate.com/blog/2015/04/video-streaming-from-iot-devices.html</link>
      <pubDate>Thu, 30 Apr 2015 09:22:11 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2015/04/video-streaming-from-iot-devices.html</guid>
      <description>As I mentioned back in February I&amp;rsquo;ve been working on a custom video streaming solution for one of my clients. This has been a lot of fun. It was a nicely defined spec using industry standard protocols developed on a fixed price basis with lots of TDD, what&amp;rsquo;s not to like.
The system allows a controlling application to set up RTSP streams for broadcasting to multiple clients. The data for the stream is being transmitted live from one of thousands of smart (IoT) devices and the server buffers this and broadcasts it using RTSP to publish the RTP streams.</description>
    </item>
    
    <item>
      <title>JetByte News: New IoT fixed-price development project</title>
      <link>https://lenholgate.com/news/2015/02/new-iot-fixed-price-development-project.html</link>
      <pubDate>Wed, 18 Feb 2015 10:45:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/news/2015/02/new-iot-fixed-price-development-project.html</guid>
      <description>We&amp;rsquo;re pleased to be working with one of our secretive security company clients again to provide a custom video streaming server for them. The server will enable them to record and stream live video from their network of &amp;ldquo;internet of things&amp;rdquo; connected devices.
As with all M2M and IoT projects this system needs to be able to scale to many thousands of concurrently connected devices and we&amp;rsquo;re pleased to be able to use The Server Framework&amp;rsquo;s new Streaming Media Option pack to be able to provide a complete solution quickly and cost effectively for our client.</description>
    </item>
    
    <item>
      <title>That Slim Reader/Writer lock issue is a kernel bug</title>
      <link>https://lenholgate.com/blog/2015/01/that-slim-readerwriter-lock-issue-is-a-kernel-bug.html</link>
      <pubDate>Tue, 27 Jan 2015 10:35:58 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2015/01/that-slim-readerwriter-lock-issue-is-a-kernel-bug.html</guid>
      <description>It looks like the Slim Reader/Writer issue that I wrote about back in September is a kernel bug after all.
Stefan Boberg has just tweeted to let me know that Microsoft has confirmed it&amp;rsquo;s a bug and that a hot fix is in testing.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: WSARecv, WSASend and thread safety</title>
      <link>https://lenholgate.com/asynchronousevents/2015/01/wsarecv-wsasend-and-thread-safety.html</link>
      <pubDate>Mon, 19 Jan 2015 10:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2015/01/wsarecv-wsasend-and-thread-safety.html</guid>
      <description>Last week I learnt something new, which is always good. Unfortunately it was that for over 15 years I&amp;rsquo;d been working under a misconception about how an API worked.
TL;DRWhen using WSARecv() and WSASend() from multiple threads on a single socket you must ensure that only one thread calls into the API at a given time. Failure to do so can cause buffer corruption.
It all began with this question on StackOverflow and I dived in and gave my usual response.</description>
    </item>
    
    <item>
      <title>Living with Gimpel Lint is made so much easier with Visual Lint</title>
      <link>https://lenholgate.com/blog/2015/01/living-with-gimpel-lint-is-made-so-much-easier-with-visual-lint.html</link>
      <pubDate>Wed, 07 Jan 2015 16:00:05 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2015/01/living-with-gimpel-lint-is-made-so-much-easier-with-visual-lint.html</guid>
      <description>I&amp;rsquo;ve been a big fan of Gimpel Lint for years. It&amp;rsquo;s a great static analysis tool for C++ and it can locate all kinds of issues or potential issues in the code. My problem with it has always been that it&amp;rsquo;s a bit of a pig to configure and run, more so if you&amp;rsquo;re used to working inside an IDE all the time. Several years back I had some custom Visual Studio menu items that I&amp;rsquo;d crufted up that ran Gimpel Lint on a file or a project and some more cruft that converted the output to something clickable in the IDE&amp;rsquo;s output pane.</description>
    </item>
    
    <item>
      <title>Two quite different approaches to multi-threading</title>
      <link>https://lenholgate.com/blog/2014/12/two-quite-different-approaches-to-multi-threading.html</link>
      <pubDate>Fri, 19 Dec 2014 14:30:24 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2014/12/two-quite-different-approaches-to-multi-threading.html</guid>
      <description>I&amp;rsquo;ve been working on some code for a client recently that needs to run in a multi-threaded environment. Unfortunately it was never really written with that requirement in mind, or, more likely, the people who wrote the code knew that it needed to be accessed from multiple threads but didn&amp;rsquo;t really understand quite what that meant. As such I&amp;rsquo;m doing some fairly hairy refactoring for them. It&amp;rsquo;s high risk as there are no unit tests and the budget doesn&amp;rsquo;t really extend to completing the work, let alone &amp;ldquo;spending extra time&amp;rdquo; writing unit tests&amp;hellip; The code is written in quite a &amp;lsquo;C&amp;rsquo; style, most things are simple structs and most data is public and as such member functions fall where they are most conveniently written.</description>
    </item>
    
    <item>
      <title>How to build a GCC Cross-Compiler</title>
      <link>https://lenholgate.com/blog/2014/11/how-to-build-a-gcc-cross-compiler.html</link>
      <pubDate>Wed, 19 Nov 2014 13:24:28 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2014/11/how-to-build-a-gcc-cross-compiler.html</guid>
      <description>This article over on Preshing on Programming looks useful. It gives a step by step guide for building GCC cross-compilers, I expect it will save me lots of time at some point in the future.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Dropping support for Visual Studio 2005 and 2008</title>
      <link>https://lenholgate.com/asynchronousevents/2014/10/dropping-support-for-visual-studio-2005-and-2008.html</link>
      <pubDate>Mon, 20 Oct 2014 09:57:09 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2014/10/dropping-support-for-visual-studio-2005-and-2008.html</guid>
      <description>The 7.0 release of The Server Framework, which is likely to be released early next year, will no longer support Visual Studio 2005 or Visual Studio 2008.
The 6.6.x releases will be the last to support these compilers.
Please get in touch immediately if this will be a problem for you.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Dropping support for Windows XP and Server 2003</title>
      <link>https://lenholgate.com/asynchronousevents/2014/10/dropping-support-for-windows-xp-and-server-2003.html</link>
      <pubDate>Mon, 20 Oct 2014 09:46:50 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2014/10/dropping-support-for-windows-xp-and-server-2003.html</guid>
      <description>The 7.0 release of The Server Framework, which is likely to be released early next year, will no longer support Windows XP or Windows Server 2003.
The 6.6.x releases will be the last to support these operating systems. Release 6.6.3, is due shortly and is a minor bug fixing release. We may release subsequent 6.6.x bug fix releases but no new development will occur on the 6.6 branch.
Removal of support for these operating systems allows us to clean up the code considerably and to remove lots of code that&amp;rsquo;s required purely to work around &amp;lsquo;interesting&amp;rsquo; twists in various Windows APIs pre-Vista.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: New option pack: Streaming Media</title>
      <link>https://lenholgate.com/asynchronousevents/2014/10/new-option-pack-streaming-media.html</link>
      <pubDate>Mon, 13 Oct 2014 10:45:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2014/10/new-option-pack-streaming-media.html</guid>
      <description>We have a new Option Pack, The Streaming Media Option Pack. This allows you to easily add streaming of H.264 and MPEG audio and video to your clients and servers using RTSP, RTP and RTCP.
With more and more Internet Of Things devices supporting rich media streaming for remote monitoring it&amp;rsquo;s becoming essential to have the ability to manage these media streams within your device management servers and clients. Whether it&amp;rsquo;s recording device streams for later analysis or arbitrating between multiple clients and devices, manipulating streaming media is becoming more and more important.</description>
    </item>
    
    <item>
      <title>Surprising Slim Reader/Writer Lock thread exit issues.</title>
      <link>https://lenholgate.com/blog/2014/09/surprising-slim-readerwriter-lock-thread-exit-issues.html</link>
      <pubDate>Fri, 19 Sep 2014 14:12:28 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2014/09/surprising-slim-readerwriter-lock-thread-exit-issues.html</guid>
      <description>I&amp;rsquo;ve been noticing a strange thing for a while on Windows 8/8.1 and the equivalent server versions. The issue occurs when I&amp;rsquo;m using a Slim Reader/Writer Lock (SRWL) exclusively in exclusive mode (as a replacement for critical sections). What happens is, when a thread that has just unlocked a SRWL exits cleanly, immediately after unlocking the lock, sometimes threads that are waiting on the lock do not get woken and none of them acquire the lock.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: New client profile: Eonic Gaming - Turf Battles</title>
      <link>https://lenholgate.com/asynchronousevents/2014/09/new-client-profile-eonic-gaming---turf-battles.html</link>
      <pubDate>Mon, 15 Sep 2014 16:30:03 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2014/09/new-client-profile-eonic-gaming---turf-battles.html</guid>
      <description>We have a new client profile available here for a new client who is using The Server Framework to power their MMORPG game server.</description>
    </item>
    
    <item>
      <title>JetByte News: Eonic Gaming - Turf Battles Triumphus - Server development</title>
      <link>https://lenholgate.com/news/2014/09/eonic-gaming---turf-battles-triumphus---server-development.html</link>
      <pubDate>Mon, 15 Sep 2014 09:54:02 +0000</pubDate>
      
      <guid>https://lenholgate.com/news/2014/09/eonic-gaming---turf-battles-triumphus---server-development.html</guid>
      <description>We&amp;rsquo;re pleased to be working with Eonic Gaming in the development of the server for their Turf Battles Triumphus 3D MMORPG.
Eonic have selected us to replace their existing networking code with The Server Framework to improve the stability and performance of their server.</description>
    </item>
    
    <item>
      <title>Activatable Object</title>
      <link>https://lenholgate.com/blog/2014/08/activatable-object.html</link>
      <pubDate>Tue, 12 Aug 2014 18:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2014/08/activatable-object.html</guid>
      <description>I&amp;rsquo;ve written an article for Overload, one of the the ACCU&amp;rsquo;s journals. It&amp;rsquo;s based on my Efficient Multi-Threading blog post from a few weeks ago. Chris Oldwood mentioned to me about how the object described in Efficient Multi-Threading was similar to an Active Object which steals a calling thread to do its work rather than using one of its own and I agreed, he then suggested that I write it up for the ACCU journal.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Latest release of The Server Framework: 6.6.2</title>
      <link>https://lenholgate.com/asynchronousevents/2014/08/latest-release-of-the-server-framework-662.html</link>
      <pubDate>Fri, 01 Aug 2014 14:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2014/08/latest-release-of-the-server-framework-662.html</guid>
      <description>Version 6.6.2 of The Server Framework was released today.
This release is a bug fix and internal feature release which results in lots of change to the OpenSSL, SChannel, Compression and TCP flow control filters. See the release notes here, for full details of all changes.
All clients using earlier versions of both the OpenSSL Option Pack and the SChannel Option Pack are advised to upgrade to this release.
Bug fixes:</description>
    </item>
    
    <item>
      <title>Asynchronous Events: UDP flow control and asynchronous writes</title>
      <link>https://lenholgate.com/asynchronousevents/2014/07/udp-flow-control-and-asynchronous-writes.html</link>
      <pubDate>Tue, 22 Jul 2014 17:33:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2014/07/udp-flow-control-and-asynchronous-writes.html</guid>
      <description>I don&amp;rsquo;t believe that UDP should require any flow control in the sending application. After all, it&amp;rsquo;s unreliable and it should be quite OK for any stage of the route from one peer to another to decide to drop a datagram for any reason. However, it seems that, on Window&amp;rsquo;s at least, no datagrams will be dropped between the application and the network interface card (NIC) driver, no matter how heavily you load the system.</description>
    </item>
    
    <item>
      <title>Efficient Multi-Threading</title>
      <link>https://lenholgate.com/blog/2014/07/efficient-multi-threading.html</link>
      <pubDate>Fri, 11 Jul 2014 12:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2014/07/efficient-multi-threading.html</guid>
      <description>Performance is always important for users of The Server Framework and I often spend time profiling the code and thinking about ways to improve performance. Hardware has changed considerably since I first designed The Server Framework back in 2001 and some things that worked well enough back then are now serious impediments to further performance gains. That&amp;rsquo;s not to say that the performance of The Server Framework today is bad, it&amp;rsquo;s not, it&amp;rsquo;s just that in some situations and on some hardware it could be even better.</description>
    </item>
    
    <item>
      <title>Useful undocumented Visual Studio compiler switches</title>
      <link>https://lenholgate.com/blog/2014/07/useful-undocumented-visual-studio-compiler-switches.html</link>
      <pubDate>Thu, 10 Jul 2014 12:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2014/07/useful-undocumented-visual-studio-compiler-switches.html</guid>
      <description>Updated 1st February 2024 to fix broken links
There are a couple of undocumented Visual Studio compiler switches which can be useful occasionally:
/d1reportSingleClassLayout&amp;lt;name&amp;gt; - which produces a dump of the in memory layout of a given class
/d1reportAllClassLayout - which does the same for ALL classes
See here and here for more details.
And if you liked that, you might find this collection of debugging tricks interesting.</description>
    </item>
    
    <item>
      <title>Intrusive C&#43;&#43; containers</title>
      <link>https://lenholgate.com/blog/2014/07/intrusive-c-containers.html</link>
      <pubDate>Wed, 09 Jul 2014 12:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2014/07/intrusive-c-containers.html</guid>
      <description>Recently, whilst continuing to improve the performance of various aspects of The Server Framework, I reached a point where I found I needed to replace some STL containers with intrusive containers which didn&amp;rsquo;t need to perform memory allocations during data insertion and removal. I had been toying with the idea of implementing custom containers for some time but have only recently had a pressing need for them.
The STL provides some marvellously usable code which has changed the way people view container classes in C++.</description>
    </item>
    
    <item>
      <title>Practical Testing: 33 - Intrusive multi-map.</title>
      <link>https://lenholgate.com/blog/2014/07/practical-testing-33---intrusive-multi-map.html</link>
      <pubDate>Tue, 08 Jul 2014 12:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2014/07/practical-testing-33---intrusive-multi-map.html</guid>
      <description>Previously on &amp;ldquo;Practical Testing&amp;rdquo;&amp;hellip; I&amp;rsquo;m in the process of replacing STL containers with custom intrusive containers in the timer system that I have been developing in this series of articles. The idea is that the intrusive containers do not require memory operations for insertion or deletion as the book-keeping data required to store the data in the container has been added to the data explicitly. This reduces the potential contention between threads in the application and, hopefully, improves overall performance.</description>
    </item>
    
    <item>
      <title>Practical Testing: 32 - Intrusive containers.</title>
      <link>https://lenholgate.com/blog/2014/07/practical-testing-32---intrusive-containers.html</link>
      <pubDate>Mon, 07 Jul 2014 12:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2014/07/practical-testing-32---intrusive-containers.html</guid>
      <description>Back in 2004, I wrote a series of articles called &amp;ldquo;Practical Testing&amp;rdquo; where I took a piece of complicated multi-threaded code and wrote tests for it. I then rebuild the code from scratch in a test driven development style to show how writing your tests before your code changes how you design your code. Since the original articles there have been several bug fixes and redesigns all of which have been supported by the original unit tests and many of which have led to the development of more tests.</description>
    </item>
    
    <item>
      <title>Bitten by &#39;scoped static initialisation&#39; in C&#43;&#43; - turn on Visual Studio&#39;s C4640 warning!</title>
      <link>https://lenholgate.com/blog/2014/04/bitten-by-scoped-static-initialisation-in-c---turn-on-visual-studios-c4640-warning.html</link>
      <pubDate>Tue, 22 Apr 2014 15:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2014/04/bitten-by-scoped-static-initialisation-in-c---turn-on-visual-studios-c4640-warning.html</guid>
      <description>Today I discovered that C++ scoped static initialisation (function level) in Visual Studio is not done in a thread safe manner. It&amp;rsquo;s the kind of thing that I should have already known but I guess I assumed that since namespace level static initialisation was safe so was function level static initialisation. Unfortunately it&amp;rsquo;s not. If you read the MSDN documentation in a particular way you could decide that the docs say that it&amp;rsquo;s not; but it&amp;rsquo;s imprecise and unclear and I doubt that I did read the MSDN documentation anyway.</description>
    </item>
    
    <item>
      <title>TIME_WAIT perfmon counters</title>
      <link>https://lenholgate.com/blog/2014/04/time-wait-perfmon-counters.html</link>
      <pubDate>Tue, 01 Apr 2014 16:55:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2014/04/time-wait-perfmon-counters.html</guid>
      <description>I&amp;rsquo;ve built a small Windows Service which exposes perfmon counters to track sockets in TIME_WAIT state. It can be downloaded from the links later in this post.
Back in 2011 I was helping a client look for issues in their systems caused by having too many sockets in a TIME_WAIT state (see here for why this can be a problem). This was affecting their connectivity. Rather surprisingly there seemed to be no way to track the number of sockets in TIME_WAIT using perfmon as there didn&amp;rsquo;t seem to be a counter exposed.</description>
    </item>
    
    <item>
      <title>JetByte News: New fixed-price development project</title>
      <link>https://lenholgate.com/news/2014/03/new-fixed-price-development-project-1.html</link>
      <pubDate>Tue, 11 Mar 2014 10:52:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/news/2014/03/new-fixed-price-development-project-1.html</guid>
      <description>We&amp;rsquo;re pleased to be working with VEXIS Systems Inc. again to extend the high performance pluggable server platform that we built for them back in 2008 using The Server Framework. Later, we extended the server to support the hosting of managed plugins with our CLR Hosting Option Pack and some custom development.
This time around we&amp;rsquo;re adding more new functionality to make it easier for them to integrate with external systems.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Latest release of The Server Framework: 6.6.1</title>
      <link>https://lenholgate.com/asynchronousevents/2014/02/latest-release-of-the-server-framework-661.html</link>
      <pubDate>Mon, 17 Feb 2014 10:30:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2014/02/latest-release-of-the-server-framework-661.html</guid>
      <description>Version 6.6.1 of The Server Framework was released today.
This release is a minor bug fix release mainly for several bugs in the 6.6 version&amp;rsquo;s OpenSSL code, see the release notes here, for full details of all changes.
All clients using version 6.6 of the OpenSSL Option Pack are advised to upgrade to this release.
Bug fixes:
Bug fix to JetByteTools::OpenSSL::CAsyncConnector so that we spot failures in the SSL allocation functions due to low memory situations and throw exceptions if we fail to create the SSL objects.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: OpenSSL outbound connection establishment failure bug in version 6.6 of The Server Framework</title>
      <link>https://lenholgate.com/asynchronousevents/2014/02/openssl-outbound-connection-establishment-failure-bug-in-version-66-of-the-server-framework.html</link>
      <pubDate>Mon, 03 Feb 2014 13:50:21 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2014/02/openssl-outbound-connection-establishment-failure-bug-in-version-66-of-the-server-framework.html</guid>
      <description>I&amp;rsquo;ve just found and fixed a bug in version 6.6 of the OpenSSL Option Pack which relates to how we deal with outbound connection establishment errors. Changes in 6.6 mean that the OpenSSL &amp;lsquo;connector&amp;rsquo; holds a reference to the socket whilst the SSL connection is active. The bug prevents connections which fail to be established from closing and causes a socket leak.
Note that this is ONLY for outbound (client) connections that you establish with The Server Framework.</description>
    </item>
    
    <item>
      <title>JetByte News: More fixed price M2M server development for our secretive security company client</title>
      <link>https://lenholgate.com/news/2014/01/more-fixed-price-m2m-server-development-for-our-secretive-security-company-client.html</link>
      <pubDate>Fri, 17 Jan 2014 11:23:09 +0000</pubDate>
      
      <guid>https://lenholgate.com/news/2014/01/more-fixed-price-m2m-server-development-for-our-secretive-security-company-client.html</guid>
      <description>We&amp;rsquo;re pleased to be extending the M2M server that we developed for this client back in February last year.
They&amp;rsquo;re adding lots of interesting new functionality. Should be fun!</description>
    </item>
    
    <item>
      <title>JetByte News: Happy New Year!</title>
      <link>https://lenholgate.com/news/2014/01/happy-new-year-1.html</link>
      <pubDate>Thu, 02 Jan 2014 08:49:30 +0000</pubDate>
      
      <guid>https://lenholgate.com/news/2014/01/happy-new-year-1.html</guid>
      <description>2014 already. Where does the time go?
We&amp;rsquo;re still very busy with work for our Industrial Control Client but since they needed to get us SC level security clearance for this project if we told you any more we&amp;rsquo;d have to kill you&amp;hellip;
Our work for online gaming clients is diversifying a bit as the project we&amp;rsquo;ve been working on for our secretive Online Gaming Company matures into a solid cloud-based SAS gaming server and we start to work more with the recent influx of Korean games companies that are now using The Server Framework.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: New client profile: Wave Systems Corp.</title>
      <link>https://lenholgate.com/asynchronousevents/2013/11/new-client-profile-wave-systems-corp.html</link>
      <pubDate>Thu, 21 Nov 2013 10:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2013/11/new-client-profile-wave-systems-corp.html</guid>
      <description>We have a new client profile available here for a new client who is using The Server Framework for secret things that they can&amp;rsquo;t tell us about!</description>
    </item>
    
    <item>
      <title>Asynchronous Events: New client profile: Chinese Company - M2M Server</title>
      <link>https://lenholgate.com/asynchronousevents/2013/11/new-client-profile-chinese-company---m2m-server.html</link>
      <pubDate>Tue, 19 Nov 2013 09:25:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2013/11/new-client-profile-chinese-company---m2m-server.html</guid>
      <description>We have a new client profile available here for a new client who selected The Server Framework to replace its previous networking layer in an M2M server which deals with 20,000 devices connected via GPRS.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: New client profile: Tricerat Inc. - Printer sharing</title>
      <link>https://lenholgate.com/asynchronousevents/2013/11/new-client-profile-tricerat-inc---printer-sharing.html</link>
      <pubDate>Sun, 17 Nov 2013 10:30:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2013/11/new-client-profile-tricerat-inc---printer-sharing.html</guid>
      <description>We have a new client profile available here for a client who uses The Server Framework in their Printer presence and print job transfer system.
They use both the OpenSSL Option Pack and the SSPI Option Pack in their product. The ease of adding security and authentication which can communicate with a disparate selection of clients is one of the strong points of developing with The Server Framework.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: New client profile: French Security Hardware Company - M2M server for smart alarm panels</title>
      <link>https://lenholgate.com/asynchronousevents/2013/11/new-client-profile-french-security-hardware-company---m2m-server-for-smart-alarm-panels.html</link>
      <pubDate>Thu, 14 Nov 2013 13:19:31 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2013/11/new-client-profile-french-security-hardware-company---m2m-server-for-smart-alarm-panels.html</guid>
      <description>We have a new client profile available here for a new French client who uses The Server Framework in an M2M server to control its smart alarm panels.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Latest release of The Server Framework: 6.6</title>
      <link>https://lenholgate.com/asynchronousevents/2013/10/latest-release-of-the-server-framework-66.html</link>
      <pubDate>Fri, 11 Oct 2013 14:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2013/10/latest-release-of-the-server-framework-66.html</guid>
      <description>Version 6.6 of The Server Framework was released today.
This release is a major release and contains many changes, see the release notes, here, for full details of all changes.
All clients are advised to upgrade to this release.
Increased performance due to major design changes in the dispatch and processing of completion and per socket buffer pooling. New lock classes which offer more efficient locking. Lots of breaking changes in the Service Tools library.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Release 6.6 to support Visual Studio 2013 and Windows 8.1</title>
      <link>https://lenholgate.com/asynchronousevents/2013/10/release-66-to-support-visual-studio-2013-and-windows-81.html</link>
      <pubDate>Tue, 08 Oct 2013 09:08:12 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2013/10/release-66-to-support-visual-studio-2013-and-windows-81.html</guid>
      <description>The latest release of The Server Framework, which is due later this month, adds support for Visual Studio 2013 and Windows 8.1 as well as a host of other major changes.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: 6.6: Saying goodbye to compilers, operating systems and code...</title>
      <link>https://lenholgate.com/asynchronousevents/2013/10/saying-goodbye-to-compilers-operating-systems-and-code.html</link>
      <pubDate>Tue, 08 Oct 2013 09:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2013/10/saying-goodbye-to-compilers-operating-systems-and-code.html</guid>
      <description>As we first mentioned here, release 6.6 of The Server Framework removes support for Visual Studio .Net (2002) and Visual Studio .Net (2003). The 2002 compiler is no longer supported by Microsoft and the 2003 compiler becomes unsupported in October this year. To be honest, I&amp;rsquo;m very pleased to see the back of them. Hopefully most users of the framework are using at least Visual Studio 2005, if you&amp;rsquo;re not, get in touch now.</description>
    </item>
    
    <item>
      <title>Visual Studio 2013 Preview - isprint() incorrectly classifies &#39;	&#39; as printable for &#39;C&#39; locale.</title>
      <link>https://lenholgate.com/blog/2013/08/visual-studio-2013-preview---isprint-incorrectly-classifies-t-as-printable.html</link>
      <pubDate>Fri, 30 Aug 2013 19:14:54 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2013/08/visual-studio-2013-preview---isprint-incorrectly-classifies-t-as-printable.html</guid>
      <description>It seems that `isprint() is broken.
The following program demonstrates the problem.
In VS20013 it prints &amp;ldquo;test failed&amp;rdquo; in all previous versions of visual studio it prints &amp;ldquo;test passed&amp;rdquo;.
From this reference: http://en.cppreference.com/w/cpp/string/byte/isprint it seems that VS2013 is broken.
I&amp;rsquo;ve opened a Microsoft Connect issue for this.
#include &amp;lt;ctype.h&amp;gt; #include &amp;lt;iostream&amp;gt; int main() { int c = 9; if (isprint(c)) { std::cout &amp;lt;&amp;lt; &amp;#34;test failed&amp;#34; &amp;lt;&amp;lt; std::endl; } else { std::cout &amp;lt;&amp;lt; &amp;#34;test passed&amp;#34; &amp;lt;&amp;lt; std::endl; } return 1; } </description>
    </item>
    
    <item>
      <title>Asynchronous Events: New client profile: Geosocket Information Inc. - Oil and Gas industry GIS developer</title>
      <link>https://lenholgate.com/asynchronousevents/2013/07/new-client-profile-geosocket-information-inc---oil-and-gas-industry-gis-developer.html</link>
      <pubDate>Mon, 01 Jul 2013 10:10:43 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2013/07/new-client-profile-geosocket-information-inc---oil-and-gas-industry-gis-developer.html</guid>
      <description>We have a new client profile available here for a new Chinese client who uses The Server Framework to build servers for its GIS applications for the Oil and Gas industry.</description>
    </item>
    
    <item>
      <title>Book review: Instant Windows 8 C&#43;&#43; Application Development How-to - Packt Publishing</title>
      <link>https://lenholgate.com/blog/2013/06/book-review-instant-windows-8-c-application-development-how-to---packt-publishing.html</link>
      <pubDate>Fri, 07 Jun 2013 17:20:03 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2013/06/book-review-instant-windows-8-c-application-development-how-to---packt-publishing.html</guid>
      <description>I have recently been sent a couple of ebooks to review. It seems people at Packt Publishing think that I&amp;rsquo;d be a good person to review their C++ books&amp;hellip; Anyway, bear in mind that this ebook was given to me for free and that I was asked to review it&amp;hellip;
Instant Windows 8 C++ Application Development How-to is a short book, but then that&amp;rsquo;s what the &amp;ldquo;Instant&amp;rdquo; range of books are supposed to be.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: New client profile: Korean Gaming Company - Mobile Gaming</title>
      <link>https://lenholgate.com/asynchronousevents/2013/06/new-client-profile-korean-gaming-company---mobile-gaming.html</link>
      <pubDate>Tue, 04 Jun 2013 08:17:18 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2013/06/new-client-profile-korean-gaming-company---mobile-gaming.html</guid>
      <description>We have a new client profile available here for a new client who selected The Server Framework to build the servers for its iOS and Android games.</description>
    </item>
    
    <item>
      <title>Comments disabled for a while</title>
      <link>https://lenholgate.com/blog/2013/05/comments-disabled-for-a-while-1.html</link>
      <pubDate>Thu, 09 May 2013 17:21:36 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2013/05/comments-disabled-for-a-while-1.html</guid>
      <description>Due to masses of attempted comment spam which was causing my hosting provider&amp;rsquo;s server some problems I&amp;rsquo;ve disabled comments for a while.
Email me if you have something you&amp;rsquo;d like added and I&amp;rsquo;ll sort it out for you.
Update - 13/5/13 - comments enabled again&amp;hellip;</description>
    </item>
    
    <item>
      <title>10 years of blogging...</title>
      <link>https://lenholgate.com/blog/2013/05/10-years-of-blogging.html</link>
      <pubDate>Fri, 03 May 2013 10:30:15 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2013/05/10-years-of-blogging.html</guid>
      <description>On the 3rd of May 2003 I posted the first entry on this blog. I then proceeded to &amp;ldquo;back fill&amp;rdquo; the blog with various things that had either been posted before in other places or had been laying around waiting for me to have somewhere to put them. This is why although the blog began in 2003 the archives go back to 1992.
Things have changed quite a lot since then, both in terms of blogging and my life.</description>
    </item>
    
    <item>
      <title>The problem with FILE_SKIP_COMPLETION_PORT_ON_SUCCESS and datagram socket read errors is fixed in Windows 8</title>
      <link>https://lenholgate.com/blog/2013/04/the-problem-with-file-skip-completion-port-on-success-and-datagram-socket-read-errors-is-fixed-in-wi.html</link>
      <pubDate>Thu, 04 Apr 2013 12:13:46 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2013/04/the-problem-with-file-skip-completion-port-on-success-and-datagram-socket-read-errors-is-fixed-in-wi.html</guid>
      <description>Back in January 2010 I discovered that if FILE_SKIP_COMPLETION_PORT_ON_SUCCESS is enabled on a datagram socket and a datagram arrives when a read is NOT currently pending and the datagram is bigger than the buffer supplied to the next read operation then no error is returned and the read will never complete. This was confirmed as a Windows bug and I&amp;rsquo;m pleased to see that it&amp;rsquo;s been fixed in Windows 8 and Server 2012.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: 6.6 - Breaking Changes - Service Tools Library</title>
      <link>https://lenholgate.com/asynchronousevents/2013/04/66---breaking-changes---service-tools-library.html</link>
      <pubDate>Tue, 02 Apr 2013 16:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2013/04/66---breaking-changes---service-tools-library.html</guid>
      <description>Release 6.6 of The Server Framework includes some breaking changes to both the IService, IServiceCallbacks and IShutdownService interfaces. Many functions now return an ServiceTools::ExitCode, either directly or by value, which allows you to fine tune the exit code returned from your service under failure conditions. This exit code is reported to the Service Control Manager (SCM) when your service shuts down and also returned from the exe if you run the service as a normal exe.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Slightly more efficient locking</title>
      <link>https://lenholgate.com/asynchronousevents/2013/04/slightly-more-efficient-locking.html</link>
      <pubDate>Mon, 01 Apr 2013 16:30:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2013/04/slightly-more-efficient-locking.html</guid>
      <description>Another performance improvement in the forthcoming 6.6 release is due to a change in our default choice for locking primitives on most platforms. Note that the perf improvement is small and, according to our testing, it doesn&amp;rsquo;t materialise on all hardware (though there&amp;rsquo;s no performance degradation seen).
The change is to switch from using CRITICAL_SECTION objects to using Slim Reader Writer Locks in exclusive (write) mode. You can read about the differences between these two locks in Kenny Kerr&amp;rsquo;s MSDN article here.</description>
    </item>
    
    <item>
      <title>Incorrect Windows 8 error message change!</title>
      <link>https://lenholgate.com/blog/2013/03/incorrect-windows-8-error-message-change.html</link>
      <pubDate>Sat, 30 Mar 2013 09:55:54 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2013/03/incorrect-windows-8-error-message-change.html</guid>
      <description>I&amp;rsquo;ve been pretty happy with moving to Windows 8. I&amp;rsquo;ve got used to the &amp;ldquo;new&amp;rdquo; UI, it was a pretty painless transition once I learned the new shortcut keys and I actually think that the new &amp;ldquo;start menu&amp;rdquo; is better, you don&amp;rsquo;t have to worry about complicated trees of folders, it&amp;rsquo;s all flat and you just start typing the name of what you want&amp;hellip; So for me, a developer with two monitors and no touch interface using the desktop pretty much as I always have done, Windows 8 works well.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Reducing context switches and increasing performance</title>
      <link>https://lenholgate.com/asynchronousevents/2013/03/reducing-context-switches-and-increasing-performance.html</link>
      <pubDate>Wed, 27 Mar 2013 16:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2013/03/reducing-context-switches-and-increasing-performance.html</guid>
      <description>I&amp;rsquo;ve been working on a &amp;ldquo;big&amp;rdquo; new release for some time, too long actually. It has steadily been accumulating new features for over a year but the arrival of my second son in July last year and masses of client work has meant that it has repeatedly been pushed on the back burner. Well, no more, Release 6.6 is now in the final stages of development and testing (so I won&amp;rsquo;t be adding more new features) and hopefully will see a release in Q2</description>
    </item>
    
    <item>
      <title>JetByte News: Fixed price M2M server development for a Security company</title>
      <link>https://lenholgate.com/news/2013/02/fixed-price-m2m-server-development-for-a-security-company.html</link>
      <pubDate>Mon, 25 Feb 2013 21:40:45 +0000</pubDate>
      
      <guid>https://lenholgate.com/news/2013/02/fixed-price-m2m-server-development-for-a-security-company.html</guid>
      <description>We are building a server for a security company who would prefer to remain nameless. The server will manage communication for networks of tens of thousands of smart alarm panels using The Server Framework. In addition to the M2M communication aspect, the server also manages the management control connections that are used to send data to and from the devices.</description>
    </item>
    
    <item>
      <title>New release of Lock Explorer tools now support Slim Reader Writer locks and Mutexes</title>
      <link>https://lenholgate.com/blog/2013/02/new-release-of-lock-explorer-tools-now-support-slim-reader-writer-locks-and-mutexes.html</link>
      <pubDate>Tue, 12 Feb 2013 12:30:38 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2013/02/new-release-of-lock-explorer-tools-now-support-slim-reader-writer-locks-and-mutexes.html</guid>
      <description>I&amp;rsquo;ve just released new versions of my Lock Explorer tools, LID and LIA. This is quite a big release as it increases the number of locking APIs that the tools instrument from 1 to 3. We now track Slim Reader Writer locks and Mutexes.
Arguably the tools should always have tracked these, and possibly more API calls, but the tools have always been first and foremost to assist in the development and testing of The Server Framework and, well, we only use Critical Sections.</description>
    </item>
    
    <item>
      <title>JetByte News: More of the same in 2013!</title>
      <link>https://lenholgate.com/news/2013/01/more-of-the-same-in-2013.html</link>
      <pubDate>Wed, 09 Jan 2013 09:42:39 +0000</pubDate>
      
      <guid>https://lenholgate.com/news/2013/01/more-of-the-same-in-2013.html</guid>
      <description>Once again the new year has started with us very busy with work for our Industrial Control Client but since they needed to get us SC level security clearance for this project if we told you any more we&amp;rsquo;d have to kill you&amp;hellip;
We&amp;rsquo;re also looking forward to doing lots more work with our secretive Online Gaming Company. Their cloud-based SAS gaming server is doing well for them and their clients and we&amp;rsquo;re continuing to be closely involved with the ongoing development.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Latest release of The Server Framework: 6.5.9</title>
      <link>https://lenholgate.com/asynchronousevents/2013/01/latest-release-of-the-server-framework-659-1.html</link>
      <pubDate>Mon, 07 Jan 2013 16:49:15 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2013/01/latest-release-of-the-server-framework-659-1.html</guid>
      <description>Version 6.5.9 of The Server Framework was released today.
This release contains one bug fix for write sequencing bug which has been present in The Server Framework since at least release 5.0 but which, thankfully, is very unlikely to occur. It also contains a bug fix for the TCP flow control filter, some bug fixes for the WebSocket code, hardening of the WebSocket code to help it resist denial of service attacks and a small amount of new functionality in several other libraries.</description>
    </item>
    
    <item>
      <title>See what process is using a TCP port in Windows</title>
      <link>https://lenholgate.com/blog/2012/11/see-what-process-is-using-a-tcp-port-in-windows.html</link>
      <pubDate>Wed, 14 Nov 2012 15:49:37 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2012/11/see-what-process-is-using-a-tcp-port-in-windows.html</guid>
      <description>I have clients asking me about this all the time. This article is pretty concise about the tools that you need to use to map an open port to the process that has it open.</description>
    </item>
    
    <item>
      <title>The perils of &#39;home office&#39; RAID 5</title>
      <link>https://lenholgate.com/blog/2012/10/the-perils-of-raid-5.html</link>
      <pubDate>Thu, 04 Oct 2012 09:22:58 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2012/10/the-perils-of-raid-5.html</guid>
      <description>I&amp;rsquo;ve had a little stand alone RAID device for several years now. It&amp;rsquo;s a Netgear ReadyNAS NV+ and it works quite nicely. I&amp;rsquo;m sure I could have something better but, I haven&amp;rsquo;t yet upgraded it apart from adding some memory and changing drives every now and then. I have a second ReadyNAS at my dad&amp;rsquo;s office and my office backs up critical data to that via rsync and a VPN; the one at his end does the same, though most data flows from me to him.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Latest release of The Server Framework: 6.5.8</title>
      <link>https://lenholgate.com/asynchronousevents/2012/09/latest-release-of-the-server-framework-659.html</link>
      <pubDate>Thu, 20 Sep 2012 08:55:21 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2012/09/latest-release-of-the-server-framework-659.html</guid>
      <description>Version 6.5.8 of The Server Framework was released today.
This release contains one bug fix for a bug which has been present in The Server Framework since at least release 5.0 and one change to work around a bug in Windows 8 and Server 2012.
If you plan to use AcceptEx() on Windows 8 or Server 2012 or you have connections which run for a long period of time, use sequenced sockets and issue more than 2,147,483,647 writes on a socket then you need this release.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Write sequencing bug in all versions of The Server Framework</title>
      <link>https://lenholgate.com/asynchronousevents/2012/09/write-sequencing-bug-in-all-versions-of-the-server-framework.html</link>
      <pubDate>Tue, 18 Sep 2012 07:12:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2012/09/write-sequencing-bug-in-all-versions-of-the-server-framework.html</guid>
      <description>I&amp;rsquo;ve just found and fixed a bug which has been present in The Server Framework from the very beginning. The problem affects connections which are &amp;ldquo;sequenced&amp;rdquo; and which have had more than 2,147,483,647 writes performed on them. The observant amongst you will be thinking that it&amp;rsquo;s a counter wrap bug and you&amp;rsquo;d be correct. The annoying thing for me is that the code in question has unit tests which explicitly test for correct operation when the sequence number wraps; the tests pass but the bug is still there.</description>
    </item>
    
    <item>
      <title>OpenSSL 1.0.1c key files are not compatible with OpenSSL 0.9.8x</title>
      <link>https://lenholgate.com/blog/2012/09/openssl-101c-key-files-are-not-compatible-with-openssl-098x.html</link>
      <pubDate>Tue, 11 Sep 2012 09:34:23 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2012/09/openssl-101c-key-files-are-not-compatible-with-openssl-098x.html</guid>
      <description>A note to myself and my clients more than anything else&amp;hellip;
It seems that when you generate a key using a 1.x version of the openssl utility the blob looks like this:
-----BEGIN ENCRYPTED PRIVATE KEY----- MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQI7BZmHKzGwtQCAggA etc... T+CaOPXRod3cKwZEgp0vkM+gpsLw0C6WVEdV01ZrgUsJ2DceYXaenHCjfZ7jwy84 LKk= -----END ENCRYPTED PRIVATE KEY----- whereas when you generate a key in exactly the same way with an 0.9.8 version of the utility the blob looks like this:
-----BEGIN RSA PRIVATE KEY----- Proc-Type: 4,ENCRYPTED DEK-Info: DES-EDE3-CBC,061B6446EB96A47B OFE9asOb689P0l6++Nwz0HYop4KdgKh6NFCzZV/kjp03VL2RW6beii2x70ikTLjs etc.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: AcceptEx() bug in Windows 8 and all Server 2012 variants</title>
      <link>https://lenholgate.com/asynchronousevents/2012/09/acceptex-bug-in-windows-8-and-all-server-2012-variants.html</link>
      <pubDate>Tue, 04 Sep 2012 09:32:27 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2012/09/acceptex-bug-in-windows-8-and-all-server-2012-variants.html</guid>
      <description>Be aware that there is a known bug in Windows 8 and all Server 2012 variants which causes AcceptEx() completions to be delayed in some situations. This was confirmed by a Microsoft representative on Microsoft Connect, see the error report ticket here. An example of how to demonstrate this bug, its likely affects and the current know causes can be found here in this Stack Overflow question.
I&amp;rsquo;m a little disappointed with the official response to this bug report.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Winsock Registered I/O, I/O Completion Port Performance</title>
      <link>https://lenholgate.com/asynchronousevents/2012/08/winsock-registered-io-io-completion-port-performance.html</link>
      <pubDate>Wed, 29 Aug 2012 18:20:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2012/08/winsock-registered-io-io-completion-port-performance.html</guid>
      <description>Continuing my analysis of the performance of the new Winsock Registered I/O API, RIO, compared to more traditional networking APIs we finally get to the point where we compare I/O completion port designs.
I&amp;rsquo;ve been looking at the Windows 8 Registered I/O Networking Extensions since October when they first made an appearance as part of the Windows 8 Developer Preview, though lately most of my testing has been using Windows Server 2012 RC.</description>
    </item>
    
    <item>
      <title>Building OpenSSL for x86 and x64 on Windows for side by side deployment</title>
      <link>https://lenholgate.com/blog/2012/08/building-openssl-for-x86-and-x64-on-windows-for-side-by-side-deployment.html</link>
      <pubDate>Wed, 29 Aug 2012 11:55:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2012/08/building-openssl-for-x86-and-x64-on-windows-for-side-by-side-deployment.html</guid>
      <description>The Server Framework&amp;rsquo;s OpenSSL Option Pack integrates OpenSSL with my high performance server tool kit and gives you an IOCP based client or server that can handle many thousand concurrent connections with very few threads. The OpenSSL Option Pack has been around for over 10 years now and, as well as the SChannel Option Pack provides an easy way to add SSL or TLS to your clients and servers.
Updated 26th April 2023The latest scripts for OpenSSL 3.</description>
    </item>
    
    <item>
      <title>Where are all the Microsoft Networking MVPs?</title>
      <link>https://lenholgate.com/blog/2012/08/where-are-all-the-microsoft-networking-mvps.html</link>
      <pubDate>Wed, 29 Aug 2012 09:40:58 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2012/08/where-are-all-the-microsoft-networking-mvps.html</guid>
      <description>There&amp;rsquo;s a gnarly networking question on stack overflow that I&amp;rsquo;ve since reposted on various Microsoft forums and so far I&amp;rsquo;ve had absolutely no useful response. Not even an &amp;ldquo;I don&amp;rsquo;t know, but I&amp;rsquo;ll look into it&amp;rdquo;.
I can understand that, perhaps, the issue may be a little bit technical for a support person who isn&amp;rsquo;t steeped in networking API knowledge; but where are the MVPs? Why isn&amp;rsquo;t there a Winsock MVP who can tell me that the bug has already been raised somewhere and might get fixed, or that it&amp;rsquo;s a known and desirable breaking change?</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Winsock Registered I/O - Traditional Multi threaded IOCP UDP Example Server</title>
      <link>https://lenholgate.com/asynchronousevents/2012/08/winsock-registered-io---traditional-multi-threaded-iocp-udp-example-server.html</link>
      <pubDate>Thu, 23 Aug 2012 12:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2012/08/winsock-registered-io---traditional-multi-threaded-iocp-udp-example-server.html</guid>
      <description>This article presents the sixth in my series of example servers for comparing the performance of the Winsock Registered I/O Networking extensions, RIO, and traditional Windows networking APIs. This example server is a traditional multi-threaded, IOCP based, UDP design that we can use to compare to the multi-threaded RIO IOCP UDP example server. I&amp;rsquo;ve been looking at the Winsock Registered I/O Networking Extensions since October when they first made an appearance as part of the Windows 8 Developer Preview, though lately most of my testing has been using Windows Server 2012 RC.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Worrying issue with Windows 8 and AcceptEx...</title>
      <link>https://lenholgate.com/asynchronousevents/2012/08/worrying-issue-with-windows-8-and-acceptex.html</link>
      <pubDate>Wed, 22 Aug 2012 17:08:39 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2012/08/worrying-issue-with-windows-8-and-acceptex.html</guid>
      <description>There&amp;rsquo;s an interesting question over on stack overflow about a perceived change in IOCP behaviour on Windows 8 (and Server 2012 RC).
The question includes some code which demonstrates how an overlapped AcceptEx() call is blocked on by the thread that issued it being blocked inside a call to ReadFile() at the time that the AcceptEx() completes. The completion for the AcceptEx() is delayed until the ReadFile() completes even though a thread is waiting for completions on the IOCP associated with the socket.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Windows Server 2012 Registered I/O Performance - take 2...</title>
      <link>https://lenholgate.com/asynchronousevents/2012/08/windows-8server-2012-registered-io-performance---take-2.html</link>
      <pubDate>Tue, 21 Aug 2012 17:20:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2012/08/windows-8server-2012-registered-io-performance---take-2.html</guid>
      <description>I&amp;rsquo;ve been looking at the Windows 8 Registered I/O Networking Extensions since October when they first made an appearance as part of the Windows 8 Developer Preview. Whilst exploring and understanding the new API I spent some time putting together some simple UDP servers using the various notification styles that RIO provides. I then put together some equally simple UDP servers using the &amp;ldquo;traditional&amp;rdquo; APIs so that I could compare performance.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Latest release of The Server Framework: 6.5.7</title>
      <link>https://lenholgate.com/asynchronousevents/2012/08/latest-release-of-the-server-framework-657.html</link>
      <pubDate>Mon, 20 Aug 2012 17:30:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2012/08/latest-release-of-the-server-framework-657.html</guid>
      <description>Version 6.5.7 of The Server Framework was released today.
This release contains one important bug fix and support for Visual Studio 2012 RTM. The bug that was introduced in 6.5.6 has exposed a gap in our unit testing which has also been filled with this release.
If you use either the Read Timeout filter or VS2012 RTM then you should install this update.
This release includes the following, see the release notes, here, for full details of all changes.</description>
    </item>
    
    <item>
      <title>Half of the classic singleton is a useful concept; a class that has only one instance. The other half is bollocks; providing a global way to access that single instance.</title>
      <link>https://lenholgate.com/blog/2012/08/half-of-the-classic-singleton-is-a-useful-concept-a-class-that-has-only-one-instance-the-other-half-.html</link>
      <pubDate>Fri, 17 Aug 2012 22:36:01 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2012/08/half-of-the-classic-singleton-is-a-useful-concept-a-class-that-has-only-one-instance-the-other-half-.html</guid>
      <description>Ah, sometimes I just love that younger me for getting to the point&amp;hellip;
More here, thanks to Daniel Tarbotton for reminding me of things I said in the past&amp;hellip; And, for a change, it seems that someone agrees! ;)</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Latest release of The Server Framework: 6.5.6</title>
      <link>https://lenholgate.com/asynchronousevents/2012/08/latest-release-of-the-server-framework-656.html</link>
      <pubDate>Mon, 13 Aug 2012 11:53:30 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2012/08/latest-release-of-the-server-framework-656.html</guid>
      <description>Version 6.5.6 of The Server Framework was released today.
This release contains some bug fixes, a selection of minor improvements and improved support for the Visual Studio 2012 (Note that there will be a further release shortly after Visual Studio 2012&amp;rsquo;s RTM if needed to address any changes between the Release Candidate and the RTM versions).
If you use either the Read Timeout filter or the Flow Control filter then you should install this update.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Windows 8 Registered I/O Performance - finally using a full 10 Gigabit link...</title>
      <link>https://lenholgate.com/asynchronousevents/2012/07/windows-8-registered-io-performance---finally-using-a-full-10-gigabit-link.html</link>
      <pubDate>Mon, 30 Jul 2012 12:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2012/07/windows-8-registered-io-performance---finally-using-a-full-10-gigabit-link.html</guid>
      <description>As I mentioned back in March I&amp;rsquo;m now doing some RIO performance testing with a 10 Gigabit Ethernet link as I couldn&amp;rsquo;t push my test server hard enough with multiple 1 Gigabit links. This involves 2 Intel 10 Gigabit AT2 cards connected directly to each other. One of the cards is in our test server and the other has been tried in various other pieces of test hardware in an attempt to ramp up the bandwidth usage for the RIO tests.</description>
    </item>
    
    <item>
      <title>Happy Zeroth birthday Max Holgate!</title>
      <link>https://lenholgate.com/blog/2012/07/happy-zeroth-birthday-max-holgate.html</link>
      <pubDate>Fri, 06 Jul 2012 23:50:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2012/07/happy-zeroth-birthday-max-holgate.html</guid>
      <description>My baby son Max was born today, July 6th 2012, at 4.51pm. He weighed 8lb 1oz and both he and his wonderful mother are doing fine.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Bug in the 6.5.5 changes for the read timeout connection filter</title>
      <link>https://lenholgate.com/asynchronousevents/2012/07/bug-in-the-655-changes-for-the-read-timeout-connection-filter.html</link>
      <pubDate>Mon, 02 Jul 2012 10:36:58 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2012/07/bug-in-the-655-changes-for-the-read-timeout-connection-filter.html</guid>
      <description>The recent changes to 6.5.5 so that JetByteTools::Socket::CReadTimeoutStreamSocketConnectionFilter holds a socket reference when the timer is set causes problems when the socket is shutdown. The filter doesn&amp;rsquo;t see the shutdown and fails to cancel the timer which means that a reference is held on the socket until the timeout expires. This delays socket closure and causes your timeout handling code to be run on a socket which has been cleanly shut down.</description>
    </item>
    
    <item>
      <title>JetByte News: Consultancy position with HTI Labs</title>
      <link>https://lenholgate.com/news/2012/07/consultancy-position-with-hti-labs.html</link>
      <pubDate>Sun, 01 Jul 2012 12:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/news/2012/07/consultancy-position-with-hti-labs.html</guid>
      <description>We&amp;rsquo;ve been retained by HTI Labs to provide ongoing technical consultancy, mentoring, and assistance for their consultants.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Differences between Visual Studio 11 Beta and Visual Studio 2012 RC</title>
      <link>https://lenholgate.com/asynchronousevents/2012/06/differences-between-visual-studio-11-beta-and-visual-studio-2012-rc.html</link>
      <pubDate>Fri, 15 Jun 2012 14:44:28 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2012/06/differences-between-visual-studio-11-beta-and-visual-studio-2012-rc.html</guid>
      <description>As I mentioned in the release notes for version 6.5.5, The Server Framework now supports Visual Studio 11 Beta. It also supports Visual Studio 2012 RC but there are a couple of new warnings that you may need to suppress in Warnings.h.
I haven&amp;rsquo;t been able to locate and details of the differences in the native code generation and C++ compiler side of Visual Studio 2012 RC from what was present in Visual Studio 11 Beta.</description>
    </item>
    
    <item>
      <title>Drivers for Windows Server 2012 RC for Intel 10 Gigabit AT2 adapter</title>
      <link>https://lenholgate.com/blog/2012/06/drivers-for-windows-server-2012-rc-for-intel-10-gigabit-at2-adapter.html</link>
      <pubDate>Tue, 12 Jun 2012 10:34:26 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2012/06/drivers-for-windows-server-2012-rc-for-intel-10-gigabit-at2-adapter.html</guid>
      <description>As I mentioned yesterday, I&amp;rsquo;m running Windows Server 2012 RC with my Intel 10 Gigabit AT2 adapters. I&amp;rsquo;ve had several emails asking me where I got the drivers from as the latest Intel drivers do not install.
Whilst it&amp;rsquo;s true that you can&amp;rsquo;t currently run the downloaded driver exe, PROWinx64.exe on Windows Server 2012 RC (or anything later than Win7). You CAN unzip the exe (it&amp;rsquo;s just an executable zip file) and then simply use the device manager to update the driver and then browse to the directory that you unzipped the exe into.</description>
    </item>
    
    <item>
      <title>Unexpected causes of poor datagram send performance</title>
      <link>https://lenholgate.com/blog/2012/06/unexpected-causes-of-poor-datagram-send-performance.html</link>
      <pubDate>Mon, 11 Jun 2012 08:47:27 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2012/06/unexpected-causes-of-poor-datagram-send-performance.html</guid>
      <description>I&amp;rsquo;m still working on my investigation of the Windows Registered I/O network extensions, RIO, which I started back in October when they became available with the Windows 8 Developer Preview. I&amp;rsquo;ve improved my test system a little since I started and now have a point to point 10 Gigabit network between my test machines using two 2 Intel 10 Gigabit AT2 cards wired back to back.
My test system isn&amp;rsquo;t symmetrical, that is I have a much more powerful machine on one end of the link than on the other.</description>
    </item>
    
    <item>
      <title>C&#43;&#43; 11, Concurrency</title>
      <link>https://lenholgate.com/blog/2012/06/c-11-concurrency.html</link>
      <pubDate>Fri, 08 Jun 2012 18:25:29 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2012/06/c-11-concurrency.html</guid>
      <description>I&amp;rsquo;ve been watching Bartosz Milewski&amp;rsquo;s C++ 11 Concurrency videos and they&amp;rsquo;re a pretty good way to get up to speed on the new threading support in the latest C++ standard. They start off nice and slowly, for people who haven&amp;rsquo;t been doing concurrency for years, and explain the various new features provided by the language. It&amp;rsquo;s good stuff.
I&amp;rsquo;ve been reading Anthony Williams&amp;rsquo; C++ Concurrency In action which is a great way to understand the details of what you&amp;rsquo;ll see in the videos.</description>
    </item>
    
    <item>
      <title>The new Windows Azure looks good!</title>
      <link>https://lenholgate.com/blog/2012/06/the-new-windows-azure-looks-good.html</link>
      <pubDate>Fri, 08 Jun 2012 18:05:21 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2012/06/the-new-windows-azure-looks-good.html</guid>
      <description>I must admit that I didn&amp;rsquo;t really see how Azure could be of much use to anyone except really die-hard, bleeding edge, Microsoft only shops; that is up until yesterday.
The new Azure, which you can read about here on Scott Guthrie&amp;rsquo;s blog, seems much more usable for general purpose cloud solutions. Durable VMs, Linux VMs, easy migration to/from your own non Azure VHDs, direct access to their new low latency distributed cache from Memcached with no code changes necessary, lots of great new tooling and a REST based management API.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Latest release of The Server Framework: 6.5.5</title>
      <link>https://lenholgate.com/asynchronousevents/2012/05/latest-release-of-the-server-framework-655.html</link>
      <pubDate>Tue, 22 May 2012 09:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2012/05/latest-release-of-the-server-framework-655.html</guid>
      <description>Version 6.5.5 of The Server Framework was released today.
This release contains some bug fixes, a selection of minor improvements and support for Visual Studio 11 Beta and Windows 8. If you use either the Read Timeout filter or the Flow Control filter then you should install this update.
This release includes the following, see the release notes, here, for full details of all changes.
Rewrote CFlowControlStreamSocketConnectionFilter to make it more reliable and correct.</description>
    </item>
    
    <item>
      <title>Netmap, RIO and the challenges in using a 10 Gigabit pipe</title>
      <link>https://lenholgate.com/blog/2012/03/netmap-rio-and-the-challenges-in-using-a-10-gigabit-pipe.html</link>
      <pubDate>Mon, 26 Mar 2012 21:46:06 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2012/03/netmap-rio-and-the-challenges-in-using-a-10-gigabit-pipe.html</guid>
      <description>This link, Revisiting Network I/O APIs: The Netmap Framework, via highscalability.com makes for interesting reading. Especially given my current interest in the performance of the Winsock Registered I/O networking extensions, RIO, and the fact that my new network cards are so difficult to fully utilise.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Windows 8 Registered I/O Performance - 10 Gigabit networking...</title>
      <link>https://lenholgate.com/asynchronousevents/2012/03/windows-8-registered-io-performance---10-gigabit-networking.html</link>
      <pubDate>Mon, 26 Mar 2012 16:44:35 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2012/03/windows-8-registered-io-performance---10-gigabit-networking.html</guid>
      <description>When I switched to looking at the performance of the more advanced RIO server designs that use IOCP it quickly became apparent that even multiple 1 Gigabit connections weren&amp;rsquo;t enough of a challenge to give me any meaningful figures; my traditional IOCP datagram servers were easily able to keep up and increasing the workload per datagram required such high workloads that the tests became meaningless. So, we&amp;rsquo;ve brought forward the purchase of the hardware that we intended to use for our private cloud scalability testing and we now have 2 Intel 10 Gigabit AT2 cards.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Windows 8 Registered I/O Performance</title>
      <link>https://lenholgate.com/asynchronousevents/2012/03/windows-8-registered-io-performance.html</link>
      <pubDate>Thu, 15 Mar 2012 15:15:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2012/03/windows-8-registered-io-performance.html</guid>
      <description>I&amp;rsquo;ve been looking at the Windows 8 Registered I/O Networking Extensions since October when they first made an appearance as part of the Windows 8 Developer Preview. Whilst exploring and understanding the new API I spent some time putting together some simple UDP servers using the various notification styles that RIO provides. I then put together some equally simple UDP servers using the &amp;ldquo;traditional&amp;rdquo; APIs so that I could compare performance.</description>
    </item>
    
    <item>
      <title>JetByte News: Security Clearance granted</title>
      <link>https://lenholgate.com/news/2012/03/security-clearance-granted.html</link>
      <pubDate>Thu, 15 Mar 2012 08:45:21 +0000</pubDate>
      
      <guid>https://lenholgate.com/news/2012/03/security-clearance-granted.html</guid>
      <description>As we mentioned back in January, one of our clients has sponsored Len for SC level Security Clearance for one of the projects that we&amp;rsquo;re bidding for with them.
We&amp;rsquo;re pleased to announce that this has been granted and that Len now has SC level Security Clearance.
Whilst this clearance was obtained for work with our sponsoring client that work may or may not materialise, it&amp;rsquo;s currently very early in the bidding process, so if you require the services of an Security Cleared C++ network specialist please get in touch.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Windows 8 Registered I/O - Generating load for the performance tests</title>
      <link>https://lenholgate.com/asynchronousevents/2012/03/windows-8-registered-io---generating-load-for-the-performance-tests.html</link>
      <pubDate>Wed, 14 Mar 2012 17:15:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2012/03/windows-8-registered-io---generating-load-for-the-performance-tests.html</guid>
      <description>Now that we have five example servers, four RIO designs and a traditional polled UDP design, we can begin to look at how the RIO API performs compared to the traditional APIs. Of course these comparisons should be taken as preliminary since we&amp;rsquo;re working with a beta version of the operating system. However, though I wouldn&amp;rsquo;t put much weight in the exact numbers until we have a non-beta OS to test on, it&amp;rsquo;s useful to see how things are coming along and familiarise ourselves with the designs that might be required to take advantage of RIO once it ships.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Windows 8 Registered I/O - Traditional Polled UDP Example Server</title>
      <link>https://lenholgate.com/asynchronousevents/2012/03/windows-8-registered-io---traditional-polled-udp-example-server.html</link>
      <pubDate>Wed, 14 Mar 2012 14:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2012/03/windows-8-registered-io---traditional-polled-udp-example-server.html</guid>
      <description>This article presents the fifth in my series of example servers for comparing the performance of the Windows 8 Registered I/O Networking extensions, RIO, and traditional Windows networking APIs. This example server is a traditional polled UDP design that we can use to compare to the RIO polled UDP example server. I&amp;rsquo;ve been looking at the Windows 8 Registered I/O Networking Extensions since October when they first made an appearance as part of the Windows 8 Developer Preview.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Windows 8 Registered I/O - Multi threaded RIO IOCP UDP Example Server</title>
      <link>https://lenholgate.com/asynchronousevents/2012/03/windows-8-registered-io---multi-threaded-rio-iocp-udp-example-server.html</link>
      <pubDate>Mon, 12 Mar 2012 18:10:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2012/03/windows-8-registered-io---multi-threaded-rio-iocp-udp-example-server.html</guid>
      <description>This article presents the fourth in my series of example servers using the Windows 8 Registered I/O Networking extensions, RIO. This example server, like the last example, uses the I/O Completion Port notification method to handle RIO completions, but where the last example used only a single thread to service the IOCP this one uses multiple thread to scale the load . I&amp;rsquo;ve been looking at the Windows 8 Registered I/O Networking Extensions since October when they first made an appearance as part of the Windows 8 Developer Preview.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Windows 8 Registered I/O - Single threaded RIO IOCP UDP Example Server</title>
      <link>https://lenholgate.com/asynchronousevents/2012/03/windows-8-registered-io---single-threaded-rio-iocp-udp-example-server.html</link>
      <pubDate>Mon, 12 Mar 2012 15:45:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2012/03/windows-8-registered-io---single-threaded-rio-iocp-udp-example-server.html</guid>
      <description>This article presents the third in my series of example servers using the Windows 8 Registered I/O Networking extensions, RIO. This example server uses the I/O Completion Port notification method to handle RIO completions, but only uses a single thread to service the IOCP. I&amp;rsquo;ve been looking at the Windows 8 Registered I/O Networking Extensions since October when they first made an appearance as part of the Windows 8 Developer Preview.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Windows 8 Registered I/O - Single threaded RIO Event Driven UDP Example Server</title>
      <link>https://lenholgate.com/asynchronousevents/2012/03/windows-8-registered-io---single-threaded-rio-event-driven-udp-example-server.html</link>
      <pubDate>Fri, 09 Mar 2012 22:25:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2012/03/windows-8-registered-io---single-threaded-rio-event-driven-udp-example-server.html</guid>
      <description>This article presents the second in my series of example servers using the Windows 8 Registered I/O Networking extensions, RIO. This example server uses the event driven notification method to handle RIO completions. I&amp;rsquo;ve been looking at the Windows 8 Registered I/O Networking Extensions since October when they first made an appearance as part of the Windows 8 Developer Preview. Whilst exploring and understanding the new API I spent some time putting together some simple UDP servers using the various notification styles that RIO provides.</description>
    </item>
    
    <item>
      <title>Visual Studio 11, the UI changes don&#39;t matter...</title>
      <link>https://lenholgate.com/blog/2012/03/visual-studio-11-the-ui-changes-dont-matter.html</link>
      <pubDate>Fri, 09 Mar 2012 21:50:40 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2012/03/visual-studio-11-the-ui-changes-dont-matter.html</guid>
      <description>The best thing about Visual Studio 11 is that it doesn&amp;rsquo;t matter if you like the new style IDE or not. The project files are, at last, backwards compatible, so you can load them in Visual Studio 2010 and build with the new tool chain even though you ignore the new IDE - if that&amp;rsquo;s what you want to do.
I don&amp;rsquo;t like the new icons, but I find I can work fine in the IDE as long as I don&amp;rsquo;t think about it too much&amp;hellip; Probably pretty much like how I felt about all previous versions when they were at the beta stage&amp;hellip;</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Windows 8 Registered I/O - Simple RIO Polled UDP Example Server</title>
      <link>https://lenholgate.com/asynchronousevents/2012/03/windows-8-registered-io---simple-rio-polled-udp-example-server.html</link>
      <pubDate>Wed, 07 Mar 2012 11:28:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2012/03/windows-8-registered-io---simple-rio-polled-udp-example-server.html</guid>
      <description>I&amp;rsquo;ve been looking at the Windows 8 Registered I/O Networking Extensions since October when they first made an appearance as part of the Windows 8 Developer Preview. Whilst exploring and understanding the new API I spent some time putting together some simple UDP servers using the various notification styles that RIO provides. I then put together some equally simple UDP servers using the &amp;ldquo;traditional&amp;rdquo; APIs so that I could compare performance.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Windows 8 Registered I/O Example UDP Servers</title>
      <link>https://lenholgate.com/asynchronousevents/2012/03/windows-8-registered-io-example-udp-servers.html</link>
      <pubDate>Wed, 07 Mar 2012 11:27:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2012/03/windows-8-registered-io-example-udp-servers.html</guid>
      <description>I&amp;rsquo;ve been looking at the Windows 8 Registered I/O Networking Extensions since October when they first made an appearance as part of the Windows 8 Developer Preview. Whilst exploring and understanding the new API I spent some time putting together some simple UDP servers using the various notification styles that RIO provides. I then put together some equally simple UDP servers using the &amp;ldquo;traditional&amp;rdquo; APIs so that I could compare performance.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Latest release of The Server Framework: 6.5.4</title>
      <link>https://lenholgate.com/asynchronousevents/2012/02/latest-release-of-the-server-framework-654.html</link>
      <pubDate>Tue, 14 Feb 2012 08:28:41 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2012/02/latest-release-of-the-server-framework-654.html</guid>
      <description>Version 6.5.4 of The Server Framework was released today.
This release contains two important bug fixes and a selection of minor improvements. If you run your code on Vista/Windows Server 2003 or later and you don&amp;rsquo;t explicitly disable FILE_SKIP_COMPLETION_PORT_ON_SUCCESS in your Config.h then you should install this update.
This release includes the following, see the release notes, here, for full details of all changes.
Bug fix. If FILE_SKIP_COMPLETION_PORT_ON_SUCCESS was enabled but JetByteTools::Socket::CanEnableSkipCompletionPortOnSuccess() returned false then the the code that handled issuing read and write calls would fail if ERROR_SUCCESS was returned because it would assume that FILE_SKIP_COMPLETION_PORT_ON_SUCCESS was enabled and that it should handle the completion directly but a completion would have been posted to the IOCP and so the completion would get handled twice.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: The advantage of having lots of clients and clients with lots of clients</title>
      <link>https://lenholgate.com/asynchronousevents/2012/02/the-advantage-of-having-lots-of-clients-and-clients-with-lots-of-clients.html</link>
      <pubDate>Wed, 08 Feb 2012 12:11:02 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2012/02/the-advantage-of-having-lots-of-clients-and-clients-with-lots-of-clients.html</guid>
      <description>Our Secretive Online Game Company client uses The Server Framework for their custom application server for the games industry. They have thousands of users who run their server on a very diverse set of hardware. This is great for us as it really helps to shake down The Server Framework. There&amp;rsquo;s nothing like running your multi-threaded code on lots of different hardware to help find all of the hidden race conditions and whatever.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: WASP download of XP versions now fixed </title>
      <link>https://lenholgate.com/asynchronousevents/2012/02/wasp-download-of-xp-versions-now-fixed.html</link>
      <pubDate>Thu, 02 Feb 2012 14:58:40 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2012/02/wasp-download-of-xp-versions-now-fixed.html</guid>
      <description>I&amp;rsquo;ve just noticed a problem with downloading the XP versions of WASP.
This is now fixed. The XP versions can now be downloaded correctly again from here. Sorry for any inconvenience caused.</description>
    </item>
    
    <item>
      <title>JetByte News: Happy New Year</title>
      <link>https://lenholgate.com/news/2012/01/happy-new-year.html</link>
      <pubDate>Fri, 13 Jan 2012 15:42:57 +0000</pubDate>
      
      <guid>https://lenholgate.com/news/2012/01/happy-new-year.html</guid>
      <description>The year has kicked off to a very busy start for us with lots of work from our secretive Online Gaming Company. They&amp;rsquo;re doing a lot of work to enhance the product that we&amp;rsquo;ve helped them build so that it can run well in cloud environments for their clients and also form the core of their cloud-based service. Much of our current work for them is to do with server to server communications so that they can build a scalable system that can use resources in the cloud to grow on demand.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Latest release of The Server Framework: 6.5.3</title>
      <link>https://lenholgate.com/asynchronousevents/2011/12/latest-release-of-the-server-framework-653.html</link>
      <pubDate>Wed, 14 Dec 2011 08:47:43 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2011/12/latest-release-of-the-server-framework-653.html</guid>
      <description>Version 6.5.3 of The Server Framework was released today.
This release updates the WebSockets Option pack to the final version of the protocol as detailed in RFC 6455 which was released yesterday. There is also a bug fix to WebSocket status reason processing. If you have 6.5 or 6.5.1 or 6.5.2 and you are NOT using WebSockets then you probably don&amp;rsquo;t need this release.
This release includes the following, see the release notes, here, for full details of all changes.</description>
    </item>
    
    <item>
      <title>RFC 6455: The WebSocket protocol</title>
      <link>https://lenholgate.com/blog/2011/12/rfc-6455-the-websocket-protocol.html</link>
      <pubDate>Wed, 14 Dec 2011 08:46:47 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2011/12/rfc-6455-the-websocket-protocol.html</guid>
      <description>I know I&amp;rsquo;ve said this before, but now it&amp;rsquo;s really done&amp;hellip;
The WebSocket protocol is now an official RFC. There are a small number of changes between RFC 6455 and the draft WebSocket protocol version 17; the only important ones being he addition of two new close status codes. The rest is just a case of tidying up the draft.
There will be a 6.5.3 release of The Server Framework to include these changes.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: New client profile: Smart Moves Software Systems - Online gaming</title>
      <link>https://lenholgate.com/asynchronousevents/2011/11/new-client-profile-smart-moves-software-systems-ltd---online-gaming.html</link>
      <pubDate>Wed, 23 Nov 2011 08:38:32 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2011/11/new-client-profile-smart-moves-software-systems-ltd---online-gaming.html</guid>
      <description>We have a new client profile available here for a new client who selected The Server Framework to help it expand its online gaming platform to incorporate a WebSockets interface.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: A new release of WASP, now with SSL/TLS support</title>
      <link>https://lenholgate.com/asynchronousevents/2011/11/a-new-release-of-wasp-now-with-ssltls-support.html</link>
      <pubDate>Tue, 22 Nov 2011 10:10:47 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2011/11/a-new-release-of-wasp-now-with-ssltls-support.html</guid>
      <description>We&amp;rsquo;ve just released a new version of WASP, our pluggable application server platform. This release is built with release 6.5.2 of The Server Framework and includes support for secure TCP connections using SSL/TLS via our SChannel Option pack.
Setting up a secure TCP endpoint with WASP is easy, simply add the Secure configuration option to the &amp;lt;EndPoint&amp;gt; node like this:
&amp;lt;?xml version=&amp;#34;1.0&amp;#34; encoding=&amp;#34;Windows-1252&amp;#34;?&amp;gt; &amp;lt;Configuration&amp;gt; &amp;lt;WASP&amp;gt; &amp;lt;TCP&amp;gt; &amp;lt;Endpoints&amp;gt; &amp;lt;EndPoint Name=&amp;#34;Echo Server&amp;#34; Port=&amp;#34;5050&amp;#34; HandlerDLL=&amp;#34;[CONFIG]\EchoServer.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Latest release of The Server Framework: 6.5.2</title>
      <link>https://lenholgate.com/asynchronousevents/2011/11/latest-release-of-the-server-framework-652.html</link>
      <pubDate>Mon, 21 Nov 2011 08:25:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2011/11/latest-release-of-the-server-framework-652.html</guid>
      <description>Version 6.5.2 of The Server Framework was released today.
This release adds some new functionality to the WebSockets Option pack and fixes some bugs in code that is only currently used by the WebSockets Option pack. If you have 6.5 or 6.5.1 and you are not using WebSockets then you probably don&amp;rsquo;t need this release.
This release includes the following, see the release notes, here, for full details of all changes.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Dropping support for Visual Studio .Net 2002 and 2003</title>
      <link>https://lenholgate.com/asynchronousevents/2011/11/dropping-support-for-visual-studio-net-2002-and-2003.html</link>
      <pubDate>Wed, 09 Nov 2011 11:25:24 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2011/11/dropping-support-for-visual-studio-net-2002-and-2003.html</guid>
      <description>We are dropping support for Visual Studio .Net 2002 from release 6.6 of The Server Framework which is due early next year. We don&amp;rsquo;t expect that this will cause anyone any problems as this compiler became unsupported by Microsoft in 2009, and most native C++ people seemed to skip this release entirely.
We are also considering dropping support for Visual Studio .Net 2003. This compiler is still supported by Microsoft until 2013 but we expect that most people interested in native C++ will have switched to Visual Studio 2005 or 2008 at the earliest opportunity.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: New client profile: Takion Technologies - Equity trading platform</title>
      <link>https://lenholgate.com/asynchronousevents/2011/11/new-client-profile-takion-technologies---equity-trading-platform.html</link>
      <pubDate>Fri, 04 Nov 2011 09:11:03 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2011/11/new-client-profile-takion-technologies---equity-trading-platform.html</guid>
      <description>We have a new client profile available here for a client that we&amp;rsquo;ve had since 2006 and who use The Server Framework in their equity trading systems.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Windows 8 Registered I/O Buffer Strategies</title>
      <link>https://lenholgate.com/asynchronousevents/2011/10/windows-8-registered-io-buffer-strategies.html</link>
      <pubDate>Mon, 31 Oct 2011 07:30:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2011/10/windows-8-registered-io-buffer-strategies.html</guid>
      <description>One of the things that allows the Windows 8 Registered I/O Networking Extensions, RIO, to perform better than normal Winsock calls is the fact that the memory used for I/O operations is pre-registered with the API. This allows RIO to do all the necessary checks that the buffer memory is valid, etc. once, and then lock the buffer in memory until you de-register it. Compare this to normal Winsock networking where the memory needs to be checked and locked on each operation and already we have a whole load of work that simply isn&amp;rsquo;t required for each I/O operation.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Windows 8 Registered I/O and I/O Completion Ports</title>
      <link>https://lenholgate.com/asynchronousevents/2011/10/windows-8-registered-io-and-io-completion-ports.html</link>
      <pubDate>Tue, 25 Oct 2011 18:56:24 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2011/10/windows-8-registered-io-and-io-completion-ports.html</guid>
      <description>In my last blog post I introduced the Windows 8 Registered I/O Networking Extensions, RIO. As I explained there are three ways to retrieve completions from RIO, polled, event driven and via an I/O Completion Port (IOCP). This makes RIO pretty flexible and allows it to be used in many different designs of servers. The polled scenario is likely aimed at very high performance UDP or High Frequency Trading style situations where you may be happy to burn CPU so as to process inbound datagrams as fast as possible.</description>
    </item>
    
    <item>
      <title>Inside the Windows 8 Registered I/O Extensions, RIO</title>
      <link>https://lenholgate.com/blog/2011/10/inside-the-windows-8-registered-io-extensions-rio.html</link>
      <pubDate>Mon, 24 Oct 2011 21:30:38 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2011/10/inside-the-windows-8-registered-io-extensions-rio.html</guid>
      <description>Before I started to look at RIO for inclusion in The Server Framework I did a quick check on the Microsoft BUILD site to see if there were any sessions that dealt with it specifically, I didn&amp;rsquo;t find any. Once I posted my blog posting I did another check and found this video that deals specifically with RIO. This gives some in depth details of how RIO works and the kinds of performance improvements that Microsoft has witnessed in their labs.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Windows 8 Registered I/O Networking Extensions</title>
      <link>https://lenholgate.com/asynchronousevents/2011/10/windows-8-registered-io-networking-extensions.html</link>
      <pubDate>Mon, 24 Oct 2011 16:50:35 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2011/10/windows-8-registered-io-networking-extensions.html</guid>
      <description>Most of the buzz being generated around the Windows 8 Developer Previews at the moment seems to be centred on the new Metro user interface and the Windows Runtime. Whilst both Metro and WinRT are key components of the next Windows release I find the Registered I/O Networking Extensions to be far more interesting, but then I guess I would&amp;hellip;
What are the Registered I/O Networking Extensions? The Registered I/O Networking Extensions, RIO, is a new API that has been added to Winsock to support high-speed networking for increased networking performance with lower latency and jitter.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Out of band data, TCP Urgent mode and overlapped I/O</title>
      <link>https://lenholgate.com/asynchronousevents/2011/10/out-of-band-data-and-overlapped-io.html</link>
      <pubDate>Thu, 20 Oct 2011 10:30:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2011/10/out-of-band-data-and-overlapped-io.html</guid>
      <description>Some stream protocols have the concept of &amp;lsquo;out of band&amp;rsquo; (OOB) data. This is a separate logical communication channel between the peers which enables data that is unrelated to the current data in the stream to be sent alongside the normal data stream. This is often a way for some data to jump ahead of the normal stream and arrive faster than if it were delivered via the the normal data stream.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Latest release of The Server Framework: 6.5.1</title>
      <link>https://lenholgate.com/asynchronousevents/2011/10/latest-release-of-the-server-framework-651.html</link>
      <pubDate>Tue, 11 Oct 2011 08:23:31 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2011/10/latest-release-of-the-server-framework-651.html</guid>
      <description>Version 6.5.1 of The Server Framework was released today.
This is primarily a bug fix release, although we also add several new example clients and servers.
This release includes the following, see the release notes, here, for full details of all changes.
Bug fixes to The Core Framework which affect the use of the newly added &amp;ldquo;Read Again&amp;rdquo; functionality. Fixes to the Hixie76 WebSockets protocol handler to improve interoperability. Added outbound connection establishment support to the Hixie76 protocol handler.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: A little note to all you Chinese hackers</title>
      <link>https://lenholgate.com/asynchronousevents/2011/10/a-little-note-to-all-you-chinese-hackers.html</link>
      <pubDate>Sun, 09 Oct 2011 12:53:22 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2011/10/a-little-note-to-all-you-chinese-hackers.html</guid>
      <description>My server logs are showing that there are some people currently trying to hack this site. They appear to be mainly Chinese. I assume you think you might be able to download the source code to The Server Framework for free if you manage to hack my websites; after all the same IP addresses have been exploring my sites a lot and looking at lots of the documentation pages on here&amp;hellip;</description>
    </item>
    
    <item>
      <title>Asynchronous Events: New client profile: MiX Telematics</title>
      <link>https://lenholgate.com/asynchronousevents/2011/10/new-client-profile-mix-telematics.html</link>
      <pubDate>Mon, 03 Oct 2011 12:42:08 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2011/10/new-client-profile-mix-telematics.html</guid>
      <description>We have a new client profile available here for a client that we&amp;rsquo;ve had since 2009 and who use The Server Framework in their vehicle tracking software.</description>
    </item>
    
    <item>
      <title>The WebSocket protocol is done...</title>
      <link>https://lenholgate.com/blog/2011/09/the-websocket-protocol-is-done.html</link>
      <pubDate>Tue, 27 Sep 2011 12:05:33 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2011/09/the-websocket-protocol-is-done.html</guid>
      <description>Version 16 of the draft WebSocket protocol specification was just released and the HyBi mailing list announcement for this version contained the following:
Chairs and editors believe that this version is final (before the publication of the RFC). Thank you to everybody who helped to get this completed and for the stimulating discussions on the way.
Now feel free to discuss extensions, WebSocket 1.1, etc. :-).
There are no major differences between this and version 13 and the version number of the protocol itself stays at 13 so The WebSockets Option Pack supports everything that will be in the final RFC.</description>
    </item>
    
    <item>
      <title>Designing an asynchronous server-side API for WebSockets </title>
      <link>https://lenholgate.com/blog/2011/09/designing-an-asynchronous-server-side-api-for-websockets.html</link>
      <pubDate>Tue, 27 Sep 2011 10:24:04 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2011/09/designing-an-asynchronous-server-side-api-for-websockets.html</guid>
      <description>I&amp;rsquo;ve just released The WebSockets Option Pack for The Server Framework and I think it&amp;rsquo;s worth running through why the API that I designed ended up as it did. This will probably end up as part of The Server Framework&amp;rsquo;s WebSockets documentation, which is currently a little sparse.
The WebSockets protocol is a message based protocol with unbounded message sizes. This makes a general purpose API more difficult to design as some clients of the API may wish to work in terms of discrete messages and some may wish to work in terms of streams of data.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Latest release of The Server Framework: 6.5</title>
      <link>https://lenholgate.com/asynchronousevents/2011/09/latest-release-of-the-server-framework-65.html</link>
      <pubDate>Thu, 15 Sep 2011 14:40:08 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2011/09/latest-release-of-the-server-framework-65.html</guid>
      <description>Version 6.5 of The Server Framework was released today.
This release includes the following, see the release notes, here, for full details of all changes.
WebSockets support via The WebSockets Option Pack. WebSocket protocol compliance test results can be found here. Improvements to the flow control connection filter so that managing high volume connections is easier than ever. Added code to automatically detect if it&amp;rsquo;s safe to enable FILE_SKIP_COMPLETION_PORT_ON_SUCCESS on a given machine.</description>
    </item>
    
    <item>
      <title>The curious case of the missing copy constructor</title>
      <link>https://lenholgate.com/blog/2011/09/the-curious-case-of-the-not-missing-copy-constructor.html</link>
      <pubDate>Wed, 14 Sep 2011 09:15:46 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2011/09/the-curious-case-of-the-not-missing-copy-constructor.html</guid>
      <description>I have a tendency to write unit tests that are a little more invasive than they need to be; these tests make sure that not only are the results as expected but also that as many of the side-effects and interactions with other objects are as expected as well. So, for example, in my current WebSockets development for The Server Framework I have some tests which test that the correct data is delivered to the client of the API that I&amp;rsquo;m developing and also test that the API interacts with its buffer allocator correctly and doesn&amp;rsquo;t leak memory.</description>
    </item>
    
    <item>
      <title>JetByte News: Where is the year going...</title>
      <link>https://lenholgate.com/news/2011/09/where-is-the-year-going.html</link>
      <pubDate>Thu, 01 Sep 2011 12:08:43 +0000</pubDate>
      
      <guid>https://lenholgate.com/news/2011/09/where-is-the-year-going.html</guid>
      <description>September already&amp;hellip;
We&amp;rsquo;ve spent much of the time since the last Company News update working with our super secretive Online Gaming company to make their product even better.
We&amp;rsquo;ve also been updating The Server Framework&amp;rsquo;s WebSocket support for a couple of new Server Framework clients and generally improving performance for the 6.5 release of The Server Framework which is due real soon now.
In addition we&amp;rsquo;ve launched the LockExplorer website, but, to be honest, we&amp;rsquo;ve been too busy with The Server Framework to do all the writing and evangelising that we have planned for the existing LockExplorer tools, let alone finish the more advanced tools.</description>
    </item>
    
    <item>
      <title>The WebSocket protocol - Draft, HyBi 13</title>
      <link>https://lenholgate.com/blog/2011/09/the-websocket-protocol---draft-hybi-13.html</link>
      <pubDate>Thu, 01 Sep 2011 08:29:05 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2011/09/the-websocket-protocol---draft-hybi-13.html</guid>
      <description>Another day, another WebSocket protocol draft&amp;hellip;
That&amp;rsquo;s probably a little unfair actually. Although there have been several drafts in quick succession over the past few weeks the protocol itself has only changed very slightly. The majority of the changes have simply been to the wording and arrangement of the document.
I was fairly cynical about the likely quality of the final RFC when I started looking at the 09 draft and then, in search of clarification, started following the HyBi Working Group&amp;rsquo;s mailing list.</description>
    </item>
    
    <item>
      <title>Autobahn WebSockets protocol compliance test suite</title>
      <link>https://lenholgate.com/blog/2011/08/autobahn-websockets-protocol-compliance-test-suite.html</link>
      <pubDate>Wed, 31 Aug 2011 08:27:29 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2011/08/autobahn-websockets-protocol-compliance-test-suite.html</guid>
      <description>I&amp;rsquo;m nearing the end of my WebSockets implementation for The Server Framework and have been dealing with various protocol compliance issues. Whilst I have decent unit test coverage I haven&amp;rsquo;t, yet, sat down and produced compliance specific unit tests which walk through the various parts of the (ever changing) draft RFC and test each aspect. Looking back, I probably should have taken this approach even though the RFC was fluid. Anyway.</description>
    </item>
    
    <item>
      <title>I guess this is a geek thing...</title>
      <link>https://lenholgate.com/blog/2011/08/i-guess-this-is-a-geek-thing.html</link>
      <pubDate>Sun, 21 Aug 2011 19:59:49 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2011/08/i-guess-this-is-a-geek-thing.html</guid>
      <description>I&amp;rsquo;m just back from a wonderfully relaxing holiday in Italy. This time we had internet connectivity all the time, so I&amp;rsquo;m up to date on email, etc. The first thing that I do after all the &amp;lsquo;we&amp;rsquo;re back, how&amp;rsquo;s the house, and you need to go to bed even though you&amp;rsquo;re excited to see all of the toys you&amp;rsquo;ve missed&amp;rsquo; stuff is to fire up all my machines and make sure that they do their windows update stuff&amp;hellip; Then the NAS devices need to be started and allowed to settle in, then the VPN needs to be checked, dyndns kicked, etc.</description>
    </item>
    
    <item>
      <title>WebSockets - I miss the TCP half close...</title>
      <link>https://lenholgate.com/blog/2011/07/websockets---i-miss-the-tcp-half-close.html</link>
      <pubDate>Fri, 08 Jul 2011 16:25:59 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2011/07/websockets---i-miss-the-tcp-half-close.html</guid>
      <description>As I mentioned here, the WebSockets protocol is, at this point, a bit of a mess due to the evolution of the protocol and the fact that it&amp;rsquo;s being pulled in various directions by various interested parties. I&amp;rsquo;m just ranting about some of the things that I find annoying&amp;hellip;
The WebSockets protocol includes a way for the endpoints to shut down the connection.
If an endpoint receives a Close frame and that endpoint did not previously send a Close frame, the endpoint MUST send a Close frame in response.</description>
    </item>
    
    <item>
      <title>WebSockets - The deflate-stream extension is broken and badly designed</title>
      <link>https://lenholgate.com/blog/2011/07/websockets---the-deflate-stream-extension-is-broken-and-badly-designed.html</link>
      <pubDate>Fri, 08 Jul 2011 16:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2011/07/websockets---the-deflate-stream-extension-is-broken-and-badly-designed.html</guid>
      <description>As I mentioned here, the WebSockets protocol is, at this point, a bit of a mess due to the evolution of the protocol and the fact that it&amp;rsquo;s being pulled in various directions by various interested parties. I&amp;rsquo;m just ranting about some of the things that I find annoying&amp;hellip;
The WebSockets protocol is designed to be extended, which is all well and good. Extensions can, at present, be formally specified by RFCs or be &amp;ldquo;private use&amp;rdquo; extensions with names that are prefixed with an &amp;ldquo;x-&amp;rdquo;.</description>
    </item>
    
    <item>
      <title>Another day, another deadlock avoided with no harm done</title>
      <link>https://lenholgate.com/blog/2011/07/another-day-another-deadlock-avoided-with-no-harm-done.html</link>
      <pubDate>Thu, 07 Jul 2011 09:43:50 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2011/07/another-day-another-deadlock-avoided-with-no-harm-done.html</guid>
      <description>I&amp;rsquo;m currently building a new example server for The Server Framework. This is a variation on one of our proxy server examples for a client that&amp;rsquo;s doing some WebSockets work. The idea is that the server takes an inbound WebSockets connection, creates an outbound TCP connection to the target server and routes data to and from the remote server and the WebSockets client. It&amp;rsquo;s fairly simple stuff to put together once you&amp;rsquo;re up to speed on The Server Framework but my client needed a helping hand and it&amp;rsquo;s another nice example of what you can do with the framework.</description>
    </item>
    
    <item>
      <title>WebSockets - Why do we need to mask data from client to server?</title>
      <link>https://lenholgate.com/blog/2011/07/websockets---why-do-we-need-to-mask-data-from-client-to-server.html</link>
      <pubDate>Wed, 06 Jul 2011 15:52:04 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2011/07/websockets---why-do-we-need-to-mask-data-from-client-to-server.html</guid>
      <description>As I mentioned here, the WebSockets protocol is, at this point, a bit of a mess due to the evolution of the protocol and the fact that it&amp;rsquo;s being pulled in various directions by various interested parties. I&amp;rsquo;m just ranting about some of the things that I find annoying&amp;hellip;
The client MUST mask all frames sent to the server. A server MUST close the connection upon receiving a frame with the MASK bit set to 0.</description>
    </item>
    
    <item>
      <title>WebSockets - Why differentiate between text and binary frames?</title>
      <link>https://lenholgate.com/blog/2011/07/websockets---why-differentiate-between-text-and-binary-frames.html</link>
      <pubDate>Wed, 06 Jul 2011 14:14:49 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2011/07/websockets---why-differentiate-between-text-and-binary-frames.html</guid>
      <description>As I mentioned here, the WebSockets protocol is, at this point, a bit of a mess due to the evolution of the protocol and the fact that it&amp;rsquo;s being pulled in various directions by various interested parties. I&amp;rsquo;m just ranting about some of the things that I find annoying&amp;hellip;
Back when binary frames were mentioned in the WebSocket protocol specification as a slightly hand wavy &amp;ldquo;something for the future&amp;rdquo; and only text frames were actually possible to send and receive using the clients at the time then there MAY (in the strictest RFC meaning of the word) have been a need to differentiate between text and binary frames.</description>
    </item>
    
    <item>
      <title>WebSockets is a stream, not a message based protocol...</title>
      <link>https://lenholgate.com/blog/2011/07/websockets-is-a-stream-not-a-message-based-protocol.html</link>
      <pubDate>Wed, 06 Jul 2011 13:34:17 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2011/07/websockets-is-a-stream-not-a-message-based-protocol.html</guid>
      <description>As I mentioned here, the WebSockets protocol is, at this point, a bit of a mess due to the evolution of the protocol and the fact that it&amp;rsquo;s being pulled in various directions by various interested parties. I&amp;rsquo;m just ranting about some of the things that I find annoying&amp;hellip;
The first thing to realise about the WebSockets protocol is that it isn&amp;rsquo;t really message based at all despite what the RFC claims.</description>
    </item>
    
    <item>
      <title>The WebSocket protocol, design by committee and requirements tracing</title>
      <link>https://lenholgate.com/blog/2011/07/the-websocket-protocol-design-by-committee-and-requirements-tracing.html</link>
      <pubDate>Wed, 06 Jul 2011 08:37:14 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2011/07/the-websocket-protocol-design-by-committee-and-requirements-tracing.html</guid>
      <description>I&amp;rsquo;ve been working with the WebSocket protocol recently, updating the code that implements the protocol in The Server Framework to the latest version of the draft standard (the HyBi 09 version). Whilst this looks like it&amp;rsquo;s almost a real standard, there are still lots of potentially open issues as can be seen from the HyBi discussion mailing list.
It&amp;rsquo;s quite clear from some of the less cohesive parts of the draft spec (and more so from the mailing list) that the protocol is very much a design by committee effort.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: The WebSocket protocol - Draft, HyBi 09</title>
      <link>https://lenholgate.com/asynchronousevents/2011/06/the-websocket-protocol-draft-hybi-09.html</link>
      <pubDate>Tue, 21 Jun 2011 09:15:53 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2011/06/the-websocket-protocol-draft-hybi-09.html</guid>
      <description>Due to client demand we&amp;rsquo;re working on the WebSocket protocol again. Things have moved on since the work we did in December and this time the resulting option pack really will make it into the next release rather than simply being something that we tweak for each client that asks for it.
Back in December one of our gaming clients wanted WebSocket functionality in their game server so we did some work on the two versions of the spec that they wanted, the Hixie 76 draft and the HyBi 03 draft.</description>
    </item>
    
    <item>
      <title>Movable Type upgrade annoyance</title>
      <link>https://lenholgate.com/blog/2011/06/movable-type-upgrade-annoyance.html</link>
      <pubDate>Wed, 15 Jun 2011 08:12:37 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2011/06/movable-type-upgrade-annoyance.html</guid>
      <description>I&amp;rsquo;ve just upgraded Movable Type from 5.03 to 5.11. The upgrade itself went smoothly except for one thing. A recent fix to MT to remove an obscure HTML standard violation that Firefox was causing problems with means that permalinks with runs of dashes in them have been changed. You can see the full details here on the MT forums where I posted the bug report.
This is more of an issue for me as I did the upgrade and then launched www.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: TCP flow control and asynchronous writes</title>
      <link>https://lenholgate.com/asynchronousevents/2011/06/tcp-flow-control-and-asynchronous-writes.html</link>
      <pubDate>Thu, 09 Jun 2011 22:10:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2011/06/tcp-flow-control-and-asynchronous-writes.html</guid>
      <description>Overview To enable network applications to send and receive data via a TCP connection reliably and efficiently the TCP protocol includes flow control which allows the TCP stack on one side of the connection to tell the TCP stack on other side of the connection to slow down its data transmission, or to stop sending data entirely. The reason that this is required is that the TCP stack in each peer contains buffers for data transmission and data reception and flow control is required to prevent a sender from sending when a receiver&amp;rsquo;s buffer is full.</description>
    </item>
    
    <item>
      <title>In response to @dhanji on unit testing</title>
      <link>https://lenholgate.com/blog/2011/06/in-response-to-dhanji-on-unit-testing.html</link>
      <pubDate>Tue, 07 Jun 2011 08:30:59 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2011/06/in-response-to-dhanji-on-unit-testing.html</guid>
      <description>Dhanji over at Rethrick Construction has written an interesting piece on the value of unit testing.
I agree with his conclusion; &amp;ldquo;So the next time someone comes to you saying let&amp;rsquo;s write the tests first, or that we should aim for 80% code coverage, take it with a healthy dose of scepticism.&amp;rdquo; But then I tend to take everything with a dose of scepticism&amp;hellip;
I also agree with the fact that sometimes the tests get in the way of refactorings that you&amp;rsquo;d like to do and sometimes the tests give you more code that needs to be maintained and that they often appear to slow down your development time.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: New client profile: inConcert</title>
      <link>https://lenholgate.com/asynchronousevents/2011/05/new-client-profile-inconcert.html</link>
      <pubDate>Thu, 26 May 2011 06:40:50 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2011/05/new-client-profile-inconcert.html</guid>
      <description>We have a new client profile available here for a client that began by using The Free Framework and then switched to using The Server Framework to take advantage of the advanced features that it offers.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: New client profile: Cadcorp</title>
      <link>https://lenholgate.com/asynchronousevents/2011/04/new-client-profile-cadcorp.html</link>
      <pubDate>Thu, 21 Apr 2011 09:31:14 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2011/04/new-client-profile-cadcorp.html</guid>
      <description>We have a new client profile available here for a client that began using The Server Framework in its GeognoSIS web mapping product in September 2010.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Latest release of The Server Framework: 6.4</title>
      <link>https://lenholgate.com/asynchronousevents/2011/04/latest-release-of-the-server-framework-64.html</link>
      <pubDate>Wed, 20 Apr 2011 12:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2011/04/latest-release-of-the-server-framework-64.html</guid>
      <description>Version 6.4 of The Server Framework was released today.
This release includes the following, see the release notes, here, for full details of all changes.
The ability to enable, configurable, automatic, crash dump creation on certain error conditions. Two new single reader, multiple writer, lock implementations. Full code page support for unicode to multi-byte conversions. Rationalisation of output from ToHexString() variants. The ability to limit the number of pending file writes to a collection of asynchronous file writers.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Avoiding non-paged pool exhaustion when using asynchronous file writers</title>
      <link>https://lenholgate.com/asynchronousevents/2011/04/avoiding-non-paged-pool-exhaustion-when-using-asynchronous-file-writers.html</link>
      <pubDate>Wed, 06 Apr 2011 10:57:42 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2011/04/avoiding-non-paged-pool-exhaustion-when-using-asynchronous-file-writers.html</guid>
      <description>I&amp;rsquo;m in the process of completing a custom server development project for a client. The server deals with connections from thousands of embedded devices and allows them to download new firmware or configuration data and upload data that they&amp;rsquo;ve accumulated in their local memory. To enable maximum scalability the server use asynchronous reads and writes to the file system as well as the network.
One feature of the server is the ability to configure it to create per session log files.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Bug in CStringConverter::WtoA().</title>
      <link>https://lenholgate.com/asynchronousevents/2011/03/bug-in-cstringconverterwtoa.html</link>
      <pubDate>Mon, 07 Mar 2011 10:23:20 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2011/03/bug-in-cstringconverterwtoa.html</guid>
      <description>There&amp;rsquo;s a bug in CStringConverter::WtoA() when the default system code page is set to a multi-byte code page. The result is that the call will fail with an exception stating that &amp;ldquo;The data area passed to a system call is too small&amp;rdquo;. This was due to some naive code page handling (or lack of handling) in the code that determined the required buffer size.
This bug will be fixed in release 6.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Automatic crash dump creation.</title>
      <link>https://lenholgate.com/asynchronousevents/2011/03/automatic-crash-dump-creation.html</link>
      <pubDate>Tue, 01 Mar 2011 10:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2011/03/automatic-crash-dump-creation.html</guid>
      <description>The next release of The Server Framework, 6.4, includes code which allows a server to create a crash dump whilst it is running. Typically you might want to do this if some strange and possibly fatal exception gets thrown. Crash dumps are a great way to debug a server that is failing in production, the server generates the dump when something goes wrong and you can then load up the dump on your development machine and your debugger will be sitting on the line that caused the problem.</description>
    </item>
    
    <item>
      <title>JetByte News: Fixed-price server development for a Custom Electronics Manufacturer</title>
      <link>https://lenholgate.com/news/2011/02/fixed-price-server-development-for-a-custom-electronics-manufacturer.html</link>
      <pubDate>Mon, 28 Feb 2011 14:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/news/2011/02/fixed-price-server-development-for-a-custom-electronics-manufacturer.html</guid>
      <description>We are building a server for a custom electronics manufacturer who would prefer to remain nameless. The server will manage communication and firmware updates for networks of thousands of smart devices using The Server Framework.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Potential for bugs in the design of the pre 6.4 CIOPool constructor.</title>
      <link>https://lenholgate.com/asynchronousevents/2011/02/potential-for-bugs-in-the-design-of-the-pre-64-ciopool-constructor.html</link>
      <pubDate>Mon, 28 Feb 2011 10:42:46 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2011/02/potential-for-bugs-in-the-design-of-the-pre-64-ciopool-constructor.html</guid>
      <description>The CIOPool class&amp;rsquo;s constructor takes a ThreadIdentifier value which is used to allow the threads in the pool to know that they&amp;rsquo;re in the pool. The value is stored in thread local storage for each thread in the pool and can then be examined to determine if a thread belongs to the I/O pool. The value can also be queried and other threads can &amp;lsquo;be treated as I/O pool threads&amp;rsquo; by setting the appropriate TLS slot to this value.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Performance, allocators, pooling and 6.4</title>
      <link>https://lenholgate.com/asynchronousevents/2011/02/performance-allocators-pooling-and-64.html</link>
      <pubDate>Mon, 14 Feb 2011 11:11:51 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2011/02/performance-allocators-pooling-and-64.html</guid>
      <description>I&amp;rsquo;ve been doing a lot of performance related work over the past few months. Much of it has originally stemmed from work that I have been doing for our Online Game Company client. They want the asynchronous ENet-based server that we&amp;rsquo;ve built for them to be the fastest it can be and so I&amp;rsquo;ve been looking at all aspects of performance within the framework. The testing hasn&amp;rsquo;t brought anything too embarrassing to light; the I/O recursion limiter that was introduced in 6.</description>
    </item>
    
    <item>
      <title>GetExtendedTcpTable(), MIB_TCPTABLE_OWNER_PID and TIME_WAIT</title>
      <link>https://lenholgate.com/blog/2011/02/getextendedtcptable-mib-tcptable-owner-pid-and-time-wait.html</link>
      <pubDate>Mon, 07 Feb 2011 16:49:28 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2011/02/getextendedtcptable-mib-tcptable-owner-pid-and-time-wait.html</guid>
      <description>I have a client who is possibly suffering from TIME_WAIT exhaustion and I thought that the best way to find out for sure was to get them to add the TIME_WAIT perfmon counter to their normal counter logs so that we could see how and when sockets in TIME_WAIT accumulate on the machine.
The problem is that there doesn&amp;rsquo;t seem to be a perfmon counter for this, which is unfortunate, especially since you can easily get the number of established and reset connections from the TCPv4 and TCPv6 performance objects.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: TIME_WAIT and its design implications for protocols and scalable client server systems</title>
      <link>https://lenholgate.com/asynchronousevents/2011/01/time-wait-and-its-design-implications-for-protocols-and-scalable-servers.html</link>
      <pubDate>Fri, 21 Jan 2011 11:39:49 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2011/01/time-wait-and-its-design-implications-for-protocols-and-scalable-servers.html</guid>
      <description>Overview When building TCP client server systems it&amp;rsquo;s easy to make simple mistakes which can severely limit scalability. One of these mistakes is failing to take into account the TIME_WAIT state. In this blog post I&amp;rsquo;ll explain why TIME_WAIT exists, the problems that it can cause, how you can work around it, and when you shouldn&amp;rsquo;t.
TIME_WAIT is an often misunderstood state in the TCP state transition diagram. It&amp;rsquo;s a state that some sockets can enter and remain in for a relatively long length of time, if you have enough socket&amp;rsquo;s in TIME_WAIT then your ability to create new socket connections may be affected and this can affect the scalability of your client server system.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: New client profile: RTE Network</title>
      <link>https://lenholgate.com/asynchronousevents/2011/01/new-client-profile-rte-network.html</link>
      <pubDate>Tue, 18 Jan 2011 11:30:24 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2011/01/new-client-profile-rte-network.html</guid>
      <description>We have a new client profile available here for a client that we&amp;rsquo;ve had since 2006 in the IP Fax business.</description>
    </item>
    
    <item>
      <title>Practical Testing: 31 - A bug in DestroyTimer.</title>
      <link>https://lenholgate.com/blog/2011/01/practical-testing-31---a-bug-in-destroytimer.html</link>
      <pubDate>Thu, 13 Jan 2011 16:36:25 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2011/01/practical-testing-31---a-bug-in-destroytimer.html</guid>
      <description>Back in 2004, I wrote a series of articles called &amp;ldquo;Practical Testing&amp;rdquo; where I took a piece of complicated multi-threaded code and wrote tests for it. I then rebuild the code from scratch in a test driven development style to show how writing your tests before your code changes how you design your code. Since the original articles there have been several bug fixes and redesigns all of which have been supported by the original unit tests and many of which have led to the development of more tests.</description>
    </item>
    
    <item>
      <title>JetByte News: Website update</title>
      <link>https://lenholgate.com/news/2011/01/website-update.html</link>
      <pubDate>Thu, 13 Jan 2011 12:45:59 +0000</pubDate>
      
      <guid>https://lenholgate.com/news/2011/01/website-update.html</guid>
      <description>As you can see, we&amp;rsquo;ve updated the JetByte web site and integrated it into our product site for The Server Framework and Len&amp;rsquo;s, Rambling Comments, programming blog. We&amp;rsquo;ve also got a new logo which we had developed for us as part of a logo design competition that we ran on 99designs.com.
The site is now managed using Movable Type rather than the custom content management system that we had written for us in 2001.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Latest release of The Server Framework: 6.3.3</title>
      <link>https://lenholgate.com/asynchronousevents/2011/01/latest-release-of-the-server-framework-633.html</link>
      <pubDate>Fri, 07 Jan 2011 09:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2011/01/latest-release-of-the-server-framework-633.html</guid>
      <description>Version 6.3.3 of The Server Framework was released today.
This release is purely a bug fix release and includes the following fix.
A fix to JetByteTools::Service::CServiceManager so that it actually allows the service to run without throwing an exception! Fixes to JetByteTools::CLRHosting::CCLREventSink and JetByteTools::CLRHosting::CHostPolicyManager to remove a race condition during host shutdown which could have caused a purecall due to events being fired after the event sink has been destroyed. There&amp;rsquo;s no need for a documentation update so the latest docs available online will be for the 6.</description>
    </item>
    
    <item>
      <title>Welcome to the new Rambling Comments</title>
      <link>https://lenholgate.com/blog/2010/12/welcome-to-the-new-rambling-comments.html</link>
      <pubDate>Wed, 22 Dec 2010 13:33:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2010/12/welcome-to-the-new-rambling-comments.html</guid>
      <description>I&amp;rsquo;ve just finished upgrading the blog from Movable Type 2.64 to Movable Type 5.0.x. The main reason behind actually getting around to doing this (the &amp;lsquo;update blog&amp;rsquo;s MT version&amp;rsquo; &amp;ldquo;todo item&amp;rdquo; has been on my list for several years!) is so that I can integrate Rambling Comments with my other technical blogs. At present it&amp;rsquo;s just The Server Framework blog, but I have two more micro blog sites due in 2011 for products that I&amp;rsquo;m working on and I wanted to be able to include the entries from these new blogs into the main Rambling Comments feed.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: One Million TCP Connections...</title>
      <link>https://lenholgate.com/asynchronousevents/2010/12/one-million-tcp-connections.html</link>
      <pubDate>Fri, 10 Dec 2010 10:39:15 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2010/12/one-million-tcp-connections.html</guid>
      <description>It seems that C10K is old hat these days and that people are aiming a little higher. I&amp;rsquo;ve seen several questions on StackOverflow.com (and had an equal number of direct emails) asking about how people can achieve one million active TCP connections on a single Windows Server box. Or, in a more round about way, what is the theoretical maximum number of active TCP connections that a Windows Server box can handle.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: The WebSocket protocol</title>
      <link>https://lenholgate.com/asynchronousevents/2010/12/the-websocket-protocol.html</link>
      <pubDate>Thu, 09 Dec 2010 14:47:18 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2010/12/the-websocket-protocol.html</guid>
      <description>I&amp;rsquo;ve spent the last few days implementing the WebSocket protocol (well, two versions of the draft standard actually) and integrating it into an existing server for one of our clients. This has proved to be an interesting exercise. The protocol itself is pretty simple but, as ever, the devil is in the detail. I now have server side code that deals with both the Hixie 76 draft and the HyBi 03 draft of the protocol.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: My approach to bugs</title>
      <link>https://lenholgate.com/asynchronousevents/2010/11/my-approach-to-bugs.html</link>
      <pubDate>Wed, 24 Nov 2010 10:53:12 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2010/11/my-approach-to-bugs.html</guid>
      <description>As the recent spate of bug fix and patch releases shows I&amp;rsquo;m not scared of talking about the bugs that I find in the code of The Server Framework and pushing fixes out quickly. It&amp;rsquo;s my belief that the most important thing to get out of a bug report is an improved process which will help prevent similar bugs from occurring in future and the only way to achieve that is to be open about the bugs you find and equally open about how you then address them and try and prevent similar issues.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Bug fix for 6.3.x CServiceManager.cpp</title>
      <link>https://lenholgate.com/asynchronousevents/2010/11/bug-fix-for-63x-cservicemanagercpp.html</link>
      <pubDate>Wed, 24 Nov 2010 08:46:44 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2010/11/bug-fix-for-63x-cservicemanagercpp.html</guid>
      <description>There&amp;rsquo;s a stupidly obvious, should have been caught at numerous points during pre-release testing, bug in CServiceManager.cpp.
The code below that starts at line 158:
case RunActionRunAsService : { if (!StartServices()) { const DWORD lastError = ::GetLastError(); const _tstring message = messageHeader + _T(&amp;#34;Failed to start service.\n\n &amp;#34;) + GetLastErrorMessage(lastError); MessageBox(message); result = 2; } } default : throw CException(_T(&amp;#34;CServiceInstanceManager::Run()&amp;#34;), _T(&amp;#34;Unexpected run action:&amp;#34;) + ToString(runAction)); } Should actually look like this, note the inclusion of the missing break; and the exception source correction:</description>
    </item>
    
    <item>
      <title>Asynchronous Events: New client profile: Desktop Sharing Company</title>
      <link>https://lenholgate.com/asynchronousevents/2010/11/new-client-profile-desktop-sharing-company.html</link>
      <pubDate>Wed, 24 Nov 2010 08:16:09 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2010/11/new-client-profile-desktop-sharing-company.html</guid>
      <description>We have a new client profile available here for a client that we&amp;rsquo;ve had since 2006 in the desktop sharing market. Their system, built on The Server Framework, runs on more than 120 servers worldwide and handles more than 200,000 desktop sharing sessions each day!</description>
    </item>
    
    <item>
      <title>Lock inversion detector finally fully integrated in my build</title>
      <link>https://lenholgate.com/blog/2010/11/lock-inversion-detector-finally-fully-integrated-in-my-build.html</link>
      <pubDate>Tue, 23 Nov 2010 09:25:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2010/11/lock-inversion-detector-finally-fully-integrated-in-my-build.html</guid>
      <description>After a week or so of serious dog fooding I&amp;rsquo;ve finally got a nice reliable lock inversion detector running as part of my build system for The Server Framework&amp;rsquo;s example servers.
Note: the deadlock detector mentioned in this blog post is now available for download from www.lockexplorer.com.
The build system has always run a set of &amp;lsquo;black box&amp;rsquo; server tests for each server example as part of the build. These start up the example server in question, run a set of connections against it and shut the server down.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Latest release of The Server Framework: 6.3.2</title>
      <link>https://lenholgate.com/asynchronousevents/2010/11/latest-release-of-the-server-framework-632.html</link>
      <pubDate>Tue, 23 Nov 2010 09:23:02 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2010/11/latest-release-of-the-server-framework-632.html</guid>
      <description>Version 6.3.2 of The Server Framework was released today.
This release is purely a bug fix release and includes the following fixes.
Fixes to JetByteTools::OpenSSL::CAsyncConnection to remove the possibility of deadlock due to a lock inversion. Fixes to JetByteTools::SSPI::SChannel::CAsyncConnection to remove the possibility of deadlock due to a lock inversion. Fixes to JetByteTools::SSPI::Negotiate::CAsyncConnection to remove the possibility of deadlock due to a lock inversion. Fixes to JetByteTools::CLRHosting::CCLREventSink and JetByteTools::CLRHosting::CCLRHost to remove a race condition during host shutdown which could have caused a purecall due to events being fired after the event sink has been destroyed.</description>
    </item>
    
    <item>
      <title>WinRM/WinRS job memory limits.</title>
      <link>https://lenholgate.com/blog/2010/11/winrmwinrs-job-memory-limits-1.html</link>
      <pubDate>Fri, 19 Nov 2010 16:11:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2010/11/winrmwinrs-job-memory-limits-1.html</guid>
      <description>My tangential testing that began with my problems with commands run via WinRs during some distributed load testing are slowly unravelling back to the start. I now have a better build and test system for the server examples that ship as part of The Server Framework. I have a test runner that runs the examples with memory limits to help spot memory leak bugs and a test runner that checks for lock inversions.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Useful link to TCP connection knowledge base articles</title>
      <link>https://lenholgate.com/asynchronousevents/2010/11/useful-link-to-tcp-connection-knowledge-base-articles.html</link>
      <pubDate>Sat, 13 Nov 2010 09:13:56 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2010/11/useful-link-to-tcp-connection-knowledge-base-articles.html</guid>
      <description>I found this article recently whilst discussing a question about socket reuse using DisconnectEx() over on StackOverflow. It&amp;rsquo;s a useful collection of the various configuration settings that can affect the number of concurrent TCP connections that a server can support, complete with links to the KB articles that discuss the settings in more detail. It&amp;rsquo;s a bit out of date, but it&amp;rsquo;s probably a good starting point if you want to understand the limits involved.</description>
    </item>
    
    <item>
      <title>A lock inversion detector as part of the build is good</title>
      <link>https://lenholgate.com/blog/2010/11/a-lock-inversion-detector-as-part-of-the-build-is-good.html</link>
      <pubDate>Fri, 12 Nov 2010 08:47:34 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2010/11/a-lock-inversion-detector-as-part-of-the-build-is-good.html</guid>
      <description>As I mentioned, I&amp;rsquo;ve been adjusting my build system and have finally got to the point where my lock inversion detector is suitable to run on all of my example servers during their test phase on the build machines. I&amp;rsquo;m working my way through the various example server&amp;rsquo;s test scripts and adjusting them so that they use the lock inversion detector, can be easily configured to run the full blown deadlock detector and also can run the servers under the memory profiling test runner that I put together earlier in the week.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Potential to deadlock in OpenSSL, SChannel and SSPI Negotiate connectors</title>
      <link>https://lenholgate.com/asynchronousevents/2010/11/potential-to-deadlock-in-openssl-schannel-and-sspi-negotiate-connectors.html</link>
      <pubDate>Fri, 12 Nov 2010 08:38:52 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2010/11/potential-to-deadlock-in-openssl-schannel-and-sspi-negotiate-connectors.html</guid>
      <description>I&amp;rsquo;ve been improving my pre-release testing system and now run a lock inversion detector as part of my build machine&amp;rsquo;s build and test cycle for the socket server examples. This lock inversion detector can detect the potential to deadlock without the code ever needing to actually deadlock, so it&amp;rsquo;s a pretty powerful tool. It has detected a lock inversion in the async connectors used by the OpenSSL, SChannel and SSPI Negotiate libraries.</description>
    </item>
    
    <item>
      <title>Tangential testing</title>
      <link>https://lenholgate.com/blog/2010/11/tangential-testing.html</link>
      <pubDate>Wed, 10 Nov 2010 08:15:03 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2010/11/tangential-testing.html</guid>
      <description>My theorising about the strange memory related failures that I was experiencing with my distributed testing using WinRS have led me to putting together a test runner that can limit the amount of memory available to a process and terminate it if it exceeds the expected amount. With this in place during my server test runs I can spot the kind of memory leak that slipped through the cracks of my testing and made it into release 6.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Latest release of The Server Framework: 6.3.1</title>
      <link>https://lenholgate.com/asynchronousevents/2010/11/latest-release-of-the-server-framework-631.html</link>
      <pubDate>Mon, 08 Nov 2010 12:59:24 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2010/11/latest-release-of-the-server-framework-631.html</guid>
      <description>Version 6.3.1 of The Server Framework was released today.
This release is purely a bug fix release and includes the following fixes.
Fixes to JetByteTools::OpenSSL::CStreamSocketConnectionFilter to prevent buffer reference leaks which result in memory leaks during secure connection processing; see here for more details. Fixes to JetByteTools::OpenSSL::CAsyncConnector to prevent socket reference leaks in situations where connections are reset or where unexpected SSL errors occur. These socket reference leaks can cause delays and hangs when shutting down a server or connection manager.</description>
    </item>
    
    <item>
      <title>WinRM/WinRS job memory limits?</title>
      <link>https://lenholgate.com/blog/2010/11/winrmwinrs-job-memory-limits.html</link>
      <pubDate>Thu, 04 Nov 2010 22:46:24 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2010/11/winrmwinrs-job-memory-limits.html</guid>
      <description>I&amp;rsquo;ve had one of those days. In fact I&amp;rsquo;ve had one of those days for a couple of days this week&amp;hellip;
It started when I decided to improve the profiling that I was doing on a new memory allocator for The Server Framework by extending the perfmon and WinRS based distributed server testing that I wrote about a while back. This allows me to create a set of perfmon logs, start a server to collect data about and then start a remote client to stress the server.</description>
    </item>
    
    <item>
      <title>Bug in OpenSSL stream socket filter which causes memory leaks</title>
      <link>https://lenholgate.com/blog/2010/11/bug-in-openssl-stream-socket-filter-which-cases-memory-leaks.html</link>
      <pubDate>Wed, 03 Nov 2010 17:57:17 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2010/11/bug-in-openssl-stream-socket-filter-which-cases-memory-leaks.html</guid>
      <description>See here for details.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Bug in OpenSSL stream socket filter which causes memory leaks</title>
      <link>https://lenholgate.com/asynchronousevents/2010/11/bug-in-openssl-stream-socket-filter-which-cases-memory-leaks.html</link>
      <pubDate>Wed, 03 Nov 2010 17:44:59 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2010/11/bug-in-openssl-stream-socket-filter-which-cases-memory-leaks.html</guid>
      <description>There&amp;rsquo;s a bug in the OpenSSL stream socket filter which results in I/O buffers being leaked on both inbound and outbound data flow. This causes the memory used by the client or server to grow throughout the life of the process. The bug has been present since release 6.2 when the structure of the filtering code was redesigned.
Note that due to the fact that the filtering code was all redone at that time I expect that the same bug is likely to be present in the SChannel, SSPI and compression filters.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: How to support 10,000 or more concurrent TCP connections - Part 2 - Perf tests from Day 0</title>
      <link>https://lenholgate.com/asynchronousevents/2010/10/how-to-support-10000-or-more-concurrent-tcp-connections---part-2---perf-tests-from-day-0.html</link>
      <pubDate>Wed, 27 Oct 2010 09:05:32 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2010/10/how-to-support-10000-or-more-concurrent-tcp-connections---part-2---perf-tests-from-day-0.html</guid>
      <description>As I mentioned last time, supporting a large number of concurrent connections on a modern Windows operating system is reasonably straight forward if you get your initial design right; use an I/O Completion Port based design, minimise context switches, data copies and memory allocation and avoid lock contention&amp;hellip; The Server Framework gives you this as a starting point and you can often use one of the many, complete and fully functionaly, real world example servers to provide you with a whole server shell, complete with easy performance monitoring and SSL security, where you simply have to fill in your business logic.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: How to support 10,000 or more concurrent TCP connections</title>
      <link>https://lenholgate.com/asynchronousevents/2010/10/how-to-support-10000-concurrent-tcp-connections.html</link>
      <pubDate>Mon, 25 Oct 2010 10:34:50 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2010/10/how-to-support-10000-concurrent-tcp-connections.html</guid>
      <description>Using a modern Windows operating system it&amp;rsquo;s pretty easy to build a server system that can support many thousands of connections if you design the system to use the correct Windows APIs. The key to server scalability is to always keep in mind the Four Horsemen of Poor Performance as described by Jeff Darcy in his document on High Performance Server Architecture. These are:
Data copies Context switches Memory allocation Lock contention I&amp;rsquo;ll look at context switches first, as IMHO this is where outdated designs often rear their head first.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: WASP command line options</title>
      <link>https://lenholgate.com/asynchronousevents/2010/10/wasp-command-line-options.html</link>
      <pubDate>Wed, 20 Oct 2010 10:35:35 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2010/10/wasp-command-line-options.html</guid>
      <description>As you&amp;rsquo;ve seen from some of the earlier tutorials, WASP has quite a few command line parameters that can change how it runs. You can run WASP as a normal executable or install it as a Windows Service. The complete set of command line options are displayed if you run WASP with /help or with an option that it doesn&amp;rsquo;t understand but I thought I&amp;rsquo;d list them all here for completeness and so that I can explain in a little more detail what each one does.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: More complex message framing</title>
      <link>https://lenholgate.com/asynchronousevents/2010/10/more-complex-message-framing.html</link>
      <pubDate>Tue, 19 Oct 2010 08:50:54 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2010/10/more-complex-message-framing.html</guid>
      <description>So far the tutorials have focused on a simple length prefixed message type. This is probably the easiest message in the world to process, the message framing is very simple and there&amp;rsquo;s hardly anything to do in your message framing DLL. Unfortunately not all protocols are this simple to parse. Another common real-world protocol is a line based protocol that is delimited by a terminating character, or characters. One such protocol is the POP3 protocol which works in terms of commands which are delimited by the CR LF sequence.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: WASP&#39;s config file</title>
      <link>https://lenholgate.com/asynchronousevents/2010/10/wasps-config-file.html</link>
      <pubDate>Mon, 18 Oct 2010 10:57:49 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2010/10/wasps-config-file.html</guid>
      <description>As you have discovered if you&amp;rsquo;ve been following the tutorials, WASP is configured using an XML file.
This file can either live in the same directory as the WASP executable or, for when you&amp;rsquo;re running WASP as a Windows Service, it can live in a place that is configured in the registry.
The file is pretty simple and we&amp;rsquo;ve covered most of the options in the various tutorials but there are some configuration options that we haven&amp;rsquo;t touched on yet and it seems sensible to have one place to look for details of all of the options that you can configure in the config file.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: WASP plugin entry points</title>
      <link>https://lenholgate.com/asynchronousevents/2010/10/wasp-plugin-entry-points.html</link>
      <pubDate>Fri, 15 Oct 2010 08:42:28 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2010/10/wasp-plugin-entry-points.html</guid>
      <description>By now you&amp;rsquo;ve probably taken a look inside of the WASP SDK header, WASPDLLEntryPoints.h and seen all of the various plugin entry points that you can export from your plugin. This tutorial will explain what each of them is for and how you use them and will present a simple plugin which uses all of the entry points and logs its actions to WASP&amp;rsquo;s debug log.
As you&amp;rsquo;ve seen from the previous tutorials, a WASP plugin can be either a message framing DLL or a message handling DLL or both depending on the entry points that it exports.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: WASP Server instances</title>
      <link>https://lenholgate.com/asynchronousevents/2010/10/wasp-server-instances.html</link>
      <pubDate>Thu, 14 Oct 2010 14:34:21 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2010/10/wasp-server-instances.html</guid>
      <description>A single WASP plugin can be loaded by multiple end points to provide the same server on multiple ports. A plugin could, for example, be configured on one end point to provide services to the internal network and on another end point to provide services to the internet. Alternatively, in later WASP releases, a single plugin may be used to provide services over an insecure link on one end point and via an SSL protected link on another.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Testing complex server code </title>
      <link>https://lenholgate.com/asynchronousevents/2010/10/testing-complex-server-code.html</link>
      <pubDate>Wed, 13 Oct 2010 12:40:23 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2010/10/testing-complex-server-code.html</guid>
      <description>As I mentioned in the release notes for v6.3 here, I&amp;rsquo;ve added some code to prevent potential recursion issues if certain performance improvements are enabled.
In Windows Vista and later it&amp;rsquo;s possible to set the FILE_SKIP_COMPLETION_PORT_ON_SUCCESS flag on a socket using SetFileCompletionNotificationModes(). When this flag is set an overlapped operation can complete &amp;ldquo;in-line&amp;rdquo; and the completion operation can be handled on the thread that issued the operation rather than on one of the threads that is servicing the IO completion port that is associated with the socket.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Calling WASP functions from your plugin DLL.</title>
      <link>https://lenholgate.com/asynchronousevents/2010/10/calling-wasp-functions-from-your-plugin-dll.html</link>
      <pubDate>Wed, 13 Oct 2010 08:41:43 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2010/10/calling-wasp-functions-from-your-plugin-dll.html</guid>
      <description>So far our simple example WASP plugins have all used OnReadCompletedEx() which gives you both an input and an output buffer and assumes that you generate a single response to each inbound message. It also assumes that you wont write more data than will fit in a single I/O buffer. Whilst this is suitable for some server designs it&amp;rsquo;s quite restrictive. Most plugins will probably use a combination of OnReadCompleted() and the WASP callback function writeToConnection().</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Some thoughts on that two thread pool server design</title>
      <link>https://lenholgate.com/asynchronousevents/2010/10/some-thoughts-on-that-two-thread-pool-server-design.html</link>
      <pubDate>Tue, 12 Oct 2010 11:27:25 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2010/10/some-thoughts-on-that-two-thread-pool-server-design.html</guid>
      <description>I&amp;rsquo;m currently re-reading &amp;ldquo;High Performance Server Architecture&amp;rdquo; by Jeff Darcy and he has a lot of sensible stuff to say about avoiding context switches and how my multiple thread pool design, whilst conceptually good is practically not so good. In general I agree with him but often the design provides good enough performance and it&amp;rsquo;s easy to compose from the various classes in The Server Framework.
Explicitly managing the threads that could run, using a semaphore that only allows a number of threads that is equal to or less than your number of cores to do work at once is a nice idea but one that adds complexity to the workflow as you need to explicitly acquire and release the semaphore as you perform your blocking operations.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: WASP&#39;s thread pools</title>
      <link>https://lenholgate.com/asynchronousevents/2010/10/wasps-thread-pools.html</link>
      <pubDate>Tue, 12 Oct 2010 09:04:41 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2010/10/wasps-thread-pools.html</guid>
      <description>Way back in 2002 when I was developing ISO8583 servers for PayPoint I put together a two thread pool server design that has worked so well that many of the servers that I develop today still use variations on the original design. The main idea behind the design was that the threads that do the network I/O should never block and the threads that do the user work can block if they like.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Using OpenSSL with Asynchronous Sockets</title>
      <link>https://lenholgate.com/asynchronousevents/2010/10/using-openssl-with-asynchronous-sockets.html</link>
      <pubDate>Tue, 12 Oct 2010 08:25:23 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2010/10/using-openssl-with-asynchronous-sockets.html</guid>
      <description>OpenSSL is an open source implementation of the SSL and TLS protocols. Unfortunately it doesn&amp;rsquo;t play well with windows style asynchronous sockets. This article - previously published in Windows Developer Magazine and now available on the Dr. Dobbs site - provides a simple connector that enables you to use OpenSSL asynchronously.
Integrating OpenSSL with asynchronous sockets is similar to integrating it with overlapped I/O and IO completion port based designs and so the ideas behind the code discussed in the article were then used as part of the original design for The Server Framework&amp;rsquo;s OpenSSL option pack.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Stress testing WASP using the EchoServerTest program</title>
      <link>https://lenholgate.com/asynchronousevents/2010/10/stress-testing-wasp-using-the-echoservertest-program.html</link>
      <pubDate>Mon, 11 Oct 2010 12:15:43 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2010/10/stress-testing-wasp-using-the-echoservertest-program.html</guid>
      <description>The simple echo server plugin that we developed in the earlier tutorial was easy to test using telnet as it simply echoed all data back to the client. The plugin which used simple message framing was less easy to test using telnet as you first needed to enter the correct bytes to specify a message length as an int in network byte order.
Neither plugin was easy to stress test using telnet as you&amp;rsquo;d need lots of monkeys and lots of machines to simulate lots of users.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Message framing, a length prefixed packet echo server </title>
      <link>https://lenholgate.com/asynchronousevents/2010/10/message-framing-a-length-prefixed-packet-echo-server.html</link>
      <pubDate>Fri, 08 Oct 2010 08:45:42 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2010/10/message-framing-a-length-prefixed-packet-echo-server.html</guid>
      <description>Most TCP servers deal with distinct messages whereas TCP itself deals in terms of a stream bytes. By default a single read from a TCP stream can return any number of bytes from 1 to the size of the buffer that you supplied. TCP knows nothing about your message structure. This is where message framing comes in. If the protocol that you are supporting has a concept of what constitutes a &amp;ldquo;message&amp;rdquo; then your protocol requires message framing.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: The simplest plugin, examining EchoServer.dll</title>
      <link>https://lenholgate.com/asynchronousevents/2010/10/the-simplest-plugin-examining-echoserverdll.html</link>
      <pubDate>Thu, 07 Oct 2010 08:40:10 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2010/10/the-simplest-plugin-examining-echoserverdll.html</guid>
      <description>WASP plugins are, at present, native DLLs that expose a set of known entry points. The minimal plugin exposes a single entry point, either OnReadCompleted() or OnReadCompletedEx(). The entry points and other details that you need to build a plugin for WASP are detailed in the WASPDLLEntryPoint.h header file that ships in the SDK directory with WASP.
The simplest plugin that you could possibly write is one that uses OnReadCompletedEx() and which simply echoes all inbound data back to the client again.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Automating WASP installation</title>
      <link>https://lenholgate.com/asynchronousevents/2010/10/automating-wasp-installation.html</link>
      <pubDate>Wed, 06 Oct 2010 08:34:15 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2010/10/automating-wasp-installation.html</guid>
      <description>As you will have noticed if you&amp;rsquo;ve been following along with the tutorials, WASP displays a message box when you successfully install an instance of the service or install the performance counters. This is less than ideal for automated installations and so you can add the /noMessages command line argument to these operations to give you an installation which does not require a user to acknowledge the message box.
If you need to automate the installation of one or more instances of WASP and/or the performance counters you can using /noMessages.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Enabling and viewing WASP&#39;s performance counters</title>
      <link>https://lenholgate.com/asynchronousevents/2010/10/enabling-and-viewing-wasps-performance-counters.html</link>
      <pubDate>Tue, 05 Oct 2010 08:56:59 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2010/10/enabling-and-viewing-wasps-performance-counters.html</guid>
      <description>WASP can expose internal metrics using performance counters. These can then be viewed using the standard Windows performance monitoring tool, perfmon. WASP&amp;rsquo;s performance counters allow you to see how your server is performing and the counters can be automatically monitored and integrated with the counters from other Windows services, such as SQL server, the base operating system or the CLR, to provide a fully integrated production monitoring system.
Installation of performance counters is done once per machine rather than once per WASP instance and performance counters can be used and viewed both when WASP is running as a Windows Service and from the command line.</description>
    </item>
    
    <item>
      <title>Latest release of The Server Framework: 6.3</title>
      <link>https://lenholgate.com/blog/2010/10/latest-release-of-the-server-framework-63.html</link>
      <pubDate>Mon, 04 Oct 2010 10:57:52 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2010/10/latest-release-of-the-server-framework-63.html</guid>
      <description>The latest release of The Server Framework is now available from ServerFramework.com. See here for details.</description>
    </item>
    
    <item>
      <title>ServerFramework.com</title>
      <link>https://lenholgate.com/blog/2010/10/serverframeworkcom.html</link>
      <pubDate>Mon, 04 Oct 2010 10:47:40 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2010/10/serverframeworkcom.html</guid>
      <description>I&amp;rsquo;ve put together a new website for my super scalable, high performance, I/O Completion Port based server framework.
This has all of the information that you need to decide if you can use The Free Framework or if you&amp;rsquo;d prefer to license The Server Framework. There&amp;rsquo;s also a new server example, WASP, which is a pluggable server platform that is available in compiled form and is free for non-commercial use. Over the next few months WASP will evolve to support most of the key features of the various options that are available with The Server Framework such as SSL, Managed hosting, UDP and TCP, etc.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Changes to the CLR Hosting Tools library in 6.3</title>
      <link>https://lenholgate.com/asynchronousevents/2010/10/changes-to-the-clr-hosting-tools-library-in-63.html</link>
      <pubDate>Mon, 04 Oct 2010 09:39:19 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2010/10/changes-to-the-clr-hosting-tools-library-in-63.html</guid>
      <description>One of my clients has recently required .Net 4.0 hosting support and so most of the changes in the CLR Hosting Tools library in 6.3 have been driven by them.
The main new feature is the optional use of the .Net 4.0 hosting API. This allows us to host .Net 4.0 as well as earlier CLRs and also allows us to host multiple different CLRs in a single process. The new hosting API is supported via the CCLRHostFactory object which uses the CCLRMetaHost and CCLRRuntimes objects to present a consistent interface to both the .</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Running WASP as a Windows Service</title>
      <link>https://lenholgate.com/asynchronousevents/2010/10/running-wasp-as-a-windows-service.html</link>
      <pubDate>Mon, 04 Oct 2010 08:24:50 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2010/10/running-wasp-as-a-windows-service.html</guid>
      <description>In the last tutorial I showed you how to run WASP as a normal command line executable. This can be useful for testing and development and also for debugging but when you want to run WASP on a production machine you probably want to run it as a Windows Service.
Running as a Windows Service has the advantage that you don&amp;rsquo;t need a user logged in to the machine to run WASP, you can also control it remotely using the Windows Service Control Manager application.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Checking for new versions of WASP</title>
      <link>https://lenholgate.com/asynchronousevents/2010/10/checking-for-new-versions-of-wasp.html</link>
      <pubDate>Fri, 01 Oct 2010 10:00:25 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2010/10/checking-for-new-versions-of-wasp.html</guid>
      <description>I&amp;rsquo;ve got quite a few plans for expanding the functionality that WASP provides. Ideally it should showcase all of the major options available with The Server Framework; so pretty soon I&amp;rsquo;ll be adding UDP support, hosting plugins written in managed code, providing secure TCP connections using SSL, etc. Plus I&amp;rsquo;m sure that some bugs will be shaken out as users push the system in ways that I haven&amp;rsquo;t anticipated and so haven&amp;rsquo;t tested.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Changes to the Service Tools library in 6.3 </title>
      <link>https://lenholgate.com/asynchronousevents/2010/10/changes-to-the-service-tools-library-in-63.html</link>
      <pubDate>Fri, 01 Oct 2010 09:35:34 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2010/10/changes-to-the-service-tools-library-in-63.html</guid>
      <description>The development of WASP has been acting as a bit of an internal driver for new feature development in the 6.3 release of The Server Framework. Sitting down to develop a service that was easy to use for a mass market exposed some small holes in the 6.2 release; nothing too serious but pretty soon after putting together the first service shell of the WASP application I had a list of nice to have additions for the Service Tools Library.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Getting started with WASP</title>
      <link>https://lenholgate.com/asynchronousevents/2010/10/getting-started-with-wasp.html</link>
      <pubDate>Fri, 01 Oct 2010 09:25:46 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2010/10/getting-started-with-wasp.html</guid>
      <description>The easiest way to get started with WASP is to download the latest version from the download page, here, unzip the contents somewhere and then run the WASP executable, simply double click the executable in Explorer or navigate to the directory that you have installed WASP into and type &amp;ldquo;wasp&amp;rdquo;. The result should be that a log file is created in a subdirectory of the directory where the exe is located called log.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Latest release of The Server Framework: 6.3</title>
      <link>https://lenholgate.com/asynchronousevents/2010/10/latest-release-of-the-server-framework-63.html</link>
      <pubDate>Fri, 01 Oct 2010 08:50:39 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2010/10/latest-release-of-the-server-framework-63.html</guid>
      <description>Version 6.3 of The Server Framework was released today.
This release includes the following, see the release notes, here, for full details of all changes.
Performance improvements on Vista and later operating systems. See here for more details. Performance improvements for some designs of datagram server by reusing sockets and buffers more aggressively and thus avoiding the allocators in some situations A redesigned the timer queue to improve timer dispatch performance.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: An introduction to WASP</title>
      <link>https://lenholgate.com/asynchronousevents/2010/10/an-introduction-to-wasp.html</link>
      <pubDate>Fri, 01 Oct 2010 08:39:05 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2010/10/an-introduction-to-wasp.html</guid>
      <description>WASP is, at heart, simply another example server for The Server Framework, but it&amp;rsquo;s also something a little new. Up until now potential clients have been able to look at the example servers source code and ask for pre-built executables for testing. The thing is, the examples are just that, examples and whilst release 6.2 of The Server Framework ships with over 70 examples (see here) they still only show small pieces of functionality in isolation.</description>
    </item>
    
    <item>
      <title>Asynchronous Events: Welcome to ServerFramework.com</title>
      <link>https://lenholgate.com/asynchronousevents/2010/10/welcome-to-serverframeworkcom.html</link>
      <pubDate>Fri, 01 Oct 2010 08:30:28 +0000</pubDate>
      
      <guid>https://lenholgate.com/asynchronousevents/2010/10/welcome-to-serverframeworkcom.html</guid>
      <description>ServerFramework.com is a new website that we&amp;rsquo;ve put together to make it easier for users and potential users of the licensed version of our high performance, I/O completion port based client/server socket framework to find all of the information that they need. As many of you know, I&amp;rsquo;ve been working on the code that forms The Server Framework since 2001 and it&amp;rsquo;s been used by lots of our clients to produce highly scalable, high performance, reliable servers that often run continuously 24/7, all year round.</description>
    </item>
    
    <item>
      <title>The design implications of FILE_SKIP_COMPLETION_PORT_ON_SUCCESS and the Vista overlapped I/O change, reprise</title>
      <link>https://lenholgate.com/blog/2010/09/the-design-implications-of-file-skip-completion-port-on-success-and-the-vista-overlapped-io-change-r.html</link>
      <pubDate>Mon, 27 Sep 2010 14:59:51 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2010/09/the-design-implications-of-file-skip-completion-port-on-success-and-the-vista-overlapped-io-change-r.html</guid>
      <description>Back in April I was talking about how the fact that 6.2 allowed you to enable FILE_SKIP_COMPLETION_PORT_ON_SUCCESS meant that some server designs might start to experience recursion that they previously didn&amp;rsquo;t experience. During the testing for the imminent release of 6.3 I managed to hit on just the right combination of build machine, load and test server to actually produce this under test. As I mentioned back in April, this is only a problem (in 6.</description>
    </item>
    
    <item>
      <title>Things I hate about Visual Studio 2010 - part &#39;today&#39;</title>
      <link>https://lenholgate.com/blog/2010/09/things-i-hate-about-visual-studio-2010---part-today.html</link>
      <pubDate>Fri, 24 Sep 2010 21:51:12 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2010/09/things-i-hate-about-visual-studio-2010---part-today.html</guid>
      <description>I tend to work with lots of solutions at once. I&amp;rsquo;m often building code for clients, building and testing new example servers for The Server Framework and running lots of copies of various versions of Visual Studio at once.
Now, if I happen to try and open two VS2010 solutions at around the same time (and given the time it takes for VS2010 to start up that&amp;rsquo;s not that hard to do), then one of them wins and gets my normal settings and one (probably the one that gets a sharing violation whilst trying to read my normal settings) ends up with some default madness setup that isn&amp;rsquo;t what I want at all.</description>
    </item>
    
    <item>
      <title>6.3 is coming...</title>
      <link>https://lenholgate.com/blog/2010/09/63-is-coming.html</link>
      <pubDate>Fri, 24 Sep 2010 19:31:15 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2010/09/63-is-coming.html</guid>
      <description>This evening I kicked off the acceptance tests for version 6.3 of the example servers that ship with The Server Framework; they&amp;rsquo;ll probably take most of the weekend to run, if I&amp;rsquo;m lucky. The unit tests for all the libraries have already been run through the build machines over the last few days, the release notes are almost done and so I&amp;rsquo;m now in the final phase of preparing the 6.</description>
    </item>
    
    <item>
      <title>Practical Testing: 30 - Reducing contention</title>
      <link>https://lenholgate.com/blog/2010/09/practical-testing-30---reducing-contention.html</link>
      <pubDate>Thu, 23 Sep 2010 15:19:51 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2010/09/practical-testing-30---reducing-contention.html</guid>
      <description>Previously on &amp;ldquo;Practical Testing&amp;rdquo;&amp;hellip; I&amp;rsquo;ve been looking at the performance of the timer system that I developed and have built a more specialised and higher performance timer system which is more suitable for some high performance reliable UDP work that I&amp;rsquo;m doing. Whilst developing the new timer wheel I began to consider the thread contention issues that the timer system faced and came up with a notation for talking about contention (see here).</description>
    </item>
    
    <item>
      <title>DevPartner Studio 10</title>
      <link>https://lenholgate.com/blog/2010/09/devpartner-studio-10.html</link>
      <pubDate>Thu, 09 Sep 2010 08:53:14 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2010/09/devpartner-studio-10.html</guid>
      <description>My previous rant about DevPartner Studio (and especially the BoundsChecker portion of it) resulted in several emails from guys on the development team and a call from product owner at MicroFocus. They pointed me towards the latest &amp;lsquo;web sync&amp;rsquo; (service pack) which was released shortly after my rant, explained how the issues I&amp;rsquo;d noticed had made it through testing and why they existed and commiserated with me over the state of support.</description>
    </item>
    
    <item>
      <title>Practical Testing: 29 - Fixing the timer wheel</title>
      <link>https://lenholgate.com/blog/2010/09/practical-testing-29---fixing-the-timer-wheel.html</link>
      <pubDate>Thu, 09 Sep 2010 08:41:33 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2010/09/practical-testing-29---fixing-the-timer-wheel.html</guid>
      <description>Previously on &amp;ldquo;Practical Testing&amp;rdquo;&amp;hellip; I&amp;rsquo;m writing a timer wheel which matches the interface used by my timer queue. This new implementation is designed for a particular usage scenario with the intention of trading space for speed and improving performance of some reliable UDP code. The last entry completed the development of the timer wheel. This time we fix a couple of the bugs that I&amp;rsquo;ve discovered since I started to integrate the code with the system that it was developed for.</description>
    </item>
    
    <item>
      <title>DevPartner Studio 10 - unmanaged disappointments</title>
      <link>https://lenholgate.com/blog/2010/08/devpartner-studio-10---unmanaged-disappointments.html</link>
      <pubDate>Sun, 15 Aug 2010 11:06:21 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2010/08/devpartner-studio-10---unmanaged-disappointments.html</guid>
      <description>The story so far, I&amp;rsquo;ve owned DevPartner Studio for several years and been on a support contract the whole time. The support situation went a bit flaky when Compuware sold the product to Micro Focus, I expect that either I&amp;rsquo;m simply not a big enough client for them to care or their post sales and support is just no where near as good as the Compuware offering. With Compuware I&amp;rsquo;d be contacted when new versions came out and I had a named sales contact that I could also use for questions, etc.</description>
    </item>
    
    <item>
      <title>More thoughts on invasive/intrusive containers and STL allocators</title>
      <link>https://lenholgate.com/blog/2010/08/more-thoughts-on-invasiveintrusive-containers-and-stl-allocators.html</link>
      <pubDate>Thu, 05 Aug 2010 16:09:54 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2010/08/more-thoughts-on-invasiveintrusive-containers-and-stl-allocators.html</guid>
      <description>I&amp;rsquo;m still considering my options with regards to intrusive containers to replace the STL maps that I&amp;rsquo;m using in my timer queue implementation. I think I may be able to use the boost::intrusive sets in place of a true map in most of the situations that I need (I just have convince myself that a) it will work with all the compilers that I need to support, b) that adding a dependency to part of boost is a good idea for me and my clients and c) that even though my gut reaction on seeing the code is that it&amp;rsquo;s pointlessly clever and bound to be a bitch to debug it&amp;rsquo;s probably better than rolling my own).</description>
    </item>
    
    <item>
      <title>CLR Hosting - A flexible, managed plugin system, part 2</title>
      <link>https://lenholgate.com/blog/2010/08/clr-hosting---a-flexible-managed-plugin-system-part-2.html</link>
      <pubDate>Thu, 05 Aug 2010 10:36:50 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2010/08/clr-hosting---a-flexible-managed-plugin-system-part-2.html</guid>
      <description>Last time I explained how the managed side of my flexible hosting server architecture was structured. I dealt with the IDL required to generate the COM interfaces which were used to communicate between unmanaged code and managed code and detailed how the custom AppDomainManager object allowed me to load and execute managed code in such a way that it was easy to update the managed applications whilst the server was running.</description>
    </item>
    
    <item>
      <title>Useful Visual Studio retirement matrix</title>
      <link>https://lenholgate.com/blog/2010/08/useful-visual-studio-retirement-matrix.html</link>
      <pubDate>Thu, 05 Aug 2010 08:26:53 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2010/08/useful-visual-studio-retirement-matrix.html</guid>
      <description>Here&amp;rsquo;s a useful matrix which shows when each version of Visual Studio will become unsupported by Microsoft. I&amp;rsquo;m posting the link here as I&amp;rsquo;m sure I&amp;rsquo;ll not be able to find it the next time I need it&amp;hellip;</description>
    </item>
    
    <item>
      <title>Practical Testing: 28 - Finishing the timer wheel</title>
      <link>https://lenholgate.com/blog/2010/08/practical-testing-28---finishing-the-timer-wheel.html</link>
      <pubDate>Wed, 04 Aug 2010 12:54:16 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2010/08/practical-testing-28---finishing-the-timer-wheel.html</guid>
      <description>Previously on &amp;ldquo;Practical Testing&amp;rdquo;&amp;hellip; I&amp;rsquo;m writing a timer wheel which matches the interface used by my timer queue. This new implementation is designed for a particular usage scenario with the intention of trading space for speed and improving performance of some reliable UDP code.
Over the last four entries I&amp;rsquo;ve implemented various parts of the timer wheel and adjusted the test code so that I could reuse the tests that I already had for the other implementations with my timer wheel.</description>
    </item>
    
    <item>
      <title>Invasive containers</title>
      <link>https://lenholgate.com/blog/2010/08/invasive-containers.html</link>
      <pubDate>Wed, 04 Aug 2010 09:28:08 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2010/08/invasive-containers.html</guid>
      <description>Rather than immediately dive into the fun of writing my own invasive alternative for std::map I decided to take a look at what has been done before, as expected boost contains something that might work in the shape of the &amp;ldquo;intrusive containers library&amp;rdquo;.
Of course, being part of boost I first have to work out exactly how much more of boost it will require me to depend on and then I have to work out how I can use it to replace my current std::map usage.</description>
    </item>
    
    <item>
      <title>STL allocators, hmm...</title>
      <link>https://lenholgate.com/blog/2010/08/stl-allocators-hmm.html</link>
      <pubDate>Wed, 04 Aug 2010 07:17:15 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2010/08/stl-allocators-hmm.html</guid>
      <description>As I mentioned a while ago, I have some code which needs to perform better than it currently does and one of the areas that could be improved upon is the amount of contention for the heap that&amp;rsquo;s occurring. The fact that I&amp;rsquo;m using an STL map for my collection means that the class has a &amp;lsquo;big C&amp;rsquo; contention value of C(n threads using the heap) rather than C(n threads using the object).</description>
    </item>
    
    <item>
      <title>Practical Testing: 27 - Fixing things...</title>
      <link>https://lenholgate.com/blog/2010/08/practical-testing-27---fixing-things.html</link>
      <pubDate>Tue, 03 Aug 2010 17:53:50 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2010/08/practical-testing-27---fixing-things.html</guid>
      <description>Previously on &amp;ldquo;Practical Testing&amp;rdquo;&amp;hellip; To deal with some specific usage scenarios of a piece of general purpose code I&amp;rsquo;m in the process of implementing a timer wheel that matches the interface to the timer queue that I previously developed in this series of articles. Last time I left myself with a failing test. The problem is that setting a new timer on the timer wheel sets a timer that&amp;rsquo;s relative to the time that timer wheel thinks is &amp;rsquo;now&amp;rsquo; and the timer wheel&amp;rsquo;s view of the current time could be slightly behind reality; see the previous entry for a diagram that explains the problem.</description>
    </item>
    
    <item>
      <title>.Net 4.0 different AppDomain managers for different AppDomains</title>
      <link>https://lenholgate.com/blog/2010/08/net-40-different-appdomain-managers-for-different-appdomains.html</link>
      <pubDate>Tue, 03 Aug 2010 10:47:41 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2010/08/net-40-different-appdomain-managers-for-different-appdomains.html</guid>
      <description>Whilst looking through the latest documentation for the AppDomainSetup class I see that you can now specify a new AppDomainManager object for each application domain that you create. This removes the duality of the pre 4.0 AppDomainManager as the manager that you specify when you start the CLR can now deal solely with the requirements of the default application domain and it can set a new AppDomainManager object for each application domain that it creates.</description>
    </item>
    
    <item>
      <title>CLR Hosting - A flexible, managed plugin system, part 1</title>
      <link>https://lenholgate.com/blog/2010/07/clr-hosting---a-flexible-managed-plugin-system-part-1.html</link>
      <pubDate>Thu, 29 Jul 2010 18:27:03 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2010/07/clr-hosting---a-flexible-managed-plugin-system-part-1.html</guid>
      <description>I&amp;rsquo;m working on some prototype code right now to improve the &amp;ldquo;deployment characteristics&amp;rdquo; of a socket server that I wrote for a client which uses CLR hosting to provide multiple managed applications within a single unmanaged host. The client wants to be able to start, stop and restart individual managed applications within the server so that during development or when a managed application is updated they don&amp;rsquo;t need to restart the whole unmanaged server process to use a new version of a managed application.</description>
    </item>
    
    <item>
      <title>CLR Hosting - .Net 4.0, .Net 2.0, take your pick</title>
      <link>https://lenholgate.com/blog/2010/07/clr-hosting---net-40-net-20-take-your-pick.html</link>
      <pubDate>Tue, 27 Jul 2010 12:58:48 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2010/07/clr-hosting---net-40-net-20-take-your-pick.html</guid>
      <description>I&amp;rsquo;ve recently been adjusting my CLR hosting code as a client wanted to be able to host the .Net 4.0 runtime. Previously they were hosting the 2.0 runtime and, as I mentioned a while back, the hosting API has changed with 4.0.
Switching to hosting 4.0 was easy enough but being able to fall back to hosting 2.0 on a machine where 4.0 wasn&amp;rsquo;t installed is slightly more complex. It&amp;rsquo;s reasonably obvious (you need to make sure that you call GetProcAddress() to bind to CLRCreateInstance() rather than linking to it at build time), but Brad Wilson has a nice list of steps to show how it&amp;rsquo;s done here on his blog.</description>
    </item>
    
    <item>
      <title>Tool lag</title>
      <link>https://lenholgate.com/blog/2010/07/tool-lag.html</link>
      <pubDate>Tue, 27 Jul 2010 11:02:06 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2010/07/tool-lag.html</guid>
      <description>One of the problems of having a collection of tools that interoperate is that there&amp;rsquo;s often a lag between when a tool will interoperate with the latest version of another tool. I&amp;rsquo;m hardly a bleeding-edge tool junky, I wait until RTM before I start using the latest Visual Studio on a daily basis, and in the case of VC 6 I stuck with it (as did most of my clients) until VS2005 came out and actually improved life for unmanaged C++ development&amp;hellip; However, it seems that some tools take a long long time to catch up with Visual Studio.</description>
    </item>
    
    <item>
      <title>Practical Testing: 26 - More functionality, more refactoring and a new bug</title>
      <link>https://lenholgate.com/blog/2010/07/practical-testing-26---more-functionality-more-refactoring-and-a-new-bug.html</link>
      <pubDate>Fri, 23 Jul 2010 09:56:01 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2010/07/practical-testing-26---more-functionality-more-refactoring-and-a-new-bug.html</guid>
      <description>Previously on &amp;ldquo;Practical Testing&amp;rdquo;&amp;hellip; To deal with some specific usage scenarios of a piece of general purpose code I&amp;rsquo;m in the process of implementing a timer wheel that matches the interface to the timer queue that I previously developed in this series of articles. The timer wheel trades space for speed and so far the development has gone well as I&amp;rsquo;ve been able to use the tests that I had already developed for the previous implementations to guide the new development.</description>
    </item>
    
    <item>
      <title>Amusing bug in GetTempPath()</title>
      <link>https://lenholgate.com/blog/2010/07/amusing-bug-in-gettemppath.html</link>
      <pubDate>Thu, 22 Jul 2010 10:14:12 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2010/07/amusing-bug-in-gettemppath.html</guid>
      <description>Yesterday I had a bug report from a client who had a user that was getting an exception report from their software which simply said &amp;ldquo;GetTempPath() - Failed to get temp path&amp;rdquo;. Now as error messages go this isn&amp;rsquo;t the best but it comes from some code that has been in my tools libraries for around 10 years and which has never failed before, it has no tests, we&amp;rsquo;re probably lucky that the message didn&amp;rsquo;t just read &amp;ldquo;TODO&amp;rdquo; as I&amp;rsquo;m pretty sure that it&amp;rsquo;s the first time that anyone has ever seen it apart from by reading my source code or running strings on an exe that includes my source code&amp;hellip; Anyway&amp;hellip;</description>
    </item>
    
    <item>
      <title>Practical Testing: 25 - Nothing is free</title>
      <link>https://lenholgate.com/blog/2010/07/practical-testing-25---nothing-is-free.html</link>
      <pubDate>Wed, 21 Jul 2010 14:13:57 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2010/07/practical-testing-25---nothing-is-free.html</guid>
      <description>I&amp;rsquo;m in the process of implementing a timer wheel that matches the interface to the timer queue that I previously developed in this series of articles. The idea being that for certain specific usage scenarios the timer wheel will perform better than the timer queues. Last time I refactored the tests that I was using for the timer queues to remove duplication and I now have a set of failing tests for the new timer wheel.</description>
    </item>
    
    <item>
      <title>Practical Testing: 24 - Removing test duplication</title>
      <link>https://lenholgate.com/blog/2010/07/practical-testing-24---removing-test-duplication.html</link>
      <pubDate>Tue, 20 Jul 2010 14:53:18 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2010/07/practical-testing-24---removing-test-duplication.html</guid>
      <description>The most recent articles in the &amp;ldquo;Practical Testing&amp;rdquo; series have been discussing the performance of the timer queue that we have built. Once I had got some new, optional, performance tests in place to measure what we were trying to improve I eventually came up with a new approach and began to implement a timer wheel that conforms to the interface used by the other implementations of my timer queue. Whilst doing this it became obvious that there was duplication in my test code and so the tests have been refactored to remove the duplication of the test code between CCallbackTimerQueue and CCallbackTimerQueueEx and, in addition, to create a full suite of tests for the new CCallbackTimerWheel class.</description>
    </item>
    
    <item>
      <title>Practical Testing: 23 - Another new approach: timer wheels</title>
      <link>https://lenholgate.com/blog/2010/07/practical-testing-23---another-new-approach-timer-wheels.html</link>
      <pubDate>Mon, 19 Jul 2010 09:01:18 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2010/07/practical-testing-23---another-new-approach-timer-wheels.html</guid>
      <description>The most recent articles in the &amp;ldquo;Practical Testing&amp;rdquo; series have been discussing the performance of the timer queue that we have built. As I hinted when I first brought up the performance issues, the particular use case that I have which is causing problems might well be more efficiently dealt with using a different (more specialised and less general purpose) design.
The timer queue has adequate performance for general purpose use and can handle timers set within a range of 0ms to 49.</description>
    </item>
    
    <item>
      <title>More thoughts on Big C</title>
      <link>https://lenholgate.com/blog/2010/07/more-thoughts-on-big-c.html</link>
      <pubDate>Sat, 17 Jul 2010 07:21:21 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2010/07/more-thoughts-on-big-c.html</guid>
      <description>I&amp;rsquo;m finding that the thread contention notation that I made up the other day to help me talk about the performance implications of the changes I was making is pretty useful. The definition needs adjusting slightly though&amp;hellip;
For a given lock the worst case contention is C. For an operation involving a single lock where t threads exist during the lifetime of the process and n threads access the lock the contention for the lock can be expressed as being C(n).</description>
    </item>
    
    <item>
      <title>Practical Testing: 22 - Performance: Some you win...</title>
      <link>https://lenholgate.com/blog/2010/07/practical-testing-22---performance-some-you-win.html</link>
      <pubDate>Thu, 15 Jul 2010 21:29:23 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2010/07/practical-testing-22---performance-some-you-win.html</guid>
      <description>The previous article in the &amp;ldquo;Practical Testing&amp;rdquo; series set things up so that we can measure the performance of the code under test with the intention of trying to improve performance for a specific set of use case scenarios. This time around I&amp;rsquo;ll make a few changes which I hope will improve the performance and measure the effects of the changes with the performance tests that I added last time.</description>
    </item>
    
    <item>
      <title>Practical Testing: 21 - Looking at Performance and finding a leak</title>
      <link>https://lenholgate.com/blog/2010/07/practical-testing-21---looking-at-performance-and-finding-a-leak.html</link>
      <pubDate>Thu, 15 Jul 2010 11:43:37 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2010/07/practical-testing-21---looking-at-performance-and-finding-a-leak.html</guid>
      <description>Back in 2004, I wrote a series of articles called &amp;ldquo;Practical Testing&amp;rdquo; where I took a piece of complicated multi-threaded code and wrote tests for it. I then rebuild the code from scratch in a test driven development style to show how writing your tests before your code changes how you design your code. Since the original articles there have been several bug fixes and redesigns all of which have been supported by the original unit tests and many of which have led to the development of more tests.</description>
    </item>
    
    <item>
      <title>STLPORT 5.2.1 AND VS2010 AND X64</title>
      <link>https://lenholgate.com/blog/2010/07/stlport-521-and-vs2010-and-x64.html</link>
      <pubDate>Tue, 06 Jul 2010 09:05:21 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2010/07/stlport-521-and-vs2010-and-x64.html</guid>
      <description>I have been updating some client code to VS2010 and they use STLPort for the STL as it has better performance in multi-threaded situations than the version that comes with Visual Studio (see here). This has meant that I&amp;rsquo;ve needed to build STLPort 5.2.1 with VS2010 for x86 and x64. As with my previous builds of STLPort the compiler isn&amp;rsquo;t currently officially supported so I had to hack my installation to get it all to build, etc.</description>
    </item>
    
    <item>
      <title>Step over library code when debugging C&#43;&#43; in Visual Studio</title>
      <link>https://lenholgate.com/blog/2010/07/step-over-library-code-when-debugging-c-in-visual-studio.html</link>
      <pubDate>Fri, 02 Jul 2010 10:24:09 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2010/07/step-over-library-code-when-debugging-c-in-visual-studio.html</guid>
      <description>This is a handy tip from Jim Beveridge. It shows you how to add to the list of native function calls that the debugger steps over rather than into when you&amp;rsquo;re debugging in various flavours of Visual Studio.
I wonder if the debugger picks up changes to the registry key whilst VS is running, if so there&amp;rsquo;s scope to build a little add-in that lets you add to the list from within VS&amp;hellip;</description>
    </item>
    
    <item>
      <title>Performance comparisons for recent code changes</title>
      <link>https://lenholgate.com/blog/2010/05/performance-comparisons-for-recent-code-changes.html</link>
      <pubDate>Mon, 17 May 2010 17:56:02 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2010/05/performance-comparisons-for-recent-code-changes.html</guid>
      <description>As I mentioned yesterday, I&amp;rsquo;ve been doing some performance testing using the command line interface to perfmon to record the results. Today I automated the stuff I was playing with over the weekend and ended up with a script that can set up a perf log trace, install a particular build of a service, run a test from a remote client machine (using winrs) and then stop and remove the perf log and the service.</description>
    </item>
    
    <item>
      <title>IOCP performance tweaks and repeatable perf logging</title>
      <link>https://lenholgate.com/blog/2010/05/iocp-performance-tweaks-and-repeatable-perf-logging.html</link>
      <pubDate>Sun, 16 May 2010 19:20:49 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2010/05/iocp-performance-tweaks-and-repeatable-perf-logging.html</guid>
      <description>Whilst profiling my new low contention buffer allocator in a &amp;lsquo;real world&amp;rsquo; situation recently I spent quite a lot of time trying to work out what I was looking for and when it should happen. Since the allocator improves performance by reducing lock contention it only shines when there IS lock contention. I added some more monitoring to the existing buffer allocator so that it can give an indication of when it&amp;rsquo;s going to block during an allocation or release operation (by using TryEnterCriticalSection() followed by a monitoring notification and then an EnterCriticalSection() when the try has failed).</description>
    </item>
    
    <item>
      <title>More performance testing</title>
      <link>https://lenholgate.com/blog/2010/05/more-performance-testing.html</link>
      <pubDate>Tue, 11 May 2010 11:57:23 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2010/05/more-performance-testing.html</guid>
      <description>I&amp;rsquo;m continuing to help my performance obsessed client squeeze more out of his server. As always we&amp;rsquo;ve been using perfmon to view the server&amp;rsquo;s performance counters and since we were investigating CPU spikes we were interested in the thread activity counters that the server exposed.
The various perfmon enabled example servers that ship with The Server Framework have always exposed counters that show the number of active and processing threads from various thread pools.</description>
    </item>
    
    <item>
      <title>New UDP Server examples</title>
      <link>https://lenholgate.com/blog/2010/04/new-udp-server-examples.html</link>
      <pubDate>Wed, 28 Apr 2010 10:37:11 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2010/04/new-udp-server-examples.html</guid>
      <description>The new release of the licensed, high performance, I/O completion port, server framework includes lots of new example clients and servers; the framework now comes with 74 fully working example that showcase various aspects of the framework.
Since the UDP side of the framework has undergone a lot of work recently to support filtering and in preparation for the release of several reliable UDP protocols there are lots of new UDP server examples.</description>
    </item>
    
    <item>
      <title>Things I hate about Visual Studio 2010 - part 1</title>
      <link>https://lenholgate.com/blog/2010/04/things-i-hate-about-visual-studio-2010---part-1.html</link>
      <pubDate>Thu, 22 Apr 2010 17:42:38 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2010/04/things-i-hate-about-visual-studio-2010---part-1.html</guid>
      <description>So far I&amp;rsquo;ve found Visual Studio 2010 quite a compelling upgrade from Visual Studio 2008 for native C++ development. Intellisense is better, the build experience seems smoother and faster, editing on a decent development box seems OK, the various profiling and concurrency tools look interesting and, well, it mostly works quite nicely.
It&amp;rsquo;s a pity that there are some rough edges. I&amp;rsquo;ve been seeing crashes when I update project and solution files whilst it has them open (a common thing to do if you&amp;rsquo;re working with source control).</description>
    </item>
    
    <item>
      <title>The design implications of FILE_SKIP_COMPLETION_PORT_ON_SUCCESS and the Vista overlapped I/O change</title>
      <link>https://lenholgate.com/blog/2010/04/the-design-implications-of-file-skip-completion-port-on-success-and-the-vista-overlapped-io-change.html</link>
      <pubDate>Mon, 19 Apr 2010 18:27:34 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2010/04/the-design-implications-of-file-skip-completion-port-on-success-and-the-vista-overlapped-io-change.html</guid>
      <description>The latest release of The Server Framework gives you the option of building with FILE_SKIP_COMPLETION_PORT_ON_SUCCESS enabled for various parts of the framework. You can enable it for stream and datagram sockets independently and also for the async file reader and writer classes. This option potentially improves performance by allowing overlapped I/O that completes straight away to be handled by the thread that issued the I/O request rather than by a thread that is servicing the I/O Completion Port that the socket or file handle concerned is associated with.</description>
    </item>
    
    <item>
      <title>Lock free or many locks?</title>
      <link>https://lenholgate.com/blog/2010/04/lock-free-or-many-locks.html</link>
      <pubDate>Mon, 19 Apr 2010 16:14:05 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2010/04/lock-free-or-many-locks.html</guid>
      <description>I&amp;rsquo;ve been working on some performance tuning for a client of mine recently and whilst much of the tuning has been specific to the details of the their particular server design, eventually I can always get to the point where there are some improvements that can be done to the framework itself. It&amp;rsquo;s nice to have a &amp;ldquo;real world&amp;rdquo; performance tuning scenario as I find that tuning example servers can be pointless as the example may not match a real world scenario.</description>
    </item>
    
    <item>
      <title>Bug fix for viewing performance counters remotely</title>
      <link>https://lenholgate.com/blog/2010/04/bug-fix-for-viewing-performance-counters-remotely.html</link>
      <pubDate>Fri, 02 Apr 2010 18:09:53 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2010/04/bug-fix-for-viewing-performance-counters-remotely.html</guid>
      <description>There are two bugs in the Performance Counter library and example servers that mean that performance counters built with the library and following the examples shown in the example servers will fail to work correctly when viewed remotely from another machine. What&amp;rsquo;s more the remote instance of perfmon will fail to display any counters from the machine with the broken performance counters installed.
The first problem is that the code that checks to see that the process that has loaded the counter dll has the correct privileges to be able to connect to the shared memory segment that is used to communicate between the service and the counters is broken when it&amp;rsquo;s called from within svchost.</description>
    </item>
    
    <item>
      <title>JetByte News: Ongoing development projects for our Industrial Control client</title>
      <link>https://lenholgate.com/news/2010/04/ongoing-development-projects-for-our-industrial-control-client.html</link>
      <pubDate>Thu, 01 Apr 2010 12:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/news/2010/04/ongoing-development-projects-for-our-industrial-control-client.html</guid>
      <description>Our Industrial Control Client has engaged us to continue with several pieces of work for them on an ongoing basis.</description>
    </item>
    
    <item>
      <title>The joy of hacking</title>
      <link>https://lenholgate.com/blog/2010/03/the-joy-of-hacking.html</link>
      <pubDate>Tue, 23 Mar 2010 22:05:54 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2010/03/the-joy-of-hacking.html</guid>
      <description>Today I had a day which I knew from the start would be broken up due to pre-arranged calls and meetings out of the office, and so I decided to deal with a few low importance items on my &amp;ldquo;todo&amp;rdquo; list. One of them was to do a proof of concept for a new tool that I might work on. I had a thoroughly enjoyable time hacking an old tool into shape so that I could use some of the technology in the new tool.</description>
    </item>
    
    <item>
      <title>Latest release of licensed socket server code: 6.2</title>
      <link>https://lenholgate.com/blog/2010/03/latest-release-of-licensed-socket-server-code-62.html</link>
      <pubDate>Fri, 12 Mar 2010 18:15:09 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2010/03/latest-release-of-licensed-socket-server-code-62.html</guid>
      <description>The latest release of The Server Framework is now available. This release includes the following changes.
The following changes were made to the libraries.
Admin Library - 6.2
We now support Visual Studio 2010. At present the code has only been tested with the beta and release candidate versions.
New build configuration options. All of these are enabled by defining the option to 1 in Config.h and disabled by defining them to 0; the default state if you do not do anything in Config.</description>
    </item>
    
    <item>
      <title>Speeding up C&#43;&#43; builds</title>
      <link>https://lenholgate.com/blog/2010/03/speeding-up-c-builds.html</link>
      <pubDate>Mon, 01 Mar 2010 11:49:37 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2010/03/speeding-up-c-builds.html</guid>
      <description>I stumbled on an idea for speeding up C++ builds the other day and it&amp;rsquo;s not something that I&amp;rsquo;ve considered before and it really does offer a considerable speed up so I think it may be worth considering in some situations. It has downsides which make it harder to use with my default style of code structuring but the increase in build speed is tempting&amp;hellip;
The idea is that of &amp;ldquo;Unity builds&amp;rdquo; which I discovered from an answer by Christoph Heindl on Stack Overflow about how to speed up Visual Studio builds.</description>
    </item>
    
    <item>
      <title>L&#39;Hexapod: Delays...</title>
      <link>https://lenholgate.com/blog/2010/02/delays.html</link>
      <pubDate>Tue, 16 Feb 2010 00:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2010/02/delays.html</guid>
      <description>Previously publishedThis article was previously published on lhexapod.com as part of my journey of discovery into robotics and embedded assembly programming. A full index of these articles can be found here.
I&amp;rsquo;ve been very busy with other things just recently and so I haven&amp;rsquo;t been able to spend much time on this project. Work has been busy as I&amp;rsquo;m working towards a new release of my code and my son Scott was born on 25th January.</description>
    </item>
    
    <item>
      <title>Happy Zeroth birthday Scott Holgate!</title>
      <link>https://lenholgate.com/blog/2010/01/happy-zeroth-birthday-scott-holgate.html</link>
      <pubDate>Mon, 25 Jan 2010 07:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2010/01/happy-zeroth-birthday-scott-holgate.html</guid>
      <description>My baby son Scott was born today, Jan 25th 2010, at 1.58am. He weighed 6lb 15oz and both he and his wonderful mother are doing fine.</description>
    </item>
    
    <item>
      <title>Performance improvements in the Socket Server Framework</title>
      <link>https://lenholgate.com/blog/2010/01/performance-improvements-in-the-socket-server-framework.html</link>
      <pubDate>Thu, 14 Jan 2010 12:19:25 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2010/01/performance-improvements-in-the-socket-server-framework.html</guid>
      <description>I&amp;rsquo;m just finishing a batch of work that will be included in the 6.2 release of my IOCP based, high performance windows client and server framework and which improves the performance of the framework. There are two main improvements; the first is that the filtering API is now completely optional. There are now filtering and non-filtering base classes so that you only need to include filtering support if you need it.</description>
    </item>
    
    <item>
      <title>FILE_SKIP_COMPLETION_PORT_ON_SUCCESS and datagram socket read errors</title>
      <link>https://lenholgate.com/blog/2010/01/file-skip-completion-port-on-success-and-datagram-socket-read-errors.html</link>
      <pubDate>Wed, 06 Jan 2010 12:45:41 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2010/01/file-skip-completion-port-on-success-and-datagram-socket-read-errors.html</guid>
      <description>As I mentioned a while back I&amp;rsquo;ve been looking at incorporating some simple performance gains in the framework by following the advice given over at the Windows Server Performance Team Blog. Specifically the advice from part three of the &amp;ldquo;Designing Applications for High Performance&amp;rdquo; series of postings.
Whilst I&amp;rsquo;d done some quick and dirty tests with the FILE_SKIP_COMPLETION_PORT_ON_SUCCESS flag of SetFileCompletionNotificationModes() and all looked good I&amp;rsquo;m now working my way through my unit tests and adjusting them to work both when this option is enabled and when it&amp;rsquo;s not (completion dispatch changes somewhat when it&amp;rsquo;s enabled and my tests are invasive enough to notice this).</description>
    </item>
    
    <item>
      <title>L&#39;Hexapod: Bug in v7.0 of the servo controller firmware</title>
      <link>https://lenholgate.com/blog/2010/01/bug-in-v70-of-the-servo-controller-firmware.html</link>
      <pubDate>Sun, 03 Jan 2010 00:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2010/01/bug-in-v70-of-the-servo-controller-firmware.html</guid>
      <description>Previously publishedThis article was previously published on lhexapod.com as part of my journey of discovery into robotics and embedded assembly programming. A full index of these articles can be found here.
The simple servo sequencer that I&amp;rsquo;ve been working on has exposed a bug in the servo controller firmware. The bug is due to stack corruption during movement completion notifications, so it only happens if you use the &amp;lsquo;multi-move&amp;rsquo; commands or the delay move command.</description>
    </item>
    
    <item>
      <title>L&#39;Hexapod: Where are we?</title>
      <link>https://lenholgate.com/blog/2010/01/where-are-we.html</link>
      <pubDate>Sat, 02 Jan 2010 00:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2010/01/where-are-we.html</guid>
      <description>Previously publishedThis article was previously published on lhexapod.com as part of my journey of discovery into robotics and embedded assembly programming. A full index of these articles can be found here.
Once the servo controller code was feature complete I switched to looking at the hardware side of things and thinking about the next stage, the servo sequencing.
From a hardware point of view I had several things to work on.</description>
    </item>
    
    <item>
      <title>JetByte News: Ongoing development projects for our Online Gaming client</title>
      <link>https://lenholgate.com/news/2010/01/ongoing-development-projects-for-our-online-gaming-client-1.html</link>
      <pubDate>Fri, 01 Jan 2010 12:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/news/2010/01/ongoing-development-projects-for-our-online-gaming-client-1.html</guid>
      <description>Once again, our Online Gaming Client has engaged us to continue developing the C++ side of their server system for them on an ongoing basis.
This is to support new functionality and to aggressively improve existing performance.</description>
    </item>
    
    <item>
      <title>DevPartner Studio 9.1</title>
      <link>https://lenholgate.com/blog/2009/12/devpartner-studio-91.html</link>
      <pubDate>Thu, 24 Dec 2009 09:07:49 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/12/devpartner-studio-91.html</guid>
      <description>I&amp;rsquo;ve complained about DevPartner Studio enough in the past (here, here, here, etc.) that I thought I should write a positive blog posting since my recent experiences have been very positive.
Some time ago I reported a bug in the BoundsChecker part of the product which meant that it hung sometimes in multi-threaded code. I managed to get a reasonably straight forward reproduction and raised an issue with them. It took a while but this is now fixed in 9.</description>
    </item>
    
    <item>
      <title>Bug fix for obscure shutdown sequence race conditions</title>
      <link>https://lenholgate.com/blog/2009/12/bug-fix-for-obscure-shutdown-sequence-race-conditions.html</link>
      <pubDate>Wed, 23 Dec 2009 16:50:15 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/12/bug-fix-for-obscure-shutdown-sequence-race-conditions.html</guid>
      <description>Charles Dickens said it best in A Tale of Two Cities; &amp;ldquo;It was the best of times, it was the worst of times, it was the age of wisdom, it was the age of foolishness, it was the epoch of belief, it was the epoch of incredulity, it was the season of Light, it was the season of Darkness, it was the spring of hope, it was the winter of despair, we had everything before us, we had nothing before us, we were all going direct to heaven, we were all going direct the other way&amp;rdquo;.</description>
    </item>
    
    <item>
      <title>Datagram filtering</title>
      <link>https://lenholgate.com/blog/2009/12/datagram-filtering.html</link>
      <pubDate>Fri, 11 Dec 2009 18:04:02 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/12/datagram-filtering.html</guid>
      <description>The filtering API that&amp;rsquo;s built into the stream (i.e. TCP) side of the licensed framework is pretty powerful. It&amp;rsquo;s what the OpenSSL, SChannel and SSPI Negotiate filters use to transform the data as it flows into and out of your server without you needing to do anything special; it&amp;rsquo;s what the flow control filter uses to provide efficient TCP window based flow control; it&amp;rsquo;s what the compression filter uses to compress your data stream; it&amp;rsquo;s what the read timeout filter uses to provide you with asynchronous read timeouts on overlapped I/O and what the connection re-establishment filter uses to automatically reconnect if your connection goes down.</description>
    </item>
    
    <item>
      <title>L&#39;Hexapod: Sensing servo torque</title>
      <link>https://lenholgate.com/blog/2009/12/sensing-servo-torque.html</link>
      <pubDate>Mon, 07 Dec 2009 08:34:04 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/12/sensing-servo-torque.html</guid>
      <description>Previously publishedThis article was previously published on lhexapod.com as part of my journey of discovery into robotics and embedded assembly programming. A full index of these articles can be found here.
Whilst playing around with my servo controller I realised that the power used by a servo goes up considerably when it&amp;rsquo;s under heavy load (such as when it&amp;rsquo;s pressing against the table and still trying to move). I can, potentially, get an idea of this load by measuring the current that each servo is using and using this feedback somehow.</description>
    </item>
    
    <item>
      <title>L&#39;Hexapod: New soldering iron...</title>
      <link>https://lenholgate.com/blog/2009/12/new-soldering-iron.html</link>
      <pubDate>Thu, 03 Dec 2009 10:32:45 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/12/new-soldering-iron.html</guid>
      <description>Previously publishedThis article was previously published on lhexapod.com as part of my journey of discovery into robotics and embedded assembly programming. A full index of these articles can be found here.
I decided to treat myself to an early christmas present and bought a 60W temperature controlled soldering station (a ZD-916 which I got from Maplin). All I can say is WOW. Suddenly I can solder neatly rather than making a smeary mess.</description>
    </item>
    
    <item>
      <title>L&#39;Hexapod: ATMega168 64 channel servo controller with &#39;advanced&#39; servo commands</title>
      <link>https://lenholgate.com/blog/2009/11/atmega168-64-channel-servo-controller-with-advanced-servo-commands.html</link>
      <pubDate>Sun, 29 Nov 2009 19:51:15 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/11/atmega168-64-channel-servo-controller-with-advanced-servo-commands.html</guid>
      <description>Previously publishedThis article was previously published on lhexapod.com as part of my journey of discovery into robotics and embedded assembly programming. A full index of these articles can be found here.
This is the AVR Studio project and assembly language source code files for the latest version (v7.0) of my 64 channel serial servo controller.
This is the latest version of the ATMega168 version of the code which includes all of the new servo commands that I wrote about here including the multi-move command and the unit tests that I spoke of here.</description>
    </item>
    
    <item>
      <title>L&#39;Hexapod: Back to JIT testing</title>
      <link>https://lenholgate.com/blog/2009/11/back-to-jit-testing.html</link>
      <pubDate>Thu, 26 Nov 2009 12:41:16 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/11/back-to-jit-testing.html</guid>
      <description>Previously publishedThis article was previously published on lhexapod.com as part of my journey of discovery into robotics and embedded assembly programming. A full index of these articles can be found here.
The latest version of the serial servo controller is now fully operational (I&amp;rsquo;ll upload the source code shortly). There are still some bugs that I&amp;rsquo;m finding but the work I put in to getting the unit tests in place makes fixing these bugs pretty straight forward.</description>
    </item>
    
    <item>
      <title>Writing a custom Wireshark dissector plugin</title>
      <link>https://lenholgate.com/blog/2009/11/writing-a-custom-wireshark-dissector-plugin.html</link>
      <pubDate>Thu, 26 Nov 2009 12:05:06 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/11/writing-a-custom-wireshark-dissector-plugin.html</guid>
      <description>I&amp;rsquo;ve been spending a little time recently writing a custom Wireshark dissector plugin for the UDT protocol. This didn&amp;rsquo;t prove to be that difficult once I got over the initial problem of actually getting the Wireshark source to build with VS2008. My problem was that I&amp;rsquo;d found a CodeProject article which is now slightly out of date and which I followed too closely - setting up the Platform SDK version that the article stated was required.</description>
    </item>
    
    <item>
      <title>.Net 4.0 Hosting (again)</title>
      <link>https://lenholgate.com/blog/2009/11/net-40-hosting-again.html</link>
      <pubDate>Wed, 25 Nov 2009 18:04:15 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/11/net-40-hosting-again.html</guid>
      <description>As I mentioned a while back the CLR Hosting API has changed with .Net 4.0. The new API allows you much more flexibility in loading CLR runtimes and also allows you to load and run multiple different runtimes in a single process. Whilst this is useful if you need to control which runtime runs your code and indispensable if you need to host code that really requires different versions of the runtime and can&amp;rsquo;t all run in the &amp;ldquo;latest&amp;rdquo; runtime, I think the times when a user of my CLRHosting libraries will actually need this functionality will be few and far between.</description>
    </item>
    
    <item>
      <title>An overview of features of the licensed Server Framework</title>
      <link>https://lenholgate.com/blog/2009/11/an-overview-of-features-of-the-licensed-server-framework.html</link>
      <pubDate>Wed, 25 Nov 2009 12:27:07 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/11/an-overview-of-features-of-the-licensed-server-framework.html</guid>
      <description>The licensed version of my freely available I/O Completion Port based, high performance, Windows networking framework provides a whole host of features that the free code doesn&amp;rsquo;t; aside from performance improvements, bug fixes and an active support and development process. These features make writing highly scalable TCP and UDP clients and servers very easy and solve many of the problems that you would come across if you were to start from scratch, either with the Winsock API directly or using something such as boost::asio.</description>
    </item>
    
    <item>
      <title>Stream compression</title>
      <link>https://lenholgate.com/blog/2009/11/stream-compression.html</link>
      <pubDate>Tue, 17 Nov 2009 14:03:18 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/11/stream-compression.html</guid>
      <description>Compressing TCP (and reliable UDP) streams is one of the things that often comes up in discussion with clients and I&amp;rsquo;ve helped several people implement stream compression using the TCP stream filtering API that&amp;rsquo;s part of The Server Framework. The filtering API is also used to provide SSL security over a stream and for things like asynchronous read timeouts, read sequencing, flow control and automatic reconnects. It&amp;rsquo;s a flexible API and the fact that it&amp;rsquo;s pluggable means that you can pick and choose from the various filters that form part of the framework and add whichever combination you fancy.</description>
    </item>
    
    <item>
      <title>L&#39;Hexapod: Testing backwards</title>
      <link>https://lenholgate.com/blog/2009/11/testing-backwards.html</link>
      <pubDate>Mon, 16 Nov 2009 16:48:31 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/11/testing-backwards.html</guid>
      <description>Previously publishedThis article was previously published on lhexapod.com as part of my journey of discovery into robotics and embedded assembly programming. A full index of these articles can be found here.
It&amp;rsquo;s taken me almost a month but I&amp;rsquo;m finally back to working on integrating the multiple servo move command into the rest of the code. Well, the integration was done long ago, unfortunately the debugging was the bit that was taking up my time.</description>
    </item>
    
    <item>
      <title>Latest release of licensed socket server code: 6.1.1</title>
      <link>https://lenholgate.com/blog/2009/11/latest-release-of-licensed-socket-server-code-611.html</link>
      <pubDate>Mon, 16 Nov 2009 12:06:45 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/11/latest-release-of-licensed-socket-server-code-611.html</guid>
      <description>The latest release of The Server Framework is now available. This release includes the following changes.
Note that this is mainly a bug fix release.
The following changes were made to the libraries.
Admin Library - 6.1.1
New build configuration options. All of these are enabled by defining the option to 1 in Config.h and disabled by defining them to 0; the default state if you do not do anything in Config.</description>
    </item>
    
    <item>
      <title>L&#39;Hexapod: ChipHacker.com</title>
      <link>https://lenholgate.com/blog/2009/11/chiphackercom.html</link>
      <pubDate>Sun, 15 Nov 2009 10:08:16 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/11/chiphackercom.html</guid>
      <description>Previously publishedThis article was previously published on lhexapod.com as part of my journey of discovery into robotics and embedded assembly programming. A full index of these articles can be found here.
For those of you interested in the kind of thing that this blog is about you might also find ChipHacker.com useful. It&amp;rsquo;s a &amp;lsquo;stackoverflow&amp;rsquo; for embedded programming and electronics people. Hopefully it will become a useful resource!</description>
    </item>
    
    <item>
      <title>L&#39;Hexapod: Relative branch out of reach</title>
      <link>https://lenholgate.com/blog/2009/11/relative-branch-out-of-reach.html</link>
      <pubDate>Sat, 14 Nov 2009 15:09:51 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/11/relative-branch-out-of-reach.html</guid>
      <description>Previously publishedThis article was previously published on lhexapod.com as part of my journey of discovery into robotics and embedded assembly programming. A full index of these articles can be found here.
The test code for the serial command processing code for my serial servo controller is turning out to be the largest piece of assembly language that I&amp;rsquo;ve written. This means that all of a sudden I&amp;rsquo;m coming across &amp;ldquo;Relative branch out of reach&amp;rdquo; errors during the compile.</description>
    </item>
    
    <item>
      <title>Talk to the bear</title>
      <link>https://lenholgate.com/blog/2009/11/talk-to-the-bear.html</link>
      <pubDate>Thu, 05 Nov 2009 22:00:46 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/11/talk-to-the-bear.html</guid>
      <description>In the great tradition of explaining your problem to someone else as a way of fixing it yourself without their help&amp;hellip;
I&amp;rsquo;ve nailed the rotating file log 16010101 bug! The problem was to do with the fact that when there was a new log ready for use and a log message switched it to be the active log it also set the &amp;rsquo;next log time&amp;rsquo; to zero. If a time change notification came along just after this, whilst the &amp;rsquo;next log time&amp;rsquo; was zero then it created a new log due to a bug in the time change handler; a test was missing a &amp;rsquo;next log time !</description>
    </item>
    
    <item>
      <title>Bugs</title>
      <link>https://lenholgate.com/blog/2009/11/bugs.html</link>
      <pubDate>Thu, 05 Nov 2009 19:29:20 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/11/bugs.html</guid>
      <description>It&amp;rsquo;s been a bit of a week for bugs. First I had a bug report for the really rather old CodeProject socket server COM object. This allows people using VB to create a socket server that uses the free version of The Server Framework. It works well, for what it is, and has been the basis for several custom objects that various clients have needed over the years. The bug involves the &amp;lsquo;read string&amp;rsquo; functionality and either the ATL headers (specifically the narrow to wide character conversion macros) have changed since the code was originally written in 2002 in VC 6.</description>
    </item>
    
    <item>
      <title>JetByte News: Fixed-price CLR hosting project</title>
      <link>https://lenholgate.com/news/2009/11/fixed-price-clr-hosting-project.html</link>
      <pubDate>Sun, 01 Nov 2009 12:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/news/2009/11/fixed-price-clr-hosting-project.html</guid>
      <description>We&amp;rsquo;re working with VEXIS Systems Inc. again to extend the high performance pluggable server platform that we built for them back in 2008 using The Server Framework.
This time around we&amp;rsquo;re adding to the plugin system within the server so that it can host plugins written in .Net managed code. The server now hosts a instance of the CLR, using The Server Framework&amp;rsquo;s CLR Hosting Option, and we have built a managed plugin system that integrates with the existing unmanaged system so that now they can write their business logic in either unmanaged code or in a managed language such as C#.</description>
    </item>
    
    <item>
      <title>L&#39;Hexapod: Testing, Testing...</title>
      <link>https://lenholgate.com/blog/2009/10/testing-testing.html</link>
      <pubDate>Sat, 31 Oct 2009 12:53:47 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/10/testing-testing.html</guid>
      <description>Previously publishedThis article was previously published on lhexapod.com as part of my journey of discovery into robotics and embedded assembly programming. A full index of these articles can be found here.
The AVR assembly language unit tests that I spoke of last week are going well. I decided to explore the idea of unit testing by writing tests for the easier to test aspects of the serial protocol code and then, as this went well, I decided to write tests for the serial protocol code in order rather that simply jumping to write tests for the code that I know is broken.</description>
    </item>
    
    <item>
      <title>Concurrency profiling with VS2010</title>
      <link>https://lenholgate.com/blog/2009/10/concurrency-profiling-with-vs2010.html</link>
      <pubDate>Thu, 29 Oct 2009 14:18:43 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/10/concurrency-profiling-with-vs2010.html</guid>
      <description>I&amp;rsquo;m currently looking at the new concurrency profiling tools that come with Visual Studio 2010. It&amp;rsquo;s interesting and useful stuff. The tools provide what I have attempted to develop in the past by using API Hooking but it&amp;rsquo;s vastly superior in speed and functionality.
One of the big problems for me with my API Hooking concurrency tools (Deadlock detector and Lock Explorer) was that the instrumentation often caused the target process to run pretty slowly.</description>
    </item>
    
    <item>
      <title>.Net 4.0 Hosting</title>
      <link>https://lenholgate.com/blog/2009/10/net-40-hosting.html</link>
      <pubDate>Fri, 23 Oct 2009 11:38:07 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/10/net-40-hosting.html</guid>
      <description>I&amp;rsquo;ve been playing with Visual Studio 2010 Beta 2 and .Net 4.0, building code, running tests, playing with the IDE, etc. The first issue that I&amp;rsquo;ve come across with my existing codebase is that the .Net 2.0 hosting APIs (such as CorBindToRuntimeEx)are now deprecated and there&amp;rsquo;s a whole new way of hosting the CLR.
We&amp;rsquo;ve been quite successful in hosting the CLR from within our C++ servers, either to provide servers that support a mix of managed/unmanaged plugins as a pluggable high performance windows application server or to provide network protocol support in C++ (such as ENet) with &amp;lsquo;business logic&amp;rsquo; being written in managed code.</description>
    </item>
    
    <item>
      <title>L&#39;Hexapod: Repeatable Unit Testing with AVR Assembler and AVR Studio</title>
      <link>https://lenholgate.com/blog/2009/10/repeatable-unit-testing-with-avr-assembler-and-avr-studio.html</link>
      <pubDate>Thu, 22 Oct 2009 15:49:09 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/10/repeatable-unit-testing-with-avr-assembler-and-avr-studio.html</guid>
      <description>Previously publishedThis article was previously published on lhexapod.com as part of my journey of discovery into robotics and embedded assembly programming. A full index of these articles can be found here.
As I mentioned yesterday the servo controller project has got to the point where being able to unit test the code would be useful to me. In my day job as a C++ server developer I&amp;rsquo;ve been using unit tests for several years and most of the code that I write is written in a Test Driven Development style.</description>
    </item>
    
    <item>
      <title>Visual Studio 2010 Beta 2 installation failure</title>
      <link>https://lenholgate.com/blog/2009/10/visual-studio-2010-beta-2-installation-failure.html</link>
      <pubDate>Thu, 22 Oct 2009 10:45:01 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/10/visual-studio-2010-beta-2-installation-failure.html</guid>
      <description>I&amp;rsquo;ve been having problems installing VS2010 Beta 2 onto a selection of x64 VMWare machines (fully updated and service packed XP and Windows 7). In fact I was having problems installing it onto any of them. The error that I was getting was this:
[10/22/09,07:28:42] Microsoft Application Error Reporting: [2] CMsiComponent::Install() expects the setup file for Microsoft Application Error Reporting, but the file failed verification.
And whilst a google showed that others were also getting the same error it was few and far between and nobody had been given any useful advice.</description>
    </item>
    
    <item>
      <title>L&#39;Hexapod: Unit testing AVR assembly language</title>
      <link>https://lenholgate.com/blog/2009/10/unit-testing-avr-assembly-language.html</link>
      <pubDate>Wed, 21 Oct 2009 16:24:55 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/10/unit-testing-avr-assembly-language.html</guid>
      <description>Previously publishedThis article was previously published on lhexapod.com as part of my journey of discovery into robotics and embedded assembly programming. A full index of these articles can be found here.
Way back at the beginning of this journey I mentioned the fact that I&amp;rsquo;d quite like to be able to use some of the development disciplines that I use in my day job during the development of the firmware for my hexapod.</description>
    </item>
    
    <item>
      <title>L&#39;Hexapod: Integrating the multi-move command</title>
      <link>https://lenholgate.com/blog/2009/10/integrating-the-multi-move-command.html</link>
      <pubDate>Thu, 15 Oct 2009 21:26:11 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/10/integrating-the-multi-move-command.html</guid>
      <description>Previously publishedThis article was previously published on lhexapod.com as part of my journey of discovery into robotics and embedded assembly programming. A full index of these articles can be found here.
I&amp;rsquo;m in the process of integrating the stand alone code that implements my &amp;lsquo;multi-servo move&amp;rsquo; command and the rest of the controller. It&amp;rsquo;s harder than it should be, probably because I&amp;rsquo;m not experienced enough yet with assembly language not to have made some school boy errors.</description>
    </item>
    
    <item>
      <title>L&#39;Hexapod: After the servo controller</title>
      <link>https://lenholgate.com/blog/2009/10/after-the-servo-controller.html</link>
      <pubDate>Sun, 11 Oct 2009 19:47:14 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/10/after-the-servo-controller.html</guid>
      <description>Previously publishedThis article was previously published on lhexapod.com as part of my journey of discovery into robotics and embedded assembly programming. A full index of these articles can be found here.
The work on turning my excel spreadsheet into AVR assembler code which can move multiple servos to arrive at their target locations at the same time is proceeding well. I have the required code operating in a stand alone environment in the simulator and all I need to do now is merge that in with the rest of the code&amp;hellip; Once that&amp;rsquo;s done my servo controller is complete and whilst I already know that there are at least two further versions in the pipeline I expect I&amp;rsquo;ll move onto something more before working on them.</description>
    </item>
    
    <item>
      <title>L&#39;Hexapod: Moving multiple servos at once</title>
      <link>https://lenholgate.com/blog/2009/10/moving-multiple-servos-at-once.html</link>
      <pubDate>Wed, 07 Oct 2009 12:42:57 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/10/moving-multiple-servos-at-once.html</guid>
      <description>Previously publishedThis article was previously published on lhexapod.com as part of my journey of discovery into robotics and embedded assembly programming. A full index of these articles can be found here.
The final command for my serial servo controller is the most complex. The idea behind it is that with a hexapod leg you will want to be able to move the leg to a new position where the new position requires all three of the servos that manage the leg to move to potentially new locations.</description>
    </item>
    
    <item>
      <title>L&#39;Hexapod: Almost there....</title>
      <link>https://lenholgate.com/blog/2009/10/almost-there.html</link>
      <pubDate>Mon, 05 Oct 2009 22:13:06 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/10/almost-there.html</guid>
      <description>Previously publishedThis article was previously published on lhexapod.com as part of my journey of discovery into robotics and embedded assembly programming. A full index of these articles can be found here.
Work on the latest version of the serial servo controller is going well. I&amp;rsquo;d accumulated a pile of random nice to have ideas, some of which then necessitated some other ideas, and then there was the one must have command (the one which moves several servos to new positions over time and ensures that they all arrive at their final resting places at the same time).</description>
    </item>
    
    <item>
      <title>L&#39;Hexapod: New design please...</title>
      <link>https://lenholgate.com/blog/2009/10/new-design-please.html</link>
      <pubDate>Sat, 03 Oct 2009 22:21:59 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/10/new-design-please.html</guid>
      <description>Previously publishedThis article was previously published on lhexapod.com as part of my journey of discovery into robotics and embedded assembly programming. A full index of these articles can be found here.
Having discussed my serial communication issues on AVRFreaks I&amp;rsquo;ve decided that I need a new design for the servo controller.
My current design is very successful in doing what I set out to do, which was to give priority to the PWM generation aspect of the code.</description>
    </item>
    
    <item>
      <title>L&#39;Hexapod: Flow control is the key?</title>
      <link>https://lenholgate.com/blog/2009/10/flow-control-is-the-key.html</link>
      <pubDate>Fri, 02 Oct 2009 14:59:19 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/10/flow-control-is-the-key.html</guid>
      <description>Previously publishedThis article was previously published on lhexapod.com as part of my journey of discovery into robotics and embedded assembly programming. A full index of these articles can be found here.
I posted a question about my serial communications issues over on AVRFreaks and so far the answers have been pointing in the direction of including some form of formalised flow control. This makes sense. I&amp;rsquo;ve yet to decide if hardware flow control in a RTS/CTS form or software flow control such as Xon/Xoff would be best&amp;hellip;</description>
    </item>
    
    <item>
      <title>L&#39;Hexapod: Serial communications issues</title>
      <link>https://lenholgate.com/blog/2009/10/serial-communications-issues.html</link>
      <pubDate>Fri, 02 Oct 2009 10:53:56 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/10/serial-communications-issues.html</guid>
      <description>Previously publishedThis article was previously published on lhexapod.com as part of my journey of discovery into robotics and embedded assembly programming. A full index of these articles can be found here.
I&amp;rsquo;ve just spent a while tracking down a but which ended up being in my PC based control software rather than in the serial servo controller firmware.
The symptoms of the problem were that my servo controller would suddenly to process random, poorly formed commands.</description>
    </item>
    
    <item>
      <title>The equivalent of static libraries in .Net</title>
      <link>https://lenholgate.com/blog/2009/10/the-equivalent-of-static-libraries-in-net.html</link>
      <pubDate>Thu, 01 Oct 2009 16:18:37 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/10/the-equivalent-of-static-libraries-in-net.html</guid>
      <description>I&amp;rsquo;m building my managed XLL tool in two versions, a &amp;rsquo;normal user&amp;rsquo; version and a &amp;lsquo;pro&amp;rsquo; version. The &amp;lsquo;pro&amp;rsquo; version has additional features that I don&amp;rsquo;t feel would necessarily appeal to all of my potential users; things such as easy Excel RTD server support and Asynchronous worksheet functions.
The fact that the core code is identical between the two versions has caused me a little trouble as I want to package the code in a single assembly and, although it&amp;rsquo;s all C++/CLI, I can&amp;rsquo;t work out how to build the common code in one project and link it with each of the final product projects to produce two single assemblies that both include the common code.</description>
    </item>
    
    <item>
      <title>L&#39;Hexapod: I seem to have developed something remarkably similar to the SSC 32</title>
      <link>https://lenholgate.com/blog/2009/10/i-seem-to-have-developed-something-remarkably-similar-to-the-ssc-32.html</link>
      <pubDate>Thu, 01 Oct 2009 09:45:18 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/10/i-seem-to-have-developed-something-remarkably-similar-to-the-ssc-32.html</guid>
      <description>Previously publishedThis article was previously published on lhexapod.com as part of my journey of discovery into robotics and embedded assembly programming. A full index of these articles can be found here.
I was looking for information to help me decide which servos to buy for the legs; wondering about torque and cost and whatever when I followed a link to the Lynxmotion site and came across the documentation for their SSC 32 servo controller.</description>
    </item>
    
    <item>
      <title>L&#39;Hexapod: Storing data in the eeprom of an ATMega168</title>
      <link>https://lenholgate.com/blog/2009/09/storing-data-in-the-eeprom-of-an-atmega168.html</link>
      <pubDate>Wed, 30 Sep 2009 08:14:24 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/09/storing-data-in-the-eeprom-of-an-atmega168.html</guid>
      <description>Previously publishedThis article was previously published on lhexapod.com as part of my journey of discovery into robotics and embedded assembly programming. A full index of these articles can be found here.
Some of the new commands that I have planned for the servo controller will require that I load and save persistent settings from the ATMega&amp;rsquo;s eeprom. Having spent a little time looking at the example code in the datasheets it seems that you have to disable interrupts to safely read and write the eeprom.</description>
    </item>
    
    <item>
      <title>L&#39;Hexapod: ATMega168 64 channel servo controller</title>
      <link>https://lenholgate.com/blog/2009/09/atmega168-64-channel-servo-controller.html</link>
      <pubDate>Tue, 29 Sep 2009 09:01:16 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/09/atmega168-64-channel-servo-controller.html</guid>
      <description>Previously publishedThis article was previously published on lhexapod.com as part of my journey of discovery into robotics and embedded assembly programming. A full index of these articles can be found here.
This is the source code for the latest version of the 64 channel servo controller as detailed here.
This is an ATMega168 version of the controller that was originally developed for the ATtiny2313 but which was ported to the ATMega when I ran out of memory on the ATtiny.</description>
    </item>
    
    <item>
      <title>L&#39;Hexapod: New servo controller commands</title>
      <link>https://lenholgate.com/blog/2009/09/new-servo-controller-commands.html</link>
      <pubDate>Thu, 24 Sep 2009 16:28:38 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/09/new-servo-controller-commands.html</guid>
      <description>Previously publishedThis article was previously published on lhexapod.com as part of my journey of discovery into robotics and embedded assembly programming. A full index of these articles can be found here.
The new 64 channel ATMega168 serial servo controller accepts the following commands. All successful commands are echoed back. Parameters are validated and errors are indicated with an error response of [0xFF] [badParamIndex] [Command echo] where badParamIndex is a 1 based index of the parameters in the command and indicates which parameter failed validation.</description>
    </item>
    
    <item>
      <title>L&#39;Hexapod: Moving forward</title>
      <link>https://lenholgate.com/blog/2009/09/moving-forward.html</link>
      <pubDate>Tue, 22 Sep 2009 08:50:40 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/09/moving-forward.html</guid>
      <description>Previously publishedThis article was previously published on lhexapod.com as part of my journey of discovery into robotics and embedded assembly programming. A full index of these articles can be found here.
Due to work pressure and then holidays and then more work pressure I had to take a break from the servo controller for a couple of weeks. Most of the code changes that I had previously been discussing have been implemented and I&amp;rsquo;m now in the process of testing an ATMega168 version of the 64 channel servo controller complete with new style commands!</description>
    </item>
    
    <item>
      <title>Interesting Blog Posts on High Performance Servers</title>
      <link>https://lenholgate.com/blog/2009/09/interesting-blog-posts-on-high-performance-servers.html</link>
      <pubDate>Wed, 09 Sep 2009 09:36:14 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/09/interesting-blog-posts-on-high-performance-servers.html</guid>
      <description>There are some interesting blog posts by Rick Vicik over on the Windows Server Performance Team Blog. Most interesting for me is part three of the three part series on &amp;ldquo;Designing Applications for High Performance&amp;rdquo;. Whilst parts one and two cover some useful ideas they&amp;rsquo;re pretty general. Part three really digs into the implementation of I/O completion ports and how new API calls can help improve performance and reduce locking within the APIs themselves.</description>
    </item>
    
    <item>
      <title>Parasoft Insure&#43;&#43; vs Microfocus/Compuware DevPartner Studio</title>
      <link>https://lenholgate.com/blog/2009/09/parasoft-insure-vs-microfocuscompuware-devpartner-studio.html</link>
      <pubDate>Tue, 08 Sep 2009 15:17:26 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/09/parasoft-insure-vs-microfocuscompuware-devpartner-studio.html</guid>
      <description>Has anyone got anything to say about the relative merits of Parasoft Insure++ vs the BoundsChecker parts of the Microfocus DevPartner Studio product?
I&amp;rsquo;ve used BoundsChecker for a long time, and it has plenty of faults but the fact that all support channels seem to have vanished during the transition of the product from Compuware to MicroFocus means that I&amp;rsquo;m now considering moving to something else.
So far my impression of Insure++ isn&amp;rsquo;t being helped by the fact that the sales person seems to require a &amp;rsquo;land line&amp;rsquo; to contact me on to enable them to talk to me about how I might get something to evaluate (oh good, &amp;ldquo;enterprise&amp;rdquo; marketing) and no, my mobile number isn&amp;rsquo;t any use to them even though they&amp;rsquo;re supposed to be based in the same country as I am.</description>
    </item>
    
    <item>
      <title>Highlights of the 6.1 client/server framework release</title>
      <link>https://lenholgate.com/blog/2009/09/highlights-of-the-61-clientserver-framework-release.html</link>
      <pubDate>Mon, 07 Sep 2009 18:30:32 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/09/highlights-of-the-61-clientserver-framework-release.html</guid>
      <description>The release notes for the 6.1 release, whilst complete, don&amp;rsquo;t really highlight the key points of this release. These are as follows:
Support for SSPI Negotiate (NTLM and Kerberos) servers and clients - You can now license code which allows you to implement high performance IO Completion based asynchronous servers and clients that support &amp;ldquo;Windows Authentication&amp;rdquo; for authentication and security of data transfer. Example clients and servers are available here</description>
    </item>
    
    <item>
      <title>Latest release of licensed socket server code: 6.1</title>
      <link>https://lenholgate.com/blog/2009/09/latest-release-of-licensed-socket-server-code-61.html</link>
      <pubDate>Fri, 04 Sep 2009 23:22:31 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/09/latest-release-of-licensed-socket-server-code-61.html</guid>
      <description>The latest release of The Server Framework is now available. This release includes the following changes.
The following changes were made to the libraries.
Admin Library - 6.1
We now suppress warning 4370, &amp;rsquo;layout of class has changed from a previous version of the compiler due to better packing&amp;rsquo;, in Warnings.h.
New build configuration options. All of these are enabled by defining the option to 1 in Config.h and disabled by defining them to 0; the default state if you do not do anything in Config.</description>
    </item>
    
    <item>
      <title>A week with Windows 7</title>
      <link>https://lenholgate.com/blog/2009/09/a-week-with-windows-7.html</link>
      <pubDate>Fri, 04 Sep 2009 17:58:47 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/09/a-week-with-windows-7.html</guid>
      <description>I upgraded one of my build machines to Windows 7 almost a month ago now but I only managed to get around to doing my main developer machine at the start of this week. Apart from the fact that the Windows 7 in place upgrade failed on me, twice, and rolled back to Vista without leaving me with much information as to why it had failed (removing Compuware&amp;rsquo;s DevPartner Studio did the trick), the upgrade went pretty smoothly.</description>
    </item>
    
    <item>
      <title>Using old compilers</title>
      <link>https://lenholgate.com/blog/2009/09/using-old-compilers.html</link>
      <pubDate>Fri, 04 Sep 2009 12:12:22 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/09/using-old-compilers.html</guid>
      <description>By an interesting coincidence I happened to be searching for a few new C++ blogs to follow and I also happened to have just updated this entry about Stan Lippman&amp;rsquo;s VC6 rant (since I found a link to the original posting which had been deleted before I could comment on it back in 2005&amp;hellip;).
Anyway, back to the point, The Lone Coder asks &amp;ldquo;Why oh why do people insist on using compilers that are way out of date?</description>
    </item>
    
    <item>
      <title>Tracking down reference counting bugs</title>
      <link>https://lenholgate.com/blog/2009/09/tracking-down-reference-counting-bugs.html</link>
      <pubDate>Thu, 03 Sep 2009 13:42:31 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/09/tracking-down-reference-counting-bugs.html</guid>
      <description>The Server Framework uses reference counted data buffers and socket objects. These are passed around as part of the asynchronous I/O system in the framework and as they&amp;rsquo;re placed in queues or passed from one thread to another their reference counts are adjusted so that they are automatically cleaned up when they&amp;rsquo;re finished with; but not before.
If you&amp;rsquo;re writing a server or client using The Server Framework then you may need to manipulate these reference counts yourself; as with all reference counted objects, there are two simple rules: If you need to hold on to a reference to an object than call AddRef() on it; when you&amp;rsquo;re done with your reference call Release().</description>
    </item>
    
    <item>
      <title>Excel 2010 XLL SDK</title>
      <link>https://lenholgate.com/blog/2009/08/excel-2010-xll-sdk.html</link>
      <pubDate>Thu, 20 Aug 2009 08:21:25 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/08/excel-2010-xll-sdk.html</guid>
      <description>I&amp;rsquo;m currently looking at the Excel 2010 XLL SDK which is part of the Office 2010 Technical Preview. I&amp;rsquo;ve already built and tested my managed XLL system with Excel 2010 on x86 but I needed the new XLL SDK to be able to build for the x64 version of Excel. The SDK doesn&amp;rsquo;t ship as part of the main Office 2010 installation, you have to ask for it.
So far things look reasonably good in x86 mode.</description>
    </item>
    
    <item>
      <title>Using Wireshark to debug UDP communication issues</title>
      <link>https://lenholgate.com/blog/2009/08/using-wireshark-to-debug-udp-communication-issues.html</link>
      <pubDate>Wed, 19 Aug 2009 11:52:25 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/08/using-wireshark-to-debug-udp-communication-issues.html</guid>
      <description>A customer of mine has been having some problems with communication between a UDP server and their load test client. The UDP server implements the ENet protocol which provides for reliable data transfer over UDP. Their problem was manifesting as the client not getting some ENet level ACKs for some reliable data. The Wireshark log from the client machine showed the client resending the data when the ENet retransmission timeout expired and also showed that the ACKs for these packets never arrived.</description>
    </item>
    
    <item>
      <title>uuid.lib(unknwn_i.obj) : fatal error LNK1103: debugging information corrupt; recompile module</title>
      <link>https://lenholgate.com/blog/2009/08/uuidlibunknwn-iobj-fatal-error-lnk1103-debugging-information-corrupt-recompile-module.html</link>
      <pubDate>Tue, 11 Aug 2009 08:49:55 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/08/uuidlibunknwn-iobj-fatal-error-lnk1103-debugging-information-corrupt-recompile-module.html</guid>
      <description>Back in October 2005 some of my clients started to complain that the latest version of the Platform SDK (the April 2005 version) broke their builds. The culprit was uuid.lib which had been built with debugging information that the VC6 linker didn&amp;rsquo;t understand and which caused a link failure. The end result was that the last version of the Platform SDK that worked with VC6 was the February 2003 version. This all seemed quite unnecessary to me at the time; as if the latest Platform SDK was deliberately unusable for VC6 which had (in September 2005) just become unsupported.</description>
    </item>
    
    <item>
      <title>L&#39;Hexapod: Prototype fabrication</title>
      <link>https://lenholgate.com/blog/2009/08/prototype-fabrication.html</link>
      <pubDate>Sat, 08 Aug 2009 14:12:41 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/08/prototype-fabrication.html</guid>
      <description>Previously publishedThis article was previously published on lhexapod.com as part of my journey of discovery into robotics and embedded assembly programming. A full index of these articles can be found here.
As I mentioned back in April after I&amp;rsquo;d put together my first prototype leg, &amp;ldquo;the prototype leg has some fairly major failings from a mechanical point of view&amp;rdquo;. Ideally the real legs will be designed and cut from sheet material, either plastic or metal.</description>
    </item>
    
    <item>
      <title>Downloading Windows 7</title>
      <link>https://lenholgate.com/blog/2009/08/downloading-windows-7.html</link>
      <pubDate>Fri, 07 Aug 2009 10:53:06 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/08/downloading-windows-7.html</guid>
      <description>Since I complained about how the Microsoft File Transfer Manager sucked when I was downloading the Windows 7 Beta back in March I thought I should be balanced and point out that last night I kicked off a download of Windows 7 and the x86 and x64 SDKs and this morning they were all present and correct and that I had none of the problems that had plagued me last time.</description>
    </item>
    
    <item>
      <title>L&#39;Hexapod: And then switch to the ATMega168...</title>
      <link>https://lenholgate.com/blog/2009/08/and-then-switch-to-the-atmega168.html</link>
      <pubDate>Fri, 07 Aug 2009 08:48:26 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/08/and-then-switch-to-the-atmega168.html</guid>
      <description>Previously publishedThis article was previously published on lhexapod.com as part of my journey of discovery into robotics and embedded assembly programming. A full index of these articles can be found here.
The new functionality in my servo control takes more memory to implement due to the more complex state that we need to maintain for each servo. The simple controller could support up to 64 PWM channels on the ATTiny2313, the more advanced controller can, at the present stage of the design, support around 15.</description>
    </item>
    
    <item>
      <title>Testing blocking calls</title>
      <link>https://lenholgate.com/blog/2009/08/testing-blocking-calls.html</link>
      <pubDate>Thu, 06 Aug 2009 14:02:10 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/08/testing-blocking-calls.html</guid>
      <description>I&amp;rsquo;m developing the simple client server protocol code that I&amp;rsquo;m harvesting in a test driven manner. Although the code exists, as such, and I&amp;rsquo;m harvesting it rather than inventing it from scratch the harvesting is taking the &amp;ldquo;best&amp;rdquo; ideas from several similar implementations to create the version that will form part of the framework&amp;rsquo;s example code. As such I&amp;rsquo;m treating this just like a new development and, mostly, writing my tests first.</description>
    </item>
    
    <item>
      <title>Tracking invocations</title>
      <link>https://lenholgate.com/blog/2009/08/tracking-invocations.html</link>
      <pubDate>Thu, 06 Aug 2009 08:35:07 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/08/tracking-invocations.html</guid>
      <description>The simple client/server request/response protocol that I&amp;rsquo;m currently harvesting uses the concept of an &amp;lsquo;invocation&amp;rsquo; to tie a request to a response. An id is generated on the client and placed in the request header. The server simply copies the id from the request header to the response header and the client can then match responses to requests. This works nicely but the implementation has evolved with the protocol.
The first version used a 4 byte invocation id, allocated an instance of an invocation data class and stored the allocation address of the object as the invocation id.</description>
    </item>
    
    <item>
      <title>L&#39;Hexapod: Registers, stack usage and timing</title>
      <link>https://lenholgate.com/blog/2009/08/registers-stack-usage-and-timing.html</link>
      <pubDate>Thu, 06 Aug 2009 08:22:13 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/08/registers-stack-usage-and-timing.html</guid>
      <description>Previously publishedThis article was previously published on lhexapod.com as part of my journey of discovery into robotics and embedded assembly programming. A full index of these articles can be found here.
So far the servo controller development has been reasonably straight forward; once various design issues were considered and once I&amp;rsquo;d got my head around building the hardware and learning AVR assembly language. However I expect that my assembly code has many novice mistakes and that it&amp;rsquo;s probably not especially idiomatic.</description>
    </item>
    
    <item>
      <title>Custom client/server request/response protocols</title>
      <link>https://lenholgate.com/blog/2009/08/custom-clientserver-requestresponse-protocols.html</link>
      <pubDate>Wed, 05 Aug 2009 13:04:51 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/08/custom-clientserver-requestresponse-protocols.html</guid>
      <description>Quite often my customers use The Server Framework for both ends of their communication channels. The Server Framework has fully supported developing clients as well as servers for a long time now and although many of my customers build either servers or clients with the framework some build both. One of the things that often comes up in discussions with these customers is how to develop a custom request/response protocol for their servers and clients to communicate with.</description>
    </item>
    
    <item>
      <title>L&#39;Hexapod: Asynchronous serial responses</title>
      <link>https://lenholgate.com/blog/2009/08/asynchronous-serial-responses.html</link>
      <pubDate>Wed, 05 Aug 2009 09:36:03 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/08/asynchronous-serial-responses.html</guid>
      <description>Previously publishedThis article was previously published on lhexapod.com as part of my journey of discovery into robotics and embedded assembly programming. A full index of these articles can be found here.
Part of the new functionality that I&amp;rsquo;m developing for the serial servo controller for my hexapod robot is for the servo controller to take its time in moving a servo from where it is at the moment to where I want it to be.</description>
    </item>
    
    <item>
      <title>L&#39;Hexapod: All the problems of multi-threading without the threads</title>
      <link>https://lenholgate.com/blog/2009/08/all-the-problems-of-multi-threading-without-the-threads.html</link>
      <pubDate>Tue, 04 Aug 2009 09:54:05 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/08/all-the-problems-of-multi-threading-without-the-threads.html</guid>
      <description>Previously publishedThis article was previously published on lhexapod.com as part of my journey of discovery into robotics and embedded assembly programming. A full index of these articles can be found here.
One of the problems of moving from the simple three byte SSC style control system to a system where we can do clever things with multiple servos at once is that the data required to do these clever things is bigger than the data required to do the simple things.</description>
    </item>
    
    <item>
      <title>L&#39;Hexapod: Extending the servo controller</title>
      <link>https://lenholgate.com/blog/2009/08/extending-the-servo-controller.html</link>
      <pubDate>Mon, 03 Aug 2009 13:20:38 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/08/extending-the-servo-controller.html</guid>
      <description>Previously publishedThis article was previously published on lhexapod.com as part of my journey of discovery into robotics and embedded assembly programming. A full index of these articles can be found here.
To be able to implement the new commands for the servo controller I need to adjust the data that we use to control the servos. Right now we have a single byte per servo and that byte contains a value between 0 and 254 which represents the length of the pulse sent to the servo.</description>
    </item>
    
    <item>
      <title>L&#39;Hexapod: What&#39;s next?</title>
      <link>https://lenholgate.com/blog/2009/08/whats-next.html</link>
      <pubDate>Mon, 03 Aug 2009 09:49:05 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/08/whats-next.html</guid>
      <description>Previously publishedThis article was previously published on lhexapod.com as part of my journey of discovery into robotics and embedded assembly programming. A full index of these articles can be found here.
I now have an easy to extend PWM servo controller and the next job on my list of things to do is extend it so that it supports the functionality that I feel I need for correct control of my hexapod&amp;rsquo;s legs.</description>
    </item>
    
    <item>
      <title>L&#39;Hexapod: Tweaking the servo controller</title>
      <link>https://lenholgate.com/blog/2009/08/tweaking-the-servo-controller.html</link>
      <pubDate>Sun, 02 Aug 2009 09:15:10 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/08/tweaking-the-servo-controller.html</guid>
      <description>Previously publishedThis article was previously published on lhexapod.com as part of my journey of discovery into robotics and embedded assembly programming. A full index of these articles can be found here.
The 64 channel serial servo controller that I&amp;rsquo;ve been developing works pretty well for me but most of my development and testing was done in the AVR studio simulator. Once I actually started working with my hardware again I noticed a slight problem.</description>
    </item>
    
    <item>
      <title>L&#39;Hexapod: ATTiny2313 24 channel servo controller schematic </title>
      <link>https://lenholgate.com/blog/2009/08/attiny2313-24-channel-servo-controller-schematic.html</link>
      <pubDate>Sat, 01 Aug 2009 11:39:10 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/08/attiny2313-24-channel-servo-controller-schematic.html</guid>
      <description>Previously publishedThis article was previously published on lhexapod.com as part of my journey of discovery into robotics and embedded assembly programming. A full index of these articles can be found here.
Here is a schematic for a 24 channel version of the ATTiny2313 servo controller. You can expand the number of channels up to the full 64 by adding additional CD74HCT238Es where each additional MUX chip is connected to the next available pin on port b.</description>
    </item>
    
    <item>
      <title>L&#39;Hexapod: A timer driven PWM servo controller - part 4</title>
      <link>https://lenholgate.com/blog/2009/08/a-timer-driven-pwm-servo-controller-part-4.html</link>
      <pubDate>Sat, 01 Aug 2009 08:12:02 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/08/a-timer-driven-pwm-servo-controller-part-4.html</guid>
      <description>Previously publishedThis article was previously published on lhexapod.com as part of my journey of discovery into robotics and embedded assembly programming. A full index of these articles can be found here.
The time has finally come to put all of the code from the last three parts of this article together to form a complete serial configured, 64 channel, PWM servo controller for the ATTiny2313 and several CD74HCT238Es.</description>
    </item>
    
    <item>
      <title>L&#39;Hexapod: A timer driven PWM servo controller - part 3</title>
      <link>https://lenholgate.com/blog/2009/07/a-timer-driven-pwm-servo-controller-part-3.html</link>
      <pubDate>Thu, 30 Jul 2009 14:12:31 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/07/a-timer-driven-pwm-servo-controller-part-3.html</guid>
      <description>Previously publishedThis article was previously published on lhexapod.com as part of my journey of discovery into robotics and embedded assembly programming. A full index of these articles can be found here.
This is part three of a series of articles about the servo controller that I&amp;rsquo;m building for use in the hexapod robot that I intend to build. The first two articles in the series have presented the timer driven PWM generation code and the code used to take the configuration data that is managed by the serial port protocol and convert it into the data that is needed by the PWM generation code.</description>
    </item>
    
    <item>
      <title>L&#39;Hexapod: A timer driven PWM servo controller - part 2</title>
      <link>https://lenholgate.com/blog/2009/07/a-timer-driven-pwm-servo-controller-part-2.html</link>
      <pubDate>Wed, 29 Jul 2009 11:26:50 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/07/a-timer-driven-pwm-servo-controller-part-2.html</guid>
      <description>Previously publishedThis article was previously published on lhexapod.com as part of my journey of discovery into robotics and embedded assembly programming. A full index of these articles can be found here.
In part1 of this timer driven PWM servo controller I built some code which uses Timer1 in the ATTiny2313 to generate 64 PWM signals. The code in part 1 worked from hard-coded dummy data. The code presented here shows how we can create the data that the PWM generation code needs to run.</description>
    </item>
    
    <item>
      <title>A time and a place for comments</title>
      <link>https://lenholgate.com/blog/2009/07/a-time-and-a-place-for-comments.html</link>
      <pubDate>Tue, 28 Jul 2009 13:19:20 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/07/a-time-and-a-place-for-comments.html</guid>
      <description>I&amp;rsquo;m fairly set in my ways about the value (or lack of) of comments in C++ code. I tend to have very few comments in my code and I tend to favour names and structure over comments; names and structure compiles and doesn&amp;rsquo;t lie. Sometimes I go too far in that direction and I&amp;rsquo;m forced to fight with some of my old code and at that point I might add a comment that explains the non obvious but I&amp;rsquo;m more likely to attempt to refactor the code into something where the names and structure tell the story better.</description>
    </item>
    
    <item>
      <title>Globals are evil</title>
      <link>https://lenholgate.com/blog/2009/07/globals-are-evil.html</link>
      <pubDate>Tue, 28 Jul 2009 13:08:40 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/07/globals-are-evil.html</guid>
      <description>Jamie Fristrom over at GameDevBlog thinks that &amp;ldquo;Globals are underrated&amp;rdquo;. I disagree, and, agree with most of the comments that Noel makes; globals and their 90&amp;rsquo;s equivalent, singletons, are evil.
As anyone who has looked at the code that I present on my blog knows, I tend to favour &amp;lsquo;prarameterise from above&amp;rsquo; in my designs. That is code that doesn&amp;rsquo;t reach out to a global for something but that only works with what it has been given.</description>
    </item>
    
    <item>
      <title>L&#39;Hexapod: A timer driven PWM servo controller</title>
      <link>https://lenholgate.com/blog/2009/07/a-timer-driven-pwm-servo-controller.html</link>
      <pubDate>Tue, 28 Jul 2009 09:28:24 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/07/a-timer-driven-pwm-servo-controller.html</guid>
      <description>Previously publishedThis article was previously published on lhexapod.com as part of my journey of discovery into robotics and embedded assembly programming. A full index of these articles can be found here.
As I mentioned recently, the original servo controller firmware that I posted was flawed and wasn&amp;rsquo;t suitable to use as a base for the more complex servo control code that I want to add to the controller. The new firmware follows the design that I spoke of here and relies on the ATTiny&amp;rsquo;s 16-bit timer to generate our PWM signals.</description>
    </item>
    
    <item>
      <title>Asynchronous spreadsheet calls in a Managed XLL</title>
      <link>https://lenholgate.com/blog/2009/07/asynchronous-spreadsheet-calls-in-a-managed-xll.html</link>
      <pubDate>Thu, 23 Jul 2009 09:13:05 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/07/asynchronous-spreadsheet-calls-in-a-managed-xll.html</guid>
      <description>Once I got the simple managed Real Time Data servers working in Excel I decided it was time to add asynchronous worksheet functions. This is the last major feature on my todo list and once it&amp;rsquo;s complete I&amp;rsquo;ll be ready to start thinking about beta testing my Managed XLL product.
The idea behind asynchronous worksheet functions is that some worksheet functions may take a long time to complete and it would be better to run them in the background rather than have them block Excel&amp;rsquo;s recalculations whilst they complete.</description>
    </item>
    
    <item>
      <title>Error: Cannot pass a GCHandle across AppDomains</title>
      <link>https://lenholgate.com/blog/2009/07/error-cannot-pass-a-gchandle-across-appdomains.html</link>
      <pubDate>Mon, 13 Jul 2009 18:07:09 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/07/error-cannot-pass-a-gchandle-across-appdomains.html</guid>
      <description>I&amp;rsquo;m currently working on adding easy to use Real Time Data server support to my Managed XLL Excel Addin system. This lets you use the =RTD() functionality of Excel to push real time data into your spreadsheets without needing to understand COM and without needing to register any COM objects on your machine. You simply add some attributes to your managed code, compile your assembly and drop it in the same directory as the Managed XLL and it does the rest.</description>
    </item>
    
    <item>
      <title>L&#39;Hexapod: Redesigning the servo controller firmware</title>
      <link>https://lenholgate.com/blog/2009/07/redesigning-the-servo-controller-firmware.html</link>
      <pubDate>Mon, 06 Jul 2009 16:12:22 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/07/redesigning-the-servo-controller-firmware.html</guid>
      <description>Previously publishedThis article was previously published on lhexapod.com as part of my journey of discovery into robotics and embedded assembly programming. A full index of these articles can be found here.
As I mentioned here, there&amp;rsquo;s a fundamental design problem with the two versions of the ATTiny2313 servo controller firmware that I&amp;rsquo;ve presented so far (see the 8 channel source code and the 64 channel source code). The timing that determines the shape of the PWM signals that are generated relies on carefully crafted timing loops and the time taken by particular code sequences and this is affected by the interrupt driven serial I/O that is used to control the controller.</description>
    </item>
    
    <item>
      <title>SSPI Negotiation; NTLM and Kerberos clients and servers</title>
      <link>https://lenholgate.com/blog/2009/06/sspi-negotiation-ntlm-and-kerberos-clients-and-servers.html</link>
      <pubDate>Mon, 22 Jun 2009 21:04:37 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/06/sspi-negotiation-ntlm-and-kerberos-clients-and-servers.html</guid>
      <description>I&amp;rsquo;ve been working on a library that works in a similar way to our SChannel code and allows the use of the Microsoft &amp;ldquo;Negotiate&amp;rdquo; Security Support Provider Interface (SSPI) to provide NTLM and Kerberos support (see SPNEGO for more details). Things are going well and, in general, using Negotiate or NTLM or Kerberos is easier than using SChannel and the structure that was originally born to work with OpenSSL and then adapted for SChannel works well with the new security providers.</description>
    </item>
    
    <item>
      <title>Where&#39;s the catch(...)</title>
      <link>https://lenholgate.com/blog/2009/06/wheres-the-catch.html</link>
      <pubDate>Fri, 19 Jun 2009 10:03:28 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/06/wheres-the-catch.html</guid>
      <description>As of the next release of The Server Framework use of catch(...) handlers at thread boundaries, in &amp;rsquo;no throw&amp;rsquo; functions and in destructors will be configurable.
At present, in v6.0 and earlier of The Server Framework, we use catch(...) judiciously at thread boundaries in functions that are either marked as &amp;rsquo;no throw&amp;rsquo; (with throw()) or which are &amp;lsquo;implicitly no throw&amp;rsquo; and in some destructors. Generally these handlers let the user of the framework know about the unexpected exception via a callback.</description>
    </item>
    
    <item>
      <title>L&#39;Hexapod: Chiara hexapod</title>
      <link>https://lenholgate.com/blog/2009/06/chiara-hexapod.html</link>
      <pubDate>Wed, 17 Jun 2009 18:06:51 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/06/chiara-hexapod.html</guid>
      <description>Previously publishedThis article was previously published on lhexapod.com as part of my journey of discovery into robotics and embedded assembly programming. A full index of these articles can be found here.
This is rather nice; Chiara Robot from Carnegie Mellon University&amp;rsquo;s Tekkotsu lab (via HackedGadgets.com).</description>
    </item>
    
    <item>
      <title>Allocating page aligned buffers</title>
      <link>https://lenholgate.com/blog/2009/06/allocating-page-aligned-buffers.html</link>
      <pubDate>Sun, 14 Jun 2009 19:20:08 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/06/allocating-page-aligned-buffers.html</guid>
      <description>Back in October 2007 I briefly looked at, what seemed to be at the time, a simple change to The Server Framework so that you had the option to use buffers that were aligned to page boundaries. This could help you scale better as one of the two problems with scalability at the time was the &amp;lsquo;I/O page lock limit&amp;rsquo;; there&amp;rsquo;s a finite limit to the number of memory pages that can be locked at one time and in some circumstances data in transit via sockets is locked in memory whilst it is sent.</description>
    </item>
    
    <item>
      <title>Structured exception translation is now optional</title>
      <link>https://lenholgate.com/blog/2009/06/structured-exception-translation-is-now-optional.html</link>
      <pubDate>Sat, 13 Jun 2009 09:30:16 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/06/structured-exception-translation-is-now-optional.html</guid>
      <description>I&amp;rsquo;ve had a couple of requests from clients recently that they be able to handle any structured exceptions in The Server Framework themselves. Up until now all framework threads install a SEH translator and catch the resulting C++ exceptions in their outer catch handlers and report the error to the framework user via various mechanisms. This generally works well and, prevents exceptions going unreported but sometimes users want to integrate the framework with code that deals with uncaught structured exceptions in other ways.</description>
    </item>
    
    <item>
      <title>Why not to compile as 64 bit...</title>
      <link>https://lenholgate.com/blog/2009/06/why-not-to-compile-as-64-bit.html</link>
      <pubDate>Thu, 11 Jun 2009 14:06:55 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/06/why-not-to-compile-as-64-bit.html</guid>
      <description>Here&amp;rsquo;s a nice piece by Rico Mariani about why Visual Studio is unlikely to go 64 bit any time soon. In a nut shell, unless you have very large data sets that need to be kept in memory you might be worse off as a 64 bit process than you are as a 32 bit process on a 64 bit operating system. Food for thought.</description>
    </item>
    
    <item>
      <title>L&#39;Hexapod: Fabrication...</title>
      <link>https://lenholgate.com/blog/2009/06/fabrication.html</link>
      <pubDate>Wed, 10 Jun 2009 12:14:58 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/06/fabrication.html</guid>
      <description>Previously publishedThis article was previously published on lhexapod.com as part of my journey of discovery into robotics and embedded assembly programming. A full index of these articles can be found here.
Here are some links that may help once I move onto fabricating the various pieces required to build the hexapod&amp;rsquo;s body.
This is a simple 4 legged walking robot that was machined from an A4 piece of 4mm ply wood.</description>
    </item>
    
    <item>
      <title>New Windows Services library</title>
      <link>https://lenholgate.com/blog/2009/06/new-windows-services-library.html</link>
      <pubDate>Wed, 10 Jun 2009 09:48:28 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/06/new-windows-services-library.html</guid>
      <description>I&amp;rsquo;m currently working on a new version of the Windows Services library that ships as part of the licensed I/O Completion Port Server Framework. The Services library allows you to turn your server into a Windows Service very easily and also allows you to run it as a normal executable inside the debugger, etc. It integrates nicely with our Performance Monitoring library for exposing perfmon counters and comes with several example servers that show you how to use it (see here and here).</description>
    </item>
    
    <item>
      <title>L&#39;Hexapod: Linkfest...</title>
      <link>https://lenholgate.com/blog/2009/06/linkfest.html</link>
      <pubDate>Fri, 05 Jun 2009 18:32:55 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/06/linkfest.html</guid>
      <description>Previously publishedThis article was previously published on lhexapod.com as part of my journey of discovery into robotics and embedded assembly programming. A full index of these articles can be found here.
A collection of links that I&amp;rsquo;ve been using recently for research.
Servos and robotics Hitec HS-422 Servo. The servos I currently have; likely not suitable for use as actual leg servos due to lack of torque. Useful link as www.</description>
    </item>
    
    <item>
      <title>L&#39;Hexapod: Fundamental design flaw in the servo controller code</title>
      <link>https://lenholgate.com/blog/2009/06/fundamental-design-flaw-in-the-servo-controller-code.html</link>
      <pubDate>Wed, 03 Jun 2009 18:02:01 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/06/fundamental-design-flaw-in-the-servo-controller-code.html</guid>
      <description>Previously publishedThis article was previously published on lhexapod.com as part of my journey of discovery into robotics and embedded assembly programming. A full index of these articles can be found here.
In my opinion there&amp;rsquo;s a fundamental design flaw in the both the 8 channel and the 64 channel servo controller firmware that I&amp;rsquo;ve presented. Both allow the serial data handling code to take priority over the PWM generation code.</description>
    </item>
    
    <item>
      <title>L&#39;Hexapod: Atmel ATtiny2313 Servo Controller v0.2 - source code</title>
      <link>https://lenholgate.com/blog/2009/06/atmel-attiny2313-servo-controller-v02-source-code.html</link>
      <pubDate>Wed, 03 Jun 2009 10:54:07 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/06/atmel-attiny2313-servo-controller-v02-source-code.html</guid>
      <description>Previously publishedThis article was previously published on lhexapod.com as part of my journey of discovery into robotics and embedded assembly programming. A full index of these articles can be found here.
Here&amp;rsquo;s the source code to the 64 channel ATtiny2313 servo controller. Note that you&amp;rsquo;ll need to use up to 8 CD74HCT238E, or equivalent, demultiplexer chips and that you can adjust the number of servos that you can control in steps of 8 using as many or as few CD74HCT238E chips as you want.</description>
    </item>
    
    <item>
      <title>Bug Psychology and how you can get stuck in a rut...</title>
      <link>https://lenholgate.com/blog/2009/06/bug-psychology-and-how-you-can-get-stuck-in-a-rut.html</link>
      <pubDate>Wed, 03 Jun 2009 09:25:18 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/06/bug-psychology-and-how-you-can-get-stuck-in-a-rut.html</guid>
      <description>Eric Lippert has an interesting blog posting (here) on how sometimes you can be so focused on fixing the bug you fail to step back and take a better look at the actual problem that you&amp;rsquo;re trying to solve.
I&amp;rsquo;m guilty of this and, with me at least, it doesn&amp;rsquo;t only apply to bug fixes. Sometimes I can become overcommitted to a design to the point where I don&amp;rsquo;t recognise that it&amp;rsquo;s just one design option I treat it as the only design option.</description>
    </item>
    
    <item>
      <title>L&#39;Hexapod: 64 channel servo controller...</title>
      <link>https://lenholgate.com/blog/2009/06/64-channel-servo-controller.html</link>
      <pubDate>Tue, 02 Jun 2009 09:13:51 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/06/64-channel-servo-controller.html</guid>
      <description>Previously publishedThis article was previously published on lhexapod.com as part of my journey of discovery into robotics and embedded assembly programming. A full index of these articles can be found here.
I&amp;rsquo;ve been experimenting with the servo controller that I developed for the ATtiny2313 here and the demultiplexing chips that I mentioned here. The result is a 64 channel servo controller that seems to work pretty well. Right now I haven&amp;rsquo;t breadboarded all 64 channels, I have two of the CD74HCT238E chips connected to the ATtiny but I/O pins and he firmware would drive 8 of them if they were connected to give 64 channels.</description>
    </item>
    
    <item>
      <title>Race condition during service shutdown</title>
      <link>https://lenholgate.com/blog/2009/06/race-condition-during-service-shutdown.html</link>
      <pubDate>Mon, 01 Jun 2009 09:47:41 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/06/race-condition-during-service-shutdown.html</guid>
      <description>There&amp;rsquo;s a race condition in the service shutdown code which is most likely to show up if there&amp;rsquo;s an exception thrown from your implementation of ContinueService(), PauseService() or StopService() but that could show up during any service shutdown sequence.
This race condition is present in all versions of the Service Library and so far has only been reported by one client. A fix is available, please contact me directly if you need it, or think you need it.</description>
    </item>
    
    <item>
      <title>Bug fix in performance counter instance activation code</title>
      <link>https://lenholgate.com/blog/2009/06/bug-fix-in-performance-counter-instance-activation-code.html</link>
      <pubDate>Mon, 01 Jun 2009 08:59:14 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/06/bug-fix-in-performance-counter-instance-activation-code.html</guid>
      <description>There&amp;rsquo;s a bug in all releases of our performance counter library that may cause the creation of an instance with a name that has been previously used as an instance but that has been released to fail by connecting the new instance to the previously released instance data structure.
The bug is in PerformanceDataBlock.cpp, the else if around line 167 in AllocateObjectInstance() should be changed from:
if (pInstance-&amp;gt;NameLength == 0 &amp;amp;&amp;amp; !</description>
    </item>
    
    <item>
      <title>L&#39;Hexapod: Atmel ATtiny2313 Servo Controller v0.1 - source code</title>
      <link>https://lenholgate.com/blog/2009/05/atmel-attiny2313-servo-controller-v01-source-code.html</link>
      <pubDate>Thu, 21 May 2009 12:16:51 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/05/atmel-attiny2313-servo-controller-v01-source-code.html</guid>
      <description>Previously publishedThis article was previously published on lhexapod.com as part of my journey of discovery into robotics and embedded assembly programming. A full index of these articles can be found here.
The jitters and general instability of the hacked together simple servo controller (see here) for the ATtiny2313 were, it seems, down to the fact that the internal clock wasn&amp;rsquo;t stable enough and this caused enough timing issues to throw the PWM off enough to jiggle the servo position around rather than hold it steady.</description>
    </item>
    
    <item>
      <title>L&#39;Hexapod: CD74HCT238E</title>
      <link>https://lenholgate.com/blog/2009/05/cd74hct238e.html</link>
      <pubDate>Tue, 19 May 2009 17:54:10 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/05/cd74hct238e.html</guid>
      <description>Previously publishedThis article was previously published on lhexapod.com as part of my journey of discovery into robotics and embedded assembly programming. A full index of these articles can be found here.
My progress has been slow over the past couple of weeks because a) I&amp;rsquo;ve been rather busy with other things and b) an order of components has gone missing in the post. The order contains some 4mhz crystals and therefore my server controller firmware testing has been on hold as I&amp;rsquo;d like to remove the potential clock instability as a potential cause of the controller jitters before continuing my debugging.</description>
    </item>
    
    <item>
      <title>#pragma unmanaged</title>
      <link>https://lenholgate.com/blog/2009/05/pragma-unmanaged.html</link>
      <pubDate>Thu, 14 May 2009 18:19:44 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/05/pragma-unmanaged.html</guid>
      <description>I&amp;rsquo;ve just spent a little too long trying to track down a bug in a mixed mode DLL that I&amp;rsquo;m building. The DLL exposes a set of entry point functions that are defined as taking a single pointer argument and lies to the application that hosts it so that the application can call it with various numbers of arguments. The arguments could change from call to call or from &amp;lsquo;session&amp;rsquo; to &amp;lsquo;session&amp;rsquo;.</description>
    </item>
    
    <item>
      <title>Building an inproc ATL COM object as x86 and x64</title>
      <link>https://lenholgate.com/blog/2009/05/building-an-inproc-atl-com-object-as-x86-and-x64.html</link>
      <pubDate>Tue, 12 May 2009 09:50:29 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/05/building-an-inproc-atl-com-object-as-x86-and-x64.html</guid>
      <description>I&amp;rsquo;m currently wrapping a server&amp;rsquo;s client side API in an ATL COM object for a client. The COM object will be used to communicate with the server from managed code or VB or other COM compatible systems. It&amp;rsquo;s a fairly straight forward process as the original &amp;lsquo;C&amp;rsquo; DLL interface client API was built with this kind of thing in mind and I&amp;rsquo;ve done enough C++ objects wrapping a &amp;lsquo;C&amp;rsquo; API conversions in the past to make the whole process relatively painless and straight forward.</description>
    </item>
    
    <item>
      <title>Embedded assembly programming</title>
      <link>https://lenholgate.com/blog/2009/05/embedded-assembly-programming.html</link>
      <pubDate>Fri, 08 May 2009 07:50:30 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/05/embedded-assembly-programming.html</guid>
      <description>Well, I&amp;rsquo;ve finally done something that I&amp;rsquo;ve been meaning to do for a long time. I&amp;rsquo;ve written some non-trivial assembly language code. Up until recently I wasn&amp;rsquo;t expecting this to be embedded assembly, but it actually seems like a sensible way to get into this low level stuff. Programming an 8bit RISC microcontroller in assembly is considerably easier than trying to do something with a PC. The chips are cheap (as chips), the tools are free, there&amp;rsquo;s an active user community and the electronics required is relatively simple.</description>
    </item>
    
    <item>
      <title>L&#39;Hexapod: Atmel ATtiny2313 Servo Controller v0.1 </title>
      <link>https://lenholgate.com/blog/2009/05/atmel-attiny2313-servo-controller-v01.html</link>
      <pubDate>Fri, 08 May 2009 07:00:57 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/05/atmel-attiny2313-servo-controller-v01.html</guid>
      <description>Previously publishedThis article was previously published on lhexapod.com as part of my journey of discovery into robotics and embedded assembly programming. A full index of these articles can be found here.
This morning I tested the first version of my custom servo controller. It&amp;rsquo;s currently heavily based on the source for 16 channel servo controller that I&amp;rsquo;ve mentioned before. What I did was simply adjust that source for my target processor and the fact that I&amp;rsquo;m using it with a 4Mhz internal clock rather than the more standard &amp;ldquo;RS232 baud rate friendly&amp;rdquo; 3.</description>
    </item>
    
    <item>
      <title>L&#39;Hexapod: AVR Studio 4</title>
      <link>https://lenholgate.com/blog/2009/05/avr-studio-4.html</link>
      <pubDate>Thu, 07 May 2009 08:18:20 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/05/avr-studio-4.html</guid>
      <description>Previously publishedThis article was previously published on lhexapod.com as part of my journey of discovery into robotics and embedded assembly programming. A full index of these articles can be found here.
I&amp;rsquo;ve been spending some time getting to know AVR Studio 4, especially the simulation and debugging functionality. It&amp;rsquo;s a very functional and very useful free development suite that can be downloaded from Atmel from here.
As I mentioned a while back I have had a C compiler and development and programming tool chain set up for a while now but I hadn&amp;rsquo;t got around to working out how to debug the code.</description>
    </item>
    
    <item>
      <title>Everything you need to know about timers and periodic scheduling in the server framework</title>
      <link>https://lenholgate.com/blog/2009/05/everything-you-need-to-know-about-timers-and-periodic-scheduling-in-the-server-framework.html</link>
      <pubDate>Tue, 05 May 2009 13:25:49 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/05/everything-you-need-to-know-about-timers-and-periodic-scheduling-in-the-server-framework.html</guid>
      <description>Often when you&amp;rsquo;re writing a server or client application with The Server Framework you will find yourself needing to perform operations periodically or after a timeout. The Server Framework provides a light-weight timer queue that can be used to schedule timers and that uses minimal system resources so that there&amp;rsquo;s no problem with having multiple timers per connection; even on systems with 10,000 connections.
The class used to manage per connection timers is the CThreadedCallbackTimerQueue class.</description>
    </item>
    
    <item>
      <title>L&#39;Hexapod: I may have been a little harsh...</title>
      <link>https://lenholgate.com/blog/2009/05/i-may-have-been-a-little-harsh.html</link>
      <pubDate>Fri, 01 May 2009 11:11:27 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/05/i-may-have-been-a-little-harsh.html</guid>
      <description>Previously publishedThis article was previously published on lhexapod.com as part of my journey of discovery into robotics and embedded assembly programming. A full index of these articles can be found here.
After a little more debugging this morning I&amp;rsquo;m coming to the conclusion that I may have been a little harsh on the Arduino&amp;rsquo;s software serial port.
More when I know more, but I think it&amp;rsquo;s more of a flow control issue with my data transmission from the PC.</description>
    </item>
    
    <item>
      <title>L&#39;Hexapod: Arduino multiple serial disappointment</title>
      <link>https://lenholgate.com/blog/2009/04/arduino-multiple-serial-disappointment.html</link>
      <pubDate>Thu, 30 Apr 2009 22:46:48 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/04/arduino-multiple-serial-disappointment.html</guid>
      <description>Previously publishedThis article was previously published on lhexapod.com as part of my journey of discovery into robotics and embedded assembly programming. A full index of these articles can be found here.
Tonight I took a look at the &amp;lsquo;software serial&amp;rsquo; support in the Arduino. I can&amp;rsquo;t say I&amp;rsquo;m that impressed&amp;hellip;
The Arduino has a built in hardware UART (a hardware serial port) which works as expected. It allows you to talk to external serial devices but there&amp;rsquo;s only one of it so if you want to have an external device talk to you via a serial port and then you want to talk to something else via another serial port then you&amp;rsquo;re out of luck.</description>
    </item>
    
    <item>
      <title>L&#39;Hexapod: The servo controller problems weren&#39;t power supply noise...</title>
      <link>https://lenholgate.com/blog/2009/04/the-servo-controller-problems-werent-power-supply-noise.html</link>
      <pubDate>Thu, 30 Apr 2009 19:57:48 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/04/the-servo-controller-problems-werent-power-supply-noise.html</guid>
      <description>Previously publishedThis article was previously published on lhexapod.com as part of my journey of discovery into robotics and embedded assembly programming. A full index of these articles can be found here.
I&amp;rsquo;ve been testing the new leg with one power supply for the servos and one for the electronics and all is working well. I expect that all would be working well if I were using a single power supply for both, as long as I was using the new one I soldered up and not the old one&amp;hellip;</description>
    </item>
    
    <item>
      <title>May your software scale, and other curses...</title>
      <link>https://lenholgate.com/blog/2009/04/may-your-software-scale-and-other-curses.html</link>
      <pubDate>Tue, 28 Apr 2009 13:16:48 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/04/may-your-software-scale-and-other-curses.html</guid>
      <description>I&amp;rsquo;m in the process of upgrading another client to v6.0. These guys write multi-user game systems and have a fairly complex CLR hosting custom application server. Anyway, I was hoping that we&amp;rsquo;d have a few easy performance wins from the changes that have gone into v6.0 and these gaming guys are possibly even more hung up on performance than my banking and trading clients.
The good news is that the changes in how we convert numbers to strings has drastically improved performance in their debug builds where they have lots of logging going on.</description>
    </item>
    
    <item>
      <title>L&#39;Hexapod: Books for programming an AVR micro</title>
      <link>https://lenholgate.com/blog/2009/04/books-for-programming-an-avr-micro.html</link>
      <pubDate>Sat, 25 Apr 2009 22:57:49 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/04/books-for-programming-an-avr-micro.html</guid>
      <description>Previously publishedThis article was previously published on lhexapod.com as part of my journey of discovery into robotics and embedded assembly programming. A full index of these articles can be found here.
So far I&amp;rsquo;ve bought three AVR programming books. AVR: An Introductory Course, Programming and Customizing the AVR Microcontroller and Atmel AVR Microcontroller Primer: Programming and Interfacing (Synthesis Lectures on Digital Circuits and Systems).
They are three quite different books and each has a distinct focus.</description>
    </item>
    
    <item>
      <title>L&#39;Hexapod: Once more with feeling</title>
      <link>https://lenholgate.com/blog/2009/04/once-more-with-feeling.html</link>
      <pubDate>Sat, 25 Apr 2009 15:58:17 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/04/once-more-with-feeling.html</guid>
      <description>Previously publishedThis article was previously published on lhexapod.com as part of my journey of discovery into robotics and embedded assembly programming. A full index of these articles can be found here.
Having decided that the graduated servo positioning method was the way to go to allow for leg sensors to work correctly I started thinking about leg sensors.
Here&amp;rsquo;s a new lower leg with three switches, one on the foot, one to the inside of the leg and one to the outside of the leg.</description>
    </item>
    
    <item>
      <title>L&#39;Hexapod: More thoughts on the proto leg</title>
      <link>https://lenholgate.com/blog/2009/04/more-thoughts-on-the-proto-leg.html</link>
      <pubDate>Thu, 23 Apr 2009 19:05:26 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/04/more-thoughts-on-the-proto-leg.html</guid>
      <description>Previously publishedThis article was previously published on lhexapod.com as part of my journey of discovery into robotics and embedded assembly programming. A full index of these articles can be found here.
I adjusted my quick and dirty servo controller program to calculate the number of moves required for the servo that needed to move furthest and then spread the movement of the other servos across the same number of moves.</description>
    </item>
    
    <item>
      <title>L&#39;Hexapod: First steps in embedded programming; first build the hardware...</title>
      <link>https://lenholgate.com/blog/2009/04/first-steps-in-embedded-programming-first-build-the-hardware.html</link>
      <pubDate>Thu, 23 Apr 2009 18:37:41 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/04/first-steps-in-embedded-programming-first-build-the-hardware.html</guid>
      <description>Previously publishedThis article was previously published on lhexapod.com as part of my journey of discovery into robotics and embedded assembly programming. A full index of these articles can be found here.
This week I managed to scrape together some time to play with some of the non prototype bits and pieces that I purchased for this project. First off was breadboarding a MAX232 chip so that I could talk via my PCs serial port to my ATtiny2313 microcontroller.</description>
    </item>
    
    <item>
      <title>L&#39;Hexapod: Thoughts on the proto leg</title>
      <link>https://lenholgate.com/blog/2009/04/thoughts-on-the-proto-leg.html</link>
      <pubDate>Tue, 21 Apr 2009 13:30:10 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/04/thoughts-on-the-proto-leg.html</guid>
      <description>Previously publishedThis article was previously published on lhexapod.com as part of my journey of discovery into robotics and embedded assembly programming. A full index of these articles can be found here.
The prototype leg has some fairly major failings from a mechanical point of view. The only part that may eventually find its way into a weight bearing leg is the lower leg where the cut out around the knee servo provides ample support for the servo itself and also a suitable mounting point for the servo.</description>
    </item>
    
    <item>
      <title>Interesting piece on thread pools</title>
      <link>https://lenholgate.com/blog/2009/04/interesting-piece-on-thread-pools.html</link>
      <pubDate>Tue, 21 Apr 2009 08:48:50 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/04/interesting-piece-on-thread-pools.html</guid>
      <description>Herb Sutter has just published an interesting article over at DDJ on correctly using thread pools: Use Thread Pools Correctly: Keep Tasks Short and Nonblocking.
It&amp;rsquo;s not rocket science and it doesn&amp;rsquo;t deal with platform issues but it&amp;rsquo;s a useful summary of why The Server Framework&amp;rsquo;s thread pools operate as they do. Note that on Windows you can use IO Completion Ports to manage the work queue into the thread pool and this can keep the number of threads that are scheduled to run at the optimum number so that the pool operates at the &amp;lsquo;correct load&amp;rsquo; for most of the time even in the presence of blocking tasks.</description>
    </item>
    
    <item>
      <title>Bug fix for the free server framework code</title>
      <link>https://lenholgate.com/blog/2009/04/bug-fix-for-the-free-server-framework-code.html</link>
      <pubDate>Tue, 21 Apr 2009 08:42:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/04/bug-fix-for-the-free-server-framework-code.html</guid>
      <description>A user of my free server framework code has reported an error and supplied a fix.
The problem is that he&amp;rsquo;s been having connections closing and returning ERROR_CONNECTION_ABORTED and the free code doesn&amp;rsquo;t handle this situation very well and this was causing his I/O threads to terminate and leaving him with an unresponsive server. Interestingly I&amp;rsquo;ve never had this problem reported before and haven&amp;rsquo;t been able to duplicate the issue but I thought it would be useful to publish the fix in case anyone else comes across the problem.</description>
    </item>
    
    <item>
      <title>L&#39;Hexapod: Prototype leg v0.1</title>
      <link>https://lenholgate.com/blog/2009/04/prototype-leg-v01.html</link>
      <pubDate>Mon, 20 Apr 2009 17:02:54 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/04/prototype-leg-v01.html</guid>
      <description>Previously publishedThis article was previously published on lhexapod.com as part of my journey of discovery into robotics and embedded assembly programming. A full index of these articles can be found here.
I spent a little time at the weekend putting together my three servos into a prototype leg. The idea is that this very quick and very dirty little experiment should give me some more avenues to explore; and something to show people.</description>
    </item>
    
    <item>
      <title>L&#39;Hexapod: The servos are twitching</title>
      <link>https://lenholgate.com/blog/2009/04/the-servos-are-twitching.html</link>
      <pubDate>Thu, 16 Apr 2009 14:22:13 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/04/the-servos-are-twitching.html</guid>
      <description>Previously publishedThis article was previously published on lhexapod.com as part of my journey of discovery into robotics and embedded assembly programming. A full index of these articles can be found here.
My package from Cool Components arrived this morning. My choice of prototyping equipment was quickly validated when I plugged together the Arduino and the Pololu servo controller board, plugged in the servos and servo power supply, connected the lot to the pc via a usb cable and had three servos twitching back and forth under the control of the Arduino is no time.</description>
    </item>
    
    <item>
      <title>Custom application servers</title>
      <link>https://lenholgate.com/blog/2009/04/custom-application-servers.html</link>
      <pubDate>Wed, 15 Apr 2009 09:31:12 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/04/custom-application-servers.html</guid>
      <description>A lot of the custom development work that we do for our customers can be classified as developing &amp;lsquo;custom application servers&amp;rsquo;. Development for these kinds of servers usually requires that we design a wire-protocol for communications between the clients and the server, implement a server that either does everything that the customer requires or allows them to easily plug in their business logic and provide a client side library (or two) that makes it easy for the customer to write clients for the server.</description>
    </item>
    
    <item>
      <title>L&#39;Hexapod: Pulse width modulation for servo position control</title>
      <link>https://lenholgate.com/blog/2009/04/pulse-width-modulation-for-servo-position-control.html</link>
      <pubDate>Sat, 11 Apr 2009 00:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/04/pulse-width-modulation-for-servo-position-control.html</guid>
      <description>Previously publishedThis article was previously published on lhexapod.com as part of my journey of discovery into robotics and embedded assembly programming. A full index of these articles can be found here.
First some basics: servo motors are what I&amp;rsquo;ll be using to provide movement for the robot. Each leg will consist of at least three servo motors (1 at the knee and two at the hip). As you&amp;rsquo;ll see from the wikipedia link above, servo motors are generally controlled by pulse width modulation.</description>
    </item>
    
    <item>
      <title>L&#39;Hexapod: Useful links and suppliers </title>
      <link>https://lenholgate.com/blog/2009/04/useful-links-and-suppliers.html</link>
      <pubDate>Thu, 09 Apr 2009 18:30:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/04/useful-links-and-suppliers.html</guid>
      <description>Previously publishedThis article was previously published on lhexapod.com as part of my journey of discovery into robotics and embedded assembly programming. A full index of these articles can be found here.
So far most of my more interesting components have been purchased from Cool Components mainly because they&amp;rsquo;re UK based and they stocked stuff I was interested in. I found them via SparkFun which is a treasure trove of fun; unfortunately I can&amp;rsquo;t find UK distributors for much of the stuff they have available and at present I&amp;rsquo;m trying to avoid buying bits and pieces for this project from the US as the shipping is often more expensive than the order.</description>
    </item>
    
    <item>
      <title>L&#39;Hexapod: Servos with status feedback</title>
      <link>https://lenholgate.com/blog/2009/04/servos-with-status-feedback.html</link>
      <pubDate>Thu, 09 Apr 2009 08:10:45 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/04/servos-with-status-feedback.html</guid>
      <description>Previously publishedThis article was previously published on lhexapod.com as part of my journey of discovery into robotics and embedded assembly programming. A full index of these articles can be found here.
I saw these Dynamixel DX servos mentioned on Trossen Robotics this morning, see here. They&amp;rsquo;re interesting because they have a richer interface than the normal hobby servos that I&amp;rsquo;ve been looking at and they provide a multidrop RS485 interface so that you can chain multiple servos together and control them individually via a single line.</description>
    </item>
    
    <item>
      <title>L&#39;Hexapod: Micromagic systems</title>
      <link>https://lenholgate.com/blog/2009/04/micromagic-systems.html</link>
      <pubDate>Wed, 08 Apr 2009 16:36:18 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/04/micromagic-systems.html</guid>
      <description>Previously publishedThis article was previously published on lhexapod.com as part of my journey of discovery into robotics and embedded assembly programming. A full index of these articles can be found here.
Micromagic systems do robotics and animatronics for the film and tv industry and have quite a nice selection of hexapod robots. It&amp;rsquo;s especially interesting to see the evolution of their robots here. Their latest stuff is very impressive and puts into perspective how much I have to learn&amp;hellip;</description>
    </item>
    
    <item>
      <title>L&#39;Hexapod: A-pod, an ant inspired hexapod</title>
      <link>https://lenholgate.com/blog/2009/04/a-pod-an-ant-inspired-hexapod.html</link>
      <pubDate>Wed, 08 Apr 2009 15:24:42 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/04/a-pod-an-ant-inspired-hexapod.html</guid>
      <description>Previously publishedThis article was previously published on lhexapod.com as part of my journey of discovery into robotics and embedded assembly programming. A full index of these articles can be found here.
This is the kind of thing that I mean when I say &amp;lsquo;hexapod robot&amp;rsquo;. I particularly like the head and mandibles.
More details can be found here: http://forums.trossenrobotics.com/showthread.php?t=2762 and here: http://blog.trossenrobotics.com/index.php/2009/03/17/a-pod-a-robot-ants-tale/</description>
    </item>
    
    <item>
      <title>L&#39;Hexapod: Welcome</title>
      <link>https://lenholgate.com/blog/2009/04/welcome.html</link>
      <pubDate>Wed, 08 Apr 2009 13:44:13 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/04/welcome.html</guid>
      <description>Previously publishedThis article was previously published on lhexapod.com as part of my journey of discovery into robotics and embedded assembly programming. A full index of these articles can be found here.
Hi, my name is Len Holgate and this is a blog about my new project to design and build a hexapod robot; a mechanical vehicle that walks on six legs&amp;hellip;
By day I design and build high performance TCP and UDP servers for the Windows platform, my C++ technical blog is here: www.</description>
    </item>
    
    <item>
      <title>Upgrading to version 6.0</title>
      <link>https://lenholgate.com/blog/2009/04/upgrading-to-version-60.html</link>
      <pubDate>Thu, 02 Apr 2009 12:02:49 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/04/upgrading-to-version-60.html</guid>
      <description>I&amp;rsquo;m in the process of upgrading a set of ISO8583 servers for a client. One of these is the original server that caused The Server Framework to come into existence back in 2002. The other two servers are based on a 2005 cut of the code; one written in 2005 and one, heavily based on the other, written in 2008.
The upgrade is primarily to support windows performance counters on Windows Server 2008 and to allow for x64 builds.</description>
    </item>
    
    <item>
      <title>JetByte News: Updating ISO8583 servers</title>
      <link>https://lenholgate.com/news/2009/03/updating-iso8583-servers.html</link>
      <pubDate>Mon, 30 Mar 2009 12:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/news/2009/03/updating-iso8583-servers.html</guid>
      <description>PayPoint has engaged us to update the ISO8583 transaction servers that we have built for them over the years to the latest version of The Server Framework.
They&amp;rsquo;re keen to take advantage of the free updates that you get with The Server Framework but don&amp;rsquo;t have anyone in house to apply the diffs and adjust the code.</description>
    </item>
    
    <item>
      <title>Excellent article on Non-Paged Pool</title>
      <link>https://lenholgate.com/blog/2009/03/excellent-article-on-non-paged-pool.html</link>
      <pubDate>Fri, 27 Mar 2009 11:45:58 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/03/excellent-article-on-non-paged-pool.html</guid>
      <description>Mark Russinovich has an excellent piece (here) on how &amp;rsquo;non-paged pool&amp;rsquo; memory sizes are calculated for various versions of Windows operating systems. As those of you who are dealing with high performance, high connection, server systems know, non-paged pool is one of those annoying system wide limits that can sometimes get in the way of servicing a large number of clients as every active I/O operation consumes some non-paged pool. The good news is that on Vista x64 systems and later the way that non-paged pool limits are calculated has changed and the limits are much higher.</description>
    </item>
    
    <item>
      <title>Highlights of the 6.0 server framework release</title>
      <link>https://lenholgate.com/blog/2009/03/highlights-of-the-60-server-framework-release.html</link>
      <pubDate>Thu, 26 Mar 2009 16:20:39 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/03/highlights-of-the-60-server-framework-release.html</guid>
      <description>The latest, 6.0, release of The Server Framework is significant for me in several ways. From a purely practical point of view it&amp;rsquo;s the first release from my new Subversion repository and as such it&amp;rsquo;s the culmination of a fair amount of work and restructuring. The new repository is easier to work with and the new code structure is expecially noticable in the way that example servers and clients are now packaged for release.</description>
    </item>
    
    <item>
      <title>Latest release of licensed socket server code: 6.0</title>
      <link>https://lenholgate.com/blog/2009/03/latest-release-of-licensed-socket-server-code-60.html</link>
      <pubDate>Thu, 26 Mar 2009 16:07:30 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/03/latest-release-of-licensed-socket-server-code-60.html</guid>
      <description>The latest release of The Server Framework is now available. This release includes the following changes.
The following changes were made to the libraries.
Admin Library - 6.0
Added back the Admin\VC6Compatibility directory with sal.h for VS.Net (2002) and VS 2003. The directory is now called Admin\Compatibility and you need to copy sal.h to your compiler&amp;rsquo;s include directory if it complains about it being missing.
Some more changes with how Admin.</description>
    </item>
    
    <item>
      <title>Automatically pruning empty log files</title>
      <link>https://lenholgate.com/blog/2009/03/automatically-pruning-empty-log-files.html</link>
      <pubDate>Tue, 10 Mar 2009 09:44:36 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/03/automatically-pruning-empty-log-files.html</guid>
      <description>The log file rotation code that I wrote a while back has been working well for several clients. Recently someone suggested that the design of their server&amp;rsquo;s logging meant that they tended to generate lots of useful information on server start up and server shutdown and then nothing until the server had problems. This meant that they were ending up with lots of empty log files as the hourly, or daily, or weekly rotation period would create a new file and most of the time nothing would be written to it.</description>
    </item>
    
    <item>
      <title>JetByte News: Consultancy for SSL client development </title>
      <link>https://lenholgate.com/news/2009/02/consultancy-for-ssl-client-development.html</link>
      <pubDate>Wed, 25 Feb 2009 12:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/news/2009/02/consultancy-for-ssl-client-development.html</guid>
      <description>We&amp;rsquo;re working with GSI Labs to help them build their mobile data call simulator that uses The Server Framework.</description>
    </item>
    
    <item>
      <title>Testing SChannel code</title>
      <link>https://lenholgate.com/blog/2009/02/testing-schannel-code.html</link>
      <pubDate>Wed, 18 Feb 2009 14:29:48 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/02/testing-schannel-code.html</guid>
      <description>I developed the new SChannel SSL adapter for The Server Framework in a mostly test driven style; a while ago I called this Just In Time Testing&amp;hellip; It worked well and, to be honest, I couldn&amp;rsquo;t imagine developing code as complex as the SChannel adapter without tests; though as I noted when I first set out on the development, back in 2001 I&amp;rsquo;d developed the corresponding OpenSSL adapter without any tests at all&amp;hellip; The tests worked well for me this time around and I was able to both learn about the SChannel API that I was using and implement the required code far easier with the tests in place.</description>
    </item>
    
    <item>
      <title>Memory leak in SChannel SSL code</title>
      <link>https://lenholgate.com/blog/2009/02/memory-leak-in-schannel-ssl-code.html</link>
      <pubDate>Mon, 16 Feb 2009 11:09:38 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/02/memory-leak-in-schannel-ssl-code.html</guid>
      <description>I&amp;rsquo;ve just had a memory leak in the SChannel SSL code reported by a client. It&amp;rsquo;s a fairly fundamental leak has highlighted an omission in the mock buffer allocators that I use to test this kind of code; it also highlights that the SChannel code was somewhat rushed to release before Christmas.
I&amp;rsquo;m working on a fix now and the changes will be included in the 5.2.5 release of the SChannel code.</description>
    </item>
    
    <item>
      <title>Asserts and testing</title>
      <link>https://lenholgate.com/blog/2009/02/asserts-and-testing.html</link>
      <pubDate>Tue, 10 Feb 2009 09:53:29 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/02/asserts-and-testing.html</guid>
      <description>Miško Hevery over at the Google Testing Blog has a few things to say about Asserts and testing. He&amp;rsquo;s against asserts, specifically ones which perform null checks, as they get in the way of testing. Whilst I agree with his dislike of assertions (see here) I disagree with his dislike of null checks&amp;hellip;
Miško complains that by having an object check passed in objects for null and assert if they are this causes him problems in testing where he knows that he doesn&amp;rsquo;t need the objects that are being passed in to test the functionality that he&amp;rsquo;s testing.</description>
    </item>
    
    <item>
      <title>Latest release of licensed socket server code: 5.2.5</title>
      <link>https://lenholgate.com/blog/2009/01/latest-release-of-licensed-socket-server-code-525.html</link>
      <pubDate>Thu, 29 Jan 2009 11:10:11 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/01/latest-release-of-licensed-socket-server-code-525.html</guid>
      <description>The latest release of The Server Framework is now available. This release includes the following changes.
The following changes were made to the libraries.
Admin Library - 5.2.5
No Change. C++ Tools Library - 5.2.5
No Change. Win32 Tools Library - 5.2.5
No Change. I/O Tools Library - 5.2.5
No Change. Socket Tools Library - 5.2.5
Fixed a bug in the dispatch of JetByteTools::Socket::IStreamSocketCallback::OnConnectionClosed() from within JetByteTools::Socket::CStreamSocket::OnFinalRelease(). We now ensure that the socket&amp;rsquo;s reference count is valid before calling the callback method.</description>
    </item>
    
    <item>
      <title>Bug in the dispatching of OnConnectionClosed() in release 5.2.4 of the server framework</title>
      <link>https://lenholgate.com/blog/2009/01/bug-in-the-dispatching-of-onconnectionclosed-in-release-524-of-the-server-framework.html</link>
      <pubDate>Thu, 29 Jan 2009 08:31:15 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/01/bug-in-the-dispatching-of-onconnectionclosed-in-release-524-of-the-server-framework.html</guid>
      <description>A client has just reported a bug in version 5.2.4 of The Server Framework. The bug has, possibly, been present since 5.2.2 and relates to the dispatch of OnConnectionClosed() callbacks when a socket is released.
If a socket is still valid, i.e. it hasn&amp;rsquo;t been previously closed, when the socket is released for the last time then part of the clean up is to close the socket. Your code is informed of this by the OnConnectionClosed() callback being called.</description>
    </item>
    
    <item>
      <title>Breakpoint sequences...</title>
      <link>https://lenholgate.com/blog/2009/01/breakpoint-sequences.html</link>
      <pubDate>Thu, 22 Jan 2009 09:43:42 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/01/breakpoint-sequences.html</guid>
      <description>Something that I find myself wanting in a debugger from time to time are breakpoints that only fire if the code has been entered via a specific route. You know the problem, you&amp;rsquo;ve tracked a particular issue down to one specific call sequence that occurs at a specific point in the code. The line you want to break on in this instance is also hit a lot via other routes that you don&amp;rsquo;t care about.</description>
    </item>
    
    <item>
      <title>Living with Subversion</title>
      <link>https://lenholgate.com/blog/2009/01/living-with-subversion.html</link>
      <pubDate>Thu, 15 Jan 2009 09:27:14 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/01/living-with-subversion.html</guid>
      <description>It&amp;rsquo;s now around a month since I started shifting the bulk of my source code from CVS to Subversion. In that time I&amp;rsquo;ve move most of my internal use code, and a couple of clients. I&amp;rsquo;ve done several client releases and developed several new features for The Server Framework on isolated development branches which have then been merged back in to the main trunk. I&amp;rsquo;ve also updated my continuous integration server to use the new source code repositories and, generally, just got on with it and lived with the new system.</description>
    </item>
    
    <item>
      <title>The new Microsoft File Transfer Manager appears to suck...</title>
      <link>https://lenholgate.com/blog/2009/01/the-new-microsoft-file-transfer-manager-appears-to-suck.html</link>
      <pubDate>Thu, 08 Jan 2009 15:09:39 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2009/01/the-new-microsoft-file-transfer-manager-appears-to-suck.html</guid>
      <description>I&amp;rsquo;m downloading the Windows 7 Beta from MSDN Subscriber downloads right now and the new Microsoft File Transfer Manager appears to be very very crap. The MSDN site insisted on updating the file transfer component before I could download and this version seems to stop every few minutes with errors about web server headers being missing. I have no proxies of my own that could be causing problems so I assume it&amp;rsquo;s a wider problem than just me&amp;hellip; Anyway, it&amp;rsquo;s a pain that I have to keep hitting the Resume button ever few minutes&amp;hellip;</description>
    </item>
    
    <item>
      <title>JetByte News: Fixed-price server development for ELTAV </title>
      <link>https://lenholgate.com/news/2009/01/fixed-price-server-development-for-eltav.html</link>
      <pubDate>Fri, 02 Jan 2009 12:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/news/2009/01/fixed-price-server-development-for-eltav.html</guid>
      <description>We&amp;rsquo;ve been engaged to build the initial version of a smart valve monitoring server for Eltav using The Server Framework.
Len will kick start their team&amp;rsquo;s development by putting together a custom server shell which deals with the basics of their requirements and will introduce their developers to The Server Framework&amp;rsquo;s code.</description>
    </item>
    
    <item>
      <title>JetByte News: Ongoing development projects for our Online Gaming client</title>
      <link>https://lenholgate.com/news/2009/01/ongoing-development-projects-for-our-online-gaming-client.html</link>
      <pubDate>Thu, 01 Jan 2009 12:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/news/2009/01/ongoing-development-projects-for-our-online-gaming-client.html</guid>
      <description>Our Online Gaming Client has engaged us to continue developing the C++ side of their server system for them on an ongoing basis.
This is to support new functionality and to aggressively improve existing performance.</description>
    </item>
    
    <item>
      <title>Shared locks and unique locks</title>
      <link>https://lenholgate.com/blog/2008/12/shared-locks-and-unique-locks.html</link>
      <pubDate>Tue, 23 Dec 2008 11:12:16 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2008/12/shared-locks-and-unique-locks.html</guid>
      <description>In one of the original articles that introduced The Free Framework I mentioned that the original design was possibly lacking in that it required a critical section per connection and that this could be resource intensive. Shortly after I changed what was to become The Server Framework to use a lock factory which passed out instances of critical sections based on a hashing algorithm applied to a key that the caller supplied.</description>
    </item>
    
    <item>
      <title>How do you convert a number to a string in C&#43;&#43; with MSVC...</title>
      <link>https://lenholgate.com/blog/2008/12/how-do-you-convert-a-number-to-a-string-in-c-with-msvc.html</link>
      <pubDate>Fri, 19 Dec 2008 21:17:11 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2008/12/how-do-you-convert-a-number-to-a-string-in-c-with-msvc.html</guid>
      <description>Converting a numeric type to a string format in C++ is one of those problems that was &amp;lsquo;solved&amp;rsquo; a long time ago. The &amp;lsquo;standard&amp;rsquo; method usually involves streaming the type to be converted into a std::stringstream and then extracting the resulting string representation. Something like this, perhaps:
#include&amp;lt;iostream&amp;gt; #include&amp;lt;string&amp;gt; #include&amp;lt;sstream&amp;gt; using namespace std; string itos(int i)	// convert int to string { stringstream s; s &amp;lt;&amp;lt; i; return s.str(); } int main() { int i = 127; string ss = itos(i); const char* p = ss.</description>
    </item>
    
    <item>
      <title>More code shuffling...</title>
      <link>https://lenholgate.com/blog/2008/12/more-code-shuffling.html</link>
      <pubDate>Thu, 18 Dec 2008 09:40:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2008/12/more-code-shuffling.html</guid>
      <description>The CVS to SVN code migration is going well. As recommended by a commenter I&amp;rsquo;ve switched from using a script to pull my tools libraries from their repository into The Server Framework examples build tree to using svn:externals. This works nicely and plays well with branches and tags (as long as you remember to update the svn:externals definition on your branch or in your tag so that it points to the correspondingly tagged version of your externals (but this would have been the same if I were using a script).</description>
    </item>
    
    <item>
      <title>The great source code shuffle...</title>
      <link>https://lenholgate.com/blog/2008/12/the-great-source-code-shuffle.html</link>
      <pubDate>Thu, 11 Dec 2008 13:23:27 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2008/12/the-great-source-code-shuffle.html</guid>
      <description>I&amp;rsquo;m in the process of moving my source code from a CVS repository to Subversion. The main reason for the move is so that I can move the repository onto one of my NAS devices so that it can be backed up automatically. I have a spare NAS due to the fact that I had a power supply fail and the fastest way to get up and running again was to buy a new one rather than waiting for the replacement PSU&amp;hellip; Anyway, the development NAS has SVN running on it which means that I now have a RAIDed, UPS protected SVN server which gets backed up nightly to my &amp;lsquo;off site&amp;rsquo; NAS via rsync&amp;hellip;</description>
    </item>
    
    <item>
      <title>Latest release of licensed socket server code: 5.2.4</title>
      <link>https://lenholgate.com/blog/2008/12/latest-release-of-licensed-socket-server-code-524.html</link>
      <pubDate>Tue, 09 Dec 2008 11:51:21 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2008/12/latest-release-of-licensed-socket-server-code-524.html</guid>
      <description>The latest release of The Server Framework is now available. This release includes the following changes.
The following changes were made to the libraries.
Admin Library - 5.2.4
We no longer support Visual Studio 6.
We now compile with /Wall (in VS2005 and later) to enable all warnings, even those that are disabled by default. Of course this means that the list of warnings that we disable in Warnings.h has grown a little.</description>
    </item>
    
    <item>
      <title>DevPartner Studio 9.0 and VS2008</title>
      <link>https://lenholgate.com/blog/2008/12/devpartner-studio-90-and-vs2008.html</link>
      <pubDate>Wed, 03 Dec 2008 14:49:33 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2008/12/devpartner-studio-90-and-vs2008.html</guid>
      <description>It seems that there&amp;rsquo;s a &amp;lsquo;known issue&amp;rsquo; with DevPartner studio&amp;rsquo;s instrumentation and VS2008. Apparently the compiler architecture changed somewhat between VS2005 and VS2008 and sometimes the instrumentation is incorrect which is the cause of my &amp;lsquo;strange crashes&amp;rsquo; with DevPartner 9.0. There&amp;rsquo;s no patch available at this time&amp;hellip;</description>
    </item>
    
    <item>
      <title>Comments are back on...</title>
      <link>https://lenholgate.com/blog/2008/12/comments-are-back-on.html</link>
      <pubDate>Tue, 02 Dec 2008 21:31:08 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2008/12/comments-are-back-on.html</guid>
      <description>The move to the new hosting server is complete and all the perl config has been done so I&amp;rsquo;ve turned comments back on!</description>
    </item>
    
    <item>
      <title>Comments are off for a while</title>
      <link>https://lenholgate.com/blog/2008/12/comments-are-off-for-a-while.html</link>
      <pubDate>Mon, 01 Dec 2008 21:05:40 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2008/12/comments-are-off-for-a-while.html</guid>
      <description>I&amp;rsquo;m in the process of moving the blog from one host to another and until I get all of the perl configuration working so that the various comment spam protection methods are working properly I&amp;rsquo;m turning off comments.
Email me if you have a comment to add.</description>
    </item>
    
    <item>
      <title>DevPartner Studio 9.0</title>
      <link>https://lenholgate.com/blog/2008/11/devpartner-studio-90.html</link>
      <pubDate>Sat, 22 Nov 2008 07:23:55 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2008/11/devpartner-studio-90.html</guid>
      <description>I&amp;rsquo;ve just updated my installation of DevPartner Studio. I mainly use the C++ error detection part of this suite, that&amp;rsquo;s the bit that used to be called BoundsChecker. Anyway, version 9.0 is the first version to support VS2008 and x64 so I was quite excited to be able to run the tool on my dev box rather than on my old x86 dev box.
Unfortunately my first impressions aren&amp;rsquo;t good. Here&amp;rsquo;s some of the output from the build window whilst the build is being built for &amp;ldquo;Error detection&amp;rdquo;.</description>
    </item>
    
    <item>
      <title>Lock contention</title>
      <link>https://lenholgate.com/blog/2008/10/lock-contention.html</link>
      <pubDate>Tue, 21 Oct 2008 10:43:19 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2008/10/lock-contention.html</guid>
      <description>I had reason to run my deadlock detection tool on a server built with an old version of The Server Framework as I needed to make changes to the server&amp;rsquo;s locking strategy and I wanted to make sure that I didn&amp;rsquo;t cause any lock inversions. The tool worked well and I tweaked it a little more to make it run faster (considerably faster actually!) and report better&amp;hellip; The speed increase was pretty dramatic and consisted of adding a new option to the tool to prevent it from monitoring lock operations for locks that we have never seen created.</description>
    </item>
    
    <item>
      <title>/Wall</title>
      <link>https://lenholgate.com/blog/2008/10/wall.html</link>
      <pubDate>Sun, 19 Oct 2008 22:25:58 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2008/10/wall.html</guid>
      <description>I&amp;rsquo;ve been compiling with /W4 for some time now. I didn&amp;rsquo;t realise that this wasn&amp;rsquo;t the best you could get. There are some warnings which are not enabled by default and therefore aren&amp;rsquo;t included in /W4. To enable these you need to specify /Wall. The list for Visual Studio 2008 is here. Obviously there are some warnings that I don&amp;rsquo;t find that useful, but these can either be disabled as and where I need to with #pragma warning or globally in my &amp;lsquo;Warnings.</description>
    </item>
    
    <item>
      <title>Goodbye old friend</title>
      <link>https://lenholgate.com/blog/2008/10/goodbye-old-friend.html</link>
      <pubDate>Fri, 17 Oct 2008 16:54:13 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2008/10/goodbye-old-friend.html</guid>
      <description>As of release 5.2.4, which is due for release in December, we will no longer support Visual Studio 6 builds of The Server Framework. I&amp;rsquo;ve recently had to deal with some weird multi-threaded problems for a client and upgrading them from Visual Studio 6 to Visual Studio 2005 seemed to remove several STL related issues. I then did some research and decided that it simply wasn&amp;rsquo;t worth supporting the old compiler any longer if the first thing that I&amp;rsquo;d do if a client had problems would be to recommend they upgrade the compiler&amp;hellip;</description>
    </item>
    
    <item>
      <title>Asynchronous SChannel Servers</title>
      <link>https://lenholgate.com/blog/2008/10/asynchronous-schannel-servers.html</link>
      <pubDate>Thu, 09 Oct 2008 13:49:09 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2008/10/asynchronous-schannel-servers.html</guid>
      <description>I&amp;rsquo;m currently working on an SChannel version of the asynchronous SSL connector code that we use to provide SSL support in The Server Framework. This will eventually be an alternative to the existing OpenSSL support that we currently provide and should prove useful for people who want a tighter integration with Microsoft&amp;rsquo;s Certificate Stores than our current OpenSSL support provides.
In many ways the SChannel version of the code is more complex to implement than the OpenSSL version as the OpenSSL SSL_CTX context object deals with data accumulation and record splitting internally; you just push bytes into it and it eventually pushes cleartext out at you.</description>
    </item>
    
    <item>
      <title>STLPort 5.1.5 and VS2008 and x64</title>
      <link>https://lenholgate.com/blog/2008/10/stlport-515-and-vs2008-and-x64.html</link>
      <pubDate>Wed, 01 Oct 2008 11:06:05 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2008/10/stlport-515-and-vs2008-and-x64.html</guid>
      <description>I&amp;rsquo;ve been meaning to build STLPort for Visual Studio 2008 for some time now but as the STL support that ships with Visual Studio has been improved the urgency to be able to use an alternative has reduced. Unfortunately STLPort 5.1.5 doesn&amp;rsquo;t build for VS2008 out of the box so it wasn&amp;rsquo;t simply a case of downloading it and building it.
Anyway, I asked a question about it on StackOverflow and got an answer which linked to a blog posting from someone who had hacked the VC8 build to work with VC9.</description>
    </item>
    
    <item>
      <title>Alternative call stack capturing</title>
      <link>https://lenholgate.com/blog/2008/09/alternative-call-stack-capturing.html</link>
      <pubDate>Thu, 25 Sep 2008 09:34:31 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2008/09/alternative-call-stack-capturing.html</guid>
      <description>I&amp;rsquo;ve just stumbled on these blog posts, by Maciej Sinilo, a game developer. He&amp;rsquo;s written a memory allocation monitoring tool and mentions that using RtlCaptureStackBackTrace() is a faster (if undocumented) way to capture a call stack. This is interesting to me as the call stack capture code in my debugging tools (deadlock detection, timeshifter, tickshifter, etc.) is pretty slow when using StackWalk64(). It&amp;rsquo;s also interesting that he seems to store and sort stacks by CRC which is similar to what I do in my tools.</description>
    </item>
    
    <item>
      <title>How does the socket server framework compare to Boost::ASIO?</title>
      <link>https://lenholgate.com/blog/2008/09/how-does-the-socket-server-framework-compare-to-boostasio.html</link>
      <pubDate>Wed, 24 Sep 2008 09:23:23 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2008/09/how-does-the-socket-server-framework-compare-to-boostasio.html</guid>
      <description>I&amp;rsquo;ve had a few questions from users and potential users of The Server Framework about how it compares to other available frameworks. One such framework is ASIO.
The first thing to realise is that The Server Framework and ASIO are very different both in design and functionality. ASIO&amp;rsquo;s strengths are that it&amp;rsquo;s cross platform, it provides low-level asynchronous I/O and that it uses a modern C++ design (i.e. lots and lots of templates and &amp;lsquo;interesting&amp;rsquo; call stacks).</description>
    </item>
    
    <item>
      <title>WM_TIMECHANGE broadcast strangeness...</title>
      <link>https://lenholgate.com/blog/2008/09/wm-timechange-broadcast-strangeness.html</link>
      <pubDate>Tue, 09 Sep 2008 18:05:03 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2008/09/wm-timechange-broadcast-strangeness.html</guid>
      <description>I&amp;rsquo;m currently writing and testing a simple class that watches for system time changes. This is to allow an app to adjust some timers that it sets for absolute times in the future if the system time changes.
The code&amp;rsquo;s fairly simple. The system automatically broadcasts a WM_TIMECHANGE message to all top level windows whenever something adjusts the system time or the time zone so all you need to do is write code that creates a hidden window and deals with the message.</description>
    </item>
    
    <item>
      <title>Log file rotation</title>
      <link>https://lenholgate.com/blog/2008/09/log-file-rotation.html</link>
      <pubDate>Fri, 05 Sep 2008 17:08:19 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2008/09/log-file-rotation.html</guid>
      <description>I&amp;rsquo;m in the process of adjusting the asynchronous file log that we use in some of our servers. The log works well and write performance is good for a variety of reasons that I deal with here. The current changes are mainly due to the fact that we have some clients who want to automatically create a new log file every so often whilst the server is running. This hasn&amp;rsquo;t been a requirement before because most of our servers don&amp;rsquo;t continually spew out log data.</description>
    </item>
    
    <item>
      <title>The perils of precompiled headers</title>
      <link>https://lenholgate.com/blog/2008/09/the-perils-of-precompiled-headers.html</link>
      <pubDate>Wed, 03 Sep 2008 11:44:03 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2008/09/the-perils-of-precompiled-headers.html</guid>
      <description>I&amp;rsquo;m working on some client code today and it&amp;rsquo;s fairly typical of most &amp;lsquo;Visual Studio Wizard generated code&amp;rsquo; in that it uses precompiled headers in a pretty poor way. The default wizard generated code seems to encourage people down a slippery slope of just including everything in stdafx.cpp and not worrying about the consequences. Of course, by the time the project is large enough for this to be a problem the damage is already done and it&amp;rsquo;s a nightmare to try and unpick the resulting problems.</description>
    </item>
    
    <item>
      <title>Connection collections</title>
      <link>https://lenholgate.com/blog/2008/09/connection-collections.html</link>
      <pubDate>Tue, 02 Sep 2008 10:30:25 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2008/09/connection-collections.html</guid>
      <description>One of the questions that comes up time and again from users of The Server Framework is &amp;ldquo;How to I access the list of current connections within the framework&amp;rdquo;. My answer is, you don&amp;rsquo;t, you build your own collection and manage it yourself. Usually these people want to write some form of chat or gateway server; client A connects to the server and needs to send data to client B who is also connected to the server.</description>
    </item>
    
    <item>
      <title>Flame on</title>
      <link>https://lenholgate.com/blog/2008/09/flame-on.html</link>
      <pubDate>Tue, 02 Sep 2008 10:02:50 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2008/09/flame-on.html</guid>
      <description>There&amp;rsquo;s an interesting post over on &amp;ldquo;Blogging Considered Harmful&amp;rdquo; about why flaming someone for incorrect technical spouting is a good thing; I tend to agree. I actually WANT people to shout down my stupidity, if they&amp;rsquo;re right and I&amp;rsquo;m wrong then hopefully I&amp;rsquo;ll learn from the exchange. If I&amp;rsquo;m right and they&amp;rsquo;re wrong then perhaps they&amp;rsquo;ll learn from it. Either way it should make both sides think; though perhaps I&amp;rsquo;m being a little naive&amp;hellip;</description>
    </item>
    
    <item>
      <title>JetByte News: New fixed-price ISO-8583 transaction server development project</title>
      <link>https://lenholgate.com/news/2008/09/new-fixed-price-iso-8583-transaction-server-development-project.html</link>
      <pubDate>Mon, 01 Sep 2008 12:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/news/2008/09/new-fixed-price-iso-8583-transaction-server-development-project.html</guid>
      <description>We&amp;rsquo;re building another ISO-8583 transaction server for PayPoint using The Server Framework.</description>
    </item>
    
    <item>
      <title>Practical Testing: 20 - Mind the gap</title>
      <link>https://lenholgate.com/blog/2008/08/practical-testing-20---mind-the-gap.html</link>
      <pubDate>Tue, 12 Aug 2008 12:44:19 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2008/08/practical-testing-20---mind-the-gap.html</guid>
      <description>Back in 2004, I wrote a series of articles called &amp;ldquo;Practical Testing&amp;rdquo; where I took a piece of complicated multi-threaded code and wrote tests for it. I then rebuild the code from scratch in a test driven development style to show how writing your tests before your code changes how you design your code. Since the original articles there have been several bug fixes and redesigns all of which have been supported by the original unit tests and many of which have led to the development of more tests.</description>
    </item>
    
    <item>
      <title>Writing testable code</title>
      <link>https://lenholgate.com/blog/2008/08/writing-testable-code.html</link>
      <pubDate>Thu, 07 Aug 2008 09:05:52 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2008/08/writing-testable-code.html</guid>
      <description>There&amp;rsquo;s a nice post by Miško Hevery over on the Google Testing Blog about Writing Testable Code. It pretty much sums up my views on testable code. Go read it!</description>
    </item>
    
    <item>
      <title>Lock free code is hard</title>
      <link>https://lenholgate.com/blog/2008/08/lock-free-code-is-hard.html</link>
      <pubDate>Wed, 06 Aug 2008 12:06:50 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2008/08/lock-free-code-is-hard.html</guid>
      <description>There&amp;rsquo;s an interesting article over on Dr. Dobb&amp;rsquo;s about why writing lock free code is so hard. Herb Sutter takes some code from an article that Dr. Dobb&amp;rsquo;s published a couple of months ago and pulls it apart and points out the problems.</description>
    </item>
    
    <item>
      <title>Documentation bug...</title>
      <link>https://lenholgate.com/blog/2008/08/documentation-bug.html</link>
      <pubDate>Wed, 06 Aug 2008 08:37:44 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2008/08/documentation-bug.html</guid>
      <description>I realised this morning that part of my &amp;ldquo;The life of a stream socket connection&amp;rdquo; document about the safe use of server callbacks in my server framework was wrong.
I said this:
At any time after a connection is established, including before you&amp;rsquo;ve had a chance to handle the connection establishment event, you might get a connection termination event.
and this:
Note that it IS possible that you could receive error, client disconnect, connection reset or connection closed events before or during the processing of the connection established callback.</description>
    </item>
    
    <item>
      <title>Practical Testing: 19 - Removing the duplicate code</title>
      <link>https://lenholgate.com/blog/2008/08/practical-testing-19---removing-the-duplicate-code.html</link>
      <pubDate>Sun, 03 Aug 2008 21:28:14 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2008/08/practical-testing-19---removing-the-duplicate-code.html</guid>
      <description>The code in the last two articles in the &amp;ldquo;Practical Testing&amp;rdquo; series have contained a considerable amount of duplication. This came about for a couple of reasons. Firstly part 17 was a bit rushed and secondly it was useful to compare the CCallbackTimerQueue implementation with the CCallbackTimerQueueEx implementation. I&amp;rsquo;m also a firm believer that in this kind of situation it&amp;rsquo;s better to get both sets of code working independently and then refactor to remove any duplication rather than attempting to design a duplicate-free solution from the start.</description>
    </item>
    
    <item>
      <title>The life of a stream socket connection</title>
      <link>https://lenholgate.com/blog/2008/08/the-life-of-a-stream-socket-connection.html</link>
      <pubDate>Sun, 03 Aug 2008 13:51:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2008/08/the-life-of-a-stream-socket-connection.html</guid>
      <description>As I mentioned here I&amp;rsquo;ve recently adjusted how socket callbacks are dispatched in The Server Framework.
Once you&amp;rsquo;ve written a TCP server or client you will find that you spend a lot of time dealing with the lifecycle of the connections that are created. You get to deal with a number of events which take place during a connections lifetime and, due to the way that the framework works, you can select just the events that interest you and ignore the rest.</description>
    </item>
    
    <item>
      <title>Latest release of licensed socket server code: 5.2.3</title>
      <link>https://lenholgate.com/blog/2008/08/latest-release-of-licensed-socket-server-code-523.html</link>
      <pubDate>Sun, 03 Aug 2008 12:25:33 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2008/08/latest-release-of-licensed-socket-server-code-523.html</guid>
      <description>The latest release of The Server Framework is now available. This release includes the following changes.
The following changes were made to the libraries.
Some whitespace changes to remove incorrect tabs. Admin Library - 5.2.3
Added a check for _WIN32_WINNT &amp;amp;gt;= 0x0600 and JETBYTE_PLATFORM_SDK_VERSION &amp;amp;lt; 0x060A as targetting Vista or later means we enable stuff that&amp;rsquo;s only available in the v6.0a Platform SDK.
Added The \ref AdminFAQ &amp;ldquo;Frequently asked project related questions&amp;rdquo; page.</description>
    </item>
    
    <item>
      <title>Practical Testing: 18 - Removing the potential to deadlock</title>
      <link>https://lenholgate.com/blog/2008/08/practical-testing-18---removing-the-potential-to-deadlock.html</link>
      <pubDate>Sat, 02 Aug 2008 12:15:23 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2008/08/practical-testing-18---removing-the-potential-to-deadlock.html</guid>
      <description>Back in 2004, I wrote a series of articles called &amp;ldquo;Practical Testing&amp;rdquo; where I took a piece of complicated multi-threaded code and wrote tests for it. I then rebuild the code from scratch in a test driven development style to show how writing your tests before your code changes how you design your code. Since then there have been various changes and fixes and redesigns all of which were made considerably easier due to the original tests.</description>
    </item>
    
    <item>
      <title>JetByte News: New fixed-price development project</title>
      <link>https://lenholgate.com/news/2008/08/new-fixed-price-development-project.html</link>
      <pubDate>Fri, 01 Aug 2008 12:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/news/2008/08/new-fixed-price-development-project.html</guid>
      <description>We&amp;rsquo;re working with VEXIS Systems Inc. to build a high performance TCP/IP server system using The Server Framework. The server provides a vendor neutral, scalable, high performance client/server framework for event monitoring, data aggregation, and backend system integration for the telephony industry.
The server provides a pluggable framework allowing each &amp;ldquo;plugin&amp;rdquo; DLL to manage its own resources with respect to various backend systems and call centre equipment.</description>
    </item>
    
    <item>
      <title>There will be a 5.2.3, or documenting leads to refactoring...</title>
      <link>https://lenholgate.com/blog/2008/07/there-will-be-a-523-or-documenting-leads-to-refactoring.html</link>
      <pubDate>Tue, 29 Jul 2008 10:08:24 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2008/07/there-will-be-a-523-or-documenting-leads-to-refactoring.html</guid>
      <description>I started to document part of The Server Framework&amp;rsquo;s behaviour as I expect that a client will be asking questions about it in the near future. Whilst writing the documents I found myself writing this:
&amp;ldquo;It&amp;rsquo;s pretty easy to deadlock The Server Framework in complex servers if you don&amp;rsquo;t abide by the rules. Unfortunately, the rules weren&amp;rsquo;t documented until now and, although I knew them, it&amp;rsquo;s probably more accurate to say &amp;ldquo;I knew of them&amp;rdquo;.</description>
    </item>
    
    <item>
      <title>Good technical blog</title>
      <link>https://lenholgate.com/blog/2008/07/good-technical-blog.html</link>
      <pubDate>Thu, 24 Jul 2008 21:52:52 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2008/07/good-technical-blog.html</guid>
      <description>I stumbled on Gustavo Duarte&amp;rsquo;s blog this week via this post about how lucky we are to be programmers.
The post that led me to his blog is good stuff and has had lots of linkage this week. The rest of the blog is also good stuff; I especially like the &amp;ldquo;Reality Driven Development&amp;rdquo; post which fits nicely with my &amp;ldquo;thin thread of functionality&amp;rdquo; way of designing software. I&amp;rsquo;ve always tended to design from the bottom up and my testing addiction has fuelled that somewhat; but I do still like to pop up to the surface on regular intervals and then drill down with a &amp;lsquo;spike&amp;rsquo; of throw away code to make sure that the stuff that I&amp;rsquo;m building properly is actually what we need to build.</description>
    </item>
    
    <item>
      <title>Server shutdown in 5.2.1 and 5.2.2</title>
      <link>https://lenholgate.com/blog/2008/07/server-shutdown-in-521-and-522.html</link>
      <pubDate>Wed, 23 Jul 2008 14:10:17 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2008/07/server-shutdown-in-521-and-522.html</guid>
      <description>There was a change in release 5.2.1 of The Server Framework which has caused some issues with clean shutdown. This issue is also present in 5.2.2.
Prior to 5.2.1 the CSocketServer or equivalent object that did the bulk of the work with regards to connections could be destroyed whilst there were sockets that it managed still in existence. This wasn&amp;rsquo;t usually a problem but it meant that it was possible for a socket to make a callback to code that didn&amp;rsquo;t exist anymore; which is a Bad Thing.</description>
    </item>
    
    <item>
      <title>Memory leak in licensed socket server code</title>
      <link>https://lenholgate.com/blog/2008/07/memory-leak-in-licensed-socket-server-code.html</link>
      <pubDate>Wed, 23 Jul 2008 08:23:49 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2008/07/memory-leak-in-licensed-socket-server-code.html</guid>
      <description>Well, of course, the day after I released the 5.2.2 version of The Server Framework I get a bug report from a client using 5.2.1 listing a couple of memory leaks. One of them fixed in 5.2.2 and one not.
The leak that survived 5.2.2 is in CReadSequencingStreamSocketConnectionFilter::FilterSocketReleased() which currently looks like:
void CReadSequencingStreamSocketConnectionFilter::FilterSocketReleased( IIndexedOpaqueUserData &amp;amp;userData) { delete userData.GetUserPointer(m_userDataIndex); } and which should look like:
void CReadSequencingStreamSocketConnectionFilter::FilterSocketReleased( IIndexedOpaqueUserData &amp;amp;userData) { CInOrderBufferList *pBuffers = *reinterpret_cast&amp;lt;CInOrderBufferList *&amp;gt;(socket.</description>
    </item>
    
    <item>
      <title>Latest release of licensed socket server code: 5.2.2</title>
      <link>https://lenholgate.com/blog/2008/07/latest-release-of-licensed-socket-server-code-522.html</link>
      <pubDate>Mon, 21 Jul 2008 12:45:41 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2008/07/latest-release-of-licensed-socket-server-code-522.html</guid>
      <description>The latest release of The Server Framework is now available. This release includes the following changes.
This is the first release built using Compuware BoundsChecker and there have been some resource leaks fixed. The following changes were made to the libraries.
Admin Library - 5.2.2
Added JETBYTE_MINIMUM_SUPPORTED_WINDOWS_VERSION and JETBYTE_MINIMUM_SUPPORTED_NTDDI_VERSION to Admin.h. These are currently set to _WIN32_WINNT_WIN2K and NTDDI_WIN2K.
Added JETBYTE_PLATFORM_SDK_VERSION which you can use to tell the libraries which version of the Platform SDK you&amp;rsquo;re using.</description>
    </item>
    
    <item>
      <title>Write completion flow control</title>
      <link>https://lenholgate.com/blog/2008/07/write-completion-flow-control.html</link>
      <pubDate>Sun, 06 Jul 2008 10:31:03 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2008/07/write-completion-flow-control.html</guid>
      <description>I&amp;rsquo;ve finished the write completion driven outbound data flow control connection filter that I started work on a while ago. This provides a way to deal with the problem of having more data to send to a client than the client can receive within a reasonable time. Rather than simply continuing to send and building up a massive amount of buffered data in the TCP/IP stack the connection filter keeps track of write completions and begins to buffer data for you when there are &amp;rsquo;too many&amp;rsquo; write operations outstanding.</description>
    </item>
    
    <item>
      <title>Managed XLL Excel Addins</title>
      <link>https://lenholgate.com/blog/2008/06/managed-xll-excel-addins.html</link>
      <pubDate>Wed, 25 Jun 2008 08:55:20 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2008/06/managed-xll-excel-addins.html</guid>
      <description>Back in December and January I was working on the initial phases of a system to allow the development of custom Excel worksheet functions in managed code using the Excel XLL &amp;lsquo;C&amp;rsquo; interface (Excel4v). Phase 1 finished with us having a pretty workable system that the client could go live with. The only problem was that we skipped the key ease of use part of the project due to time and budget constraints.</description>
    </item>
    
    <item>
      <title>High throughput, low latency</title>
      <link>https://lenholgate.com/blog/2008/06/high-throughput-low-latency.html</link>
      <pubDate>Wed, 25 Jun 2008 08:28:50 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2008/06/high-throughput-low-latency.html</guid>
      <description>As I said in my recent posting about Data Distribution Servers, &amp;ldquo;Next on the list is writing a more focused server and clients.&amp;rdquo;. Tick.
I started out by writing the data feed. This was a simplified version of the echo server test harness that I&amp;rsquo;d extended to use a controllable TCP receive window. The data feed is just a client that generates random data in packets that have simple header, length, sequence number, type and sends it to the server that it&amp;rsquo;s connected to.</description>
    </item>
    
    <item>
      <title>The mounted file system does not support extended attributes...</title>
      <link>https://lenholgate.com/blog/2008/06/the-mounted-file-system-does-not-support-extended-attributes.html</link>
      <pubDate>Tue, 24 Jun 2008 09:49:33 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2008/06/the-mounted-file-system-does-not-support-extended-attributes.html</guid>
      <description>I really really really hate the error that I sometimes get when trying to copy a file from my Vista box to my NAS: &amp;ldquo;The mounted file system does not support extended attributes&amp;rdquo;. With the options to &amp;ldquo;Try again&amp;rdquo; or cancel. I suppose the &amp;ldquo;Try again&amp;rdquo; option is just in case the mounted file system changes its mind or the file somehow decides that the extended attributes that it&amp;rsquo;s somehow acquired aren&amp;rsquo;t actually required&amp;hellip;</description>
    </item>
    
    <item>
      <title>Data distribution servers</title>
      <link>https://lenholgate.com/blog/2008/06/data-distribution-servers.html</link>
      <pubDate>Tue, 17 Jun 2008 20:09:28 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2008/06/data-distribution-servers.html</guid>
      <description>Many of the servers that are built with The Server Framework are for high number of connections and low data flow situations and as such that&amp;rsquo;s where the focus has been on the framework development and testing. As I&amp;rsquo;ve shown in the past, we can easily deal with 70,000 concurrent connections with various real world traffic flow patterns and have various test tools that can stress these kinds of servers. As importantly it&amp;rsquo;s easy to place a limit on the number of connections that a server can handle so as to protect the server (and other processes on the same machine) from resource limits (such a non-paged pool exhaustion).</description>
    </item>
    
    <item>
      <title>Another ISO 8583 transaction server</title>
      <link>https://lenholgate.com/blog/2008/06/another-iso-8583-transaction-server.html</link>
      <pubDate>Tue, 03 Jun 2008 13:11:37 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2008/06/another-iso-8583-transaction-server.html</guid>
      <description>It has been a busy couple of weeks for me. I&amp;rsquo;ve been working on an ISO 8583 based transaction server for a client and I set myself some fairly tight deadlines. I actually developed the first version of The Server Framework for another ISO 8583 transaction server that I developed for this client back in 2002. It&amp;rsquo;s interesting to look back at the original code and see how the framework has evolved (see here for the latest version), it&amp;rsquo;s also nice to know that the first server is still running nicely and providing customers with the ability to top up their pay as you go mobile phones at PayPoint outlets.</description>
    </item>
    
    <item>
      <title>More on the CLR startup change</title>
      <link>https://lenholgate.com/blog/2008/05/more-on-the-clr-startup-change.html</link>
      <pubDate>Tue, 06 May 2008 15:37:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2008/05/more-on-the-clr-startup-change.html</guid>
      <description>Last week I mentioned that some of my tests for my Win32 Debug API class had suddenly started failing. It seems that I was right and the changes are due to some .Net fixes that have been rolled out recently. The code runs and the tests pass if I run on a clean instal Vista x64 VM and fail on my day to day development box.
It seems that my plan to &amp;ldquo;stick a breakpoint in mscoree.</description>
    </item>
    
    <item>
      <title>Interesting blog</title>
      <link>https://lenholgate.com/blog/2008/05/interesting-blog.html</link>
      <pubDate>Tue, 06 May 2008 12:30:51 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2008/05/interesting-blog.html</guid>
      <description>I found JP&amp;rsquo;s blog whilst googling for some information on RVA forwarders in PE files. There&amp;rsquo;s lots of good stuff there about reasonably low level Windows development, debugging, testing and API hooking. Recommended if you like the kind of stuff that I write about.
In addition to the blog postings JP has produced cfix a unit testing framework for C++. I haven&amp;rsquo;t had a chance to look at it too deeply yet, but the documentation looks good and the source is available from SourceForge under the GPL.</description>
    </item>
    
    <item>
      <title>WOW64 Win32 DebugAPI CLR application startup change</title>
      <link>https://lenholgate.com/blog/2008/05/wow64-win32-debugapi-clr-application-startup-change.html</link>
      <pubDate>Thu, 01 May 2008 16:43:42 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2008/05/wow64-win32-debugapi-clr-application-startup-change.html</guid>
      <description>Back in October 2007 I sumarised my findings from getting my Win32 DebugAPI based debug engine working on x64. One of the strange things that I found at the time was this:
When running a CLR app under the Win32 debug interface you only ever seem to hit the native entry point if you&amp;rsquo;re running under WOW64. In all other situations you don&amp;rsquo;t hit the native entry point ever. If you rely on it to pause your debug tools once the process is completely loaded and ready to roll then you need to stick a break point in _CorExeMain in mscoree.</description>
    </item>
    
    <item>
      <title>Socket connection termination</title>
      <link>https://lenholgate.com/blog/2008/04/socket-connection-termination.html</link>
      <pubDate>Mon, 28 Apr 2008 18:05:49 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2008/04/socket-connection-termination.html</guid>
      <description>I&amp;rsquo;ve been putting together a sample server for a client that shows how to cleanly terminate a socket connection. This should have been a simple thing to do, but in doing so I&amp;rsquo;ve discovered some gnarlyness within The Server Framework and the result has been some new TODO items for the 5.3 release&amp;hellip;
When you have an active TCP/IP connection that you wish to terminate cleanly you need to initiate a TCP/IP protocol level shutdown sequence by calling shutdown().</description>
    </item>
    
    <item>
      <title>Spam gone...</title>
      <link>https://lenholgate.com/blog/2008/04/spam-gone.html</link>
      <pubDate>Thu, 24 Apr 2008 08:52:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2008/04/spam-gone.html</guid>
      <description>The endless torrent of bounce messages began again yesterday evening. Once again it was arount one email every 2 minutes or so. I turned on my laptop this morning expecting a few thousand emails to download and only a third of them to be correctly classified as spam by Outlook&amp;hellip; There were a few, but, probably, under 10. There was no other spam either&amp;hellip; Two legitimate email messages&amp;hellip; It was, well, rather strange.</description>
    </item>
    
    <item>
      <title>Spam problems</title>
      <link>https://lenholgate.com/blog/2008/04/spam-problems.html</link>
      <pubDate>Mon, 21 Apr 2008 08:14:10 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2008/04/spam-problems.html</guid>
      <description>This morning a spammer somewhere seems to have used my main email address as the return address on a whole bunch of random spam that has been sent out from all over the place. As such I have around 3000 undeliverable mail responses flowing into my in box. No doubt this will now have knock on effects with ISPs who use DNSLB type systems as my domain is being used by spammers again.</description>
    </item>
    
    <item>
      <title>Comments, captcha and blacklist...</title>
      <link>https://lenholgate.com/blog/2008/04/comments-captcha-and-blacklist.html</link>
      <pubDate>Thu, 17 Apr 2008 17:40:51 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2008/04/comments-captcha-and-blacklist.html</guid>
      <description>I&amp;rsquo;ve turned the blacklist back on. I turned it off yesterday and have had a couple of spam comments get through. The blacklist itself doesn&amp;rsquo;t always catch the spam comments but it does give me a one click method of removing them. With it turned off I lose the easy removal.
If your comment is refused you should get a message telling you why; the reason is logged, but, unfortunately the full comment txt isn&amp;rsquo;t.</description>
    </item>
    
    <item>
      <title>What would I do??</title>
      <link>https://lenholgate.com/blog/2008/04/what-would-i-do.html</link>
      <pubDate>Tue, 15 Apr 2008 22:24:52 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2008/04/what-would-i-do.html</guid>
      <description>There&amp;rsquo;s an entry over on the Dr. Dobbs blog about testing and how you make sure that your tests are testing the right thing; effectively, who tests the test. There&amp;rsquo;s a question at the end &amp;ldquo;What do you do?&amp;rdquo; and I think my rather pithy, I&amp;rsquo;ve had some wine, answer is, &amp;ldquo;I think harder&amp;rdquo;.
The poster laments the fact that if you&amp;rsquo;re doing TDD then the test fails first and then you write the code and then it works and therefore you know the test is testing the correct thing but if you have existing code then, well, it doesn&amp;rsquo;t work that way.</description>
    </item>
    
    <item>
      <title>PQR - A Simple Design Pattern for Multicore Enterprise Applications</title>
      <link>https://lenholgate.com/blog/2008/04/pqr---a-simple-design-pattern-for-multicore-enterprise-applications.html</link>
      <pubDate>Mon, 14 Apr 2008 17:44:36 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2008/04/pqr---a-simple-design-pattern-for-multicore-enterprise-applications.html</guid>
      <description>There&amp;rsquo;s an interesting article over on the Dr. Dobbs Code Talk blog; PQR - A Simple Design Pattern for Multicore Enterprise Applications. It documents a design that I&amp;rsquo;m pretty familiar with and one which has worked pretty well for me in the past (this project was built in this way, for example).
My variation on this idea is that it all tends to be in one process. Work items are passed from one &amp;lsquo;processor&amp;rsquo; to another via queues and each processor can run multiple threads to process multiple work items in parallel.</description>
    </item>
    
    <item>
      <title>Practical Testing: 17 - A whole new approach</title>
      <link>https://lenholgate.com/blog/2008/04/practical-testing-17---a-whole-new-approach.html</link>
      <pubDate>Wed, 09 Apr 2008 18:54:51 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2008/04/practical-testing-17---a-whole-new-approach.html</guid>
      <description>The comments to my last practical testing entry got me thinking. The commenter who had located the bug in part 15, which was fixed in part 16, suggested a new approach to the problem and I&amp;rsquo;ve been investigating it.
The suggestion is, essentially, to use a timer with a longer range before roll-over rather than GetTickCount() with its 49.7 day roll-over. In Vista and later we could just use GetTickCount64() but on earlier platforms that&amp;rsquo;s not available to us.</description>
    </item>
    
    <item>
      <title>It seems I&#39;m not the only one...</title>
      <link>https://lenholgate.com/blog/2008/04/it-seems-im-not-the-only-one.html</link>
      <pubDate>Mon, 07 Apr 2008 19:05:03 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2008/04/it-seems-im-not-the-only-one.html</guid>
      <description>It seems I&amp;rsquo;m not the only one to make mistakes with GetTickCount() based timer code, see: System.Threading.Timer fires immediately when specifying a large value for due time.</description>
    </item>
    
    <item>
      <title>Practical Testing: 16 - Fixing a timeout bug</title>
      <link>https://lenholgate.com/blog/2008/04/practical-testing-16---fixing-a-timeout-bug.html</link>
      <pubDate>Fri, 04 Apr 2008 10:28:39 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2008/04/practical-testing-16---fixing-a-timeout-bug.html</guid>
      <description>Back in 2004, I wrote a series of articles called &amp;ldquo;Practical Testing&amp;rdquo; where I took a piece of complicated multi-threaded code and wrote tests for it. I then rebuild the code from scratch in a test driven development style to show how writing your tests before your code changes how you design your code. Then, in 2005, I adjusted the code to be more scalable and I showed how the tests that had originally been written helped when code needed to be changed for performance purposes.</description>
    </item>
    
    <item>
      <title>And then there were three...</title>
      <link>https://lenholgate.com/blog/2008/03/and-then-there-were-three.html</link>
      <pubDate>Sat, 22 Mar 2008 08:53:27 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2008/03/and-then-there-were-three.html</guid>
      <description>This morning a new Ready NAS NV+ unit arrived, so now I have three. I didn&amp;rsquo;t have a sudden change of heart about buying a development box, the power supply in my office NAS died on Thursday afternoon and buying a new, bare, enclosure was the quickest way to get my existing disks back online.
However, once I get the faulty until returned from repair I&amp;rsquo;ll have a unit that I could develop on&amp;hellip;</description>
    </item>
    
    <item>
      <title>ReadyNAS development...</title>
      <link>https://lenholgate.com/blog/2008/03/readynas-development.html</link>
      <pubDate>Tue, 18 Mar 2008 09:22:46 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2008/03/readynas-development.html</guid>
      <description>As I mentioned a while back I&amp;rsquo;m using a pair of ReadyNAS NV+ RAID systems as my on-site data store and off-site backup. These are both working well and I&amp;rsquo;m pleased with the solution. After a few hickups and delays due to the Netgear takeover of Infrant it seems that the firmware is developing nicely again and the latest thing that I&amp;rsquo;ve discovered is that you can now develop and deploy your own code to the devices (if you&amp;rsquo;re brave enough!</description>
    </item>
    
    <item>
      <title>Bug in timer queue code</title>
      <link>https://lenholgate.com/blog/2008/03/bug-in-timer-queue-code.html</link>
      <pubDate>Tue, 18 Mar 2008 09:15:18 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2008/03/bug-in-timer-queue-code.html</guid>
      <description>Whilst I&amp;rsquo;ve been away I&amp;rsquo;ve had a bug report for the TDD timer queue code that&amp;rsquo;s available here. The report is completely correct and could result in a timer being scheduled out of sequence if it&amp;rsquo;s scheduled around the point when GetTickCount() wraps. I&amp;rsquo;ve coded up a fix but I need to write it up and post it. It may take me a while to do this as I have a lot going on in my life at present, if you need the fix sooner then drop me a mail.</description>
    </item>
    
    <item>
      <title>Back from Skiing...</title>
      <link>https://lenholgate.com/blog/2008/03/back-from-skiing.html</link>
      <pubDate>Tue, 18 Mar 2008 09:12:39 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2008/03/back-from-skiing.html</guid>
      <description>I&amp;rsquo;ve been away skiing for a couple of weeks in Davos and St. Anton, the snow was pretty good in both places but Davos won out as a more civilised skiing experience. St. Anton was just too busy for me, I&amp;rsquo;m getting fussy in my old age ;). The situation in St. Anton wasn&amp;rsquo;t helped by the fact that when we arrived the off-piste was all a bit crunchy and skied out which meant that most people stayed on piste and then we had a big three day storm that kept the high lifts and links shut and meant that several of the accessible off piste routes were unadvisable due to avalanche risk.</description>
    </item>
    
    <item>
      <title>.Net Abstract base classes vs. interfaces</title>
      <link>https://lenholgate.com/blog/2008/02/net-abstract-base-classes-vs-interfaces.html</link>
      <pubDate>Thu, 21 Feb 2008 13:20:47 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2008/02/net-abstract-base-classes-vs-interfaces.html</guid>
      <description>An interesting piece here from Phil Haack about why they decided to use an abstract base class rather than an interface.
Versioning is always a complicated thing for library designers. I know that I&amp;rsquo;m lucky in that I don&amp;rsquo;t have a gazillion users of my libraries so I tend to make breaking changes rather than build up technical debt in the name of backwards compatibility but I&amp;rsquo;ve worked on software where we couldn&amp;rsquo;t do that and where binary compatibility was important.</description>
    </item>
    
    <item>
      <title>When are asynchronous file writes not asynchronous...</title>
      <link>https://lenholgate.com/blog/2008/02/when-are-asynchronous-file-writes-not-asynchronous.html</link>
      <pubDate>Wed, 20 Feb 2008 09:51:41 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2008/02/when-are-asynchronous-file-writes-not-asynchronous.html</guid>
      <description>For some time I&amp;rsquo;ve had a class which implements asynchronous file writing. It&amp;rsquo;s the basis for a logging class that some of my clients use. The class builds on several of the classes in The Server Framework and uses I/O Completion Ports and a thread pool to manage the overlapped I/O. Due to the way that I structure my servers you can often share the I/O pool that you use for your overlapped log writes with the pool that deals with the socket I/O.</description>
    </item>
    
    <item>
      <title>Latest release of licensed socket server code: 5.2.1</title>
      <link>https://lenholgate.com/blog/2008/02/latest-release-of-licensed-socket-server-code-521.html</link>
      <pubDate>Mon, 18 Feb 2008 11:17:17 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2008/02/latest-release-of-licensed-socket-server-code-521.html</guid>
      <description>The latest release of The Server Framework is now available. This release includes the following changes.
All code now builds with VC6, VS2002, VS2003, VS2005 and VS2008. The VS2005 and VS2008 builds support x86 and x64.
This is the first release built using continuous integration and there have been some project file fixes to fix incorrect output directories, etc so that x64 and x86 builds can be done in complete isolation.</description>
    </item>
    
    <item>
      <title>Major Vista Overlapped I/O change</title>
      <link>https://lenholgate.com/blog/2008/02/major-vista-overlapped-io-change.html</link>
      <pubDate>Mon, 18 Feb 2008 08:17:29 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2008/02/major-vista-overlapped-io-change.html</guid>
      <description>I&amp;rsquo;m still reading the Richter book, highly recommended even if you&amp;rsquo;ve read one of the earlier versions. In fact it&amp;rsquo;s possibly MORE highly recommended IF you&amp;rsquo;ve read one of the earlier versions&amp;hellip; It seems that lots of things have changed a little, and some things have changed a lot. Unfortunately the book doesn&amp;rsquo;t detail the actual changes. Note to publishers; I&amp;rsquo;d PAY for a slim book that DOES detail the changes between the APIs that are being discussed&amp;hellip;</description>
    </item>
    
    <item>
      <title>Process management using Jobs on Windows</title>
      <link>https://lenholgate.com/blog/2008/02/process-management-using-jobs-on-windows.html</link>
      <pubDate>Thu, 14 Feb 2008 09:25:17 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2008/02/process-management-using-jobs-on-windows.html</guid>
      <description>One of the problems I currently have with CruiseControl.Net is that some of my tests spawn multiple processes; such as server tests which run the development environment, which runs a batch file to start a server (or two) and then run a test harness which generates network traffic and then run a program to ask the server to shutdown cleanly. When these tests timeout in CC.Net they&amp;rsquo;re forcibly killed. Unfortunately due to how Windows processes work, killing the parent of a tree of processes doesn&amp;rsquo;t kill the children.</description>
    </item>
    
    <item>
      <title>Another CCNet patch</title>
      <link>https://lenholgate.com/blog/2008/02/another-ccnet-patch.html</link>
      <pubDate>Mon, 11 Feb 2008 18:02:03 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2008/02/another-ccnet-patch.html</guid>
      <description>Here is another patch for CruiseControl.Net. This patch provides support for a Robocopy SourceControl provider. This gives a significant performance increase over the FileSystem SourceControl provider. To integrate this I needed to adjust how CCNet determined if an executable had succeeded, it used to rely on the exit code of the executable being 0 to indicate success, but Robocopy is more complex than that.
ProcessExecution-MultipleSuccessExitCodes-Patch.txt
And here are the source files and test harness for the robocopy source control provider.</description>
    </item>
    
    <item>
      <title>Currently Reading: Windows via C/C&#43;&#43;</title>
      <link>https://lenholgate.com/blog/2008/02/currently-reading-windows-via-cc.html</link>
      <pubDate>Mon, 11 Feb 2008 08:33:46 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2008/02/currently-reading-windows-via-cc.html</guid>
      <description>I&amp;rsquo;ve just picked up a copy of Windows Via C/C++ (PRO-Developer) by Jeffrey Richter and Christophe Nasarre. This is &amp;lsquo;version 5&amp;rsquo; of the book that started out as Advanced Windows NT (Advanced Windows). The book has been updated for Windows Vista and other changes that have happened since the last version, Programming Applications for Windows (Microsoft Programming Series).
I&amp;rsquo;ve decided to read it from cover to cover to refresh my knowledge and pick up on any changes.</description>
    </item>
    
    <item>
      <title>CC.Net and Robocopy</title>
      <link>https://lenholgate.com/blog/2008/02/ccnet-and-robocopy.html</link>
      <pubDate>Sat, 02 Feb 2008 13:15:03 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2008/02/ccnet-and-robocopy.html</guid>
      <description>I&amp;rsquo;m continuing to tune my continuous integration system. Today I switched the &amp;lsquo;deploy&amp;rsquo; projects from using a CC.Net file system source control task to do the deployment to using Robocopy. This has sped things up nicely and made the deployments more configurable. One problem that I had was that the CC.Net &amp;ldquo;executable&amp;rdquo; task (the one that lets you run arbitrary executables) assumed that only exit codes of 0 were &amp;lsquo;success&amp;rsquo; and Robocopy has a more complex strategy for exit codes (see here).</description>
    </item>
    
    <item>
      <title>CC.Net File System Source Control speed up</title>
      <link>https://lenholgate.com/blog/2008/02/ccnet-file-system-source-control-speed-up.html</link>
      <pubDate>Fri, 01 Feb 2008 11:22:16 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2008/02/ccnet-file-system-source-control-speed-up.html</guid>
      <description>Yesterday I mentioned that the file system source control provider in CC.Net was a little inefficient. I speculated as to how it might be working and how it might be improved. Well, as the saying goes, assume makes an ass out of you and me&amp;hellip;
The file system source control provider is actually far far simpler than I expected. It scans the &amp;lsquo;repository&amp;rsquo; file system tree and simply looks for files that have been written to since the last check.</description>
    </item>
    
    <item>
      <title>Living with continuous integration</title>
      <link>https://lenholgate.com/blog/2008/01/living-with-continuous-integration.html</link>
      <pubDate>Thu, 31 Jan 2008 08:48:34 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2008/01/living-with-continuous-integration.html</guid>
      <description>Well, it&amp;rsquo;s about a month since I started running Cruise Control .Net and things have settled down somewhat now and I can almost go a day or two without tweaking my configuration or being tempted to fix issues in Cruise Control itself.
For those of you that haven&amp;rsquo;t been following along:
First I realised that the latest (1.3) release of Cruise Control .Net wouldn&amp;rsquo;t work for me without some hacking.</description>
    </item>
    
    <item>
      <title>Coding the markets</title>
      <link>https://lenholgate.com/blog/2008/01/coding-the-markets.html</link>
      <pubDate>Thu, 31 Jan 2008 08:33:20 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2008/01/coding-the-markets.html</guid>
      <description>Barry (who seems to have stopped blogging) recommended this blog to me; Coding The Markets. It&amp;rsquo;s pretty good if you&amp;rsquo;re into investment banking development stuff.</description>
    </item>
    
    <item>
      <title>DNSBL - again...</title>
      <link>https://lenholgate.com/blog/2008/01/dnsbl---again.html</link>
      <pubDate>Tue, 15 Jan 2008 12:07:40 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2008/01/dnsbl---again.html</guid>
      <description>If Richard Wolff is reading this then I can&amp;rsquo;t reply to your emails as your ISP is bouncing my emails with this:
`Hi. This is the qmail-send program at ns.mgf4.net.
I&amp;rsquo;m afraid I wasn&amp;rsquo;t able to deliver your message to the following addresses.
This is a permanent error; I&amp;rsquo;ve given up. Sorry it didn&amp;rsquo;t work out.
Connected to 207.115.36.23 but sender was rejected.
Remote host said: 553 5.3.0 nlpi100,DNSBL:To request removal of, 69.</description>
    </item>
    
    <item>
      <title>CruiseControl.Net patches</title>
      <link>https://lenholgate.com/blog/2008/01/cruisecontrolnet-patches.html</link>
      <pubDate>Mon, 14 Jan 2008 14:25:19 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2008/01/cruisecontrolnet-patches.html</guid>
      <description>Hacking CruiseControl.Net to work better for my specific circumstances (lots of projects that depend on lots of projects) has resulted in the following patches to revision 3607 of ccnet which I&amp;rsquo;m just about to submit to the developers.
These patches are &amp;lsquo;supporting patches&amp;rsquo; to the main ProjectTrigger and integrator changes, I thought I&amp;rsquo;d start with the simple ones&amp;hellip; None of these patches should change existing functionality, all require new, optional, properties to be specified to activate the new code.</description>
    </item>
    
    <item>
      <title>Potential deadlock bug in free socket server framework</title>
      <link>https://lenholgate.com/blog/2008/01/potential-deadlock-bug-in-free-socket-server-framework.html</link>
      <pubDate>Sat, 12 Jan 2008 13:19:05 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2008/01/potential-deadlock-bug-in-free-socket-server-framework.html</guid>
      <description>The free version of the socket server framework contained code that could cause a deadlock during connection closure if you also have a lock in your derived class.
There&amp;rsquo;s a lock taken out in CSocketServer::Socket::IsValid() that isn&amp;rsquo;t really required and which can cause a deadlock if you have your own lock in your derived class which you lock in OnConnectionReset() or other server callbacks and which is also locked when you call into the framework via Write() or other calls.</description>
    </item>
    
    <item>
      <title>New release of free Socket Server framework</title>
      <link>https://lenholgate.com/blog/2008/01/new-release-of-free-socket-server-framework.html</link>
      <pubDate>Thu, 10 Jan 2008 15:13:56 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2008/01/new-release-of-free-socket-server-framework.html</guid>
      <description>There&amp;rsquo;s a new release of The Server Framework&amp;rsquo;s Free Framework, here. This includes the bug fix that was mentioned here.</description>
    </item>
    
    <item>
      <title>How important is VC6 to you now?</title>
      <link>https://lenholgate.com/blog/2008/01/how-important-is-vc6-to-you-now.html</link>
      <pubDate>Thu, 10 Jan 2008 09:23:40 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2008/01/how-important-is-vc6-to-you-now.html</guid>
      <description>I&amp;rsquo;m working on the next releases of The Server Framework, and I now have continuous integration (of a sort) so my build and test problems are being minimised&amp;hellip; BUT&amp;hellip; Keeping Visual Studio 6 support in the framework is becoming a bit of a mission. It&amp;rsquo;s mostly simple template stuff that fails but I find that I keep having to work around VC6 issues.
I&amp;rsquo;m proposing to drop VC6 support from version 5.</description>
    </item>
    
    <item>
      <title>Socket write sequencing memory leak bug in free version of socket server framework</title>
      <link>https://lenholgate.com/blog/2008/01/socket-write-sequencing-memory-leak-bug-in-free-version-of-socket-server-framework.html</link>
      <pubDate>Thu, 10 Jan 2008 09:14:01 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2008/01/socket-write-sequencing-memory-leak-bug-in-free-version-of-socket-server-framework.html</guid>
      <description>I&amp;rsquo;ve been tracking a bug for a client recently and yesterday I got a remarkably similar bug report from one of the users of my free socket server framework. The client&amp;rsquo;s code is pretty old and was originally based on a server framework that was based on the free version of the code and it hasn&amp;rsquo;t been upgraded to the latest version yet. The bug in my client code is also present in the latest (Feb 14 2006) version of the free socket server framework - found here.</description>
    </item>
    
    <item>
      <title>Currently reading: Excel add-in development in C/C&#43;&#43;</title>
      <link>https://lenholgate.com/blog/2008/01/currently-reading-excel-add-in-development-in-cc.html</link>
      <pubDate>Wed, 09 Jan 2008 09:57:37 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2008/01/currently-reading-excel-add-in-development-in-cc.html</guid>
      <description>As I mentioned a while back, I&amp;rsquo;m writing a managed XLL style add-in system for Excel for one of my clients at the moment. This is going pretty well, most of the custom marshalling code is now done and we can write code in C# and expose it to Excel as worksheet functions.
Over Christmas I picked up a copy of Excel Add-in Development in C/C++: Applications in Finance by Steve Dalton.</description>
    </item>
    
    <item>
      <title>Local project trigger...</title>
      <link>https://lenholgate.com/blog/2008/01/local-project-trigger.html</link>
      <pubDate>Fri, 04 Jan 2008 18:45:31 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2008/01/local-project-trigger.html</guid>
      <description>I hacked another fix into CruiseControl.Net today and we now almost have an acceptable level of performance in my particular (some may say warped) circumstances. The trick was to hack the project trigger to be a &amp;ldquo;local project&amp;rdquo; trigger. By default the project trigger uses .Net remoting to talk to the CruiseControl.Net server where the project is hosted. In my case this meant that all of my project triggers (and there are lots!</description>
    </item>
    
    <item>
      <title>Thread.Sleep(100); // sleep for a short while, to avoid hammering CPU</title>
      <link>https://lenholgate.com/blog/2008/01/threadsleep100-sleep-for-a-short-while-to-avoid-hammering-cpu.html</link>
      <pubDate>Thu, 03 Jan 2008 22:41:20 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2008/01/threadsleep100-sleep-for-a-short-while-to-avoid-hammering-cpu.html</guid>
      <description>I am intending to check out some of the other build servers that people have been suggesting, but today I was too busy with real work so I just left a cut down version of my latest CruiseControl.Net configuration running on one of my boxes and fixed a few issues whilst doing proper work most of the time&amp;hellip; This evening I decided to go and look at why CruiseControl.Net scales so poorly and the first issue that I came across is the title of this blog posting&amp;hellip;</description>
    </item>
    
    <item>
      <title>More Cruise Control .Net woes</title>
      <link>https://lenholgate.com/blog/2008/01/more-cruise-control-net-woes.html</link>
      <pubDate>Wed, 02 Jan 2008 18:46:34 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2008/01/more-cruise-control-net-woes.html</guid>
      <description>I&amp;rsquo;ve almost got something that works out of CruiseControl.Net. Once I&amp;rsquo;d hacked in some fixes for the project triggers and other stuff that didn&amp;rsquo;t work the way I wanted it to I concentrated on generating the config files that I required and testing the system.
The good news is that I now have an integration system that works, it can build, test and deploy libraries in such a way that dependent libraries and applications are rebuilt as new versions of deployed artifacts become available.</description>
    </item>
    
    <item>
      <title>Fighting with CruiseControl.Net...</title>
      <link>https://lenholgate.com/blog/2007/12/fighting-with-cruisecontrolnet.html</link>
      <pubDate>Fri, 21 Dec 2007 21:55:06 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2007/12/fighting-with-cruisecontrolnet.html</guid>
      <description>I&amp;rsquo;ve been trying to get my code to build with CruiseControl.Net this week. It&amp;rsquo;s taken longer than I&amp;rsquo;d hoped, but I&amp;rsquo;m almost there. It became easier when I switched from assuming various parts of CruiseControl.Net would &amp;ldquo;work as I expected them to&amp;rdquo; to assuming that I&amp;rsquo;d have to delve into the source and change things&amp;hellip;
On the whole I&amp;rsquo;m a bit disappointed in CruiseControl.Net. I&amp;rsquo;m sure it works very nicely for simple situations, such as where you pull everything out of your repository and build it with a single project, but, when you&amp;rsquo;re trying to do more complex things it seems to be a bit fragile.</description>
    </item>
    
    <item>
      <title>CruiseControl.Net</title>
      <link>https://lenholgate.com/blog/2007/12/cruisecontrolnet.html</link>
      <pubDate>Tue, 18 Dec 2007 17:11:29 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2007/12/cruisecontrolnet.html</guid>
      <description>I&amp;rsquo;m currently working on two new releases of The Server Framework, the first is a simple release to add support for VS2008 and the second is the next &amp;ldquo;feature&amp;rdquo; release. Due to the number of projects and example servers and supported compilers that I test with it can take some time to finalise a release; each example server has to be checked out, built in each build configuration with each supported compiler and then the tests need to be run&amp;hellip; Last time I did this I had planned to put aside some time to sort out an automatic build to do it for me, this time I might actually do it&amp;hellip;</description>
    </item>
    
    <item>
      <title>Performance counter mismatch detection</title>
      <link>https://lenholgate.com/blog/2007/12/performance-counter-mismatch-detection.html</link>
      <pubDate>Thu, 13 Dec 2007 23:21:59 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2007/12/performance-counter-mismatch-detection.html</guid>
      <description>One of the problems with iterative development of servers that include performance counters is that it&amp;rsquo;s quite easy for the counters that are installed on a machine to get out of sync with the counters that the server is actually compiled to use. As development progresses and new counters are added the counter dll needs to be uninstalled and then reinstalled so that the text strings associated with the counters remain in sync.</description>
    </item>
    
    <item>
      <title>Secure code on vista only for &#39;enterprise&#39; developers?</title>
      <link>https://lenholgate.com/blog/2007/12/secure-code-on-vista-only-for-enterprise-developers.html</link>
      <pubDate>Thu, 13 Dec 2007 22:02:59 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2007/12/secure-code-on-vista-only-for-enterprise-developers.html</guid>
      <description>I picked up a book yesterday, Writing Secure Code for Windows Vista. Which seemed quite interesting, and was a nice slim volume that would slip into my hand luggage for my flight to Geneva on Friday night (yay first ski weekend of the season!). I&amp;rsquo;ve been flicking through it this evening and was interested in the &amp;ldquo;Standard Annotation Language&amp;rdquo; (SAL) for annotating unmanaged functions that muck around with memory buffers, it looked like a potentially easy adjustment to The Server Framework code which would possibly improve security and usability&amp;hellip; Unfortunately it seems that SAL is only operational when you run with the /analyze compiler switch and that&amp;rsquo;s only available if you&amp;rsquo;re running an &amp;rsquo;enterprise&amp;rsquo; level of Visual Studio&amp;hellip;</description>
    </item>
    
    <item>
      <title>Reclaiming my CPU...</title>
      <link>https://lenholgate.com/blog/2007/12/reclaiming-my-cpu.html</link>
      <pubDate>Wed, 12 Dec 2007 11:22:19 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2007/12/reclaiming-my-cpu.html</guid>
      <description>I removed the last version of &amp;ldquo;Norton Anti-Virus&amp;rdquo; (and all of the other stuff that I&amp;rsquo;ve been upgraded into over the years) from the last of my machines yesterday. I&amp;rsquo;ve replaced it with AVG, currently the free version to test it out.
All of the machines feel more sprightly and run faster. One of my old laptops which is now only used for fire-side web browsing is now actually usable again!</description>
    </item>
    
    <item>
      <title>Managed Excel addins</title>
      <link>https://lenholgate.com/blog/2007/12/managed-excel-addins.html</link>
      <pubDate>Tue, 11 Dec 2007 12:08:43 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2007/12/managed-excel-addins.html</guid>
      <description>One of my current clients has got me drifting back towards my Investment Banking roots by developing an Excel addin for them. Luckily for me it&amp;rsquo;s a banking client with a twist compared to my previous banking clients; they&amp;rsquo;re happy for me to work as an external consultant, doing most of the work from my office at home and working on my contract terms.
The development work so far has been quite interesting.</description>
    </item>
    
    <item>
      <title>Bug in overlapped UDP port unreachable errors?</title>
      <link>https://lenholgate.com/blog/2007/12/bug-in-overlapped-udp-port-unreachable-errors.html</link>
      <pubDate>Mon, 03 Dec 2007 09:19:30 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2007/12/bug-in-overlapped-udp-port-unreachable-errors.html</guid>
      <description>I&amp;rsquo;m currently fixing a bug in the UDP side of The Server Framework. The problem is that I&amp;rsquo;m failing to handle how Winsock reacts when an overlapped SendTo() results in an ICMP Port Unreachable response from the remote host. This error gets reported by failing a pending WSARecvFrom() on the same socket by returning 0 bytes from the WSARecvFrom() with an error code of ERROR_PORT_UNREACHABLE.
This would be fine if the framework didn&amp;rsquo;t assume that all errors from an overlapped WSARecvFrom should mean that we don&amp;rsquo;t post another read&amp;hellip; You may recall from when I was doing some work on making the framework survive low resource situations that we can&amp;rsquo;t just issue another read when the previous one failed due to a low resource situation as we would just continue the problem, so we back off and recover later.</description>
    </item>
    
    <item>
      <title>JetByte News: Short term contract based at our Guildford office for Lloyds TSB</title>
      <link>https://lenholgate.com/news/2007/12/short-term-contract-based-at-our-guildford-office-for-lloyds-tsb.html</link>
      <pubDate>Sat, 01 Dec 2007 12:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/news/2007/12/short-term-contract-based-at-our-guildford-office-for-lloyds-tsb.html</guid>
      <description>We&amp;rsquo;re building an Excel Add-in (XLL) for Lloyds TSB which allows further add-in functionality to be written as managed code (e.g. in C#).
This project is being run on a &amp;ldquo;time and materials&amp;rdquo; basis from our Guildford office and we&amp;rsquo;ve negotiated to keep the IP rights of the underlying managed XLL shell for possible later resale or use in a product.</description>
    </item>
    
    <item>
      <title>Thank you Raymond</title>
      <link>https://lenholgate.com/blog/2007/11/thank-you-raymond.html</link>
      <pubDate>Thu, 29 Nov 2007 12:02:35 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2007/11/thank-you-raymond.html</guid>
      <description>Raymond Chen has just blogged about &amp;ldquo;The importance of the FORMAT_MESSAGE_IGNORE_INSERTS flag&amp;rdquo; over on The Old New Thing. That&amp;rsquo;s another annoying bug fixed ;). I&amp;rsquo;ve occasionally wondered why I get some less than informative error messages sometimes, I wasn&amp;rsquo;t passing the flag in my GetLastErrorMessage() function and it calls itself if FormatMessage() fails and so sometimes I get an &amp;ldquo;invalid parameter&amp;rdquo; error messages when what I could get might actually be more useful to me.</description>
    </item>
    
    <item>
      <title>VS 2008</title>
      <link>https://lenholgate.com/blog/2007/11/vs-2008.html</link>
      <pubDate>Thu, 29 Nov 2007 10:50:11 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2007/11/vs-2008.html</guid>
      <description>I&amp;rsquo;m currently rebuilding my world with Visual Studio 2008. So far things are going ok, but as I mentioned back when I was playing with Beta 2, the new C4627 warning about header files being skipped when processing precompiled headers is a bit broken&amp;hellip;
It seems that the code that works out if a header file is skipped (ie not included in the precompiled header but above the #pragma hdrstop line works on exact path matches rather than a file include graph.</description>
    </item>
    
    <item>
      <title>Back in time with DDE</title>
      <link>https://lenholgate.com/blog/2007/11/back-in-time-with-dde.html</link>
      <pubDate>Tue, 20 Nov 2007 11:48:30 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2007/11/back-in-time-with-dde.html</guid>
      <description>After completing some work for client with the custom CLR hosting server I&amp;rsquo;ve started looking into a problem for another client, it&amp;rsquo;s a bit of a transition as the problem that he&amp;rsquo;s having is with a DDE connection from his server to a SCADA system that monitors the industrial plant where the server is based.
DDE was the original way that Windows programs shared data between them. It&amp;rsquo;s been around since 1987 and, well, that shows.</description>
    </item>
    
    <item>
      <title>CLR Hosting lifetime issues bite again...</title>
      <link>https://lenholgate.com/blog/2007/11/clr-hosting-lifetime-issues-bite-again.html</link>
      <pubDate>Mon, 12 Nov 2007 12:23:04 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2007/11/clr-hosting-lifetime-issues-bite-again.html</guid>
      <description>I&amp;rsquo;m looking into adding CLR deadlock detection into the CLR hosting code that&amp;rsquo;s used inside The Server Framework and, once again, the fact that you can&amp;rsquo;t cleanly shutdown the CLR host is causing me problems&amp;hellip;
Since the CLR can&amp;rsquo;t be stopped by a host without terminating the host process (and that&amp;rsquo;s by design&amp;hellip;) you need to be aware that any of the code that you have plugged into the CLR by way of the hosting interfaces can be called into during process shutdown.</description>
    </item>
    
    <item>
      <title>Another useful piece for anyone in a relationship with a nerd...</title>
      <link>https://lenholgate.com/blog/2007/11/another-useful-piece-for-anyone-in-a-relationship-with-a-nerd.html</link>
      <pubDate>Mon, 12 Nov 2007 09:45:25 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2007/11/another-useful-piece-for-anyone-in-a-relationship-with-a-nerd.html</guid>
      <description>Once again Rands hits the nail on the head with The Nerd Handbook&amp;hellip;</description>
    </item>
    
    <item>
      <title>Performance counters that don&#39;t show up in perfmon</title>
      <link>https://lenholgate.com/blog/2007/10/performance-counters-that-dont-show-up-in-perfmon.html</link>
      <pubDate>Fri, 26 Oct 2007 10:08:34 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2007/10/performance-counters-that-dont-show-up-in-perfmon.html</guid>
      <description>My current server development for a client has been going well but this week I finally got to the point where I wanted to look at the peformance counters it was presenting and they weren&amp;rsquo;t showing up in perfmon. My daily development for most projects is on my x64 box and I was building the server in x86 mode and although it was registering its counter DLL correctly it was an x86 DLL and the x64 perfmon can&amp;rsquo;t load x86 counter dlls.</description>
    </item>
    
    <item>
      <title>OnSocketReleased() weirdness</title>
      <link>https://lenholgate.com/blog/2007/10/onsocketreleased-weirdness.html</link>
      <pubDate>Wed, 24 Oct 2007 08:48:03 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2007/10/onsocketreleased-weirdness.html</guid>
      <description>I ran into an unexpected issue with OnSocketReleased()yesterday whilst writing a connection filter for a client. OnSocketReleased() is a callback method in The Server Framework that allows you to &amp;lsquo;do stuff&amp;rsquo; at the last possible moment of a connection&amp;rsquo;s lifetime. It&amp;rsquo;s guaranteed to be the last callback ever called for a connection and it&amp;rsquo;s guaranteed not to be called until all references to a connection have been released; so you can&amp;rsquo;t get caught out by other threads still processing other last minute connection shutdown events.</description>
    </item>
    
    <item>
      <title>Continuing a theme...</title>
      <link>https://lenholgate.com/blog/2007/10/continuing-a-theme.html</link>
      <pubDate>Tue, 16 Oct 2007 09:15:43 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2007/10/continuing-a-theme.html</guid>
      <description>Continuing last week&amp;rsquo;s theme of being wrong, &amp;lsquo;M&amp;rsquo; pointed out to me in a comment on my posting about changing the memory allocation strategy for the IO buffer allocator that I actually have a bit more work to do&amp;hellip; I&amp;rsquo;d forgotten that VirtualAlloc() allocates in terms of the memory allocation granularity of the operating system&amp;hellip;. So, at present, the quick and dirty fix that I posted is allocating buffers in blocks of at least 64k of memory&amp;hellip; They are, at least, page aligned ;) Thanks for pointing out the error of my ways, comments like this are one of the main reasons that I blog.</description>
    </item>
    
    <item>
      <title>IOBuffer allocation strategy...</title>
      <link>https://lenholgate.com/blog/2007/10/iobuffer-allocation-strategy.html</link>
      <pubDate>Fri, 12 Oct 2007 11:39:23 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2007/10/iobuffer-allocation-strategy.html</guid>
      <description>Whilst being wrong this week I reviewed some of the other socket server entries on this site and was reminded of an item that&amp;rsquo;s on a todo list somewhere by a comment on this posting from Matt: &amp;ldquo;What do you think about using VirtualAlloc to allocate page-aligned memory for the receive buffers? Would it reduce the number of locked pages? I mean if you allocate a buffer of &amp;lsquo;page size&amp;rsquo; using &amp;rsquo;new[]&amp;rsquo; it is very likely that the buffer uses 2 pages instead of 1.</description>
    </item>
    
    <item>
      <title>Being wrong.</title>
      <link>https://lenholgate.com/blog/2007/10/being-wrong.html</link>
      <pubDate>Fri, 12 Oct 2007 10:37:27 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2007/10/being-wrong.html</guid>
      <description>This week I&amp;rsquo;ve spent some of the time being wrong, which has proven useful as I&amp;rsquo;ve learned quite a lot and clarified my understanding of a situation. It all began when I had a bug report from a client who claimed that an obscure internal part of The Server Framework wasn&amp;rsquo;t working as he expected it to&amp;hellip;
The report said that the m_outstandingWrites variable of the TAsyncSocket sometimes &amp;lsquo;stays above 2&amp;rsquo;.</description>
    </item>
    
    <item>
      <title>Summary of x64 Win32 Debug API issues</title>
      <link>https://lenholgate.com/blog/2007/10/summary-of-x64-win32-debug-api-issues.html</link>
      <pubDate>Thu, 04 Oct 2007 08:41:35 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2007/10/summary-of-x64-win32-debug-api-issues.html</guid>
      <description>I&amp;rsquo;ve finished porting my debugging tools support libraries to x64 now and thought it was worth putting up a summary of the issues that I&amp;rsquo;ve noticed:
A 32bit exe can&amp;rsquo;t start a 64bit exe for debugging - pretty obvious really.
When a 64bit debugger is running a 32bit debugee the debugger seems to get TWO &amp;ldquo;loader breakpoints&amp;rdquo; one when the 64bit dlls are loaded and a second when the 32bit dlls have been loaded.</description>
    </item>
    
    <item>
      <title>x64, IOCP, Socket Server framework</title>
      <link>https://lenholgate.com/blog/2007/10/x64-iocp-socket-server-framework.html</link>
      <pubDate>Wed, 03 Oct 2007 09:18:06 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2007/10/x64-iocp-socket-server-framework.html</guid>
      <description>The x64 version of our I/O completion port based, networking client and server framework, The Server Framework, is now shipping. This is the licensed version of the free server framework that&amp;rsquo;s available here. An overview of the licensed version can be found here. The changes from that version to the latest version can be found here.
The documentation for this version is available online, here. Please be patient, the docs are a work in progress and I know they could be better.</description>
    </item>
    
    <item>
      <title>WOW64 Win32 DebugAPI and managed code</title>
      <link>https://lenholgate.com/blog/2007/10/wow64-win32-debugapi-and-managed-code.html</link>
      <pubDate>Tue, 02 Oct 2007 09:48:28 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2007/10/wow64-win32-debugapi-and-managed-code.html</guid>
      <description>It seems that I&amp;rsquo;ve located the &amp;ldquo;issues&amp;rdquo; in my Debug Tools library. This library is used in my TickShifter (time control) tool and my native Win32 Deadlock Detection tool. Due to how I wanted to control the debugged processes start up and how I needed to halt the debugged process at a particular time there were some hoops that I found I had to jump through. Those hoops have changed shape; either because of differences between Vista and XP or due to x64 and the WOW64 layer, I&amp;rsquo;m not sure which yet.</description>
    </item>
    
    <item>
      <title>x64 Debugger, ExceptionCode == 0x4000001f</title>
      <link>https://lenholgate.com/blog/2007/10/x64-debugger-exceptioncode-0x4000001f.html</link>
      <pubDate>Mon, 01 Oct 2007 13:50:33 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2007/10/x64-debugger-exceptioncode-0x4000001f.html</guid>
      <description>I should be finishing some docs for the x64 release of The Server Framework&amp;hellip; But this is more interesting&amp;hellip;
When running my Win32 debugging code on x64, this time when compiled natively as x64 code and when debugging an x64 CLR process, I&amp;rsquo;ve been getting an &amp;lsquo;unexpected&amp;rsquo; ExceptionCode in an EXCEPTION_DEBUG_EVENT. The code is 0x4000001f and, after some searching around, it seems that it&amp;rsquo;s a STATUS_WX86_BREAKPOINT event and I sometimes get these instead of EXCEPTION_BREAKPOINT events&amp;hellip;</description>
    </item>
    
    <item>
      <title>DebugSetProcessKillOnExit and Win32 processes on x64</title>
      <link>https://lenholgate.com/blog/2007/10/debugsetprocesskillonexit-and-win32-processes-on-x64.html</link>
      <pubDate>Mon, 01 Oct 2007 10:55:03 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2007/10/debugsetprocesskillonexit-and-win32-processes-on-x64.html</guid>
      <description>I spent a little time looking at an x64 port of my debugging tools library at the weekend. Since this requires me to set breakpoints and manipulate process memory and image files and all sorts I expected it to be a little more complex to port than the higher level sockets code and the bulk of my Win32 code. So far things are going reasonably well, but I&amp;rsquo;ve just come across a strangeness with DebugSetProcessKillOnExit(TRUE) in an x86 debugger that&amp;rsquo;s running an x86 process on an x64 machine.</description>
    </item>
    
    <item>
      <title>Thirteen Patterns of Programmer Interviews...</title>
      <link>https://lenholgate.com/blog/2007/09/thirteen-patterns-of-programmer-interviews.html</link>
      <pubDate>Thu, 20 Sep 2007 13:53:22 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2007/09/thirteen-patterns-of-programmer-interviews.html</guid>
      <description>Sad but true&amp;hellip; The &amp;ldquo;Typical Programmer&amp;rdquo; has a piece on Thirteen Patterns of Programmer Inverviews. I think I&amp;rsquo;ve probably been interviewed in all of these styles over the years and taken part in several of them from the interviewing side of things&amp;hellip;</description>
    </item>
    
    <item>
      <title>Spolsky&#39;s law stikes again...</title>
      <link>https://lenholgate.com/blog/2007/09/spolskys-law-stikes-again.html</link>
      <pubDate>Wed, 19 Sep 2007 17:11:19 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2007/09/spolskys-law-stikes-again.html</guid>
      <description>I&amp;rsquo;m finalising the testing of the x64 version of The Server Framework and, since it&amp;rsquo;s a fairly major release, I figured that it waranted an email to existing customers to see who wanted to have the update shipped to them straight away (although all existing customer are entitled to all upgrades to The Server Framework free of charge I usually rely on them monitoring this RSS feed and asking for new releases rather than just sending them out; generally only critical bug fixes are worthy of an email notification&amp;hellip;).</description>
    </item>
    
    <item>
      <title>Where did August and September go?</title>
      <link>https://lenholgate.com/blog/2007/09/where-did-august-and-september-go.html</link>
      <pubDate>Mon, 17 Sep 2007 17:51:33 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2007/09/where-did-august-and-september-go.html</guid>
      <description>What with holidays and having my head down doing x64 and CLR hosting stuff for a client it seems that the last month and a half has rushed by&amp;hellip;
The good news is that the x64 port is slowly slipping out to clients; the bulk of the work has been done for ages but I&amp;rsquo;m using this release to bring all of my example servers in line with best practices for using The Server Framework.</description>
    </item>
    
    <item>
      <title>See the &#39;What About .NET?&#39; sidebar...</title>
      <link>https://lenholgate.com/blog/2007/07/see-the-what-about-net-sidebar.html</link>
      <pubDate>Tue, 31 Jul 2007 16:11:15 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2007/07/see-the-what-about-net-sidebar.html</guid>
      <description>Interesting&amp;hellip; It seems that rumours of C++&amp;rsquo;s demise in the brave new world of .Net were slightly over exagerated, perhaps, maybe&amp;hellip;
From a recent issue of MSDN magazine:
&amp;ldquo;There are two main reasons why this column was born. First, despite the phenomenal success of the Microsoft® .NET Framework, there are still plenty of scenarios where it makes more sense to use native C++. Adoption of .NET will continue to grow, but C++ is here to stay.</description>
    </item>
    
    <item>
      <title>Hosting .Net takes me back to the &#39;Good ol&#39; days of COM&#39;</title>
      <link>https://lenholgate.com/blog/2007/07/hosting-net-takes-me-back-to-the-good-ol-days-of-com.html</link>
      <pubDate>Tue, 31 Jul 2007 13:15:57 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2007/07/hosting-net-takes-me-back-to-the-good-ol-days-of-com.html</guid>
      <description>It&amp;rsquo;s interesting, no, really, how the more things change the more they stay the same&amp;hellip; I&amp;rsquo;ve been doing COM for a long time. I first discovered COM back at Interlink when I was writing a windows version of a product call CardMaster which did credit card production. The system supported lots of different machines and each of these machines needed different drivers, the drivers were written in C and usually spoke to the machine via a serial port.</description>
    </item>
    
    <item>
      <title>VS2008 Beta 2 first impressions</title>
      <link>https://lenholgate.com/blog/2007/07/vs2008-beta-2-first-impressions.html</link>
      <pubDate>Sat, 28 Jul 2007 11:42:36 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2007/07/vs2008-beta-2-first-impressions.html</guid>
      <description>I&amp;rsquo;ve just installed Visual Studio 2008 Beta 2 in a VMWare box so that I can start to test the x64 port of The Server Framework with the new compiler. I haven&amp;rsquo;t bothered to look into what&amp;rsquo;s new in the 2008 C++ compiler, I&amp;rsquo;m more interested in changes to the project file format (for the tools I&amp;rsquo;m building to fix this problem) and things that may prevent my code compiling or passing its tests rather than reasons to upgrade.</description>
    </item>
    
    <item>
      <title>Nick Gunn is blogging again...</title>
      <link>https://lenholgate.com/blog/2007/07/nick-gunn-is-blogging-again.html</link>
      <pubDate>Wed, 25 Jul 2007 17:13:17 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2007/07/nick-gunn-is-blogging-again.html</guid>
      <description>I used to work with Nick at CSFB and then at Barclays Capital. He&amp;rsquo;s always been a good, techie, low-level COM/.Net geek and his latest writings on the Microsoft Concurrency and Coordination Runtime are interesting! If you&amp;rsquo;re interested in async/multi-threaded/concurrent stuff then go take a look.</description>
    </item>
    
    <item>
      <title>Sometimes it almost seems that they don&#39;t want you to get the code to work...</title>
      <link>https://lenholgate.com/blog/2007/07/sometimes-it-almost-seems-that-they-dont-want-you-to-get-the-code-to-work.html</link>
      <pubDate>Tue, 24 Jul 2007 22:32:15 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2007/07/sometimes-it-almost-seems-that-they-dont-want-you-to-get-the-code-to-work.html</guid>
      <description>I&amp;rsquo;ve spent some time over the last few days playing around with my CLR hosting socket server example. I had stalled on a piece of client work, I&amp;rsquo;ve got a bit of a head cold at the moment and my brain just wasn&amp;rsquo;t in the right place for what I was supposed to be doing so I picked up one of more interesting the items on my todo list and took a look at that instead&amp;hellip; The bulk of the work flowed nicely but then, just at the end things stopped working for no apparent reason&amp;hellip; I&amp;rsquo;d done what was suggested in the book, the code compiled, the CLR called into my host in the right way and then I got a security policy exception&amp;hellip; Hmmm.</description>
    </item>
    
    <item>
      <title>Unsequenced socket bug fix</title>
      <link>https://lenholgate.com/blog/2007/07/unsequenced-socket-bug-fix.html</link>
      <pubDate>Tue, 24 Jul 2007 13:51:16 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2007/07/unsequenced-socket-bug-fix.html</guid>
      <description>I&amp;rsquo;ve just fixed a bug in the latest version of The Server Framework (v5.1 - if you dont have docs and a version number then you&amp;rsquo;re &amp;lt; 5).
The probelm was that I was being fractionally over-zealous in making things easy for the user&amp;hellip; CStreamSocket has a RequestWrite() method that takes a BYTE * and a length. Originally this used to fail if the length was more than the size of a buffer.</description>
    </item>
    
    <item>
      <title>VS2005 breakpoint annoyance</title>
      <link>https://lenholgate.com/blog/2007/07/vs2005-breakpoint-annoyance.html</link>
      <pubDate>Thu, 19 Jul 2007 10:51:32 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2007/07/vs2005-breakpoint-annoyance.html</guid>
      <description>My Visual Studio 2005 C++ debugger seems to have stopped doing what VC6 used to do if you placed a breakpoint on a line that didn&amp;rsquo;t result in executable code&amp;hellip; VC6 used to warn you and then move the breakpoint to the next executable code line, VS2005 just seems to ignore the problem and disable the breakpoint when you&amp;rsquo;re running and therefore just run straight past it&amp;hellip;
This is especially annoying in situations like this:</description>
    </item>
    
    <item>
      <title>How to liquidise perfmon&#39;s guts but still leave the body standing...</title>
      <link>https://lenholgate.com/blog/2007/07/how-to-liquidise-perfmons-guts-but-still-leave-the-body-standing.html</link>
      <pubDate>Thu, 19 Jul 2007 09:22:16 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2007/07/how-to-liquidise-perfmons-guts-but-still-leave-the-body-standing.html</guid>
      <description>I&amp;rsquo;m still working on my performance counter library. I&amp;rsquo;ve got parent and child objects working and multiple instances and I have a sample server that publishes performance data using two objects, one for the executable (io threads, sockets and buffers in use, etc) and one for each of the server instances within the executable (connections active, bytes/sec, etc). The per server instance counters have the server executable as a parent and it has some totaled up counters for each instance&amp;hellip; In turn there&amp;rsquo;s a _Total instance in the server executable object&amp;rsquo;s instances and that totals all executables&amp;hellip; You can run multiple servers and they all just plug themselves in to the system and show their counters.</description>
    </item>
    
    <item>
      <title>Infrant Ready NAS NV&#43;</title>
      <link>https://lenholgate.com/blog/2007/07/infrant-ready-nas-nv.html</link>
      <pubDate>Wed, 18 Jul 2007 09:04:54 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2007/07/infrant-ready-nas-nv.html</guid>
      <description>I&amp;rsquo;ve been running a pair of 2TB Infrant Ready NAS NV+ RAID systems for a while now as on-site file server and off-site backup and so far I&amp;rsquo;m very pleased with them. I have one under my desk and one in my dad&amp;rsquo;s office and they talk over a VPN and keep each other in sync using rsync. The one under my desk acts as a file server for my development boxes and as a music server for my Squeezebox music players.</description>
    </item>
    
    <item>
      <title>Non-trivial...</title>
      <link>https://lenholgate.com/blog/2007/07/non-trivial.html</link>
      <pubDate>Wed, 18 Jul 2007 08:39:40 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2007/07/non-trivial.html</guid>
      <description>Charles Miller over at &amp;lsquo;The Fishbowl&amp;rsquo; provides a cheat sheet to decode what us programming types mean when we describe the difficulty of solving problems&amp;hellip;</description>
    </item>
    
    <item>
      <title>Performance counter rewrite almost complete</title>
      <link>https://lenholgate.com/blog/2007/07/performance-counter-rewrite-almost-complete.html</link>
      <pubDate>Tue, 17 Jul 2007 17:54:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2007/07/performance-counter-rewrite-almost-complete.html</guid>
      <description>Around a week ago I started looking at rewriting my performance counter library so that it worked on Vista. That work is almost complete and I&amp;rsquo;m at the stage where the new library does everything the old one did but there&amp;rsquo;s a list of &amp;rsquo;nice to have&amp;rsquo; new items that I haven&amp;rsquo;t completed yet. The work was reasonably easy once I got into it. I wasted an afternoon or so trying to understand the original code that I&amp;rsquo;d hacked a little way back in 2000 and eventually gave up and went to the documentation (and the book from whence the original code came).</description>
    </item>
    
    <item>
      <title>CreateFileMapping, Vista, Global namespace, SeCreateGlobalPrivilege...</title>
      <link>https://lenholgate.com/blog/2007/07/createfilemapping-vista-global-namespace-secreateglobalprivilege.html</link>
      <pubDate>Tue, 10 Jul 2007 09:21:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2007/07/createfilemapping-vista-global-namespace-secreateglobalprivilege.html</guid>
      <description>I&amp;rsquo;m fixing up my performance monitoring code and this uses shared memory to communicate between the perfmon extension DLL and the application. Since I&amp;rsquo;m tightening up security I decided to explicitly pass in the security attributes, which has a possitive knock-on effect to several of my Win32 tools classes which now also need to deal with security properly rather than just conveniently&amp;hellip; Of course once you&amp;rsquo;re passing explicit security attributes around rather than simply passing 0 to the APIs you can get back some of the convenience of the not-needing-to-think-about-it style of security by passing in an &amp;ldquo;allow all&amp;rdquo; security descriptor.</description>
    </item>
    
    <item>
      <title>Fixing my performance counter library for Vista</title>
      <link>https://lenholgate.com/blog/2007/07/fixing-my-performance-counter-library-for-vista.html</link>
      <pubDate>Mon, 09 Jul 2007 11:43:22 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2007/07/fixing-my-performance-counter-library-for-vista.html</guid>
      <description>So, back in June I discovered that my performance counter library code didn&amp;rsquo;t work on my new Vista x64 development box&amp;hellip; The problem seems to be that the code has always been doing things in an undocumented/unsupported way and it&amp;rsquo;s only now that the old way doesn&amp;rsquo;t actually work at all any more&amp;hellip;
I think I know what I need to do to fix the counter installation problem, use the wonderfully unixy named &amp;ldquo;lodctr&amp;rdquo; program (or the API alternative) to load the strings for the performance counters rather than simply shoving them into the registry myself&amp;hellip; That means that the library code I have needs to be changed so that it writes out the appropriate files (an .</description>
    </item>
    
    <item>
      <title>Reliable UDP</title>
      <link>https://lenholgate.com/blog/2007/06/reliable-udp.html</link>
      <pubDate>Wed, 27 Jun 2007 22:02:08 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2007/06/reliable-udp.html</guid>
      <description>I&amp;rsquo;ve been doing some work for a client on their reliable UDP implementation. It&amp;rsquo;s been interesting stuff. They had picked out a &amp;lsquo;best of breed&amp;rsquo; open source, reliable UDP protocol implementation (ENet) which was in &amp;lsquo;C&amp;rsquo; and integrated it into their server that was written in C++ with my framework. Unfortunately the &amp;lsquo;C&amp;rsquo; API assumed a synchronous &amp;lsquo;pull&amp;rsquo; model for the communications and The Server Framework gave them an asynchronous &amp;lsquo;push&amp;rsquo; model.</description>
    </item>
    
    <item>
      <title>Pluggable log systems</title>
      <link>https://lenholgate.com/blog/2007/06/pluggable-log-systems.html</link>
      <pubDate>Wed, 27 Jun 2007 21:29:46 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2007/06/pluggable-log-systems.html</guid>
      <description>In the past I&amp;rsquo;ve mentioned my lack of enthusiasm for the normal &amp;lsquo;debug trace&amp;rsquo; files that some systems seem to include&amp;hellip; I pretty much consider them a design smell&amp;hellip; But, some of my clients seem to like them and over the years I&amp;rsquo;ve been asked to provide high performance logging systems so that they can spew random messages to files and still run at a reasonable speed. I&amp;rsquo;ve written and adjusted an asynchronous file writing log file class a couple of times now and it finally ripened to the point where it was time to harvest it.</description>
    </item>
    
    <item>
      <title>x64 port - a diversion</title>
      <link>https://lenholgate.com/blog/2007/06/x64-port---a-diversion.html</link>
      <pubDate>Thu, 14 Jun 2007 12:44:45 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2007/06/x64-port---a-diversion.html</guid>
      <description>The x64 port of The Server Framework is going well. I&amp;rsquo;ve run the tests for the OpenSSL servers and things are looking good there; this is always an important stage to get to for me as these servers and their tests really thrash the framework and are good at shaking out any bugs that might be hiding&amp;hellip;
So, now I&amp;rsquo;m faced with the monkey work of adjusting all of the other example servers to build cleanly on all platforms and (in addition to the x64 work) to support either IPv4 or IPv6&amp;hellip; My problem is that I now support 5 compilers; VC6 through VS2005 + x64 and, since both I and my clients like being able to work in the IDEs, this means 4 project files to maintain per example.</description>
    </item>
    
    <item>
      <title>IPv6 support - in anger...</title>
      <link>https://lenholgate.com/blog/2007/06/ipv6-support---in-anger.html</link>
      <pubDate>Wed, 13 Jun 2007 17:31:01 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2007/06/ipv6-support---in-anger.html</guid>
      <description>Whilst The Server Framework has supported IPv6 for a while now I haven&amp;rsquo;t really used the functionality a great deal. My previous development box didn&amp;rsquo;t have IPv6 installed and so I never really got around to playing with it. Since my new box has IPv6 installed and since porting, building and testing can become a bit dull after a while I&amp;rsquo;ve spent a little time this afternoon playing with making sure the example servers are fully IPv6 aware, and, in fact, address type agnostic.</description>
    </item>
    
    <item>
      <title>Performance counter installation on Vista</title>
      <link>https://lenholgate.com/blog/2007/06/performance-counter-installation-on-vista.html</link>
      <pubDate>Wed, 13 Jun 2007 13:32:53 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2007/06/performance-counter-installation-on-vista.html</guid>
      <description>I&amp;rsquo;ve been aware that there was a &amp;rsquo;need to run as Administrator&amp;rsquo; issue with some of my server examples for a while; only the ones that installed/removed performance counter dlls or installed/removed themselves as Windows Services. The service installation problem was obvious, you got a message box saying that the user had insufficient rights and now, on Vista, this message box lets you try again and it relaunches the application with the &amp;ldquo;run_as&amp;rdquo; verb and you get a chance to run it as Admin&amp;hellip; The performance counter issue seems more complex.</description>
    </item>
    
    <item>
      <title>x64 Socket Server framework</title>
      <link>https://lenholgate.com/blog/2007/06/x64-socket-server-framework.html</link>
      <pubDate>Thu, 07 Jun 2007 17:27:34 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2007/06/x64-socket-server-framework.html</guid>
      <description>My new development box arrived last week. It&amp;rsquo;s a bit of a monster, dual processor (Intel Xeon E5320 quad core, 1.86 GHz), 8GB ram, and it runs 64bit Vista very nicely indeed. Since it&amp;rsquo;s an x64 box I have started work on porting The Server Framework to x64. So far things are going very smoothly. The main issue is that I have, in the past, tended to overuse size_t when I really mean &amp;ldquo;a reasonable sized unsigned value&amp;rdquo;.</description>
    </item>
    
    <item>
      <title>JetByte News: Reliable UDP for the Online Gaming industry</title>
      <link>https://lenholgate.com/news/2007/06/reliable-udp-for-the-online-gaming-industry.html</link>
      <pubDate>Fri, 01 Jun 2007 12:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/news/2007/06/reliable-udp-for-the-online-gaming-industry.html</guid>
      <description>We&amp;rsquo;ve been engaged by an Online Gaming Company that is using The Server Framework to refactor and redesign their reliable UDP implementation, based on ENet, so that it&amp;rsquo;s more efficient and performs better with the asynchronous design of The Server Framework.
In addition they want us to build them a custom CLR Hosting solution within their server so that their games can be written in managed code but the networking layer can leverage the power of C++ for their reliable UDP layer.</description>
    </item>
    
    <item>
      <title>STLPort 5.1.3 and multiple VC versions</title>
      <link>https://lenholgate.com/blog/2007/05/stlport-513-and-multiple-vc-versions.html</link>
      <pubDate>Wed, 23 May 2007 13:12:38 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2007/05/stlport-513-and-multiple-vc-versions.html</guid>
      <description>I&amp;rsquo;m just about to try out the latest STLPort release and I went to apply my &amp;lsquo;STLPort 5.0 multiple side by side dlls changes&amp;rsquo; from 2005 and noticed that the place where one of the changes needs to be made has changed.
The change to Makefile.inc should still be made to STLport-5.1.3\build\lib\Makefile.inc but the change that was previously made to stl_msvc.h now has to be made to STLport-5.1.3\stlport\stl\config\_auto_link.h</description>
    </item>
    
    <item>
      <title>I&#39;m with Dennis, and Ian...</title>
      <link>https://lenholgate.com/blog/2007/05/im-with-dennis-and-ian.html</link>
      <pubDate>Wed, 16 May 2007 22:17:49 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2007/05/im-with-dennis-and-ian.html</guid>
      <description>Given what Jeff wrote recently and what Ian and Dennis said about it&amp;hellip; I&amp;rsquo;m definitely on the Ian and Dennis side of the fence&amp;hellip;</description>
    </item>
    
    <item>
      <title>A computer magazine that makes me feel like I used to about programming...</title>
      <link>https://lenholgate.com/blog/2007/05/a-computer-magazine-that-makes-me-feel-like-i-used-to-about-programming.html</link>
      <pubDate>Wed, 16 May 2007 22:05:14 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2007/05/a-computer-magazine-that-makes-me-feel-like-i-used-to-about-programming.html</guid>
      <description>I grabbed a couple of copies of &amp;ldquo;The NT Insider&amp;rdquo; from my &amp;rsquo;not quite got around to reading&amp;rsquo; rack today and read them on the train on the way in to London. These are the quite short, bi-monthly, driver developer and kernel programmer magazine from OSR. It&amp;rsquo;s free to subscribe and the content reminds me of the thrill that I used to get from reading computer mags back in the late 80s&amp;hellip; I guess it&amp;rsquo;s possibly the fact that lots of it is slightly alien to me, there&amp;rsquo;s a certain excitement in knowing that there&amp;rsquo;s so much to learn and being able to follow half understood threads in one article to other articles and deeper understanding&amp;hellip; Plus this stuff is hard, and complex, and a bit scary, and nobody is appologising for it&amp;hellip; Anyway, sure takes me back&amp;hellip;</description>
    </item>
    
    <item>
      <title>UPnP User Interface causes Explorer to hang in My Network Places?</title>
      <link>https://lenholgate.com/blog/2007/05/upnp-user-interface-causes-explorer-to-hang-in-my-network-places.html</link>
      <pubDate>Sat, 12 May 2007 10:09:38 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2007/05/upnp-user-interface-causes-explorer-to-hang-in-my-network-places.html</guid>
      <description>I&amp;rsquo;ve been having some problems with Explorer hanging when opening &amp;ldquo;My Network Places&amp;rdquo; on some of my machines. Some work fine, some hang. Most annoying. I&amp;rsquo;ve been trying a few things over the past few weeks (as and when I get a hang and as and when I feel like it), but nothing has seemed to have fixed anything, until this morning&amp;hellip;
I&amp;rsquo;ve recently adjusted my networking kit and now have a couple of UPnP devices floating around and it&amp;rsquo;s useful (but not essential) to be able to connect to them directly in Explorer.</description>
    </item>
    
    <item>
      <title>Graceful close bug...</title>
      <link>https://lenholgate.com/blog/2007/05/graceful-close-bug.html</link>
      <pubDate>Thu, 10 May 2007 18:56:01 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2007/05/graceful-close-bug.html</guid>
      <description>It seems that the latest changes to The Server Framework have managed to flush out a graceful shutdown bug that&amp;rsquo;s been floating around since day 0.
There&amp;rsquo;s this whole, complex, way of determining how a socket is shutdown and this whole clever thing that lets you decide if you want to do a graceful, lingering, close on an I/O thread or simply slam the door and risk losing data and, well, it doesn&amp;rsquo;t seem to work.</description>
    </item>
    
    <item>
      <title>cvs update -j</title>
      <link>https://lenholgate.com/blog/2007/05/cvs-update--j.html</link>
      <pubDate>Thu, 10 May 2007 10:37:15 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2007/05/cvs-update--j.html</guid>
      <description>I&amp;rsquo;ve finally got to the point where my latest refactoring of The Server Framework can be merged back to the main development branch. The changes grew from just being a &amp;ldquo;remove inappropriate use of pointers where references would be better&amp;rdquo; to a complete pass through my TODO list and subsequent design adjustments. I also managed to have a good crack at a first pass through the &amp;ldquo;document the code with doxygen&amp;rdquo; item and the results of that can be found here.</description>
    </item>
    
    <item>
      <title>A design that is both too simple and too complex at the same time</title>
      <link>https://lenholgate.com/blog/2007/04/a-design-that-is-both-too-simple-and-too-complex-at-the-same-time.html</link>
      <pubDate>Mon, 30 Apr 2007 07:48:30 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2007/04/a-design-that-is-both-too-simple-and-too-complex-at-the-same-time.html</guid>
      <description>Except of course, the refactored filters can&amp;rsquo;t actually be layered that well using the design that I outlined in the previous blog posting.
The main problem, the &amp;ldquo;too simple&amp;rdquo; part of the design is that, well, it just doesn&amp;rsquo;t work. The filter chain needs to be walked in one direction for request filtering and the opposite direction for completion processing and the previous design was only a singly linked list (and so was always walked in the same direction).</description>
    </item>
    
    <item>
      <title>Filtering and layering functionality onto a TCP byte stream</title>
      <link>https://lenholgate.com/blog/2007/04/filtering-and-layering-functionality-onto-a-tcp-byte-stream.html</link>
      <pubDate>Thu, 26 Apr 2007 16:50:09 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2007/04/filtering-and-layering-functionality-onto-a-tcp-byte-stream.html</guid>
      <description>As I mentioned a while back, the interface that user code had to The Server Framework was somewhat jumbled and, in fact, consisted of three interfaces that were mashed together. I&amp;rsquo;ve been teasing these apart and in doing so have finally bitten the bullet and dived in and refactored the filtering interface so that it&amp;rsquo;s easier to use.
The Server Framework has had a filtering interface for a long time, since around 2002 when I added SSL support for a client.</description>
    </item>
    
    <item>
      <title>Cohesive interfaces</title>
      <link>https://lenholgate.com/blog/2007/04/cohesive-interfaces.html</link>
      <pubDate>Wed, 18 Apr 2007 10:20:43 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2007/04/cohesive-interfaces.html</guid>
      <description>Of course, once I&amp;rsquo;d teased apart the callback interface so that it was separate, clear and easy to use and document I realised that it was, in fact, 3 interfaces all jumbled together. They&amp;rsquo;re actually quite easy to spot, there are all of the callback functions that start with OnXXX (and a couple which don&amp;rsquo;t!), there are the filtering functions and there is CreateListeningSocket() call. All three sets are used by different kinds of user.</description>
    </item>
    
    <item>
      <title>Socket Server code - refactoring</title>
      <link>https://lenholgate.com/blog/2007/04/socket-server-code---refactoring.html</link>
      <pubDate>Tue, 17 Apr 2007 16:12:55 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2007/04/socket-server-code---refactoring.html</guid>
      <description>After spending some time cleaning up and refactoring away the need to derive from concrete classes in the Win32 and IO libraries that make up The Server Framework, I finally reached the Socket library and applied the same transformations to the interfaces there. This is actually where I hoped to get most value from taking classes that required you to override virtual methods in a derived class and replacing them with explicit virtual callback interfaces that you need to implement.</description>
    </item>
    
    <item>
      <title>Taking more of my own advice...</title>
      <link>https://lenholgate.com/blog/2007/04/taking-more-of-my-own-advice.html</link>
      <pubDate>Tue, 10 Apr 2007 12:19:37 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2007/04/taking-more-of-my-own-advice.html</guid>
      <description>I&amp;rsquo;m continuing to work through my list of things to do for The Server Framework (and all the libraries that support it) and I&amp;rsquo;ve recently got to the &amp;lsquo;set up Doxygen and do a bit of documentation&amp;rsquo; item&amp;hellip;
I&amp;rsquo;m a firm believer that code should be documented once it has stabilised; I don&amp;rsquo;t tend to write many code comments as I prefer to try and make the code as self documenting as I can but for a tool like Doxygen to be worth using for more than just the pretty pictures it&amp;rsquo;s best to add some comments to explain what things are and how they hang together.</description>
    </item>
    
    <item>
      <title>Go on, tell us why?</title>
      <link>https://lenholgate.com/blog/2007/04/go-on-tell-us-why.html</link>
      <pubDate>Wed, 04 Apr 2007 23:45:49 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2007/04/go-on-tell-us-why.html</guid>
      <description>It wont come a surprise to anyone who has read this blog for a while that I disagree with much of what Simon Sebright has written about asserts in the latest issue of the ACCU&amp;rsquo;s Overload magazine&amp;hellip;
I&amp;rsquo;ve stated my case far too many times to go through it all again, but, it would be nice if he&amp;rsquo;d explained why he doesn&amp;rsquo;t like using references when a pointer argument cannot ever be null, especially as he then takes a stance that says, in his view, a pointer argument SHOULD NEVER be null&amp;hellip;</description>
    </item>
    
    <item>
      <title>JetByte News: More fixed-price design and development</title>
      <link>https://lenholgate.com/news/2007/04/more-fixed-price-design-and-development.html</link>
      <pubDate>Sun, 01 Apr 2007 12:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/news/2007/04/more-fixed-price-design-and-development.html</guid>
      <description>We&amp;rsquo;re engaged in ongoing work with our Industrial Control Client.
Refactoring and redesigning the TCP connectivity layer of their industrial device control system and refactoring and multi-threading a DDE connectivity component.
Len is also designing and developing a high performance data acquisition system that connects as a client to their monitoring server and streams data to a SQL Server database for later analysis.</description>
    </item>
    
    <item>
      <title>Taking my own advice</title>
      <link>https://lenholgate.com/blog/2007/03/taking-my-own-advice.html</link>
      <pubDate>Thu, 22 Mar 2007 13:05:49 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2007/03/taking-my-own-advice.html</guid>
      <description>I&amp;rsquo;m in the middle of making some changes to The Server Framework, working through my list of things to do whilst I get my head around my next project; some LSP development&amp;hellip; The current change is one that I advised others of some time ago; avoid unnecesary optionality. It&amp;rsquo;s quite a sweeping change as all through the framework I originally used pointers to socket objects and data buffers when, in 99.</description>
    </item>
    
    <item>
      <title>Echoes from the CLR</title>
      <link>https://lenholgate.com/blog/2007/03/echoes-from-the-clr.html</link>
      <pubDate>Tue, 20 Mar 2007 12:51:41 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2007/03/echoes-from-the-clr.html</guid>
      <description>The work on the CLR hosting socket server example is going pretty well. I now have a server that can pass server notifications to managed code that either runs in an AppDomain per connection or within a single AppDomain (depending on how isolated you want the user code to be). I think I&amp;rsquo;m pretty much there as far as what I want to demonstrate is concerned; it works and the line between managed and unmanaged code is likely to vary depending on a client&amp;rsquo;s particular requirements so there&amp;rsquo;s little point in extending the example code any further.</description>
    </item>
    
    <item>
      <title>Socket Server that hosts the CLR</title>
      <link>https://lenholgate.com/blog/2007/03/socket-server-that-hosts-the-clr.html</link>
      <pubDate>Thu, 15 Mar 2007 17:49:10 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2007/03/socket-server-that-hosts-the-clr.html</guid>
      <description>My investigations into CLR hosting are going well and today I built an echo sever based on The Server Framework and my CLR Hosting helper library. The idea is that the server can deal with the network IO and then hand off the &amp;lsquo;real work&amp;rsquo; to some .Net code. So far the integration is going pretty smoothly&amp;hellip;.</description>
    </item>
    
    <item>
      <title>So, what&#39;s the difference between the free code and the licensed version?</title>
      <link>https://lenholgate.com/blog/2007/03/so-whats-the-difference-between-the-free-code-and-the-licensed-version.html</link>
      <pubDate>Wed, 14 Mar 2007 15:32:20 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2007/03/so-whats-the-difference-between-the-free-code-and-the-licensed-version.html</guid>
      <description>People often ask me what the difference is between the free code that&amp;rsquo;s available on this website and the licensed version; this is what I reply&amp;hellip;
Please note that the most up to date information on the licensed version of our high performance, super scalable, IO completion port based networking code will always be available from the dedicated website for The Server Framework. The latest version of The Server Framework is available in source code form, the same as the free version, but includes many new features , performance improvements and bug fixes.</description>
    </item>
    
    <item>
      <title>UDP Multicast</title>
      <link>https://lenholgate.com/blog/2007/03/udp-multicast.html</link>
      <pubDate>Wed, 14 Mar 2007 15:10:43 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2007/03/udp-multicast.html</guid>
      <description>The Server Framework now includes UDP multicast. There are a couple of new examples; a server that joins a multicast group and a client that sends to a multicast group.</description>
    </item>
    
    <item>
      <title>Bug in my debugger code, and hence also in TickShifter</title>
      <link>https://lenholgate.com/blog/2007/03/bug-in-my-debugger-code-and-hence-also-in-tickshifter.html</link>
      <pubDate>Mon, 05 Mar 2007 05:52:34 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2007/03/bug-in-my-debugger-code-and-hence-also-in-tickshifter.html</guid>
      <description>Back in April 2006 I posted a copy of TickShifter, see here for details. It seems that there was a bug in my Win32 debugger code on which TickShifter is built. The bug was that we failed to &amp;ldquo;forget about&amp;rdquo; dlls that were unloaded&amp;hellip; Because we failed to forget about them it was possible for the debugger code to try and do something with addresses in these dlls that were no longer loaded and this would cause a C++ exception on the debugger thread when our call to ReadProcessMemory() failed and this caused all sorts of problems&amp;hellip;</description>
    </item>
    
    <item>
      <title>Yay .Net sockets stuff...</title>
      <link>https://lenholgate.com/blog/2007/03/yay-net-sockets-stuff.html</link>
      <pubDate>Mon, 05 Mar 2007 04:35:35 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2007/03/yay-net-sockets-stuff.html</guid>
      <description>Nice to see that the new beta, sorry, CTP, of the next .Net Framework will increase the performance of .Net sockets by 70%! Way to go .Net dudes&amp;hellip;.
Interesting to see that it&amp;rsquo;s a joint effort between the System.Net people (who, I assume own the sockets code) and the CLR people (who own the platform)&amp;hellip; I wonder what the CLR guys brought to the tuning table&amp;hellip;
It would be nice to know how the new (and existing) .</description>
    </item>
    
    <item>
      <title>Hmm, is this really a good fix?</title>
      <link>https://lenholgate.com/blog/2007/03/hmm-is-this-really-a-good-fix.html</link>
      <pubDate>Mon, 05 Mar 2007 04:30:38 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2007/03/hmm-is-this-really-a-good-fix.html</guid>
      <description>Back in July Joe Duffy wrote an interesting piece on the CLR thread pool. I commented on it then, here. He&amp;rsquo;s now written another piece about why they increased the maximum number of threads in &amp;ldquo;the thread pool&amp;rdquo; from 25/cpu to 250/cpu. Joe, I refer you to my previous comment&amp;hellip; You&amp;rsquo;re solving the wrong problem!</description>
    </item>
    
    <item>
      <title>Software failures...</title>
      <link>https://lenholgate.com/blog/2007/02/software-failures.html</link>
      <pubDate>Thu, 15 Feb 2007 09:22:46 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2007/02/software-failures.html</guid>
      <description>I&amp;rsquo;m in Jackson Hole right now, my skis are still in Denver&amp;hellip;
Although they&amp;rsquo;ve replaced the baggage handling system at Denver International Airport since the days of the classic software project failure, it seems that the current system could still need some work ;)
Hopefull I&amp;rsquo;ll see my skis later today&amp;hellip;</description>
    </item>
    
    <item>
      <title>Dino Viehland on CLR hosting</title>
      <link>https://lenholgate.com/blog/2007/02/dino-viehland-on-clr-hosting.html</link>
      <pubDate>Tue, 13 Feb 2007 12:13:08 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2007/02/dino-viehland-on-clr-hosting.html</guid>
      <description>This is mainly a reminder for me so that I can read this when I get back from Jackson Hole&amp;hellip;
Dino Viehland has written some interesting looking blog posts on how to implement the thread/task and syncrhonisation host managers for a hosted CLR. Note that this is all &amp;ldquo;Whidbey beta 1&amp;rdquo; stuff so, well, your milage may vary&amp;hellip;</description>
    </item>
    
    <item>
      <title>Lifetime management issues with CLR hosting</title>
      <link>https://lenholgate.com/blog/2007/02/lifetime-management-issues-with-clr-hosting.html</link>
      <pubDate>Mon, 12 Feb 2007 16:41:03 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2007/02/lifetime-management-issues-with-clr-hosting.html</guid>
      <description>I&amp;rsquo;m still playing with hosting the CLR in C++ (using &amp;ldquo;Customizing the Microsoft.NET Framework Common Language Runtime&amp;rdquo; by Steven Pratschner as my guide)&amp;hellip; It&amp;rsquo;s an interesting journey but, once again, I wonder who makes the important technical decisions at Microsoft and how they sleep at night ;) .
I&amp;rsquo;m currently playing with the ICLRRuntimeHost interface. This lets you load the CLR into your unmanaged process and gives you a remarkable amount of control over how the CLR that you&amp;rsquo;re hosting operates.</description>
    </item>
    
    <item>
      <title>Crapness in mscoree.h</title>
      <link>https://lenholgate.com/blog/2007/02/crapness-in-mscoreeh.html</link>
      <pubDate>Thu, 08 Feb 2007 15:49:33 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2007/02/crapness-in-mscoreeh.html</guid>
      <description>I&amp;rsquo;m playing around with hosting the CLR in C++ at present and have come across a bit of crapness in the mscoree.h file&amp;hellip;
#if (_MSC_VER &amp;lt; 1300 || _WIN32_WINNT &amp;lt; 0x0500) typedef VOID ( __stdcall *WAITORTIMERCALLBACK )( PVOID __MIDL_0011, BOOL __MIDL_0012); #endif // (_MSC_VER &amp;lt; 1300 || _WIN32_WINNT &amp;lt; 0x0500) This effectively says, if you&amp;rsquo;re using VC6 or you&amp;rsquo;re compiling for less than v5 of Windows NT then you don&amp;rsquo;t have this typedef so here it is&amp;hellip; Unfortunately, if you&amp;rsquo;re compiling with VC6 but you&amp;rsquo;re using the platform SDK then you already have that typedef in winbase.</description>
    </item>
    
    <item>
      <title>Some interesting stuff from Katie Lucas</title>
      <link>https://lenholgate.com/blog/2007/02/some-interesting-stuff-from-katie-lucas.html</link>
      <pubDate>Thu, 08 Feb 2007 13:34:42 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2007/02/some-interesting-stuff-from-katie-lucas.html</guid>
      <description>Here are a few interesting views on software development from Katie Lucas. Via Joel on Software. I especially enjoyed the design methodologies, becoming a manager and &amp;ldquo;remove developers net access&amp;rdquo; pieces.</description>
    </item>
    
    <item>
      <title>Socket Server code: AcceptEx server memory leak</title>
      <link>https://lenholgate.com/blog/2007/02/socket-server-code-acceptex-server-memory-leak.html</link>
      <pubDate>Mon, 05 Feb 2007 10:21:52 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2007/02/socket-server-code-acceptex-server-memory-leak.html</guid>
      <description>The latest version of The Server Framework contains a memory leak in the CSocketServerEx class. It&amp;rsquo;s quite a good leak, it leaks an IO buffer on every connection attempt. The fix is as follows:
Change this code:
void CStreamSocketServerEx::PostAcceptRequest() { if (m_listeningSocket != INVALID_SOCKET) { if (m_connectionLimiter.CanCreateConnection()) { IncrementPendingReceives(); const IFullAddress &amp;amp;address = GetAddress(); IStreamSocketEx *pSocket = AllocateSocket(CreateSocket(address.Type())).Detach(); IBuffer *pBuffer = AllocateBuffer(); pBuffer-&amp;gt;SetUserPtr(m_socketIndex, pSocket); PostIoOperation(pBuffer, IO_Accept_Request); } else to this:</description>
    </item>
    
    <item>
      <title>Socket Server code: Connection termination race condition bug</title>
      <link>https://lenholgate.com/blog/2007/01/socket-server-code-connection-termination-race-condition-bug.html</link>
      <pubDate>Wed, 31 Jan 2007 15:12:38 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2007/01/socket-server-code-connection-termination-race-condition-bug.html</guid>
      <description>I&amp;rsquo;ve just fixed a problem in The Server Framework that was reported to me by one of my clients. There&amp;rsquo;s a race condition during connection establishment which can be demonstrated by a client that connects and then terminates the connection very quickly. The bug could be said to be in the example servers rather than the framework itself but it can be fixed by a change to the framework&amp;hellip;
In the non AcceptEx() version of the TCP server code, during connection establishment OnConnectionEstablished() is called from the code that processes a successful Accept().</description>
    </item>
    
    <item>
      <title>Back in the UK</title>
      <link>https://lenholgate.com/blog/2007/01/back-in-the-uk.html</link>
      <pubDate>Wed, 31 Jan 2007 14:25:49 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2007/01/back-in-the-uk.html</guid>
      <description>Normal service is about to resume&amp;hellip; I arrived back in the UK yesterday evening after lots of good skiing in France and Switzerland. Conditions in France could have been better (it&amp;rsquo;s still best to hire skis or use your rock skis - in Avoriaz at least!) but that only served to make us realise how good the conditions had been in Switzerland. I now have a couple of weeks to get some work done and let my legs rest before 3 weeks in Jackson Hole&amp;hellip;</description>
    </item>
    
    <item>
      <title>Comments should now be operational again...</title>
      <link>https://lenholgate.com/blog/2006/12/comments-should-now-be-operational-again.html</link>
      <pubDate>Thu, 28 Dec 2006 17:59:08 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/12/comments-should-now-be-operational-again.html</guid>
      <description>I&amp;rsquo;ve adjusted how I deal with comment spam and the comment system should now be active again&amp;hellip;</description>
    </item>
    
    <item>
      <title>Update</title>
      <link>https://lenholgate.com/blog/2006/12/update.html</link>
      <pubDate>Mon, 25 Dec 2006 18:09:49 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/12/update.html</guid>
      <description>I&amp;rsquo;m back in the UK briefly on 28th and 29th December and then I&amp;rsquo;m off to Davos for new year&amp;hellip; I&amp;rsquo;m back in the UK in early Feb and then ski guiding for the Ski Club of Great Britain in Jackson Hole for 3 weeks from 17th Feb&amp;hellip;</description>
    </item>
    
    <item>
      <title>Meanwhile...</title>
      <link>https://lenholgate.com/blog/2006/11/meanwhile.html</link>
      <pubDate>Thu, 30 Nov 2006 20:14:53 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/11/meanwhile.html</guid>
      <description>Meanwhile, I&amp;rsquo;ll continue doing slalom training in Tignes in the French alps&amp;hellip;
Beware, those poles are addictive!</description>
    </item>
    
    <item>
      <title>Question from a reader</title>
      <link>https://lenholgate.com/blog/2006/11/question-from-a-reader.html</link>
      <pubDate>Thu, 30 Nov 2006 20:08:20 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/11/question-from-a-reader.html</guid>
      <description>I&amp;rsquo;ve just had an question from a reader via email:
&amp;ldquo;I&amp;rsquo;m developing my huge server (I dont have much experience with programming servers) and as far as I know your source is the best available out there.. I would like fit it to my needs and use more c++ standard template libary instead of those buffer/linked list classes you made by yourself, but I&amp;rsquo;m afraid it would end in loss of preformance speed.</description>
    </item>
    
    <item>
      <title>Socket Server Code - async connect failure handling change</title>
      <link>https://lenholgate.com/blog/2006/11/socket-server-code---async-connect-failure-handling-change.html</link>
      <pubDate>Wed, 08 Nov 2006 17:44:04 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/11/socket-server-code---async-connect-failure-handling-change.html</guid>
      <description>I&amp;rsquo;ve just made a small change to The Server Framework. The change is in how the AsyncConnect() function reports connection errors and the potential problem can occur if there&amp;rsquo;s a race condition between a call to Close() on a socket that has not yet successfully connected. If the call to Close() completes before connection is attempted by the IO thread pool (possible but usually unlikely in normal operation) then the connection failure doesn&amp;rsquo;t currently make its way back to OnOutgoingConnectionFailed() which means that any code you might have in there for dealing with connection failures wont get called&amp;hellip;</description>
    </item>
    
    <item>
      <title>Why do developers still use VC6?</title>
      <link>https://lenholgate.com/blog/2006/11/why-do-developers-still-use-vc6.html</link>
      <pubDate>Wed, 01 Nov 2006 13:24:42 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/11/why-do-developers-still-use-vc6.html</guid>
      <description>Tim Anderson asks why there are so many developers still using VC6&amp;hellip;
Well, as I said before, if you produce C++ software in source code form and any of your clients require that you support VC6 then it&amp;rsquo;s often easier to maintain the project files in VC6 (and thus use that as your day to day development tool) than it is to use any of the newer compilers. The reason for this is that all of the newer releases will read and convert VC6 project files but none of them will write out project files that work with earlier releases.</description>
    </item>
    
    <item>
      <title>Socket Server code - addressing bug fix</title>
      <link>https://lenholgate.com/blog/2006/10/socket-server-code---addressing-bug-fix.html</link>
      <pubDate>Fri, 27 Oct 2006 12:40:58 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/10/socket-server-code---addressing-bug-fix.html</guid>
      <description>There&amp;rsquo;s a bug in one of the constructors for CSocket::InternetAddress which means that changing the example servers to use a specific network adapter&amp;rsquo;s address, rather than INADDR_ANY will generate an exception from the call to bind which says that the address is invalid.
The code currently reads like this:
CSocket::InternetAddress::InternetAddress( const unsigned long address, const unsigned short port) { sin_family = AF_INET; sin_port = htons(port); sin_addr.s_addr = htonl(address); } and it should read like this:</description>
    </item>
    
    <item>
      <title>PeakLeaders Argentina BASI course - review</title>
      <link>https://lenholgate.com/blog/2006/10/peakleaders_argentina_basi_course_-_review.html</link>
      <pubDate>Tue, 10 Oct 2006 14:07:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/10/peakleaders_argentina_basi_course_-_review.html</guid>
      <description>Previously publishedThis article was previously published on megeveski.com when I took some time out to ski. An index of these pages can be found here.
Having just successfully completed my BASI training with PeakLeaders in Bariloche, Argentina (and having blogged daily about the experience) I figure that it&amp;rsquo;s worth doing a slightly more structured review of the course as this may be of interest to people wishing to take this course in years to come&amp;hellip;</description>
    </item>
    
    <item>
      <title>I passed!</title>
      <link>https://lenholgate.com/blog/2006/09/i-passed.html</link>
      <pubDate>Tue, 26 Sep 2006 19:06:58 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/09/i-passed.html</guid>
      <description>Well, today I discovered that I had passed the BASI Ski Instructor course that I&amp;rsquo;ve been taking in Argentina, so I&amp;rsquo;m now a Ski Instructor&amp;hellip;
We fly back from Bariloche to Buenos Aires on Friday and then onwards to the UK on Saturday; the trip has been great, but i&amp;rsquo;m looking forward to getting home and getting a decent curry and a bacon sandwich&amp;hellip;</description>
    </item>
    
    <item>
      <title>Passed!</title>
      <link>https://lenholgate.com/blog/2006/09/passed.html</link>
      <pubDate>Tue, 26 Sep 2006 19:06:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/09/passed.html</guid>
      <description>Previously publishedThis article was previously published on megeveski.com when I took some time out to ski. An index of these pages can be found here.
I passed the instructor training, so I&amp;rsquo;m now a ski instructor&amp;hellip;
7 of our group of 8 passed, only Jo needs to do some more work to improve her skiing a little before doing a technical resit some time in the winter. 20 of the 24 skiers on the course passed and all 10 of the snowboarders passed, though one failed the trainee instructor program and therefore didn&amp;rsquo;t take part in the instructor program.</description>
    </item>
    
    <item>
      <title>BASI Ski Instructor training: Day 10</title>
      <link>https://lenholgate.com/blog/2006/09/basi_instructor_training_day_10.html</link>
      <pubDate>Tue, 26 Sep 2006 17:54:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/09/basi_instructor_training_day_10.html</guid>
      <description>Previously publishedThis article was previously published on megeveski.com when I took some time out to ski. An index of these pages can be found here.
Today was the final day of the Instructor training course. We woke to find that it was raining heavily at lake level and when we arrived at the lifts there was snow on the ground at the base. We took the sextuple and skied in 4-6 inches of fresh powder under the quad.</description>
    </item>
    
    <item>
      <title>BASI Ski Instructor training: Day 9</title>
      <link>https://lenholgate.com/blog/2006/09/basi_instructor_training_day_9.html</link>
      <pubDate>Mon, 25 Sep 2006 19:11:58 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/09/basi_instructor_training_day_9.html</guid>
      <description>Previously publishedThis article was previously published on megeveski.com when I took some time out to ski. An index of these pages can be found here.
We began the day with two short lessons from Katie and Neil. Katie&amp;rsquo;s was to demonstrate more &amp;lsquo;presence&amp;rsquo; during her teaching and Neil&amp;rsquo;s was to show more active analysis and corrective advice. We started at the top of the triple chair above the gondola and then cut down towards the drag lifts.</description>
    </item>
    
    <item>
      <title>BASI Ski Instructor training: Day 8</title>
      <link>https://lenholgate.com/blog/2006/09/basi_instructor_training_day_8.html</link>
      <pubDate>Sun, 24 Sep 2006 23:05:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/09/basi_instructor_training_day_8.html</guid>
      <description>Previously publishedThis article was previously published on megeveski.com when I took some time out to ski. An index of these pages can be found here.
Today was similar to yesterday, 20 minute individual teaching sessions in the morning and bumps in the afternoon. We were all pretty subdued today, mostly due to the stress and worry of the teaching sessions. Once again these nerves didn&amp;rsquo;t show during the actual teaching and everyone did well.</description>
    </item>
    
    <item>
      <title>BASI Ski Instructor training: Day 7</title>
      <link>https://lenholgate.com/blog/2006/09/basi_instructor_training_day_7.html</link>
      <pubDate>Sat, 23 Sep 2006 22:43:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/09/basi_instructor_training_day_7.html</guid>
      <description>Previously publishedThis article was previously published on megeveski.com when I took some time out to ski. An index of these pages can be found here.
Today was our first solo teaching session. We were each given an element of the Central Theme to teach in a lesson lasting 20 minutes. Julian and two other members of the group observed each lesson and the rest of the group were the students that we had to teach.</description>
    </item>
    
    <item>
      <title>BASI Ski Instructor training: Day 6</title>
      <link>https://lenholgate.com/blog/2006/09/basi_instructor_training_day_6.html</link>
      <pubDate>Fri, 22 Sep 2006 22:36:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/09/basi_instructor_training_day_6.html</guid>
      <description>Previously publishedThis article was previously published on megeveski.com when I took some time out to ski. An index of these pages can be found here.
The rain had been falling as snow on the mountain and there was even a little snow at the Catedral base. After waiting for a while for the gondola to open and then being told that it would be another 30 minutes we took the sextuple and then the quad.</description>
    </item>
    
    <item>
      <title>BASI Ski Instructor training: Day 5</title>
      <link>https://lenholgate.com/blog/2006/09/basi_instructor_training_day_5.html</link>
      <pubDate>Tue, 19 Sep 2006 22:04:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/09/basi_instructor_training_day_5.html</guid>
      <description>Previously publishedThis article was previously published on megeveski.com when I took some time out to ski. An index of these pages can be found here.
Today was the last day of the first block of 5 days of the Instructor training course. All of the groups skied together for some part of the day as this allowed the three trainers to &amp;lsquo;compare notes&amp;rsquo; and ensures that we&amp;rsquo;re all assessed in the same way; when multiple trainers are working together it&amp;rsquo;s important that someone wouldn&amp;rsquo;t pass in one group and yet fail in another due to slight differences in the way the individual trainers handle the assessment.</description>
    </item>
    
    <item>
      <title>BASI Ski Instructor training: Day 4</title>
      <link>https://lenholgate.com/blog/2006/09/basi_instructor_training_day_4.html</link>
      <pubDate>Mon, 18 Sep 2006 21:48:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/09/basi_instructor_training_day_4.html</guid>
      <description>Previously publishedThis article was previously published on megeveski.com when I took some time out to ski. An index of these pages can be found here.
Today we mostly worked on our piste performance along with some slightly steeper off piste stuff in the afternoon from the new detatchable quad which opened today.
The picture below of a Condor circling on the thermals above the top of the new lift was taken by Chris.</description>
    </item>
    
    <item>
      <title>BASI Ski Instructor training: Day 3</title>
      <link>https://lenholgate.com/blog/2006/09/basi_instructor_training_day_3.html</link>
      <pubDate>Sun, 17 Sep 2006 21:40:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/09/basi_instructor_training_day_3.html</guid>
      <description>Previously publishedThis article was previously published on megeveski.com when I took some time out to ski. An index of these pages can be found here.
Today we moved on to activities beyond The Central Theme; BASI has five strands of progression for people once they&amp;rsquo;re doing parallel turns correctly, these are: Piste, Steeps, Bumps, Variable (all kinds of off-piste conditions) and Freestyle. The plan for today was to cover Steeps and Bumps.</description>
    </item>
    
    <item>
      <title>BASI Ski Instructor training: Day 2</title>
      <link>https://lenholgate.com/blog/2006/09/basi_instructor_training_day_2.html</link>
      <pubDate>Sat, 16 Sep 2006 20:59:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/09/basi_instructor_training_day_2.html</guid>
      <description>Previously publishedThis article was previously published on megeveski.com when I took some time out to ski. An index of these pages can be found here.
As with yesterday, today was similar to day 2 of our Trainee Instructor program only more detailed. We started with a warm up run under the triple chair at the top of the gondola; the snow was great and we figured that it may well be the only &amp;lsquo;proper&amp;rsquo; skiing of the day, so we all had fun.</description>
    </item>
    
    <item>
      <title>BASI Ski Instructor training: Day 1</title>
      <link>https://lenholgate.com/blog/2006/09/basi_instructor_training_day_1.html</link>
      <pubDate>Fri, 15 Sep 2006 22:23:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/09/basi_instructor_training_day_1.html</guid>
      <description>Previously publishedThis article was previously published on megeveski.com when I took some time out to ski. An index of these pages can be found here.
Today was the first day of our BASI Instructor training program. This consists of two sets of 5 days continuous assessment. The first five days focus on the technical skiing aspects and the second five days shift the focus slightly to include the teaching aspects.</description>
    </item>
    
    <item>
      <title>The most important C&#43;&#43; stuff, ever...</title>
      <link>https://lenholgate.com/blog/2006/09/the-most-important-c-stuff-ever.html</link>
      <pubDate>Fri, 08 Sep 2006 12:11:45 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/09/the-most-important-c-stuff-ever.html</guid>
      <description>I&amp;rsquo;m still skiing in Argentina, the training is going well and within 3 weeks I&amp;rsquo;ll know if I make the grade and qualify as a BASI Ski Instructor&amp;hellip;
Because of all the skiing and partying and work out here I haven&amp;rsquo;t been keeping up with many technical issues but this morning I checked bloglines and picked a couple of random feeds to catch up on. One of them was the Artima C++ Source feed which has recently published 5 articles by Scott Meyers.</description>
    </item>
    
    <item>
      <title>BASI Trainee Ski Instructor training: The Numbers</title>
      <link>https://lenholgate.com/blog/2006/09/basi_trainee_instructor_training_the_numbers.html</link>
      <pubDate>Tue, 05 Sep 2006 19:30:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/09/basi_trainee_instructor_training_the_numbers.html</guid>
      <description>Previously publishedThis article was previously published on megeveski.com when I took some time out to ski. An index of these pages can be found here.
I got my &amp;ldquo;numbers&amp;rdquo; this evening. The way the BASI ratings work is that each skill (piste short turns, piste carving, central theme, etc) gets a rating based on how well you can perform it. The ratings are from 1 to 6 and split into 3 groups of 2; 1-2 are awareness, 3-4 are practice, 5-6 are acquired skills.</description>
    </item>
    
    <item>
      <title>BASI Trainee Ski Instructor training: Day 5</title>
      <link>https://lenholgate.com/blog/2006/09/basi_trainee_instructor_training_day_5.html</link>
      <pubDate>Sun, 03 Sep 2006 17:32:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/09/basi_trainee_instructor_training_day_5.html</guid>
      <description>Previously publishedThis article was previously published on megeveski.com when I took some time out to ski. An index of these pages can be found here.
Today was a glorious day, sunshine, perfect snow and no wind. We started the day with some runs under the three man chair above the gondola. We worked on elements of the Central Theme, first our basic parallel, and then our plough parallel. After a few runs of this we cut across to skier&amp;rsquo;s left towards the drag lifts.</description>
    </item>
    
    <item>
      <title>BASI Trainee Ski Instructor training: Day 4</title>
      <link>https://lenholgate.com/blog/2006/09/basi_trainee_instructor_training_day_4.html</link>
      <pubDate>Sat, 02 Sep 2006 20:27:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/09/basi_trainee_instructor_training_day_4.html</guid>
      <description>Previously publishedThis article was previously published on megeveski.com when I took some time out to ski. An index of these pages can be found here.
Today we focused on short to medium radius turns on piste, with a few bumps on the way home. We started with a couple of warm up runs under the quad chair. Sorry for the lack of pictures recently, I&amp;rsquo;ve switched jackets and my orange one doesn&amp;rsquo;t have enough pocket space for me to carry the camera.</description>
    </item>
    
    <item>
      <title>BASI Trainee Ski Instructor training: Day 3</title>
      <link>https://lenholgate.com/blog/2006/09/basi_trainee_instructor_training_day_3.html</link>
      <pubDate>Fri, 01 Sep 2006 20:10:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/09/basi_trainee_instructor_training_day_3.html</guid>
      <description>Previously publishedThis article was previously published on megeveski.com when I took some time out to ski. An index of these pages can be found here.
Today we ran the lessons that we prepared last night. These went well and we got lots of good feedback. Overall the lessons were fun to deliver and none of us really had any serious problems. Chris and I had a slight issue with talking too much and delivering too much information in one go; apparently this is common when you&amp;rsquo;re trying to deliver a lesson in a pair as you both want to say stuff and sometimes you say too much&amp;hellip;</description>
    </item>
    
    <item>
      <title>BASI Trainee Ski Instructor training: Day 2</title>
      <link>https://lenholgate.com/blog/2006/08/basi_trainee_instructor_training_day_2.html</link>
      <pubDate>Thu, 31 Aug 2006 21:38:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/08/basi_trainee_instructor_training_day_2.html</guid>
      <description>Previously publishedThis article was previously published on megeveski.com when I took some time out to ski. An index of these pages can be found here.
Today we covered the &amp;ldquo;Central Theme&amp;rdquo; this is the basic BASI technical framework that is designed to guide skiers in the use of the Fundamental Elements that we learnt about yesterday to move people from total beginners to being able to ski parallel.</description>
    </item>
    
    <item>
      <title>BASI Trainee Ski Instructor training: Day 1</title>
      <link>https://lenholgate.com/blog/2006/08/basi_trainee_instructor_training_day_1.html</link>
      <pubDate>Wed, 30 Aug 2006 21:38:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/08/basi_trainee_instructor_training_day_1.html</guid>
      <description>Previously publishedThis article was previously published on megeveski.com when I took some time out to ski. An index of these pages can be found here.
Today was day 1 of our trainee instructor program. We worked on the &amp;ldquo;Fundamental Elements&amp;rdquo; of skiing; or at least what BASI believe to be the fundamental elements.
We started the morning with a warm up and then began working on control of speed and line.</description>
    </item>
    
    <item>
      <title>BASI Trainer is here</title>
      <link>https://lenholgate.com/blog/2006/08/basi_trainee_instructor_training_day_0.html</link>
      <pubDate>Tue, 29 Aug 2006 21:38:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/08/basi_trainee_instructor_training_day_0.html</guid>
      <description>Previously publishedThis article was previously published on megeveski.com when I took some time out to ski. An index of these pages can be found here.
Our group&amp;rsquo;s BASI trainer has arrived, Julian Griffiths who is head of European Snowsport, ES, of Verbier. This evening we had a chat about what the training will entail and we start work on the Trainee Instructor training programme tomorrow. We had been expecting Julian to arrive tomorrow and were planning to have it as a rest day and to go out for a steak at the &amp;ldquo;greasy spoon&amp;rdquo; tonight, but we&amp;rsquo;re all very enthusiastic to be starting work tomorrow, stayed in and are all off to bed early!</description>
    </item>
    
    <item>
      <title>Something that has helped</title>
      <link>https://lenholgate.com/blog/2006/07/something-that-has-helped.html</link>
      <pubDate>Wed, 12 Jul 2006 09:55:54 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/07/something-that-has-helped.html</guid>
      <description>It&amp;rsquo;s been a difficult few months for me recently. One of the things that has helped a lot was something that, thankfully, I discovered relatively quickly and have since refined somewhat. The refined version sounds very simple; &amp;ldquo;appreciate every moment&amp;rdquo; but it actually takes some practice to get into the habit. Once you do get into the habit you will find that it leads to a positive feedback loop of happy thoughts; which often leave you with a smile on your face which seems to encourage more happiness around you&amp;hellip;</description>
    </item>
    
    <item>
      <title>Nerd in a cave</title>
      <link>https://lenholgate.com/blog/2006/07/nerd-in-a-cave.html</link>
      <pubDate>Wed, 12 Jul 2006 09:17:01 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/07/nerd-in-a-cave.html</guid>
      <description>This is something that anyone living with a geek really needs to understand.
I find it interesting that Rands has his set patterns of behaviour for getting into The Zone in the mornings. I&amp;rsquo;m very much a creature of habit and I actively &amp;ldquo;grow&amp;rdquo; new and effective patterns of behaviour as and when I recognise them&amp;hellip; I hadn&amp;rsquo;t really connected the successful completion of the patterns as being an enabling device for getting me into The Zone&amp;hellip; Must look into that a little more when I get back.</description>
    </item>
    
    <item>
      <title>No, this recent activity doesn&#39;t mean that normal service is about to resume</title>
      <link>https://lenholgate.com/blog/2006/07/no-this-recent-activity-doesnt-mean-that-normal-service-is-about-to-resume.html</link>
      <pubDate>Wed, 12 Jul 2006 09:06:29 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/07/no-this-recent-activity-doesnt-mean-that-normal-service-is-about-to-resume.html</guid>
      <description>I just realised that I hadn&amp;rsquo;t posted to here in two months. As I said a while back, my head is not really in the right space for me to be as effective, or interested, in my technical stuff at present. I&amp;rsquo;m finding it very hard to get into &amp;ldquo;The Zone&amp;rdquo; and do any decent coding in the evenings; though have had the potential to have had so much time alone to do so.</description>
    </item>
    
    <item>
      <title>Deadlock detection tool design change for Vista?</title>
      <link>https://lenholgate.com/blog/2006/07/deadlock-detection-tool-design-change-for-vista.html</link>
      <pubDate>Wed, 12 Jul 2006 08:54:17 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/07/deadlock-detection-tool-design-change-for-vista.html</guid>
      <description>It seems that Vista contains lots of interesting new Win32 API calls and some of these provide built in support for deadlock detection&amp;hellip; I guess my deadlock detection tool can operate differently on Vista then&amp;hellip;</description>
    </item>
    
    <item>
      <title>CLR thread pool woes</title>
      <link>https://lenholgate.com/blog/2006/07/clr-thread-pool-woes.html</link>
      <pubDate>Wed, 12 Jul 2006 08:47:38 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/07/clr-thread-pool-woes.html</guid>
      <description>Joe Duffy has written an interesting piece over on &amp;ldquo;Generalities &amp;amp; Details: Adventures in the High-tech Underbelly&amp;rdquo; about problems with the CLR thread pool. Joe&amp;rsquo;s a program manager on the CLR team at Microsoft, so he knows what he&amp;rsquo;s talking about!
I find the issues that Joe raises interesting as I spent some time designing a flexible thread pool for my C++ IOCP servers some time go and came across the problems that he&amp;rsquo;s facing.</description>
    </item>
    
    <item>
      <title>Argentina and beyond...</title>
      <link>https://lenholgate.com/blog/2006/06/argentina-and-beyond.html</link>
      <pubDate>Tue, 27 Jun 2006 11:35:44 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/06/argentina-and-beyond.html</guid>
      <description>Normal service will resume at some point, but right now I have some skiing to do&amp;hellip; I&amp;rsquo;m off to Argentina at the end of July for 2 months ski instructor training, then, when I get back I&amp;rsquo;m going to head off to Tignes to do some race training with R21, then on to the Ski Club reps course in December and then, who knows&amp;hellip;</description>
    </item>
    
    <item>
      <title>Mock32, parameterize from below</title>
      <link>https://lenholgate.com/blog/2006/05/mock32-parameterize-from-below.html</link>
      <pubDate>Fri, 12 May 2006 07:07:26 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/05/mock32-parameterize-from-below.html</guid>
      <description>It&amp;rsquo;s funny how potential product ideas beget other potential product ideas and the thing that you eventually end up with as a product for sale is often far from the original product idea and the code that you started to write&amp;hellip; I&amp;rsquo;m not even there yet and I&amp;rsquo;m on my third wave of product idea focus. Right now I&amp;rsquo;m working towards getting some developer tools out there to help people write better systems.</description>
    </item>
    
    <item>
      <title>The thread hijack exercise was a waste of time</title>
      <link>https://lenholgate.com/blog/2006/05/the-thread-hijack-exercise-was-a-waste-of-time.html</link>
      <pubDate>Tue, 09 May 2006 08:26:17 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/05/the-thread-hijack-exercise-was-a-waste-of-time.html</guid>
      <description>A few weeks ago I wrote about hijacking threads. The principle was good, the code worked but the reason I needed it was flawed so the exercise was a failure. I assumed that it was likely to be a failure when I set out though, so it&amp;rsquo;s more a confirmation that I need to do things properly rather than hackily&amp;hellip;
The idea was the try and outsmart the Windows program loader.</description>
    </item>
    
    <item>
      <title>IDisagree</title>
      <link>https://lenholgate.com/blog/2006/05/idisagree.html</link>
      <pubDate>Sun, 07 May 2006 11:24:53 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/05/idisagree.html</guid>
      <description>Jeremy D. Miller talks about how he dislikes the &amp;ldquo;I&amp;rdquo; prefix on interface names and how he&amp;rsquo;d prefer to ditch it in the same way he&amp;rsquo;s ditched most other hungarian notation. I&amp;rsquo;m all for ditching hungarian but I actually quite like the &amp;ldquo;I&amp;rdquo; prefix; though I no longer read it as &amp;ldquo;this is an interface&amp;rdquo; but simply &amp;ldquo;this is what I do&amp;rdquo;. In other words my interfaces, called things like IManageUsers simply clearly state what they do, classes that implement the interface manage users; the class definition is saying &amp;ldquo;I Manage Users&amp;rdquo;!</description>
    </item>
    
    <item>
      <title>Hijacking a thread in another process</title>
      <link>https://lenholgate.com/blog/2006/04/hijacking-a-thread-in-another-process.html</link>
      <pubDate>Mon, 17 Apr 2006 19:46:56 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/04/hijacking-a-thread-in-another-process.html</guid>
      <description>My API hooking currently relies on creating a block of memory in the target process to hold the string that you need to pass to LoadLibraryW() and then calling CreateRemoteThread() and passing the address of LoadLibraryW() as the thread start address and the address of our block of memory as the thread parameter. It works well and even allows you to know if the operation worked, by waiting for the remote thread to terminate and then examining its exit code.</description>
    </item>
    
    <item>
      <title>I love it when a plan comes together</title>
      <link>https://lenholgate.com/blog/2006/04/i-love-it-when-a-plan-comes-together.html</link>
      <pubDate>Fri, 14 Apr 2006 21:10:51 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/04/i-love-it-when-a-plan-comes-together.html</guid>
      <description>Discovering and then fixing the problem that prevented my tools from running on themselves planted a seed of an idea in my mind. My APIHook library and any code that used it died horribly under leak testing tools such as Purify and BoundsChecker. I&amp;rsquo;d put it down to me trying to be too clever but not being clever enough and ignored it but it&amp;rsquo;s a pain to have code that you can&amp;rsquo;t polish.</description>
    </item>
    
    <item>
      <title>Tools, debug thyselves</title>
      <link>https://lenholgate.com/blog/2006/04/tools-debug-thyselves.html</link>
      <pubDate>Wed, 12 Apr 2006 08:31:47 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/04/tools-debug-thyselves.html</guid>
      <description>One of the first things that I tried to do with the latest release of my TickShifter tool was to run it on itself. Of course, that didn&amp;rsquo;t work.
There are several reasons why the tool might have had problems running on itself but I thought I&amp;rsquo;d addressed most of them when I dealt with the issues around getting multiple copies of the tool running at the same time. The problems there were mostly around the names that I used for the named kernel objects that were required; the control program communicates with the dll that it injects so that it can control the dll&amp;rsquo;s operation and collect data.</description>
    </item>
    
    <item>
      <title>TickShifter v0.2</title>
      <link>https://lenholgate.com/blog/2006/04/tickshifter-v02.html</link>
      <pubDate>Sun, 09 Apr 2006 21:49:28 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/04/tickshifter-v02.html</guid>
      <description>As I mentioned a while back, I&amp;rsquo;ve been working on adding rudimentary GUIs to my debugging and testing tools. In fact, both the deadlock detection tool and the time shifting tool are both functional enough for real world use but the command line interfaces make them harder to use than they need to be. I&amp;rsquo;m not yet 100% sure of the form that the final GUI should take, but I&amp;rsquo;ve pressed on with my initial GUI development to produce a reasonably complete GUI for the cut down, demonstration tool, TickShifter.</description>
    </item>
    
    <item>
      <title>TickShifter v0.1</title>
      <link>https://lenholgate.com/blog/2006/04/tickshifter-v01.html</link>
      <pubDate>Tue, 04 Apr 2006 16:47:24 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/04/tickshifter-v01.html</guid>
      <description>Well, I figure that I&amp;rsquo;ve written about these debug tools that I&amp;rsquo;ve been working on for long enough. The time has come to make one available for other people to use and abuse. Given that I hope to sell some of these tools eventually I&amp;rsquo;ve decided not to give away early versions at present. Much as I will need feedback I think a properly structured beta program would be better for that.</description>
    </item>
    
    <item>
      <title>What this blog is ACTUALLY about</title>
      <link>https://lenholgate.com/blog/2006/04/what-this-blog-is-actually-about.html</link>
      <pubDate>Mon, 03 Apr 2006 11:01:55 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/04/what-this-blog-is-actually-about.html</guid>
      <description>Given all the publicity that this blog has received recently over my relationship break-up I thought it might be a good idea to give any new visitors a jumping off point into some of the more popular technical pieces. Believe it or not, this blog isn&amp;rsquo;t all about network snooping and infidelity. More often than not it&amp;rsquo;s about C++ on Windows, Test Driven Development and my opinions and whinges about software development issues.</description>
    </item>
    
    <item>
      <title>Comments and trackbacks are now back</title>
      <link>https://lenholgate.com/blog/2006/04/comments-and-trackbacks-are-now-back.html</link>
      <pubDate>Mon, 03 Apr 2006 10:38:24 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/04/comments-and-trackbacks-are-now-back.html</guid>
      <description>I&amp;rsquo;ve fixed the MT-Blacklist problem and so comments and trackbacks are now working again.</description>
    </item>
    
    <item>
      <title>Comments disabled for a while</title>
      <link>https://lenholgate.com/blog/2006/04/comments-disabled-for-a-while.html</link>
      <pubDate>Sun, 02 Apr 2006 10:45:38 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/04/comments-disabled-for-a-while.html</guid>
      <description>My hosting provider has changed something in their perl instalation which means that MT-Blacklist (the thing that protects this blog from comment and trackback spam) is broken and not doing its job properly. I&amp;rsquo;ve located a fix but need my hosting provider to help me apply it. Until they do I&amp;rsquo;ve disabled comments so that I don&amp;rsquo;t have too much crap to clear up once the problem is over. Sorry for any inconvenience.</description>
    </item>
    
    <item>
      <title>Deadlock detection tool updates</title>
      <link>https://lenholgate.com/blog/2006/04/deadlock-detection-tool-updates.html</link>
      <pubDate>Sun, 02 Apr 2006 00:02:34 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/04/deadlock-detection-tool-updates.html</guid>
      <description>When I came back from skiing in Colorado I had a bug report from a client and it took me a fair while to isolate the problem for them. The report suggested that a server that I&amp;rsquo;d built for them a while back was deadlocking in certain situations. The server had always had deadlock problems due to a couple of poor design decisions that I made early on and I&amp;rsquo;d built a tool to help me remove the potential for deadlock from it by analysing its lock acquisition patterns - the code was too complex for me to do this analysis by just looking at the code and although I should rewrite the poorly designed section of code I don&amp;rsquo;t have the time to do so (and it only causes problems when I make changes to the code, which doesn&amp;rsquo;t happen very often, and the problems can be caught by running my tool).</description>
    </item>
    
    <item>
      <title>Ok, now I&#39;m confused</title>
      <link>https://lenholgate.com/blog/2006/04/ok-now-im-confused.html</link>
      <pubDate>Sat, 01 Apr 2006 19:11:36 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/04/ok-now-im-confused.html</guid>
      <description>I&amp;rsquo;ve been looking at my web server log analysis and I have three peaks in my graphs for the last few days.
The first big peak, 6,000 hits per hour, was on 28th March when my relationship break-up post was on the front page of digg. The traffic then tailed off and dropped down to around 130 hits an hour on the 30th.
The second peak, of 500 hits per hour, occurred when a link was posted on The Register and stayed on its front page for a while.</description>
    </item>
    
    <item>
      <title>It must be a slow news day when...</title>
      <link>https://lenholgate.com/blog/2006/03/it-must-be-a-slow-news-day-when.html</link>
      <pubDate>Wed, 29 Mar 2006 18:51:58 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/03/it-must-be-a-slow-news-day-when.html</guid>
      <description>My relationship break-up posting gets linked to from CNN.com&amp;hellip;
And, of course, they put their own spin on it&amp;hellip; However, as I mentioned in a reply to one of the comments on the original posting&amp;hellip;
&amp;ldquo;Actually, I wrote a much longer piece with much more detail and decided that I didn&amp;rsquo;t need to publish it. I just needed to write it. To get it out of my head, in much the same way that I wrote about my sister&amp;rsquo;s tsunami experience.</description>
    </item>
    
    <item>
      <title>Ah, so that&#39;s what it&#39;s like to make the front page of digg!</title>
      <link>https://lenholgate.com/blog/2006/03/ah-so-thats-what-its-like-to-make-the-front-page-of-digg.html</link>
      <pubDate>Tue, 28 Mar 2006 10:00:26 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/03/ah-so-thats-what-its-like-to-make-the-front-page-of-digg.html</guid>
      <description>Typical. My usual subject matter isn&amp;rsquo;t interesting enough to get onto digg.com, etc. but a throw-away post about using Ethereal to catch my partner cheating gets on the front page&amp;hellip;
Ah well, such is life :) I&amp;rsquo;ll just try and write more interesting technical postings and in the mean time appreciate the kind words, the linky goodness, the traffic spike and correspondingly increased adsense revenue&amp;hellip;</description>
    </item>
    
    <item>
      <title>Be careful what you wish for</title>
      <link>https://lenholgate.com/blog/2006/03/be_careful_what_you_wish_for.html</link>
      <pubDate>Fri, 24 Mar 2006 10:33:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/03/be_careful_what_you_wish_for.html</guid>
      <description>Previously publishedThis article was previously published on megeveski.com when I took some time out to ski. An index of these pages can be found here.
Just after we returned from this year&amp;rsquo;s trip to Megève I was bemoaning the fact that I was back, keen to &amp;ldquo;run away to the circus&amp;rdquo; and do another season and wondering how it could be possible to fit all of the interesting ski related things that are going on around &amp;ldquo;real life&amp;rdquo;.</description>
    </item>
    
    <item>
      <title>Table for one</title>
      <link>https://lenholgate.com/blog/2006/03/table-for-one.html</link>
      <pubDate>Wed, 22 Mar 2006 08:26:16 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/03/table-for-one.html</guid>
      <description>Sorry about the lack of technical postings for a while, this last month or so has been rather hard for me.
On 13th February I became suspicious that something wasn&amp;rsquo;t quite right with Michelle, my partner for the last 17 or so years. My suspicions increased and I ended up setting up my laptop in the equipment cupboard as a packet sniffer running Ethereal (now WireShark). I then connected to the laptop via a Remote Desktop Connection and controlled the sniffer from my main PC.</description>
    </item>
    
    <item>
      <title>Latest release of socket server code</title>
      <link>https://lenholgate.com/blog/2006/02/latest-release-of-socket-server-code.html</link>
      <pubDate>Tue, 14 Feb 2006 08:40:48 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/02/latest-release-of-socket-server-code.html</guid>
      <description>The latest release of the free version of my asynchronous, windows, IOCP based, socket server framework can now be obtained from here at ServerFramework.com.
The latest release is really just a bug fix and compiler compatability release. The code now supports Visual Studio 2005 (as well as VC6, Visual Studio .Net (2002) and Visual Studio 2003). I&amp;rsquo;ve fixed the memory leak bugs that were present in the ThreadPoolLargePacketEchoServer sample and worked around the iostream leak that&amp;rsquo;s present in the Visual Studio 2005 version of STL.</description>
    </item>
    
    <item>
      <title>VS2005 STL strstream and stringstream leaks</title>
      <link>https://lenholgate.com/blog/2006/02/vs2005-stl-strstream-and-stringstream-leaks.html</link>
      <pubDate>Sat, 11 Feb 2006 10:17:54 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/02/vs2005-stl-strstream-and-stringstream-leaks.html</guid>
      <description>Well, it turns out that my initial gut instinct about the leaks that I found in my socket servers when built with VS 2005 was correct. It was an STL thing.
The following code reproduces the problem.
#include &amp;lt;strstream&amp;gt; #include &amp;lt;sstream&amp;gt; #include &amp;lt;iostream&amp;gt; #include &amp;lt;stdio.h&amp;gt; using std::strstream; using std::ostrstream; using std::stringstream; using std::ostringstream; using std::cout; using std::endl; int main(int argc, char* argv[]) { cout &amp;lt;&amp;lt; &amp;#34;Ready - press a key to test strsteam&amp;#34; &amp;lt;&amp;lt; endl; getchar(); const size_t loopCount = 100000; size_t i; for (i = 0; i &amp;lt; loopCount; ++i) { strstream buf; } cout &amp;lt;&amp;lt; &amp;#34;Ready - press a key to test ostrsteam&amp;#34; &amp;lt;&amp;lt; endl; getchar(); for (i = 0; i &amp;lt; loopCount; ++i) { ostrstream buf; } cout &amp;lt;&amp;lt; &amp;#34;Ready - press a key to test stringsteam&amp;#34; &amp;lt;&amp;lt; endl; getchar(); for (i = 0; i &amp;lt; loopCount; ++i) { stringstream buf; } cout &amp;lt;&amp;lt; &amp;#34;Ready - press a key to test ostringsteam&amp;#34; &amp;lt;&amp;lt; endl; getchar(); for (i = 0; i &amp;lt; loopCount; ++i) { ostringstream buf; } cout &amp;lt;&amp;lt; &amp;#34;Done - press a key&amp;#34; &amp;lt;&amp;lt; endl; getchar(); return 0; } The code and projects for VC6 through VS2005 can be downloaded from here.</description>
    </item>
    
    <item>
      <title>More on the socket server VS2005 &#39;leaks&#39;</title>
      <link>https://lenholgate.com/blog/2006/02/more-on-the-socket-server-vs2005-leaks.html</link>
      <pubDate>Fri, 10 Feb 2006 18:33:12 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/02/more-on-the-socket-server-vs2005-leaks.html</guid>
      <description>A while ago I reported that I&amp;rsquo;d been seeing very strange memory usage patterns in the debug build of the simple echo server when built with Visual Studio 2005 using the standard version of STL that ships with it. The thing that interests me most about this leak is that it seems to be more of a &amp;lsquo;strange allocation strategy&amp;rsquo; rather than a leak as I was previously able to get the memory usage to grow to a large amount and then suddenly it dropped back to something reasonable and then started to grow again.</description>
    </item>
    
    <item>
      <title>New kind of spam?</title>
      <link>https://lenholgate.com/blog/2006/02/new-kind-of-spam.html</link>
      <pubDate>Fri, 10 Feb 2006 08:02:35 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/02/new-kind-of-spam.html</guid>
      <description>Recently I&amp;rsquo;ve been getting lots of emails from people who seem to think that my company, JetByte Limited, is currently recruiting. We&amp;rsquo;re not now and are unlikely to be in the near future, but that doesn&amp;rsquo;t mean people shouldn&amp;rsquo;t send speculative emails. In the past I&amp;rsquo;ve always responded to each of the applicants, explained that we&amp;rsquo;re not recruiting, and sometimes even made suggestions on how they might improve their approach and/or resume/cv.</description>
    </item>
    
    <item>
      <title>Good stuff</title>
      <link>https://lenholgate.com/blog/2006/02/good-stuff-1.html</link>
      <pubDate>Thu, 09 Feb 2006 08:17:43 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/02/good-stuff-1.html</guid>
      <description>Once again I have a list of items flagged for comment in Bloglines but at least this time I have an excuse: &amp;ldquo;We were on a break!&amp;rdquo;.
First is a link from Brad Wilson to where Bruce Eckel writes about how the &amp;ldquo;Hyper enthusiasts&amp;rdquo; of the Java world have moved on to Ruby. Bruce makes some good points. Personally I&amp;rsquo;d be pretty happy if all persuasuion of &amp;ldquo;hyper enthusiast&amp;rdquo; were to vanish overnight, IMHO they just get in the way, distort the picture and encourage bad decisions&amp;hellip;</description>
    </item>
    
    <item>
      <title>Sounds like a real nice way to work</title>
      <link>https://lenholgate.com/blog/2006/02/sounds-like-a-real-nice-way-to-work.html</link>
      <pubDate>Mon, 06 Feb 2006 12:51:11 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/02/sounds-like-a-real-nice-way-to-work.html</guid>
      <description>Noel Llopis, over at Games From Within, has written a nice piece about a typical workday at his work place, High Moon Studios.
It certainly sounds like a nice way of working. Unfortunately I haven&amp;rsquo;t been involved in quite that agile a team yet.</description>
    </item>
    
    <item>
      <title>Back from Megève</title>
      <link>https://lenholgate.com/blog/2006/02/back-from-megve.html</link>
      <pubDate>Sun, 05 Feb 2006 15:11:59 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/02/back-from-megve.html</guid>
      <description>I&amp;rsquo;ve been skiing for the last couple of weeks and now I&amp;rsquo;m back in London; normal service will resume soon.</description>
    </item>
    
    <item>
      <title>More on the socket server leaks</title>
      <link>https://lenholgate.com/blog/2006/01/more-on-the-socket-server-leaks.html</link>
      <pubDate>Sat, 21 Jan 2006 13:34:05 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/01/more-on-the-socket-server-leaks.html</guid>
      <description>It seems that the leak that I found isn&amp;rsquo;t likely to be the one that my new user of the code is having problems with. They&amp;rsquo;ve built the code with Visual Studio 2005, made a few (correct) changes to the code to get it to build with the stricter compiler and they find that several of the servers leak; at first it looked like it was just the more complex servers but I&amp;rsquo;ve just tested the simplest echo server and that leaks in just the same way.</description>
    </item>
    
    <item>
      <title>Leak plugged</title>
      <link>https://lenholgate.com/blog/2006/01/leak-plugged.html</link>
      <pubDate>Fri, 20 Jan 2006 21:59:56 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/01/leak-plugged.html</guid>
      <description>Well, the leak in my legacy code wasn&amp;rsquo;t too hard to find. There was one potential leak and one screamingly obvious leak. I&amp;rsquo;ll post the fixed code tomorrow.</description>
    </item>
    
    <item>
      <title>Look back and shudder</title>
      <link>https://lenholgate.com/blog/2006/01/look-back-and-shudder.html</link>
      <pubDate>Fri, 20 Jan 2006 19:29:19 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/01/look-back-and-shudder.html</guid>
      <description>I&amp;rsquo;m currently investigating a memory leak in a complicated piece of multi-threaded code. Unfortunately the code doesn&amp;rsquo;t have any unit tests and the leak only shows up reliably in the release build. Worse, I wrote the code and nobody has fiddled with it since, so it&amp;rsquo;s my leak and my code and I have nobody to complain about and no excuses. I miss the unit tests and loose coupling that would be present if I hadn&amp;rsquo;t written this particular piece of code quite so long ago.</description>
    </item>
    
    <item>
      <title>Always Produce</title>
      <link>https://lenholgate.com/blog/2006/01/always-produce.html</link>
      <pubDate>Fri, 20 Jan 2006 08:12:56 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/01/always-produce.html</guid>
      <description>Paul Graham writes about &amp;ldquo;How to do what you love&amp;rdquo;&amp;hellip; It&amp;rsquo;s quite a good piece but the best bit is hidden down near the end. He suggests that a good way to &amp;ldquo;stay honest with yourself&amp;rdquo; about dreams to do something other than your &amp;ldquo;day job&amp;rdquo; is to Always Produce; that is, don&amp;rsquo;t just talk about it or think about it, produce physical artefacts.
This is excellent advice and it can be applied to pretty much everything you do.</description>
    </item>
    
    <item>
      <title>Charles Petzold on why he loves books</title>
      <link>https://lenholgate.com/blog/2006/01/charles-petzold-on-why-he-loves-books.html</link>
      <pubDate>Thu, 19 Jan 2006 08:01:42 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/01/charles-petzold-on-why-he-loves-books.html</guid>
      <description>Charles Petzold confesses his love for books.
I must admit this bit really hit home for me: &amp;ldquo;I love how my books remind me of passages in my life. I love the shelves of authors I&amp;rsquo;ve been obsessed with, and the books that knocked me over. I love knowing that I still own virtually every book I&amp;rsquo;ve read.&amp;rdquo;
I have shelves and shelves of technical books as I&amp;rsquo;ve always been quite happy to buy a book on the chance that I might learn one thing from it.</description>
    </item>
    
    <item>
      <title>The best toys always come with an SDK, 2</title>
      <link>https://lenholgate.com/blog/2006/01/the-best-toys-always-come-with-an-sdk-2.html</link>
      <pubDate>Mon, 16 Jan 2006 14:54:40 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/01/the-best-toys-always-come-with-an-sdk-2.html</guid>
      <description>I finally got around to upgrading my mobile phone from an aging Sony Ericsson T68i to a more current (though still hardly bleeding edge) Motorola Razr V3. I&amp;rsquo;m not interested in the downloadable java games but the fact that you can get a J2ME SDK for it and that the docs seem to imply that you can access the GPRS network using SSL and that you can also access the serial port makes it interesting&amp;hellip; Now I just need a hack to be able to somehow connect the Garmin GPS to the V3 and some code to grab the location from the GPS and send it off to a web service somewhere and some duct tape to make it one device&amp;hellip;</description>
    </item>
    
    <item>
      <title>When your mocks are executable</title>
      <link>https://lenholgate.com/blog/2006/01/when-your-mocks-are-executable.html</link>
      <pubDate>Mon, 16 Jan 2006 13:12:47 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/01/when-your-mocks-are-executable.html</guid>
      <description>The size of the &amp;ldquo;units&amp;rdquo; that I test with my unit tests varies quite considerably. Usually I tend to work at the single class level; the test will provide mocks for the services that the class requires and the tests will ensure that the class behaves correctly and interacts as expected with the its service providers. Sometimes though the units consist of a whole subsystem, still often a single class, but one which wires up and collects many other classes into a single component; again the service providers that it uses may be mocked but they&amp;rsquo;re often only right on the edge of the functionality that is being tested.</description>
    </item>
    
    <item>
      <title>First tracks</title>
      <link>https://lenholgate.com/blog/2006/01/first-tracks.html</link>
      <pubDate>Sun, 15 Jan 2006 21:03:45 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/01/first-tracks.html</guid>
      <description>Last week I managed to get my GPS code to download the GPS &amp;ldquo;track&amp;rdquo; from my device and create an html file that uses the Google Maps API to display it as an overlay.
I spent some time trying to get the map to display correctly from within the normal blog pages but something was causing Internet Explorer to fail to display the tracks. Firefox and Opera were fine; I guess it&amp;rsquo;s something to do with IE using VRML to display the track and the others using a server-side generated graphical overlay.</description>
    </item>
    
    <item>
      <title>Purecall</title>
      <link>https://lenholgate.com/blog/2006/01/purecall.html</link>
      <pubDate>Sat, 14 Jan 2006 13:19:13 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/01/purecall.html</guid>
      <description>I&amp;rsquo;ve been plugging away at my multi-process Win32 debugger code this week and one of my test harnesses had started to suffer from intermittent &amp;ldquo;R6025 - pure virtual function call&amp;rdquo; errors. These tend to crop up if you call a virtual function from a constructor or destructor or if there&amp;rsquo;s a race condition between calling a method on an object from one thread and destroying the object in another thread. For me, at least, they tend to be simple mistakes to fix once I know where the problem lies.</description>
    </item>
    
    <item>
      <title>A collection of links</title>
      <link>https://lenholgate.com/blog/2006/01/a-collection-of-links.html</link>
      <pubDate>Sat, 14 Jan 2006 12:16:29 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/01/a-collection-of-links.html</guid>
      <description>Once again I&amp;rsquo;ve been too busy to comment on the following blog postings in a timely manner so here&amp;rsquo;s a collection of stuff that&amp;rsquo;s been sitting in my &amp;ldquo;good stuff&amp;rdquo; list for a while now.
Josh Carter over at &amp;ldquo;multipart-mixed&amp;rdquo; warns us of &amp;ldquo;The Perils of Bad C/C++&amp;rdquo; Schools. I must admit that I agree with him here, far too many programmers that I&amp;rsquo;ve dealt with over the years don&amp;rsquo;t really understand pointers even though you would think, from their background, that they should.</description>
    </item>
    
    <item>
      <title>So that&#39;s what it&#39;s called</title>
      <link>https://lenholgate.com/blog/2006/01/so-thats-what-its-called.html</link>
      <pubDate>Sat, 14 Jan 2006 09:45:30 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/01/so-thats-what-its-called.html</guid>
      <description>Jeremy D. Miller points out that my &amp;lsquo;second&amp;rsquo; style of coding (see here) is called writing a &amp;ldquo;spike&amp;rdquo; in XP terms.</description>
    </item>
    
    <item>
      <title>Shaping the future of the XLL interface in Excel 12</title>
      <link>https://lenholgate.com/blog/2006/01/shaping-the-future-of-the-xll-interface-in-excel-12.html</link>
      <pubDate>Thu, 12 Jan 2006 08:21:31 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/01/shaping-the-future-of-the-xll-interface-in-excel-12.html</guid>
      <description>If you&amp;rsquo;re into writing C/C++ XLL addins for Excel and you&amp;rsquo;d like to help make sure that the new features in the new XLL interface provide all the functionality that you&amp;rsquo;d like, then it might be an idea for you to get in touch with David Gainer via the contact form on his Excel 12 blog.</description>
    </item>
    
    <item>
      <title>Online autism &#39;test&#39;</title>
      <link>https://lenholgate.com/blog/2006/01/online-autism-test.html</link>
      <pubDate>Tue, 10 Jan 2006 23:31:58 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/01/online-autism-test.html</guid>
      <description>I scored a 28, which is &amp;ldquo;above average&amp;rdquo;, so considerably nearer to Asperger&amp;rsquo;s than it is considered to be &amp;ldquo;normal&amp;rdquo;. Which, to be honest, seems about right to me. If nothing else, it might make you think&amp;hellip;
Via Steve Pavlina&amp;rsquo;s personal development blog.</description>
    </item>
    
    <item>
      <title>Excel addins sharing data</title>
      <link>https://lenholgate.com/blog/2006/01/excel-addins-sharing-data.html</link>
      <pubDate>Tue, 10 Jan 2006 22:58:27 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/01/excel-addins-sharing-data.html</guid>
      <description>Or, marvelling at my own, past, cleverness.
I&amp;rsquo;ve been doing a lot of work on these Excel addins for my current client and, as I get back into the whole C++ XLL stuff, I start to realise just how cool my child of 2001 really is.
The Excel addins run as a suite; the team I work with has different users within the bank and there&amp;rsquo;s some cross over but some distinct separation.</description>
    </item>
    
    <item>
      <title>Beware the momentum of prototype code</title>
      <link>https://lenholgate.com/blog/2006/01/beware-the-momentum-of-prototype-code.html</link>
      <pubDate>Tue, 10 Jan 2006 19:53:03 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/01/beware-the-momentum-of-prototype-code.html</guid>
      <description>A while back Chris Baus wrote a little rant about prototypes. I started to write a piece that defended prototypes when correctly used and ran out of steam; or, more to the point, couldn&amp;rsquo;t really say very much except they&amp;rsquo;re OK except when they&amp;rsquo;re not, try not to get to the point where they&amp;rsquo;re not.
Having just recently been bitten by a prototype that was trying to rise above its station, I now have more to say.</description>
    </item>
    
    <item>
      <title>Detecting the Excel Function Wizard</title>
      <link>https://lenholgate.com/blog/2006/01/detecting-the-excel-function-wizard.html</link>
      <pubDate>Mon, 09 Jan 2006 19:32:09 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/01/detecting-the-excel-function-wizard.html</guid>
      <description>I&amp;rsquo;m currently working on some C++ Excel addins for an investment bank. I originally wrote the addins for them back in 2001 and they&amp;rsquo;ve evolved slowly ever since. Right now we&amp;rsquo;re adding some new functionality and, whilst testing some of the new functions in the test sheets, I noticed that the functions weren&amp;rsquo;t behaving themselves properly when the Excel Function Wizard was in use&amp;hellip;
The Function Wizard allows you to step through the creation of a call to an Excel worksheet function.</description>
    </item>
    
    <item>
      <title>Now I&#39;m confused (C&#43;&#43;/CLI destructors)</title>
      <link>https://lenholgate.com/blog/2006/01/now-im-confused-ccli-destructors.html</link>
      <pubDate>Sun, 08 Jan 2006 13:36:48 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/01/now-im-confused-ccli-destructors.html</guid>
      <description>So here I am, writing a piece about how the C++/CLI destructor and finalizer stuff could have been a bit neater and I put together some sample code to demonstrate my point and it doesn&amp;rsquo;t do what the docs I mentioned yesterday suggest that it should do&amp;hellip;
Given this example class&amp;hellip;.
ref class Example { public : Example( bool throws) : m_count(s_count++), m_string(gcnew String(&amp;#34;MyString&amp;#34;)) { Console::WriteLine(m_count + &amp;#34; - Example(throws = &amp;#34; + throws + &amp;#34;)&amp;#34;); if (throws) { throw &amp;#34;Thrown&amp;#34;; } } Example() : m_count(s_count++), m_string(gcnew String(&amp;#34;MyString&amp;#34;)) { Console::WriteLine(m_count + &amp;#34; - Example&amp;#34;); } ~Example() { Console::WriteLine(m_count + &amp;#34; - ~Example&amp;#34;); delete m_string; this-&amp;gt;!</description>
    </item>
    
    <item>
      <title>Something all C&#43;&#43; programmers should know when using managed C&#43;&#43;</title>
      <link>https://lenholgate.com/blog/2006/01/something-all-c-programmers-should-know-when-using-managed-c.html</link>
      <pubDate>Sat, 07 Jan 2006 11:12:37 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/01/something-all-c-programmers-should-know-when-using-managed-c.html</guid>
      <description>Beware! The rules for when a destructor is called for a managed C++ class in Visual C++ are different than for &amp;ldquo;normal&amp;rdquo; C++ class.
Jochen Kalmbach recently posed a simple question about a managed C++ class; &amp;ldquo;Will the destructor be called in a managed class if the constructor has thrown an exception?&amp;rdquo;. The answer and the comments are illuminating and, to be honest, somewhat annoying.
In summary, yes, the destructor is called even if the constructor doesn&amp;rsquo;t complete, see here for more details.</description>
    </item>
    
    <item>
      <title>Implicit Interfaces</title>
      <link>https://lenholgate.com/blog/2006/01/implicit-interfaces.html</link>
      <pubDate>Sat, 07 Jan 2006 09:57:58 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/01/implicit-interfaces.html</guid>
      <description>ImplicitInterfaceImplementation - from Martin Fowler is an interesting piece where Martin suggests that it would be useful to be able to provide alternative implementations of a class&amp;rsquo;s implicit interface. That is, given a class that does not inherit from an interface, it&amp;rsquo;s sometimes useful to be able to split the class into an implicit interface, the public operations that it provides, and treat that as if it were explicitly declared as an interface from which the class derives.</description>
    </item>
    
    <item>
      <title>Grumpy old men</title>
      <link>https://lenholgate.com/blog/2006/01/grumpy-old-men.html</link>
      <pubDate>Sat, 07 Jan 2006 09:42:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/01/grumpy-old-men.html</guid>
      <description>Am I a curmudgeon of technology? You betcha - Ted Neward over at &amp;ldquo;The Blog Ride&amp;rdquo; explains why he&amp;rsquo;s cynical about new technology and suggests that we&amp;rsquo;d do well to have a little more cynicism. I agree with him, I tend to take a similar position having been let down by various &amp;ldquo;silver bullets&amp;rdquo; in the past. I think I decided that it was my time spent working with OLE DB providers that caused me to be more cynical towards the Microsoft technology hype machine; When someone brings me a &amp;ldquo;cool&amp;rdquo; new technology and claims that because simple things are so easy to do in a sample my complex problem will also be easy to solve using the technology I ask to see the code that solves my problem&amp;hellip;</description>
    </item>
    
    <item>
      <title>C&#43;&#43; Tips: 4 - Learn to work in terms of abstractions, no matter how small</title>
      <link>https://lenholgate.com/blog/2006/01/c-tips-4---learn-to-work-in-terms-of-abstractions-no-matter-how-small.html</link>
      <pubDate>Fri, 06 Jan 2006 22:10:24 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/01/c-tips-4---learn-to-work-in-terms-of-abstractions-no-matter-how-small.html</guid>
      <description>In the fight to make C++ code easier to reason about and understand, never underestimate the value of a name. Giving something a decent name is the first step in thinking about the concept at a slightly more abstract level. Abstraction is all about selective forgetfulness, by grouping together several related program elements, defining a concept and giving that concept a name you can, from then on, choose to work at the level of the name rather than the detail.</description>
    </item>
    
    <item>
      <title>iTech Bluetooth Virtual Keyboard</title>
      <link>https://lenholgate.com/blog/2006/01/itech-bluetooth-virtual-keyboard.html</link>
      <pubDate>Fri, 06 Jan 2006 19:40:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/01/itech-bluetooth-virtual-keyboard.html</guid>
      <description>VirtualKeyboard.jpg I recently purchased an iTech Bluetooth Virtual Keyboard for use with Michelle&amp;rsquo;s PDA. It&amp;rsquo;s basically a little box that&amp;rsquo;s about the size of two packets of chewing gum with a red window in the top. It projects a keyboard onto a flat surface and detects when you press the keys. It&amp;rsquo;s one of those devices that looks too cool to work, but it does, kinda&amp;hellip; Unfortunately there were driver problems with the iPaq 4150 that meant that it would work for around 20 keypresses and then stop, reset itself, reconnect and then start working again&amp;hellip; At first I thought that it was a problem with the keyboard but it worked fine with my laptop (though that&amp;rsquo;s hardly the point!</description>
    </item>
    
    <item>
      <title>LEGO Mindstorms NXT</title>
      <link>https://lenholgate.com/blog/2006/01/lego-mindstorms-nxt.html</link>
      <pubDate>Thu, 05 Jan 2006 19:23:37 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/01/lego-mindstorms-nxt.html</guid>
      <description>LEGO has announced a new version of their Mindstorms autonomous robot building system. I did a fair amount of playing around with the original Mindstorms kit way back when and created a system that allowed you to control your robots over a NetMeeting connection. The new Mindstorms NXT system sounds pretty cool. I like the idea of being able to use bluetooth to control and download programs to the robots and the new sensors sound much more complex than the old stuff.</description>
    </item>
    
    <item>
      <title>C&#43;&#43; Tips: 3 - Strive to be const correct</title>
      <link>https://lenholgate.com/blog/2006/01/c-tips-3---strive-to-be-const-correct.html</link>
      <pubDate>Wed, 04 Jan 2006 22:34:44 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/01/c-tips-3---strive-to-be-const-correct.html</guid>
      <description>Another extremely powerful tool that you can use to ensure that your C++ code communicates as clearly as possible is const. By correctly using const all the time when designing your abstractions you can divide an object&amp;rsquo;s interface into two smaller, easier to understand interfaces; one which does change the object&amp;rsquo;s internal state and one which doesn&amp;rsquo;t. By correctly using const all the time when defining constants and variables you can clearly communicate which are which.</description>
    </item>
    
    <item>
      <title>C&#43;&#43; Tips: 2 - Avoid designing undefined behaviour</title>
      <link>https://lenholgate.com/blog/2006/01/c-tips-2---avoid-designing-undefined-behaviour.html</link>
      <pubDate>Tue, 03 Jan 2006 19:45:53 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/01/c-tips-2---avoid-designing-undefined-behaviour.html</guid>
      <description>When designing code it&amp;rsquo;s often easy to include undefined behaviour. The need for code that exhibits this kind of behaviour is, however, generally pretty rare and there are often ways around allowing undefined behaviour. In general it&amp;rsquo;s usually best to try to avoid undefined behaviour and instead be clear about exactly what happens under all usage conditions.
Undefined behaviour can be part of your contract with the client, you expect them to adhere to their side of the contract and if they do then you will keep your side; if they don&amp;rsquo;t then all bets are off.</description>
    </item>
    
    <item>
      <title>C&#43;&#43; Tips: 1 - Avoid unnecessary optionality</title>
      <link>https://lenholgate.com/blog/2006/01/c-tips-1---avoid-unnecessary-optionality.html</link>
      <pubDate>Tue, 03 Jan 2006 12:14:28 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/01/c-tips-1---avoid-unnecessary-optionality.html</guid>
      <description>One of my main aims when writing code in C++ is to have the code clearly communicate its purpose. I find it useful to be able to look at a single line in isolation and have a pretty good idea of what its effects are on the code that it cooperates with. Unfortunately C++ code can often be written in an imprecise way that makes reasoning about what it actually does harder than it needs to be.</description>
    </item>
    
    <item>
      <title>Programming by contract in C&#43;&#43;</title>
      <link>https://lenholgate.com/blog/2006/01/programming-by-contract-in-c.html</link>
      <pubDate>Sun, 01 Jan 2006 15:05:35 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2006/01/programming-by-contract-in-c.html</guid>
      <description>There&amp;rsquo;s the first part of what I expect to be a very nice article about programming by contract in C++ over at The C++ Source: The Nuclear Reactor and the Deep Space Probe.
Updated 3rd Jan 2006 - the article now appears to be called Contract Programming 101.</description>
    </item>
    
    <item>
      <title>JetByte News: Summit Bonds and Money Markets</title>
      <link>https://lenholgate.com/news/2006/01/summit-bonds-and-money-markets.html</link>
      <pubDate>Sun, 01 Jan 2006 12:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/news/2006/01/summit-bonds-and-money-markets.html</guid>
      <description>Len is back working with the Commerzbank Bonds and Money Markets teams in London with their Excel add-ins, C++ CORBA system and Java servers.
Len originally created much of this for them back in 2001 and is back to help guide the team in adding some new functionality.</description>
    </item>
    
    <item>
      <title>Garmin eTrex Vista C communications protocols</title>
      <link>https://lenholgate.com/blog/2005/12/garmin-etrex-vista-c-communications-protocols.html</link>
      <pubDate>Fri, 30 Dec 2005 11:08:51 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/12/garmin-etrex-vista-c-communications-protocols.html</guid>
      <description>As I mentioned a while back, I got a Garmin eTrex Vista C handheld GPS as a Christmas present and there&amp;rsquo;s code available from the Garmin website that lets you talk to it via its USB interface. There&amp;rsquo;s also a specification document for the protocols that it uses. At first glance this is great. I&amp;rsquo;ve seen better specifications but with a little trial and error I&amp;rsquo;ve managed to transfer the saved GPS tracks from the device to my code and I can set the device up to send it GPS position every couple of seconds (so I could use it as an external GPS receiver for mapping software) etc.</description>
    </item>
    
    <item>
      <title>Thought for the day</title>
      <link>https://lenholgate.com/blog/2005/12/thought-for-the-day-3.html</link>
      <pubDate>Wed, 28 Dec 2005 12:13:18 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/12/thought-for-the-day-3.html</guid>
      <description>Does anyone in IT use paper clips for anything other than resetting hardware either by pressing those hard to reach reset buttons or by shorting out bios batteries, etc?</description>
    </item>
    
    <item>
      <title>Is it just me, or do the best toys always come with an SDK</title>
      <link>https://lenholgate.com/blog/2005/12/is-it-just-me-or-do-the-best-toys-always-come-with-an-sdk.html</link>
      <pubDate>Tue, 27 Dec 2005 10:35:49 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/12/is-it-just-me-or-do-the-best-toys-always-come-with-an-sdk.html</guid>
      <description>I got a Garmin eTrex Vista C handheld GPS as a Christmas present. Another cool tool to add to my geeky ski stuff. So far I&amp;rsquo;ve only used it to navigate to and from a restaurant yesterday lunch time, but it seems to have lots of features that will make it useful on the mountain. The best thing about it? There&amp;rsquo;s an SDK that you can download to communicate with the device.</description>
    </item>
    
    <item>
      <title>Interesting article on deadlock detection in DDJ this month</title>
      <link>https://lenholgate.com/blog/2005/12/interesting-article-on-deadlock-detection-in-ddj-this-month.html</link>
      <pubDate>Sat, 24 Dec 2005 15:49:06 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/12/interesting-article-on-deadlock-detection-in-ddj-this-month.html</guid>
      <description>There&amp;rsquo;s an interesting article by Tomer Abramson in this month&amp;rsquo;s Dr Dobb&amp;rsquo;s Journal about deadlock detection. He provides a compile in tool that works in a similar way to my deadlock detection tool and reports on potential deadlocks in code even if they never occur during the program run in question.
His architecture is considerably different to mine but the idea is the same. By recording the sequence of lock acquisition and release on all threads in the program you can then examine the sequence that locks are taken out and spot potential deadlocks.</description>
    </item>
    
    <item>
      <title>More thoughts on thread naming</title>
      <link>https://lenholgate.com/blog/2005/12/more-thoughts-on-thread-naming.html</link>
      <pubDate>Thu, 22 Dec 2005 19:57:05 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/12/more-thoughts-on-thread-naming.html</guid>
      <description>I&amp;rsquo;ve just finished the first cut of the code that handles the Win32 Thread Naming &amp;ldquo;API&amp;rdquo;. This means that my debugging tools can now report the name of a thread (if it has been named) rather than just its thread ID. Having implemented the code in the debugger to deal with the exception I find myself wondering about API design and why the original designer of this particular facility decided to make it hard on themselves.</description>
    </item>
    
    <item>
      <title>On Edit and Continue</title>
      <link>https://lenholgate.com/blog/2005/12/on-edit-and-continue.html</link>
      <pubDate>Thu, 22 Dec 2005 11:59:15 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/12/on-edit-and-continue.html</guid>
      <description>Dennis Forbes talks about &amp;ldquo;Edit and Continue&amp;rdquo; in VS 2005 and asks &amp;ldquo;Is it, coupled with similar tool advances, making programmers sloppier, though?&amp;rdquo;
I think so&amp;hellip;
In the Visual C++ debugger we&amp;rsquo;ve had &amp;ldquo;Edit and Continue&amp;rdquo; for years but I turned it off a long time ago as I didn&amp;rsquo;t find it that helpful. It enables and encourages quick hacky experimental fixes to running code. I never really liked that idea, I usually prefer to think about the problem rather than just hacking in a fix, and back in the early days of VC6 the whole incremental link/edit and continue thing sometimes introduced interesting bugs that seemed to go away if you did a full clean build.</description>
    </item>
    
    <item>
      <title>Pluggable exception handling</title>
      <link>https://lenholgate.com/blog/2005/12/pluggable-exception-handling.html</link>
      <pubDate>Thu, 22 Dec 2005 11:27:04 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/12/pluggable-exception-handling.html</guid>
      <description>Ben takes the &amp;ldquo;throw as an exception dispatcher&amp;rdquo; idiom to its logical conclusion by presenting a pluggable exception handler.
As Ben says &amp;ldquo;I&amp;rsquo;m not sure how many situations something like this would be useful in, but it fit the testing problem well and was fun to write anyway&amp;rdquo;. It&amp;rsquo;s not the kind of code you need every day, but it&amp;rsquo;s useful stuff if you&amp;rsquo;re working on a test framework, or if you&amp;rsquo;re interested in how you can use the &amp;ldquo;throw as an exception dispatcher&amp;rdquo; idiom.</description>
    </item>
    
    <item>
      <title>STLPort 5.0 and multiple VC versions</title>
      <link>https://lenholgate.com/blog/2005/12/stlport-50-and-multiple-vc-versions.html</link>
      <pubDate>Thu, 22 Dec 2005 09:59:31 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/12/stlport-50-and-multiple-vc-versions.html</guid>
      <description>I&amp;rsquo;m in the process of testing some of my code with Visual Stuio 2005 and the first thing I found that I needed to do was to upgrade my STLPort installation from 4.6.2 to 5.0.0 to get a version that built with VC8. Given that I like to test one change at a time I first upgraded my VC6 build to use STLPort 5; STLPort built fine with VC6 and all my tests passed.</description>
    </item>
    
    <item>
      <title>Panto season!</title>
      <link>https://lenholgate.com/blog/2005/12/panto-season.html</link>
      <pubDate>Wed, 21 Dec 2005 21:42:31 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/12/panto-season.html</guid>
      <description>In case you missed it the first time around&amp;hellip;
We&amp;rsquo;re doing the old &amp;ldquo;assert is evil&amp;rdquo;/&amp;ldquo;Oh no it isn&amp;rsquo;t&amp;rdquo; thing over at Ned Batchelder&amp;rsquo;s place.</description>
    </item>
    
    <item>
      <title>Naming Win32 threads - how it works</title>
      <link>https://lenholgate.com/blog/2005/12/naming-win32-threads---how-it-works.html</link>
      <pubDate>Tue, 20 Dec 2005 19:28:49 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/12/naming-win32-threads---how-it-works.html</guid>
      <description>I&amp;rsquo;ve been using the SetThreadName() function from the MSDN docs for ages to provide a way of distinguishing between threads in the VC debugger. I always thought it was a bit of a weird &amp;lsquo;API&amp;rsquo; but had never really thought to wonder why. Steve over at &amp;ldquo;Bug Babble&amp;rdquo; explains how the &amp;lsquo;API&amp;rsquo; works from the debugger&amp;rsquo;s point of view and, well, then it all becomes obvious. For some reason I&amp;rsquo;d always thought that the &amp;lsquo;API&amp;rsquo; was communicating with the OS in some weird and wacky manner; I hadn&amp;rsquo;t twigged that in fact it was just communicating with the debugger using the only method it could, via raising an exception which gets routed through the Win32 debug API.</description>
    </item>
    
    <item>
      <title>I think the weirdness was me</title>
      <link>https://lenholgate.com/blog/2005/12/i-think-the-weirdness-was-me.html</link>
      <pubDate>Sat, 17 Dec 2005 10:51:23 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/12/i-think-the-weirdness-was-me.html</guid>
      <description>A couple of days ago I mentioned that I was having some problems with loading symbols for a common controls dll. I&amp;rsquo;m now pretty sure that it was my problem, as usual, rather than someone elses. I&amp;rsquo;ve reworked my process startup controlling code and now set and clear the breakpoints in a more reliable (i.e. less hacky) way and things are behaving themselves again. I think I was failing to stop one of the threads properly and that was later causing problems.</description>
    </item>
    
    <item>
      <title>DbgHelp weirdness</title>
      <link>https://lenholgate.com/blog/2005/12/dbghelp-weirdness.html</link>
      <pubDate>Wed, 14 Dec 2005 21:17:28 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/12/dbghelp-weirdness.html</guid>
      <description>I was using one of my home made debugging tools recently and it kept crashing :( I assumed it was something I was doing but I&amp;rsquo;ve eventually tracked it down to where I load the symbols for the loaded modules in the target process. Attempting to load the symbols for x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.2180_x-ww_a84f1ff9\\comctl32.dll leads to dbghelp.dll generating a BEX event (which appears to be either buffer overrun or data execution prevention related).</description>
    </item>
    
    <item>
      <title>I guess I&#39;ll file that in the &#39;I didn&#39;t know you could do that&#39; pile</title>
      <link>https://lenholgate.com/blog/2005/12/i-guess-ill-file-that-in-the-i-didnt-know-you-could-do-that-pile.html</link>
      <pubDate>Fri, 09 Dec 2005 22:49:24 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/12/i-guess-ill-file-that-in-the-i-didnt-know-you-could-do-that-pile.html</guid>
      <description>Ned Batchelder reminds us of the value of the C++ FAQ (Lite). It&amp;rsquo;s been a long while since I&amp;rsquo;ve looked at it yet Ned&amp;rsquo;s example shows that I&amp;rsquo;ve still a lot to learn about the subtleties of C++. I can think of a few places where I could use that throw; as an exception dispatcher example to replace some rather ugly macros.</description>
    </item>
    
    <item>
      <title>3 days with JMock</title>
      <link>https://lenholgate.com/blog/2005/12/3-days-with-jmock.html</link>
      <pubDate>Fri, 09 Dec 2005 11:32:16 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/12/3-days-with-jmock.html</guid>
      <description>As I mentioned last week, I&amp;rsquo;m currently doing some Java work with an investment banking client. This week I added JMock to their toolset.
JMock is a dynamic mock object generation tool that works with JUnit to allow you to create mock objects without writing code. Since most of my TDD work has been in C++, most of the mock objects that I&amp;rsquo;ve used in the past have been hand coded.</description>
    </item>
    
    <item>
      <title>A change of technologies</title>
      <link>https://lenholgate.com/blog/2005/12/a-change-of-technologies.html</link>
      <pubDate>Sat, 03 Dec 2005 08:45:36 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/12/a-change-of-technologies.html</guid>
      <description>I started back with an investment banking client this week. I&amp;rsquo;m working with the team that brought us &amp;ldquo;the refactoring project&amp;rdquo; and another small team, and integrating the trade entry system with some &amp;ldquo;xll&amp;rdquo; excel addins and some back end server software. Pretty standard fare for investment banking work&amp;hellip;
I&amp;rsquo;ve worked with this client quite a few times over the years and it&amp;rsquo;s interesting to go back and find that they&amp;rsquo;re still using the systems that I helped them to put in place back in 2001.</description>
    </item>
    
    <item>
      <title>Udi Dahan on Physical Design</title>
      <link>https://lenholgate.com/blog/2005/11/udi-dahan-on-physical-design.html</link>
      <pubDate>Wed, 30 Nov 2005 14:36:27 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/11/udi-dahan-on-physical-design.html</guid>
      <description>Udi Dahan writes about managing dependencies in code at the &amp;lsquo;package&amp;rsquo; level in &amp;ldquo;So many Dlls, so little time&amp;rdquo;.
&amp;ldquo;Sloppiness with dependencies. If two classes are independent of each other, and do not provide different implementations of the same interface, think twice about putting them in the same project/dll. Minimizing dependencies is the bread and butter of loose coupling. Break dependence on implementations by introducing interfaces in a separate project/dll.&amp;rdquo;</description>
    </item>
    
    <item>
      <title>Testing Windows Services</title>
      <link>https://lenholgate.com/blog/2005/11/testing-windows-services.html</link>
      <pubDate>Wed, 30 Nov 2005 10:38:19 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/11/testing-windows-services.html</guid>
      <description>Mark Pearce writes about Debugging a .Net Windows Service from within the IDE. We do something similar with our C++ Windows services but, as you&amp;rsquo;ve probably come to expect from me, it&amp;rsquo;s slightly more complicated than Mark&amp;rsquo;s approach.
Similarly to Mark I allow the main thread of the application to call the service entry point rather than passing the work off to the Service Control Manager (SCM) when we want to run the service in &amp;lsquo;debug mode&amp;rsquo;.</description>
    </item>
    
    <item>
      <title>Hosting problems resolved</title>
      <link>https://lenholgate.com/blog/2005/11/hosting-problems-resolved.html</link>
      <pubDate>Fri, 25 Nov 2005 09:04:44 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/11/hosting-problems-resolved.html</guid>
      <description>It looks like all of the hosting problems are now resolved. There was a brief period when the database and CGI were fixed and an MT configuration path hadn&amp;rsquo;t been updated so pages were not being rebuilt after comments were added but that&amp;rsquo;s now been fixed and the pages have been rebuilt to include the missing comments.
If anyone notices anything strange please leave a comment on this posting.</description>
    </item>
    
    <item>
      <title>Hosting problems</title>
      <link>https://lenholgate.com/blog/2005/11/hosting-problems.html</link>
      <pubDate>Tue, 22 Nov 2005 12:55:14 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/11/hosting-problems.html</guid>
      <description>As you may have noticed I&amp;rsquo;m having some hosting problems at present. The server that hosts www.lenholgate.com was hacked and it&amp;rsquo;s taking my hosting provider longer to fix than they expected&amp;hellip;
Right now comments and trackbacks don&amp;rsquo;t work because of incorrect CGI settings on the webserver but even if that were fixed now there&amp;rsquo;s no database backing up the pages so things would just be broken in a different way.</description>
    </item>
    
    <item>
      <title>Kevin Barnes on TDD</title>
      <link>https://lenholgate.com/blog/2005/11/kevin-barnes-on-tdd.html</link>
      <pubDate>Sat, 19 Nov 2005 15:10:34 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/11/kevin-barnes-on-tdd.html</guid>
      <description>Kevin Barnes over at Code Craft has just written an interesting piece on TDD. In it he claims that &amp;ldquo;Excessive unit testing infrastructure hampers your practical ability to refactor things efficiently. People scream at me when I say this. Unit tests are supposed to enable refactoring by spotting unexpected bugs resulting from the refactoring effort. I agree. Unit tests help with this, but only up to a point. When they cross the line into extreme-testing they can be pretty much guaranteed to break every single time you refactor the code&amp;rdquo;</description>
    </item>
    
    <item>
      <title>More on Windows Networking resource limit server failures</title>
      <link>https://lenholgate.com/blog/2005/11/more-on-windows-networking-resource-limit-server-failures.html</link>
      <pubDate>Sat, 19 Nov 2005 08:48:04 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/11/more-on-windows-networking-resource-limit-server-failures.html</guid>
      <description>My VoIP client has been stress testing the UDP version of The Server Framework and they had what they thought was a deadlock. It wasn&amp;rsquo;t a deadlock it was more of a lazy server&amp;hellip; What seemed to have happened is that they had been thrashing a server with lots of concurrent datagrams and pushed the machine until it stopped receiving packets due to the resource limitations of the machine being hit (probably either non-paged pool exhaustion or the i/o page lock limit).</description>
    </item>
    
    <item>
      <title>I don&#39;t like Vanilla Scoble</title>
      <link>https://lenholgate.com/blog/2005/11/i-dont-like-vanilla-scoble.html</link>
      <pubDate>Wed, 16 Nov 2005 10:38:41 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/11/i-dont-like-vanilla-scoble.html</guid>
      <description>Robert Scoble, the &amp;ldquo;Microsoft Geek blogger&amp;rdquo;, has recently had a complaint that he only writes about Microsoft and he figured that he was in a rut and decided to get out of his rut by deliberately not writing about his usual topics of Microsoft, Google and Yahoo (GYM) for 100 posts&amp;hellip; So, for the last 3 days he&amp;rsquo;s been writing about other stuff&amp;hellip; There are problems with this idea though&amp;hellip;</description>
    </item>
    
    <item>
      <title>Why are the &#39;event&#39; classes in .Net STILL broken?</title>
      <link>https://lenholgate.com/blog/2005/11/why-are-the-event-classes-in-net-still-broken.html</link>
      <pubDate>Tue, 15 Nov 2005 18:01:45 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/11/why-are-the-event-classes-in-net-still-broken.html</guid>
      <description>Whilst I&amp;rsquo;m ranting about the little things&amp;hellip;
You still can&amp;rsquo;t create named versions of the .Net ManualResetEvent and AutoResetEvent, even in .Net 2.0. Wasn&amp;rsquo;t everything going to be fixed in Whidbey?
Of course, I realise that you can &amp;ldquo;simply&amp;rdquo; access the underlying Win32 API to do it, but a) why should we have to? and b) it&amp;rsquo;s not recommended that you do&amp;hellip;
I guess the fact that the P/Invoke route isn&amp;rsquo;t recommended is the reason for the dearth of nicely packaged up solutions to this problem; surely anyone who needs this functionality would write an object that wraps it up nicely rather than doing it &amp;ldquo;long hand&amp;rdquo; like this?</description>
    </item>
    
    <item>
      <title>Too much encapsulation reduces the ability to multiplex?</title>
      <link>https://lenholgate.com/blog/2005/11/too-much-encapsulation-reduces-the-ability-to-multiplex.html</link>
      <pubDate>Tue, 15 Nov 2005 16:06:42 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/11/too-much-encapsulation-reduces-the-ability-to-multiplex.html</guid>
      <description>Every now and then I come across a situation where encapsulation has been taken slightly too far. Usually, or at least most recently, these over encapsulated designs have had problems because they&amp;rsquo;ve blocked access to an event handle. It&amp;rsquo;s great to wrap up a bunch of Win32 primitives into a nice coherent class but if you expose a method that allows the user of the class to wait for something to happen then it&amp;rsquo;s probably also a good idea to expose a handle they can wait on as well.</description>
    </item>
    
    <item>
      <title>Controlling Time, Take 2</title>
      <link>https://lenholgate.com/blog/2005/11/controlling-time-take-2.html</link>
      <pubDate>Fri, 11 Nov 2005 10:20:48 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/11/controlling-time-take-2.html</guid>
      <description>Recently I finished developing a high performance ISO-8583 financial transaction authorisation server for a client using The Server Framework and whilst I was running the final black-box tests against the server I realised that these particular tests were dependant on the system date of the machine running the server. The server uses the current time and date to make some decisions on whether it can authorise a particular transaction or not.</description>
    </item>
    
    <item>
      <title>Profilers and The Perils of Micro-Optimization</title>
      <link>https://lenholgate.com/blog/2005/11/profilers-and-the-perils-of-micro-optimization.html</link>
      <pubDate>Wed, 09 Nov 2005 11:32:54 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/11/profilers-and-the-perils-of-micro-optimization.html</guid>
      <description>Ian Griffiths has just written a nice piece on profiling .Net code and why the obvious things that people do are often very wrong: &amp;ldquo;Unfortunately, lots of developers just love to go off on micro-benchmarking exercises, where they write about 10 lines of code in a variety of different ways, and discover that one runs faster than the rest. (Or worse, one looks like it runs faster than the rest when running in the profiler.</description>
    </item>
    
    <item>
      <title>Bad Managers?</title>
      <link>https://lenholgate.com/blog/2005/11/bad-managers.html</link>
      <pubDate>Wed, 09 Nov 2005 07:24:14 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/11/bad-managers.html</guid>
      <description>Alan Green doesn&amp;rsquo;t like the word &amp;ldquo;manager&amp;rdquo; used as a class name suffix. His point seems to be that &amp;ldquo;manager&amp;rdquo; is imprecise and instead he suggests a list of alternative suffixes with more precise meaning; though they seem to be rather contrived and smack of using new words just for the sake of it to me. For example using &amp;ldquo;Herder&amp;rdquo; rather than the more usual &amp;ldquo;Collection&amp;rdquo; (PolicyHerder, hmm&amp;hellip;) and using &amp;ldquo;Bucket&amp;rdquo; as a pretty non standard replacement for &amp;ldquo;Pool&amp;rdquo;.</description>
    </item>
    
    <item>
      <title>What&#39;s your worst bug?</title>
      <link>https://lenholgate.com/blog/2005/11/whats-your-worst-bug.html</link>
      <pubDate>Tue, 08 Nov 2005 13:30:23 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/11/whats-your-worst-bug.html</guid>
      <description>&amp;ldquo;Because of a subtle bug called a &amp;ldquo;race condition,&amp;rdquo; a quick-fingered typist could accidentally configure the Therac-25 so the electron beam would fire in high-power mode but with the metal X-ray target out of position. At least five patients die; others are seriously injured&amp;rdquo;
History&amp;rsquo;s Worst Software Bugs, from Wired.
I&amp;rsquo;m pretty careful about how I write code and I like to have my tests in place and, on the whole, I write pretty reliable code (most of the time) but I&amp;rsquo;m still glad that I don&amp;rsquo;t work on stuff that&amp;rsquo;s likely to cost lives if it goes wrong&amp;hellip;</description>
    </item>
    
    <item>
      <title>Visual C&#43;&#43; 2005 cannot build dynamically linked applications for NT4 deployment</title>
      <link>https://lenholgate.com/blog/2005/11/visual-c-2005-cannot-build-dynamically-linked-applications-for-nt4-deployment.html</link>
      <pubDate>Fri, 04 Nov 2005 12:35:50 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/11/visual-c-2005-cannot-build-dynamically-linked-applications-for-nt4-deployment.html</guid>
      <description>Jochen Kalmbach has discovered a problem with dynamically linked applications built with VC2005 running (or not running!) on NT 4. I guess this isn&amp;rsquo;t going to bite that many people&amp;hellip; Read about it here.</description>
    </item>
    
    <item>
      <title>TCP/IP Server Failures</title>
      <link>https://lenholgate.com/blog/2005/11/tcpip-server-failures.html</link>
      <pubDate>Fri, 04 Nov 2005 09:30:21 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/11/tcpip-server-failures.html</guid>
      <description>One of the good things about the server performance testing that I&amp;rsquo;ve been doing recently is that I have been able to witness some rather rare failure conditions in action and seen how The Server Framework handles them.
When using IO Completion Ports for asynchronous IO you get notifications when reads and write complete. Read completions are obviously an important event, it&amp;rsquo;s where you receive incoming data. Write completions, on the other hand, are often viewed as less important.</description>
    </item>
    
    <item>
      <title>Simple Echo Servers</title>
      <link>https://lenholgate.com/blog/2005/11/simple-echo-servers.html</link>
      <pubDate>Thu, 03 Nov 2005 15:12:19 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/11/simple-echo-servers.html</guid>
      <description>A long time ago when I wrote my first article on high performance TCP/IP servers for Windows using IO Completion ports over on CodeProject I complained that &amp;ldquo;Also the more complicated examples, ones that used IO completion ports for example, tended to stop short of demonstrating real world usage. After all, anyone can write an echo server&amp;hellip; &amp;ldquo;
Yet here I am, three and a half years later with a huge collection of different kinds of echo server.</description>
    </item>
    
    <item>
      <title>Windows TCP/IP Server Performance</title>
      <link>https://lenholgate.com/blog/2005/11/windows-tcpip-server-performance.html</link>
      <pubDate>Thu, 03 Nov 2005 12:18:20 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/11/windows-tcpip-server-performance.html</guid>
      <description>For the last week or so I&amp;rsquo;ve been working on measuring and improving the performance of The Server Framework. The latest release of the free version of my asynchronous, windows, IOCP based, socket server framework can now be obtained from here at ServerFramework.com.
This week I&amp;rsquo;ve had several potential new clients asking about performance numbers for various aspects of the system and so I thought it best to do some measuring.</description>
    </item>
    
    <item>
      <title>RSS feeds for Microsoft Knowledge Base articles</title>
      <link>https://lenholgate.com/blog/2005/11/rss-feeds-for-microsoft-knowledge-base-articles.html</link>
      <pubDate>Wed, 02 Nov 2005 20:31:09 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/11/rss-feeds-for-microsoft-knowledge-base-articles.html</guid>
      <description>This is quite nice, a whole list of finely targetted RSS feeds for Knowledge Base articles for various products.</description>
    </item>
    
    <item>
      <title>Practical Testing: 15 - Testing payback</title>
      <link>https://lenholgate.com/blog/2005/11/practical-testing-15---testing-payback.html</link>
      <pubDate>Tue, 01 Nov 2005 12:50:10 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/11/practical-testing-15---testing-payback.html</guid>
      <description>Last year I wrote a series of articles called &amp;ldquo;Practical Testing&amp;rdquo; where I took a piece of complicated multi-threaded code and wrote tests for it. I then rebuild the code from scratch in a test driven development style to show how writing your tests before your code changes how you design your code.
The code under test was intended to be very scalable, I use the code to provide light weight asynchronous timers for my socket server framework and the idea is that each connection might have several timers associated with it.</description>
    </item>
    
    <item>
      <title>The 64000 connection question</title>
      <link>https://lenholgate.com/blog/2005/10/the-64000-connection-question.html</link>
      <pubDate>Sat, 29 Oct 2005 08:46:21 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/10/the-64000-connection-question.html</guid>
      <description>I&amp;rsquo;ve been spending some time pushing the limits of The Server Framework, my IO Completion Port based socket server framework, to see how many connections my servers can handle and what happens when system resources run out. Earlier postings on the subject are here and here.
This morning I fired up one of my older server boxes and ran the server on that rather than on my dev box. It effortlessly managed 64000 concurrent connections.</description>
    </item>
    
    <item>
      <title>Assume makes an ass out of u and me</title>
      <link>https://lenholgate.com/blog/2005/10/assume-makes-an-ass-out-of-u-and-me.html</link>
      <pubDate>Fri, 28 Oct 2005 23:16:31 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/10/assume-makes-an-ass-out-of-u-and-me.html</guid>
      <description>But mostly me. ;)
During yesterday&amp;rsquo;s investigations into handling lots (30,000+) of socket connections to a server built with The Server Framework I took a few things for granted. I should have been a bit more thorough rather than just assuming I knew what I was doing.
Today I did some more tests.
I was a little surprised that flicking the switch on my server framework so that it posted zero byte reads had no affect on the limit of connections that I could support.</description>
    </item>
    
    <item>
      <title>Note to self</title>
      <link>https://lenholgate.com/blog/2005/10/note-to-self.html</link>
      <pubDate>Thu, 27 Oct 2005 16:35:39 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/10/note-to-self.html</guid>
      <description>This CodeProject entry is SO full of errors and poor practice that I must find the time to leave a comment on it&amp;hellip;
[Updated: 29th October] Done. Comment is here.</description>
    </item>
    
    <item>
      <title>Handling lots of socket connections</title>
      <link>https://lenholgate.com/blog/2005/10/handling-lots-of-socket-connections.html</link>
      <pubDate>Thu, 27 Oct 2005 11:10:25 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/10/handling-lots-of-socket-connections.html</guid>
      <description>I&amp;rsquo;m doing some research for a potential client. They need a TCP/IP server that handles &amp;rsquo;lots&amp;rsquo; of concurrent connections. Their own in-house server code currently fails at 4-6000 connections and I&amp;rsquo;m putting together a demo for them of how The Server Framework supports 30000 connections on 1GB of ram before running into non-paged pool restrictions&amp;hellip; Whilst doing this I ran into an &amp;lsquo;interesting&amp;rsquo; feature of WSAAccept() (or, perhaps, simply of an LSP that&amp;rsquo;s installed on my machine&amp;hellip;).</description>
    </item>
    
    <item>
      <title>Evil macros in April 2005 Platform SDK headers</title>
      <link>https://lenholgate.com/blog/2005/10/evil-macros-in-april-2005-platform-sdk-headers.html</link>
      <pubDate>Wed, 26 Oct 2005 12:26:45 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/10/evil-macros-in-april-2005-platform-sdk-headers.html</guid>
      <description>I&amp;rsquo;m upgrading one of my build machines to use the April 2005 edition of the Platform SDK to investigate the implications of this posting over at eggheadcafe.com which states that since Visual Studio 6 ceased to be supported as of the end of September 2005 the last version of the Platform SDK that will work with Visual Studio 6 was the February 2003 version.
There has been quite a lot of discussion in the comments of my Bluetooth code sample about the &amp;lsquo;broken&amp;rsquo; uuid.</description>
    </item>
    
    <item>
      <title>Old friends</title>
      <link>https://lenholgate.com/blog/2005/10/old-friends.html</link>
      <pubDate>Tue, 25 Oct 2005 23:30:01 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/10/old-friends.html</guid>
      <description>I guess it&amp;rsquo;s a combination of wine, Pink Floyd and the fact that this week the world wants to remind me that I&amp;rsquo;m older than I feel. Thoughts drift back to the past. Times past and friends forgotten.
A long time ago, in a galaxy far, far away I used to play an online game called MUD II. This was back when you had to use your modem to dial another modem to get a connection to the world and there was no such thing as &amp;ldquo;the internet&amp;rdquo; unless you could connect to a university computer somewhere (like Essex Uni, perhaps).</description>
    </item>
    
    <item>
      <title>If you enjoyed the Petzold thing earlier...</title>
      <link>https://lenholgate.com/blog/2005/10/if-you-enjoyed-the-petzold-thing-earlier.html</link>
      <pubDate>Tue, 25 Oct 2005 21:50:12 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/10/if-you-enjoyed-the-petzold-thing-earlier.html</guid>
      <description>This may also be your kinda thing.
Ellen Ullman&amp;rsquo;s 1998 two part series &amp;ldquo;The Dumbing-Down of Programming&amp;rdquo; from Salon archives.
Rebelling against Microsoft, &amp;ldquo;My Computer&amp;rdquo; and easy-to-use Wizards, an engineer rediscovers the joys of difficult computing.
Returning to the Source. Once knowledge disappears into code, how do we retrieve it?
Via Joey deVilla over at The Farm.
I&amp;rsquo;d forgotten how readable Ellen Ullman was (especially for techies of &amp;ldquo;a certain age&amp;rdquo;).</description>
    </item>
    
    <item>
      <title>LNK2005: _iswdigit already defined in ...</title>
      <link>https://lenholgate.com/blog/2005/10/lnk2005--iswdigit-already-defined-in.html</link>
      <pubDate>Tue, 25 Oct 2005 21:11:24 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/10/lnk2005--iswdigit-already-defined-in.html</guid>
      <description>I&amp;rsquo;m in the process of preparing a release for a client. I&amp;rsquo;ve done the work, the tests pass, the stress test runs with flying colours and so I&amp;rsquo;ve tagged the source and I&amp;rsquo;m in the middle of the final build and test cycle. It&amp;rsquo;s a nice feeling.
One of the last things I do when shipping code is to turn off the default STLPort support that I use when I&amp;rsquo;m developing.</description>
    </item>
    
    <item>
      <title>Charles Petzold on coding</title>
      <link>https://lenholgate.com/blog/2005/10/charles-petzold-on-coding.html</link>
      <pubDate>Tue, 25 Oct 2005 10:58:36 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/10/charles-petzold-on-coding.html</guid>
      <description>Charles Petzold recently delivered a talk at the NYC .Net Developer&amp;rsquo;s Group and he&amp;rsquo;s made it available online here &amp;ldquo;Does Visual Studio Rot The Mind?&amp;rdquo;.
It&amp;rsquo;s an interesting read, especially if you actually remember writing early Windows GUI applications and building your dialogs in your resource files by hand. I agree with his view that many of the features of Visual Studio are there simply to help us write code faster and that this doesn&amp;rsquo;t, necessarily, result in us writing code better or in code that is clear of fluff and easy to maintain.</description>
    </item>
    
    <item>
      <title>Unit testing and accessing external systems</title>
      <link>https://lenholgate.com/blog/2005/10/unit-testing-and-accessing-external-systems.html</link>
      <pubDate>Sat, 22 Oct 2005 14:42:15 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/10/unit-testing-and-accessing-external-systems.html</guid>
      <description>There&amp;rsquo;s a lot of talk about how unit tests shouldn&amp;rsquo;t touch the network or the file system or databases whilst they&amp;rsquo;re running. Michael Feathers even has a set of unit test &amp;ldquo;rules&amp;rdquo; (A Set of Unit Testing Rules) which go so far as to suggest that:
&amp;ldquo;A test is not a unit test if:
It talks to the database
It communicates across the network
It touches the file system
It can&amp;rsquo;t run at the same time as any of your other unit tests</description>
    </item>
    
    <item>
      <title>Classic hits</title>
      <link>https://lenholgate.com/blog/2005/10/classic-hits.html</link>
      <pubDate>Sat, 22 Oct 2005 06:13:44 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/10/classic-hits.html</guid>
      <description>Jacob Nielsen has a list of Top Ten Blog Design Mistakes. Number 5 is &amp;ldquo;Classic hits are buried&amp;rdquo; where he suggests that it is useful for readers if you list your most &amp;lsquo;important&amp;rsquo; entries prominently as well as regularly back linking to earlier posts. This sounds like sensible stuff; until you have to work out what your classic entries are from the other 486 not so classic postings&amp;hellip;
Anyway, I&amp;rsquo;ve had a go at starting a list of some entries that are either a) very popular or b) clearly define my views on software development.</description>
    </item>
    
    <item>
      <title>Reprints - OLEDB; no pain, no gain</title>
      <link>https://lenholgate.com/blog/2005/10/reprints---oledb-no-pain-no-gain.html</link>
      <pubDate>Wed, 19 Oct 2005 09:36:19 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/10/reprints---oledb-no-pain-no-gain.html</guid>
      <description>I&amp;rsquo;ve just finished posting several OLE DB provider articles from back in 1999 and 2000 when the favourite method of data access that Microsoft recommended was OLE DB. This was relatively easy to use as a data consumer, especially from VB. Writing a data provider was another matter entirely. The OLE DB documentation was mostly written in a style that assumed that you were only using it for reference, this made it hard to get to grips with when you first started working with it.</description>
    </item>
    
    <item>
      <title>Some people shouldn&#39;t be dungeon master</title>
      <link>https://lenholgate.com/blog/2005/10/some-people-shouldnt-be-dungeon-master.html</link>
      <pubDate>Tue, 11 Oct 2005 09:44:55 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/10/some-people-shouldnt-be-dungeon-master.html</guid>
      <description>This made me smile. From &amp;ldquo;Irregular Web Comic&amp;rdquo;, via Raincannon.</description>
    </item>
    
    <item>
      <title>Printf debugging when you don&#39;t have a console</title>
      <link>https://lenholgate.com/blog/2005/10/printf-debugging-when-you-dont-have-a-console.html</link>
      <pubDate>Tue, 11 Oct 2005 09:18:15 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/10/printf-debugging-when-you-dont-have-a-console.html</guid>
      <description>There&amp;rsquo;s a nice story over on &amp;ldquo;Bug Babble&amp;rdquo; about debugging a problem with a robot by using various sounds coming out of a speaker to determine where in the code the problem occurred: &amp;ldquo;Now the robot sounded like a modem trying to connect. We would repro the hang and based on the pitch at &amp;lsquo;flatline&amp;rsquo; we knew the point of the last successful call to the sound driver.&amp;rdquo;
Via Google Translate and Radium Software, which also suggests using the CapsLock key, or changing display colours to debug gnarly problems in a printf style when you don&amp;rsquo;t have a console to use for output.</description>
    </item>
    
    <item>
      <title>Walking Managed Stacks with the Profiling API in v2.0 of the CLR</title>
      <link>https://lenholgate.com/blog/2005/10/walking-managed-stacks-with-the-profiling-api-in-v20-of-the-clr.html</link>
      <pubDate>Sun, 09 Oct 2005 23:24:01 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/10/walking-managed-stacks-with-the-profiling-api-in-v20-of-the-clr.html</guid>
      <description>It seems to be stack walking week; what with Ned&amp;rsquo;s posting earlier about walking an unmanaged stack and now this excellent piece by David Broman on doing the same in with managed code.</description>
    </item>
    
    <item>
      <title>Dependency Injection</title>
      <link>https://lenholgate.com/blog/2005/10/dependency-injection.html</link>
      <pubDate>Sun, 09 Oct 2005 23:07:13 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/10/dependency-injection.html</guid>
      <description>Jeremy D. Miller writes about The Dependency Injection Pattern; or what I&amp;rsquo;ve tended to call &amp;ldquo;Parameterise from above&amp;rdquo;. He covers the various ways you can inject a dependency into a class rather than having the knowledge of the dependency hard wired into the class itself. I tend to favour the constructor injection pattern myself; it&amp;rsquo;s all about breaking concrete coupling with interfaces and then allowing the creator of the object to specify the concrete type used by the object.</description>
    </item>
    
    <item>
      <title>I don&#39;t think I&#39;ve ever been disagreed with in Japanese before</title>
      <link>https://lenholgate.com/blog/2005/10/i-dont-think-ive-ever-been-disagreed-with-in-japanese-before.html</link>
      <pubDate>Sun, 09 Oct 2005 22:02:34 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/10/i-dont-think-ive-ever-been-disagreed-with-in-japanese-before.html</guid>
      <description>The discussion on Assert goes on, this time in Japanese&amp;hellip; Google&amp;rsquo;s language tools lead me to believe that they&amp;rsquo;re disagreeing with me. They seem to be pretty shocked that I&amp;rsquo;d take this stance and appear happier when Noel puts me in my place and returns order to the world. ;) If anyone can come up with a better translation, leave it as a comment please.</description>
    </item>
    
    <item>
      <title>Quote of the week</title>
      <link>https://lenholgate.com/blog/2005/10/quote-of-the-week.html</link>
      <pubDate>Sat, 08 Oct 2005 14:06:17 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/10/quote-of-the-week.html</guid>
      <description>&amp;ldquo;Desire to know why, and how, curiosity; such as is in no living creature but man: so that man is distinguished, not only by his reason, but also by this singular passion from other animals; in whom the appetite of food, and other pleasures of sense, by predominance, take away the care of knowing causes; which is a lust of the mind, that by a perseverance of delight in the continual and indefatigable generation of knowledge, exceedeth the short vehemence of any carnal pleasure.</description>
    </item>
    
    <item>
      <title>Throwing the baby out with the bathwater</title>
      <link>https://lenholgate.com/blog/2005/10/throwing-the-baby-out-with-the-bathwater.html</link>
      <pubDate>Sat, 08 Oct 2005 12:55:01 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/10/throwing-the-baby-out-with-the-bathwater.html</guid>
      <description>Richard Hale Shaw writes on and his conclusion is &amp;ldquo;it&amp;rsquo;s too confusing&amp;rdquo; and &amp;ldquo;I&amp;rsquo;d suggest not even using using statements&amp;rdquo;. I think that position is a little harsh, but I think that the main problem is that using tries to provide support for &amp;ldquo;scoped locals&amp;rdquo; and it doesn&amp;rsquo;t do it well enough.
Richard refers to this C# idiom for deterministic resource release.
using(MyObj obj = new MyObj()) { obj.DoStuff(); } The point being that although the memory that MyObj uses will not be reclaimed until the garbage collector runs other resources that MyObj uses could be released at a precisely defined point via an implementation of IDisposable.</description>
    </item>
    
    <item>
      <title>Back in time</title>
      <link>https://lenholgate.com/blog/2005/10/back-in-time.html</link>
      <pubDate>Sat, 08 Oct 2005 11:27:22 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/10/back-in-time.html</guid>
      <description>I find it quite interesting to have so much information about my past available on the web. I often use my own blog like a database that I can search for past solutions to problems, or for locating some text on my feelings on a subject that I can drop into a report and tweak. When producing code reviews for clients it&amp;rsquo;s useful to be able to justify your view points (I have a lot of views that need justification ;) ) and, in the interests of reuse, having those views up here means that I can easily reuse them.</description>
    </item>
    
    <item>
      <title>More on locking</title>
      <link>https://lenholgate.com/blog/2005/10/more-on-locking.html</link>
      <pubDate>Fri, 07 Oct 2005 08:11:28 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/10/more-on-locking.html</guid>
      <description>Jeff Darcy over at &amp;ldquo;Canned Platypus&amp;rdquo; writes about &amp;ldquo;How to add locking to a program&amp;rdquo;. He laments the lack of a reasonably priced deadlock detection tool. I assume, from his backgrond, that he&amp;rsquo;s interested in an Linux tool, so my deadlock detection tool wont help him much but it&amp;rsquo;s good to know that it&amp;rsquo;s not just me that thinks such a tool would be useful&amp;hellip;
Jeff links to some expensive static code analysis tools that do deadlock detection.</description>
    </item>
    
    <item>
      <title>Walking the call stack</title>
      <link>https://lenholgate.com/blog/2005/10/walking-the-call-stack.html</link>
      <pubDate>Fri, 07 Oct 2005 07:23:33 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/10/walking-the-call-stack.html</guid>
      <description>Ned Batchelder has written about the code he uses to get a call stack out of a windows program (thanks for the link Barry). I&amp;rsquo;ve added a snippet of the code I use as a comment to his post.
Note: the deadlock detector mentioned in this blog post is now available for download from www.lockexplorer.com.
I started looking into working with windows call stacks a while ago when I was working on my deadlock detection tool.</description>
    </item>
    
    <item>
      <title>MT-Blacklist</title>
      <link>https://lenholgate.com/blog/2005/10/mt-blacklist-2.html</link>
      <pubDate>Fri, 07 Oct 2005 06:45:05 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/10/mt-blacklist-2.html</guid>
      <description>It seems that Jay Allen has shutdown both MT-Blacklist and the &amp;lsquo;master blacklist&amp;rsquo; due to bandwidth problems caused by either a denial of service attack or inconsiderate developers.
Jay hosted a regularly updated file of regular expressions that powered the MT-Blacklist comment spam blocking add-in for Movable Type 2.x. He also published a changes feed that made it easy for others to update their own black lists using the master feed.</description>
    </item>
    
    <item>
      <title>Serenity</title>
      <link>https://lenholgate.com/blog/2005/10/serenity.html</link>
      <pubDate>Thu, 06 Oct 2005 22:16:40 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/10/serenity.html</guid>
      <description>Just back from seeing Serenity. It doesn&amp;rsquo;t disappoint.
We got into Firefly whilst on our ski trip to Megève last season and were really hooked. The film continues the story from the series, answers some of the questions left hanging at the end of the series and allows all the characters to grow a little.
Recommended; it&amp;rsquo;s so much a better Sci-Fi film than then recent Star Wars stuff&amp;hellip;</description>
    </item>
    
    <item>
      <title>Jeff Darcy on Linus on specifications</title>
      <link>https://lenholgate.com/blog/2005/10/jeff-darcy-on-linus-on-specifications.html</link>
      <pubDate>Mon, 03 Oct 2005 15:07:25 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/10/jeff-darcy-on-linus-on-specifications.html</guid>
      <description>Jeff Darcy over at &amp;ldquo;Canned Platypus&amp;rdquo; has written a nice piece on specifications and how Linus has got it wrong.
Any post that contains the phrase: &amp;quot;&amp;hellip; who wouldn&amp;rsquo;t know good code if it got into a robot and literally bit them &amp;hellip;&amp;quot; has to be worth a read, and as Jeff says, there&amp;rsquo;s a vast difference between a truly good specification and a bad one. Good specs are worth their weight in gold and can be a joy to work from.</description>
    </item>
    
    <item>
      <title>Asserts are evil, except when you have no other choice</title>
      <link>https://lenholgate.com/blog/2005/10/asserts-are-evil-except-when-you-have-no-other-choice.html</link>
      <pubDate>Mon, 03 Oct 2005 09:39:11 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/10/asserts-are-evil-except-when-you-have-no-other-choice.html</guid>
      <description>Noel Llopis over on &amp;ldquo;Games from Within&amp;rdquo; has written a nice rebuttal to my Asserts are evil post and the follow up.
I think it&amp;rsquo;s probably about time to wrap this up ;) So, here&amp;rsquo;s what I&amp;rsquo;ve learned&amp;hellip;
[Updated: 24th October - there is an interesting discussion still going on over in the comments on Noel&amp;rsquo;s post&amp;hellip;]
The reasons that I stated for disliking the use of assert in C++ were as follows:</description>
    </item>
    
    <item>
      <title>JetByte News: Fixed-price UDP development for VOIP company</title>
      <link>https://lenholgate.com/news/2005/10/fixed-price-udp-development-for-voip-company.html</link>
      <pubDate>Sat, 01 Oct 2005 12:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/news/2005/10/fixed-price-udp-development-for-voip-company.html</guid>
      <description>We&amp;rsquo;ve been engaged to extend The Server Framework so that it fully supports UDP and to provide example servers for this International VOIP Company.</description>
    </item>
    
    <item>
      <title>Once again I&#39;ve been too busy to comment on these during the week</title>
      <link>https://lenholgate.com/blog/2005/10/once-again-ive-been-too-busy-to-comment-on-these-during-the-week.html</link>
      <pubDate>Sat, 01 Oct 2005 11:15:03 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/10/once-again-ive-been-too-busy-to-comment-on-these-during-the-week.html</guid>
      <description>A collection of blog posts that I flagged for follow up this week.
Aaron Margosis has a blog which explains why you shouldn&amp;rsquo;t run as an Admin user on Windows systems and how to work around the problems that you might face when you start running as non admin. This table of contents post is a good jumping off point if you&amp;rsquo;re interested in running as a normal user.
Jeff Darcy on designing interfaces.</description>
    </item>
    
    <item>
      <title>Is Raymond Chen&#39;s use of Assert valid?</title>
      <link>https://lenholgate.com/blog/2005/09/is-raymond-chens-use-of-assert-valid.html</link>
      <pubDate>Wed, 28 Sep 2005 10:04:34 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/09/is-raymond-chens-use-of-assert-valid.html</guid>
      <description>I&amp;rsquo;m sure you&amp;rsquo;re all getting bored on my views on using Assert in modern C++ code by now, I&amp;rsquo;ll try and make this the last one. Last time, I asked if anyone had what they&amp;rsquo;d consider to be an example of the use of assert in C++ where the usage was valid given my objections to assert. Mark updated this recent posting on the subject to include a link to Raymond Chen&amp;rsquo;s blog where Raymond is discussing COM object destruction and uses an assert&amp;hellip; Given that everyone knows that Raymond is a seriously good programmer doesn&amp;rsquo;t his use of assert validate the position of those who disagree with me.</description>
    </item>
    
    <item>
      <title>Book review: Rootkits by Hoglund and Butler</title>
      <link>https://lenholgate.com/blog/2005/09/book-review-rootkits-by-hoglund-and-butler.html</link>
      <pubDate>Wed, 28 Sep 2005 08:27:47 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/09/book-review-rootkits-by-hoglund-and-butler.html</guid>
      <description>I&amp;rsquo;ve just finished reading Rootkits: Subverting the Windows Kernel. Overall I enjoyed it but I&amp;rsquo;m in two minds about its usefulness&amp;hellip;
The book covers &amp;ldquo;hacking&amp;rdquo; the Windows kernel using various techniques to get your code inside the kernel and, once there, various other techniques to keep others from knowing you&amp;rsquo;re there. Once you have this kind of code in the kernel of someone&amp;rsquo;s machine you can do lots of damage; or, of course, you can gather information for security forces, or protect the machine from other rootkits&amp;hellip;</description>
    </item>
    
    <item>
      <title>More from Mark and Barry on Assert</title>
      <link>https://lenholgate.com/blog/2005/09/more-from-mark-and-barry-on-assert.html</link>
      <pubDate>Tue, 27 Sep 2005 21:22:04 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/09/more-from-mark-and-barry-on-assert.html</guid>
      <description>Mark responded to Barry&amp;rsquo;s response to my post on Assert. Barry then responded to Mark and Kim and I added a little more in the comments. I did have some more to say, but Barry&amp;rsquo;s said most of it&amp;hellip;
Anyway, so far only Vagn Johansen and the guru&amp;rsquo;s over on comp.lang.c++.moderated disagree with us&amp;hellip; Anyone else fancy joining in? What I&amp;rsquo;d like to see is for someone who&amp;rsquo;s defending to show a situation where the alternatives that we&amp;rsquo;re proposing don&amp;rsquo;t work; but lets try and stay out of the realms of &amp;ldquo;what if the compiler is broken&amp;rdquo; and &amp;ldquo;what if there&amp;rsquo;s a hardware fault&amp;rdquo; if we can&amp;hellip;</description>
    </item>
    
    <item>
      <title>Common knowledge to many, but...</title>
      <link>https://lenholgate.com/blog/2005/09/common-knowledge-to-many-but.html</link>
      <pubDate>Tue, 27 Sep 2005 21:06:17 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/09/common-knowledge-to-many-but.html</guid>
      <description>Alexis Smirnov has just written a piece on why you shouldn&amp;rsquo;t try and use STL&amp;rsquo;s map::operator[] to find out if a map contains a particular element. It&amp;rsquo;s probably common knowledge for most people using STL, but it&amp;rsquo;s worth repeating for those new to the std::map interface.</description>
    </item>
    
    <item>
      <title>Barry&#39;s take on Assert</title>
      <link>https://lenholgate.com/blog/2005/09/barrys-take-on-assert.html</link>
      <pubDate>Mon, 26 Sep 2005 07:59:21 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/09/barrys-take-on-assert.html</guid>
      <description>Barry Lapthorn has a response to my Assert is Evil posting where he concludes that assertions aren&amp;rsquo;t needed if you have tests&amp;hellip; He also raises a point that I missed which is that the typical assert on Windows machines causes a dialog box to pop up and stop your program giving you the option of debugging it or ignoring the assert, etc. This kind of response is not especially useful if you&amp;rsquo;re writing code that doesn&amp;rsquo;t interact with a user, such as a service, as the code may not be able to show a dialog box &amp;hellip;</description>
    </item>
    
    <item>
      <title>Good stuff</title>
      <link>https://lenholgate.com/blog/2005/09/good-stuff.html</link>
      <pubDate>Sat, 24 Sep 2005 10:06:16 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/09/good-stuff.html</guid>
      <description>I use BlogLines to read my RSS subscriptions. It&amp;rsquo;s pretty good, and now that the performance issues I had initially seem to have gone away, I like it a lot. It&amp;rsquo;s very handy to be able to read my feeds from anywhere and always have them up to date and synchronised. One of the features I like is the little &amp;ldquo;keep new&amp;rdquo; check box that each item has; check it and the item stays unread.</description>
    </item>
    
    <item>
      <title>Opera lover</title>
      <link>https://lenholgate.com/blog/2005/09/opera-lover.html</link>
      <pubDate>Thu, 22 Sep 2005 09:53:35 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/09/opera-lover.html</guid>
      <description>The Opera web browser is now free. It&amp;rsquo;s worth giving it a try. I downloaded it after Barry sent me a link to the free registration codes that they were giving away a few weeks ago to celebrate their 10th birthday and I&amp;rsquo;ve been using it as my browser of choice ever since. It seems faster than either IE or Firefox and I just feel more comfortable in it than in Firefox; no idea why.</description>
    </item>
    
    <item>
      <title>AdSense preview tool</title>
      <link>https://lenholgate.com/blog/2005/09/adsense-preview-tool.html</link>
      <pubDate>Thu, 22 Sep 2005 09:38:08 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/09/adsense-preview-tool.html</guid>
      <description>The Google AdSense Preview Tool does exactly what it says on the tin. So it&amp;rsquo;s very useful for working out what kind of ads you&amp;rsquo;d get if you added Google&amp;rsquo;s AdSense to your pages.</description>
    </item>
    
    <item>
      <title>New C# v3 features explained in context</title>
      <link>https://lenholgate.com/blog/2005/09/new-c-v3-features-explained-in-context.html</link>
      <pubDate>Thu, 22 Sep 2005 09:02:53 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/09/new-c-v3-features-explained-in-context.html</guid>
      <description>Ted Neward has a very nice piece about the new language features in C# v3 and how they work together to provide something quite powerful. Go read it!
Given that implicit typing, object initialisers and extension methods are all designed to allow LINQ to be a be able to generate classes on the fly and extend existing classes I&amp;rsquo;d still be happier if they could be optionally restricted from use on &amp;rsquo;normal&amp;rsquo; classes to help prevent the less experienced running amok with these new language features and creating code that has interesting maintenance properties&amp;hellip;</description>
    </item>
    
    <item>
      <title>Three reprints from when COM ruled the land</title>
      <link>https://lenholgate.com/blog/2005/09/three-reprints-from-when-com-ruled-the-land.html</link>
      <pubDate>Tue, 20 Sep 2005 21:20:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/09/three-reprints-from-when-com-ruled-the-land.html</guid>
      <description>I&amp;rsquo;ve just finished posting three reprints from back in 1998 and 2002 when I was working on lots of COM stuff.
Sinking connection points in C++ objects - shows you how to use the least COM possible to connect to Connection Points and provides a C++ template that does all of the hard work for you.
Designing asynchonous COM components for VB - This example COM component provides three COM objects for using the Win32 Mailslot IPC mechanism.</description>
    </item>
    
    <item>
      <title>Cool</title>
      <link>https://lenholgate.com/blog/2005/09/cool.html</link>
      <pubDate>Mon, 19 Sep 2005 12:17:16 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/09/cool.html</guid>
      <description>Sometimes I think programmers find the wrong things &amp;ldquo;cool&amp;rdquo;&amp;hellip; This cartoon kinda sums it up ;)</description>
    </item>
    
    <item>
      <title>Restricting the use of extension methods?</title>
      <link>https://lenholgate.com/blog/2005/09/restricting-the-use-of-extension-methods.html</link>
      <pubDate>Mon, 19 Sep 2005 11:37:56 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/09/restricting-the-use-of-extension-methods.html</guid>
      <description>Having looked through the slides that Vagn pointed me to in a comment to my recent post about C# v3.0 Extension Methods I can understand, a little more, about the reasoning behind the change to the language. Given that the C# v3.0 spec contains the following warning:
&amp;ldquo;Extension methods are less discoverable and more limited in functionality than instance methods. For those reasons, it is recommended that extension methods be used sparingly and only in situations where instance methods are not feasible or possible.</description>
    </item>
    
    <item>
      <title>Concepts and C&#43;&#43; Templates</title>
      <link>https://lenholgate.com/blog/2005/09/concepts-and-c-templates.html</link>
      <pubDate>Sun, 18 Sep 2005 19:45:53 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/09/concepts-and-c-templates.html</guid>
      <description>The slides from Herb Sutter&amp;rsquo;s C++ Futures talk (TLN309) at this year&amp;rsquo;s PDC refer to &amp;ldquo;Concepts&amp;rdquo; in C++ templates; for me this is a much more useful addition than the auto keyword repurposing. I&amp;rsquo;m sure this is something that would make Chris Baus happy&amp;hellip;
I did a little Googling and came up with this paper which describes the proposal in detail. It looks pretty good.
In summary a concept that is required by a template can be defined in code and the compiler can check that the type supplied to the template adheres to the concept and should be able to produce more useful error messages when it doesn&amp;rsquo;t.</description>
    </item>
    
    <item>
      <title>Whilst I&#39;m on the subject of code communication</title>
      <link>https://lenholgate.com/blog/2005/09/whilst-im-on-the-subject-of-code-communication.html</link>
      <pubDate>Sat, 17 Sep 2005 12:19:37 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/09/whilst-im-on-the-subject-of-code-communication.html</guid>
      <description>I&amp;rsquo;ve never really got to grips with the STL&amp;rsquo;s algorithms; actually that&amp;rsquo;s not strictly true, it&amp;rsquo;s really just for_each() that I have most problem with. To me, code that uses for_each() simply doesn&amp;rsquo;t communicate as clearly as code that uses an old fashioned loop.
What brought this to mind originally was Ben&amp;rsquo;s post on Code Circle about custom binders for member functions&amp;hellip;
This code just doesn&amp;rsquo;t do it for me:</description>
    </item>
    
    <item>
      <title>Sacrificing precision for ease of use?</title>
      <link>https://lenholgate.com/blog/2005/09/sacrificing-precision-for-ease-of-use.html</link>
      <pubDate>Sat, 17 Sep 2005 11:15:50 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/09/sacrificing-precision-for-ease-of-use.html</guid>
      <description>I&amp;rsquo;m probably jumping the gun a little here as I can&amp;rsquo;t find Herb Sutter&amp;rsquo;s slides that Matt Pietrek is referring to, but&amp;hellip; Once again I find myself asking why is it actually useful to repurpose the auto keyword in C++&amp;hellip;
The idea seems to be that rather than this:
foo::iterator&amp;lt;int&amp;gt; i = myList.begin();&amp;lt;/int&amp;gt; You can do this:
// Type of &amp;#39;i is inferred from the assignment auto i = myList.begin(); I really don&amp;rsquo;t get what&amp;rsquo;s with these &amp;ldquo;productivity&amp;rdquo; enhancements that allow people to think less whilst coding.</description>
    </item>
    
    <item>
      <title>Thoughts on testing COM objects</title>
      <link>https://lenholgate.com/blog/2005/09/thoughts-on-testing-com-objects.html</link>
      <pubDate>Fri, 16 Sep 2005 19:12:10 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/09/thoughts-on-testing-com-objects.html</guid>
      <description>Ben over at Code Circle is thinking about unit testing COM objects. I did quite a lot of this back in 2000 when I was working with an investment bank. The first thing you need to realise is that COM is just an interface layer; so lots of your unit testing should be done on the code that the COM interface layer calls into. You can test pretty much all of the actual functionality of a COM object without bringing COM into the mix at all.</description>
    </item>
    
    <item>
      <title>C# v3 Extension methods, syntactic sugar for the lack of free functions?</title>
      <link>https://lenholgate.com/blog/2005/09/c-v3-extension-methods-syntactic-sugar-for-the-lack-of-free-functions.html</link>
      <pubDate>Fri, 16 Sep 2005 15:12:36 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/09/c-v3-extension-methods-syntactic-sugar-for-the-lack-of-free-functions.html</guid>
      <description>There&amp;rsquo;s a lot of noise coming out of the Microsoft PDC right now. Something that interested me was the future direction of C#; you can grab the spec from here.
It seems they&amp;rsquo;re adding &amp;ldquo;extension methods&amp;rdquo; which, to me, appear to be just syntactic sugar to make up for the lack of free functions&amp;hellip;
In C++ you can have functions that aren&amp;rsquo;t part of an object. In C no functions are part of an object.</description>
    </item>
    
    <item>
      <title>Overriding virtual functions, C# is better than C&#43;&#43;</title>
      <link>https://lenholgate.com/blog/2005/09/overriding-virtual-functions-c-is-better-than-c.html</link>
      <pubDate>Fri, 16 Sep 2005 12:22:21 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/09/overriding-virtual-functions-c-is-better-than-c.html</guid>
      <description>I&amp;rsquo;ve been merging my UDP framework development branch back to main, building all of my example servers and running all of the &amp;ldquo;black box&amp;rdquo; server tests for The Server Framework. In doing so I&amp;rsquo;ve experienced the pain of changing virtual function signatures. This is one area where C# syntax is definitely better than the C++ syntax&amp;hellip;
The Server Framework relies on derivation for extension and use. That wasn&amp;rsquo;t one of my brightest ideas.</description>
    </item>
    
    <item>
      <title>Rootkits</title>
      <link>https://lenholgate.com/blog/2005/09/rootkits.html</link>
      <pubDate>Thu, 15 Sep 2005 08:29:20 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/09/rootkits.html</guid>
      <description>Just saw a mini review of Rootkits: Subverting the Windows Kernel over on Ted Neward&amp;rsquo;s blog. Looks like the perfect follow up to Undocumented Windows 2000 Secrets as I continue my slow progress towards being able to write Windows device drivers&amp;hellip; From the sound of Ted&amp;rsquo;s review it&amp;rsquo;s written in a similar way to the Undocumented secrets book; showing you how to write drivers which aren&amp;rsquo;t for real hardware&amp;hellip; Anyway, I popped over to Amazon and it was being recommended on the front page for me due to my past purchases.</description>
    </item>
    
    <item>
      <title>Does the arrival of Google Blog Search mean blogs will be removed from the main Google results?</title>
      <link>https://lenholgate.com/blog/2005/09/does-the-arrival-of-google-blog-search-mean-blogs-will-be-removed-from-the-main-google-results.html</link>
      <pubDate>Wed, 14 Sep 2005 09:00:44 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/09/does-the-arrival-of-google-blog-search-mean-blogs-will-be-removed-from-the-main-google-results.html</guid>
      <description>Google have a beta of blog search engine up and running here. It looks good, seems to work and does pretty much what you&amp;rsquo;d expect. I&amp;rsquo;m left wondering why it&amp;rsquo;s needed though&amp;hellip;
After all, how to you define a blog? How is a blog different to a product company&amp;rsquo;s web site that happens to publish news and information via an RSS feed? Now that Google has categorised part of the search space as &amp;ldquo;blogs&amp;rdquo; I wonder if they intend to move these sites off of the main Google search; much in the same way that Google Groups separates news group postings ?</description>
    </item>
    
    <item>
      <title>Assert is evil</title>
      <link>https://lenholgate.com/blog/2005/09/assert-is-evil.html</link>
      <pubDate>Mon, 12 Sep 2005 10:58:30 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/09/assert-is-evil.html</guid>
      <description>Christopher Baus has been away and whilst he was a away his HTTP proxy shutdown due to a bug which caused an assert and his site was unavailable.
Personally I abhor assert; but I completely agree with what Chris is talking about.
This CodeProject link explains what most people mean by assert. My problem with this view of the world is that, in the majority of cases, these tests go away in production code.</description>
    </item>
    
    <item>
      <title>More thoughts on change and typedefs</title>
      <link>https://lenholgate.com/blog/2005/09/more-thoughts-on-change-and-typedefs.html</link>
      <pubDate>Sat, 10 Sep 2005 08:49:53 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/09/more-thoughts-on-change-and-typedefs.html</guid>
      <description>Of course, now that I&amp;rsquo;m well into using the &amp;ldquo;option 4&amp;rdquo; I start to remember why I kept sliding back from options 2 and 3 towards 1. Although option 1 uses native types instead of typedefs which is bad for all the reasons I listed in the previous post, the other options only give the illusion of type safety because they use typedefs&amp;hellip;
Of course I knew all of this, but it doesn&amp;rsquo;t hurt to go full circle and remind yourself of the pain once in a while.</description>
    </item>
    
    <item>
      <title>Pimp my hide</title>
      <link>https://lenholgate.com/blog/2005/09/pimp-my-hide.html</link>
      <pubDate>Fri, 09 Sep 2005 23:20:56 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/09/pimp-my-hide.html</guid>
      <description>As some of you may have guessed, the fact that I&amp;rsquo;ve spent the last week working on a tool for my own use means that I&amp;rsquo;m a little light on client work right now. If anyone needs a Windows C++ guy drop me a line. There&amp;rsquo;s plenty of samples of my work on this site and more on CodeProject. I&amp;rsquo;m more than happy to quote you a fixed price for stuff if you know what you want.</description>
    </item>
    
    <item>
      <title>In summary, don&#39;t summarise too soon</title>
      <link>https://lenholgate.com/blog/2005/09/in-summary-dont-summarise-too-soon.html</link>
      <pubDate>Fri, 09 Sep 2005 22:54:40 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/09/in-summary-dont-summarise-too-soon.html</guid>
      <description>I&amp;rsquo;ve been working on my deadlock detection and lock monitoring tool quite a lot this week; that and fixing the issues that it&amp;rsquo;s been highlighting. Yesterday I decided that I was drowning in data and that I really needed a GUI and, as I thought about how the GUI should work, I realised that I really didn&amp;rsquo;t have enough data.
Note: the deadlock detector mentioned in this blog post is now available for download from www.</description>
    </item>
    
    <item>
      <title>Change is good</title>
      <link>https://lenholgate.com/blog/2005/09/change-is-good.html</link>
      <pubDate>Fri, 09 Sep 2005 12:17:12 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/09/change-is-good.html</guid>
      <description>I like to experiment with new coding practices. Not too many at once mind you. I tend to add one new thing to how I work, operate in the new way for a while and then decide if the new way is worth adopting as a habit going forward. By adding new practices every so often I push my work habits in new directions; some of it is good, some is not so good, but all of it is an opportunity to learn.</description>
    </item>
    
    <item>
      <title>Lots of answers but little help</title>
      <link>https://lenholgate.com/blog/2005/09/lots-of-answers-but-little-help.html</link>
      <pubDate>Thu, 08 Sep 2005 18:18:09 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/09/lots-of-answers-but-little-help.html</guid>
      <description>I don&amp;rsquo;t read many newsgroups, I don&amp;rsquo;t have the time, but I take notice of the Windows networking ones as they&amp;rsquo;re low traffic and they&amp;rsquo;re relevant to a lot of the work I&amp;rsquo;m doing at present&amp;hellip; I&amp;rsquo;ve noticed something that&amp;rsquo;s starting to bug me a bit and I&amp;rsquo;m not sure if it&amp;rsquo;s specific to Microsoft related technology newsgroups but I have a feeling that it might be&amp;hellip; Anyway, the thing that bugs me is that there are some very active people who feel that they have to answer almost all new messages yet actually add very little value.</description>
    </item>
    
    <item>
      <title>What&#39;s with CreateProcess and managed exes?</title>
      <link>https://lenholgate.com/blog/2005/09/whats-with-createprocess-and-managed-exes.html</link>
      <pubDate>Thu, 08 Sep 2005 10:06:48 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/09/whats-with-createprocess-and-managed-exes.html</guid>
      <description>I have some code that launches another process in a suspended state, does some stuff (tm) and then resumes the process. This uses CreateProcess() and works fine on unmanaged exes. When I try and launch a manged exe with the same code the process starts up in a running state rather than in a suspended state. The docs for CreateProcess() don&amp;rsquo;t mention any strangeness. Does anyone know of any docs that explain what&amp;rsquo;s going on?</description>
    </item>
    
    <item>
      <title>Viewing lock lifetimes</title>
      <link>https://lenholgate.com/blog/2005/09/viewing-lock-lifetimes.html</link>
      <pubDate>Thu, 08 Sep 2005 08:34:02 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/09/viewing-lock-lifetimes.html</guid>
      <description>I added some more monitoring to the deadlock tool. You can now view the entire life cycle of the locks, from initialisation, through usage to destruction. The lock usage figures put the contention figures in context as you can see how often the lock was acquired by each thread and compare that to how often there was contention&amp;hellip;
Note: the deadlock detector mentioned in this blog post is now available for download from www.</description>
    </item>
    
    <item>
      <title>Lock Free</title>
      <link>https://lenholgate.com/blog/2005/09/lock-free-1.html</link>
      <pubDate>Wed, 07 Sep 2005 16:27:32 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/09/lock-free-1.html</guid>
      <description>I just ran my OpenSSL echo server test harness and ran the server under the deadlock tool. The results are interesting and show that the main source of lock contention on the server is for the lock that protects the buffer allocator. Every read or write requires a buffer to be allocated and released. The SSL server actually requires more than one buffer for each read and write as passing the data through the SSL connector causes further buffer allocations.</description>
    </item>
    
    <item>
      <title>Observing lock contention</title>
      <link>https://lenholgate.com/blog/2005/09/observing-lock-contention.html</link>
      <pubDate>Wed, 07 Sep 2005 14:39:54 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/09/observing-lock-contention.html</guid>
      <description>The deadlock detection tool that I was working on last week is coming on nicely. I managed to locate two potential deadlocks that had never caused any problems in code that is running live on a client&amp;rsquo;s site. Once I had a report from my tool it was relatively easy to fix the problems. Both of these were real bugs that just hadn&amp;rsquo;t bitten yet.
Today I added some rudimentary lock contention monitoring to the tool and the results seem to be quite useful&amp;hellip;</description>
    </item>
    
    <item>
      <title>It&#39;s Friday, so...</title>
      <link>https://lenholgate.com/blog/2005/09/its-friday-so.html</link>
      <pubDate>Fri, 02 Sep 2005 11:33:07 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/09/its-friday-so.html</guid>
      <description>This G&amp;rsquo;n&amp;rsquo;R/Beatles mashup works surprisingly well, and brought a smile to my face earlier in the week - via Code Circle.
And whilst we&amp;rsquo;re on the subject of music, Filip has started uploading some of his techno mixes&amp;hellip;</description>
    </item>
    
    <item>
      <title>I&#39;ve been lazy this week</title>
      <link>https://lenholgate.com/blog/2005/09/ive-been-lazy-this-week.html</link>
      <pubDate>Fri, 02 Sep 2005 08:46:58 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/09/ive-been-lazy-this-week.html</guid>
      <description>As I mentioned in an earlier posting I&amp;rsquo;ve been working on a tool this week. I&amp;rsquo;m too lazy to do a job manually and so I decided to write a tool to help me do it&amp;hellip;
Note: the deadlock detector mentioned in this blog post is now available for download from www.lockexplorer.com.
The tool is designed to help me track down deadlocks in code. I decided I needed this tool because I wrote a piece about debugging deadlocks in Visual C++ and realised that using trial and error to locate deadlocks in some client code simply wasn&amp;rsquo;t good enough.</description>
    </item>
    
    <item>
      <title>How refreshing</title>
      <link>https://lenholgate.com/blog/2005/09/how-refreshing.html</link>
      <pubDate>Thu, 01 Sep 2005 17:30:03 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/09/how-refreshing.html</guid>
      <description>One of the things that I&amp;rsquo;ve always been a bit unsure of is the claim by dynamic languages crowd that static typing buys us nothing as the unit tests solve the same problem. It&amp;rsquo;s a nice idea but I&amp;rsquo;m a bit scared that the unit tests required would have to be quite a bit better than my unit tests usually are&amp;hellip; Anyway, it&amp;rsquo;s nice to see Brian Marick posting about how his usual retort of &amp;rsquo;the unit tests will catch the bugs that the static type checker would&amp;rsquo; was wrong&amp;hellip;</description>
    </item>
    
    <item>
      <title>Make sure you are doing RAII properly</title>
      <link>https://lenholgate.com/blog/2005/09/make-sure-you-are-doing-raii-properly.html</link>
      <pubDate>Thu, 01 Sep 2005 11:48:59 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/09/make-sure-you-are-doing-raii-properly.html</guid>
      <description>There&amp;rsquo;s an interesting post over on the Joel On Software forums about RAII in C++. The original poster&amp;rsquo;s problem is clearly stated in the first line of their question:
When the constructor for CTheClass runs, I want to acquire 3 resources. These 3 resources will be freed in the destructor (that&amp;rsquo;s RAII, right?)
Wrong.
The question goes on to point out that if one of the constructors of one of the resources throws and exception then, because the CTheClass constructor hasn&amp;rsquo;t completed the CTheClass destructor doesn&amp;rsquo;t run and the resources that were successfully allocated aren&amp;rsquo;t released.</description>
    </item>
    
    <item>
      <title>Reader Questions</title>
      <link>https://lenholgate.com/blog/2005/09/reader-questions.html</link>
      <pubDate>Thu, 01 Sep 2005 11:34:39 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/09/reader-questions.html</guid>
      <description>Ahsan Askari asked the following in a comment to one of yesterday&amp;rsquo;s posts:
Just like to know whether you use external libraries specially &amp;lsquo;BOOST&amp;rsquo; in your commercial projects and related pros-n-cons ?
*Also i like to know your initial strategy of Software development. I mean you&amp;rsquo;ve written a lot about your coding and tsting techniques but i like to know how you start the project, whether you believe in UML and how you carry out analysis.</description>
    </item>
    
    <item>
      <title>Lots of things become unnecessary if you factor things correctly</title>
      <link>https://lenholgate.com/blog/2005/08/lots-of-things-become-unnecessary-if-you-factor-things-correctly.html</link>
      <pubDate>Wed, 31 Aug 2005 19:06:54 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/08/lots-of-things-become-unnecessary-if-you-factor-things-correctly.html</guid>
      <description>I&amp;rsquo;m still reading someone else&amp;rsquo;s code and it just struck me that a lot of &amp;lsquo;strange&amp;rsquo; coding practices become unnecessary if you factor your code &amp;lsquo;correctly&amp;rsquo;. Note that both &amp;lsquo;strange&amp;rsquo; and &amp;lsquo;correctly&amp;rsquo; live in the Len::Personal::ViewOfTheWorld namespace&amp;hellip;
Take this, for example:
// show line number info, NT5.0-method (SymGetLineFromAddr64()) if (this-&amp;gt;m_sw-&amp;gt;pSGLFA != NULL ) { // yes, we have SymGetLineFromAddr64() if (this-&amp;gt;m_sw-&amp;gt;pSGLFA(this-&amp;gt;m_hProcess, s.AddrPC.Offset, &amp;amp;(csEntry.offsetFromLine), &amp;amp;Line) != FALSE) { csEntry.lineNumber = Line.LineNumber; strcpy_s(csEntry.</description>
    </item>
    
    <item>
      <title>I just don&#39;t get it, what&#39;s with this-&gt;?</title>
      <link>https://lenholgate.com/blog/2005/08/i-just-dont-get-it-whats-with-this-.html</link>
      <pubDate>Wed, 31 Aug 2005 09:29:05 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/08/i-just-dont-get-it-whats-with-this-.html</guid>
      <description>I&amp;rsquo;m looking at some code to help me understand how to use the dbghelp.dll Windows stack walking and symbol discovery stuff and the code I&amp;rsquo;ve found on the net uses a programming style that I&amp;rsquo;ve seen a few times before and have never understood the reason for.
if (this-&amp;gt;m_sw-&amp;gt;pSGSFA(this-&amp;gt;m_hProcess, s.AddrPC.Offset, &amp;amp;(csEntry.offsetFromSmybol), pSym) != FALSE) { strcpy_s(csEntry.name, pSym-&amp;gt;Name); // UnDecorateSymbolName() this-&amp;gt;m_sw-&amp;gt;pUDSN( pSym-&amp;gt;Name, csEntry.undName, STACKWALK_MAX_NAMELEN, UNDNAME_NAME_ONLY ); this-&amp;gt;m_sw-&amp;gt;pUDSN( pSym-&amp;gt;Name, csEntry.undFullName, STACKWALK_MAX_NAMELEN, UNDNAME_COMPLETE ); } else { this-&amp;gt;OnDbgHelpErr(&amp;#34;SymGetSymFromAddr64&amp;#34;, GetLastError(), s.</description>
    </item>
    
    <item>
      <title>It&#39;s obvious when you think about it, but</title>
      <link>https://lenholgate.com/blog/2005/08/its-obvious-when-you-think-about-it-but.html</link>
      <pubDate>Wed, 31 Aug 2005 09:01:17 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/08/its-obvious-when-you-think-about-it-but.html</guid>
      <description>*Piracy is not an enemy until you are famous.
Until that point, obscurity is your enemy.
I think independent creators should spend all of their attention fighting obscurity until they are famous, and only then should start to worry about piracy.*
Derek Silvers, via microISV</description>
    </item>
    
    <item>
      <title>Undocumented Windows 2000 Secrets</title>
      <link>https://lenholgate.com/blog/2005/08/undocumented-windows-2000-secrets.html</link>
      <pubDate>Wed, 24 Aug 2005 08:57:01 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/08/undocumented-windows-2000-secrets.html</guid>
      <description>Just finished reading Undocumented Windows 2000 Secrets: A Programmer&amp;rsquo;s Cookbook by Sven B. Schreiber. Well, I say reading, it was really just a first pass through the book. The text and code spends more time in kernel mode than user mode; there&amp;rsquo;s a lot of information in there and it&amp;rsquo;s all relatively new to me so it&amp;rsquo;s the kind of book that needs a fair bit of work.
Sven starts by explaining how to set up a system that you can use for kenel mode development, you don&amp;rsquo;t want to use your main box as it will be blue screening a lot of the time.</description>
    </item>
    
    <item>
      <title>The price of freedom is eternal vigilance.</title>
      <link>https://lenholgate.com/blog/2005/08/the-price-of-freedom-is-eternal-vigilance.html</link>
      <pubDate>Tue, 23 Aug 2005 15:35:15 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/08/the-price-of-freedom-is-eternal-vigilance.html</guid>
      <description>Kevin Barnes has written a nice piece on &amp;ldquo;freedom&amp;rdquo; languages, his word for Ruby, Python, Perl, etc. He compares these with &amp;ldquo;safety&amp;rdquo; languages, such as C++, C#, Java, VB, Delphi.
He starts off by saying &amp;ldquo;I picked the terms freedom and safety because they represent a philosophical split that I&amp;rsquo;m not sure some of the advocates of these languages realize is present. You can sense this split when you listen to the words that the various pundits use when discussing the merits of different languages.</description>
    </item>
    
    <item>
      <title>More Reprints - CORBA, C&#43;&#43; and Java</title>
      <link>https://lenholgate.com/blog/2005/08/more-reprints---corba-c-and-java.html</link>
      <pubDate>Tue, 23 Aug 2005 10:58:57 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/08/more-reprints---corba-c-and-java.html</guid>
      <description>I&amp;rsquo;ve just finished posting some more reprints from back in 2001 when I was working on CORBA systems with C++ and Java.
The articles mostly compare CORBA to COM and show why providing a reference counted server object lifetime management system is harder than it appears.
1 - CORBA - Reference Counting. Adding reference counting to CORBA objects isn&amp;rsquo;t as easy as it first seems.
2 - CORBA - More Reference Counting.</description>
    </item>
    
    <item>
      <title>JLR on C&#43;&#43; interfaces</title>
      <link>https://lenholgate.com/blog/2005/08/jlr-on-c-interfaces.html</link>
      <pubDate>Tue, 23 Aug 2005 07:20:41 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/08/jlr-on-c-interfaces.html</guid>
      <description>A while ago I came across JLR&amp;rsquo;s weblog and read his three postings using interfaces in C++ (1, 2, 3). I fired off a quick comment on the first article because I didn&amp;rsquo;t agree with a couple of things he was saying. Jose&amp;rsquo;s response to my comment grew into this posting and, well, now I need to explain my position in more detail.
This is it&amp;hellip;
The first point that Jose takes issue with is that I dismiss his use of macros without explaining why.</description>
    </item>
    
    <item>
      <title>While Windows lives, it&#39;s hard to see how COM will ever die.</title>
      <link>https://lenholgate.com/blog/2005/08/while-windows-lives-its-hard-to-see-how-com-will-ever-die.html</link>
      <pubDate>Mon, 22 Aug 2005 15:28:57 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/08/while-windows-lives-its-hard-to-see-how-com-will-ever-die.html</guid>
      <description>This is a nice piece by Tim Anderson on why COM is still alive and kicking despite what all the .Net-heads would have you believe&amp;hellip;
It always seemed to be pretty obvious to me that all the &amp;ldquo;COM is dead, long live .Net&amp;rdquo; hype was just that, hype. Whilst there are obvious advantages to using .Net for new projects there are a lot of projects out there in the wild where you can&amp;rsquo;t just throw away all of the investment that has been made in COM.</description>
    </item>
    
    <item>
      <title>It&#39;s the libraries, stupid</title>
      <link>https://lenholgate.com/blog/2005/08/its-the-libraries-stupid.html</link>
      <pubDate>Fri, 19 Aug 2005 15:16:03 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/08/its-the-libraries-stupid.html</guid>
      <description>Jeff Atwood has a nice piece on the productivity of different programming languages (go read it). His sums up with the following:
*Given ..
1). the abandonment of C++ and C for mainstream programming
2). the huge influence of individual programmer skill
the slow but steady adoption of scripting/dynamic language conventions in Java and .NET* *.. maybe all modern programming languages really are the same.
Ole Eichhorn has already taken Jeff to task in the comments about his definition of mainstream, and Jeff has responded here so I&amp;rsquo;ll leave that one alone for now ;) Several people picked up on the relative unfairness of using lines of code as a productivity measure, so I&amp;rsquo;ll leave that one ;) which leaves me with something I&amp;rsquo;ve been meaning to write about for a while&amp;hellip;</description>
    </item>
    
    <item>
      <title>Joel is a bit confused about agility and design</title>
      <link>https://lenholgate.com/blog/2005/08/joel-is-a-bit-confused-about-agility-and-design.html</link>
      <pubDate>Thu, 18 Aug 2005 09:24:01 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/08/joel-is-a-bit-confused-about-agility-and-design.html</guid>
      <description>Joel Spolsky of has just completed a very public product development project for a Windows based user assistance program called CoPilot. This has been interesting to watch and has, no doubt, generated lots of positive PR for him. He&amp;rsquo;s just released the functional spec for the system and points out that &amp;ldquo;I believe in Big Design Up Front, which the proponents of Extreme Programming consider anathema. I have consistently saved time and made better products by using BDUF and I&amp;rsquo;m proud to use it, no matter what the XP fanatics claim.</description>
    </item>
    
    <item>
      <title>I wonder what the rationale for this restriction is</title>
      <link>https://lenholgate.com/blog/2005/08/i-wonder-what-the-rationale-for-this-restriction-is.html</link>
      <pubDate>Wed, 17 Aug 2005 19:09:04 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/08/i-wonder-what-the-rationale-for-this-restriction-is.html</guid>
      <description>Geoff Appleby discovers that a common C++ template idiom doesn&amp;rsquo;t work with .Net generics. The code that doesn&amp;rsquo;t work is this:
Public Class Class1(Of V As System.Web.Services.Protocols.SoapHttpClientProtocol) Inherits V End Class which is the .Net generics equivalent of this common C++ idiom:
template &amp;lt;class base&amp;gt; class TDerived : public base { }; This is useful in all kinds of situations, as Christopher Diggins explains and, as Geoff says: &amp;ldquo;You don&amp;rsquo;t know if V is NotIneritable, MustInherit, or whatever.</description>
    </item>
    
    <item>
      <title>Garbage Collection and Pointers</title>
      <link>https://lenholgate.com/blog/2005/08/garbage-collection-and-pointers.html</link>
      <pubDate>Fri, 12 Aug 2005 07:26:53 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/08/garbage-collection-and-pointers.html</guid>
      <description>So, Richard Hale Shaw is helping us move away from C++ and in his latest posting on the subject he explains how &amp;ldquo;veteran C++ programmers&amp;rdquo; don&amp;rsquo;t like to manage memory themselves; hmm. I&amp;rsquo;d quite like to see his sample data. Especially as he then goes on to define &amp;ldquo;veteran C++ programmers&amp;rdquo; as people who don&amp;rsquo;t like to manage memory themselves&amp;hellip;
&amp;ldquo;But veteran C++ developers testify that - without taking special precautions - you&amp;rsquo;ll invariably introduce more programming errors by managing memory yourself:</description>
    </item>
    
    <item>
      <title>Borland C&#43;&#43; v3.1 and &#39;The Raymond Chen Camp&#39;</title>
      <link>https://lenholgate.com/blog/2005/08/borland-c-v31-and-the-raymond-chen-camp.html</link>
      <pubDate>Thu, 11 Aug 2005 11:06:54 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/08/borland-c-v31-and-the-raymond-chen-camp.html</guid>
      <description>Last weekend was a bit of a &amp;ldquo;compiler weekend&amp;rdquo; for me; I started playing with VS 2005 and I found some old source code and wanted to build it and that required Borland C++ v3.1 (In the currently fashionable style of naming things - Borland C++ 1991).
I dug through my box of old disks and found a backup of my old 386 development machine. That contained an installation of BC3.</description>
    </item>
    
    <item>
      <title>How to reset the BIOS on a Vortex86-6071LV</title>
      <link>https://lenholgate.com/blog/2005/08/how-to-reset-the-bios-on-a-vortex86-6071lv.html</link>
      <pubDate>Wed, 10 Aug 2005 11:57:13 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/08/how-to-reset-the-bios-on-a-vortex86-6071lv.html</guid>
      <description>The embedded Linux project came back to life this week when the manufacturer sent us some new video driver source for the SiS 550 on the Vortex86-6071LV. At present the new driver seems to work as well as the old one; i.e. not very well at all&amp;hellip;
Anyway, whilst adjusting the BIOS settings for the LCD panel I managed to set them to something which meant that neither the LCD panel nor the external VGA would display anything.</description>
    </item>
    
    <item>
      <title>First impressions of Visual Studio 2005 from a C&#43;&#43; point of view</title>
      <link>https://lenholgate.com/blog/2005/08/first-impressions-of-visual-studio-2005-from-a-c-point-of-view.html</link>
      <pubDate>Wed, 10 Aug 2005 04:45:37 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/08/first-impressions-of-visual-studio-2005-from-a-c-point-of-view.html</guid>
      <description>I&amp;rsquo;ve been using the latest Visual Studio 2005 beta on and off for the last couple of days. This is the first time I&amp;rsquo;ve bothered to try &amp;ldquo;Whidbey&amp;rdquo; and my initial impressions are very favourable; I&amp;rsquo;m just using it for unmanaged C++ at present. I haven&amp;rsquo;t really done a great deal with it yet but even though it&amp;rsquo;s installed on in a VMWare virtual machine it seems faster and generally less lardy than both VS.</description>
    </item>
    
    <item>
      <title>I feel the need to comment on this...</title>
      <link>https://lenholgate.com/blog/2005/08/i-feel-the-need-to-comment-on-this.html</link>
      <pubDate>Mon, 08 Aug 2005 08:49:47 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/08/i-feel-the-need-to-comment-on-this.html</guid>
      <description>Richard Hale Shaw continues his series of blog postings on &amp;ldquo;Moving away from C++&amp;rdquo; with the obligatory &amp;ldquo;pointers are bad, garbage collection is good&amp;rdquo; post&amp;hellip; I feel the need to write something about this but not yet, I have work to do&amp;hellip;</description>
    </item>
    
    <item>
      <title>Be explicit about a class&#39;s multiple interfaces</title>
      <link>https://lenholgate.com/blog/2005/08/be-explicit-about-a-classs-multiple-interfaces.html</link>
      <pubDate>Fri, 05 Aug 2005 12:40:40 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/08/be-explicit-about-a-classs-multiple-interfaces.html</guid>
      <description>I&amp;rsquo;ve been working on The Server Framework this week. A client wanted a version of the latest framework with UDP support added. They&amp;rsquo;d taken the freely available version of the code a couple of years ago and I&amp;rsquo;d given them some hints as to how they could get it to deal with UDP. This worked well for them and they&amp;rsquo;ve built a rather large VOIP system on top and now they&amp;rsquo;re having some performance problems.</description>
    </item>
    
    <item>
      <title>Reprint: Using OpenSSL with Asynchronous Sockets</title>
      <link>https://lenholgate.com/blog/2005/08/reprint-using-openssl-with-asynchronous-sockets.html</link>
      <pubDate>Thu, 04 Aug 2005 13:52:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/08/reprint-using-openssl-with-asynchronous-sockets.html</guid>
      <description>OpenSSL is an open source implementation of the SSL and TLS protocols. Unfortunately it doesn&amp;rsquo;t play well with windows style asynchronous sockets. This article, which was first published in Windows Developer Magazine and then reprinted on my company web site, provides a simple connector that enables you to use OpenSSL asynchronously.
A new posting in the blast from the past reprints area. The article is here.</description>
    </item>
    
    <item>
      <title>Setup and Teardown, reprise</title>
      <link>https://lenholgate.com/blog/2005/08/setup-and-teardown-reprise.html</link>
      <pubDate>Wed, 03 Aug 2005 07:40:14 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/08/setup-and-teardown-reprise.html</guid>
      <description>Roy adds a little fine tuning to Brian&amp;rsquo;s advice about avoiding setup and teardown in unit tests. In summary; aim to minimise duplication in your test code&amp;hellip;
Roy takes issue with Brian&amp;rsquo;s assertion that a little duplication in your test code is OK. I think the answer is somewhere in between. Roy&amp;rsquo;s point about duplication in the test code leading to fragility of the tests is valid and his suggestions are good but I&amp;rsquo;d still lean towards readability over duplication when push comes to shove.</description>
    </item>
    
    <item>
      <title>/Y3 where have you been all my life</title>
      <link>https://lenholgate.com/blog/2005/08/y3-where-have-you-been-all-my-life.html</link>
      <pubDate>Tue, 02 Aug 2005 08:54:24 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/08/y3-where-have-you-been-all-my-life.html</guid>
      <description>I was just flicking through some of the entries over on Games from Within and I came across an entry on precompiled headers which is a good introduction of the pros and cons of using precompiled headers in a cross platform environment.
I wanted to comment on this posting but the comments seem to be turned off for it now so I&amp;rsquo;ll comment here&amp;hellip;
Noel covers the whys and why nots of precompiled headers a lot better than I did when I wrote about them a while ago, however he fails to mention the &amp;ldquo;one true way&amp;rdquo; of using precompiled headers on Microsoft compilers&amp;hellip;</description>
    </item>
    
    <item>
      <title>Exploring the C&#43;&#43; Unit Testing Framework Jungle</title>
      <link>https://lenholgate.com/blog/2005/08/exploring-the-c-unit-testing-framework-jungle.html</link>
      <pubDate>Tue, 02 Aug 2005 08:14:21 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/08/exploring-the-c-unit-testing-framework-jungle.html</guid>
      <description>Exploring the C++ Unit Testing Framework Jungle over on Games from Within is a really good look at all of the C++ unit testing frameworks out there. It compares the following frameworks:
CppUnit
Boost.Test
CppUnitLite
NanoCppUnit
Unit++
CxxTest
I&amp;rsquo;m one of those people who has written their own mini framework because none of the existing frameworks seemed to do what I wanted at the time I needed the framework and I wanted to get up to speed quickly with minimal learning time.</description>
    </item>
    
    <item>
      <title>Threading flames</title>
      <link>https://lenholgate.com/blog/2005/07/threading-flames.html</link>
      <pubDate>Sat, 30 Jul 2005 09:48:55 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/07/threading-flames.html</guid>
      <description>Thanks to Ned Batchelder for pointing out the &amp;ldquo;discussion&amp;rdquo; about the pros and cons of multi-threaded programming over on the SQLite newsgroup. The comments on Ned&amp;rsquo;s post are well worth reading; they&amp;rsquo;ve provided me with a new blog to subscribe to, Jeff Darcy&amp;rsquo;s Canned Platypus which seems to have lots of the kind of high quality techie stuff that I like.
My view on multi-threading is probably pretty obvious given the way my socket server framework is designed&amp;hellip;</description>
    </item>
    
    <item>
      <title>On the bandwidth wasted by poorly designed spam software</title>
      <link>https://lenholgate.com/blog/2005/07/on-the-bandwidth-wasted-by-poorly-designed-spam-software.html</link>
      <pubDate>Sat, 30 Jul 2005 06:40:06 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/07/on-the-bandwidth-wasted-by-poorly-designed-spam-software.html</guid>
      <description>I&amp;rsquo;ve been watching my web server logs in real time for the last couple of days, not intently; I do have a few slightly more interesting things to do. I&amp;rsquo;ve had a tail of the logs running on the laptop and I glance at it every now and then. What I&amp;rsquo;ve noticed is that the people who wrote whatever the software is that regularly tries to spam my comments are pretty crap.</description>
    </item>
    
    <item>
      <title>Blog Explosion just doesn&#39;t do it for me</title>
      <link>https://lenholgate.com/blog/2005/07/blog-explosion-just-doesnt-do-it-for-me.html</link>
      <pubDate>Fri, 29 Jul 2005 21:05:36 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/07/blog-explosion-just-doesnt-do-it-for-me.html</guid>
      <description>I&amp;rsquo;ve been attempting to boost the number of people reading this blog in the last few weeks. Mainly because the more people there are reading the more likely I am to get feedback in the form of comments and postings that link to me and I find the feedback really useful; having your views challenged is the best way to learn&amp;hellip;
Anyway, I started off by reading a load of good stuff over on Darren Rowse&amp;rsquo;s ProBlogger blog and one of the postings was about a service called BlogExplosion.</description>
    </item>
    
    <item>
      <title>Whilst on the subject of deadlocks</title>
      <link>https://lenholgate.com/blog/2005/07/whilst-on-the-subject-of-deadlocks.html</link>
      <pubDate>Thu, 28 Jul 2005 19:56:06 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/07/whilst-on-the-subject-of-deadlocks.html</guid>
      <description>It must be a deadlock kinda day. Pete McKinstry points to a Java deadlock avoidance scheme which involves knowing and using a total ordering of the locks that you wish to acquire. This is similar to Andrei Alexandrescu&amp;rsquo;s C++ idea of always acquiring multiple locks in increasing memory address order.
Both of these are fine if you can get at all of the locks from one place. I find that that&amp;rsquo;s rarely the case and more often the locks are within objects and I don&amp;rsquo;t want to break the encapsulation to expose the need to lock around a method so that I can grab the lock that&amp;rsquo;s inside of the object and then use it from outside of the object in some multiple lock, deadlock avoidance, total ordering, code based lock scheme&amp;hellip; In my opinion these ideas are all well and good in theory but just don&amp;rsquo;t tend to work in practice if you are working with properly factored code&amp;hellip;.</description>
    </item>
    
    <item>
      <title>Debugging deadlocks in C&#43;&#43; code with Visual C&#43;&#43;</title>
      <link>https://lenholgate.com/blog/2005/07/debugging-deadlocks-in-c-code-with-visual-c.html</link>
      <pubDate>Thu, 28 Jul 2005 16:43:33 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/07/debugging-deadlocks-in-c-code-with-visual-c.html</guid>
      <description>I&amp;rsquo;m currently adding some functionality to a server that I wrote, using The Server Framework, for a client last year. The server provides application gateway services for them. The new functionality is to switch to using asynchronous connect calls using ConnectEx when it&amp;rsquo;s available on the platform that the server is running on and to continue to use a blocking connect if ConnectEx isn&amp;rsquo;t available.
As I mentioned in the posting back in Feb 2004 the performance counters that we add to these kinds of servers are invaluable in tracking down problems.</description>
    </item>
    
    <item>
      <title>Setup and TearDown considered harmful?</title>
      <link>https://lenholgate.com/blog/2005/07/setup-and-teardown-considered-harmful.html</link>
      <pubDate>Wed, 27 Jul 2005 19:33:14 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/07/setup-and-teardown-considered-harmful.html</guid>
      <description>I&amp;rsquo;m glad that Brian Button went to the trouble of writing this post and thinking through the implications of shared setup and teardown code in tests. I&amp;rsquo;ve been a bit concerned about some of my tests for a while now. You see, I don&amp;rsquo;t use a fancy framework, I just write them myself in C++ and generally there isn&amp;rsquo;t much shared setup code because I don&amp;rsquo;t find it that useful. Brian&amp;rsquo;s insight that the duplication present in tests is often a good thing because it allows the test to communicate more clearly is pretty much what I&amp;rsquo;ve thought for a while.</description>
    </item>
    
    <item>
      <title>Visual C&#43;&#43; 2005 loses single threaded CRT</title>
      <link>https://lenholgate.com/blog/2005/07/visual-c-2005-loses-single-threaded-crt.html</link>
      <pubDate>Wed, 27 Jul 2005 15:10:07 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/07/visual-c-2005-loses-single-threaded-crt.html</guid>
      <description>From C++ Potential. In a posting about changes to the compiler switches in Visual C++ 2005 Brandon mentions that they&amp;rsquo;ve removed the single threaded C runtime library options.
Does anyone out there use the single threaded CRT anymore? I can&amp;rsquo;t remember when I last used it. I doubt this will cause me or my clients any great problems and I guess VC6-&amp;gt;VS2003 still works ;) for those for whom it is an issue.</description>
    </item>
    
    <item>
      <title>Result should be const ? conditional operator : if then else</title>
      <link>https://lenholgate.com/blog/2005/07/result-should-be-const-conditional-operator-if-then-else.html</link>
      <pubDate>Wed, 27 Jul 2005 09:27:23 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/07/result-should-be-const-conditional-operator-if-then-else.html</guid>
      <description>Simon says; I&amp;rsquo;ve stopped using ?: because it isn&amp;rsquo;t as readable as an if .. then .. else.&amp;hellip;
I, personally, don&amp;rsquo;t find the readability of the conditional operator (?:) a problem. No more than I find readability of assignments or pointer operations a problem. I can see how that since the conditional operator is only appropriate for use in certain circumstances, some programmers may not have come across it very often and for them it may be harder to understand than a construct that they know well.</description>
    </item>
    
    <item>
      <title>Unit testing for speed?</title>
      <link>https://lenholgate.com/blog/2005/07/unit-testing-for-speed.html</link>
      <pubDate>Tue, 26 Jul 2005 16:39:42 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/07/unit-testing-for-speed.html</guid>
      <description>Simon is thinking about using unit testing to help with performance testing. Whilst I&amp;rsquo;ve found it useful to use unit tests as very focussed ways to run a profiler on a selection of code I don&amp;rsquo;t think it&amp;rsquo;s a good idea to tie the success of your test to it completing within a particular length of time.
After all, you might decide to run all of your tests under a tool such as Boundschecker and it would be a pity to get false failures due to the fact that the test is running slower just because you&amp;rsquo;re using some other tool or running on some other machine.</description>
    </item>
    
    <item>
      <title>Blogs as conversations and how blog search can help fill in the gaps</title>
      <link>https://lenholgate.com/blog/2005/07/blogs-as-conversations-and-how-blog-search-can-help-fill-in-the-gaps.html</link>
      <pubDate>Tue, 26 Jul 2005 14:57:30 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/07/blogs-as-conversations-and-how-blog-search-can-help-fill-in-the-gaps.html</guid>
      <description>Robert Scoble, and others, are discussing blog search engines at present. It&amp;rsquo;s quite interesting to see that there are lots of different approaches to the same problem. Mary Hodder&amp;rsquo;s article is good in that it explains a bit about the differences in how Bloglines and Technorati get their figures. I guess it&amp;rsquo;s early days in the blog search engine space but none of the existing offerings really do what I&amp;rsquo;d like ;)</description>
    </item>
    
    <item>
      <title>This should be interesting</title>
      <link>https://lenholgate.com/blog/2005/07/this-should-be-interesting.html</link>
      <pubDate>Mon, 25 Jul 2005 18:57:51 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/07/this-should-be-interesting.html</guid>
      <description>Richard Hale Shaw is writing some blog entries about moving away from C++ (to .Net). But then he would say that, wouldn&amp;rsquo;t he. His job includes providing courses for people learning .Net&amp;hellip; ;)
Anyway, I&amp;rsquo;m sure it&amp;rsquo;ll be an interesting series of articles, especially given his current views on C++&amp;hellip;
I think Richard&amp;rsquo;s being a bit harsh to say that C++ is just a procedural language with an OO retro-fit. Sure, you can write procedural code in C++, but then you can do the same in most OO languages if you try hard enough.</description>
    </item>
    
    <item>
      <title>Disappointing .Net Sockets article in MSDN Magazine this month</title>
      <link>https://lenholgate.com/blog/2005/07/disappointing-net-sockets-article-in-msdn-magazine-this-month.html</link>
      <pubDate>Fri, 22 Jul 2005 23:22:31 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/07/disappointing-net-sockets-article-in-msdn-magazine-this-month.html</guid>
      <description>There&amp;rsquo;s a rather disappointing article on .Net sockets in this month&amp;rsquo;s MSDN magazine.
Updated 5th May 2023 to fix broken links
The title of the piece is &amp;ldquo;Get Closer to the Wire with High-Performance Sockets in .NET&amp;rdquo; which nicely over-hypes the content. How, exactly, am I getting closer to the wire by placing a managed layer between my code and the wire? The summary box is a little more honest; describing the article as covering &amp;ldquo;basic socket programming&amp;rdquo; and &amp;ldquo;factors in creating socket-based servers&amp;rdquo; which it does&amp;hellip;</description>
    </item>
    
    <item>
      <title>No, that&#39;s not the point, and yes, trace logging IS bad</title>
      <link>https://lenholgate.com/blog/2005/07/no-thats-not-the-point-and-yes-trace-logging-is-bad.html</link>
      <pubDate>Thu, 21 Jul 2005 10:50:54 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/07/no-thats-not-the-point-and-yes-trace-logging-is-bad.html</guid>
      <description>Sahil Malik doesn&amp;rsquo;t agree with Jeremy Miller&amp;rsquo;s description of excessive tracing being a code smell. He suggests a &amp;rsquo;neat&amp;rsquo; way to get around the problem but, IMHO, he&amp;rsquo;s completely missing the point, and I&amp;rsquo;ve said as much before. Oh, and I agree with Rockford, the &amp;rsquo;neat&amp;rsquo; way stinks ;)
Firstly, Sahil seems to have misunderstood the smell. It&amp;rsquo;s not seeing the output (which is what his &amp;rsquo;neat&amp;rsquo; trick avoids) it&amp;rsquo;s having the log statements in the code in the first place.</description>
    </item>
    
    <item>
      <title>What&#39;s wrong with my CSS?</title>
      <link>https://lenholgate.com/blog/2005/07/whats-wrong-with-my-css.html</link>
      <pubDate>Wed, 20 Jul 2005 20:57:30 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/07/whats-wrong-with-my-css.html</guid>
      <description>My &amp;lt;pre&amp;gt; styling looks OK (to me at least) in IE 6 and horrible (double spaced and strange) in Firefox. Can anyone tell me why?
The CSS looks like this:
pre { color : #990000; font : &amp;#34;Courier New&amp;#34;, Courier, monospace; font-size:small; font-weight:normal; padding : 5px; line-height:100%; } </description>
    </item>
    
    <item>
      <title>A single responsibility, please</title>
      <link>https://lenholgate.com/blog/2005/07/a-single-responsibility-please.html</link>
      <pubDate>Wed, 20 Jul 2005 18:28:32 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/07/a-single-responsibility-please.html</guid>
      <description>Having got the CMessageProcessor under test in the last posting. I added a few easy tests for the object and then I came to another hard to add test. The reason that it was hard to add was that the object is doing a little too much.
The easy to add tests were for the object&amp;rsquo;s Initialise() and Shutdown() functions; though whilst adding the tests I made a note to see if I could do away with the functions in the near future.</description>
    </item>
    
    <item>
      <title>My own legacy code</title>
      <link>https://lenholgate.com/blog/2005/07/my-own-legacy-code.html</link>
      <pubDate>Wed, 20 Jul 2005 12:34:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/07/my-own-legacy-code.html</guid>
      <description>I&amp;rsquo;ve just started work on an ISO8583 server for a client. I&amp;rsquo;ve done similar work for them in the past and the first thing that I did was to take the basic shell of the last server that I did for them and update it to use all of latest version of The Server Framework. The next was to start to look at the first of the requirements for the new server.</description>
    </item>
    
    <item>
      <title>The &#39;full articles&#39; feed is now feeding full articles again</title>
      <link>https://lenholgate.com/blog/2005/07/the-full-articles-feed-is-now-feeding-full-articles-again.html</link>
      <pubDate>Mon, 18 Jul 2005 18:34:38 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/07/the-full-articles-feed-is-now-feeding-full-articles-again.html</guid>
      <description>Seems like I broke it when I added the GoogeAds for that feed&amp;hellip;
RSS 1.0 (full articles)
RSS 2.0 (extracts)</description>
    </item>
    
    <item>
      <title>Another day learning the Linux way...</title>
      <link>https://lenholgate.com/blog/2005/07/another-day-learning-the-linux-way.html</link>
      <pubDate>Thu, 07 Jul 2005 19:04:02 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/07/another-day-learning-the-linux-way.html</guid>
      <description>My client has decided that we should ignore the video driver problem and press on with the proof of concept using the external VGA screen as a display. So this week was spent learning about building software for a machine running a minimal Linux installation using libc 2.3.2 on a machine running a proper distro using libc something else&amp;hellip;
The first job was to evaluate a couple of small web browsers, dillo and viewml; their choice, not mine (not that I have any issues with the choice, I just didn&amp;rsquo;t do any research around it).</description>
    </item>
    
    <item>
      <title>JetByte News: Embedded Linux development</title>
      <link>https://lenholgate.com/news/2005/07/embedded-linux-development.html</link>
      <pubDate>Fri, 01 Jul 2005 12:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/news/2005/07/embedded-linux-development.html</guid>
      <description>We&amp;rsquo;re working on a prototype system for PayPoint using a Vortex86-6071LV system running embedded Linux for use in kiosk applications.</description>
    </item>
    
    <item>
      <title>Currently reading</title>
      <link>https://lenholgate.com/blog/2005/07/currently-reading-4.html</link>
      <pubDate>Fri, 01 Jul 2005 10:59:42 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/07/currently-reading-4.html</guid>
      <description>Just before I dive back into my other project, the one I don&amp;rsquo;t talk about, I thought I&amp;rsquo;d post a short note about the pile of books that I&amp;rsquo;m currently reading&amp;hellip;
Working Effectively with Legacy Code by Michael C. Feathers. Roy Osherove has this as his book of the month and I&amp;rsquo;d previously read some of Michael&amp;rsquo;s writings on testing and found them useful. The book&amp;rsquo;s great. If you ever have to work with the kind of code that I wrote about at length as &amp;rsquo;the refactoring project&amp;rsquo; then this book is for you.</description>
    </item>
    
    <item>
      <title>So, where&#39;s the Unix version of CodeProject?</title>
      <link>https://lenholgate.com/blog/2005/06/so-wheres-the-unix-version-of-codeproject.html</link>
      <pubDate>Thu, 30 Jun 2005 22:49:32 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/06/so-wheres-the-unix-version-of-codeproject.html</guid>
      <description>Software development is hard. Lots of details that are hard to get your head around and harder to simplify. CodeProject is a wonderful resource for Windows programmers where programmers try and make the complicated more simple for others; I view it as giving something back. If I&amp;rsquo;ve spent several weeks fighting to understand a problem and now I do it&amp;rsquo;s nice to write up and article and post it, either here, or on CodeProject, so that others don&amp;rsquo;t have to fight so hard.</description>
    </item>
    
    <item>
      <title>Linux&#39;s Dll hell?</title>
      <link>https://lenholgate.com/blog/2005/06/linuxs-dll-hell.html</link>
      <pubDate>Thu, 30 Jun 2005 22:44:13 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/06/linuxs-dll-hell.html</guid>
      <description>I&amp;rsquo;ve been playing with Linux this week. The last time I played with Linux was back when it fitted on 15 floppy disks; I think I still have the 15 floppy disks in Dad&amp;rsquo;s office somewhere. It&amp;rsquo;s come a long way but I can&amp;rsquo;t help thinking that, much like Windows, it still has a long way to go&amp;hellip;
Bear in mind I&amp;rsquo;m writing this from the point of view of someone who knows enough to get by and do some development work on the platform fairly quickly but not someone who knows, or wants to know, all the nitty gritty.</description>
    </item>
    
    <item>
      <title>Showstopper?</title>
      <link>https://lenholgate.com/blog/2005/06/showstopper.html</link>
      <pubDate>Thu, 30 Jun 2005 19:14:28 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/06/showstopper.html</guid>
      <description>Today was &amp;ldquo;get the Vortex86&amp;rsquo;s SiS 550 graphics card working in graphics mode&amp;rdquo; day.
In summary, I didn&amp;rsquo;t and it&amp;rsquo;s because the LCD is a DSTN one and the current Linux SiS drivers don&amp;rsquo;t support it yet&amp;hellip;
The first job of the day was to build a new 2.4.31 kernel with support for the network card in the VMWare machine. I needed this so that I could easilly test my new kernel and get to the point where I was confortable configuring LILO with multiple boot options before moving on to doing it for real on the Vortex86.</description>
    </item>
    
    <item>
      <title>Travelling at the speed of a floppy drive</title>
      <link>https://lenholgate.com/blog/2005/06/travelling-at-the-speed-of-a-floppy-drive.html</link>
      <pubDate>Wed, 29 Jun 2005 21:22:06 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/06/travelling-at-the-speed-of-a-floppy-drive.html</guid>
      <description>This afternoon has been &amp;ldquo;one of those&amp;rdquo; afternoons. It started innocently enough when I checked my mail and my cables had arrived. I plugged a floppy drive into the Vortex86 and checked that I could boot off of it into DOS. All was well, if you ignore the fact that the only way I could get a) a floppy drive and b) a power supply to power it was to take the cover off of a 1U server box that I had laying around and use the PSU and floppy drive from that.</description>
    </item>
    
    <item>
      <title>2.4.31 Kernel build is go...</title>
      <link>https://lenholgate.com/blog/2005/06/2431-kernel-build-is-go.html</link>
      <pubDate>Wed, 29 Jun 2005 11:50:53 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/06/2431-kernel-build-is-go.html</guid>
      <description>As I mentioned yesterday I&amp;rsquo;m currently playing around with Linux on an embedded PC.
Stage 0: was to get a build environmet set up. That&amp;rsquo;s complete now and I have a build of the 2.4.31 kernel running whilst I type this.
Getting a build machine set up was pretty painless. I downloaded the evaluation of VMWare Workstation 5 and had hoped to grab a pre-built image from Red Hat but the only images that they have available are enterprise server builds that were around 900-&amp;gt;1000mb downloads with no details about what had been installed on them.</description>
    </item>
    
    <item>
      <title>And now for something completely different</title>
      <link>https://lenholgate.com/blog/2005/06/and-now-for-something-completely-different.html</link>
      <pubDate>Tue, 28 Jun 2005 23:10:26 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/06/and-now-for-something-completely-different.html</guid>
      <description>One of my clients has asked me to do some investigative work for them in relation to Linux running on a Vortex86-6071LV (a PC/104 format PC which is 386 PC on a board that&amp;rsquo;s around 6&amp;quot; x 4&amp;quot; x 1/2&amp;quot;).
Should be fun.
The machine in question is actually a VOX-064-TS thin frame PC with a touch screen which is pretty cool. The &amp;lsquo;disk&amp;rsquo; is a 32mb solid state device and it&amp;rsquo;s kinda weird to see this tiny PC boot up via the usual AMI BIOS screens and then into Linux in around 10 seconds from this super fast disk (I want solid state disks for my dev box!</description>
    </item>
    
    <item>
      <title>Is bloglines always slow?</title>
      <link>https://lenholgate.com/blog/2005/06/is-bloglines-always-slow.html</link>
      <pubDate>Sat, 25 Jun 2005 12:36:47 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/06/is-bloglines-always-slow.html</guid>
      <description>I&amp;rsquo;ve been using SharpReader as my RSS reader for ages. I downloaded a version of it way back when I first got into blog reading and stuck with it because it worked, to a fashion. I ignored the bloaty .Netness of it and the fact that sometimes it disapeared from my task tray yet was still running, and that sometimes it ran really slowly, and that the way it presented new postings was a bit crap&amp;hellip;</description>
    </item>
    
    <item>
      <title>Ok, Roy wins, I&#39;m starting to see the advantage of mocks with expectations</title>
      <link>https://lenholgate.com/blog/2005/06/ok-roy-wins-im-starting-to-see-the-advantage-of-mocks-with-expectations.html</link>
      <pubDate>Sat, 25 Jun 2005 11:34:20 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/06/ok-roy-wins-im-starting-to-see-the-advantage-of-mocks-with-expectations.html</guid>
      <description>Last week I posted an entry about the simple, hand built, mocks that I use for testing in C++. Whilst I stand by my previous assertion that writing the mocks yourself gives you an further insight into your design from a client perspective I think the discussion that I had with Roy Osherove after last week&amp;rsquo;s posting has made me appreciate the power of having mocks that support the programmatic specification of &amp;rsquo;expected&amp;rsquo; behaviour.</description>
    </item>
    
    <item>
      <title>Easy interaction testing in C&#43;&#43; with Mocks that create logs</title>
      <link>https://lenholgate.com/blog/2005/06/easy-interaction-testing-in-c-with-mocks-that-create-logs.html</link>
      <pubDate>Fri, 17 Jun 2005 11:55:30 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/06/easy-interaction-testing-in-c-with-mocks-that-create-logs.html</guid>
      <description>My Unicode Byte Order Mark hassles yesterday were brought to light by one of my mock objects. It was the expected output log for the object that had been converted from UTF-16 to UTF-8 by CVS without asking&amp;hellip; Whilst writing that piece I realised that I probably needed to write this piece. You see, I spend most of my time in C++ and I write most of my Mock objects myself rather than having some framework do it for me and something that I found very useful and simple is the idea that my mock objects create simple logs of what happens to them.</description>
    </item>
    
    <item>
      <title>0xFF 0xFE -&gt; CVS -&gt; 0xEF 0xBB 0xBF</title>
      <link>https://lenholgate.com/blog/2005/06/0xff-0xfe---cvs---0xef-0xbb-0xbf.html</link>
      <pubDate>Fri, 17 Jun 2005 10:21:04 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/06/0xff-0xfe---cvs---0xef-0xbb-0xbf.html</guid>
      <description>My project house-keeping yesterday ended up with a rather strange discovery. I have some test log files that contain Unicode characters and are stored on disk as UTF-16 with the correct 2 byte &amp;lsquo;byte order mark&amp;rsquo; (BOM) header of 0xFF 0xFE. When I discovered that I needed to save some test logs as Unicode I hacked together some code that dealt with the UTF-16 BOM and did the right thing. Yesterday&amp;rsquo;s mammoth CVS checkin and test was obviously the first time that I&amp;rsquo;d checked these files out of CVS and run my tests.</description>
    </item>
    
    <item>
      <title>Working on the borders</title>
      <link>https://lenholgate.com/blog/2005/06/working-on-the-borders.html</link>
      <pubDate>Fri, 17 Jun 2005 09:32:17 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/06/working-on-the-borders.html</guid>
      <description>As anyone who has downloaded any of my code from here, or my company site or CodeProject will know, I have a particular way of doing things. The code I write tends to follow a particular style and as such assumes particular dependencies. The approach that I tend to take when I&amp;rsquo;m making stuff available on the web is that if you want to use the code I&amp;rsquo;m giving away, then you need to adjust your code in whatever ways you need to be able to consume what I provide.</description>
    </item>
    
    <item>
      <title>Catching my breath</title>
      <link>https://lenholgate.com/blog/2005/06/catching-my-breath.html</link>
      <pubDate>Thu, 16 Jun 2005 09:56:45 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/06/catching-my-breath.html</guid>
      <description>I&amp;rsquo;ve had a busy few weeks. I&amp;rsquo;m waiting for a client to come back to me about a quote for some work and whilst I&amp;rsquo;m waiting I&amp;rsquo;m putting together a prototype for a product that I&amp;rsquo;m interested in producing. The prototype has been going well but since I know I have a limited amount of time to work on the system I&amp;rsquo;ve been working to a very tight deadline. Still, at least it&amp;rsquo;s of my own making and at least there&amp;rsquo;s a reason for it.</description>
    </item>
    
    <item>
      <title>Code Generation</title>
      <link>https://lenholgate.com/blog/2005/06/code-generation.html</link>
      <pubDate>Sat, 04 Jun 2005 11:35:46 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/06/code-generation.html</guid>
      <description>I&amp;rsquo;ve spent much of this week moving from a hand crafted prototype to a code generated version of the same code. The code is all repetitive boiler plate, sort of like the stuff that MIDL generates for you. The code generated version is considerably better code and has evolved faster than the hand written code because I was free to adapt and improve the code at the &amp;ldquo;single entity&amp;rdquo; level whereas when I was prototyping the code all improvements needed to be made to all of the entities involved.</description>
    </item>
    
    <item>
      <title>Static linking</title>
      <link>https://lenholgate.com/blog/2005/05/static-linking.html</link>
      <pubDate>Tue, 31 May 2005 10:22:59 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/05/static-linking.html</guid>
      <description>Christopher Baus bemoans the problem of getting all the libs that he wants to use linked in statically on Linux. Chris wants an executable that will run on lots of different systems with the least amount of pain for all concerned and to do this he&amp;rsquo;s linking as much as he can statically so that he has a known set of functionality available.
I know this will sound like heresy, but that&amp;rsquo;s pretty much my approach on Windows and it has been for a long time.</description>
    </item>
    
    <item>
      <title>Winsock, ConnectEx, shutdown, SO_UPDATE_CONNECT_CONTEXT and WSANOTCONN</title>
      <link>https://lenholgate.com/blog/2005/05/winsock-connectex-shutdown-so-update-connect-context-and-wsanotconn.html</link>
      <pubDate>Mon, 16 May 2005 23:18:22 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/05/winsock-connectex-shutdown-so-update-connect-context-and-wsanotconn.html</guid>
      <description>I&amp;rsquo;m updating one of the pieces of sample code that we put on CodeProject a couple of years ago. A client wants a version of the COM object socket server that has been built with the latest version of our server framework and which supports outbound connections as well as inbound. The work has been going reasonably well until this afternoon when I found I had a problem shutting down the socket connections that I&amp;rsquo;d opened.</description>
    </item>
    
    <item>
      <title>Normal service is about to resume...</title>
      <link>https://lenholgate.com/blog/2005/05/normal-service-is-about-to-resume.html</link>
      <pubDate>Wed, 04 May 2005 04:04:23 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/05/normal-service-is-about-to-resume.html</guid>
      <description>My ski trip is over and I&amp;rsquo;m back in the UK for a while so I expect my technical writing will resume real soon now.</description>
    </item>
    
    <item>
      <title>JetByte News: Fixed-price ISO8583 server development</title>
      <link>https://lenholgate.com/news/2005/05/fixed-price-iso8583-server-development.html</link>
      <pubDate>Sun, 01 May 2005 12:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/news/2005/05/fixed-price-iso8583-server-development.html</guid>
      <description>We&amp;rsquo;re working with PayPoint again to build them another ISO8583 transaction processing server using The Server Framework.</description>
    </item>
    
    <item>
      <title>Practical Testing: 14 - Bitten by the handle reuse problem</title>
      <link>https://lenholgate.com/blog/2005/03/practical-testing-14---bitten-by-the-handle-reuse-problem.html</link>
      <pubDate>Mon, 07 Mar 2005 13:53:04 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/03/practical-testing-14---bitten-by-the-handle-reuse-problem.html</guid>
      <description>A long time ago, on Practical Testing: I mentioned that there was a small chance that the way that ResetTimer() operated could mean that you could pass in a handle that you no longer owned and affect someone else&amp;rsquo;s timer by mistake; I said it was unlikely to cause problems&amp;hellip; In this posting we fix this problem and in the process show how TDD builds up a set of tests that can support you during redesign&amp;hellip;</description>
    </item>
    
    <item>
      <title>Happy Birthday to me...</title>
      <link>https://lenholgate.com/blog/2005/02/happy-birthday-to-me-1.html</link>
      <pubDate>Fri, 25 Feb 2005 09:43:31 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/02/happy-birthday-to-me-1.html</guid>
      <description>Skill skiing, well, not right at this moment, we&amp;rsquo;re currently on a &amp;lsquo;ski holiday&amp;rsquo; in Ireland&amp;hellip; Back to Megève on the 27th.</description>
    </item>
    
    <item>
      <title>Normal service will resume, sometime</title>
      <link>https://lenholgate.com/blog/2005/01/normal-service-will-resume-sometime.html</link>
      <pubDate>Mon, 31 Jan 2005 13:55:22 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2005/01/normal-service-will-resume-sometime.html</guid>
      <description>I&amp;rsquo;m currently based in Megève and my blogging (over here) has tended to be more about the skiing that I&amp;rsquo;ve been doing than the technical stuff. I expect I&amp;rsquo;ll write a technical post or two later in the week&amp;hellip; Perhaps&amp;hellip; Unless it snows again ;)</description>
    </item>
    
    <item>
      <title>My Sister is home</title>
      <link>https://lenholgate.com/blog/2004/12/my-sister-is-home.html</link>
      <pubDate>Thu, 30 Dec 2004 23:36:37 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/12/my-sister-is-home.html</guid>
      <description>Today we had a second Christmas celebration. Michelle and I and my sister and her boyfriend went to my parent&amp;rsquo;s house for a meal. Michelle and I had spent Christmas with Michelle&amp;rsquo;s family and my sister was away over Christmas so we&amp;rsquo;d planned to have our family Christmas today. This was all fine until Boxing Day when we saw the news about Asia. My sister and her boyfriend were spending Christmas in Sri Lanka&amp;hellip;</description>
    </item>
    
    <item>
      <title>Why you&#39;re missing the point if you use a framework to generate mock objects for you...</title>
      <link>https://lenholgate.com/blog/2004/12/why-youre-missing-the-point-if-you-use-a-framework-to-generate-mock-objects-for-you.html</link>
      <pubDate>Fri, 17 Dec 2004 22:38:41 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/12/why-youre-missing-the-point-if-you-use-a-framework-to-generate-mock-objects-for-you.html</guid>
      <description>Roy Osherove links to Mockpp a mock object framework for C++ and comments on how the framework is painful to use (and it looks like it was painful to write&amp;hellip;) He concludes that he&amp;rsquo;s getting on just fine writing his mocks manually&amp;hellip; In my experience you&amp;rsquo;d miss a lot of very useful learning and design work if you didn&amp;rsquo;t write the mocks manually&amp;hellip;
If you&amp;rsquo;re using a mock object to help you test a piece of code that&amp;rsquo;s under development, that is, you&amp;rsquo;re doing TDD or something close, then the act of creating the mock is useful for the design work that you&amp;rsquo;re doing by doing TDD&amp;hellip; Using a framework to create your mocks for you means that you don&amp;rsquo;t get to experience as much of the &amp;ldquo;being a client of your own code&amp;rdquo; experience as you might otherwise, therefore it&amp;rsquo;s something to avoid; IMHO&amp;hellip;</description>
    </item>
    
    <item>
      <title>Stan Lippman&#39;s VC6 rant</title>
      <link>https://lenholgate.com/blog/2004/12/stan-lippmans-vc6-rant.html</link>
      <pubDate>Fri, 17 Dec 2004 22:12:50 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/12/stan-lippmans-vc6-rant.html</guid>
      <description>It&amp;rsquo;s been a busy week. We got back from Verbier on Saturday and I&amp;rsquo;d hurt my knee, so I was sad, and limping and slow. I then had a mass of things to do to finish all of my client obligations by today. I collected up some blog postings that I was going to reply to, when I got a moment, and now I have a moment I find that one of them has vanished&amp;hellip;</description>
    </item>
    
    <item>
      <title>Stage complete - time bonus</title>
      <link>https://lenholgate.com/blog/2004/12/stage-complete---time-bonus.html</link>
      <pubDate>Fri, 17 Dec 2004 21:54:02 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/12/stage-complete---time-bonus.html</guid>
      <description>Today was my last day with one of my current clients. In the end the hand over went well, but then I did start the process off a long time ago&amp;hellip;.
Back in September I lamented how hand overs can sometimes become hand offs when the people that you&amp;rsquo;re trying to hand over to don&amp;rsquo;t put in the work required to take on the work you&amp;rsquo;re giving them. The blog posting worked ;) and the managers at the client site (who read my blog) set about dealing with the issue.</description>
    </item>
    
    <item>
      <title>C&#43;&#43; Meta programming madness?</title>
      <link>https://lenholgate.com/blog/2004/12/c-meta-programming-madness.html</link>
      <pubDate>Fri, 17 Dec 2004 07:50:26 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/12/c-meta-programming-madness.html</guid>
      <description>Updated 26th Feb 2024 to fix broken links
I find myself agreeing with Chris on this one. I just dont think I&amp;rsquo;m clever enough to use these &amp;lsquo;modern&amp;rsquo; C++ template programming styles reliably in a way that makes the resulting code better and easier to maintain by others. I&amp;rsquo;ve tried, but I tend to end up with a confusing mess that I can&amp;rsquo;t understand when I come back to it. What&amp;rsquo;s more I often find that I can&amp;rsquo;t justify the additional complexity of the result compared to doing the work in the &amp;lsquo;old-school&amp;rsquo; non template way.</description>
    </item>
    
    <item>
      <title>Busy</title>
      <link>https://lenholgate.com/blog/2004/12/busy-1.html</link>
      <pubDate>Wed, 01 Dec 2004 22:44:04 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/12/busy-1.html</guid>
      <description>I&amp;rsquo;ve been busy recently; what with getting our trip sorted, finishing the hand over, completing the auction server and doing some consultancy for an internet market data providing company. The good news is that most things are now done and soon I&amp;rsquo;ll have time to knock a few of the interesting looking items off of my &amp;ldquo;code this&amp;rdquo; list&amp;hellip;
The auction server exceeded our client&amp;rsquo;s expectations; which was nice. The hand over has reached a point where I no longer feel like I&amp;rsquo;m pushing water up hill and the market data consulting is interesting and of finite scope&amp;hellip;</description>
    </item>
    
    <item>
      <title>Hoisting test code into production</title>
      <link>https://lenholgate.com/blog/2004/12/hoisting-test-code-into-production.html</link>
      <pubDate>Wed, 01 Dec 2004 22:37:11 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/12/hoisting-test-code-into-production.html</guid>
      <description>A while ago I mentioned how I had hoisted a mock object up into production code because it only needed a few changes to make it usable as real code rather than just test code. This last week we&amp;rsquo;ve done this again&amp;hellip;
Our system was designed with testing in mind; we&amp;rsquo;re loosely coupled and, consequently, have lots of interfaces that we can implement any way we want. To allow us to test large chunks of the system together we deliberately plugged the external data sources in right at the top.</description>
    </item>
    
    <item>
      <title>The value of malleable systems</title>
      <link>https://lenholgate.com/blog/2004/12/the-value-of-malleable-systems.html</link>
      <pubDate>Wed, 01 Dec 2004 21:16:05 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/12/the-value-of-malleable-systems.html</guid>
      <description>We&amp;rsquo;re almost at the end of our hand over phase now; my time on the project is almost over. The last couple of weeks have been interesting. We&amp;rsquo;ve been working towards a demo of the system and this seems to have helped to get everyone moving in the same direction; suddenly the hand over seems to be happening&amp;hellip; I don&amp;rsquo;t think I&amp;rsquo;ll need to be that involved in the demo as everyone else knows what&amp;rsquo;s going on and can explain how the system works&amp;hellip; This is a Good Thing.</description>
    </item>
    
    <item>
      <title>Spammer&#39;s choice</title>
      <link>https://lenholgate.com/blog/2004/11/spammers-choice.html</link>
      <pubDate>Wed, 24 Nov 2004 09:49:19 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/11/spammers-choice.html</guid>
      <description>I&amp;rsquo;d quite like to be able to harness the efforts of the comment spammers and MT-Blacklist so that when a spammer fails to comment on a posting this fact is noted and posting can get mentioned on the front page as the current &amp;ldquo;spammer&amp;rsquo;s choice&amp;rdquo;&amp;hellip; Sounds mad, but since I have a lot of content now, it would be a way of bringing some old stuff back to the front page - in the same way that the comment section does&amp;hellip;</description>
    </item>
    
    <item>
      <title>So much for testing</title>
      <link>https://lenholgate.com/blog/2004/11/so-much-for-testing.html</link>
      <pubDate>Sat, 20 Nov 2004 09:54:55 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/11/so-much-for-testing.html</guid>
      <description>My category-based RSS feeds stopped feeding through to Testing Reflections and Test Driven a couple of weeks ago. They had worked fine, and then they just stopped. I assumed that the problem was at their end; either they didn&amp;rsquo;t think much of my testing posts or their feed polling software had some weirdness in it&amp;hellip; But you know what assume does&amp;hellip;
I&amp;rsquo;d got it into my head that because the feeds used to work and now they didn&amp;rsquo;t, and that I hadn&amp;rsquo;t changed anything at my end, the problem must be the consumers&amp;hellip; Wrong&amp;hellip; My feed had crap in it because I don&amp;rsquo;t really understand how the MT templates work, I&amp;rsquo;d been sloppy and I hadn&amp;rsquo;t bothered to test the feed apart from running it through my aggregator and eyeballing it in IE.</description>
    </item>
    
    <item>
      <title>VS.Net #Region</title>
      <link>https://lenholgate.com/blog/2004/11/vsnet-region.html</link>
      <pubDate>Fri, 19 Nov 2004 07:37:31 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/11/vsnet-region.html</guid>
      <description>I&amp;rsquo;m reviewing some code for a client. I&amp;rsquo;ve decided that I don&amp;rsquo;t like the #Region functionality from the VS.Net IDE&amp;hellip; It seems to be another &amp;lsquo;sticking plaster&amp;rsquo; to help make things &amp;rsquo;easier&amp;rsquo; for people to structure code in inappropriate ways&amp;hellip;
I guess I&amp;rsquo;m not a fan of &amp;lsquo;outlining editors&amp;rsquo;; perhaps I&amp;rsquo;m just not used to them. Anyway, I can see why #Region might have been considered a good thing to design into the IDE given the way Microsoft love to push wizard generated code into places that you&amp;rsquo;re forced to also put user generated code (I know, it&amp;rsquo;ll be fixed in Whidby, ZZZzzz&amp;hellip;).</description>
    </item>
    
    <item>
      <title>Looking back from near the end</title>
      <link>https://lenholgate.com/blog/2004/11/looking-back-from-near-the-end.html</link>
      <pubDate>Tue, 16 Nov 2004 23:06:39 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/11/looking-back-from-near-the-end.html</guid>
      <description>My current consulting gig is coming to an end. We&amp;rsquo;ve been in the hand over phase for a while now and I think it&amp;rsquo;s slowly starting to work. Now seems like a good time to look back at what worked and what didn&amp;rsquo;t&amp;hellip;
This project was heavily focused on testability, from the outset and that&amp;rsquo;s paid off in the later stages of the project. As we near final integration testing lots of last minute requirements keep popping up; some were mentioned earlier in the project and just got missed out and some are completely new.</description>
    </item>
    
    <item>
      <title>Smash it up</title>
      <link>https://lenholgate.com/blog/2004/11/smash-it-up.html</link>
      <pubDate>Fri, 05 Nov 2004 07:14:58 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/11/smash-it-up.html</guid>
      <description>I completely agree with Jeff on this one. Fear of breaking code can hold you back from making the kind of changes that are required to keep the code alive.
As a consultant I see this kind of fear a lot. Quite often I arrive at a client site and start to speak to the natives about the lay of the land and one of the first things they do is point out that their system is very very complicated and that you have to be very careful not to break things; right, I think, they have no tests then&amp;hellip; Next I&amp;rsquo;ll be told that new features should be added without &amp;ldquo;disturbing&amp;rdquo; much of the existing code; which translates to, expect to see a patchwork of code that has been hacked in all sorts of wierd and wonderful directions&amp;hellip;</description>
    </item>
    
    <item>
      <title>NetMeeting Data Channel sample code</title>
      <link>https://lenholgate.com/blog/2004/11/netmeeting-data-channel-sample-code.html</link>
      <pubDate>Thu, 04 Nov 2004 19:59:56 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/11/netmeeting-data-channel-sample-code.html</guid>
      <description>I&amp;rsquo;ve uploaded a new copy of the NMPing.zip file that is mentioned in this article. It seems that it was corrupted. Sorry about the delay in doing this, I&amp;rsquo;d forgotten about it.
The code&amp;rsquo;s very old, so be gentle with it.</description>
    </item>
    
    <item>
      <title>Bug in CThreadPool</title>
      <link>https://lenholgate.com/blog/2004/11/bug-in-cthreadpool.html</link>
      <pubDate>Tue, 02 Nov 2004 22:51:15 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/11/bug-in-cthreadpool.html</guid>
      <description>Bob Etheridge reported a bug in the socket server code from codeproject, this is probably the oldest version of The Server Framework&amp;rsquo;s Free Framework code. He was noticing a small amount of memory corruption on server shutdown. I&amp;rsquo;ve narrowed it down to a bug in the CThreadPool class in the Win32 tools library. The bug is present in all versions of the class.
void CThreadPool::ThreadStopped(WorkerThread *pThread) { ::InterlockedDecrement(&amp;amp;m_activeThreads); ::InterlockedDecrement(&amp;amp;m_initialisedThreads); RemoveThreadFromList(pThread); OnThreadStopped(); } Should actually be</description>
    </item>
    
    <item>
      <title>Because we can</title>
      <link>https://lenholgate.com/blog/2004/11/because-we-can.html</link>
      <pubDate>Mon, 01 Nov 2004 23:06:20 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/11/because-we-can.html</guid>
      <description>Our trip is now only 2 months away so I thought it was about time that the trip&amp;rsquo;s blog went live&amp;hellip;
MegèveSki MegèveSki, because we can&amp;hellip;</description>
    </item>
    
    <item>
      <title>I don&#39;t usually do the meta-blog thing but...</title>
      <link>https://lenholgate.com/blog/2004/10/i-dont-usually-do-the-meta-blog-thing-but.html</link>
      <pubDate>Thu, 28 Oct 2004 23:36:42 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/10/i-dont-usually-do-the-meta-blog-thing-but.html</guid>
      <description>I sympathise with Christopher Baus&amp;rsquo; frustrations&amp;hellip;
I think that&amp;rsquo;s probably just par for the course; I like to tell myself that I gave up blogging for anyone else but me ages ago, I&amp;rsquo;m probably fibbing.
Arguably my most successful blog posting was this one about accessing bluetooth on XP via Winsock&amp;hellip; Or perhaps it was this one, also about bluetooth on XP. Or, maybe, this one, about, well, you guessed it.</description>
    </item>
    
    <item>
      <title>Baus waves at Scoble</title>
      <link>https://lenholgate.com/blog/2004/10/baus-waves-at-scoble.html</link>
      <pubDate>Thu, 28 Oct 2004 23:15:20 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/10/baus-waves-at-scoble.html</guid>
      <description>Christopher Baus suggests that Robert Scoble&amp;rsquo;s blog lacks focus and that his blog is mostly noise, &amp;ldquo;He&amp;rsquo;s always blogging about something, but really nothing at all &amp;ldquo;.
But Chris, surely that&amp;rsquo;s the point of Scoble&amp;rsquo;s blog? As Robert himself says &amp;ldquo;if you don&amp;rsquo;t think I&amp;rsquo;m taking you to enough cool blogs, or writing enough cool stuff, there&amp;rsquo;s a very easy solution. Unsubscribe.&amp;rdquo;.
I did that quite a while ago, but I&amp;rsquo;m glad he&amp;rsquo;s still out there and that other people subscribe to him on my behalf&amp;hellip;</description>
    </item>
    
    <item>
      <title>JetByte News: We&#39;re working with Car-Tech Auction Inc.  </title>
      <link>https://lenholgate.com/news/2004/10/were-working-with-car-tech-auction-inc.html</link>
      <pubDate>Sat, 23 Oct 2004 02:35:13 +0000</pubDate>
      
      <guid>https://lenholgate.com/news/2004/10/were-working-with-car-tech-auction-inc.html</guid>
      <description>We&amp;rsquo;re building a high performance TCP/IP auction server system for their web based car auctions using The Server Framework.</description>
    </item>
    
    <item>
      <title>Auction Server Performance</title>
      <link>https://lenholgate.com/blog/2004/10/auction-server-performance.html</link>
      <pubDate>Fri, 22 Oct 2004 18:48:24 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/10/auction-server-performance.html</guid>
      <description>I&amp;rsquo;ve just about finished the auction server performance tuning. Our thrash test that uses 200 concurrent clients all responding to every bid with a counter bid has gone from averaging 40 incoming bids per second and 3700 outgoing bids per second to 180 incoming and 18000 outgoing. The peak incoming and outgoing were nearer to 1600 and 52000&amp;hellip; I&amp;rsquo;m pretty pleased with the improvements and eventually decided to put the thoughts of lock free list traversal on hold, we don&amp;rsquo;t need it.</description>
    </item>
    
    <item>
      <title>Practical Testing: 13 - Missing functionality</title>
      <link>https://lenholgate.com/blog/2004/10/practical-testing-13---missing-functionality.html</link>
      <pubDate>Fri, 22 Oct 2004 08:54:54 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/10/practical-testing-13---missing-functionality.html</guid>
      <description>Previously, on Practical Testing: we added a multi-threaded version of our timer queue that manages timeouts automatically. This time we&amp;rsquo;ll integrate our new timer queue into an application that uses the old version of the code and, along the way, discover some functionality that the original version supports but that the new version currently doesn&amp;rsquo;t.
One of the original reasons that we designed this timer queue was to handle per socket, read timeouts in our IO Completion Port based server framework.</description>
    </item>
    
    <item>
      <title>An excuse to buy new tools</title>
      <link>https://lenholgate.com/blog/2004/10/an-excuse-to-buy-new-tools.html</link>
      <pubDate>Fri, 15 Oct 2004 08:54:36 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/10/an-excuse-to-buy-new-tools.html</guid>
      <description>Preparation for the ski season continues. Yesterday my latest purchase from amazon arrived; Waxing and Care for Ski and Snowboards. As we&amp;rsquo;ll be putting down a few more tracks than normal this season I thought it wise to try and avoid having to pay for servicing the skis too often and finally learn how to do it myself. Luckily I have plenty of old skis laying around to practice on&amp;hellip; Looks like I need to buy lots of new tools; cool!</description>
    </item>
    
    <item>
      <title>Lock Free</title>
      <link>https://lenholgate.com/blog/2004/10/lock-free.html</link>
      <pubDate>Fri, 15 Oct 2004 08:09:39 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/10/lock-free.html</guid>
      <description>I&amp;rsquo;m currently looking at &amp;ldquo;lock free&amp;rdquo; access to the linked list that stores the set of clients to communicate with. Ideally we&amp;rsquo;ll be able to add to, delete from and traverse the list from multiple threads without needing to lock and synchronise. There are lots of references available, so far these two (1 and 2) look good from a quick scan of them whilst they were printing&amp;hellip; Wish I&amp;rsquo;d kept up my ACM membership as it looks like the definitive works are available as conference proceedings on their site (then again, I often find that the definitive work isn&amp;rsquo;t necessarily the best starting point).</description>
    </item>
    
    <item>
      <title>More Socket Server Refactoring</title>
      <link>https://lenholgate.com/blog/2004/10/more-socket-server-refactoring.html</link>
      <pubDate>Thu, 14 Oct 2004 23:10:05 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/10/more-socket-server-refactoring.html</guid>
      <description>I&amp;rsquo;m currently working on a simple auction server for a client using The Server Framework. You can think of it as a specialised chat server, of sorts. One of the things it must do is broadcast messages from one user to a set of users. This is relatively easy to implement in a crude way in The Server Framework but it&amp;rsquo;s not nice. Time to refactor towards niceness&amp;hellip;
The lack of niceness in the quick and dirty implementation of broadcast messages is the fact that the message must be duplicated for each client that will receive the broadcast.</description>
    </item>
    
    <item>
      <title>Measure twice, cut once</title>
      <link>https://lenholgate.com/blog/2004/10/measure-twice-cut-once.html</link>
      <pubDate>Tue, 12 Oct 2004 08:45:37 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/10/measure-twice-cut-once.html</guid>
      <description>I&amp;rsquo;m currently working on a small auction server for a client using The Server Framework. It&amp;rsquo;s a relatively simple server, messages come in, are validated and are then broadcast to interested parties and logged. Yesterday we shipped the first cut of the source to them and I was a bit concerned that our simple test app could thrash the server so easily. Admittedly the first cut of the code hadn&amp;rsquo;t been tuned at all and the logging implementation was fairly Mickey Mouse but I was a little concerned.</description>
    </item>
    
    <item>
      <title>Currently Reading</title>
      <link>https://lenholgate.com/blog/2004/10/currently-reading-3.html</link>
      <pubDate>Sun, 10 Oct 2004 21:28:32 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/10/currently-reading-3.html</guid>
      <description>I&amp;rsquo;ve been reading mostly fiction recently. I&amp;rsquo;d kinda stopped reading anything non-technical for far too long; there was always some new techie book to read, but there always will be&amp;hellip; I used to read masses of fiction, mostly SF and fantasy stuff; but recently I&amp;rsquo;d only read fiction when on holiday, and then only as a backup to the techie stuff I had with me&amp;hellip; That changed, on holiday, when I read Dan Brown&amp;rsquo;s The Da Vinci Code.</description>
    </item>
    
    <item>
      <title>Practical Testing: 12 - Threading is orthogonal</title>
      <link>https://lenholgate.com/blog/2004/10/practical-testing-12---threading-is-orthogonal.html</link>
      <pubDate>Sat, 09 Oct 2004 22:51:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/10/practical-testing-12---threading-is-orthogonal.html</guid>
      <description>Previously, on Practical Testing: we finished our reworking on the code we were left with a simpler timer queue that passed all of our tests, but was single threaded and needed manual intervention from client code to manage timeouts. Today we&amp;rsquo;ll add back the multi-threaded functionality so that the queue manages timeouts automatically.
Our original implementation of the callback timer queue used a thread to manage the timeouts. The threading was integral to the timer queue code and this made testing the queue logic difficult because, to test the queue, we had to control the thread.</description>
    </item>
    
    <item>
      <title>11th October is Thanksgiving Day in Canada</title>
      <link>https://lenholgate.com/blog/2004/10/11th-october-is-thanksgiving-day-in-canada.html</link>
      <pubDate>Fri, 08 Oct 2004 17:08:34 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/10/11th-october-is-thanksgiving-day-in-canada.html</guid>
      <description>I&amp;rsquo;ve had an interesting week. I&amp;rsquo;m back with the Refactoring Project and, although things were looking up last time I was here, they&amp;rsquo;ve managed to adopt some bad habits in my absence. The latest build that&amp;rsquo;s live with users isn&amp;rsquo;t tagged in CVS; we have 66 other builds that are tagged and the ability to rebuild an arbitrary release has helped on numerous occasions, but this time they decided not to bother.</description>
    </item>
    
    <item>
      <title>This is the book I&#39;ve been waiting for</title>
      <link>https://lenholgate.com/blog/2004/10/this-is-the-book-ive-been-waiting-for.html</link>
      <pubDate>Fri, 08 Oct 2004 08:20:56 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/10/this-is-the-book-ive-been-waiting-for.html</guid>
      <description>Excellent news; Herb Sutter and Andrei Alexandrescu&amp;rsquo;s C++ Coding Standards book is done!
This is the book I&amp;rsquo;ve been wanting for ages. Whilst there are other C++ coding standard books out there but, well, they just don&amp;rsquo;t have the gravitas of a book written by these two and included in Bjarne Stroustrup&amp;rsquo;s C++ In Depth Series.
The table of contents is here. I hope the book&amp;rsquo;s heavy enough to hit people with ;)</description>
    </item>
    
    <item>
      <title>Warren Smith Ski Academy - Sep 2004</title>
      <link>https://lenholgate.com/blog/2004/10/warren-smith-ski-academy---sep-2004.html</link>
      <pubDate>Tue, 05 Oct 2004 19:44:23 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/10/warren-smith-ski-academy---sep-2004.html</guid>
      <description>As I mentioned last week, we&amp;rsquo;ve just got back from a week in Saas-Fee with Warren Smith. We&amp;rsquo;ve did this course last year as well, but due to the way the course is structured this didn&amp;rsquo;t really matter much; for us this year&amp;rsquo;s course built on last year&amp;rsquo;s. The aim of the course is to develop the skills required to ski the whole mountain, regardless of conditions and terrain&amp;hellip;
There were around 20 of us on the course and instruction was done in one large group.</description>
    </item>
    
    <item>
      <title>Back from Saas-Fee - 2004</title>
      <link>https://lenholgate.com/blog/2004/09/back-from-saas-fee---2004.html</link>
      <pubDate>Sun, 26 Sep 2004 13:49:41 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/09/back-from-saas-fee---2004.html</guid>
      <description>We&amp;rsquo;ve just got back from a week of early season ski training in Saas-Fee. We went with the Warren Smith Ski Academy, again, and had a great time. The weather (wind mainly) meant that we didn&amp;rsquo;t ski as much as we&amp;rsquo;d hoped, but it was still a very good trip. I&amp;rsquo;ll write a report later, for now, just holiday snaps&amp;hellip;
Allalinhorn Walking Walking2 Still Windy </description>
    </item>
    
    <item>
      <title>Tests as tours</title>
      <link>https://lenholgate.com/blog/2004/09/tests-as-tours.html</link>
      <pubDate>Fri, 17 Sep 2004 18:33:56 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/09/tests-as-tours.html</guid>
      <description>I&amp;rsquo;ve discovered something quite amazing this week; something quite simple that shouldn&amp;rsquo;t really have been much of a surprise, but it was.
If you have a substantial set of unit tests then you can use them as the backdrop for documentation that tours the code base in a controlled and manageable way. Kinda like a sing-along, the reader can be directed through several key tests in a debugger whilst the document describes what&amp;rsquo;s going on and reasoning behind some of design decisions.</description>
    </item>
    
    <item>
      <title>Harvest for reuse</title>
      <link>https://lenholgate.com/blog/2004/09/harvest-for-reuse.html</link>
      <pubDate>Fri, 17 Sep 2004 08:00:19 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/09/harvest-for-reuse.html</guid>
      <description>Jeff Atwood writes about the the delusion of reuse where he warns of the extra effort that&amp;rsquo;s really required when writing for reuse:
&amp;ldquo;I believe writing a truly reusable class is an order of magnitude harder than writing a single use class.&amp;rdquo;
He also warns of putting in extra effort up front with the intent of creating reusable code from scratch and suggests that you can&amp;rsquo;t know if you have a strong case for making some code reusable until you&amp;rsquo;ve written or used the same piece of code three times in different projects.</description>
    </item>
    
    <item>
      <title>Could someone please</title>
      <link>https://lenholgate.com/blog/2004/09/could-someone-please.html</link>
      <pubDate>Thu, 16 Sep 2004 19:50:51 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/09/could-someone-please.html</guid>
      <description>Could someone please write a Java based estimating package?
I really want to be able to able to turn to a manager and say, with a straight face, that all of my estimates were done in JEst&amp;hellip;
Sorry, it&amp;rsquo;s been a long day.</description>
    </item>
    
    <item>
      <title>Yup, that&#39;s where the value is</title>
      <link>https://lenholgate.com/blog/2004/09/yup-thats-where-the-value-is.html</link>
      <pubDate>Tue, 14 Sep 2004 20:47:40 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/09/yup-thats-where-the-value-is.html</guid>
      <description>Mats writes about how he finally got unit testing by realising that the value comes not when all your tests pass and you feel happy but when one of your tests fails and you feel sad&amp;hellip;
This is actually something I&amp;rsquo;m not sure I&amp;rsquo;d quite realised for myself. I&amp;rsquo;m pretty good now; I know why I should write tests, I know that I feel more comfortable making changes when I have tests to support me, but I never really accepted that having all the tests passing doesn&amp;rsquo;t really buy you much.</description>
    </item>
    
    <item>
      <title>Red sky in the morning</title>
      <link>https://lenholgate.com/blog/2004/09/red-sky-in-the-morning.html</link>
      <pubDate>Fri, 10 Sep 2004 08:34:17 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/09/red-sky-in-the-morning.html</guid>
      <description>Looks like it&amp;rsquo;s going to rain today&amp;hellip;
ItsGoingToRain1 ItsGoingToRain2 ItsGoingToRain3 ItsGoingToRain4 </description>
    </item>
    
    <item>
      <title>How hand overs become hand offs</title>
      <link>https://lenholgate.com/blog/2004/09/how-hand-overs-become-hand-offs.html</link>
      <pubDate>Fri, 10 Sep 2004 07:27:39 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/09/how-hand-overs-become-hand-offs.html</guid>
      <description>Being a consultant, I find that the start up and shut down of projects are usually the most stressful times. Start up is all about &amp;ldquo;hitting the ground running&amp;rdquo;, learning lots of stuff really fast and making a good impression. Shut down is all about hand over. Shut down is the hardest because you need the cooperation of the people you&amp;rsquo;re handing over to. Whilst you can pretty much deal with any issues during the start up phase just by digging deeper or working harder a hand over with no cooperation just becomes a hand off.</description>
    </item>
    
    <item>
      <title>The good thing about blogging is</title>
      <link>https://lenholgate.com/blog/2004/09/the-good-thing-about-blogging-is.html</link>
      <pubDate>Fri, 10 Sep 2004 06:32:10 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/09/the-good-thing-about-blogging-is.html</guid>
      <description>It makes you think. I find that when I&amp;rsquo;ve done a brain dump post like last night&amp;rsquo;s &amp;ldquo;loader lock&amp;rdquo; posting, all of the issues are fresh in my mind. Posting just before bed means that by the time I wake up I&amp;rsquo;ve usually come up with lots of new ideas about the thing I just posted about&amp;hellip;
So this morning I find myself adjusting my Dll hooking code so that I call back into DllMain() just before unloading the Dll and realising that since I&amp;rsquo;ve told the loader that this Dll doesn&amp;rsquo;t have an entry point it&amp;rsquo;s not going to bother making any calls into the Dll when I create new threads&amp;hellip;</description>
    </item>
    
    <item>
      <title>They&#39;re learning</title>
      <link>https://lenholgate.com/blog/2004/09/theyre-learning.html</link>
      <pubDate>Thu, 09 Sep 2004 23:02:16 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/09/theyre-learning.html</guid>
      <description>I&amp;rsquo;m back with the guys on the refactoring project for a couple of days. I got to my desk, updated my CVS tree and started to check my email. The first mail was from the boss man of the team; &amp;ldquo;I fixed a bug in the FX code earlier in the week, we need to write a test for it so it doesn&amp;rsquo;t happen again&amp;rdquo;, followed by &amp;ldquo;by the way, this time all the tests still run, I checked them all myself on Monday&amp;rdquo;.</description>
    </item>
    
    <item>
      <title>Why does windows hold the loader lock whilst calling DllMain?</title>
      <link>https://lenholgate.com/blog/2004/09/why-does-windows-hold-the-loader-lock-whilst-calling-dllmain.html</link>
      <pubDate>Thu, 09 Sep 2004 22:10:08 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/09/why-does-windows-hold-the-loader-lock-whilst-calling-dllmain.html</guid>
      <description>I&amp;rsquo;ve been splunking around Dll loading recently for a pet project. It&amp;rsquo;s been an interesting journey and this evening I solved the final piece of the puzzle and, when I did, I suddenly wondered, not for the first time, why Windows holds the loader lock when calling DllMain()&amp;hellip;
Chris Brumme explains this much better than me, but; the loader lock is a system wide lock that&amp;rsquo;s held by the OS when it does stuff to its internal process tables; things like loading and unloading Dlls.</description>
    </item>
    
    <item>
      <title>WTF?</title>
      <link>https://lenholgate.com/blog/2004/09/wtf.html</link>
      <pubDate>Wed, 08 Sep 2004 07:50:32 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/09/wtf.html</guid>
      <description>Ah, a place to keep all that bad code&amp;hellip; The Daily WTF From Barry</description>
    </item>
    
    <item>
      <title>LoadLibrary error</title>
      <link>https://lenholgate.com/blog/2004/09/loadlibrary-error.html</link>
      <pubDate>Sun, 05 Sep 2004 10:15:49 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/09/loadlibrary-error.html</guid>
      <description>I need to dynamically load a dll, grab some function pointers and do stuff; simple stuff, done it 100s of times before. I decide that this time I&amp;rsquo;ll wrap the HMODULE that I&amp;rsquo;ll need in a class to make sure I can never forget to call FreeLibrary() on it - RAII is your friend. It&amp;rsquo;s Sunday, I&amp;rsquo;m feeling righteous so I&amp;rsquo;m doing it in a TDD style. I write some tests, load a dll, load a bad dll to check error handling, load a dll that doesn&amp;rsquo;t exist&amp;hellip;</description>
    </item>
    
    <item>
      <title>NFOFY JTDPN are the victim of spamy morons</title>
      <link>https://lenholgate.com/blog/2004/09/nfofy-jtdpn-are-the-victim-of-spamy-morons.html</link>
      <pubDate>Sat, 04 Sep 2004 23:59:51 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/09/nfofy-jtdpn-are-the-victim-of-spamy-morons.html</guid>
      <description>[Updated:15th October - Original domain name hidden with a simple caesar cipher to stop them getting bad press via search engines&amp;hellip;]
[Updated: 6th September - It seems &amp;ldquo;NFOFY JT&amp;rdquo; were possibly the victim of a vindictive ex employee and that they didn&amp;rsquo;t originate or approve of any of the recent comment spam in their name.] See comment on this entry from Jacob Jones.
NFOFY JTDPN is a professional web design and consulting company for businesses, schools, churches, non-profits, and individuals.</description>
    </item>
    
    <item>
      <title>Code coverage and testing</title>
      <link>https://lenholgate.com/blog/2004/09/code-coverage-and-testing.html</link>
      <pubDate>Sat, 04 Sep 2004 10:49:59 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/09/code-coverage-and-testing.html</guid>
      <description>Recently I mentioned that we were in the process of adding additional tests to our code base. We&amp;rsquo;d been using JITT to reduce the number of tests that we wrote and now it was time to fill in some of the gaps. This week I started to use some code coverage tools to see how well we were doing with our tests&amp;hellip;
My client has both Compuware DevPartner Studio, which includes a coverage tool called True Coverage, and Rational Pure Coverage.</description>
    </item>
    
    <item>
      <title>Doxygen niggles</title>
      <link>https://lenholgate.com/blog/2004/08/doxygen-niggles.html</link>
      <pubDate>Sat, 28 Aug 2004 14:16:35 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/08/doxygen-niggles.html</guid>
      <description>I&amp;rsquo;ve been using Doxygen recently. It can scan a body of code and produce reams of linked documentation and diagrams. I, personally, don&amp;rsquo;t really use it for its documentation, just for its diagramming. I&amp;rsquo;ve always believed that if I can&amp;rsquo;t draw a neat and tidy picture of the relationships between pieces of code then the design needs fixing.
I used to drop in and out of drawing my own cut down version of UML diagrams as I designed code.</description>
    </item>
    
    <item>
      <title>Platform, push off</title>
      <link>https://lenholgate.com/blog/2004/08/platform-push-off.html</link>
      <pubDate>Sat, 28 Aug 2004 10:01:55 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/08/platform-push-off.html</guid>
      <description>However, I still prefer that all these technologies should be introduced and made exclusive into Longhorn, because of the enormous benefits a comprehensive base platform provides. By requiring an upgrade, Longhorn would cause a mass shift to a new platform and offer developers a new minimum level of operating system functionality, a la Windows 95.
From .Net Undocumented
Riiiiight&amp;hellip; I&amp;rsquo;ll remember to tell all of my clients who are only just finishing moving from NT 4 that they&amp;rsquo;ll need to move everyone again real soon now because it&amp;rsquo;ll be more convenient for developers&amp;hellip;</description>
    </item>
    
    <item>
      <title>Repaying the technical debt</title>
      <link>https://lenholgate.com/blog/2004/08/repaying-the-technical-debt.html</link>
      <pubDate>Thu, 26 Aug 2004 23:21:10 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/08/repaying-the-technical-debt.html</guid>
      <description>The boss is away, we&amp;rsquo;ve almost done all the things he asked us to do before he went and, well, there&amp;rsquo;s a bit of spare time so we&amp;rsquo;re looking closely at the code.
The last few weeks have been a bit of a push for the finish and now I&amp;rsquo;m looking at stuff and trying to work out how to repay the technical debt we accrued during the push. Sure, I could be surfing the web and kicking back but, well, it just seems appropriate to work out how much we now owe to the code and how we can pay that back before we&amp;rsquo;re asked to push a little further and incur a little more debt&amp;hellip; It doesn&amp;rsquo;t hurt that I find this kind of work relaxing and not that much like work&amp;hellip;</description>
    </item>
    
    <item>
      <title>Thoughts turn to snow</title>
      <link>https://lenholgate.com/blog/2004/08/thoughts-turn-to-snow.html</link>
      <pubDate>Sun, 22 Aug 2004 22:56:43 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/08/thoughts-turn-to-snow.html</guid>
      <description>The 2004/05 ski season starts for us in mid September when we&amp;rsquo;re off to Saas Fee with Warren Smith again. Today we got our boots out and spent some time stomping around and practicing some of the jumping exercises that Warren had us do last time. We both have different boots to the last time we skied with Warren and they&amp;rsquo;re more flexible and should work better with the kind of stuff he has us do.</description>
    </item>
    
    <item>
      <title>Practical Testing: 11 - Moving away from the simplest thing</title>
      <link>https://lenholgate.com/blog/2004/08/practical-testing-11---moving-away-from-the-simplest-thing.html</link>
      <pubDate>Sat, 21 Aug 2004 13:59:17 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/08/practical-testing-11---moving-away-from-the-simplest-thing.html</guid>
      <description>Previously, on Practical Testing: having decided to rework the code from scratch in TDD style we fixed the tick count bug for the second time - this time the solution was cleaner and simpler. At the end of that episode we were left with a failing test. The test was for multiple timers and it failed because our TDD route was taking a &amp;lsquo;simplest thing that could possibly work&amp;rsquo; approach and that design only supported a single timer.</description>
    </item>
    
    <item>
      <title>Just In Time Testing</title>
      <link>https://lenholgate.com/blog/2004/08/just-in-time-testing.html</link>
      <pubDate>Sat, 21 Aug 2004 13:33:19 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/08/just-in-time-testing.html</guid>
      <description>Once we&amp;rsquo;d integrated the new data provider we were in a position to do some more testing. We configured the code that used the new component to request the same data from the new component and the old code and to save the data to files. Then we wrote some code to compare the files and highlight any changes. Once that was done we located the source of the differences, wrote tests that failed due to the problems and then started to fix the bugs.</description>
    </item>
    
    <item>
      <title>Brute force marshal by value</title>
      <link>https://lenholgate.com/blog/2004/08/brute-force-marshal-by-value.html</link>
      <pubDate>Sat, 21 Aug 2004 12:16:48 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/08/brute-force-marshal-by-value.html</guid>
      <description>This week I integrated the new data provider with the rest of the client&amp;rsquo;s existing code. The integration was pretty easy as the existing code deals with the data provider via a single method on a COM interface. All that was needed was to adjust the calling code to use the COM object rather than the local implementation and everything just worked. The good news was that the call to get the data was now 100 times faster than it was with the old code; the bad news was that processing that data took almost three times as long.</description>
    </item>
    
    <item>
      <title>Singletons and testing</title>
      <link>https://lenholgate.com/blog/2004/08/singletons-and-testing.html</link>
      <pubDate>Fri, 20 Aug 2004 23:50:40 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/08/singletons-and-testing.html</guid>
      <description>When you need to jump through hoops to write tests you&amp;rsquo;ve done it wrong. Jonathan de Halleux writes about testing singletons and how he can subvert the standard C# singleton pattern to create a new singleton for each test he needs to run for the singleton. Omer then subverts the rules another way. Both are wrong.
Firstly Singletons are evil. Really. It&amp;rsquo;s a useful pattern but it&amp;rsquo;s way over used as some covert global variable.</description>
    </item>
    
    <item>
      <title>Excellent piece on exceptions</title>
      <link>https://lenholgate.com/blog/2004/08/excellent-piece-on-exceptions.html</link>
      <pubDate>Tue, 17 Aug 2004 07:45:07 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/08/excellent-piece-on-exceptions.html</guid>
      <description>IanG on Tap: When to Catch Exceptions - the answer is, of course, not as often as you&amp;rsquo;d expect&amp;hellip; Ian&amp;rsquo;s talking about managed code as can be seen from his final comments about expecting to see many more finally blocks than catch blocks, of course, in a proper language ;) like C++ you don&amp;rsquo;t need any try blocks at all as RAII will deal with all your resource management for you&amp;hellip;</description>
    </item>
    
    <item>
      <title>The Exponential Nature of Lines of Code</title>
      <link>https://lenholgate.com/blog/2004/08/the-exponential-nature-of-lines-of-code.html</link>
      <pubDate>Mon, 16 Aug 2004 22:54:44 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/08/the-exponential-nature-of-lines-of-code.html</guid>
      <description>The faster your codebase grows, the less of it people will understand. When people don&amp;rsquo;t understand all of the code, they don&amp;rsquo;t see global patterns, and so they will reinvent little wheels all over the place. In theory, the development leads and the architects are supposed to watch out for these issues, but there are always places where redundant code can hide, and as the code continues to grow, even this watchdog function breaks down.</description>
    </item>
    
    <item>
      <title>Hmm, so I&#39;m wet, huh?</title>
      <link>https://lenholgate.com/blog/2004/08/hmm-so-im-wet-huh.html</link>
      <pubDate>Wed, 11 Aug 2004 22:20:04 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/08/hmm-so-im-wet-huh.html</guid>
      <description>You are water. You&amp;rsquo;re not really organic; you&amp;rsquo;re neither acidic nor basic, yet you&amp;rsquo;re an acid and a base at the same time. You&amp;rsquo;re strong willed and opinionated, but relaxed and ready to flow. So while you often seem worthless, without you, everything would just not work. People should definitely drink more of you every day.
brought to you by Quizilla</description>
    </item>
    
    <item>
      <title>Most Amusing</title>
      <link>https://lenholgate.com/blog/2004/08/most-amusing.html</link>
      <pubDate>Thu, 05 Aug 2004 20:11:09 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/08/most-amusing.html</guid>
      <description>Beatallica via Craig.</description>
    </item>
    
    <item>
      <title>Failed</title>
      <link>https://lenholgate.com/blog/2004/08/failed.html</link>
      <pubDate>Thu, 05 Aug 2004 19:27:03 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/08/failed.html</guid>
      <description>On Tuesday I wrote about the start of this week&amp;rsquo;s gig. Now that the week is over I guess an update is in order.
In summary; I failed to work miracles this week&amp;hellip;
Monday and Tuesday were spent on the low hanging fruit. Lots of simple transformations that made the code less flexible made it easier to see the wood for the trees. By the end of Tuesday I&amp;rsquo;d moved the code into a library, slipped in several interfaces, mocked up a few things and written a handful of tests.</description>
    </item>
    
    <item>
      <title>Caring</title>
      <link>https://lenholgate.com/blog/2004/08/caring.html</link>
      <pubDate>Wed, 04 Aug 2004 08:30:09 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/08/caring.html</guid>
      <description>There was a good reply by Dr. Real PC on one of Joel&amp;rsquo;s discussion threads recently;
&amp;ldquo;The most important thing is caring. If you don&amp;rsquo;t care it doesn&amp;rsquo;t matter how smart you might be. If you aren&amp;rsquo;t interested how could you have the patience that&amp;rsquo;s required?&amp;rdquo;
How true. I think it&amp;rsquo;s reasonably easy to spot if someone cares about what they&amp;rsquo;re doing, or, perhaps it&amp;rsquo;s just easy to spot when they dont&amp;hellip;</description>
    </item>
    
    <item>
      <title>Sick of the R word</title>
      <link>https://lenholgate.com/blog/2004/08/sick-of-the-r-word.html</link>
      <pubDate>Wed, 04 Aug 2004 08:08:19 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/08/sick-of-the-r-word.html</guid>
      <description>I&amp;rsquo;m getting a bit fed up of hearing the word &amp;lsquo;Refactoring&amp;rsquo; when what people really mean is just &amp;lsquo;hacking at code&amp;rsquo;. Back in May last year I responded to Bob Cringely&amp;rsquo;s piece on how bad the whole idea of refactoring was; I still stand by what I said and, looking back, I think the key point is this:
&amp;ldquo;Not all code changing is refactoring. Refactoring requires discipline. You need to balance the risk of refactoring with the risk of not refactoring.</description>
    </item>
    
    <item>
      <title>Reducing what the code could do to just what the code should do</title>
      <link>https://lenholgate.com/blog/2004/08/reducing-what-the-code-could-do-to-just-what-the-code-should-do.html</link>
      <pubDate>Tue, 03 Aug 2004 07:26:38 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/08/reducing-what-the-code-could-do-to-just-what-the-code-should-do.html</guid>
      <description>I&amp;rsquo;ve got one of those &amp;lsquo;please dig us out of this hole before we ship on Friday&amp;rsquo; gigs this week. I&amp;rsquo;m back with the refactoring project for a few days and, well, when the cat&amp;rsquo;s away&amp;hellip;
So, we&amp;rsquo;re 80% done but none of it seems to work, no tests, and the design seems a tad overly complex and it just must go live by Friday&amp;hellip; Our task is simple, just clean things up, make it work right and finish the other 80%.</description>
    </item>
    
    <item>
      <title>Explicit class initialiser methods</title>
      <link>https://lenholgate.com/blog/2004/07/explicit-class-initialiser-methods.html</link>
      <pubDate>Sat, 24 Jul 2004 10:48:48 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/07/explicit-class-initialiser-methods.html</guid>
      <description>Codemonkey uk has an interesting piece on the use of explicit initialiser and destroy member functions rather than allowing object lifetime to be managed by the constructor and destructor.
Codemonkey uk comes down on the right side of the argument, in my opinion; explicit initialiser methods are devil spawn.
The problem with classes that have a separate init method, no matter what it&amp;rsquo;s called, is that the class can exist at least two states; constructed and initialised.</description>
    </item>
    
    <item>
      <title>Reprint: CORBA - Reference Counting</title>
      <link>https://lenholgate.com/blog/2004/07/reprint-corba---reference-counting.html</link>
      <pubDate>Sat, 24 Jul 2004 10:19:22 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/07/reprint-corba---reference-counting.html</guid>
      <description>A new posting in the blast from the past reprints area. First in a series that compares CORBA and COM; CORBA - Reference Counting.</description>
    </item>
    
    <item>
      <title>Practical Testing: 10 - Fixing the tick count wrap bug, again</title>
      <link>https://lenholgate.com/blog/2004/07/practical-testing-10---fixing-the-tick-count-wrap-bug-again.html</link>
      <pubDate>Sat, 24 Jul 2004 08:24:51 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/07/practical-testing-10---fixing-the-tick-count-wrap-bug-again.html</guid>
      <description>Previously, on Practical Testing: Having bolted on some tests to an existing piece of code we&amp;rsquo;re now doing some &amp;ldquo;agressive refactoring&amp;rdquo; ;) and rewriting the code from scratch using the testing ideas we developed earlier. The whole point of this exercise was to fix a known bug, we did that in the existing code here, now we have a test that forces us to address the issue in the new code.</description>
    </item>
    
    <item>
      <title>/FI, STLPort, Precompiled headers, warning level 4 and #pragma hdrstop</title>
      <link>https://lenholgate.com/blog/2004/07/fi-stlport-precompiled-headers-warning-level-4-and-pragma-hdrstop.html</link>
      <pubDate>Sat, 24 Jul 2004 07:20:41 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/07/fi-stlport-precompiled-headers-warning-level-4-and-pragma-hdrstop.html</guid>
      <description>The one where I find that you can teach an old dog new tricks and almost use the &amp;lsquo;rocks&amp;rsquo; word.
Just recently I&amp;rsquo;ve switched to using STLPort on two of the code bases that I&amp;rsquo;m working on. One of my clients wanted to use it because they were having some weird threading issues with the standard VC6 stl and their &amp;rsquo;enterprise&amp;rsquo; install of VC was too hard to patch with updated stl headers from dinkumware&amp;hellip; (I&amp;rsquo;m starting to think that &amp;rsquo;enterprise&amp;rsquo; often means big, clunky, broken and incompetent, but that&amp;rsquo;s another story).</description>
    </item>
    
    <item>
      <title>Practical Testing: 9 - More tests, more development, notice the order?</title>
      <link>https://lenholgate.com/blog/2004/07/practical-testing-9---more-tests-more-development-notice-the-order.html</link>
      <pubDate>Wed, 21 Jul 2004 23:35:40 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/07/practical-testing-9---more-tests-more-development-notice-the-order.html</guid>
      <description>Previously, on Practical Testing: we fought through the pain of writing tests for hard to test code and then we decided to see what it could have been like if we&amp;rsquo;d developed the code test first&amp;hellip; Now we&amp;rsquo;ll add some more tests and some more code, still keeping it all nice and simple&amp;hellip;
In our BOT development our second test was a test for multiple timers. Unfortunately that will completely break our simplest possible implementation of a timer queue so we&amp;rsquo;ll ignore that test for now.</description>
    </item>
    
    <item>
      <title>Practical Testing: 8 - Once more, with tests first</title>
      <link>https://lenholgate.com/blog/2004/07/practical-testing-8---once-more-with-tests-first.html</link>
      <pubDate>Wed, 21 Jul 2004 21:58:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/07/practical-testing-8---once-more-with-tests-first.html</guid>
      <description>I&amp;rsquo;ve been writing some blog entries about a piece of code from my &amp;lsquo;back catalogue&amp;rsquo; that didn&amp;rsquo;t have tests and that had a known bug that was reasonably hard to test for. Right at the start I commented that the code was a tad over complicated due to the way it had been developed using HITIW (Hack it till it works). The complexity in the code itself made writing tests for it harder than it should have been and, well, I wouldn&amp;rsquo;t write code like that these days (honest).</description>
    </item>
    
    <item>
      <title>Practical Testing: 7 - Fixing the tick count wrap bug</title>
      <link>https://lenholgate.com/blog/2004/07/practical-testing-7---fixing-the-tick-count-wrap-bug.html</link>
      <pubDate>Wed, 21 Jul 2004 20:45:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/07/practical-testing-7---fixing-the-tick-count-wrap-bug.html</guid>
      <description>Previously on Practical Testing: After far too much work we finally got to the point where we had a test for the tick count wrap bug. Now that we have a failing test we can fix the bug.
At long last we have a test for GetTickCount() wrapping from a big number to 0 every 49.7 days. The test is controllable and we can run the test at any time, not just when the PC in question has been operating for 49.</description>
    </item>
    
    <item>
      <title>Comment Spam Morons</title>
      <link>https://lenholgate.com/blog/2004/07/comment-spam-morons.html</link>
      <pubDate>Wed, 21 Jul 2004 19:58:24 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/07/comment-spam-morons.html</guid>
      <description>Hey, you comment spam morons, get a life and do something useful for a change. With MT Blacklist most of you are kept out (and I can see how effective it is from looking at the logs) and it takes me no time at all to clean up after the few of you that get through and post your pathetic excuse for advertising. One click on the email that I get sent when a comment is left adds your pathetic spoor to my blacklist and another click scans all other comments and removes the crap you&amp;rsquo;re spreading.</description>
    </item>
    
    <item>
      <title>Testing Reflections</title>
      <link>https://lenholgate.com/blog/2004/07/testing-reflections.html</link>
      <pubDate>Tue, 20 Jul 2004 23:11:26 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/07/testing-reflections.html</guid>
      <description>I found this site today from my server log - testingReflections.com I haven&amp;rsquo;t explored it fully yet, but what little I have seen looks good&amp;hellip;</description>
    </item>
    
    <item>
      <title>Busy...</title>
      <link>https://lenholgate.com/blog/2004/07/busy.html</link>
      <pubDate>Mon, 19 Jul 2004 22:54:51 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/07/busy.html</guid>
      <description>I&amp;rsquo;ve been really busy these last few weeks. Too much to do, too little time. This week is looking better, so hopefully I&amp;rsquo;ll find time to finish the next couple of installments of the Practical Testing story, post a few updates on some of the code I&amp;rsquo;ve been writing and repost a few more google grabbing reprints&amp;hellip;</description>
    </item>
    
    <item>
      <title>Reprints</title>
      <link>https://lenholgate.com/blog/2004/07/reprints.html</link>
      <pubDate>Fri, 02 Jul 2004 21:00:18 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/07/reprints.html</guid>
      <description>I&amp;rsquo;ve started a new category, reprints, these are things from &amp;lsquo;way back&amp;rsquo; that have been previously published on the web in other forms.
First in this blatant search for more search engine hits is an old Java article I wrote in 2001 about caches in the middle tier.</description>
    </item>
    
    <item>
      <title>Not Invented Here or just Not Usable Here?</title>
      <link>https://lenholgate.com/blog/2004/07/not-invented-here-or-just-not-usable-here.html</link>
      <pubDate>Fri, 02 Jul 2004 19:03:18 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/07/not-invented-here-or-just-not-usable-here.html</guid>
      <description>Reusing code is often harder than you&amp;rsquo;d think. Sometimes the decision not to reuse a piece of code but instead to write new code to do the same thing is not just a case of &amp;lsquo;Not Invented Here&amp;rsquo; syndrome but is more a case of trying to &amp;lsquo;Use Someone Elses&amp;rsquo; and finding that the fit isn&amp;rsquo;t quite right&amp;hellip;
Writing code that&amp;rsquo;s reusable is hard but that shouldn&amp;rsquo;t come as any great surprise.</description>
    </item>
    
    <item>
      <title>DRY</title>
      <link>https://lenholgate.com/blog/2004/06/dry.html</link>
      <pubDate>Mon, 28 Jun 2004 22:03:36 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/06/dry.html</guid>
      <description>I was visiting a client on Friday to help them integrate a server we&amp;rsquo;d written for them, using The Server Framework, with some of their existing systems. We had just got everything working nicely when they mentioned, in passing, that they&amp;rsquo;d occasionally had problems with our service hanging during startup but they couldn&amp;rsquo;t reproduce it. We talked through the problem for a while and then I had an idea; I configured the service incorrectly, so that it would fail during start up and shutdown.</description>
    </item>
    
    <item>
      <title>Currently reading</title>
      <link>https://lenholgate.com/blog/2004/06/currently-reading-2.html</link>
      <pubDate>Sun, 27 Jun 2004 16:03:02 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/06/currently-reading-2.html</guid>
      <description>I currently have 3 quite different technology books on the go, and one waiting in the wings.
I&amp;rsquo;m re-reading Software Craftsmanship, McBreen&amp;rsquo;s ideas really appeal to me, but then I guess that may be because I went through an official apprentiship in a former life so I can see how the craft model might work well for software.
Next is Applied C++ which is an interesting &amp;lsquo;warts and all&amp;rsquo; journey through the design of a graphics manipulation library in C++.</description>
    </item>
    
    <item>
      <title>Staying focussed on the finish</title>
      <link>https://lenholgate.com/blog/2004/06/staying-focussed-on-the-finish.html</link>
      <pubDate>Thu, 24 Jun 2004 08:32:01 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/06/staying-focussed-on-the-finish.html</guid>
      <description>The data provider project rolls on and we&amp;rsquo;re almost at 100% of the functionality required for version 1.0. In fact, we have a few 1.1 features in there because they were easy wins and by the time we made sure that we they&amp;rsquo;d be easy to do in 1.1 we found we&amp;rsquo;d done 90% of the work for them. The task now is to avoid the numerous distractions, improve test coverage, integrate with our clients and hit the ship date.</description>
    </item>
    
    <item>
      <title>Code that&#39;s like a box of Lego</title>
      <link>https://lenholgate.com/blog/2004/06/code-thats-like-a-box-of-lego.html</link>
      <pubDate>Wed, 23 Jun 2004 23:15:27 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/06/code-thats-like-a-box-of-lego.html</guid>
      <description>I&amp;rsquo;ve been noticing that since I started doing the testing thing in anger my objects tend to be smaller and I have more of them. The pressure that testing puts on you to design in such a way that each object can be used as independently as possible so that you can write tests seems to break chunks of functionality far better than other design methods I&amp;rsquo;ve tried. As I&amp;rsquo;ve said before, the problem then becomes one of managing the obvious complexity; looking at this kind of code for the first time can be a little daunting.</description>
    </item>
    
    <item>
      <title>JetByte News: New contract with Commerzbank London</title>
      <link>https://lenholgate.com/news/2004/06/new-contract-with-commerzbank-london.html</link>
      <pubDate>Wed, 23 Jun 2004 12:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/news/2004/06/new-contract-with-commerzbank-london.html</guid>
      <description>We&amp;rsquo;re happy to be helping Commerzbank in London with their FX trading system again.
Due to staff turnover Len&amp;rsquo;s back, part time, to help mentor the new team members and help with bug fixing and testing.</description>
    </item>
    
    <item>
      <title>Firm Foundations</title>
      <link>https://lenholgate.com/blog/2004/06/firm-foundations.html</link>
      <pubDate>Mon, 21 Jun 2004 23:01:52 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/06/firm-foundations.html</guid>
      <description>As I mentioned last week, I&amp;rsquo;m writing a new component for one of my clients. I also mentioned that &amp;lsquo;beyond the interface, I can do what I like&amp;rsquo;; that&amp;rsquo;s actually a surprisingly important part of the specification due to the situation that the client finds itself in&amp;hellip;
The client&amp;rsquo;s current codebase is in a fairly bad way; a mixture of staff turn-over, evolving requirements, tight deadlines, and lack of care and inexperience and lack of strong technical leadership has allowed the code to develop a nice selection of problems.</description>
    </item>
    
    <item>
      <title>Erase registry keys using .reg files</title>
      <link>https://lenholgate.com/blog/2004/06/erase-registry-keys-using-reg-files.html</link>
      <pubDate>Fri, 18 Jun 2004 08:09:05 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/06/erase-registry-keys-using-reg-files.html</guid>
      <description>I didn&amp;rsquo;t know you could do this; seems like a useful thing to remember. How to erase registry keys using .reg files&amp;hellip;</description>
    </item>
    
    <item>
      <title>Repeat after me, COM is just an interface layer</title>
      <link>https://lenholgate.com/blog/2004/06/repeat-after-me-com-is-just-an-interface-layer.html</link>
      <pubDate>Thu, 17 Jun 2004 23:43:07 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/06/repeat-after-me-com-is-just-an-interface-layer.html</guid>
      <description>I was reading this the other day and I recognised Past Mozilla Mistakes: two as something that quite a few (if not all) of my clients have made&amp;hellip;
If you&amp;rsquo;re writing in C++ then COM is just an interface layer. It&amp;rsquo;s great for providing access to an object model to loads of non C++ consumers but, in my opinion, it&amp;rsquo;s a lousy thing to base your entire system on. COM is a complex thing, considering how much work it does for you, the rules aren&amp;rsquo;t that onerous, but they tend to corrupt nice, clean C++ code if you let them.</description>
    </item>
    
    <item>
      <title>Testing payback</title>
      <link>https://lenholgate.com/blog/2004/06/testing-payback.html</link>
      <pubDate>Thu, 17 Jun 2004 23:08:24 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/06/testing-payback.html</guid>
      <description>I&amp;rsquo;m building a new data provider for one of my clients. It breaks a huge chunk of their existing codebase out into a new component that hides behind a simple COM interface and abstracts away lots of nasty stuff so that they don&amp;rsquo;t need to worry about it. The inflection point is small; a method or two on a single COM interface. This is good as it means we have a single, easy to test, integration point.</description>
    </item>
    
    <item>
      <title>Joel on Win32; API complexity and the Army of Muppets (a rant)</title>
      <link>https://lenholgate.com/blog/2004/06/joel-on-win32-api-complexity-and-the-army-of-muppets-a-rant.html</link>
      <pubDate>Thu, 17 Jun 2004 22:44:22 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/06/joel-on-win32-api-complexity-and-the-army-of-muppets-a-rant.html</guid>
      <description>Joel has written a nice little piece on the demise of the Win32 API. Some of it I agree with; such as for many developers the fact that .Net is just the latest example of Microsoft indulging in a Fire and Motion exercise, yet for other developers it&amp;rsquo;s vitally important; the trick, as ever, is working out which camp you fall into&amp;hellip; But some of it, I don&amp;rsquo;t.
I really don&amp;rsquo;t understand the problem with API complexity (but perhaps that&amp;rsquo;s because I don&amp;rsquo;t really understand the problem with API complexity&amp;hellip;).</description>
    </item>
    
    <item>
      <title>Pimply youth</title>
      <link>https://lenholgate.com/blog/2004/06/pimply-youth.html</link>
      <pubDate>Tue, 15 Jun 2004 08:16:22 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/06/pimply-youth.html</guid>
      <description>Last week I spent some time back with the guys on the refactoring project. Things are going well for them and, apart from a few minor transgressions, they&amp;rsquo;re sticking with the process that we put in place when I was with them on a regular basis. The project is currently suffering from a slight lack of technical direction; they have a new guy on the team and he&amp;rsquo;s enthusiastic to try &amp;rsquo;new&amp;rsquo; things and nobody is currently restricting the things he is allowed to try&amp;hellip;</description>
    </item>
    
    <item>
      <title>Outage...</title>
      <link>https://lenholgate.com/blog/2004/06/outage.html</link>
      <pubDate>Fri, 11 Jun 2004 18:13:31 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/06/outage.html</guid>
      <description>Sorry for the recent outages. My hosting provider upgraded a server and it took longer than expected to find all the things that were installed on the old server but were not on the new server. It seems that I&amp;rsquo;m the only one that uses them&amp;hellip;
Blog was down for a few hours, comments and trackbacks have been hosed for a day or so. All seems fine now.</description>
    </item>
    
    <item>
      <title>20 years on, 60 years on, thoughts on D-Day</title>
      <link>https://lenholgate.com/blog/2004/06/20-years-on-60-years-on-thoughts-on-d-day.html</link>
      <pubDate>Sun, 06 Jun 2004 22:47:39 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/06/20-years-on-60-years-on-thoughts-on-d-day.html</guid>
      <description>20 year&amp;rsquo;s ago I traveled with my dad and the remaining members of my grandfather&amp;rsquo;s unit to Normandy for the 40th anniversary celebrations. I was 17, around the same age that some of them were on the day. My grandfather, Frank Holgate (also &amp;lsquo;my F.&amp;rsquo;), survived the war but died from heart disease when I was far too young.
I&amp;rsquo;ve found the news reports of the 60th anniversary to be far more moving than I expected; possibly because I spent some time with these amazing people.</description>
    </item>
    
    <item>
      <title>A time to move on</title>
      <link>https://lenholgate.com/blog/2004/06/a-time-to-move-on.html</link>
      <pubDate>Sun, 06 Jun 2004 21:40:26 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/06/a-time-to-move-on.html</guid>
      <description>The one problem with building a dream flat from scratch (well, a shell) is that once you&amp;rsquo;re done, you&amp;rsquo;re done. There just isn&amp;rsquo;t anything that needs doing for a very long time. If you&amp;rsquo;re someone who enjoys the doing (to a point) then, although it&amp;rsquo;s nice to sit back and relax and appreciate what you&amp;rsquo;ve created for a while; the time eventually comes when you start getting itchy feet and want to be able to start crafting the next masterpiece&amp;hellip;</description>
    </item>
    
    <item>
      <title>This still amuses me</title>
      <link>https://lenholgate.com/blog/2004/06/this-still-amuses-me.html</link>
      <pubDate>Sat, 05 Jun 2004 20:57:01 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/06/this-still-amuses-me.html</guid>
      <description>A long time ago, in a galaxy far, far, away&amp;hellip;
I wrote a short review of The C++ Programming Language, 3rd Edition. Which, for some strange reason, Addison Wesley decided to quote on their page for the book in question (click reviews, the page is too clever to allow a direct link), along side an Amazon review and a review from Computer Literacy Bookshops&amp;hellip; I laugh every time I stumble across that page&amp;hellip;</description>
    </item>
    
    <item>
      <title>A challenge for the .Net boys and girls</title>
      <link>https://lenholgate.com/blog/2004/06/a-challenge-for-the-net-boys-and-girls.html</link>
      <pubDate>Tue, 01 Jun 2004 21:48:10 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/06/a-challenge-for-the-net-boys-and-girls.html</guid>
      <description>I&amp;rsquo;d like to do some comparative performance testing of The Server Framework against a .Net TCP/IP server, but I don&amp;rsquo;t know enough to be able to write a serious TCP/IP server in .Net. Sure, I could use TcpListener to throw together a simple server but I want something built in an efficient, async, &amp;ldquo;IIS-beating&amp;rdquo;, style.
So, if anyone knows where I could find such a beast; or if someone would like to rise to the challenge and write something, please get in touch&amp;hellip;</description>
    </item>
    
    <item>
      <title>Gripe of the day; explorer&#39;s desire to scan entire folder trees</title>
      <link>https://lenholgate.com/blog/2004/05/gripe-of-the-day-explorers-desire-to-scan-entire-folder-trees.html</link>
      <pubDate>Wed, 26 May 2004 08:08:38 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/05/gripe-of-the-day-explorers-desire-to-scan-entire-folder-trees.html</guid>
      <description>OK, so who was the bright spark that decided that when I click on a folder at the root level of a drive Explorer goes off and scans the entire folder tree from that point down before expanding the one folder I&amp;rsquo;m interested in? More importantly, can I turn it off? Surely the most you really need to do when I click on I:\Blah is list the files and directories in Blah and do a lazy directory content check in the background to see if you need to put a + next to any of the directories in Blah&amp;hellip; At present, on XP SP1 it seems that the directory check isn&amp;rsquo;t a background thing, so I have to wait for it to complete, and when the sub dirs contain many many files this can take too long&amp;hellip;</description>
    </item>
    
    <item>
      <title>Testing shouldn&#39;t be that hard</title>
      <link>https://lenholgate.com/blog/2004/05/testing-shouldnt-be-that-hard.html</link>
      <pubDate>Wed, 26 May 2004 07:40:08 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/05/testing-shouldnt-be-that-hard.html</guid>
      <description>Yesterday&amp;rsquo;s Practical Testing post was a bit of a mammoth testing exercise. The threaded nature of the component under test makes testing it harder than you&amp;rsquo;d think; and this is just a single worker thread that we have to worry about. The thing is, I expect that the component would have been designed slightly differently if it had been developed test first; using TDD, or even with just in time testing, (JITT?</description>
    </item>
    
    <item>
      <title>Practical Testing: 6 - Tests refactored</title>
      <link>https://lenholgate.com/blog/2004/05/practical-testing-6---tests-refactored.html</link>
      <pubDate>Tue, 25 May 2004 18:10:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/05/practical-testing-6---tests-refactored.html</guid>
      <description>Previously on Practical Testing: The last entry ended with us having two tests, both of which were in need to a good refactoring. The second test had uncovered an unexpected bug&amp;hellip; This time around we&amp;rsquo;ll refactor the tests, fix the bug and finally write the test for the tick count wrap bug&amp;hellip;
Our new test breaks because the CCallbackTimer is failing to keep the timers in the correct order in its queue.</description>
    </item>
    
    <item>
      <title>Back with the refactoring project</title>
      <link>https://lenholgate.com/blog/2004/05/back-with-the-refactoring-project.html</link>
      <pubDate>Tue, 25 May 2004 13:41:12 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/05/back-with-the-refactoring-project.html</guid>
      <description>I spent a little time with the guys on the refactoring project last week. Of course, as is the way, pressure from the business for more functionality has reduced the amount of clean up work that they&amp;rsquo;ve been able to do. The good news is that the builds are still repeatable and most of the tests pass. The bad news is only most of the tests pass.
The first thing I did after checking out the latest source from CVS was build all the test harnesses.</description>
    </item>
    
    <item>
      <title>Practical Testing: 5 - Testing shouldn&#39;t be this hard</title>
      <link>https://lenholgate.com/blog/2004/05/practical-testing-5---testing-shouldnt-be-this-hard.html</link>
      <pubDate>Tue, 25 May 2004 13:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/05/practical-testing-5---testing-shouldnt-be-this-hard.html</guid>
      <description>I&amp;rsquo;m writing some blog entries that show how to write tests for non trivial pieces of code. This is part 5; the one where we find a bug we weren&amp;rsquo;t expecting&amp;hellip;
[Update: Welcome to anyone who&amp;rsquo;s coming here from the link on Dans Data there&amp;rsquo;s actually a freely available program that DOES help you work with the TickCount rollover bug, it&amp;rsquo;s available on my site here.]
Last time I slipped an interface between our object under test and its source of time.</description>
    </item>
    
    <item>
      <title>Mythical Man Month</title>
      <link>https://lenholgate.com/blog/2004/05/mythical-man-month.html</link>
      <pubDate>Thu, 20 May 2004 21:22:55 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/05/mythical-man-month.html</guid>
      <description>I finished re-reading the Mythical Man Month today. It was a good read, and, just as when I read it just after the 20th anniversary edition came out, still very relevant to software development today.
I found Brooks&amp;rsquo; enthusiasm and attitude to be quite compelling; it&amp;rsquo;s so obvious that he loves his work. This quote from the epilogue sums it up and reminds me not to be so grouchy; &amp;ldquo;To only a fraction of the human race does God give the privilege of earning one&amp;rsquo;s bread doing what one would have gladly pursued free, for passion.</description>
    </item>
    
    <item>
      <title>Practical Testing: 4 - Taking control of time</title>
      <link>https://lenholgate.com/blog/2004/05/practical-testing-4---taking-control-of-time.html</link>
      <pubDate>Wed, 19 May 2004 22:49:09 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/05/practical-testing-4---taking-control-of-time.html</guid>
      <description>I&amp;rsquo;m writing some blog entries that show how to write tests for non trivial pieces of code. This is part 4.
We have a test for SetTimer() but it&amp;rsquo;s not as robust as we&amp;rsquo;d like. The problem is that the class under test is runs its own thread which reacts based on time and this makes our testing harder and less predictable. What&amp;rsquo;s more it actually makes testing for our known bug practically impossible; to test for our bug we&amp;rsquo;d have to have a test which called GetTickCount() to determine the current value and which then slept so that it could execute the test at the point when the counter rolled over to 0.</description>
    </item>
    
    <item>
      <title>Practical Testing: 3 - Test 2, Enter The Mocks</title>
      <link>https://lenholgate.com/blog/2004/05/practical-testing-3---test-2-enter-the-mocks.html</link>
      <pubDate>Tue, 18 May 2004 23:30:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/05/practical-testing-3---test-2-enter-the-mocks.html</guid>
      <description>I&amp;rsquo;m writing some blog entries that show how to write tests for non trivial pieces of code. This is part 3.
Last time we wrote the first test. It doesn&amp;rsquo;t test much, but it proves we can test. Now we&amp;rsquo;ll write a real test for real functionality and along the way we&amp;rsquo;ll start to deal with some of the issues that come up when you&amp;rsquo;re trying to test multi-threaded code.</description>
    </item>
    
    <item>
      <title>Monday Mornings</title>
      <link>https://lenholgate.com/blog/2004/05/monday-mornings.html</link>
      <pubDate>Mon, 17 May 2004 20:56:06 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/05/monday-mornings.html</guid>
      <description>Updated 1st February 2024 to fix broken links
Tell me about it.
This morning I was shaving and thinking how I was actually early enough to be able to walk to Bank Tube station rather than jumping on the tube at Old Street. It looked like a nice morning and I had lots of plans for the code I was going to write today. It&amp;rsquo;s a busy week, and I had spent an hour or so late on Sunday making sure I was in a position to hit the ground running.</description>
    </item>
    
    <item>
      <title>Practical Testing: 2 - The first test</title>
      <link>https://lenholgate.com/blog/2004/05/practical-testing-2---the-first-test.html</link>
      <pubDate>Mon, 17 May 2004 20:42:36 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/05/practical-testing-2---the-first-test.html</guid>
      <description>I&amp;rsquo;m writing some blog entries that show how to write tests for non trivial pieces of code. This is part 2.
In part 1 I introduced the code that we&amp;rsquo;re going to write a test for. Now we&amp;rsquo;ll move towards the all important first test. The first test is, in my opinion, vitally important; the first test proves that you can build a test harness that can create the object. This sounds easy, but try picking a class from your current project at random and writing a test that constructs an instance of that class.</description>
    </item>
    
    <item>
      <title>Practical Testing: 1 - Introduction</title>
      <link>https://lenholgate.com/blog/2004/05/practical-testing-1---introduction.html</link>
      <pubDate>Mon, 17 May 2004 19:51:08 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/05/practical-testing-1---introduction.html</guid>
      <description>I&amp;rsquo;m writing some blog entries that show how to write tests for non trivial pieces of code. This is part 1.
The code that we&amp;rsquo;re going to test is CCallbackTimer. This is a class that lives in our Win32Tools library. It&amp;rsquo;s used by users of our SocketTools library. The class provides a very light-weight timer manager that gets around the various issues we had with using standard Win32 timers.
The timer is designed to be used in vast quantities.</description>
    </item>
    
    <item>
      <title>Practical Testing</title>
      <link>https://lenholgate.com/blog/2004/05/practical-testing.html</link>
      <pubDate>Mon, 17 May 2004 18:40:40 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/05/practical-testing.html</guid>
      <description>One of the common complaints about TDD and unit testing that I see is that the examples used aren&amp;rsquo;t real. People often say that the examples used are toys and that writing such tests adds little or no value. To be honest, I often find myself agreeing with them.
Last updated 25th April 202341 - GoogleTest - Moving to GoogleTest.
One of the problems of adding unit tests to an existing code-base or driving a new project with TDD is deciding exactly where to spend your testing efforts.</description>
    </item>
    
    <item>
      <title>Easy performance improvement for the socket server code</title>
      <link>https://lenholgate.com/blog/2004/05/easy-performance-improvement-for-the-socket-server-code.html</link>
      <pubDate>Mon, 17 May 2004 17:12:02 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/05/easy-performance-improvement-for-the-socket-server-code.html</guid>
      <description>I was discussing the performance of The Server Framework with someone the other day and realised that there was a reasonably easy way to speed up some types of servers.
I coded a first cut of the solution last night and, so far, it shows a small, but noticeable performance gain for no changes to functionality or code outside of the framework.
The IOCP server framework was always designed for ease of use over performance.</description>
    </item>
    
    <item>
      <title>Skate weekend</title>
      <link>https://lenholgate.com/blog/2004/05/skate-weekend.html</link>
      <pubDate>Mon, 17 May 2004 16:50:02 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/05/skate-weekend.html</guid>
      <description>We managed to get in two skate sessions this weekend, which was nice. The weather was lovely and on Saturday we spent some time at Kensington Gardens. This was our third skate this year and we finally started to feel we&amp;rsquo;d got our legs back. On Sunday we were in Ilford, visiting my family, and just happened to have the skate gear in the car&amp;hellip; We skated in Valentines Park for an hour or so; it was good.</description>
    </item>
    
    <item>
      <title>The perils of premature &#39;re-use&#39;</title>
      <link>https://lenholgate.com/blog/2004/05/the-perils-of-premature-re-use.html</link>
      <pubDate>Tue, 11 May 2004 08:41:11 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/05/the-perils-of-premature-re-use.html</guid>
      <description>Back in January I was writing a TCP/IP server for a client that acted as a connection gateway. Just as this project was coming to an end we started on another project which, at first, seemed quite similar; it was a TCP/IP server that provided gateway services. Just as we were starting out with this new project I made a fairly stupid decision and, well, four months later I&amp;rsquo;ve almost finished cleaning things up&amp;hellip;</description>
    </item>
    
    <item>
      <title>More than 20 years on and still as much to say</title>
      <link>https://lenholgate.com/blog/2004/05/more-than-20-years-on-and-still-as-much-to-say.html</link>
      <pubDate>Sun, 09 May 2004 18:25:21 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/05/more-than-20-years-on-and-still-as-much-to-say.html</guid>
      <description>I&amp;rsquo;m currently re-reading The Mythical Man Month 20th Aniversay Edition and I&amp;rsquo;ve just finished watching Apocolypse Now Redux. Both seem to have as much to say now about their respective subjects as they did in the day. Brooks&amp;rsquo; treatment of the &amp;ldquo;Joys&amp;rdquo; and &amp;ldquo;Woes&amp;rdquo; of The Craft as poignant as Coppola&amp;rsquo;s tale of the lies and horror of war.</description>
    </item>
    
    <item>
      <title>Blog&#39;s a year old</title>
      <link>https://lenholgate.com/blog/2004/05/blogs-a-year-old.html</link>
      <pubDate>Fri, 07 May 2004 23:33:32 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/05/blogs-a-year-old.html</guid>
      <description>Been a busy week, I meant to post this on The Day. I&amp;rsquo;ve been writing this stuff for just over a year now. I didn&amp;rsquo;t really know what to expect when I started, I just wanted a place to ramble on about this and that. During the year I&amp;rsquo;ve learned a few things about blogging&amp;hellip;.
I actually do do this for me more than for anyone else. I&amp;rsquo;ve found that I understand things more when I&amp;rsquo;ve written about them.</description>
    </item>
    
    <item>
      <title>In the Zone</title>
      <link>https://lenholgate.com/blog/2004/04/in-the-zone.html</link>
      <pubDate>Fri, 30 Apr 2004 17:35:07 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/04/in-the-zone.html</guid>
      <description>Where did the last three days go?
I&amp;rsquo;ve been working on this project for a client since February, on and off. They had some delays which meant that hardware that I needed wasn&amp;rsquo;t ready when expected, so we slipped. Then other commitments got in the way, so we slipped. Then I decided to work around the lack of hardware and make one final push for the finish line&amp;hellip;
That was Wednesday.</description>
    </item>
    
    <item>
      <title>Wafer thin testing?</title>
      <link>https://lenholgate.com/blog/2004/04/wafer-thin-testing.html</link>
      <pubDate>Mon, 26 Apr 2004 22:51:51 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/04/wafer-thin-testing.html</guid>
      <description>I&amp;rsquo;ve spent the past month or so helping a corporate client improve code quality in a sprawling application. It&amp;rsquo;s non-trivial, the code-base is huge, the quality is, at best, questionable and the coupling is excessive and made worse by the fact that much of the system is coupled together using a single huge blob of relatively unstructured XML. Fun, fun, fun&amp;hellip;
As with the refactoring project, the first tests have taken some time to build.</description>
    </item>
    
    <item>
      <title>Dogfood</title>
      <link>https://lenholgate.com/blog/2004/04/dogfood.html</link>
      <pubDate>Mon, 19 Apr 2004 23:37:06 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/04/dogfood.html</guid>
      <description>I&amp;rsquo;ve been running my main mail feeds through my POP3 code for several weeks now. All my email gets pulled from the POP3 servers into my home-brew email system, it runs through my hardcoded filters which split &amp;ldquo;bad&amp;rdquo; mail from mail that might be good and finally Outlook connects to my mail server and pulls the email from my system back into production quality code land&amp;hellip;
Occasionally I see &amp;lsquo;interesting things&amp;rsquo; and these either become the focus for swift retesting session or else find their way into FogBugz&amp;hellip;</description>
    </item>
    
    <item>
      <title>Block</title>
      <link>https://lenholgate.com/blog/2004/04/block.html</link>
      <pubDate>Mon, 19 Apr 2004 22:46:01 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/04/block.html</guid>
      <description>My brain has been too busy to think recently. I&amp;rsquo;ve had too many background issues going on, too many unresolved items, too much shit to deal with. I haven&amp;rsquo;t been able to think new things because I&amp;rsquo;ve been too tied up in the unfinished things, I&amp;rsquo;ve tried really hard to think but there wasn&amp;rsquo;t any space&amp;hellip; It sucked. Today I cleared a lot of that away; I found closure on lots of items and generally would be able to think nice shiny new thoughts right now if I hadn&amp;rsquo;t relaxed with a little too much wine over dinner.</description>
    </item>
    
    <item>
      <title>Designing to be inherited is extra effort</title>
      <link>https://lenholgate.com/blog/2004/04/designing-to-be-inherited-is-extra-effort.html</link>
      <pubDate>Sat, 17 Apr 2004 12:58:11 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/04/designing-to-be-inherited-is-extra-effort.html</guid>
      <description>I saw this rather nice explaination for why sealed is used in so many .Net classes over on cincomsmalltalk.com as a comment to a rant about how .Net is bad for your design skills&amp;hellip;
*Designing to be inherited is extra effort
[Shane King] April 16, 2004 20:26:54 EDT*
*It&amp;rsquo;s extra effort, since you have to think about not only what public interface to provide to users of the class, but also what interface to provide for people who want to inherit your class.</description>
    </item>
    
    <item>
      <title>MT-Blacklist</title>
      <link>https://lenholgate.com/blog/2004/04/mt-blacklist-1.html</link>
      <pubDate>Fri, 16 Apr 2004 19:45:19 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/04/mt-blacklist-1.html</guid>
      <description>Well, so far I&amp;rsquo;m very pleased with MT-Blacklist. It works well at preventing comment spam and when some spam gets through it&amp;rsquo;s very easy to update the blacklist and then run the &amp;lsquo;despam&amp;rsquo; option to remove all traces of the offending material. 10 out of 10!</description>
    </item>
    
    <item>
      <title>SOA, coupling, flexibility and discipline</title>
      <link>https://lenholgate.com/blog/2004/04/soa-coupling-flexibility-and-discipline.html</link>
      <pubDate>Fri, 16 Apr 2004 19:43:03 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/04/soa-coupling-flexibility-and-discipline.html</guid>
      <description>Some thoughts on Service Oriented Architectures and how for some people the silver bullet du jour is the only tool in their toolbox&amp;hellip; Just a bit of a rant really&amp;hellip;
Recently, both Rocky Lhotka and Ted Neward have said plenty of interesting things about Service Oriented Architecture (SOA). I&amp;rsquo;m in complete agreement, SOA is a &amp;ldquo;good thing&amp;rdquo; and yet since it&amp;rsquo;s such an expensive option, in terms of complexity, performance and (potentially) cash, you need to make sure that you know where not to use it.</description>
    </item>
    
    <item>
      <title>MT-Blacklist</title>
      <link>https://lenholgate.com/blog/2004/04/mt-blacklist.html</link>
      <pubDate>Sun, 04 Apr 2004 20:17:55 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/04/mt-blacklist.html</guid>
      <description>Sorry about the comment spam whilst I was away. I&amp;rsquo;ve now installed MT-Blacklist, so hopefully the only offensive rubbish and stupid sales-pitches on this site will be my own&amp;hellip;
MT-Blacklist seems pretty good; it cleaned up the mass of spam with one click but then unfortunately failed to block a new piece of crap that was posted this afternoon. Having added one of the offending urls to the blacklist I ran the cleanup again and it removed the offensive comment and automagically added the other urls that the comment contained to the list&amp;hellip;</description>
    </item>
    
    <item>
      <title>Back from Megève</title>
      <link>https://lenholgate.com/blog/2004/04/back-from-megeve.html</link>
      <pubDate>Sun, 04 Apr 2004 20:05:58 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/04/back-from-megeve.html</guid>
      <description>Just got back from a week&amp;rsquo;s spring skiing in Megève. This is probably our last trip of the 03/04 season :(
We had a great time; skied on amazingly empty slopes; ate at a selection of wonderful restaurants and had some great guiding and ski lessons with Lucy Withall of the ESF (a great ambassador for the region, and all-round super woman ;) ).
Just holiday snaps&amp;hellip;.
Mont Blanc from Rochebrune Megève is conveniently located about an hour&amp;rsquo;s drive from Geneva and within striking distance of Chamonix, Les Contamines, Morzine, etc&amp;hellip; We had expected to have to hire a car and head off to the surrounding resorts due to lack of skiing at Megève but there was plenty of fun to be had on the local slopes and we never found a need to leave them.</description>
    </item>
    
    <item>
      <title>JetByte News: Part time contract with Credit Suisse First Boston</title>
      <link>https://lenholgate.com/news/2004/04/part-time-contract-with-credit-suisse-first-boston.html</link>
      <pubDate>Thu, 01 Apr 2004 12:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/news/2004/04/part-time-contract-with-credit-suisse-first-boston.html</guid>
      <description>Len is working with CSFB&amp;rsquo;s HYDRA team to design and develop a trade events server for them in C++ on Windows.
The whole development is being developed in a Test Driven Development style and the server will reduce load on downstream systems by caching results from market data servers, perfoming trade enrichment only when data changes.</description>
    </item>
    
    <item>
      <title>Bizarre Googling</title>
      <link>https://lenholgate.com/blog/2004/03/bizarre-googling.html</link>
      <pubDate>Fri, 26 Mar 2004 20:01:30 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/03/bizarre-googling.html</guid>
      <description>As Gavin pointed out in a comment yesterday, if you type &amp;ldquo;cure for rsi&amp;rdquo; into Google right now my hair-brained babblings about how drinking lots of water helps is top of the pile&amp;hellip; If only I could do that with technical posts that would bring in work ;)</description>
    </item>
    
    <item>
      <title>Testing synchronous communications</title>
      <link>https://lenholgate.com/blog/2004/03/testing-synchronous-communications.html</link>
      <pubDate>Fri, 26 Mar 2004 15:53:49 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/03/testing-synchronous-communications.html</guid>
      <description>Today I&amp;rsquo;m doing some work for a client that involves writing some blocking sockets code to talk to one of our servers. Blocking mode fits well with the architecture of the client application they use; we&amp;rsquo;re moving the app from blocking reads on a serial port to blocking reads on a socket and jiggling the protocol it uses a bit.
Testing blocking calls is actually a bit harder than testing non blocking calls because hand cranking the mock objects so that your object under test works correctly is harder to do when your test harness is blocked in a call to read() and wont come back to you until the call times out (and the operation that you&amp;rsquo;re trying to test fails) or the read completes&amp;hellip;</description>
    </item>
    
    <item>
      <title>Async Pop</title>
      <link>https://lenholgate.com/blog/2004/03/async-pop.html</link>
      <pubDate>Thu, 25 Mar 2004 22:24:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/03/async-pop.html</guid>
      <description>A while back I finally started on the async version of the POP3 client. It ended up as a state machine and seemed to work well. The next step was to write an async version of the mail collector that I used to pull all mail from a mailbox on a server and optionally delete it.
The synchronous version of the mail collector is a fairly simple thing. You pass it the mailbox and server details and it decides how to log in; it uses APOP if the server supports it and USER/PASS if it doesn&amp;rsquo;t.</description>
    </item>
    
    <item>
      <title>Jimmy on TDD</title>
      <link>https://lenholgate.com/blog/2004/03/jimmy-on-tdd.html</link>
      <pubDate>Thu, 25 Mar 2004 08:19:43 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/03/jimmy-on-tdd.html</guid>
      <description>I agree 100% with this piece from Jimmy Nilsson&amp;rsquo;s blog.</description>
    </item>
    
    <item>
      <title>True, even if beauty is in the eye of the beholder</title>
      <link>https://lenholgate.com/blog/2004/03/true-even-if-beauty-is-in-the-eye-of-the-beholder.html</link>
      <pubDate>Tue, 23 Mar 2004 20:01:59 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/03/true-even-if-beauty-is-in-the-eye-of-the-beholder.html</guid>
      <description>&amp;ldquo;I&amp;rsquo;ll bet you that from ten feet away I can tell if a program is bad. I might not guarantee that it is good, but if it looks bad from ten feet, I can guarantee you that it wasn&amp;rsquo;t written with care. And if it wasn&amp;rsquo;t written with care, it&amp;rsquo;s probably not beautiful in the logical sense.&amp;rdquo;
Charles Simonyi
The quote is from an interview with Charles Simonyi; via Joel&amp;rsquo;s discussion forum.</description>
    </item>
    
    <item>
      <title>Saas Fee in September</title>
      <link>https://lenholgate.com/blog/2004/03/saas-fee-in-september.html</link>
      <pubDate>Sat, 20 Mar 2004 10:40:44 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/03/saas-fee-in-september.html</guid>
      <description>Those of you who are interested in the Warren Smith Saas Fee ski training sessions you might like to take a look at Warren&amp;rsquo;s latest DVD, Warren Smith Ski Academy Lesson 2. The first two sections, carving and steeps, were filmed during our course in September 2003. As you can see, the snow was pretty good and, as I said at the time, he had us doing some pretty interesting stuff.</description>
    </item>
    
    <item>
      <title>Code review</title>
      <link>https://lenholgate.com/blog/2004/03/code-review.html</link>
      <pubDate>Sat, 20 Mar 2004 10:05:52 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/03/code-review.html</guid>
      <description>I&amp;rsquo;m reviewing a large body of code for a client at present. It&amp;rsquo;s a general review of the design, coding style, code correctness and testability of a project. I started off by making notes on some of the general design changes that I&amp;rsquo;d recommend and eventually got down to a detailed review of the code. There&amp;rsquo;s a lot to say about the code and, as with all code, sometimes it&amp;rsquo;s hard to figure out the reason behind the use of a particular construct.</description>
    </item>
    
    <item>
      <title>Const correctness</title>
      <link>https://lenholgate.com/blog/2004/03/const-correctness.html</link>
      <pubDate>Tue, 16 Mar 2004 19:57:53 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/03/const-correctness.html</guid>
      <description>Interesting thread over on Joel today about using const, or not.
The original poster asked how many people bothered to mark function parameters that they don&amp;rsquo;t modify as const and whether there was any performance or readability advantages in doing so.
Ignore any performance issues, making your code const correct has massive readability and comprehension advantages. I&amp;rsquo;d go so far as to say it&amp;rsquo;s one of the most important coding standard issues there is&amp;hellip;</description>
    </item>
    
    <item>
      <title>OpenSSL test server certs expired</title>
      <link>https://lenholgate.com/blog/2004/03/openssl-test-server-certs-expired.html</link>
      <pubDate>Mon, 15 Mar 2004 22:45:10 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/03/openssl-test-server-certs-expired.html</guid>
      <description>The test certificates that shipped along with the OpenSSL server demo that I posted here have expired. I&amp;rsquo;ll post some new ones shortly.</description>
    </item>
    
    <item>
      <title>Meanwhile, back with the tests</title>
      <link>https://lenholgate.com/blog/2004/03/meanwhile-back-with-the-tests.html</link>
      <pubDate>Sat, 13 Mar 2004 14:05:24 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/03/meanwhile-back-with-the-tests.html</guid>
      <description>I&amp;rsquo;ve seen a lot of blog postings recently that pour scorn on the ideas behind TDD. Ah well, if you don&amp;rsquo;t like it, don&amp;rsquo;t do it. I&amp;rsquo;m more than happy if our competitors decide that TDD isn&amp;rsquo;t for them. In fact, testing is bad, don&amp;rsquo;t do it, move along now, don&amp;rsquo;t read any of the testing articles here&amp;hellip;
The jarring of the &amp;ldquo;real world&amp;rdquo; work we&amp;rsquo;re doing is made worse by work we&amp;rsquo;re doing for another client at the moment.</description>
    </item>
    
    <item>
      <title>Cypher</title>
      <link>https://lenholgate.com/blog/2004/03/cypher.html</link>
      <pubDate>Sat, 13 Mar 2004 13:03:38 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/03/cypher.html</guid>
      <description>I&amp;rsquo;m currently working with a corporate client. The plan is that I&amp;rsquo;ll help them refactor a key component in their system and make it more robust and increase performance. Right now they&amp;rsquo;re in the middle of a release and are in &amp;lsquo;slip mode&amp;rsquo;. I find myself feeling some sympathy for Cypher from The Matrix; there I was, safe in my green-tinted world of TDD, then suddenly I find myself in &amp;ldquo;The real world&amp;rdquo; and it&amp;rsquo;s nasty and messy and there aren&amp;rsquo;t any tests.</description>
    </item>
    
    <item>
      <title>Adding layers without adding value</title>
      <link>https://lenholgate.com/blog/2004/03/adding-layers-without-adding-value.html</link>
      <pubDate>Sat, 06 Mar 2004 11:21:57 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/03/adding-layers-without-adding-value.html</guid>
      <description>I&amp;rsquo;m a great fan of wrapping stuff up with thin layers that make the wrapped code easier to use in a given circumstance, or to provide a more appropriate interface. Obviously there are other reasons to wrap APIs but I&amp;rsquo;m continually amazed at how often the wrapping fails to add much value.
Take the humble Win32 Event API. It&amp;rsquo;s a fairly standard C API that uses an opaque handle to allow you to manipulate an event object.</description>
    </item>
    
    <item>
      <title>Craig on TDD</title>
      <link>https://lenholgate.com/blog/2004/03/craig-on-tdd.html</link>
      <pubDate>Thu, 04 Mar 2004 21:06:06 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/03/craig-on-tdd.html</guid>
      <description>Craig Andera talks about TDD. I couldn&amp;rsquo;t have said it better myself.</description>
    </item>
    
    <item>
      <title>These are not the containers you&#39;re looking for</title>
      <link>https://lenholgate.com/blog/2004/03/these-are-not-the-containers-youre-looking-for.html</link>
      <pubDate>Thu, 04 Mar 2004 20:18:29 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/03/these-are-not-the-containers-youre-looking-for.html</guid>
      <description>STL containers are great. Rather than have to worry about writing doubly linked lists, efficient maps, and other such data structures you just grab one from the STL and you&amp;rsquo;re away.
Unfortunately the STL containers have quite a large &amp;lsquo;surface area&amp;rsquo;. Their interfaces are rich because they are generic containers. Often the container you actually need is much more limited in scope and in such situations I always find it&amp;rsquo;s worth wrapping the STL container and providing a more appropriate interface to the user.</description>
    </item>
    
    <item>
      <title>Thought for the day</title>
      <link>https://lenholgate.com/blog/2004/03/thought-for-the-day-2.html</link>
      <pubDate>Wed, 03 Mar 2004 23:16:39 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/03/thought-for-the-day-2.html</guid>
      <description>If you don&amp;rsquo;t write the code are you doomed to forever be thinking that the abstraction is all in the wrong place?
Another day, another dollar. Starting with a new client, well starting back with an old client, and doing that &amp;lsquo;get your head around the source&amp;rsquo; thing&amp;hellip;</description>
    </item>
    
    <item>
      <title>POPing back</title>
      <link>https://lenholgate.com/blog/2004/03/poping-back.html</link>
      <pubDate>Tue, 02 Mar 2004 21:44:53 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/03/poping-back.html</guid>
      <description>Way back in mid November, before we dumped our building&amp;rsquo;s managing agent for being worse than useless and possibly stealing from us, I was working on some POP3 code. I had some down time today so I decided to drop back into it and see if I could move things along a little.
In summary, having lots of tests helped&amp;hellip;
I haven&amp;rsquo;t done any development on the POP3 code for 3 months.</description>
    </item>
    
    <item>
      <title>We&#39;ll be right back, after this word...</title>
      <link>https://lenholgate.com/blog/2004/03/well-be-right-back-after-this-word-1.html</link>
      <pubDate>Mon, 01 Mar 2004 20:01:05 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/03/well-be-right-back-after-this-word-1.html</guid>
      <description>Surprisingly enough the Bluetooth server &amp;ldquo;technology preview&amp;rdquo; has generated quite a bit of interest from potential clients, which is nice. In a similar spirit, I&amp;rsquo;m making the compiled version of our server that uses the OpenSSL Toolkit available for download. This code uses our freely available IOCP server framework and adds SSL support using OpenSSL. We have an SChannel version in the pipeline for those of you who don&amp;rsquo;t want to have anything to do with OpenAnything&amp;hellip;</description>
    </item>
    
    <item>
      <title>Most interesting present</title>
      <link>https://lenholgate.com/blog/2004/03/most-interesting-present.html</link>
      <pubDate>Mon, 01 Mar 2004 10:16:51 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/03/most-interesting-present.html</guid>
      <description>My birthday lasted all week, which was good. I celebrated on the day at Strada in upper street, on Friday at the Almeida and on Saturday at Curry Special.
Thanks for all the wonderful presents. Right now the most &amp;ldquo;interesting&amp;rdquo; is probably the Vew-Do balance board that Chris and Hilary bought me&amp;hellip; I&amp;rsquo;d really noticed a big improvement in my skiing from the extra balance work that I&amp;rsquo;d done during the summer on roller blades.</description>
    </item>
    
    <item>
      <title>An abstraction too far</title>
      <link>https://lenholgate.com/blog/2004/02/an-abstraction-too-far.html</link>
      <pubDate>Sun, 29 Feb 2004 22:36:41 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/02/an-abstraction-too-far.html</guid>
      <description>Today turned into a day for pondering complexity, abstraction and memory management and watching Pirates of The Caribbean on DVD&amp;hellip;
I experimented with a version of the buffer allocator that allowed a user defined memory allocation policy. It worked, but it was, I think, unnecessarily complex. If the buffer allocator itself lay behind an interface then that&amp;rsquo;s enough flexibility. Additional abstraction, with an abstract allocation policy in addition to an abstract allocator seemed a tad too abstract&amp;hellip; At some point you have to actually make the decision and write the code that does the work.</description>
    </item>
    
    <item>
      <title>More on the bug</title>
      <link>https://lenholgate.com/blog/2004/02/more-on-the-bug.html</link>
      <pubDate>Sun, 29 Feb 2004 19:12:39 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/02/more-on-the-bug.html</guid>
      <description>As I mentioned earlier, I found a memory leak in a piece of code and was lamenting the difficulty in providing automatic tests for such a think when you use new and delete directly. I&amp;rsquo;ve thought about this some more and I&amp;rsquo;m now slightly less concerned&amp;hellip;
The bug was in the one place that I wasn&amp;rsquo;t using some form of factory to manage dynamic allocation. I was allocating a &amp;lsquo;per socket&amp;rsquo; data structure when a connection was established and supposed to be deleting it when the socket was released; I wasn&amp;rsquo;t.</description>
    </item>
    
    <item>
      <title>Why I started thinking about obvious complexity</title>
      <link>https://lenholgate.com/blog/2004/02/why-i-started-thinking-about-obvious-complexity.html</link>
      <pubDate>Sun, 29 Feb 2004 14:31:26 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/02/why-i-started-thinking-about-obvious-complexity.html</guid>
      <description>So, what brought on those musings on complexity? There&amp;rsquo;s a bug in the recent public release of The Server Framework code. It&amp;rsquo;s in one of the example servers. Some code got snipped out and it shouldn&amp;rsquo;t have been and the result is a memory leak. The code in question doesn&amp;rsquo;t have tests, but that&amp;rsquo;s not the point, it would be hard to write automated tests that would have caught the problem due to the fact that I, as a designer, made an unchangeable decision for the user of the code.</description>
    </item>
    
    <item>
      <title>Some thoughts on complexity</title>
      <link>https://lenholgate.com/blog/2004/02/some-thoughts-on-complexity.html</link>
      <pubDate>Sun, 29 Feb 2004 13:57:12 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/02/some-thoughts-on-complexity.html</guid>
      <description>I find that these days I prefer my complexity to be obvious. Things with hidden complexity aren&amp;rsquo;t any less complex, they&amp;rsquo;re just less obvious. If you make all of your complexity obvious then you know which pieces of code are complex and you can focus your attempts at simplification on the right places&amp;hellip;
Some of this comes from the testing that I&amp;rsquo;ve been doing; liberal use of parameterize from above means that an object that uses several services is explicitly given those services when you create it.</description>
    </item>
    
    <item>
      <title>Implementing the new AcceptEx server</title>
      <link>https://lenholgate.com/blog/2004/02/implementing-the-new-acceptex-server.html</link>
      <pubDate>Fri, 27 Feb 2004 18:14:37 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/02/implementing-the-new-acceptex-server.html</guid>
      <description>Following my tooth brush revelation about AcceptEx earlier in the week I found some time today to test out my ideas.
The implementation went pretty smoothly. It was helped by the fact that I had a previous attempt at using AcceptEx floating around. It was helped more by the refactoring that I&amp;rsquo;d done recently and the fact that it was easy to take the tests I had for the listen/accept version of the socket server code and adjust them to work with the new AcceptEx version.</description>
    </item>
    
    <item>
      <title>Does anyone know of a VS.Net 200X to VC 6 project file conversion tool?</title>
      <link>https://lenholgate.com/blog/2004/02/does-anyone-know-of-a-vsnet-200x-to-vc-6-project-file-conversion-tool.html</link>
      <pubDate>Wed, 25 Feb 2004 21:05:15 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/02/does-anyone-know-of-a-vsnet-200x-to-vc-6-project-file-conversion-tool.html</guid>
      <description>We have lots of clients who haven&amp;rsquo;t moved away from VC 6 yet. At present we need to maintain all our projects in a VC 6 compilable form. The easiest way to do this is just to use VC 6 as our primary development platform for C++. If we had a tool that allowed us to back port VS.Net 2003 projects to VC 6 then we could maintain the projects in the latest format and back port as required.</description>
    </item>
    
    <item>
      <title>Why is Outlook 2002&#39;s POP handling so slow?</title>
      <link>https://lenholgate.com/blog/2004/02/why-is-outlook-2002s-pop-handling-so-slow.html</link>
      <pubDate>Wed, 25 Feb 2004 20:06:42 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/02/why-is-outlook-2002s-pop-handling-so-slow.html</guid>
      <description>I ran Outlook against my POP3 server just now and once again was unimpressed by the speed that messages were being downloaded. It seems that Outlook 2002, over an SSL link to a POP3 server (so no anti-virus weirdness is going on) takes about half a second per message to download a large number of really small messages, from a server on the same machine&amp;hellip;
Because I&amp;rsquo;m curious, and because it doesn&amp;rsquo;t appear to be a server issue as the server idles the whole time, I ran up Outlook Express and pointed that at the server (same SSL connection), it flew.</description>
    </item>
    
    <item>
      <title>I hate things that turn off the explorer status bar</title>
      <link>https://lenholgate.com/blog/2004/02/i-hate-things-that-turn-off-the-explorer-status-bar.html</link>
      <pubDate>Wed, 25 Feb 2004 19:33:09 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/02/i-hate-things-that-turn-off-the-explorer-status-bar.html</guid>
      <description>&amp;lt;rant&amp;gt;Whoever decided that it would be a good idea for the explorer status bar to be &amp;lsquo;switch offable by someone other than the user&amp;rsquo; should be taken outside and given a good kicking. Why is it a good to let someone other than the user decide what&amp;rsquo;s the best way to display information?&amp;lt;/rant&amp;gt;
and don&amp;rsquo;t get me started on folder views that reset themselves to the dumb ass icon display for no apparant reason&amp;hellip;</description>
    </item>
    
    <item>
      <title>JetByte News: Fixed-price server development</title>
      <link>https://lenholgate.com/news/2004/02/fixed-price-server-development.html</link>
      <pubDate>Wed, 25 Feb 2004 12:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/news/2004/02/fixed-price-server-development.html</guid>
      <description>We&amp;rsquo;re producing a custom application server shell, using The Server Framework, for the Traveltainment AG. web team.</description>
    </item>
    
    <item>
      <title>Bluetooth server demo</title>
      <link>https://lenholgate.com/blog/2004/02/bluetooth-server-demo.html</link>
      <pubDate>Wed, 25 Feb 2004 08:57:02 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/02/bluetooth-server-demo.html</guid>
      <description>I&amp;rsquo;m making the compiled version of our Bluetooth server shell available for download here. The source is not available at this time.
The zip contains a simple server that advertises the following Bluetooth profiles: OBEX file transfer, Serial Port, Dial up Networking, LAN Access Server and OBEX object push.
The server requires working Bluetooth hardware that uses the XP SP1 stack. If you don&amp;rsquo;t know what this means then chances are, you don&amp;rsquo;t have it.</description>
    </item>
    
    <item>
      <title>Happy Birthday to me...</title>
      <link>https://lenholgate.com/blog/2004/02/happy-birthday-to-me.html</link>
      <pubDate>Wed, 25 Feb 2004 08:11:46 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/02/happy-birthday-to-me.html</guid>
      <description>37 today.</description>
    </item>
    
    <item>
      <title>Finally, the penny drops about AcceptEx</title>
      <link>https://lenholgate.com/blog/2004/02/finally-the-penny-drops-about-acceptex.html</link>
      <pubDate>Tue, 24 Feb 2004 09:25:10 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/02/finally-the-penny-drops-about-acceptex.html</guid>
      <description>So there I was, cleaning my teeth, about to get into bed and suddenly I saw a reason for using AcceptEx&amp;hellip; I&amp;rsquo;ve known about AcceptEx for ages, and even written an article about how to use it but I always thought that it just wasn&amp;rsquo;t something I needed to use in our servers. I&amp;rsquo;d latched on to the officially advertised reasons for using it and ignored the more subtle advantages&amp;hellip;</description>
    </item>
    
    <item>
      <title>66% Evil, seems about right...</title>
      <link>https://lenholgate.com/blog/2004/02/66-evil-seems-about-right.html</link>
      <pubDate>Mon, 23 Feb 2004 22:11:26 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/02/66-evil-seems-about-right.html</guid>
      <description>Er, I blame him, him and hiiim, oh and that little voice inside my head&amp;hellip;</description>
    </item>
    
    <item>
      <title>Uncontrolled coupling - Singletons, just say NO!</title>
      <link>https://lenholgate.com/blog/2004/02/uncontrolled-coupling---singletons-just-say-no.html</link>
      <pubDate>Mon, 23 Feb 2004 13:12:31 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/02/uncontrolled-coupling---singletons-just-say-no.html</guid>
      <description>We&amp;rsquo;re developing some code for a client. There&amp;rsquo;s a standalone server, which we&amp;rsquo;ve completed, and a small stub of code that allows the client&amp;rsquo;s existing system to talk to our new server in place of the old thing they used to talk to&amp;hellip;
This morning I stubbed out the new stub and put together a test harness project. Unfortunately, due to the way the client&amp;rsquo;s code is coupled it could prove difficult to test the new stub&amp;hellip;</description>
    </item>
    
    <item>
      <title>I seem to have lied earlier...</title>
      <link>https://lenholgate.com/blog/2004/02/i-seem-to-have-lied-earlier.html</link>
      <pubDate>Fri, 20 Feb 2004 20:24:59 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/02/i-seem-to-have-lied-earlier.html</guid>
      <description>Earlier I said &amp;ldquo;I&amp;rsquo;ll probably keep the code for now, but it&amp;rsquo;s not the code I&amp;rsquo;d have written first if I was working from a test. I wouldn&amp;rsquo;t need it yet&amp;hellip; I may never need it in production&amp;hellip;&amp;rdquo; I lied. It&amp;rsquo;s in CVS if I need it, so why keep it cluttering up the code when I don&amp;rsquo;t need it&amp;hellip;</description>
    </item>
    
    <item>
      <title>Test Driven OBEX</title>
      <link>https://lenholgate.com/blog/2004/02/test-driven-obex.html</link>
      <pubDate>Fri, 20 Feb 2004 16:52:47 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/02/test-driven-obex.html</guid>
      <description>Way back in June I was playing around with OBEX. I&amp;rsquo;ve had a quiet day today and went back to the code to progress it a little more (a client is making interested noises so I need to get back up to speed again). The code I wrote in June was before I&amp;rsquo;d become test infected&amp;hellip;
The first thing to do, of course, was to add a test harness and a mock object library to the OBEX library.</description>
    </item>
    
    <item>
      <title>Off to Saas-Fee again...</title>
      <link>https://lenholgate.com/blog/2004/02/off-to-saas-fee-again.html</link>
      <pubDate>Fri, 20 Feb 2004 13:36:40 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/02/off-to-saas-fee-again.html</guid>
      <description>We&amp;rsquo;ve just booked up with the Warren Smith Ski Academy again for another week of training in Saas-Fee. Not until early next season though :( But it&amp;rsquo;s the first trip booked&amp;hellip; Now, where and when to go this season&amp;hellip;</description>
    </item>
    
    <item>
      <title>Do blogs without comments have any value?</title>
      <link>https://lenholgate.com/blog/2004/02/do-blogs-without-comments-have-any-value.html</link>
      <pubDate>Fri, 20 Feb 2004 12:36:36 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/02/do-blogs-without-comments-have-any-value.html</guid>
      <description>I&amp;rsquo;ve noticed that quite a few blogs I read have turned off comments and trackbacks and removed all trace of any previous comments/trackbacks. I realise that the comment spam problem is a pain but I find that I treat blogs without comments/trackbacks as &amp;ldquo;less reliable sources&amp;rdquo;&amp;hellip;
I guess it depends on the theme of the blog content. Blogs that are just someone&amp;rsquo;s random thoughts and dont have an agenda probably don&amp;rsquo;t really need comments or trackbacks, after all, who cares what other people have to say on the topic.</description>
    </item>
    
    <item>
      <title>I always regret leaving the perfmon code out</title>
      <link>https://lenholgate.com/blog/2004/02/i-always-regret-leaving-the-perfmon-code-out.html</link>
      <pubDate>Fri, 20 Feb 2004 09:16:25 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/02/i-always-regret-leaving-the-perfmon-code-out.html</guid>
      <description>I had one of those &amp;ldquo;Doh!&amp;rdquo; moments yesterday. In summary, always put the performance monitoring code in early, looking at a program&amp;rsquo;s vital signs as a jiggly graph can show up all kinds of unexpected things&amp;hellip;
The work on the gateway server that I&amp;rsquo;m currently building for a client has been going well but yesterday I had a weirdness develop. Very rarely a test would fail because the server would fail to respond to a request.</description>
    </item>
    
    <item>
      <title>Is Open RBL a crock or is my DNS set up wrongly</title>
      <link>https://lenholgate.com/blog/2004/02/is-open-rbl-a-crock-or-is-my-dns-set-up-wrongly.html</link>
      <pubDate>Thu, 19 Feb 2004 17:38:04 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/02/is-open-rbl-a-crock-or-is-my-dns-set-up-wrongly.html</guid>
      <description>One of the people I email&amp;rsquo;s corporate mailer has started to bounce my mail with the following message:
*mx.example.com[xxx.xxx.xxx.xxx] said: 554 You have been blocked
by a DNS blacklist, please see:- http://www.openrbl.org/ (in reply to MAIL FROM command)* So I wander over to www.openrbl.org and type in my domain name and it tells me REJECT: invalid ip-address or non-resolvable hostname: jetbyte.com&amp;hellip;
Now, it&amp;rsquo;s true that jetbyte.com doesn&amp;rsquo;t have an ip address, but it has a perfectly valid MX record&amp;hellip; Shouldn&amp;rsquo;t OpenRBL be checking that the MX record is valid rather than checking that the domain has an ip?</description>
    </item>
    
    <item>
      <title>You learn something new every day</title>
      <link>https://lenholgate.com/blog/2004/02/you-learn-something-new-every-day.html</link>
      <pubDate>Mon, 16 Feb 2004 12:53:47 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/02/you-learn-something-new-every-day.html</guid>
      <description>I&amp;rsquo;m writing some tests where I need to log calls to function for the test log so that I can make sure the function is called in the expected way when the test runs. The logging version of the object under test derives from the object and adds the logging functionality and calls the object under test to do the work. Of course, for this to work, the functions that I&amp;rsquo;m interested in can&amp;rsquo;t be private.</description>
    </item>
    
    <item>
      <title>Can performance tests treat the object under test as a black box?</title>
      <link>https://lenholgate.com/blog/2004/02/can-performance-tests-treat-the-object-under-test-as-a-black-box.html</link>
      <pubDate>Thu, 12 Feb 2004 00:05:03 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/02/can-performance-tests-treat-the-object-under-test-as-a-black-box.html</guid>
      <description>Barry suggests that to do meaningful performance tests you need to know a bit out the way the thing that&amp;rsquo;s under test operates.
I guess he has a point given his reason for performance testing was to compare a new version of the thing under test with an older version of the same thing&amp;hellip;
Personally, I&amp;rsquo;d be tempted to leave the poorly performing tests in the test harness. Then add some comments about why these particular situations are unlikely to show up as real usage patterns and why the object under test performs poorly in these particular situations.</description>
    </item>
    
    <item>
      <title>Explicit callbacks or virtual methods</title>
      <link>https://lenholgate.com/blog/2004/02/explicit-callbacks-or-virtual-methods.html</link>
      <pubDate>Wed, 11 Feb 2004 17:26:02 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/02/explicit-callbacks-or-virtual-methods.html</guid>
      <description>I&amp;rsquo;m in a bit of a quandary. I&amp;rsquo;m writing a class that does processing on a byte stream. You poke bytes in, it does stuff, it gives you bytes out. My quandary revolves around how it gives you the bytes&amp;hellip;
The processor operates in two directions, that is, there&amp;rsquo;s an inside and an outside. It processes data traveling from inside to outside and also from outside to inside. Poking a set of bytes into the processor in one direction may or may not result in bytes being output in that direction and may or may not result in bytes being output in the other direction.</description>
    </item>
    
    <item>
      <title>.Net 1.1 TCP/IP wierdness fixed</title>
      <link>https://lenholgate.com/blog/2004/02/net-11-tcpip-wierdness-fixed.html</link>
      <pubDate>Wed, 11 Feb 2004 16:16:36 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/02/net-11-tcpip-wierdness-fixed.html</guid>
      <description>&amp;ldquo;Additional information: An operation on a socket could not be performed because the system lacked sufficient buffer space or because a queue was full&amp;rdquo;
I&amp;rsquo;ve managed to get the .Net 1.1 TCP/IP issue that gives the above error mesage when trying to use sockets on .Net 1.1 fixed. Thanks to Alex Lowe for pointing me in the right direction and for the guys at MS support for allowing me to call them up and tell them I need to download the hotfix for KB 826757.</description>
    </item>
    
    <item>
      <title>Quality of MS developer support</title>
      <link>https://lenholgate.com/blog/2004/02/quality-of-ms-developer-support.html</link>
      <pubDate>Fri, 06 Feb 2004 18:50:20 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/02/quality-of-ms-developer-support.html</guid>
      <description>Alex Lowe asks what Microsoft could do to improve their developer support.
In general I think they do a reasonable job given the huge surface area of APIs and products that need support; I think some of the MS staff blogs are helping too. But they could do more&amp;hellip;
What I&amp;rsquo;d like is more information, all of it, every scrap. :) Don&amp;rsquo;t bother cleaning it up, just make it available somewhere and let Google index it.</description>
    </item>
    
    <item>
      <title>I&#39;d rather have poor information than no information</title>
      <link>https://lenholgate.com/blog/2004/02/id-rather-have-poor-information-than-no-information.html</link>
      <pubDate>Fri, 06 Feb 2004 16:16:06 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/02/id-rather-have-poor-information-than-no-information.html</guid>
      <description>Roy&amp;rsquo;s post about information hoarding made me think, which is always good&amp;hellip; Last night I followed a link from Larkware to this article on MSDN about Pocket PC services. The article annoyed me, I&amp;rsquo;d have preferred that it had been better edited, but given the choice between having the information that&amp;rsquo;s in the article available or having it sitting in someone&amp;rsquo;s mailbox waiting to be edited I know what I&amp;rsquo;d prefer.</description>
    </item>
    
    <item>
      <title>We want information, information, information</title>
      <link>https://lenholgate.com/blog/2004/02/we-want-information-information-information.html</link>
      <pubDate>Fri, 06 Feb 2004 10:00:57 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/02/we-want-information-information-information.html</guid>
      <description>Who are you? The new number 2&amp;hellip; Who is number 1?
Looks like Roy Osherove is making waves with his comments about MVP information hoarding&amp;hellip; Having been in the position of being a developer searching for scraps of information on a MS technology that doesn&amp;rsquo;t appear to be documented as well as it could be I know where he&amp;rsquo;s coming from.
Sometimes, during the early stages of understanding, I find that I can google for answers better than I can phrase questions.</description>
    </item>
    
    <item>
      <title>Looking for more blogs to read</title>
      <link>https://lenholgate.com/blog/2004/02/looking-for-more-blogs-to-read.html</link>
      <pubDate>Thu, 05 Feb 2004 17:16:49 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/02/looking-for-more-blogs-to-read.html</guid>
      <description>I want some new and interesting blogs to read, so leave a comment if you have any suggestions. I subscribe to quite a few (opml file here) but I&amp;rsquo;m a bit tired of the Microsoft Employee Bleating Edge Blog stuff&amp;hellip; Ideally I&amp;rsquo;m looking for technical blogs with a &amp;ldquo;working programmer&amp;rdquo; slant. It would be nice if they were biased towards C++ but I don&amp;rsquo;t really care.
I think these guys are good, so more like this would be nice:</description>
    </item>
    
    <item>
      <title>Thought for the day</title>
      <link>https://lenholgate.com/blog/2004/02/thought-for-the-day-1.html</link>
      <pubDate>Thu, 05 Feb 2004 15:40:07 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/02/thought-for-the-day-1.html</guid>
      <description>*There are two ways of constructing a software design; one way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.
C. A. R. Hoare* From Joel&amp;rsquo;s discussion board&amp;hellip;</description>
    </item>
    
    <item>
      <title>Where do the mocks live?</title>
      <link>https://lenholgate.com/blog/2004/02/where-do-the-mocks-live.html</link>
      <pubDate>Mon, 02 Feb 2004 23:59:58 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/02/where-do-the-mocks-live.html</guid>
      <description>During the recent library adjustments the main aim was to add tests. As we write tests we create lots of mock objects. Our libraries are dependant on each other, as libraries tend to be, and this means that often a library uses an interface from another library&amp;hellip; When it comes to test the dependant library it&amp;rsquo;s often handy to be able to use the mock object that you created to test the library that you&amp;rsquo;re dependant on&amp;hellip; If you see what I mean&amp;hellip; The, slightly labored, point being, it&amp;rsquo;s important where you keep your mock objects&amp;hellip;</description>
    </item>
    
    <item>
      <title>Knocked a few things off the list...</title>
      <link>https://lenholgate.com/blog/2004/01/knocked-a-few-things-off-the-list.html</link>
      <pubDate>Fri, 30 Jan 2004 18:48:27 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/01/knocked-a-few-things-off-the-list.html</guid>
      <description>The refactoring and testing of The Server Framework code has gone pretty well. It&amp;rsquo;s not complete but at least we have some tests now and the code is broken down into slightly more cohesive lumps&amp;hellip;
Once the tests were in place and working we had to integrate the changes with the various projects that use the library; each of these projects pull the library in slightly different directions so the integration took a while.</description>
    </item>
    
    <item>
      <title>Ok, I&#39;m curious</title>
      <link>https://lenholgate.com/blog/2004/01/ok-im-curious.html</link>
      <pubDate>Wed, 28 Jan 2004 16:43:23 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/01/ok-im-curious.html</guid>
      <description>I get quite a bit of feedback about the socket server code but I don&amp;rsquo;t really know what people are using it for. So, if you can, leave a comment or drop me a mail and tell me.</description>
    </item>
    
    <item>
      <title>So, what do these tests look like then?</title>
      <link>https://lenholgate.com/blog/2004/01/so-what-do-these-tests-look-like-then.html</link>
      <pubDate>Wed, 28 Jan 2004 11:45:35 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/01/so-what-do-these-tests-look-like-then.html</guid>
      <description>After breaking the socket server into more manageable chunks I started writing the tests. CAsyncSocketConnectionManager is pretty easy to test, it only has one public function; Connect().
So, what exactly do these tests look like?
I don&amp;rsquo;t use a unit testing framework at present, I haven&amp;rsquo;t found a need. Whilst NUnit and JUnit are great I don&amp;rsquo;t feel that the C++ version adds much as C++ doesn&amp;rsquo;t support reflection and that&amp;rsquo;s where these frameworks really seem to win.</description>
    </item>
    
    <item>
      <title>How useful it could have been if...</title>
      <link>https://lenholgate.com/blog/2004/01/how-useful-it-could-have-been-if.html</link>
      <pubDate>Wed, 28 Jan 2004 08:36:40 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/01/how-useful-it-could-have-been-if.html</guid>
      <description>I&amp;rsquo;m writing tests for some code. I have a function that I&amp;rsquo;m testing that looks something like this:
bool CAsyncSocket::Read(bool throwOnFailure = false);
If C++ allowed us to overload a function call based on return type then we wouldn&amp;rsquo;t need the horrible throwOnFailure wart and the compiler could pick the right version depending on if we try to use the return value or not&amp;hellip; So a call like this: bool ok = pSocket-&amp;amp;gt;Read(); would return errors and a call like this: pSocket-&amp;amp;gt;Read(); would throw exceptions&amp;hellip;</description>
    </item>
    
    <item>
      <title>Hacking our way to the first test</title>
      <link>https://lenholgate.com/blog/2004/01/hacking-our-way-to-the-first-test.html</link>
      <pubDate>Tue, 27 Jan 2004 18:24:17 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/01/hacking-our-way-to-the-first-test.html</guid>
      <description>So I have some time on my hands and I&amp;rsquo;ve decided that The Server Framework code could do with some tests but before I can do that I need to refactor because the code was written before I became test infected and, well, it&amp;rsquo;s not as good as it could be&amp;hellip;
Step one, as always, is to work on decoupling the code to the point that it&amp;rsquo;s easy to test. This generally involves breaking the code apart into more cohesive chunks and then writing tests for the chunks.</description>
    </item>
    
    <item>
      <title>Admitting that your baby&#39;s ugly</title>
      <link>https://lenholgate.com/blog/2004/01/admitting-that-your-babys-ugly.html</link>
      <pubDate>Tue, 27 Jan 2004 11:12:54 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/01/admitting-that-your-babys-ugly.html</guid>
      <description>I have a couple of days to myself. We&amp;rsquo;ve just shipped some code to a client a couple of days ahead of schedule and we&amp;rsquo;re waiting to recieve a purchase order from another client so I find myself without any client work to do. I&amp;rsquo;ve decided to try and refactor The Server Framework code that we&amp;rsquo;re using a lot right now. Whilst working on the code that we&amp;rsquo;ve just shipped I realised that the new code I was writing was much easier to test than the socket server library that formed a major part of the project, so now that I have some time I&amp;rsquo;m going to try and rectify that.</description>
    </item>
    
    <item>
      <title>HeadCam2</title>
      <link>https://lenholgate.com/blog/2004/01/headcam2.html</link>
      <pubDate>Mon, 26 Jan 2004 15:01:08 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/01/headcam2.html</guid>
      <description>My new head cam arrangement worked well in Meribel. As you can see from the picture below, the new camera is much smaller than my previous rig.
The camcorder lives in my rucksack, the cables for video and remote control come out over my shoulder and the connections all happen in my chest pocket. The remote allows me to turn the camcorder on and off and start and stop recording. The bulletcam&amp;rsquo;s battery pack sits in my chest pocket and can be disconnected from the camera to save battery when not recording.</description>
    </item>
    
    <item>
      <title>Oh good, comment spam</title>
      <link>https://lenholgate.com/blog/2004/01/oh-good-comment-spam.html</link>
      <pubDate>Sun, 25 Jan 2004 22:40:46 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/01/oh-good-comment-spam.html</guid>
      <description>Just removed my first spam comments&amp;hellip; It&amp;rsquo;s almost nice that the spammers think I&amp;rsquo;m worth spamming, but only almost&amp;hellip; If this is anything like my email spam then I expect that this is just the start of a flood&amp;hellip; Does anyone have any advice on how to prevent this kind of stuff when using MovableType as your blog software? I&amp;rsquo;ve added the spammer&amp;rsquo;s IP addresses to the list of addresses that can&amp;rsquo;t comment&amp;hellip;</description>
    </item>
    
    <item>
      <title>Back from Meribel</title>
      <link>https://lenholgate.com/blog/2004/01/back-from-meribel.html</link>
      <pubDate>Sun, 25 Jan 2004 14:10:12 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/01/back-from-meribel.html</guid>
      <description>Just got back from a week&amp;rsquo;s skiing in and around Meribel. Great snow, great company, a good time was had by all.
Just holiday snaps&amp;hellip;.
We stayed in the Indiana Lodge and travelled with VIP. Thanks to Eli and Al, our chalet hosts, for excellent service, great food and interesting puzzles over dinner.
We had a couple of days of snowy weather at the start of the week and then mainly clear days.</description>
    </item>
    
    <item>
      <title>JetByte News: Fixed-price secure server development</title>
      <link>https://lenholgate.com/news/2004/01/fixed-price-secure-server-development.html</link>
      <pubDate>Fri, 16 Jan 2004 12:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/news/2004/01/fixed-price-secure-server-development.html</guid>
      <description>We&amp;rsquo;re working with BS&amp;amp;A Software again to extend the SSL gateway server that we developed for them back in 2003.</description>
    </item>
    
    <item>
      <title>Bitten by the one definition rule</title>
      <link>https://lenholgate.com/blog/2004/01/bitten-by-the-one-definition-rule.html</link>
      <pubDate>Wed, 14 Jan 2004 14:58:29 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/01/bitten-by-the-one-definition-rule.html</guid>
      <description>I&amp;rsquo;ve just wasted 20 minutes or so on a nasty bug. I&amp;rsquo;d added a bit of test code and suddenly some other tests were failing but the reason for the failure seemed to be that a class&amp;rsquo;s vtable was getting screwed up and a virtual function was jumping off into hyperspace&amp;hellip;
After some time stepping through the code for a while I could see that a function that should have been incrementing a data member was in fact stomping over part of the vtable.</description>
    </item>
    
    <item>
      <title>In C&#43;&#43; why isn&#39;t this a reference?</title>
      <link>https://lenholgate.com/blog/2004/01/in-c-why-isnt-this-a-reference.html</link>
      <pubDate>Sat, 10 Jan 2004 11:52:09 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/01/in-c-why-isnt-this-a-reference.html</guid>
      <description>In C++ every object has a &amp;ldquo;this&amp;rdquo; pointer. You could think of it as being passed as an implicit argument to every non static member function that the object has. It can never be null so why isn&amp;rsquo;t it a reference?
The reason I started wondering about this is that when using wiring objects together, such as when using parameterise from above, I often find myself wanting to pass a reference to the current class to some related object.</description>
    </item>
    
    <item>
      <title>Template shims</title>
      <link>https://lenholgate.com/blog/2004/01/template-shims.html</link>
      <pubDate>Fri, 09 Jan 2004 17:48:39 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/01/template-shims.html</guid>
      <description>I needed to implement the same interface twice in one object today. It took me a while to remember how I do this kind of thing so I thought it was worth a blog posting so that a) I can find it at a later date, b) other people can tell me of better ways to do this, and, c) other people can use the technique if they want to&amp;hellip;</description>
    </item>
    
    <item>
      <title>.Net 1.1 TcpClient strangeness</title>
      <link>https://lenholgate.com/blog/2004/01/net-11-tcpclient-strangeness.html</link>
      <pubDate>Wed, 07 Jan 2004 17:26:50 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/01/net-11-tcpclient-strangeness.html</guid>
      <description>There seems to be a wierd bug with .Net 1.1 and sockets&amp;hellip;
In essence, this code:
using System; using System.Net.Sockets; namespace ConsoleClient; { class Class1 { [STAThread] static void Main(string[] args) { TcpClient _socket = new TcpClient(); } } } works with .Net 1.0 and fails with .Net 1.1. The error message on 1.1 is this; &amp;ldquo;Additional information: An operation on a socket could not be performed because the system lacked sufficient buffer space or because a queue was full&amp;rdquo;, which is the long version of WSAENOBUFS.</description>
    </item>
    
    <item>
      <title>Use and misuse of C&#43;&#43; nested classes</title>
      <link>https://lenholgate.com/blog/2004/01/use-and-misuse-of-c-nested-classes.html</link>
      <pubDate>Mon, 05 Jan 2004 11:24:47 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/01/use-and-misuse-of-c-nested-classes.html</guid>
      <description>I like nested classes in C++. They allow a nicely fine grained approach to naming. Where a class may need to be called CRegistryKeyIterator if declared at namespace level it can be called Iterator if nested inside the CRegistryKey class. The problem is I think I tend to overuse the feature&amp;hellip;
I&amp;rsquo;m restructuring some code at present. This involves decoupling the IO Completion Port code for async IO from the socket server code in The Server Framework so that it can be used for file IO as well as network IO.</description>
    </item>
    
    <item>
      <title>2003, The year of the test</title>
      <link>https://lenholgate.com/blog/2004/01/2003-the-year-of-the-test.html</link>
      <pubDate>Mon, 05 Jan 2004 10:19:47 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/01/2003-the-year-of-the-test.html</guid>
      <description>Looking back on my blog entries for 2003 it&amp;rsquo;s reasonably obvious that the big thing for me in 2003 was testing. TDD seems to work well for me and my clients. It&amp;rsquo;s not a silver bullet but it is a useful tool and I find that when you&amp;rsquo;re operating in TDD mode that nice code just unrolls in a nice, stress-free manner. What&amp;rsquo;s more, the code usually seems to turn out better than that produced without using TDD.</description>
    </item>
    
    <item>
      <title>New Year</title>
      <link>https://lenholgate.com/blog/2004/01/new-year.html</link>
      <pubDate>Mon, 05 Jan 2004 09:58:58 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2004/01/new-year.html</guid>
      <description>A combination of events in the run up to my Christmas break meant that I have ended up spending almost 2 weeks without feeling the urge to write any code. I&amp;rsquo;ve just chilled out and relaxed, watched some DVDs, saw LOTR ROTK, played some SSX3 and ate and drank too much.
At the weekend I started to get my head back into coding thoughts by restructuring a couple of libraries that make up The Server Framework.</description>
    </item>
    
    <item>
      <title>Retiring Princess Leia</title>
      <link>https://lenholgate.com/blog/2003/12/retiring-princess-leia.html</link>
      <pubDate>Wed, 31 Dec 2003 11:22:20 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/12/retiring-princess-leia.html</guid>
      <description>A long time ago, in a galaxy far, far away&amp;hellip; I made a contraption to enable me to strap a camcorder to my head whilst I skiied. As you can see, it wasn&amp;rsquo;t the most subtle of devices.
Well, times change. I upgraded my camcorder this year because I wanted a device with DV in for archive purposes. The new camera also has AV in and for Christmas Michelle bought me a weatherproof bullet camera which can plug into the AV in on the camcorder.</description>
    </item>
    
    <item>
      <title>Thought for the day</title>
      <link>https://lenholgate.com/blog/2003/12/thought-for-the-day.html</link>
      <pubDate>Tue, 23 Dec 2003 16:09:28 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/12/thought-for-the-day.html</guid>
      <description>I have only ever made one prayer to God, a very short one: &amp;ldquo;O Lord, make my enemies ridiculous.&amp;rdquo; And God granted it.
Voltaire
From a comment in ESR&amp;rsquo;s blog. Given our current dealings with our building&amp;rsquo;s mismanaging agents this seems particularly appropriate right now.</description>
    </item>
    
    <item>
      <title>Thinking, Discipline and Courage...</title>
      <link>https://lenholgate.com/blog/2003/12/thinking-discipline-and-courage.html</link>
      <pubDate>Tue, 23 Dec 2003 10:00:09 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/12/thinking-discipline-and-courage.html</guid>
      <description>Wayne Allen asks why so much code is so bad? Why the majority of code, even new code, that he sees as a consultant is terrible.
Meanwhile, Rory Blyth is complaining about &amp;ldquo;Paper bag&amp;rdquo; code.
I think Wayne hits the nail on the head with his comment about much of the problem being down to the individuals involved willingness to learn and change. But there&amp;rsquo;s more. Doing a good job requires lots of thinking, lots of self-discipline and lots of courage.</description>
    </item>
    
    <item>
      <title>How times change</title>
      <link>https://lenholgate.com/blog/2003/12/how-times-change.html</link>
      <pubDate>Sun, 21 Dec 2003 12:22:23 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/12/how-times-change.html</guid>
      <description>Today&amp;rsquo;s job is putting up the Christmas tree. That involves climbing around in our storage space &amp;ldquo;loft&amp;rdquo;. We didn&amp;rsquo;t use the tree last year, so it&amp;rsquo;s now got 2 year&amp;rsquo;s worth of stuff in front of it. I feel like I&amp;rsquo;m digging back through my past to get to it.
I&amp;rsquo;ve just pulled out my previous pair of skis. 2m+ Salomon Superforce 2S. Straight as a very straight thing. Towering a good 8 inches above me (I know&amp;hellip; but I was young, and keen, and they were wonderful at the time).</description>
    </item>
    
    <item>
      <title>End of the refactoring project</title>
      <link>https://lenholgate.com/blog/2003/12/end-of-the-refactoring-project.html</link>
      <pubDate>Sat, 20 Dec 2003 11:42:14 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/12/end-of-the-refactoring-project.html</guid>
      <description>My time working on the refactoring project has come to an end; at least for a while. Here&amp;rsquo;s a little look back over what we achieved.
I&amp;rsquo;ve been working on the &amp;ldquo;Refactoring Project&amp;rdquo; for around 9 months now. I&amp;rsquo;ve worked alongside the team responsible for the project several days a week for most weeks of that period. In that time we&amp;rsquo;ve tried to take a project that had become a big ball of mud, whose original developer had left, and make it more maintainable and testable and correct.</description>
    </item>
    
    <item>
      <title>Ski Weekend, Courmayer, Gressoney, Chamonix</title>
      <link>https://lenholgate.com/blog/2003/12/ski-weekend-courmayer-gressoney-chamonix.html</link>
      <pubDate>Thu, 18 Dec 2003 08:34:13 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/12/ski-weekend-courmayer-gressoney-chamonix.html</guid>
      <description>We flew to Geneva last Thursday evening and skiied in Italy and France over the weekend.
Just holiday snaps.
We were travelling with Ski Weekend. They usually run you around the Chamonix resorts, but at this time of year there&amp;rsquo;s often not much open in Chamonix itself so they take you further afield.
Day 1 was a quick trip through the Mont Blanc tunnel to Courmayer. Which had good snow, nice pistes and few people.</description>
    </item>
    
    <item>
      <title>Mismanaging Agents</title>
      <link>https://lenholgate.com/blog/2003/12/mismanaging-agents.html</link>
      <pubDate>Thu, 18 Dec 2003 08:01:36 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/12/mismanaging-agents.html</guid>
      <description>I still have my &amp;lsquo;director of the management company for a building of 78 apartments&amp;rsquo; hat on. It seems to have one of those little straps that goes under your chin. I don&amp;rsquo;t seem to be able to undo the strap&amp;hellip;
I hope that the worst is over. We held a meeting with the residents which went really well, we got 100% support for our actions and lots of offers of help.</description>
    </item>
    
    <item>
      <title>Edit my points</title>
      <link>https://lenholgate.com/blog/2003/12/edit-my-points.html</link>
      <pubDate>Tue, 02 Dec 2003 21:45:42 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/12/edit-my-points.html</guid>
      <description>The refactoring project rumbles on but my time with it is drawing to a close. This week the currency traders decided that they wanted to be able to manually override the live data in some circumstances. They wanted to be able to edit a live data point, set its value to a fixed amount and have all dependant displays take this new value into account.
Like most things in computing an extra level of indirection saved the day&amp;hellip;</description>
    </item>
    
    <item>
      <title>Not a lot of coding going on</title>
      <link>https://lenholgate.com/blog/2003/11/not-a-lot-of-coding-going-on.html</link>
      <pubDate>Sun, 30 Nov 2003 13:35:47 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/11/not-a-lot-of-coding-going-on.html</guid>
      <description>I&amp;rsquo;ve been really busy this last week. The building in which I live is having some issues with its managing agent. I&amp;rsquo;m on the board of directors for the &amp;ldquo;company&amp;rdquo; that runs the building and this week things finally came to a head and we had to take over day to day management of the building from the managing agents that were previously &amp;ldquo;acting&amp;rdquo; for us. This has led to me being really busy with all kinds of stuff that I wouldn&amp;rsquo;t usually care to do&amp;hellip;</description>
    </item>
    
    <item>
      <title>Promote a mock</title>
      <link>https://lenholgate.com/blog/2003/11/promote-a-mock.html</link>
      <pubDate>Sun, 23 Nov 2003 13:52:28 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/11/promote-a-mock.html</guid>
      <description>I knew it would happen eventually&amp;hellip; As mentioned earlier all of the email filtering code has been developed without any sign of a main(). Now that the time has come to create the actual filter program I found that I didn&amp;rsquo;t actually have a real version of one of the objects that I required, I only had a mock version for testing. The thing is, the mock version is pretty much all I need for the real version, so it looks like it&amp;rsquo;s time to promote it&amp;hellip;</description>
    </item>
    
    <item>
      <title>Bug hunt on the refactoring project</title>
      <link>https://lenholgate.com/blog/2003/11/bug-hunt-on-the-refactoring-project.html</link>
      <pubDate>Fri, 21 Nov 2003 08:21:27 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/11/bug-hunt-on-the-refactoring-project.html</guid>
      <description>The refactoring project rolls on. Mostly it&amp;rsquo;s been more of the same so I haven&amp;rsquo;t bothered boring my reader with the details. This week we had an interesting bug to fix. The bug had appeared in a much earlier version, way back in July, but it had only been reported by one user and we could never duplicate the problem. This week we managed to duplicate it, and then we needed to work out what it was and when it was added to the source&amp;hellip;</description>
    </item>
    
    <item>
      <title>The Maytag customer service experience</title>
      <link>https://lenholgate.com/blog/2003/11/the-maytag-customer-service-experience.html</link>
      <pubDate>Fri, 21 Nov 2003 05:50:43 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/11/the-maytag-customer-service-experience.html</guid>
      <description>We have a Maytag fridge and very nice it is too. However, sometimes it seems to be too cold and things freeze up. After far too long procrastinating and just excepting that cold was how fridges were supposed to be I called Maytag for support&amp;hellip;
I hadn&amp;rsquo;t bothered to register the fridge when I bought it. We were busy with doing up the flat and sending in the registration card seemed low on the list of priorities.</description>
    </item>
    
    <item>
      <title>Matrix Reloaded Revisited</title>
      <link>https://lenholgate.com/blog/2003/11/matrix-reloaded-revisited.html</link>
      <pubDate>Thu, 20 Nov 2003 23:29:28 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/11/matrix-reloaded-revisited.html</guid>
      <description>We haven&amp;rsquo;t had time to go see Matrix Revolutions yet. Too much to do, too little time. We watched Reloaded on DVD last night and both enjoyed it much more than when we saw it originally at the cinema&amp;hellip;
I think we agreed that the reason we enjoyed it more (and that the fight scenes didn&amp;rsquo;t seem as excessively drawn out and that it didn&amp;rsquo;t seem quite so slow) was that we weren&amp;rsquo;t both sitting there waiting desperately for important plot stuff to occur.</description>
    </item>
    
    <item>
      <title>Rolling...</title>
      <link>https://lenholgate.com/blog/2003/11/rolling.html</link>
      <pubDate>Thu, 20 Nov 2003 18:45:17 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/11/rolling.html</guid>
      <description>The first two filters were pretty easy. I was on a roll and the other filters were implemented just as quickly&amp;hellip;
Now that I could parse 822 addresses blacklists and whitelists were easy to implement. Some refactoring could be done to remove the common &amp;rsquo;list&amp;rsquo; handling as effectively a blacklist is simply a !whitelist&amp;hellip;
Once I had a whitelist filter I decided that it might be useful to have a way of ORing two filters together, so we could filter a filter that does something like &amp;ldquo;if the message isnt in the whitelist then strip all attachments&amp;rdquo;&amp;hellip; An Or filter was easy to implement and test once I created a mock filter that allowed me to programmatically control what I returned from the call to FilterMessage().</description>
    </item>
    
    <item>
      <title>Just enough RFC822</title>
      <link>https://lenholgate.com/blog/2003/11/just-enough-rfc822.html</link>
      <pubDate>Thu, 20 Nov 2003 16:48:49 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/11/just-enough-rfc822.html</guid>
      <description>Second on my list of email filters was a filter that splits a &amp;lsquo;domain mailbox&amp;rsquo; into several different mailboxes depending on the username that the email is addressed to. This is basically just an intelligent version of the mailbox writing filter. The problem was, it needed to understand RFC822 addressing&amp;hellip;
I have several POP3 mailboxes that work at a domain level. For example I can recieve pretty.much.anything@lenholgate.com. The guys that manage the domain supply me with a single POP3 mailbox and I&amp;rsquo;d like to split it locally using a mail filter.</description>
    </item>
    
    <item>
      <title>The one where I dont use XML</title>
      <link>https://lenholgate.com/blog/2003/11/the-one-where-i-dont-use-xml.html</link>
      <pubDate>Thu, 20 Nov 2003 14:33:36 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/11/the-one-where-i-dont-use-xml.html</guid>
      <description>So I have an email filter that can write messages to another mailbox. I need to supply it, and all other filters that I might write, with some configuration data. I could use XML but I dont&amp;hellip;
Filters are given an instance of an IFilterDataManager when they&amp;rsquo;re created; the idea being that they can obtain any configuration data that they need from it. More advanced filters might also want to write data back once they&amp;rsquo;re done, but that&amp;rsquo;s a story for another day&amp;hellip;</description>
    </item>
    
    <item>
      <title>Filtering mail</title>
      <link>https://lenholgate.com/blog/2003/11/filtering-mail.html</link>
      <pubDate>Thu, 20 Nov 2003 13:08:50 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/11/filtering-mail.html</guid>
      <description>Now that I can retrieve and serve it up again via a POP3 I want to do stuff to it in between retrieving it and serving it.
The idea was to have a series of filters that get passed each message, Do Stuff ™ and either allow the message to be passed on to the next filter or end the filtering process.
Most of that works now, here&amp;rsquo;s how I got there.</description>
    </item>
    
    <item>
      <title>F Lock fix</title>
      <link>https://lenholgate.com/blog/2003/11/f-lock-fix.html</link>
      <pubDate>Sat, 15 Nov 2003 11:19:18 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/11/f-lock-fix.html</guid>
      <description>Ok, I usually hate those &amp;lsquo;me too&amp;rsquo; blog postings but&amp;hellip;
Here&amp;rsquo;s a &amp;ldquo;fix&amp;rdquo; for the fact that on Microsoft keyboards that have an &amp;ldquo;F Lock&amp;rdquo; key to change how the function keys work the default power up state is &amp;ldquo;wrong&amp;rdquo;&amp;hellip;.
From &amp;ldquo;The furrygoat experience&amp;rdquo;, via &amp;ldquo;ISerializable&amp;rdquo;. Thanks guys&amp;hellip;</description>
    </item>
    
    <item>
      <title>Bluetooth on XP</title>
      <link>https://lenholgate.com/blog/2003/11/bluetooth-on-xp.html</link>
      <pubDate>Sat, 15 Nov 2003 09:58:14 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/11/bluetooth-on-xp.html</guid>
      <description>I never expected the Bluetooth sockets entry to be so popular &amp;hellip; From the comments on that entry it seems a lot of people are having trouble with getting devices to work with XP&amp;rsquo;s bluetooth support. To help out a little here&amp;rsquo;s my proof of concept test project.</description>
    </item>
    
    <item>
      <title>Dealing with the simplest things</title>
      <link>https://lenholgate.com/blog/2003/11/dealing-with-the-simplest-things.html</link>
      <pubDate>Thu, 06 Nov 2003 20:40:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/11/dealing-with-the-simplest-things.html</guid>
      <description>The POP3 client is now complete. It can download messages from POP3 servers and store them in a message store. I&amp;rsquo;ve implemented a file system based message store that is compatible with the POP3 server code&amp;rsquo;s file system message store. We can download messages from server&amp;rsquo;s and make them available via our server.
As expected the test first approach had driven the design in a simple and decoupled direction; eventually some of the simple decisions were inappropriate so I added some tests and refactored&amp;hellip;</description>
    </item>
    
    <item>
      <title>JetByte News: WallStreet Money Markets and custom FX systems </title>
      <link>https://lenholgate.com/news/2003/11/wallstreet-money-markets-and-custom-fx-systems.html</link>
      <pubDate>Sat, 01 Nov 2003 12:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/news/2003/11/wallstreet-money-markets-and-custom-fx-systems.html</guid>
      <description>Len is back working with the Commerzbank Bonds and Money Markets teams in London helping them with their transition from WallStreet Money Markets software to some custom FX trading software written in C++ and running as an ActiveX control.</description>
    </item>
    
    <item>
      <title>I&#39;d like a refactoring lint</title>
      <link>https://lenholgate.com/blog/2003/10/id-like-a-refactoring-lint.html</link>
      <pubDate>Tue, 28 Oct 2003 22:36:11 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/10/id-like-a-refactoring-lint.html</guid>
      <description>So a refactoring editor doesn&amp;rsquo;t float my boat; a lint tool that warned me that there were bad smells in the code would&amp;hellip;
Right now I use Gimpel Lint as a code review tool. I run it, it tells me nasty things about the code, I listen, fix or ignore. It would be nice if it could tell me that there were bad smells. I think this is where real value could come from refactoring tools.</description>
    </item>
    
    <item>
      <title>A sustainable pace</title>
      <link>https://lenholgate.com/blog/2003/10/a-sustainable-pace.html</link>
      <pubDate>Tue, 28 Oct 2003 22:07:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/10/a-sustainable-pace.html</guid>
      <description>Ok, it&amp;rsquo;s that &amp;lsquo;wine&amp;rsquo; time of the evening. Miche is working late, I&amp;rsquo;ve eaten and am close to finishing off a nice bottle of Pinot Noir and my thoughts turn to people being excited by refactoring editors&amp;hellip;
Firstly: I&amp;rsquo;ve never used a program that facilitated automated refactoring, so be gentle&amp;hellip;
Right, so we can select a block of code, right click, select &amp;rsquo;extract method&amp;rsquo; and the editor does all of the cut, paste and argument passing/receiving fixups&amp;hellip; Does that really take people more time to do manually than it does to let the editor do it?</description>
    </item>
    
    <item>
      <title>iPaq upgrade</title>
      <link>https://lenholgate.com/blog/2003/10/ipaq-upgrade.html</link>
      <pubDate>Mon, 27 Oct 2003 23:26:47 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/10/ipaq-upgrade.html</guid>
      <description>Finally got the Pocket PC 2003 upgrade for my iPaq 3970. The upgrade went nice and smoothly and the iPaq feels quite a bit faster and everything seems a little more polished and easy to use. So far it seems that it was worth the money&amp;hellip;</description>
    </item>
    
    <item>
      <title>POP3 Client almost complete</title>
      <link>https://lenholgate.com/blog/2003/10/pop3-client-almost-complete.html</link>
      <pubDate>Sat, 25 Oct 2003 11:52:56 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/10/pop3-client-almost-complete.html</guid>
      <description>The test driven development of the POP3 client code is almost complete. The development proceeded in a similar manner to the server code and I&amp;rsquo;m left with the same thing to write; the message store&amp;hellip;
I was quite pleased that the entire client development could be done without needing to connect to a real POP3 server at all. In fact, up until last night, I didn&amp;rsquo;t have any code that the client could use to talk over sockets.</description>
    </item>
    
    <item>
      <title>Way behind the curve</title>
      <link>https://lenholgate.com/blog/2003/10/way-behind-the-curve.html</link>
      <pubDate>Tue, 21 Oct 2003 22:45:33 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/10/way-behind-the-curve.html</guid>
      <description>I know I&amp;rsquo;m way behind the curve with this, but&amp;hellip; I downloaded Virtual PC from the MDSN subscriber downloads at the weekend. It rocks. I needed to try something out on a Windows 98 box and I didn&amp;rsquo;t fancy repaving one of my machines so I went virtual. What&amp;rsquo;s cool is that once you&amp;rsquo;ve booted the virgin virtual PC and installed your OS of choice you can just copy the drive somewhere and use it again and again.</description>
    </item>
    
    <item>
      <title>Sniff my packets!</title>
      <link>https://lenholgate.com/blog/2003/10/sniff-my-packets.html</link>
      <pubDate>Tue, 21 Oct 2003 20:26:23 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/10/sniff-my-packets.html</guid>
      <description>Barry sent me an interesting link to a piece that points out just how easy it is to bypass wireless network security.
I wonder if you can get a Bart Simpson shirt with him saying &amp;ldquo;Sniff my packets&amp;rdquo; rather than &amp;ldquo;Eat my shorts&amp;rdquo;&amp;hellip;</description>
    </item>
    
    <item>
      <title>Dirty Little Secret: Test code is fun to write</title>
      <link>https://lenholgate.com/blog/2003/10/dirty-little-secret-test-code-is-fun-to-write.html</link>
      <pubDate>Tue, 21 Oct 2003 20:10:50 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/10/dirty-little-secret-test-code-is-fun-to-write.html</guid>
      <description>I&amp;rsquo;ve been busy :( but it&amp;rsquo;s paid busy so I suppose I can&amp;rsquo;t complain&amp;hellip;
This evening I got some time to myself to finally sit down and see how hard it would be to use all of my previous test code plus the real production POP3 server and command parser to act as a test framework for my POP3 client.
It took just over an hour to plug it all together and then it just kinda worked&amp;hellip;</description>
    </item>
    
    <item>
      <title>James Antill doesn&#39;t like TDD</title>
      <link>https://lenholgate.com/blog/2003/10/james-antill-doesnt-like-tdd.html</link>
      <pubDate>Mon, 20 Oct 2003 08:25:35 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/10/james-antill-doesnt-like-tdd.html</guid>
      <description>And this is why I hate TDD, testing is a great thing. But testing too early is bad, and you are obviuosly doing that. First you need to know what your code has to do in full. For instance even if you wanted to have both sync. and async. APIs (I personally abhore sync. APIs due to non-scalability) the obvious implementation is to have something like&amp;hellip;
James Antill - in a comment on my Tangled Testing entry.</description>
    </item>
    
    <item>
      <title>lessonOfTheWeek == !onesize.fits(all)</title>
      <link>https://lenholgate.com/blog/2003/10/lessonoftheweek-onesizefitsall.html</link>
      <pubDate>Fri, 17 Oct 2003 08:47:41 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/10/lessonoftheweek-onesizefitsall.html</guid>
      <description>I&amp;rsquo;ve enjoyed the hoo har over exceptions this week. It&amp;rsquo;s made me think and analyse and reassess what I do. I&amp;rsquo;ll be continuing pretty much as before, but it&amp;rsquo;s worth spending the time to think about these things once in a while.
It was interesting to see people defending their positions and how some were open to new and different ideas and how some were not. It was useful to be reminded that what I consider an acceptable development trade-off may be completely different to what someone working on embedded stuff thinks is acceptable.</description>
    </item>
    
    <item>
      <title>Tangled testing?</title>
      <link>https://lenholgate.com/blog/2003/10/tangled-testing.html</link>
      <pubDate>Fri, 17 Oct 2003 08:28:31 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/10/tangled-testing.html</guid>
      <description>Last night I started on my POP3 client code. I didn&amp;rsquo;t know where to start; I wasn&amp;rsquo;t really in the mood, so I wrote a test&amp;hellip; That got the ball rolling. As usual the test first thing left me with a nicely decoupled class to write. Now I&amp;rsquo;m in a bit of a quandary about how to mock up the server that I need to test the client against&amp;hellip;
The point of the CPOP3Client class is to provide a programmatic way to send POP3 commands and receive the results, parse them and present them in a way that&amp;rsquo;s easy to manipulate programmatically.</description>
    </item>
    
    <item>
      <title>Unexceptional examples</title>
      <link>https://lenholgate.com/blog/2003/10/unexceptional-examples.html</link>
      <pubDate>Thu, 16 Oct 2003 00:32:20 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/10/unexceptional-examples.html</guid>
      <description>We&amp;rsquo;re going to run out of amusing titles for these exception related blog entries sooner or later&amp;hellip;
Joel wants Ned to rename the functions in his &amp;rsquo;exceptions are better&amp;rsquo; example. He wants InstallSoftware(), CopyFiles() and MakeRegistryEntries(). Jesse Ezell leapt in with a C# version which includes the rollback functionality that Joel was undoubtedly hinting at. The thing is, although Jesse is defending the use of exceptions, I think his example is making the case for the other side&amp;hellip;</description>
    </item>
    
    <item>
      <title>Tests and TDD in anger</title>
      <link>https://lenholgate.com/blog/2003/10/tests-and-tdd-in-anger.html</link>
      <pubDate>Wed, 15 Oct 2003 11:45:33 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/10/tests-and-tdd-in-anger.html</guid>
      <description>This week we started to make some changes to the FX code. The existing code made some strange assumptions about some of the edge cases and the resulting display was occasionally inconsistent. We fixed that, and the tests saved us from a couple of embarrassing mistakes.
Meanwhile, in my free time, the test driven POP3 server development continues. I now have a working server that can run off of a message store that lives on the file system and can do all the things that a POP3 server is supposed to do.</description>
    </item>
    
    <item>
      <title>Exceptions are for exceptional situations</title>
      <link>https://lenholgate.com/blog/2003/10/exceptions-are-for-exceptional-situations.html</link>
      <pubDate>Wed, 15 Oct 2003 08:00:26 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/10/exceptions-are-for-exceptional-situations.html</guid>
      <description>Like drumming up traffic to your site, perhaps? ;)
On Monday Joel Spolsky wrote a controversial piece about exceptions; he hates them. Much blog cross linking and local discussion ensued. Today he&amp;rsquo;s followed that piece up with a piece that basically says &amp;rsquo;exceptions can be good and they can be bad, it&amp;rsquo;s a design tradeoff&amp;rsquo;. Which, of course, takes all the controversy out of the original posting; strangely I was expecting something like this&amp;hellip;</description>
    </item>
    
    <item>
      <title>MSDN Reloaded</title>
      <link>https://lenholgate.com/blog/2003/10/msdn-reloaded.html</link>
      <pubDate>Fri, 10 Oct 2003 18:54:04 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/10/msdn-reloaded.html</guid>
      <description>Wheee. I can throw all of my existing MSDN disks in the disk bucket and I don&amp;rsquo;t need to keep wondering which is the latest version. They&amp;rsquo;ve changed my subscription &amp;lsquo;for the better&amp;rsquo;&amp;hellip; Hmm, it seems that now the colours will be used to identify the type of disk (I&amp;rsquo;m sure that&amp;rsquo;s how it used to be before they changed the subscription &amp;lsquo;for the better&amp;rsquo; last time around) and the major numbers will stay the same when a disk replaces another disk, only the minor number will increment&amp;hellip; Sounds sensible&amp;hellip; I hope it works.</description>
    </item>
    
    <item>
      <title>I&#39;ve got a brand new combine harvester and I&#39;ll give you the key...</title>
      <link>https://lenholgate.com/blog/2003/10/ive-got-a-brand-new-combine-harvester-and-ill-give-you-the-key.html</link>
      <pubDate>Wed, 08 Oct 2003 21:27:06 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/10/ive-got-a-brand-new-combine-harvester-and-ill-give-you-the-key.html</guid>
      <description>The harvesting of the SSL server code took about an hour in all. It was simply a case of shuffling some code around, ripping it out of a project and into the library and then adjusting the original server and the POP3 server to suit. So, I now have a POP3 server on 110 and 995; and Outlook even lets me know that my server certificate is bogus&amp;hellip; I guess I need a real message store now&amp;hellip;</description>
    </item>
    
    <item>
      <title>Harvest Time</title>
      <link>https://lenholgate.com/blog/2003/10/harvest-time.html</link>
      <pubDate>Wed, 08 Oct 2003 17:42:40 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/10/harvest-time.html</guid>
      <description>I had a bit of spare time today so I finished the POP3 server integration. It went nice and smoothly and I tested the result with telnet and Outlook. During the Outlook testing I noticed the &amp;rsquo;this server requires a secure connection (SSL)&amp;rsquo; checkbox. I hadn&amp;rsquo;t been aware that there was a standard port (995) for accessing a POP3 server over SSL. My server currently only supports port 110 for unencrypted transport but I&amp;rsquo;ve got code that can turn my server into an SSL enabled server&amp;hellip; Looks like it&amp;rsquo;s time to harvest that into The Server Framework.</description>
    </item>
    
    <item>
      <title>JetByte News: Fixed price SSL server development</title>
      <link>https://lenholgate.com/news/2003/10/fixed-price-ssl-server-development.html</link>
      <pubDate>Wed, 08 Oct 2003 12:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/news/2003/10/fixed-price-ssl-server-development.html</guid>
      <description>We&amp;rsquo;re developing a secure gateway server for BS&amp;amp;A Software&amp;rsquo;s ASP.Net developers using OpenSSL and The Server Framework.</description>
    </item>
    
    <item>
      <title>Why objects should keep it on the inside</title>
      <link>https://lenholgate.com/blog/2003/10/why-objects-should-keep-it-on-the-inside.html</link>
      <pubDate>Tue, 07 Oct 2003 21:27:53 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/10/why-objects-should-keep-it-on-the-inside.html</guid>
      <description>So, I&amp;rsquo;m integrating this POP3 code with my server and the first thing I do is create null message store. I haven&amp;rsquo;t implemented the message store yet, so in order for me to integrate I need a message store that just says yes to everyone being a user and provides mailboxes that are always empty&amp;hellip; The test driven development has made this reasonably easy, I have a message store interface so I just need to stub out the methods appropriately.</description>
    </item>
    
    <item>
      <title>Does TDD lead to earlier integration?</title>
      <link>https://lenholgate.com/blog/2003/10/does-tdd-lead-to-earlier-integration.html</link>
      <pubDate>Sat, 04 Oct 2003 12:16:29 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/10/does-tdd-lead-to-earlier-integration.html</guid>
      <description>I&amp;rsquo;m developing a POP3 server. I&amp;rsquo;ve been developing the protocol handler test first and it&amp;rsquo;s nearly done. I haven&amp;rsquo;t started on the mailstore itself yet but I could easilly integrate the POP3 code into the server code and have a functional POP3 server&amp;hellip;
Due to the test first nature of the development, the protocol handler talks to the mailstore via an interface that&amp;rsquo;s passed to it. I don&amp;rsquo;t have a real mailstore yet, but I could mock one up based on the mock mailstore from my test harness and pass this to the POP3 handler in the server.</description>
    </item>
    
    <item>
      <title>Murphy&#39;s Law</title>
      <link>https://lenholgate.com/blog/2003/10/murphys-law.html</link>
      <pubDate>Sat, 04 Oct 2003 08:16:05 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/10/murphys-law.html</guid>
      <description>This is a nice story about the birth of Murphy&amp;rsquo;s Law. Yes, there was really a Murphy&amp;hellip;
From the 2003 Ig Nobel prizes, via Barry.</description>
    </item>
    
    <item>
      <title>Everyone there works on Word, I&#39;m a bespoke tailor</title>
      <link>https://lenholgate.com/blog/2003/10/everyone-there-works-on-word-im-a-bespoke-tailor.html</link>
      <pubDate>Fri, 03 Oct 2003 21:57:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/10/everyone-there-works-on-word-im-a-bespoke-tailor.html</guid>
      <description>Joe Bork explains why he now tells people he works on Word as a way of connecting with something people understand. I found that people seemed to understand what I did if I compared Word to a Moss Bros suit and then explained that I was a Savile Row tailor.
In fact, I didn&amp;rsquo;t even come up with the analogy, one of the previously non-comprehending non-techies did. It was a family (Miche&amp;rsquo;s, not mine) Sunday lunch at The Social and I was trying to explain how, since I&amp;rsquo;m a programmer, I don&amp;rsquo;t necessarily just know how to fix all manner of miscellaneous computer setup problems and how that was more a support role&amp;hellip; Blank looks all around.</description>
    </item>
    
    <item>
      <title>Windows update should...</title>
      <link>https://lenholgate.com/blog/2003/10/windows-update-should.html</link>
      <pubDate>Thu, 02 Oct 2003 19:52:06 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/10/windows-update-should.html</guid>
      <description>Windows update should let you flag updates as things you dont want. You should be able to add some text if you want; so it can remind you why you didnt want it, and say to it &amp;ldquo;don&amp;rsquo;t show me this one again unless I ask&amp;hellip;&amp;rdquo;.</description>
    </item>
    
    <item>
      <title>Comment rot</title>
      <link>https://lenholgate.com/blog/2003/10/comment-rot.html</link>
      <pubDate>Thu, 02 Oct 2003 08:32:56 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/10/comment-rot.html</guid>
      <description>There&amp;rsquo;s an interesting discussion going on on the ACCU&amp;rsquo;s mailing list at present. It&amp;rsquo;s about the value of comments in code. This is one of those topics that comes around every so often and this time I decided to dive in with some controversial suggestions.
The discussion started with someone saying how they&amp;rsquo;ve just had a code review where the reviewer insisted on adding the following comment:
// Checks the name length void CheckNameLength() This moved into a discussion about block comments in headers and my position was that as soon as any of them start to get out of date the value of any of them starts to diminish.</description>
    </item>
    
    <item>
      <title>Back to the refactoring project</title>
      <link>https://lenholgate.com/blog/2003/10/back-to-the-refactoring-project.html</link>
      <pubDate>Wed, 01 Oct 2003 20:24:25 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/10/back-to-the-refactoring-project.html</guid>
      <description>I&amp;rsquo;ve spent the last couple of days back with The Refactoring Project. They&amp;rsquo;ve done well in my absence. They managed 3 releases; all correctly tagged and repeatable. They started some refactoring of their own and, at first glance, it looks like they&amp;rsquo;ve taken on board lots of the suggestions I&amp;rsquo;ve been making over the last months. They&amp;rsquo;ve fixed a couple of new bugs in the FX code and whilst doing so found that a) the bugs were easy to locate, b) they were easy to fix with very localised changes, and c) the new code was much easier to work with!</description>
    </item>
    
    <item>
      <title>&#39;The sample code uses limited error handling&#39;</title>
      <link>https://lenholgate.com/blog/2003/09/the-sample-code-uses-limited-error-handling.html</link>
      <pubDate>Thu, 25 Sep 2003 13:27:13 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/09/the-sample-code-uses-limited-error-handling.html</guid>
      <description>I&amp;rsquo;m looking at adding SSPI security to the socket server code for a client; first stop is MDSN and the samples section. Although I can understand why the MSDN samples are generally just &amp;lsquo;here&amp;rsquo;s the API, this is the order you call things in, run along now&amp;rsquo;, I think it would be nice if they were better; especially since I often find pieces of pretty much untouched MSDN sample code deep within client&amp;rsquo;s applications&amp;hellip; I guess it&amp;rsquo;s not really something for Microsoft and the MSDN team to provide though&amp;hellip; Pity.</description>
    </item>
    
    <item>
      <title>Frankenstein programming</title>
      <link>https://lenholgate.com/blog/2003/09/frankenstein-programming.html</link>
      <pubDate>Thu, 25 Sep 2003 10:02:07 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/09/frankenstein-programming.html</guid>
      <description>I&amp;rsquo;m spelunking around in some code for a client looking for a nasty bug that&amp;rsquo;s hard to reproduce. The code is less than ideal&amp;hellip; It&amp;rsquo;s the kind of code that&amp;rsquo;s been put together by what I refer to as &amp;lsquo;Frankenstein programming&amp;rsquo;; lots of unrelated bits and pieces have been collected from various places and stuck together to make something that looks about right. Unfortunately we&amp;rsquo;re at the point where we need a vast amount of power to give this thing life, and I for one don&amp;rsquo;t see a thunder storm on the horizon&amp;hellip;</description>
    </item>
    
    <item>
      <title>Video editing</title>
      <link>https://lenholgate.com/blog/2003/09/video-editing.html</link>
      <pubDate>Wed, 24 Sep 2003 19:08:28 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/09/video-editing.html</guid>
      <description>I&amp;rsquo;ve been editing videos on a PC for far too long. It&amp;rsquo;s a lot easier than it used to be, but it still feels like it&amp;rsquo;s not quite ready for prime time for non professionals. At least it&amp;rsquo;s now reasonable easy to find room to store the masses of data that you need to manipulate when editing DV video, and the editing programs are better, and the special hardware is cheaper or no longer special.</description>
    </item>
    
    <item>
      <title>No, No, No! That way lies the army of muppets!</title>
      <link>https://lenholgate.com/blog/2003/09/no-no-no-that-way-lies-the-army-of-muppets.html</link>
      <pubDate>Mon, 22 Sep 2003 15:43:07 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/09/no-no-no-that-way-lies-the-army-of-muppets.html</guid>
      <description>Krzysztof Kowalczyk on Alan Cooper on software business&amp;hellip;
&amp;ldquo;Alan Cooper argues in this article that a way to win in the software business is not by cutting costs of production (i.e. number of programmers and their salaries) but by investing more in creating good software (i.e. hiring more programmers).&amp;rdquo;
My emphasis; I don&amp;rsquo;t think that&amp;rsquo;s what Alan&amp;rsquo;s suggesting.
Updated 3rd May 2023 to fix broken links
Alan says: &amp;ldquo;You must invest more time and money on the research, thinking, planning, and design to make your product better suited to your customer&amp;rsquo;s needs.</description>
    </item>
    
    <item>
      <title>Images from Saas-Fee</title>
      <link>https://lenholgate.com/blog/2003/09/images-from-saas-fee.html</link>
      <pubDate>Mon, 22 Sep 2003 11:56:30 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/09/images-from-saas-fee.html</guid>
      <description>Just holiday snaps&amp;hellip;</description>
    </item>
    
    <item>
      <title>Back from Saas-Fee</title>
      <link>https://lenholgate.com/blog/2003/09/back-from-saas-fee.html</link>
      <pubDate>Mon, 22 Sep 2003 10:22:41 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/09/back-from-saas-fee.html</guid>
      <description>The 2003/04 ski season has started. Well, for me at least. We spent the last week in Saas-Fee, Switzerland, in the hands of the Warren Smith Ski Academy. Great fun, hard work, highly recommended.
The snow was wonderful for the time of year. Much more like winter snow than spring skiing. Sure it was a bit hard first thing and a few slopes got a little sugary by midday but all in all we couldn&amp;rsquo;t have asked for better conditions.</description>
    </item>
    
    <item>
      <title>We&#39;ll be right back, after this word</title>
      <link>https://lenholgate.com/blog/2003/09/well-be-right-back-after-this-word.html</link>
      <pubDate>Sat, 13 Sep 2003 07:26:07 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/09/well-be-right-back-after-this-word.html</guid>
      <description>Normal service will resume shortly. Thank you for your patience.</description>
    </item>
    
    <item>
      <title>Things that make you go, Hmmm...</title>
      <link>https://lenholgate.com/blog/2003/09/things-that-make-you-go-hmmm.html</link>
      <pubDate>Fri, 12 Sep 2003 23:22:08 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/09/things-that-make-you-go-hmmm.html</guid>
      <description>Just yesterday, I had a discussion with the CTO of a current client. He&amp;rsquo;s a 20 year industry veteran and he was wondering why Microsoft hadn&amp;rsquo;t stopped in their tracks and underwent some massive code reviews to get rid of the problem for once and for all.ChristophDotNet
Because it&amp;rsquo;s a very hard problem? How many lines of old code have you and the CTO personally reviewed and decided were completely bug free?</description>
    </item>
    
    <item>
      <title>I know it&#39;s trying to help, but..</title>
      <link>https://lenholgate.com/blog/2003/09/i-know-its-trying-to-help-but.html</link>
      <pubDate>Fri, 12 Sep 2003 19:17:15 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/09/i-know-its-trying-to-help-but.html</guid>
      <description>I&amp;rsquo;m editing a wedding video at present. I&amp;rsquo;m using Pinnacle Expression to write it to DVD. I have a dual xeon 2ghz machine with hyper threading enabled and it insists on using no more than 25% of my cpu&amp;hellip;
It doesn&amp;rsquo;t seem to be IO bound. I&amp;rsquo;ve tried boosting it&amp;rsquo;s priority, but nothing I do will make it use more than exactly 25% of cpu. I guess it&amp;rsquo;s trying really hard to be nice to me, I wish it wouldn&amp;rsquo;t.</description>
    </item>
    
    <item>
      <title>Damned if they do, damned if they dont</title>
      <link>https://lenholgate.com/blog/2003/09/damned-if-they-do-damned-if-they-dont.html</link>
      <pubDate>Fri, 12 Sep 2003 16:26:31 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/09/damned-if-they-do-damned-if-they-dont.html</guid>
      <description>I had just sold management in the company I am clienting for on the ability of W2K3 to avoid these, with the line that during the Windows Security Push, all 9,000+ Windows developers stopped and poured over essentially every line of Windows code remove these kinds of situations and make W2K3 the most secure OS. Now two of these in the last month. To say that this has stopped a massive redeployment is an understatement.</description>
    </item>
    
    <item>
      <title>Introspection on INTJ</title>
      <link>https://lenholgate.com/blog/2003/09/introspection-on-intj.html</link>
      <pubDate>Fri, 12 Sep 2003 12:43:08 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/09/introspection-on-intj.html</guid>
      <description>It seems that iNTj&amp;rsquo;s are big into contingency planning and, in general, most other people aren&amp;rsquo;t; that explains a lot&amp;hellip;
Whenever I find myself in an unexpected situation the first thing I always think is &amp;ldquo;what&amp;rsquo;s the worst case scenario?&amp;rdquo;. Once I&amp;rsquo;ve explored the worst case and worked through an exit strategy from that I start to work on the more likely outcomes, but I always do the worst case first.</description>
    </item>
    
    <item>
      <title>Why do I code? Because I couldn&#39;t not do it...</title>
      <link>https://lenholgate.com/blog/2003/09/why-do-i-code-because-i-couldnt-not-do-it.html</link>
      <pubDate>Thu, 11 Sep 2003 20:01:52 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/09/why-do-i-code-because-i-couldnt-not-do-it.html</guid>
      <description>Why do any of us do this stuff? Why do we read so many books on the subject? Go to user group meetings? Fly across the country to hear people talk?
Why do you code? Seriously. I want to know.
Rory Blyth - Neopoleon.com - WHY DO YOU CODE?
Because I have to?
I code because I can. I code because I couldn&amp;rsquo;t not code.
I feel so at peace when my mind is immersed in building executable abstractions.</description>
    </item>
    
    <item>
      <title>iNTJ</title>
      <link>https://lenholgate.com/blog/2003/09/intj.html</link>
      <pubDate>Thu, 11 Sep 2003 19:58:26 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/09/intj.html</guid>
      <description>So, I saw all this stuff over on Scoble and Chris Sells&amp;rsquo; blogs about Microsoft being full of ENTJ&amp;rsquo;s and wondered what the hell they were on about.
Myers-Briggs personality types; I took the test, apparently I&amp;rsquo;m an INTJ&amp;hellip;
Well, the descriptions read about right; though I expect my Michelle and my sister might have something to say about them&amp;hellip;</description>
    </item>
    
    <item>
      <title>I&#39;m sorry but...</title>
      <link>https://lenholgate.com/blog/2003/09/im-sorry-but.html</link>
      <pubDate>Mon, 08 Sep 2003 22:59:15 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/09/im-sorry-but.html</guid>
      <description>Who are you? and why are you here?
`2003.09.05 11:11:45 62.188.56.137 &amp;lsquo;Len&amp;rsquo; added entry #157
2003.09.05 11:45:49 62.188.56.137 &amp;lsquo;Len&amp;rsquo; added entry #158
2003.09.06 13:26:52 4.64.105.117 Search: query for &amp;lsquo;FX&amp;rsquo;
2003.09.07 11:00:14 62.188.56.137 Search: query for &amp;lsquo;udp&amp;rsquo;
2003.09.08 00:32:01 62.188.56.137 &amp;lsquo;Len&amp;rsquo; added entry #159
2003.09.08 14:34:02 82.69.20.81 Search: query for &amp;lsquo;ZOE BALL&amp;rsquo;
2003.09.08 22:34:05 62.188.56.137 &amp;lsquo;Len&amp;rsquo; added entry #160
2003.09.08 22:46:00 62.188.56.137 &amp;lsquo;Len&amp;rsquo; added entry #161`</description>
    </item>
    
    <item>
      <title>I blame the testing</title>
      <link>https://lenholgate.com/blog/2003/09/i-blame-the-testing.html</link>
      <pubDate>Mon, 08 Sep 2003 22:46:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/09/i-blame-the-testing.html</guid>
      <description>It&amp;rsquo;s amazing what a day or two away can do. I came back to the tests with a fresh mind this morning and dealt with the issues that had caused me problems at the tail end of last week before I got my morning coffee.
Ok, so I don&amp;rsquo;t take coffee until 11.30. I still think I did pretty good&amp;hellip;
I&amp;rsquo;d written the bulk of the tests on thursday evening. Unfortunately I&amp;rsquo;d made one of those mistakes that you just can&amp;rsquo;t see until you walk away and come back with a clean brain.</description>
    </item>
    
    <item>
      <title>BenSkating</title>
      <link>https://lenholgate.com/blog/2003/09/benskating.html</link>
      <pubDate>Mon, 08 Sep 2003 22:34:04 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/09/benskating.html</guid>
      <description>Michelle and I had a skate lesson with Ben Roberts on Saturday morning. It was a group lesson that ended up being just the two of us and which was really good and great value for money.
Ben was my instructor when I had my course at Citiskate. They&amp;rsquo;ve since gone their seperate ways but Ben&amp;rsquo;s been in the business for a long time and he&amp;rsquo;s one of those instructors who just wants to teach people, and it shows.</description>
    </item>
    
    <item>
      <title>Netgear MR814v2</title>
      <link>https://lenholgate.com/blog/2003/09/netgear-mr814v2.html</link>
      <pubDate>Mon, 08 Sep 2003 00:32:01 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/09/netgear-mr814v2.html</guid>
      <description>Further to my recent wailings about being responsible for family member&amp;rsquo;s PCs&amp;hellip; I decided to deal with the internet connection sharing issue at the hardware level&amp;hellip; So far the Netgear MR814v2 firewalled, DSL router, WIFI access point seems to rock&amp;hellip;
The MR814v2 is a nice piece of kit. It&amp;rsquo;s a DSL router with configurable WAN MAC address; you can make it pretend its the PC you&amp;rsquo;ve always been connecting to your cable provider with and neatly sidestep any issues regarding re-registering your MAC address.</description>
    </item>
    
    <item>
      <title>So, who&#39;s the smart arse who thinks it&#39;s OK to move keys on a keyboard?</title>
      <link>https://lenholgate.com/blog/2003/09/so-whos-the-smart-arse-who-thinks-its-ok-to-move-keys-on-a-keyboard.html</link>
      <pubDate>Fri, 05 Sep 2003 11:45:49 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/09/so-whos-the-smart-arse-who-thinks-its-ok-to-move-keys-on-a-keyboard.html</guid>
      <description>My space bar got sticky. I bought a Microsoft Wireless Multimedia keyboard on impulse. Why Oh Why was the &amp;rsquo;end&amp;rsquo; key moved?
The keyboard itself has a nicer feel than the one I replaced. It&amp;rsquo;s thicker, you pretty much have to use the built in palm rest with it and have it up on the little legs at the back. I&amp;rsquo;m got used to that surprisingly quickly (and realised that I dont actually use the palm rest most of the time).</description>
    </item>
    
    <item>
      <title>Run away to the alps</title>
      <link>https://lenholgate.com/blog/2003/09/run-away-to-the-alps.html</link>
      <pubDate>Fri, 05 Sep 2003 11:11:45 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/09/run-away-to-the-alps.html</guid>
      <description>I have a dream. I&amp;rsquo;ve just done coding for the day and I&amp;rsquo;m sitting in a hot tub on the deck of a glass fronted chalet overlooking the slopes; glass panels around the deck so that nothing obstructs the view. Think the really expensive places in Whistler and you&amp;rsquo;re on the same page.
Well, maybe not yet. The great thing about working remotely for people is that you can do it from anywhere&amp;hellip; The bad thing about being able to work from anywhere is that you want to work from somewhere else&amp;hellip;</description>
    </item>
    
    <item>
      <title>Eric Sink on instant gratification</title>
      <link>https://lenholgate.com/blog/2003/09/eric-sink-on-instant-gratification.html</link>
      <pubDate>Fri, 05 Sep 2003 08:41:37 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/09/eric-sink-on-instant-gratification.html</guid>
      <description>Eric Sink has an amusing piece on how his problem solving skills have been spoiled by Visual Studio&amp;rsquo;s F5 rebuild and run option. He obviously isn&amp;rsquo;t developing test first, because if he was then going for the instant gratification of a green bar is fine.
That&amp;rsquo;s one of the things I really like about test first; you&amp;rsquo;re encouraged to do the things developers like doing. Write a test and then you can just write the code and run it to see if it works.</description>
    </item>
    
    <item>
      <title>Insufficient coverage</title>
      <link>https://lenholgate.com/blog/2003/09/insufficient-coverage.html</link>
      <pubDate>Thu, 04 Sep 2003 20:07:25 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/09/insufficient-coverage.html</guid>
      <description>Today the FX engine went into UAT. Well, the nearest thing we have to UAT; a user looked at it&amp;hellip; 3 bugs, differences between the new code and the current production version. All slipped through our test coverage. :(
I had actually expected more problems. Two of these new bugs look like they&amp;rsquo;re related, which is good. The third is an easy fix which could be viewed as an unwanted feature&amp;hellip; What I found most disturbing about the two bugs was being shaken out of the safe, controlled, world of test first refactoring into bug fixing a piece of code that had insufficient test coverage.</description>
    </item>
    
    <item>
      <title>What did I do to deserve...</title>
      <link>https://lenholgate.com/blog/2003/09/what-did-i-do-to-deserve.html</link>
      <pubDate>Wed, 03 Sep 2003 23:52:29 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/09/what-did-i-do-to-deserve.html</guid>
      <description>So, family members having PCs that you feel obliged to look after for them. That&amp;rsquo;s some form of punishment for something, right?</description>
    </item>
    
    <item>
      <title>You can lead a horse to water...</title>
      <link>https://lenholgate.com/blog/2003/08/you-can-lead-a-horse-to-water.html</link>
      <pubDate>Fri, 29 Aug 2003 23:05:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/08/you-can-lead-a-horse-to-water.html</guid>
      <description>Although the other developers on the refactoring project agree that the code needs to be made better sometimes they don&amp;rsquo;t seem to bother to make changes in a way that improves things&amp;hellip;
This week a major new piece of functionality was completed. I helped with merging the branch back onto main and started to sort out the release; then I realised none of the test harnesses compiled anymore&amp;hellip;
The developer responsible for the new functionality had changed an interface and then failed to update the tests to test the change.</description>
    </item>
    
    <item>
      <title>Decoupling the FX GUI</title>
      <link>https://lenholgate.com/blog/2003/08/decoupling-the-fx-gui.html</link>
      <pubDate>Thu, 21 Aug 2003 06:59:25 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/08/decoupling-the-fx-gui.html</guid>
      <description>The rates engine was now easy to test but the interaction between the engine and the user wasn&amp;rsquo;t. This was unfortunate as the interaction is reasonably complex. We hadn&amp;rsquo;t built and tests for any of the GUI code yet, last week we fixed that&amp;hellip;
The rates engine interacts with the user via two grid controls, a master and optional detail display and a cluster of buttons. As the live data changes the grids update.</description>
    </item>
    
    <item>
      <title>Art - by Catherine Purves</title>
      <link>https://lenholgate.com/blog/2003/08/art---by-catherine-purves.html</link>
      <pubDate>Mon, 18 Aug 2003 21:09:17 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/08/art---by-catherine-purves.html</guid>
      <description>We first saw Catherine Purves&amp;rsquo; work at a Hoxton art show, both of us loved the colour and texture of the pieces. We saw more of her work whilst visiting other local art shows but none of the pieces were quite right for the spaces that we had. Eventually we decided to commission her to produce something to our specifications of size and colour.
More pictures on the flat web site.</description>
    </item>
    
    <item>
      <title>FX Testing</title>
      <link>https://lenholgate.com/blog/2003/08/fx-testing.html</link>
      <pubDate>Sun, 17 Aug 2003 21:55:22 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/08/fx-testing.html</guid>
      <description>By Friday our FX test harness was pretty much complete. We had coverage for all the nasty special cases that had caused us problems in the last few weeks. They were the hard things to write tests for so we wrote those tests first. If we can these these things we can test pretty much all of the FX engine&amp;rsquo;s functionality. Now we just need to add back the functionality we removed when we were chainsawing the FX code out of the GUI code.</description>
    </item>
    
    <item>
      <title>FogBUGZ</title>
      <link>https://lenholgate.com/blog/2003/08/fogbugz.html</link>
      <pubDate>Fri, 15 Aug 2003 06:54:45 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/08/fogbugz.html</guid>
      <description>We&amp;rsquo;re approaching the end of this phase of the poker game project. The client has started reporting lots of little things that don&amp;rsquo;t quite work how he&amp;rsquo;d like them to. Some are bugs, most are feature requests, either way there&amp;rsquo;s suddenly more of them than I&amp;rsquo;m comfortable managing with lists on paper and email trails. I decided that I needed a proper way to track these things.
I looked at Bugzilla but it looked like I had to invest thinking time in it; I looked at FogBUGZ and it didn&amp;rsquo;t.</description>
    </item>
    
    <item>
      <title>Writing tests for new code vs writing tests for legacy code</title>
      <link>https://lenholgate.com/blog/2003/08/writing-tests-for-new-code-vs-writing-tests-for-legacy-code.html</link>
      <pubDate>Wed, 13 Aug 2003 19:13:21 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/08/writing-tests-for-new-code-vs-writing-tests-for-legacy-code.html</guid>
      <description>I was working for my poker game client yesterday. This project now seems to be firmly test first. What was interesting with yesterday&amp;rsquo;s work was how the tests drove the design and how when I finally came to integrate the tested code into the main body of code the required design changes weren&amp;rsquo;t an issue as I had a whole load of tests to support the changes.
I was adding some code to manage the pot during play.</description>
    </item>
    
    <item>
      <title>You&#39;ll tick when I say so and not before!</title>
      <link>https://lenholgate.com/blog/2003/08/youll-tick-when-i-say-so-and-not-before.html</link>
      <pubDate>Wed, 13 Aug 2003 18:43:30 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/08/youll-tick-when-i-say-so-and-not-before.html</guid>
      <description>Today we wrote some complicated FX business logic tests. Things like making sure that the FX library can calculate a EURUSDCAD 1M rate - it can; or a USDCAD ON rate - it can&amp;rsquo;t and nobody had spotted the fact that it was out because it&amp;rsquo;s way down in the 0.00001&amp;rsquo;s of the rate.
It has taken us around a week to get here. The initial code was a tightly coupled mess.</description>
    </item>
    
    <item>
      <title>Here comes the snow...</title>
      <link>https://lenholgate.com/blog/2003/08/here-comes-the-snow.html</link>
      <pubDate>Wed, 13 Aug 2003 17:40:19 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/08/here-comes-the-snow.html</guid>
      <description>So, it&amp;rsquo;s been 35c here in London for the last week and, strangely, my thoughts have turned to snow&amp;hellip; We&amp;rsquo;re off to Saas Fee in September and I&amp;rsquo;m starting to do the &amp;lsquo;check the resort web cam daily&amp;rsquo; thing. Having never skiied in Europe this early in the season it&amp;rsquo;s a bit nerve wracking. Still, Saas Fee has a good glacier and they are used to this kind of thing; so, finger&amp;rsquo;s crossed.</description>
    </item>
    
    <item>
      <title>The first FX test</title>
      <link>https://lenholgate.com/blog/2003/08/the-first-fx-test.html</link>
      <pubDate>Mon, 11 Aug 2003 07:28:02 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/08/the-first-fx-test.html</guid>
      <description>On Friday we got to the point where the FX buiness logic code was suitably decoupled from the display logic that we could write our first test for the business logic. In the words of Homer Simpson, &amp;ldquo;Woo hoo!&amp;rdquo;.
Test one was a simple one; can we construct the FX &amp;rsquo;live point&amp;rsquo; object. After adding a few interfaces and mocking up a service provider or two we could.
The object uses two-stage construction; not ideal, but the code doesn&amp;rsquo;t use exceptions yet.</description>
    </item>
    
    <item>
      <title>Skate Adicts</title>
      <link>https://lenholgate.com/blog/2003/08/skate-adicts.html</link>
      <pubDate>Mon, 11 Aug 2003 07:09:37 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/08/skate-adicts.html</guid>
      <description>We couldn&amp;rsquo;t skate last weekend as we were in Dublin at the wedding. This weekend was going to be really hot in London (35C+) which isn&amp;rsquo;t ideal skating weather. We decided to get up a bit early and skate before it got too hot&amp;hellip; So we both saw 7.30am on a Sunday morning for the first time in a long time and skated before it got too hot at Hyde Park.</description>
    </item>
    
    <item>
      <title>The Black Stuff</title>
      <link>https://lenholgate.com/blog/2003/08/the-black-stuff.html</link>
      <pubDate>Thu, 07 Aug 2003 22:28:44 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/08/the-black-stuff.html</guid>
      <description>We had a busy weekend. Michelle&amp;rsquo;s brother Chris married Hilary in Dublin. Good fun was had by all and it was a wonderful few days. The wedding was in Castleknock and the reception was at The Four Seasons in Ballsbridge.
It was a bit of a shock to have to come back home; I could quite happilly have stayed on a few days longer at the Four Seasons and spent the time drinking Guinness and watching the world go by&amp;hellip;</description>
    </item>
    
    <item>
      <title>FX refactoring</title>
      <link>https://lenholgate.com/blog/2003/08/fx-refactoring.html</link>
      <pubDate>Thu, 07 Aug 2003 22:21:04 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/08/fx-refactoring.html</guid>
      <description>Bleugh! You are lost in a maze of crapy code, all alike (and much of it copy and pasted!). The last few days have been deep in the heart of darkness. Gently teasing the business logic and the display logic of the FX code apart so that we might one day be able to write tests for the business logic.
We&amp;rsquo;re nearly there but it&amp;rsquo;s been a long job. Much longer than any of the other refactorings that we&amp;rsquo;ve done.</description>
    </item>
    
    <item>
      <title>The good thing about this web log lark is...</title>
      <link>https://lenholgate.com/blog/2003/07/the-good-thing-about-this-web-log-lark-is.html</link>
      <pubDate>Thu, 31 Jul 2003 22:35:19 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/07/the-good-thing-about-this-web-log-lark-is.html</guid>
      <description>Writing stuff down makes you think about things. Take the &amp;ldquo;balls in the air&amp;rdquo; piece. I had a problem, I didn&amp;rsquo;t realise what the problem was until I wrote about it and now, a week later I see the problem coming up again and know what it is and how to avoid it. Magic!
Some things that take 4 hrs can be done in 8 30 minute segments. Some must be done in one 4 hr session.</description>
    </item>
    
    <item>
      <title>Learning by imitation vs learning by understanding</title>
      <link>https://lenholgate.com/blog/2003/07/learning-by-imitation-vs-learning-by-understanding.html</link>
      <pubDate>Thu, 31 Jul 2003 22:26:18 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/07/learning-by-imitation-vs-learning-by-understanding.html</guid>
      <description>As I mentioned a while back, the refactoring project&amp;rsquo;s FX functionality was developed by guess work. We&amp;rsquo;re fixing that now by spending some time gaining an understanding of the problem domain as we refactor.
I&amp;rsquo;ve always been pretty proud of the fact that I deliberately set out to know nothing about your business. I think it makes me a better developer. I know that I know nothing about how your business works; I don&amp;rsquo;t assume that I know better than you do just because I&amp;rsquo;ve read about your business area a couple of times.</description>
    </item>
    
    <item>
      <title>Polishing</title>
      <link>https://lenholgate.com/blog/2003/07/polishing.html</link>
      <pubDate>Tue, 29 Jul 2003 20:29:17 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/07/polishing.html</guid>
      <description>Hit a deadline early this afternoon and hadn&amp;rsquo;t chased up some requirements so I ran out of things to implement. Faced with a couple of hours spare I whipped out Gimpel Lint and started to polish&amp;hellip;
I&amp;rsquo;ve been a fan of Gimpel&amp;rsquo;s PC Lint product for several years. It&amp;rsquo;s like turning compiler up to warning level 11. I try and keep all of my code passing through it without any warnings.</description>
    </item>
    
    <item>
      <title>Tull</title>
      <link>https://lenholgate.com/blog/2003/07/tull.html</link>
      <pubDate>Wed, 23 Jul 2003 23:59:18 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/07/tull.html</guid>
      <description>When we were in Amsterdam doing the stag thing I saw a Jethro Tull video on the local music station. I wasn&amp;rsquo;t actually aware that such a thing existed; but it sure brought back memories.
It was a live version of &amp;ldquo;Living In The Past&amp;rdquo;. Good stuff.
On Saturday we were wandering through Virgin and there in the bargin bin was a copy of &amp;ldquo;Through The Years&amp;rdquo;, a kinda &amp;ldquo;best of&amp;rdquo; thing.</description>
    </item>
    
    <item>
      <title>Uncle Bob talks lots of sense</title>
      <link>https://lenholgate.com/blog/2003/07/uncle-bob-talks-lots-of-sense.html</link>
      <pubDate>Wed, 23 Jul 2003 23:40:59 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/07/uncle-bob-talks-lots-of-sense.html</guid>
      <description>So, I read my own blog and follow the links I put in the entries, does that make me a bad person? After writing the post on Bob Martin&amp;rsquo;s book I went off to read his blog, good stuff, read it!
I especially like the &amp;ldquo;We will not ship shit&amp;rdquo; entry. That rings so very true with me. I&amp;rsquo;m sorry, if you want crap go find someone else to write it for you; life&amp;rsquo;s too short and I&amp;rsquo;m not interested.</description>
    </item>
    
    <item>
      <title>Site update</title>
      <link>https://lenholgate.com/blog/2003/07/site-update.html</link>
      <pubDate>Wed, 23 Jul 2003 12:15:20 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/07/site-update.html</guid>
      <description>I want someone to quote for converting my company web site, www.jetbyte.com, to use Movable Type as its content management system. Anyone interested in the work?</description>
    </item>
    
    <item>
      <title>The onset of infection</title>
      <link>https://lenholgate.com/blog/2003/07/the-onset-of-infection.html</link>
      <pubDate>Wed, 23 Jul 2003 12:12:03 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/07/the-onset-of-infection.html</guid>
      <description>I&amp;rsquo;ve spent the morning doing test driven development, properly; writing tests first and everything. It works, it&amp;rsquo;s faster and it&amp;rsquo;s addictive.
The current work item for the online game is to take the existing game play and adjust it to include a few of the more complex special cases. This alters the game play a little, it alters who goes first, etc. It took a while for me to elicit enough detail to fully understand the requirements, but now I have it.</description>
    </item>
    
    <item>
      <title>Currently reading</title>
      <link>https://lenholgate.com/blog/2003/07/currently-reading-1.html</link>
      <pubDate>Tue, 22 Jul 2003 21:24:40 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/07/currently-reading-1.html</guid>
      <description>Agile Software Development - Principles, Patterns, and Practices by Robert C. Martin
This book is physically heavier than most of the books I&amp;rsquo;ve been reading lately but I&amp;rsquo;m still carrying it to work even though I only get around 5 mins reading done on the tube during the journey. It&amp;rsquo;s a beautiful book; the typeface and illustractions are stunning, the paper feels rich, the cover is cool and colourful.
The content is pretty good too.</description>
    </item>
    
    <item>
      <title>Keeping all the balls in the air</title>
      <link>https://lenholgate.com/blog/2003/07/keeping-all-the-balls-in-the-air.html</link>
      <pubDate>Tue, 22 Jul 2003 07:55:30 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/07/keeping-all-the-balls-in-the-air.html</guid>
      <description>A while back Carson asked me how I managed to keep track of all the projects that I was working on; I said that I had practiced being productive over short time periods, tried to stay focused on one thing at a time and not to switch projects too quickly. There&amp;rsquo;s more to it than that though as I found out recently&amp;hellip;
Recently I&amp;rsquo;ve been busy. Too busy. I managed to maintain the pace for a couple of weeks and then ended up wasting a couple of days thrashing as I needed a bigger time slice than I had available and I kept trying to use the time I had to do a task that required more time and that had to be done in one go&amp;hellip; Note to self; try and spot that next time and use the small time slots for more appropriate work.</description>
    </item>
    
    <item>
      <title>Free software integration code drop</title>
      <link>https://lenholgate.com/blog/2003/07/free-software-integration-code-drop.html</link>
      <pubDate>Mon, 21 Jul 2003 20:57:41 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/07/free-software-integration-code-drop.html</guid>
      <description>The free source code integration project has its first code drop and then its second code drop&amp;hellip; Almost complete. The integration has gone pretty well. The server code now has a neat little facade that allows it to impersonate the MFC server code that the client wants to replace.</description>
    </item>
    
    <item>
      <title>Big blind, little blind</title>
      <link>https://lenholgate.com/blog/2003/07/big-blind-little-blind.html</link>
      <pubDate>Mon, 21 Jul 2003 20:46:47 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/07/big-blind-little-blind.html</guid>
      <description>The online game approaches completion but recently the requirements were lacking and we couldn&amp;rsquo;t see the way forward.
We&amp;rsquo;re finishing the game play and getting to the complicated special cases - I&amp;rsquo;m hoping that they won&amp;rsquo;t be complicated or special once I understand them more&amp;hellip; The original story that explained the latest piece of work was lacking when we analysed it closely; we fleshed it out and now I think we understand it enough to quote for it and code it.</description>
    </item>
    
    <item>
      <title>Unsound FX</title>
      <link>https://lenholgate.com/blog/2003/07/unsound-fx.html</link>
      <pubDate>Mon, 21 Jul 2003 07:44:28 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/07/unsound-fx.html</guid>
      <description>We&amp;rsquo;ve been moving pretty quickly on the refactoring project. We had got to the point where we were doing at least two releases a week. Generally we would include user requested fixes in the first release and refactored code in the second. It started to become a little hectic. Last week we decided to slow things down a little so that we could regroup&amp;hellip;
One aspect of the project is a currency exchange rate display.</description>
    </item>
    
    <item>
      <title>Twenty Eight</title>
      <link>https://lenholgate.com/blog/2003/07/twenty-eight.html</link>
      <pubDate>Tue, 15 Jul 2003 06:25:37 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/07/twenty-eight.html</guid>
      <description>So there are 10 guys on a stag weekend in Amsterdam. Much drinking. Lots of foolish games with very fluid rules and fines for people who did not comply. Many fines were collected. At some point during the drinking games on the first evening, number 28 became significant. It was decided that the money from the fines would go on 28 when we visited the casino the following night&amp;hellip;
Fast forward to the bar just before the casino and the collection of fines had reached around 135 euros and we started to lose our bottle.</description>
    </item>
    
    <item>
      <title>Big ball of mud</title>
      <link>https://lenholgate.com/blog/2003/07/big-ball-of-mud.html</link>
      <pubDate>Fri, 11 Jul 2003 10:54:51 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/07/big-ball-of-mud.html</guid>
      <description>Brian Foote and Joseph Yoder writing about software architecture (or the lack of it).
Thanks to Bryan Boreham for the link.</description>
    </item>
    
    <item>
      <title>Untestable 2</title>
      <link>https://lenholgate.com/blog/2003/07/untestable-2.html</link>
      <pubDate>Wed, 09 Jul 2003 07:11:45 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/07/untestable-2.html</guid>
      <description>A couple of days ago I posted some untestable code. I&amp;rsquo;ve had a couple of emails saying that people couldn&amp;rsquo;t see why the code was untestable. Here&amp;rsquo;s why, and here&amp;rsquo;s how to fix it.
The code shown manages a list of listeners who are interested in being notified when the system date changes. It&amp;rsquo;s externally driven by calling CheckForChange(), this could be called in response to a timer event or from a polling thread, or whatever.</description>
    </item>
    
    <item>
      <title>Waltzing with Bears</title>
      <link>https://lenholgate.com/blog/2003/07/waltzing-with-bears.html</link>
      <pubDate>Mon, 07 Jul 2003 07:27:57 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/07/waltzing-with-bears.html</guid>
      <description>Finally finished reading Waltzing with Bears: Managing Risk on Software Projects and it was well worth the read.
Waltzing with Bears is a book about managing project risk. It&amp;rsquo;s a slim volume, but packed with useful information. As usual, DeMarco and Lister present the topic in an approachable and readable way. The text is full of anecdotes that flesh out the theories with practical examples.
In a nut shell; most project managers on software projects fail to adequately manage risk.</description>
    </item>
    
    <item>
      <title>Three bugs went into a program</title>
      <link>https://lenholgate.com/blog/2003/07/three-bugs-went-into-a-program.html</link>
      <pubDate>Mon, 07 Jul 2003 07:01:59 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/07/three-bugs-went-into-a-program.html</guid>
      <description>Three bugs went into a program; a memory leak, a misunderstood interface and a deadlock&amp;hellip;
The memory leak was easy to track down as it was in the code that was covered by the test harness. So we just instrument the code with Bounds Checker and run the test. A reference counted object was being mishandled and leaking. Easy fix.
The interface issue was harder. I was using a std::list&amp;lt;&amp;gt; to manage a list of items and every so often needed to walk the list and remove some entries.</description>
    </item>
    
    <item>
      <title>My Name is Len Holgate, and I&#39;m a workaholic</title>
      <link>https://lenholgate.com/blog/2003/07/my-name-is-len-holgate-and-im-a-workaholic.html</link>
      <pubDate>Mon, 07 Jul 2003 06:19:24 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/07/my-name-is-len-holgate-and-im-a-workaholic.html</guid>
      <description>Given that the work I do goes on in my head and can be done anywhere I find that it&amp;rsquo;s often done everywhere. Anyone got any hints on how to switch off?
Skiing and skating are good for me as I can&amp;rsquo;t think about other things when I&amp;rsquo;m doing them. Everything else always has the risk of being interrupted by an &amp;lsquo;a-ha!&amp;rsquo; moment where a &amp;lsquo;work&amp;rsquo; problem is suddenly solved and I need to scurry away to the study to implement the idea&amp;hellip; And then you get in the flow and hours go by and you haven&amp;rsquo;t spent time with people you should.</description>
    </item>
    
    <item>
      <title>Busy weekend</title>
      <link>https://lenholgate.com/blog/2003/07/busy-weekend.html</link>
      <pubDate>Sun, 06 Jul 2003 21:25:37 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/07/busy-weekend.html</guid>
      <description>We tried the new Carluccios on Upper Street on Friday night. Great food and excellent service. Back to watch the final Buffy (season 6) on DVD (so sad); glass or two of Glenfiddich, bug hunting and to bed. Up early to bug hunt and then skating in Kensington Gardens on Saturday morning. Back to get changed and then off to The Blue Elephant in Fulham for Hilary&amp;rsquo;s birthday do; more great food, left my unbrella at the restaurant :(.</description>
    </item>
    
    <item>
      <title>The style sheet made me do it</title>
      <link>https://lenholgate.com/blog/2003/07/the-style-sheet-made-me-do-it.html</link>
      <pubDate>Sat, 05 Jul 2003 00:19:22 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/07/the-style-sheet-made-me-do-it.html</guid>
      <description>If I don&amp;rsquo;t write enough blog entries then the way I have my CSS set up means that the front page starts to look ugly as the number of entries on the left side of the page shrinks and the columns on the right go all squigly&amp;hellip;
Is that why blog people end up writing these inane items that nobody really wants to read?</description>
    </item>
    
    <item>
      <title>Untestable</title>
      <link>https://lenholgate.com/blog/2003/07/untestable.html</link>
      <pubDate>Sat, 05 Jul 2003 00:05:42 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/07/untestable.html</guid>
      <description>It&amp;rsquo;s easy to write untestable code. It&amp;rsquo;s natural. Most code that we write will be hard to test unless we explicitly think about testing when we write it&amp;hellip;
This code is really simple, yet it&amp;rsquo;s untestable. Why?
DateChangeManager.h class CDateChangeManager { public : class Listener { public : virtual void OnDateChange( const CTime &amp;amp;oldDate, const CTime &amp;amp;newDate) = 0; protected : ~Listener() {} }; CDateChangeManager(); typedef unsigned long Cookie; Cookie RegisterForNotification( Listener &amp;amp;listener); void UnRegisterForNotification( const Cookie &amp;amp;cookie); void CheckForChange(); CTime GetToday() const; private : CTime m_today; typedef std::map&amp;lt;Cookie, Listener *&amp;gt; Listeners; Listeners m_listeners; CCriticalSection m_criticalSection; // No copies - do not implement CDateChangeManager(const CDateChangeManager &amp;amp;rhs); CDateChangeManager &amp;amp;operator=(const CDateChangeManager &amp;amp;rhs); }; DateChangeManager.</description>
    </item>
    
    <item>
      <title>In the future, there will be robots!</title>
      <link>https://lenholgate.com/blog/2003/07/in-the-future-there-will-be-robots.html</link>
      <pubDate>Wed, 02 Jul 2003 07:24:14 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/07/in-the-future-there-will-be-robots.html</guid>
      <description>The code generation crowd are at it again.
So, &amp;ldquo;writing code&amp;rdquo; is stupid is it? Well what will we call writing the requirements in a form that the code generators can understand and why will it be easier to get the requirements right?
I like code generators. I couldn&amp;rsquo;t live without my IDL compiler. Or generators that write the grungy database access code or generators that make it easy for me to make SOAP calls.</description>
    </item>
    
    <item>
      <title>Changing the vinegar</title>
      <link>https://lenholgate.com/blog/2003/06/changing-the-vinegar.html</link>
      <pubDate>Mon, 30 Jun 2003 07:41:25 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/06/changing-the-vinegar.html</guid>
      <description>A while ago I likened writing articles about code with pickling it to preserve it&amp;hellip; It seems the last few days have been spent changing the vinegar&amp;hellip;
I&amp;rsquo;m moving most of my source to CVS. This was easy for the code that I had that was current; the Socket Server stuff and all of my latest clients. I&amp;rsquo;ve been working with all of that code a lot recently and it&amp;rsquo;s all pretty clean and consistent.</description>
    </item>
    
    <item>
      <title>Pinging down NetMeeting data channels</title>
      <link>https://lenholgate.com/blog/2003/06/pinging-down-netmeeting-data-channels.html</link>
      <pubDate>Sun, 29 Jun 2003 21:28:04 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/06/pinging-down-netmeeting-data-channels.html</guid>
      <description>Back in 1999 Darren came up with a cunning plan to make lots of money. The plan was &amp;lsquo;device control over the internet&amp;rsquo;&amp;hellip; In summary, we didn&amp;rsquo;t.
Ideally this plan required an audio/visual link as well as a device control link. I decided that doing the audio and video ourselves was too much work and that we&amp;rsquo;d be better off using the NetMeeting data channel for our device control. We would get the audio/video stuff for free and wouldn&amp;rsquo;t have to worry about things like cameras and microphones.</description>
    </item>
    
    <item>
      <title>Wise words</title>
      <link>https://lenholgate.com/blog/2003/06/wise-words.html</link>
      <pubDate>Fri, 27 Jun 2003 22:39:25 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/06/wise-words.html</guid>
      <description>&amp;ldquo;The most successful method of programming is to begin a program as simply as possible, test it, and then add to the program until it performs the required job.&amp;rdquo;
&amp;ndash; The PDP-8/e Small Computer Handbook (DEC, 1972) - Chapter 9, Page 9-64
Just what those agile guys are saying!
from Joel.</description>
    </item>
    
    <item>
      <title>Top tip</title>
      <link>https://lenholgate.com/blog/2003/06/top-tip.html</link>
      <pubDate>Thu, 26 Jun 2003 22:42:19 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/06/top-tip.html</guid>
      <description>For those of us still working with VC 6&amp;hellip; This page about all the clever things you can do in the debugger watch window is pretty cool. I knew all about s and su and hr but I didn&amp;rsquo;t know about m, that one&amp;rsquo;s way cool.
Hmm, looks like all of these work in VS.Net 2003 too :)</description>
    </item>
    
    <item>
      <title>OBEX and ISO8583</title>
      <link>https://lenholgate.com/blog/2003/06/obex-and-iso8583.html</link>
      <pubDate>Thu, 26 Jun 2003 22:02:19 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/06/obex-and-iso8583.html</guid>
      <description>OBEX is a nice little protocol and reminds me a bit of a massively simplified version of ISO8583. It&amp;rsquo;s a pity about the warts on Connect&amp;hellip;
The OBEX spec defines objects (messages) in terms of a fixed opCode, followed by a 2 byte length indicator followed by optional headers (fields). Each header identifier indicates both the type of header and the way that the length of the header is encoded. Everything in a message is a header - there&amp;rsquo;s a &amp;lsquo;body&amp;rsquo; header for sending data&amp;hellip;</description>
    </item>
    
    <item>
      <title>That test driven development thing might just work</title>
      <link>https://lenholgate.com/blog/2003/06/that-test-driven-development-thing-might-just-work.html</link>
      <pubDate>Thu, 26 Jun 2003 21:31:42 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/06/that-test-driven-development-thing-might-just-work.html</guid>
      <description>So, we have currency based limits and they&amp;rsquo;re in millions.
Us: &amp;ldquo;Are they always going to be in millions for all ccys?&amp;rdquo;
Them: &amp;ldquo;Yup.&amp;rdquo;
Coded, tested, delivered.
Them: &amp;ldquo;can we have the JPY limits in billions?&amp;rdquo;
Us: &amp;ldquo;US or European?&amp;rdquo; ;)
So now limits have exponents and exponents have names. I dummied up the functions to just return an exponent of 6 and a name of &amp;ldquo;m&amp;rdquo;. That worked. Then I added tests for it&amp;hellip; I took out the &amp;ldquo;* 100000&amp;rdquo; and called the new getLimitValue() function that takes the display limit and applies the exponent&amp;hellip;</description>
    </item>
    
    <item>
      <title>Full bodied, or not?</title>
      <link>https://lenholgate.com/blog/2003/06/full-bodied-or-not.html</link>
      <pubDate>Thu, 26 Jun 2003 00:24:05 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/06/full-bodied-or-not.html</guid>
      <description>So, I have the standard MT rss 1.0 syndication feed that I hacked to include the full body of each entry and I have the all new, funky, MT rss 2.0 feed that I have left as is and which doesn&amp;rsquo;t include the full body of the article&amp;hellip;
And people argue over how this stuff should work and I have, like, 2 readers and, well, use whichever you want&amp;hellip; The RSS 2.</description>
    </item>
    
    <item>
      <title>Switching to CVS</title>
      <link>https://lenholgate.com/blog/2003/06/switching-to-cvs.html</link>
      <pubDate>Wed, 25 Jun 2003 23:25:16 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/06/switching-to-cvs.html</guid>
      <description>For my sins, I&amp;rsquo;ve used Source Safe for version control on quite a lot of my projects in the past few years. It&amp;rsquo;s got its faults but, well, the price is right&amp;hellip;
Now that I have a laptop that I can actually work on again&amp;hellip; Ok, I know it&amp;rsquo;s a lame excuse for buying a new toy, but&amp;hellip;
I need to be able to work on at least two boxes at once.</description>
    </item>
    
    <item>
      <title>Analysing my blogging</title>
      <link>https://lenholgate.com/blog/2003/06/analysing-my-blogging.html</link>
      <pubDate>Wed, 25 Jun 2003 22:27:19 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/06/analysing-my-blogging.html</guid>
      <description>I see a trend here&amp;hellip; So, I blogged, I ate, I had a little wine.
And started thinking&amp;hellip;
Why did I write the last entry today? I&amp;rsquo;ve had it in my stack of &amp;lsquo;blog this&amp;rsquo; emails that I send to myself for ages. I wrote about it on Joel last week. I didn&amp;rsquo;t feel the need to blog it then. So why today? Hmm, I guess people might say I&amp;rsquo;m a self analysing type, I wonder if that&amp;rsquo;s bad&amp;hellip; ;)</description>
    </item>
    
    <item>
      <title>Giving it away</title>
      <link>https://lenholgate.com/blog/2003/06/giving-it-away.html</link>
      <pubDate>Wed, 25 Jun 2003 20:22:18 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/06/giving-it-away.html</guid>
      <description>I give a lot of source code away on the web. I have done for several years. Often when I tell people about this they try to convince me that I should be selling the code rather than giving it away. They don&amp;rsquo;t need my code and are way more business savvy than me and they come up with all manner of clever ways that I could do this, but this is why they&amp;rsquo;re all wrong&amp;hellip;</description>
    </item>
    
    <item>
      <title>Analysing my analysis</title>
      <link>https://lenholgate.com/blog/2003/06/analysing-my-analysis.html</link>
      <pubDate>Tue, 24 Jun 2003 20:39:35 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/06/analysing-my-analysis.html</guid>
      <description>In my usual &amp;ldquo;don&amp;rsquo;t read the manual&amp;rdquo; style I crufted together a simple OBEX decoder, fudged a response to the connect message and watched my iPAQ send the first chunk of the file I&amp;rsquo;m using as my test. Now I&amp;rsquo;ll throw away this crummy piece of code and write a proper OBEX protocol handler.
I&amp;rsquo;m a cynical chap. I like to prove to myself that things work before I invest too much time in them.</description>
    </item>
    
    <item>
      <title>Timezone...</title>
      <link>https://lenholgate.com/blog/2003/06/timezone.html</link>
      <pubDate>Tue, 24 Jun 2003 07:37:09 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/06/timezone.html</guid>
      <description>Just realised that my MT setup was wrong and that all my stuff is being posted with a timestamp of an hour in the future. Just fixed it, I wonder what will happen now&amp;hellip;
Hmm, nothing, so I&amp;rsquo;ve edited the timestamps on today&amp;rsquo;s entries and hopefully everything will be OK from now on&amp;hellip;</description>
    </item>
    
    <item>
      <title>It&#39;s important who&#39;s driving</title>
      <link>https://lenholgate.com/blog/2003/06/its-important-whos-driving.html</link>
      <pubDate>Tue, 24 Jun 2003 07:29:06 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/06/its-important-whos-driving.html</guid>
      <description>I&amp;rsquo;m a firm believer that software rots unless you&amp;rsquo;re very careful; and like apples, once one piece starts to go bad the rest quickly follows. The Pragmatic Programmers talk about Software Entropy and The Broken Window Theory and, unfortunately, this week the refactoring project showed how true this is&amp;hellip;
We&amp;rsquo;ve spent several weeks working on cleaning up this project, but there&amp;rsquo;s a lot of code and it&amp;rsquo;s all in a bit of a state.</description>
    </item>
    
    <item>
      <title>80 00 1A 00 0F D7</title>
      <link>https://lenholgate.com/blog/2003/06/80-00-1a-00-0f-d7.html</link>
      <pubDate>Tue, 24 Jun 2003 05:42:48 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/06/80-00-1a-00-0f-d7.html</guid>
      <description>My dabbling with Bluetooth continues. Using WSASetService it&amp;rsquo;s pretty easy to get your device to advertise a standard Bluetooth service on one of its sockets. Simply create your socket with the Bluetooth address family, bind and listen as normal and then call WSASetService to start advertising a service on this socket to other devices within range. Now call accept and wait&amp;hellip;
I chose the File Transfer Service as my hello world service.</description>
    </item>
    
    <item>
      <title>Sunny day in Kensington Gardens</title>
      <link>https://lenholgate.com/blog/2003/06/sunny-day-in-kensington-gardens.html</link>
      <pubDate>Mon, 23 Jun 2003 09:35:05 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/06/sunny-day-in-kensington-gardens.html</guid>
      <description>We skated on The Broad Walk in Kensington Gardens on Saturday morning. Lovely place. Much nicer than &amp;ldquo;The Beach&amp;rdquo; in Hyde Park. Much quieter, wider, smoother and with a nice little hill&amp;hellip;</description>
    </item>
    
    <item>
      <title>Bluetooth sockets</title>
      <link>https://lenholgate.com/blog/2003/06/bluetooth-sockets.html</link>
      <pubDate>Sun, 22 Jun 2003 20:34:21 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/06/bluetooth-sockets.html</guid>
      <description>This morning I decided to investigate the Windows XP SP1 Bluetooth support. I played with the BluetoothXXXX and quickly became disapointed. I then moved on to looking at how to access the Bluetooth hardware using Winsock and decided that is a much better route to take&amp;hellip;
The Bluetooth API that lives in Irprops.cpl appears to be the easy way in to Bluetooth. The API itself has an &amp;lsquo;interesting&amp;rsquo; design, but I can kinda understand why it looks like it does.</description>
    </item>
    
    <item>
      <title>Working for Microsoft</title>
      <link>https://lenholgate.com/blog/2003/06/working-for-microsoft.html</link>
      <pubDate>Sat, 21 Jun 2003 10:33:53 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/06/working-for-microsoft.html</guid>
      <description>Andy Hopper has written about what makes the thought of working for Microsoft appealing to a geek.
&amp;ldquo;It&amp;rsquo;s presented as a tough place to work even if you&amp;rsquo;re a wizard coder. It&amp;rsquo;s also described as a meritocracy - Impress or Be Forgotten. I honestly don&amp;rsquo;t know if I could survive, and that is the exact reason why I want to do it &amp;ldquo;
Agree.
I got a little closer than Andy, but not much.</description>
    </item>
    
    <item>
      <title>New toy == good</title>
      <link>https://lenholgate.com/blog/2003/06/new-toy-good.html</link>
      <pubDate>Sat, 21 Jun 2003 01:54:30 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/06/new-toy-good.html</guid>
      <description>The new laptop is way cool. All the stuff is now installed and it compiles nice and fast&amp;hellip; The batteries last well, even when the screen is bright and the disk is quiet. I can sit on the sofa and code without being told off for disturbing the TV watching&amp;hellip; The keyboard is SO much better than my aging Dell brick&amp;hellip; Haven&amp;rsquo;t yet needed to try the WIFI, I have CAT5 points everywhere in the flat anyway&amp;hellip; The Bluetooth hardware is MS compatible, so I can write that wrapper code now&amp;hellip;</description>
    </item>
    
    <item>
      <title>Real Greek</title>
      <link>https://lenholgate.com/blog/2003/06/real-greek.html</link>
      <pubDate>Sat, 21 Jun 2003 01:47:56 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/06/real-greek.html</guid>
      <description>Went to a really cool local restaurant tonight. It&amp;rsquo;s Greek Jim but not as we know it.
We&amp;rsquo;ve been to The Real Greek in Hoxton several times before. Tonight we did the meze stuff in the bar area. The bar&amp;rsquo;s really cool. A lovely room, full of character. It used to be a chapel, has a real 40&amp;rsquo;s feel to it and is always buzzing.
Unfortunately the service was pretty sluggish tonight.</description>
    </item>
    
    <item>
      <title>Stuff</title>
      <link>https://lenholgate.com/blog/2003/06/stuff.html</link>
      <pubDate>Sat, 21 Jun 2003 01:44:41 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/06/stuff.html</guid>
      <description>The refactoring project rolls on. This week was mainly taken up with managing a seemingly infinite number of minor releases. We decide to appear &amp;ldquo;responsive&amp;rdquo; by reacting to recently reported, low priority, issues quickly whilst never seeming to make progress on long term plans&amp;hellip; Hmm&amp;hellip;
We&amp;rsquo;re moving foward, but it&amp;rsquo;s slow going. We don&amp;rsquo;t currently seem to be taking into account the overhead required to make a release. Management people don&amp;rsquo;t seem to realise that if they keep insisting on us &amp;lsquo;fixing this now for release tomorrow&amp;rsquo; then it takes a bit longer to get the other stuff done :(</description>
    </item>
    
    <item>
      <title>Password policies</title>
      <link>https://lenholgate.com/blog/2003/06/password-policies.html</link>
      <pubDate>Tue, 17 Jun 2003 10:42:21 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/06/password-policies.html</guid>
      <description>Someone in an organisation decides that people&amp;rsquo;s passwords aren&amp;rsquo;t secure enough. They implement a policy so that people are forced to change their passwords on a regular basis. People find that changing passwords is a pain so they work around the policy by using a &amp;lsquo;system&amp;rsquo; when they change their passwords. Rinse. Repeat.
I just had a password change forced on me at a client&amp;rsquo;s site. No biggie, but they have a complex password policy, well two, and they&amp;rsquo;re different.</description>
    </item>
    
    <item>
      <title>The colours thing bites</title>
      <link>https://lenholgate.com/blog/2003/06/the-colours-thing-bites.html</link>
      <pubDate>Tue, 17 Jun 2003 08:04:20 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/06/the-colours-thing-bites.html</guid>
      <description>A while back I found what might politely be called &amp;ldquo;a mixing of business logic with display logic&amp;rdquo; issue in the refactoring project. Yesterday it bit me&amp;hellip;
So we have an object that has a set of named properties. These properties are a mix of business logic and the display logic for 2 or maybe 3 distinct display modes. That&amp;rsquo;s bad enough in itself but some of the object status values seem to be represented only as a colour&amp;hellip; Several distinct object states map to a single value that stores a single colour value.</description>
    </item>
    
    <item>
      <title>New toy</title>
      <link>https://lenholgate.com/blog/2003/06/new-toy.html</link>
      <pubDate>Tue, 17 Jun 2003 07:16:24 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/06/new-toy.html</guid>
      <description>My old laptop was a brick that didn&amp;rsquo;t run VS.Net fast enough for my liking, so I thought it was time for an upgrade. I went for the Sony Vaio PCG-Z1SP because of the weight, screen, wireless connectivity and the fact that I can slap 1gb ram in it. Oh, ok, and it&amp;rsquo;s pretty sexy.
First impressions are good; it&amp;rsquo;s light, bright and fast. Done the Windows Update thing. Now installing my dev kit.</description>
    </item>
    
    <item>
      <title>Why do I do that</title>
      <link>https://lenholgate.com/blog/2003/06/why-do-i-do-that.html</link>
      <pubDate>Sun, 15 Jun 2003 18:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/06/why-do-i-do-that.html</guid>
      <description>One of the good things about working on a code base of questionable quality is that you get a chance to review the way you work as well as they way the original authors worked. It&amp;rsquo;s my job is to improve the quality of the code and the existing code is so different to how I would have structured it that I find myself questioning the way that I do things.</description>
    </item>
    
    <item>
      <title>Bluetooth blues</title>
      <link>https://lenholgate.com/blog/2003/06/bluetooth-blues.html</link>
      <pubDate>Sun, 15 Jun 2003 00:52:01 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/06/bluetooth-blues.html</guid>
      <description>Obviously been one of those days&amp;hellip;
I was woken before 7 this morning as Miche rushed back to work - always a bad sign when people take a wash bag with them; she&amp;rsquo;s still not home&amp;hellip; :( I was going to go back to sleep, but, well, I was awake and thought that perhaps I&amp;rsquo;d have a doze later. No such luck&amp;hellip;
A day of merging, building and integration. Mixed in with a spot of driver updating for the TDK USB Bluetooth dongle that I have.</description>
    </item>
    
    <item>
      <title>More socket server code updates</title>
      <link>https://lenholgate.com/blog/2003/06/more-socket-server-code-updates.html</link>
      <pubDate>Sun, 15 Jun 2003 00:21:09 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/06/more-socket-server-code-updates.html</guid>
      <description>The latest release of the free version of my asynchronous, windows, IOCP based, socket server framework can now be obtained from here at ServerFramework.com.
I&amp;rsquo;ve updated the code for two more of the socket server articles. More merging, project file updating, and testing&amp;hellip;
[NOTE: This code leaks when adjusted to build with Visual Studio 2005. This seems to be due to a bug in VS2005&amp;rsquo;s STL. See here for a workaround.</description>
    </item>
    
    <item>
      <title>MSDN Subscription blues</title>
      <link>https://lenholgate.com/blog/2003/06/msdn-subscription-blues.html</link>
      <pubDate>Sat, 14 Jun 2003 19:23:08 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/06/msdn-subscription-blues.html</guid>
      <description>and reds and blacks and greens and, well, you get the idea.
Every month when I get a shipment of disks I feel stupid. I just don&amp;rsquo;t get the way the MSDN Universal Sub is organised. I&amp;rsquo;d like a little hint card in each shipment that tells me what disks I should have in the wallet for a &amp;lsquo;full set&amp;rsquo; of &amp;lsquo;up to date&amp;rsquo; disks&amp;hellip;
The colours and numbers and dates and all that is probably really clever but I just don&amp;rsquo;t get it.</description>
    </item>
    
    <item>
      <title>Weekend&#39;s hosed</title>
      <link>https://lenholgate.com/blog/2003/06/weekends-hosed.html</link>
      <pubDate>Fri, 13 Jun 2003 23:40:42 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/06/weekends-hosed.html</guid>
      <description>Michelle&amp;rsquo;s on her way home, but she&amp;rsquo;ll be working all weekend drafting an agreement that needs client sign off by Monday morning.
So that&amp;rsquo;s her hair appointment down the pan and the 30th birthday party we were going to tommorrow night hosed; so the couple of hours last weekend sorting the fancy dress costumes were wasted.
Note to self; make the $20 million this year and let her do the retire to a $10 million pad in Beaver Creek thing sooner rather than later.</description>
    </item>
    
    <item>
      <title>Clean shutdown</title>
      <link>https://lenholgate.com/blog/2003/06/clean-shutdown.html</link>
      <pubDate>Fri, 13 Jun 2003 22:47:38 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/06/clean-shutdown.html</guid>
      <description>No more zone just yet, wine&amp;rsquo;s just made me blabby.
The testing I&amp;rsquo;ve just been doing with my server is real black box stuff. The build process fires off a script that kicks off the server and then runs the test harness which connects to the server and does &amp;ldquo;good stuff&amp;rdquo;, on lots of threads, until it&amp;rsquo;s done. The script then runs a server shutdown app which asks the server to clean up and go away and, well, it does.</description>
    </item>
    
    <item>
      <title>The slacking worked</title>
      <link>https://lenholgate.com/blog/2003/06/the-slacking-worked.html</link>
      <pubDate>Fri, 13 Jun 2003 22:02:48 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/06/the-slacking-worked.html</guid>
      <description>Had one of those days where I couldn&amp;rsquo;t get started. I guess it was probably something to do with the beer last night. It was Darren&amp;rsquo;s birthday and we went to Namco on the South Bank and played on the arcade machines, drank beer, drove Dogems and generally acted Darren&amp;rsquo;s age ;) Since I couldn&amp;rsquo;t get going with what I was supposed to do today I sorted out the next socket server release and did the Windows Update dance with all of my boxes.</description>
    </item>
    
    <item>
      <title>Slacking</title>
      <link>https://lenholgate.com/blog/2003/06/slacking.html</link>
      <pubDate>Fri, 13 Jun 2003 16:46:25 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/06/slacking.html</guid>
      <description>It&amp;rsquo;s a lovely day out there today&amp;hellip;</description>
    </item>
    
    <item>
      <title>Socket Server code updates</title>
      <link>https://lenholgate.com/blog/2003/06/socket-server-code-updates.html</link>
      <pubDate>Fri, 13 Jun 2003 15:08:06 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/06/socket-server-code-updates.html</guid>
      <description>The latest release of the free version of my asynchronous, windows, IOCP based, socket server framework can now be obtained from here at ServerFramework.com.
For some time I&amp;rsquo;ve been promising to update the socket server articles to use the latest version of my code. Today I finally updated the code for the first article. I&amp;rsquo;m going to update the article itself soon, but in the meantime I&amp;rsquo;m posting the new code here.</description>
    </item>
    
    <item>
      <title>Developer buy in</title>
      <link>https://lenholgate.com/blog/2003/06/developer-buy-in.html</link>
      <pubDate>Fri, 13 Jun 2003 12:11:51 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/06/developer-buy-in.html</guid>
      <description>The refactoring project rolls on and the code gets better. This week saw a marked change in attitute from some of the developers on the team&amp;hellip;
I was originally brought into this project because the lead developer was leaving and other developers within the team were unhappy with taking over the project as they were scared of the state that the code was in. Management accepted the need for change and welcomed the incremental improvements that my original report on the project proposed.</description>
    </item>
    
    <item>
      <title>VS.Net 2003</title>
      <link>https://lenholgate.com/blog/2003/06/vsnet-2003.html</link>
      <pubDate>Wed, 11 Jun 2003 08:02:38 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/06/vsnet-2003.html</guid>
      <description>Why oh why couldn&amp;rsquo;t the new VS.Net solution file format have either been compatible with VS.Net 2002 or have a different file extension&amp;hellip;
I&amp;rsquo;m in the process up updating my socket server code to build with VS.Net 2003. The code already builds with both VC6 and VS.Net 2002. Since the project files for VC6 and VS.Net have different file extensions they quite happily co-exist in the same directory. Unfortunately, for whatever reason Microsoft chose to make the VS.</description>
    </item>
    
    <item>
      <title>I&#39;m an exception, let me out of here...</title>
      <link>https://lenholgate.com/blog/2003/06/im-an-exception-let-me-out-of-here.html</link>
      <pubDate>Tue, 10 Jun 2003 23:15:52 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/06/im-an-exception-let-me-out-of-here.html</guid>
      <description>We&amp;rsquo;re adding some new functionality to the refactoring project. Unfortunately the new functionality is located in the Heart of Darkness - the most twisty and poorly structured code in the whole system. Today I stumbled onto something truly awful. Exceptions used as glorified gotos within a 350 line function&amp;hellip;
Exceptions are a great way of handling exceptional situations by hurling information up the call stack to someone who can deal with it better than you can.</description>
    </item>
    
    <item>
      <title>Got skates, let&#39;s go!</title>
      <link>https://lenholgate.com/blog/2003/06/got-skates-lets-go.html</link>
      <pubDate>Sun, 08 Jun 2003 22:24:41 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/06/got-skates-lets-go.html</guid>
      <description>Spent the afternoon at Decathlon in Surrey Quays. Came away with a pair of Rollerblade Lightning 03&amp;rsquo;s - which are probably a little over the top considering my lack of skill ;) but they were the most comfortable and smoothest skates I tried. Also got all the pads, a helmet and a rucksack.
I don&amp;rsquo;t expect to get much coding done in the evenings this week :)</description>
    </item>
    
    <item>
      <title>Evanescence</title>
      <link>https://lenholgate.com/blog/2003/06/evanescence.html</link>
      <pubDate>Sat, 07 Jun 2003 00:32:46 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/06/evanescence.html</guid>
      <description>Miche did the spontaneous thing this week. After hearing &amp;ldquo;Bring me to Life&amp;rdquo; on the radio once she bought the Evanescence CD. Cool stuff. Very nice sound. Kind of All about Eve meets Skin from Skunk Anansie on vocals with a nice rocky Linkin Park kinda guitar thing going on.</description>
    </item>
    
    <item>
      <title>A coming together...</title>
      <link>https://lenholgate.com/blog/2003/06/a-coming-together.html</link>
      <pubDate>Sat, 07 Jun 2003 00:27:51 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/06/a-coming-together.html</guid>
      <description>A good week for the refactoring project. The release procedures that are now in place mean that we&amp;rsquo;ve been able to react quickly to new functionality requests whilst continuing the new development efforts. Ah the wonders of a source control system being used properly&amp;hellip;
It would be nice if we reacted at the right speed rather than just jumping when the users scream, but we&amp;rsquo;ll get there. This week we had a couple of releases that could have done with a little more testing&amp;hellip; Still, this was pointed out to the person who made the call to release and, well, they made the call.</description>
    </item>
    
    <item>
      <title>Final skate lesson</title>
      <link>https://lenholgate.com/blog/2003/06/final-skate-lesson.html</link>
      <pubDate>Wed, 04 Jun 2003 23:07:14 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/06/final-skate-lesson.html</guid>
      <description>We had our last inline skating lesson tonight. Lots of recap on what we&amp;rsquo;ve done before, and lots of practice.
The crossover turns are quite comfortable now in either direction, which is nice, and we did some simple slalom - note to self: buy 6 day-glo cups. We were renting the skates for the duration of the course and today we had to give them back :( This means that we have no skates :( :( Which means, we can&amp;rsquo;t sneak a quick skate in on Saturday morning before we do all the other things we have planned for the weekend :( :( :( Sunday we shop for skates.</description>
    </item>
    
    <item>
      <title>Blog is 1month old!</title>
      <link>https://lenholgate.com/blog/2003/06/blog-is-1month-old.html</link>
      <pubDate>Wed, 04 Jun 2003 22:25:39 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/06/blog-is-1month-old.html</guid>
      <description>Well, the site is 1 month old and I&amp;rsquo;m still rambling on. I think I have about 4 readers now too ;)</description>
    </item>
    
    <item>
      <title>Stage complete. Time bonus...</title>
      <link>https://lenholgate.com/blog/2003/06/stage-complete-time-bonus.html</link>
      <pubDate>Wed, 04 Jun 2003 18:24:50 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/06/stage-complete-time-bonus.html</guid>
      <description>This morning I wasted some time tracking down bugs in the multi-threaded online game engine that I&amp;rsquo;m writing for a client. Now I have tests. Tests are good.
The bugs were little things, they always are. Most of the wasted time was spent simply getting the server into a state where I could poke it just right and make the bug wave a white flag. For example, a bug only shows up when you have 3 players and one does something particular in round 2 and another leaves when he shouldn&amp;rsquo;t in round 3.</description>
    </item>
    
    <item>
      <title>Infect me</title>
      <link>https://lenholgate.com/blog/2003/06/infect-me.html</link>
      <pubDate>Wed, 04 Jun 2003 09:09:48 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/06/infect-me.html</guid>
      <description>I&amp;rsquo;m not test infected yet. I&amp;rsquo;m almost there. I want to be there. But I&amp;rsquo;m not there yet.
I just spent an hour and a half fixing a couple of bugs in the online game system I&amp;rsquo;m writing. It took longer than it should have. Some areas need refactoring a little due to requirements evolution. The main problem, however, was getting to the point where I could test each change that i made took too much time; run server, run clients, do some stuff, watch it fail.</description>
    </item>
    
    <item>
      <title>You don&#39;t want to do it like that....</title>
      <link>https://lenholgate.com/blog/2003/06/you-dont-want-to-do-it-like-that.html</link>
      <pubDate>Tue, 03 Jun 2003 22:54:09 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/06/you-dont-want-to-do-it-like-that.html</guid>
      <description>During some simple refactoring today, a phase of &amp;lsquo;restricting access to data members&amp;rsquo;, I discovered an interesting little design &amp;lsquo;descision&amp;rsquo;. In the spirit of completely mixing up the business logic and the display logic we have a data member that represents a colour that an object uses as its background colour when it is displayed in a grid. The colour is set depending on the state of the object; error, ok, new, complete, etc.</description>
    </item>
    
    <item>
      <title>Matrix Reloaded &amp; Animatrix</title>
      <link>https://lenholgate.com/blog/2003/06/matrix-reloaded-animatrix.html</link>
      <pubDate>Tue, 03 Jun 2003 08:21:19 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/06/matrix-reloaded-animatrix.html</guid>
      <description>Finally got around to seeing Matrix Reloaded on Sunday night. Then picked up the Animatrix yesterday. Before I read any reviews or blogs on the subject I thought I&amp;rsquo;d spout off on my own&amp;hellip;
(Contains spoilers and future plot speculation&amp;hellip;)
Initial reaction at the end of Matrix Reloaded was one of disapointment. The effects were good, but I&amp;rsquo;d found the pace somewhat sluggish in places, the main story was a little thin and I didn&amp;rsquo;t like the downbeat ending.</description>
    </item>
    
    <item>
      <title>Victoria Park, The Crown, Matrix Reloaded</title>
      <link>https://lenholgate.com/blog/2003/06/victoria-park-the-crown-matrix-reloaded.html</link>
      <pubDate>Sun, 01 Jun 2003 22:50:58 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/06/victoria-park-the-crown-matrix-reloaded.html</guid>
      <description>Skated in Victoria Park, lunch at The Crown, Matrix Reloaded and a pizza at Strada. Top day ;)
We skated in Victoria Park this morning. It was pretty good. Lots of wide, quiet, paths with reasonable tarmac and nowhere near as busy as Hyde Park. Practising crossover turns, skating fast, balancing on one foot and looking for kerbs to jump off of&amp;hellip;
Stopped for lunch at The Crown. Food was good, if a little pricey.</description>
    </item>
    
    <item>
      <title>Bottle of Evian == cure for RSI?</title>
      <link>https://lenholgate.com/blog/2003/05/bottle-of-evian-cure-for-rsi.html</link>
      <pubDate>Sat, 31 May 2003 01:15:57 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/05/bottle-of-evian-cure-for-rsi.html</guid>
      <description>I used to have pretty severe problems with my shoulders and right arm. Mostly mouse related; I think. When it was really bad I had a lot of shiatsu, which worked well and helped remove the residual tension in my shoulder. Now I seem to be able to keep it all at bay by drinking lots of water&amp;hellip;
I don&amp;rsquo;t actually think it&amp;rsquo;s the drinking itself that helps. It&amp;rsquo;s all the movement that goes with it.</description>
    </item>
    
    <item>
      <title>CSS, IE 5.x and the box model bug..</title>
      <link>https://lenholgate.com/blog/2003/05/css-ie-5x-and-the-box-model-bug.html</link>
      <pubDate>Sat, 31 May 2003 00:44:27 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/05/css-ie-5x-and-the-box-model-bug.html</guid>
      <description>Ok, the blog looks crap in IE 5.x I&amp;rsquo;ve seen the stuff about hacking around the css bugs in IE but I&amp;rsquo;m not clever enough to hack the css sheet that I have to do that.
If anyone knows what I need to do to fix it so that it looks nicer in IE 5.x, please let me know.</description>
    </item>
    
    <item>
      <title>Hello?</title>
      <link>https://lenholgate.com/blog/2003/05/hello.html</link>
      <pubDate>Sat, 31 May 2003 00:23:40 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/05/hello.html</guid>
      <description>Just watched &amp;ldquo;28 Days Later&amp;rdquo; on dvd. Very cool. Very British - very non-Hollywood. Scary film.
The best bit?
Seeing the London streets so empty. If you live or work anywhere near London you&amp;rsquo;d know how impossible those empty street scenes were :)</description>
    </item>
    
    <item>
      <title>Requirements overload</title>
      <link>https://lenholgate.com/blog/2003/05/requirements-overload.html</link>
      <pubDate>Sat, 31 May 2003 00:17:42 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/05/requirements-overload.html</guid>
      <description>Today -1 Week: Them: So, here&amp;rsquo;s what we need by 9th June. Us: Ok, we can just about do that&amp;hellip;
Today: Them: Oh, add all of these things and put most of the things we asked for last week way down the list. Can you still do it by the 9th?
Perhaps.
Right now we don&amp;rsquo;t know if we can still hit the 9th. The new requirements have added a vast element of uncertainty.</description>
    </item>
    
    <item>
      <title>We came. We saw. We did a little testing.</title>
      <link>https://lenholgate.com/blog/2003/05/we-came-we-saw-we-did-a-little-testing.html</link>
      <pubDate>Sat, 31 May 2003 00:06:09 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/05/we-came-we-saw-we-did-a-little-testing.html</guid>
      <description>Another week another release. Well, almost. The plan was to release today. The plan ignored the fact that most of the team are at a wedding this weekend and nobody was around today and nobody&amp;rsquo;s around on Monday&amp;hellip;
The latest release included some new functionality and a lot of refactoring. Given the amount of code that had been &amp;rsquo;touched&amp;rsquo; I recommended a longer test phase than we usually planned, i.e. more than 1 day.</description>
    </item>
    
    <item>
      <title>Crossover turns and going backwards</title>
      <link>https://lenholgate.com/blog/2003/05/crossover-turns-and-going-backwards.html</link>
      <pubDate>Fri, 30 May 2003 21:19:36 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/05/crossover-turns-and-going-backwards.html</guid>
      <description>As promised this week&amp;rsquo;s lesson had us doing crossover turns and the start of skating backwards.
Crossover turns aren&amp;rsquo;t actually that hard. Once you get used the the idea of doing it. Just lift the outside leg up during the turn, move your weight in a bit, wait until you start to fall over and then step across yourself onto the other foot. Note this is just what it feels like, it&amp;rsquo;s probably completely wrong ;) It all felt far easier if I rolled my turning skate onto the inside edge.</description>
    </item>
    
    <item>
      <title>One step closer to sanity</title>
      <link>https://lenholgate.com/blog/2003/05/one-step-closer-to-sanity.html</link>
      <pubDate>Tue, 27 May 2003 23:23:55 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/05/one-step-closer-to-sanity.html</guid>
      <description>Now that the refactoring project has tests it&amp;rsquo;s worth having a daily build so that it&amp;rsquo;s easy to spot if someone checks something in that breaks a test.
I spent 30 mins or so first thing this morning writing a script that pulls all the source from CVS and builds the test harnesses in debug and release mode and runs them. This now runs daily on my machine.
Most of the day was spent moving as many classes as possible into the library.</description>
    </item>
    
    <item>
      <title>Test-Driven Development (By Example) - Kent Beck</title>
      <link>https://lenholgate.com/blog/2003/05/test-driven-development-by-example---kent-beck.html</link>
      <pubDate>Tue, 27 May 2003 07:57:11 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/05/test-driven-development-by-example---kent-beck.html</guid>
      <description>Kent Beck demonstrates the testing side of XP by separating it out into its own simple methodology. Test-Driven Development is exactly what it says it is. The entire design and development effort is driven by the tests that you write and you&amp;rsquo;re encouraged to write those tests first&amp;hellip;
Parts one and two contain worked examples of Test-Driven Development. Some will probably say that they&amp;rsquo;re too simple, but I&amp;rsquo;ve found that even the most complex domain usually ends up as relatively simple code if you develop in this way.</description>
    </item>
    
    <item>
      <title>Our first test</title>
      <link>https://lenholgate.com/blog/2003/05/our-first-test.html</link>
      <pubDate>Mon, 26 May 2003 20:44:54 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/05/our-first-test.html</guid>
      <description>The refactoring project reached an exciting new stage on Friday. We were finally able to refactor some code to the point where several classes could be extracted from the application project and built in a library that the application then linked to. This required that we reduce the coupling of the classes and increase the cohesion. Once these classes were extracted we were able to set up a test harness project and write our first test case!</description>
    </item>
    
    <item>
      <title>Can Do considered harmful</title>
      <link>https://lenholgate.com/blog/2003/05/can-do-considered-harmful.html</link>
      <pubDate>Fri, 23 May 2003 08:59:20 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/05/can-do-considered-harmful.html</guid>
      <description>I come from a family of pessimists, but I think I got off lightly&amp;hellip; I&amp;rsquo;m just slightly on the &amp;lsquo;doom and gloom&amp;rsquo; side of centre. I expect this probably accounts for my attitude to risk. I assume bad things will happen. I want to know what the worst case scenario is. I ask difficult questions in meetings. Just be thankful that you don&amp;rsquo;t end up in a meeting room discussing your project with my sister&amp;hellip;</description>
    </item>
    
    <item>
      <title>Slack - Tom DeMarco</title>
      <link>https://lenholgate.com/blog/2003/05/slack---tom-demarco.html</link>
      <pubDate>Fri, 23 May 2003 07:12:55 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/05/slack---tom-demarco.html</guid>
      <description>I&amp;rsquo;ve always been a fan of DeMarco&amp;rsquo;s work. I tend to nod my head and agree as I read, and wish that all the software development managers that I work with would read his books. Slack is an excellent analysis of the problems plaguing large corporations&amp;rsquo; software development efforts.
The book starts off looking at how and when knowledge work gets done; the myth of the fungible resource, and how the drive for efficiency in many corporations leads to everyone being so busy that they have no time for anything but the task at hand.</description>
    </item>
    
    <item>
      <title>Scribbly pen</title>
      <link>https://lenholgate.com/blog/2003/05/scribbly-pen.html</link>
      <pubDate>Wed, 21 May 2003 13:59:32 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/05/scribbly-pen.html</guid>
      <description>I think best when I can scribble. When designing software I always draw boxes and lines. These diagrams give me an anchor to come back to if I get distracted. They get binned once they&amp;rsquo;re no longer needed. Pen and paper is the only way I do this, Visio is great for after the fact diagrams, but it&amp;rsquo;s too slow to catch the thought process.
To be able to keep up with my thinking I need a pen that scribbles well.</description>
    </item>
    
    <item>
      <title>Skating and Skiing</title>
      <link>https://lenholgate.com/blog/2003/05/skating-and-skiing.html</link>
      <pubDate>Wed, 21 May 2003 08:03:19 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/05/skating-and-skiing.html</guid>
      <description>Lesson three was on Monday. We did &amp;lsquo;going faster&amp;rsquo;, uneven surfaces, moving curb dismounts ;) and parallel turns. I got on well with both. It&amp;rsquo;s just a balance thing, which is good.
The movements feel like they&amp;rsquo;re useful practice for skiing. Especially the parallel turn edging, you can really roll your ankles quite a long way on inline skates. Next week is cross over turns and skating backwards. This will be interesting because these are things I never managed to do on roller skates or ice.</description>
    </item>
    
    <item>
      <title>Just in time requirements</title>
      <link>https://lenholgate.com/blog/2003/05/just-in-time-requirements.html</link>
      <pubDate>Sun, 18 May 2003 20:05:58 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/05/just-in-time-requirements.html</guid>
      <description>I&amp;rsquo;m currently developing an online game for a client using The Server Framework. I didn&amp;rsquo;t realise that it was an online game when they originally contracted me. It&amp;rsquo;s become a useful example of emergent requirements. Each time I think the project is complete they come back to me and say &amp;ldquo;and now we want you to quote for doing X&amp;rdquo;&amp;hellip;
Almost a year ago I published a series of articles on a piece of code that allows you to write TCP/IP servers on Windows machines.</description>
    </item>
    
    <item>
      <title>Refactoring project: Joel Test, reprise</title>
      <link>https://lenholgate.com/blog/2003/05/refactoring-project-joel-test-reprise.html</link>
      <pubDate>Sun, 18 May 2003 00:51:30 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/05/refactoring-project-joel-test-reprise.html</guid>
      <description>Last week we were a 5.5, now we&amp;rsquo;re an 8. Not bad progress, but there&amp;rsquo;s still a long way to go until the project can get a &amp;lsquo;SaneMark&amp;rsquo;&amp;hellip;
We can now do a build in one step. We had several point releases last week and we can now do them with a script which will pull all correct source files out of CVS, build them and create the suff that we need to push out to the web server.</description>
    </item>
    
    <item>
      <title>Last orders...</title>
      <link>https://lenholgate.com/blog/2003/05/last-orders.html</link>
      <pubDate>Sat, 17 May 2003 11:34:14 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/05/last-orders.html</guid>
      <description>Last night I had some beers with some guys I used to work with. They were celebrating the latest round of redundancies. What was interesting was that generally the people that I spoke to that were still employed seemed less happy than the people that had been &amp;rsquo;let go&amp;rsquo;&amp;hellip;
I worked at Interlink between 1994 and 1997. It was my first real programming job, until then I&amp;rsquo;d been a plumber by trade and a programmer in the evenings.</description>
    </item>
    
    <item>
      <title>Dawn of the dead</title>
      <link>https://lenholgate.com/blog/2003/05/dawn-of-the-dead.html</link>
      <pubDate>Sat, 17 May 2003 09:16:07 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/05/dawn-of-the-dead.html</guid>
      <description>One of the problems with the code base that we&amp;rsquo;re refactoring is that it&amp;rsquo;s full of dead code. This week we dealt with it&amp;hellip;
Throughout the system there were swathes of code that were commented out, there was very little in the way of explanation as to why the code was not currently required and when it might be required again. It may have been old code that wasn&amp;rsquo;t required any more, or was broken or new code that wasn&amp;rsquo;t finished yet, or was broken.</description>
    </item>
    
    <item>
      <title>Busy week</title>
      <link>https://lenholgate.com/blog/2003/05/busy-week.html</link>
      <pubDate>Fri, 16 May 2003 23:10:29 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/05/busy-week.html</guid>
      <description>Refactoring project going well; Just in time requirements project moving into a phase where we finally get end to end connectivity; skating hurts - lesson two, 2 falls and, well, my body is old :( I know why I ski and don&amp;rsquo;t snowboard&amp;hellip; Poker lessons and some people I used to work with a long time ago lose their jobs and are happy about it&amp;hellip;</description>
    </item>
    
    <item>
      <title>Colorado 2003</title>
      <link>https://lenholgate.com/blog/2003/05/colorado-2003.html</link>
      <pubDate>Sun, 11 May 2003 22:34:38 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/05/colorado-2003.html</guid>
      <description>In March we skied in Colorado. Beaver Creek, Vail, Breckenridge and Keystone. Excellent conditions. We were in Vail on the day after the big dump in March and had 18&amp;quot; fresh powder on top of the grooming. I took the video camera out when were we in Breckenridge. This is the result.
I filmed the guys whilst skiing around them. I didn&amp;rsquo;t use the head cam this time, just held the camera and pointed.</description>
    </item>
    
    <item>
      <title>On Cringely On Refactoring</title>
      <link>https://lenholgate.com/blog/2003/05/on-cringely-on-refactoring.html</link>
      <pubDate>Sun, 11 May 2003 11:53:07 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/05/on-cringely-on-refactoring.html</guid>
      <description>Bob Cringely has been upsetting some programmers with his comments on refactoring. Initially, he had this to say:
&amp;ldquo;Cleaning up code&amp;rdquo; is a terrible thing. Redesigning WORKING code into different WORKING code (also known as refactoring) is terrible. The reason is that once you touch WORKING code, it becomes NON-WORKING code, and the changes you make (once you get it working again) will never be known. It is basically a programmer&amp;rsquo;s ego trip and nothing else.</description>
    </item>
    
    <item>
      <title>New flat pictures</title>
      <link>https://lenholgate.com/blog/2003/05/new-flat-pictures.html</link>
      <pubDate>Sat, 10 May 2003 23:52:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/05/new-flat-pictures.html</guid>
      <description>In March 2002 Vincent Hart, a freelance photographer, took some pictures of our flat with the intention of getting them published. His pictures appeared in the March 2003 edition of 25 Beautiful Homes.
Some more of the pictures are now availble on our flat project diary web site.</description>
    </item>
    
    <item>
      <title>The Joel Test</title>
      <link>https://lenholgate.com/blog/2003/05/the-joel-test.html</link>
      <pubDate>Fri, 09 May 2003 07:17:06 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/05/the-joel-test.html</guid>
      <description>Joel Spolsky has a quick test to rate how good your software development process is.
I thought it would be useful to see how the refactoring project scores.
1. Do you use source control?
Yes. The main part of the team has always used CVS for source control and do it properly (tags, branches, all kinds of stuff). This project&amp;rsquo;s lead developer didn&amp;rsquo;t believe in source control, but eventually the rest of the team dragged him into the light.</description>
    </item>
    
    <item>
      <title>Little and often</title>
      <link>https://lenholgate.com/blog/2003/05/little-and-often.html</link>
      <pubDate>Thu, 08 May 2003 21:47:05 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/05/little-and-often.html</guid>
      <description>The XP folks talk about the importance of making frequent small releases. This method has advantages over and above the obvious ones; not only do you get regular feedback from real users, you also get regular practice at doing a release&amp;hellip;
Picture a project. You work like crazy for x months and then, right at the end, you take what you have and release it. But how do you release it.</description>
    </item>
    
    <item>
      <title>Sk8er boy</title>
      <link>https://lenholgate.com/blog/2003/05/sk8er-boy.html</link>
      <pubDate>Thu, 08 May 2003 21:04:58 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/05/sk8er-boy.html</guid>
      <description>Last night I had my first inline skating lesson with city skate at Spitalfields.
It&amp;rsquo;s been almost 20 years since I last skated on pavement. That in itself is kinda scary, I&amp;rsquo;m not sure I have something that I did 20 years ago that I&amp;rsquo;ve suddenly started doing again. Oh, the joy of getting older.
Last time I skated I was on roller skates; same number of wheels, half the number of axels.</description>
    </item>
    
    <item>
      <title>What kind of thinker...</title>
      <link>https://lenholgate.com/blog/2003/05/what-kind-of-thinker.html</link>
      <pubDate>Thu, 08 May 2003 13:31:12 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/05/what-kind-of-thinker.html</guid>
      <description>I just took the What kind of thinker are you test over on the BBC site.
Interesting results&amp;hellip;
You are a Spatial Thinker
*Spatial Thinkers:
Tend to think in pictures, and can develop good mental models of the physical world.
Think well in three dimensions
Have a flair for working with objects
Like other spatial thinkers, Leonardo had a talent for designing buildings and machinery. He also invented a new style of map making.</description>
    </item>
    
    <item>
      <title>Understanding bad code</title>
      <link>https://lenholgate.com/blog/2003/05/understanding-bad-code.html</link>
      <pubDate>Thu, 08 May 2003 08:22:36 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/05/understanding-bad-code.html</guid>
      <description>I always used to think that there was probably a good reason behind things I didn&amp;rsquo;t understand. Now I&amp;rsquo;m far quicker at deciding that the reason is that the person who created the thing didn&amp;rsquo;t understand either.
I&amp;rsquo;m currently working with a client to aid in the handover of some source code from the original developer to the rest of the development team. An unusual project because the original developer is still around for a while.</description>
    </item>
    
    <item>
      <title>The Order of the Silver Rose</title>
      <link>https://lenholgate.com/blog/2003/05/the-order-of-the-silver-rose-1.html</link>
      <pubDate>Mon, 05 May 2003 22:34:31 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/05/the-order-of-the-silver-rose-1.html</guid>
      <description>The Order of the Silver Rose was a religious order of Knights in an AD&amp;amp;D campaign that I ran. The campaign was set in The Forgotten Realms and was based around the FRE1-3 scenario packs.
Continue reading &amp;ldquo;The Order of the Silver Rose</description>
    </item>
    
    <item>
      <title>Death by debug trace</title>
      <link>https://lenholgate.com/blog/2003/05/death-by-debug-trace.html</link>
      <pubDate>Sun, 04 May 2003 11:27:36 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/05/death-by-debug-trace.html</guid>
      <description>In Asserts Redux Dan Dunham and Scott Shumaker are discussing how sometimes testers have to be able to work around assertion failures and how allowing them to do so dilutes the power of the assertions. The discussion moves on to how debug traces can get out of hand and eventually you drown in debug spew.
I find that in almost all cases debug tracing is overused. The problem is, as Dan succinctly puts it: &amp;ldquo;When you&amp;rsquo;re writing the code, you put in a bunch of debug statements to verify things as you go.</description>
    </item>
    
    <item>
      <title>Currently reading...</title>
      <link>https://lenholgate.com/blog/2003/05/currently-reading.html</link>
      <pubDate>Sat, 03 May 2003 15:05:55 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/05/currently-reading.html</guid>
      <description>Updated: 23-May-2003
Questioning Extreme Programming by Pete McBreen
A useful analysis of the claims that the XP community makes and comparisons between the XP way and other Agile Methodologies. I&amp;rsquo;m currently about half way through and so far it seems like good stuff. It helps you understand what you can expect to gain from XP and if XP is the right thing for you. Often it wont be, but you may be able to learn something from it or use some aspect in your project anyway.</description>
    </item>
    
    <item>
      <title>The importance of keeping the metaphor pure</title>
      <link>https://lenholgate.com/blog/2003/05/the-importance-of-keeping-the-metaphor-pure.html</link>
      <pubDate>Sat, 03 May 2003 12:46:38 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/05/the-importance-of-keeping-the-metaphor-pure.html</guid>
      <description>Kent Beck and the XP guys have a lot to say about the &amp;rsquo;the system metaphor&amp;rsquo;. In XP the metaphor replaces what most other methodologies call &amp;rsquo;the architecture&amp;rsquo;. It&amp;rsquo;s a single, coherent, view of the system. It gives you a single story from which to choose the names of things in the system. It helps you communicate about the system in a consistent language that even your users can understand.</description>
    </item>
    
    <item>
      <title>Rifts character sketch</title>
      <link>https://lenholgate.com/blog/2003/05/rifts-character-sketch-1.html</link>
      <pubDate>Sat, 03 May 2003 07:12:25 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/05/rifts-character-sketch-1.html</guid>
      <description>I&amp;rsquo;ve played fantasy role playing games since I was about 14. We used to play every weekend but now we&amp;rsquo;re lucky if we can get everyone together once a year.
Most of the time we played AD&amp;amp;D, or our own &amp;ldquo;house rules&amp;rdquo; version of Rune Quest. We bought lots of other stuff, but never really got into playing them.
This character sketch is from a Rifts scenario that I made notes for but never got around to running.</description>
    </item>
    
    <item>
      <title>Day 0</title>
      <link>https://lenholgate.com/blog/2003/05/day-0.html</link>
      <pubDate>Sat, 03 May 2003 07:01:17 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/05/day-0.html</guid>
      <description>I have lots of stuff that I&amp;rsquo;ve been meaning to throw up onto the web for a while. Lots of stuff that&amp;rsquo;s been in my digital equivalent of an old cardboard box for several years. I&amp;rsquo;m going to be posting these old things from time to time and setting their publication date to the date that they were originally created.
This is day 0. Entries before now were posted after now&amp;hellip;</description>
    </item>
    
    <item>
      <title>Welcome</title>
      <link>https://lenholgate.com/blog/2003/05/welcome.html</link>
      <pubDate>Sat, 03 May 2003 06:38:19 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2003/05/welcome.html</guid>
      <description>I&amp;rsquo;ve been meaning to put up a personal web site for a while now. This is it.
Originally I had the usual &amp;lsquo;collection of random rubbish&amp;rsquo; style of personal web site. This then grew to contain my technical ramblings and details of my consulting business. I decided that this mixture wasnt exactly professional and pulled all of the &amp;lsquo;sensible&amp;rsquo; stuff out into a new web site for my consulting business. The remains of my personal pages were left to ecompose&amp;hellip;</description>
    </item>
    
    <item>
      <title>JetByte News: Real-time fixed income position server development</title>
      <link>https://lenholgate.com/news/2002/12/real-time-fixed-income-position-server-development.html</link>
      <pubDate>Sun, 01 Dec 2002 12:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/news/2002/12/real-time-fixed-income-position-server-development.html</guid>
      <description>Len&amp;rsquo;s working with Barclays Capital to develop a real-time fixed income position server for them. The system integrates into the COM infrastructure, is written in C++, uses Test Driven Development and interface based programming techniques.</description>
    </item>
    
    <item>
      <title>Using OpenSSL with Asynchronous Sockets</title>
      <link>https://lenholgate.com/blog/2002/11/using-openssl-with-asynchronous-sockets.html</link>
      <pubDate>Mon, 04 Nov 2002 13:08:58 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2002/11/using-openssl-with-asynchronous-sockets.html</guid>
      <description>OpenSSL is an open source implementation of the SSL and TLS protocols. Unfortunately it doesn&amp;rsquo;t play well with windows style asynchronous sockets. This article - previously published in Windows Developer Magazine and now available on the Dr. Dobbs site - provides a simple connector that enables you to use OpenSSL asynchronously.
Note: If you need high performance SSL over TCP/IP then this is available as an optional part of The Server Framework; see here for details.</description>
    </item>
    
    <item>
      <title>Sinking connection points in C&#43;&#43; objects.</title>
      <link>https://lenholgate.com/blog/2002/05/sinking-connection-points-in-c-objects.html</link>
      <pubDate>Thu, 30 May 2002 01:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2002/05/sinking-connection-points-in-c-objects.html</guid>
      <description>Sometimes it would be nice to be able to use a simple C++ object as a sink for Connection Point notifications. This article shows you how.
Sinking connection points in C++ objects.
Many COM objects provide events to their clients by means on Connection Points. A Connection Point is a generalised method of allowing clients to register a COM interface so that the object can notify them of things that they may be interested in.</description>
    </item>
    
    <item>
      <title>Designing asynchonous COM components for VB</title>
      <link>https://lenholgate.com/blog/2002/04/designing-asynchonous-com-components-for-vb.html</link>
      <pubDate>Thu, 11 Apr 2002 01:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2002/04/designing-asynchonous-com-components-for-vb.html</guid>
      <description>This example COM component provides three COM objects for using the Win32 Mailslot IPC mechanism. The component may be useful if you need to communicate from VB using Mailslots. However, the reason I wrote it was to demonstrate creating a COM component in C++ that integrates well with VB and can fire asynchronous events.
Overview
The COM component consists of an object factory which is used to create instances of the Mailslot manipulation objects.</description>
    </item>
    
    <item>
      <title>JetByte News: Fixed-price development work for PayPoint</title>
      <link>https://lenholgate.com/news/2002/01/fixed-price-development-work-for-paypoint.html</link>
      <pubDate>Tue, 01 Jan 2002 12:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/news/2002/01/fixed-price-development-work-for-paypoint.html</guid>
      <description>We&amp;rsquo;ve been engaged by PayPoint to look into refactoring and improving some of their existing C++ systems.
We&amp;rsquo;re also developing a new ISO-8583 transaction server for them using The Server Framework</description>
    </item>
    
    <item>
      <title>JetByte News: Contract with Commerzbank</title>
      <link>https://lenholgate.com/news/2001/11/contract-with-commerzbank.html</link>
      <pubDate>Thu, 01 Nov 2001 12:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/news/2001/11/contract-with-commerzbank.html</guid>
      <description>We have secured a contract with Commerzbank to work with their Summit Bonds IT department to help them provide data from their Summit system to their users via Microsoft Excel (using XLL addins written in C++) with backend servers in C++ using OmniORB and Java using JacORB.</description>
    </item>
    
    <item>
      <title>AVL Tree</title>
      <link>https://lenholgate.com/blog/2001/08/avl-tree.html</link>
      <pubDate>Tue, 07 Aug 2001 11:31:56 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2001/08/avl-tree.html</guid>
      <description>A &amp;ldquo;generic&amp;rdquo; AVL Tree, from the dark days before templates&amp;hellip; The code here is some of my first C++. Back in 1991 C++ was still pretty new. Looking back at my early C++ is better than looking back at my early C. At least my early C++ just looked like OKish C with some odd keywords&amp;hellip;
How do you index a data structure that keeps changing?
The game world for the multi-user adventure system I was writing between &amp;lsquo;89 and &amp;lsquo;94 was stored in a network of interconnected nodes.</description>
    </item>
    
    <item>
      <title>Rooms 1.7</title>
      <link>https://lenholgate.com/blog/2001/08/rooms-17.html</link>
      <pubDate>Thu, 02 Aug 2001 11:25:01 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2001/08/rooms-17.html</guid>
      <description>In 1989 I taught myself C to write an adventure game, the code&amp;rsquo;s fairly bad, but 10 year&amp;rsquo;s later, the game&amp;rsquo;s still quite cool!
A very simple adventure game&amp;hellip;
Over 10 years ago I taught myself to program in C. I wanted to write a program to help me customise the multi-user adventure game I was playing at the time. In MUD II when you reached the exalted rank of Wizard you could create your own rooms and objects.</description>
    </item>
    
    <item>
      <title>Java caches in the middle tier</title>
      <link>https://lenholgate.com/blog/2001/07/java-caches-in-the-middle-tier.html</link>
      <pubDate>Thu, 26 Jul 2001 20:18:27 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2001/07/java-caches-in-the-middle-tier.html</guid>
      <description>A common way to improve the performance of Java code is to cache objects rather than repeatedly create and destroy them. This is especially true when you&amp;rsquo;re writing middle tier servers that service client requests and return results objects. Implementing a flexible caching scheme in Java is relatively easy, but there are a few things to watch for.
The problem Creating objects in the middle tier that live for only the length of a single client request can be inefficient.</description>
    </item>
    
    <item>
      <title>The CORBA Evictor Pattern in Java</title>
      <link>https://lenholgate.com/blog/2001/07/the-corba-evictor-pattern-in-java.html</link>
      <pubDate>Mon, 23 Jul 2001 01:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2001/07/the-corba-evictor-pattern-in-java.html</guid>
      <description>When a CORBA server allows its clients to create and destroy objects one of the recommended ways to handle the object lifetime issues is using the Evictor Pattern. In The Evictor Pattern we solved the problem for C++ servers, here we do the same for Java servers.
The problem
Due to the way that CORBA deals with object lifetime issues you may find it necessary to have the server control the lifetime of objects created on the server by the client.</description>
    </item>
    
    <item>
      <title>CORBA - Keep Alive</title>
      <link>https://lenholgate.com/blog/2001/03/corba---keep-alive.html</link>
      <pubDate>Sat, 17 Mar 2001 01:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2001/03/corba---keep-alive.html</guid>
      <description>One way of making a reference counted implementation more robust is to run the keep-alive protocol yourself. We demonstrate this option here.
The problem
In the previous article we developed a strategy where the server would destroy objects if the client hadn&amp;rsquo;t used them for a certain period of time. This protects the server from leaked objects and is necessary because CORBA doesn&amp;rsquo;t provide a keep alive mechanism. If a client has a valid reason to hold onto an object and not do anything with it then the only way that they can keep the object active in the server is to poke it every now and then - even if they have no reason to make a method call on the object.</description>
    </item>
    
    <item>
      <title>CORBA - The Evictor Pattern</title>
      <link>https://lenholgate.com/blog/2001/03/corba---the-evictor-pattern.html</link>
      <pubDate>Thu, 15 Mar 2001 01:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2001/03/corba---the-evictor-pattern.html</guid>
      <description>Since CORBA doesn&amp;rsquo;t really support reliable reference counting implementations we&amp;rsquo;ll compare one of the recommended methods of servant life-time management with our reference counted iteration interface.
The problem
If you can&amp;rsquo;t trust the runtime to make sure that your clients behave themselves, then the server has to take object lifetime issues into its own hands. The evictor pattern does just that. The server decides how long your object can live, when the server decides you&amp;rsquo;ve had enough it simply destroys your object for you and your next call fails&amp;hellip; It doesn&amp;rsquo;t matter if you forget to release your objects when you&amp;rsquo;re done, they&amp;rsquo;ll get cleaned up eventually.</description>
    </item>
    
    <item>
      <title>CORBA - Iteration</title>
      <link>https://lenholgate.com/blog/2001/02/corba---iteration.html</link>
      <pubDate>Fri, 09 Feb 2001 02:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2001/02/corba---iteration.html</guid>
      <description>A CORBA style method of enumeration can be seen in the iteration interfaces on the CORBA Naming Service. Given the code we&amp;rsquo;ve already written for the enumeration interface we can easily implement an iteration interface as well as (or, more likely, instead of).
Setting the scene
As we pointed out in a previous article, reference counting without a keep-alive protocol is not especially robust and objects may be leaked on the server.</description>
    </item>
    
    <item>
      <title>CORBA - Enumeration</title>
      <link>https://lenholgate.com/blog/2001/02/corba---enumeration.html</link>
      <pubDate>Fri, 09 Feb 2001 01:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2001/02/corba---enumeration.html</guid>
      <description>CORBA provides sequences as a way of returning collections of items from an method call. The problem with just using unbounded sequences is that the client has no control over how many items it receives as a result of the call. COM gets around this problem using the IEnum style interfaces that allow a client to control how it accesses the items in a collection.
Setting the scene
As we pointed out in the last article, reference counting without a keep-alive protocol is not especially robust and objects may be leaked on the server.</description>
    </item>
    
    <item>
      <title>CORBA - Reference Counting Issues</title>
      <link>https://lenholgate.com/blog/2001/02/corba---reference-counting-issues.html</link>
      <pubDate>Fri, 09 Feb 2001 00:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2001/02/corba---reference-counting-issues.html</guid>
      <description>At the end of the second article we have developed a self contained reference counting implementation that appears to work. Unfortunately, it&amp;rsquo;s still far from reliable as CORBA doesn&amp;rsquo;t provide the level of support for reference counting that&amp;rsquo;s built into COM. In this article we discuss the problem and the various CORBA methods for controlling server object lifetime.
The problem
In the last two articles we&amp;rsquo;ve worked our way towards implementing a COM style reference counting system in CORBA.</description>
    </item>
    
    <item>
      <title>CORBA - More Reference Counting</title>
      <link>https://lenholgate.com/blog/2001/02/corba---more-reference-counting.html</link>
      <pubDate>Tue, 06 Feb 2001 01:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2001/02/corba---more-reference-counting.html</guid>
      <description>Although we managed to develop a working solution in the first CORBA reference counting article the results were ugly and fragile. In this article we attempt to clean things up a little and, in doing so, get intimate with the Portable Object Adapter and its Servant Managers.
The problem
In the previous article we started out with the goal of adding COM style reference counting to a CORBA object. We found that the obvious COM way to do this didn&amp;rsquo;t work due to the way that the default behavior for the POA prevents us from deleting a servant object from within a method call on that servant object.</description>
    </item>
    
    <item>
      <title>CORBA - Reference Counting</title>
      <link>https://lenholgate.com/blog/2001/02/corba---reference-counting.html</link>
      <pubDate>Tue, 06 Feb 2001 00:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2001/02/corba---reference-counting.html</guid>
      <description>We&amp;rsquo;ve been developing code on Windows and Unix for quite some time, but most of the distributed component work we&amp;rsquo;ve been involved in has been done using COM. That&amp;rsquo;s changing now as clients have more requirements for Unix based component solutions. We&amp;rsquo;re currently evaluating CORBA ORBs and learning how the CORBA way of doing things differs from the COM way.
The first difference that we came across was the way that CORBA servers deal with object lifetime issues.</description>
    </item>
    
    <item>
      <title>JetByte News: Contract with HSBC</title>
      <link>https://lenholgate.com/news/2000/11/contract-with-hsbc.html</link>
      <pubDate>Wed, 01 Nov 2000 12:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/news/2000/11/contract-with-hsbc.html</guid>
      <description>We have secured a contract with HSBC to work with their Global Markets IT development team on their Summit installation. We&amp;rsquo;re helping them to restructure their source tree, move to a new and more structured version control system and helping them with CORBA servers to make their Summit data available to their e-commerce and &amp;ldquo;dot com&amp;rdquo; teams.</description>
    </item>
    
    <item>
      <title>COM&#43; Administration</title>
      <link>https://lenholgate.com/blog/2000/06/com-administration.html</link>
      <pubDate>Thu, 29 Jun 2000 01:00:01 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2000/06/com-administration.html</guid>
      <description>COM+ applications can be complex to configure and there&amp;rsquo;s no standard way to save that configuration in a form that can be placed under version control. Luckily the COM+ Catalog is accessible by a set of completely scriptable COM objects. These scripts take advantage of this to provide some functionality that should really come as standard.
Scripting the COM+ Catalog
COM+ applications can be complex to configure. This complexity increases as you use more COM+ services.</description>
    </item>
    
    <item>
      <title>OLEDB - Disconnected Recordsets</title>
      <link>https://lenholgate.com/blog/2000/05/oledb---disconnected-recordsets.html</link>
      <pubDate>Sun, 21 May 2000 01:00:01 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2000/05/oledb---disconnected-recordsets.html</guid>
      <description>If you are going to use the client cursor engine then often it&amp;rsquo;s a good idea to disconnect your recordset&amp;hellip;
Disconnected Recordsets
The normal procedure for using the Client Cursor Engine is to open your recordset with client side cursors and then disconnect it from the data source. This causes the CCE to pull all of your data out of the data source and effectively marshal it by value to your client.</description>
    </item>
    
    <item>
      <title>MFC - Include/Exclude list boxes</title>
      <link>https://lenholgate.com/blog/2000/02/mfc---includeexclude-list-boxes.html</link>
      <pubDate>Sat, 26 Feb 2000 01:00:02 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2000/02/mfc---includeexclude-list-boxes.html</guid>
      <description>How to package lots of standard functionality into a CListBox derived class.
The problem
Several times now I&amp;rsquo;ve found the need for a pair of list boxes that are linked. Items can appear in either of the list boxes, but not in both. Items can be moved between list boxes, and have processes performed on them. Their order within the list boxes can often be shuffled.
The first time I ended up with all of the code to do this spread throughout the message handlers of the enclosing dialog box.</description>
    </item>
    
    <item>
      <title>Using COM to write extensible applications</title>
      <link>https://lenholgate.com/blog/2000/02/using-com-to-write-extensible-applications.html</link>
      <pubDate>Sat, 26 Feb 2000 01:00:01 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2000/02/using-com-to-write-extensible-applications.html</guid>
      <description>Localise design decisions by writing key application functionality as pluggable COM objects. When the requirements change you just write a new plug in&amp;hellip;
Introduction
Sometimes it&amp;rsquo;s difficult to see the wood for the trees. You know that using COM is good, but how can you use it? How do you write an app that uses COM? How do you get from IApe and all the text book examples to something in the real world?</description>
    </item>
    
    <item>
      <title>It&#39;s a wonder any code is ever reused</title>
      <link>https://lenholgate.com/blog/2000/02/its-a-wonder-any-code-is-ever-reused.html</link>
      <pubDate>Tue, 01 Feb 2000 01:00:01 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2000/02/its-a-wonder-any-code-is-ever-reused.html</guid>
      <description>It&amp;rsquo;s rare that code can be viewed as a black box for reuse. If you include design choices and dependencies as valid parts of the code&amp;rsquo;s interface then it&amp;rsquo;s easier to explain why reusing nontrivial code is often harder than writing it from scratch.
One of the problems that I find when I&amp;rsquo;m trying to reuse some code is that even if the code is documented well, or written in a style where little documentation is needed, it can rarely be used as a black box.</description>
    </item>
    
    <item>
      <title>OLEDB - Client Cursor Engine updates</title>
      <link>https://lenholgate.com/blog/2000/01/oledb---client-cursor-engine-updates.html</link>
      <pubDate>Sun, 02 Jan 2000 01:00:02 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2000/01/oledb---client-cursor-engine-updates.html</guid>
      <description>Making the ADO Client Cursor Engine believe that your rowset is updateable involves jumping through a few extra hoops&amp;hellip;
Client Cursor Engine Updates
It turns out that supporting updates through the client cursor engine is relatively easy. Discovering that it&amp;rsquo;s relatively easy was extremely difficult. An article that was recently added to the MSDN gives complete and full information on what a rowset needs to support for updates via the CCE to be possible.</description>
    </item>
    
    <item>
      <title>OLEDB - Updating data through an ADO recordset</title>
      <link>https://lenholgate.com/blog/2000/01/oledb---updating-data-through-an-ado-recordset.html</link>
      <pubDate>Sun, 02 Jan 2000 01:00:01 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/2000/01/oledb---updating-data-through-an-ado-recordset.html</guid>
      <description>The ATL OLE DB Provider templates only seem to support read-only rowsets, and making them support updating of data isn&amp;rsquo;t as easy as you&amp;rsquo;d expect!
Cursors everywhere
First it&amp;rsquo;s worth clearing up some confusion about client and server side cursors and our rowset. Normally selecting either client or server side cursors is a simple choice between network traffic and local storage. Server side cursors are physically located with the data and in the case of most OLE DB providers that&amp;rsquo;s probably on the far end of a network connection to your database server.</description>
    </item>
    
    <item>
      <title>OLEDB - IRowsetLocate and Bookmarks</title>
      <link>https://lenholgate.com/blog/1999/10/oledb---irowsetlocate-and-bookmarks.html</link>
      <pubDate>Sat, 16 Oct 1999 01:00:01 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/1999/10/oledb---irowsetlocate-and-bookmarks.html</guid>
      <description>Adding bookmark functionality is relatively easy and it enables our ADO recordset to be used with a greater number of data bound controls.
IRowsetLocate and bookmarks
To support some of the more demanding data bound controls we need to support bookmarks. The proxy rowset that we developed in the last article already has some support for bookmarks built in, but the rowset itself doesn&amp;rsquo;t expose IRowsetLocate, or the bookmark related properties, so the bookmark functionality can&amp;rsquo;t be used by consumers.</description>
    </item>
    
    <item>
      <title>OLEDB - Custom Rowsets</title>
      <link>https://lenholgate.com/blog/1999/09/oledb---custom-rowsets.html</link>
      <pubDate>Wed, 15 Sep 1999 01:01:01 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/1999/09/oledb---custom-rowsets.html</guid>
      <description>The ATL OLE DB Provider templates appear to rely on the fact that your data is kept in a simple array, but that&amp;rsquo;s not really the case at all!
Implementing a custom OLE DB rowset
This article continues from where we left off in the previous article. We have all of the framework in place to provide ADO recordset interfaces on our simple data object. All we need to do now is replace the wizard-generated OLE DB rowset object with one that allows us to access our object&amp;rsquo;s data.</description>
    </item>
    
    <item>
      <title>OLEDB - Objects via ADO</title>
      <link>https://lenholgate.com/blog/1999/09/oledb---objects-via-ado.html</link>
      <pubDate>Wed, 15 Sep 1999 01:00:01 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/1999/09/oledb---objects-via-ado.html</guid>
      <description>ADO seems to be the ideal way to expose tabular data from your own COM objects and the ATL OLE DB Provider templates can help!
The problem
If you already have a COM object that manages data that is naturally tabular, or, if you have a COM object that has data which is often displayed in a tabular form then it would seem sensible to leverage the work being put into ADO by third party data control manufacturers.</description>
    </item>
    
    <item>
      <title>MFC - Templates</title>
      <link>https://lenholgate.com/blog/1998/09/mfc---templates.html</link>
      <pubDate>Wed, 30 Sep 1998 01:01:01 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/1998/09/mfc---templates.html</guid>
      <description>Templates are a great way of reusing code, unfortunately MFC makes it hard to write MFC friendly template classes&amp;hellip;
The problem&amp;hellip; Templates are cool. Being able to write code that can work on objects of any type that satisfies the minimum functionality that you require make reusing code considerably easier. No more type-unsafe generic coding methods, like void *&amp;rsquo;s and macros. Templates solve all manner of problems.
Using templates with MFC classes, especially MFC classes with message maps isn&amp;rsquo;t easy.</description>
    </item>
    
    <item>
      <title>IEnumXXXX</title>
      <link>https://lenholgate.com/blog/1998/09/ienumxxxx.html</link>
      <pubDate>Wed, 30 Sep 1998 01:00:01 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/1998/09/ienumxxxx.html</guid>
      <description>COM objects generally provide access to sequences using an IEnumXXXX style interface, this class wraps that with an STL style iterator
The problem Many COM interfaces provide the ability to step through, or enumerate, a collection of some kind. The usual way for a COM interface to expose this kind of functionality is via an interface which conforms to the IEnumXXXX standard.
IEnum interfaces provide the following methods: Next(), Skip(), Reset() and Clone().</description>
    </item>
    
    <item>
      <title>JetByte News: Contract with CSFP</title>
      <link>https://lenholgate.com/news/1997/06/contract-with-csfp.html</link>
      <pubDate>Sun, 01 Jun 1997 12:00:00 +0000</pubDate>
      
      <guid>https://lenholgate.com/news/1997/06/contract-with-csfp.html</guid>
      <description>We&amp;rsquo;ve secured a long term contract with Credit Suisse Financial Products to work with their OTC Derivatives Settlements systems team in London.</description>
    </item>
    
    <item>
      <title>Smart cards in Russia</title>
      <link>https://lenholgate.com/blog/1995/02/smart-cards-in-russia.html</link>
      <pubDate>Sat, 25 Feb 1995 08:21:09 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/1995/02/smart-cards-in-russia.html</guid>
      <description>In February 1995 I flew to Perm in eastern Russia as part of a two-man team installing a smartcard system for a local bank. I was responsible for designing and implementing the card production system that was being used.
For a marketing view of the system that we installed, visit Interlink&amp;rsquo;s Smart Bank pages. For a personal view, stay tuned&amp;hellip;
The other member of the team, David Steed, worked on the overall design and the integration of the system into Interlink&amp;rsquo;s standard transaction processing system.</description>
    </item>
    
    <item>
      <title>Rifts character sketch</title>
      <link>https://lenholgate.com/blog/1993/04/rifts-character-sketch.html</link>
      <pubDate>Thu, 08 Apr 1993 07:17:22 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/1993/04/rifts-character-sketch.html</guid>
      <description>John Fernberg. RPA Elite, SAMAS 261.
I&amp;rsquo;d wanted to be &amp;ldquo;Sam&amp;rdquo; ever since my fifth birthday. It was Freedom Day and the local garrison had staged a fly by as part of the celebrations. I can remember the smell of pop-corn and fresh muffins, sitting on Dad&amp;rsquo;s shoulder so I could see. The whole town had turned out and there was a crowd bigger than I&amp;rsquo;d ever seen. I sat on a rock in a sea of heads.</description>
    </item>
    
    <item>
      <title>The Order of the Silver Rose</title>
      <link>https://lenholgate.com/blog/1992/02/the-order-of-the-silver-rose.html</link>
      <pubDate>Fri, 07 Feb 1992 22:24:15 +0000</pubDate>
      
      <guid>https://lenholgate.com/blog/1992/02/the-order-of-the-silver-rose.html</guid>
      <description>The Order of the Silver Rose was a religious order of Knights in an AD&amp;amp;D campaign that I ran. The campaign was set in The Forgotten Realms and was based around the FRE1-3 scenario packs.
The Order of the Silver Rose
The order of the Silver Rose is a religious order of Knights devoted to worship of the demigod Torm. The order was formed around thirty years ago by Sir Giriath of Iriaebor a dedicated Knight of Torm who, single-handed, slew the Great Dragon, Dyldarin the Red.</description>
    </item>
    
  </channel>
</rss>