• DDD Adelaide 2019 is coming!

    It was first announced a few weeks ago, but it deserves a mention here too - DDD Adelaide 2019 is happening on Saturday 23rd November!

    Andrew Best (Principal Consultant at Readify) has taken the organisational initiative and I’m excited to be working with him to bring a day-long conference for all software developers to Adelaide.

    Long-time readers may remember we have actually had some events in Adelaide before. Indeed I blogged about the last DDD way back in 2011. In the intervening time, DDDs have been happening all around Australia. Melbourne, Sydney, Brisbane and Perth are all now running annual DDD conferences. They’ve grown to become significant events (many selling out within hours of tickets being made available!), and some now regularly have 700-800 attendees (big enough that they have to book a proper convention centre for their venue).

    So the DDD we’re putting on this year is going to be a little different to anything that has ever happened in Adelaide before. It’s going to be bigger and better (with two tracks), and is open to any and all software developers (plus related fields) and any programming language, technology, ecosystem, cloud, little and big-endian!

    While we’re not aiming to be quite as large as our interstate cousins, I think if this year’s event is well supported by the local developer community, then the only way is up for the future.

    DDD is run as a non-profit event. So while we are charge for registration, this covers the cost of providing catering for the day. There’s other costs with running DDD, so it’s great to have some big-name sponsors also supporting us. In fact there’s still room for more sponsors to get on board.

    So what happens between now and November 23rd?

    Registrations are open now. Sign up to attend now!

    The Call for Presentations closes at the end of Wednesday September 4th. If you’ve got something you’d be prepared to present to a group of interested people, submit it now!

    The following week (12th September to be precise), the full list of proposed sessions will be published for registered attendees to vote on. Yes, the people who are going to attend get to vote on which sessions they want to see. Yet another incentive to register.

    After voting closes (27th September) and we’ve confirmed presenter availability then the final agenda will be published (3rd October).

    So sign up and I’ll see you on the 23rd. It’s going to be awesome!

  • Modifying and extending Topshelf

    Topshelf is a useful library if you have a .NET application that you would like to easily turn into a Windows Service.

    A common approach is to create a console application, wire in Topshelf and then you can run it as either a console app or install and start it as a Windows service.

    One thing I encountered this week was that by default Topshelf changes the current directory to the location of your .exe when your application runs. This makes sense because otherwise the default current directory for a Windows service is actually c:\windows\system32! If you’re trying to load additional files from the same directory as the .exe then that’s not where you’d want to be looking so Topshelf’s alteration makes sense.

    But what about for debugging?

    In Visual Studio, when you press F5 to debug a web project (which is the kind I was working with), the current directory defaults to the project’s directory. Again you may have logic that makes assumptions about other resources that need to be loaded relative to the project directory - if you’re now using Topshelf that’s going to break as the current directory will be changed. How to fix this?

    Stepping through the Topshelf source code, I realised that I wanted a version of ConsoleRunHost that didn’t have the calls to Directory.SetCurrentDirectory(). That class is instantiated by the RunBuilder class, which in turn is returned by the DefaultHostBuilderFactory method in HostConfiguratorImpl.

    So that’s the default factory, but the same class also provides a UseHostBuilder method that allows you to provide your own factory instead. That’s just what I needed.

    By adding my own factory method that returned an instance of my own custom RunBuilder, which then returned a custom ConsoleRunHost implementation that was identical to Topshelf’s ConsoleRunHost with the exception that it didn’t change the default directory.

    private static HostBuilder HostBuilderFactory(HostEnvironment environment, HostSettings settings)
    {
        return new MyRunBuilder(environment, settings);
    }
    

    And tell Topshelf to use this method by calling UseHostBuilder:

    var rc = HostFactory.Run(x =>
    {
        x.UseHostBuilder(HostBuilderFactory);
        ...
    }
    
    

    If you wanted to, you could even check if you were running under the debugger to decide whether to use the default or custom behaviour.

    It’s nice when libraries have thought about extensibility and provide hooks for consumers to swap in custom logic.

  • Game over

    This year I decided to return to playing basketball socially after a break of about 5-6 years. Like most other sports I’d tried, I didn’t have much natural talent, but enjoyed participating.

    This season did not start out well. The first game back, I was enjoying being back on the court (if also realising how unfit I was!). But as the match progressed, my heel was getting sorer and sorer. Later diagnosed by the Physio as tendonitis - probably caused by going out way too hard after such a long time of not running at all.

    A week off and some daily stretching (that I’m still doing months later) and I was feeling ok to get back again. A few more games and then more problems..

    My back had been feeling a little uncomfortable earlier in the day, but I figured lots of stretching and I’d be fine. I played with out any issues and then drove home. But as I got out of the car, I felt my back go!

    Some Chiro on the Monday, more stretching and trying to stand (instead of sitting down) at work meant, after another week off, I thought I’d be ok to come back again. I played last week without incident, though I was a little sore the next day.

    Yesterday, my back was still not 100% but I figured I’d see how I went. That was probably a mistake. Part-way through the second half of the game, I went to chase the ball and felt my back go again. I took no further part in the game. Time to listen to my body and give it a proper rest.

    And that’s how my 2019 basketball season unceremoniously ended. Maybe I can give it another go in 2020, but if I do I think I’ll need to invest in a lot better preparation. It would be disappointing if it turns out that I can’t play again, but that’s also a possibility. And better to retire my basketball boots and still be able to do other things, than really injure myself badly.