stopwatch

.NET Stopwatch meet IDisposable

You’re probably aware of the .NET Stopwatch class, a System.Diagnostics class that ‘Provides a set of methods and properties that you can use to accurately measure elapsed time’.

A code sample illustrates its typical usage:

Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
Thread.Sleep(10000);
stopWatch.Stop();
// Get the elapsed time as a TimeSpan value.
TimeSpan ts = stopWatch.Elapsed;

You get the idea – create, start, execute code (thanks Thread.Sleep(…)), stop and examine its Elapsed property.

There are a number of open source profilers such as Prof-It that provide comprehensive timing information, and there can be some discrepancies when timing code execution with a Stopwatch, as this excellent Code Project article explains, it’s often sufficient to temporarily put in a Stopwatch block to time a piece of code.

One thing to note from the code sample is that it is a little verbose.  The Thread.Sleep(…) call is trivial, for our example, but if we’re timing several lines, the various Stopwatch boilerplate lines rather get in the way.

Wouldn’t it be nice if we could write something like this:

using (new CleverTimer()))
{
	Thread.Sleep(10000);
}

We can, with this little ‘CleverTimer’ class, which uses a mix of a Stopwatch and IDisposable:

public class CleverTimer : IDisposable
{
	private readonly Stopwatch _stopwatch;
	private readonly Action<Stopwatch> _action;
	public CleverTimer(Action<Stopwatch> action = null)
	{
		_action = action ?? (s => Console.WriteLine(s.ElapsedMilliseconds));
		_stopwatch = new Stopwatch();
		_stopwatch.Start();
	}
	public void Dispose()
	{
		_stopwatch.Stop();
		_action(_stopwatch);
	}
	public Stopwatch Watch
	{
		get { return _stopwatch; }
	}
}

The class has a couple of members – the all important Stopwatch, as well as an Action of type Stopwatch.  The constructor can accept an Action, but defaults to writing out the Elapsed milliseconds of the stopwatch.   The constructor creates a the member Stopwatch and starts it.

The Dispose method, required for the implementation of the IDisposable interface, simple stops the Stopwatch member and invokes the _action code.

It’s all fairly simple stuff, but goes some way to simplifying timed code.

Resolving WordPress Twenty Thirteen Disqus Plugin placement issues

WordPress’ new 2013 theme is fantastic, but if you’re also using the Disqus plugin, it’s quite likely you’ve noticed an issue with its placement.

Rather than sitting nicely under the main content, it spreads out and occupies the space visually reserved for the sidebar.

WordPress.org forum thread details some fixes, but I found a quick CSS addition fixed the problem.  Simply add this to the bottom of the 2013 Theme’s stylesheet:

#disqus_thread {
    max-width: 1040px;
    padding: 0 376px 0 60px;
}

This should push the area under the left column and respond appropriately.

I also made a small change to the single.php file, because I feel the ‘post nav’ is better suited to being placed after the comments.  Simply modify the loop of that file to this:

<?php while ( have_posts() ) : the_post(); ?>
  <?php get_template_part( 'content', get_post_format() ); ?>
  <?php comments_template(); ?>
  <?php twentythirteen_post_nav(); ?>
<?php endwhile; ?>

I swapped the order of the comments_template() and twentythirteen_post_nav() function calls.

Hope this helps!

Redis

Installing Redis on Windows

Getting started with Redis on Windows is easy:

1. Download the latest .exe package from https://github.com/rgl/redis/downloads (choose the appropriate latest 32 or 64 bit version).

2. Running the exe will install Redis as a service and install the Redis client.

Troubleshooting

I got an issue when installing the service through the setup.  I had to do so manually using this command (ensure that you run cmd as Administrator):

sc create redis binPath= "C:\Program Files\Redis\redis-service.exe redis conf/redis.conf"

Note that Windows is particularly fussy about the space after binPath=, and paths with spaces must be wrapped with quotes.

Have fun!

Moving over to Disqus

A quick post to say that I’ve just migrated my blog’s comments over to Disqus; the whole thing was a lot less painful than I imagined, and I wished I’d done it ages ago.

If you’ve been living in a cave for a while, you’ll not know that Disqus is an online discussion and commenting service for websites. It powers the comments systems for many popular blogs as well as CNN and The Daily Telegraph, so the only thing holding me back was the thought of problems.

I needed a couple of links to get what I needed:

The first was an idiot’s guide to the migration, whilst the second was a useful tip to get rid of those ads (that appear by default.)

Book Review – Instant .NET 4.5 Extension Methods How-to

Packt’s ‘Instant’ Series promises short, fast, focused guides delivering immediate results. But does their Instant .NET 4.5 Extension Method How-to incarnation deliver, or leave readers wanting more?

It is indeed a short book – 52 pages, and it’s 25% before the technical content starts.

.NET 4.5 Extension Methods How-to

.NET 4.5 Extension Methods How-to

After a brief general introduction, the book follows a code sample and explanation format. Each item is labelled with a difficulty grading, with ‘must know’, ‘should now’, and ‘become an expert’.

The ‘become an expert’ items go beyond the ‘syntactic sugar’ aspects of extension methods and demonstrate their usage in modern .NET design.

Whilst the book costs just over a fiver here in the UK, I felt that it was a little lacking. I spotted a grammatical and code formatting issue, and the format of code and explanation feels a little rushed. The more advanced areas would have ideally had more explanation as to how extension methods fit into the .NET ecosystem.

Another issue is that the book offers nothing over the wealth of articles freely available on the Internet.