• Adelaide CodeRetreat

    Earlier this year I’d been contacted by Rachelle (Community Manager at Reinteractive) asking if I could promote a CodeRetreat Event that she was organising in Adelaide to ADNUG members. Not only was I was more than happy to do this, but I decided to go along myself and find out what it was all about.

    The day-long event was held in the _southstart (formerly Majoran) office space in Grenfell St. 20 had registered, but somewhat disappointingly only 6 of us showed up (I say “somewhat” as in some ways having a smaller group actually worked better, and not just because there was more food to go around!)

    The day was also facilitated by Adam Davies (who also helps run the Adelaide Ruby Meetup group). The structure of the day was based on the one from Coderetreat.org. After a welcome and introduction, we paired off with another attendee, worked on implementing Conway’s Game Of Life for around 40 minutes, then all came back together as a group for a ‘retrospective’ review and discussion of how we felt that session went. This was then repeated for most of the day, with a few challenges thrown in just to make it interesting, like “only commit code to version control when all tests pass, and use a 4 minute timer that you revert all uncommitted code when the timer expires” (that one was stressful!), “ping pong” (one person writes the test, and the other has to implement the code for the test) or “avoid using a mouse”.

    Most of these sessions operated in pairs and promoted using test-driven development (writing the test first, confirm that the test fails, now write the smallest amount of code to make the test pass). I really do like the practises of pair programming and TDD, and it reminded me that it would be good to use these more in everyday work.

    One rule of the day was “delete all your code at the end of each session”. It was curious how ‘wrong’ that felt. You are so used to saving and keeping stuff. It was probably a bit liberating too – after all while the code had gone, the experience and learning from the pairing session had not.

    Even in such a small group there was a good mix of programming languages – Ruby, Java, JavaScript, C# (obviously) and even Elm. Sitting down with a fellow developer and working in an unfamiliar language was also both a challenge and a highlight.

    Lunch was provided, and was a step up from the usual pizza fare. Very nice!

    The most awesome lunch courtesy of Red Star Catering. #coderetreat #southstart pic.twitter.com/I4NMOb2BYL

    — reinteractive (@reinteractive) October 22, 2016

    After lunch we did more of a ‘mob programming’ style session lead by another attendee Richie. Still using the Game of Life problem, it was a great illustration of how important communication skills are, as we worked through coming to consensus on not only how we could approach the problem, but what were good names for things and what did those names actually mean (not surprising, considering naming is one of the two hard things in computer science).

    Richie taking us through The Game of Life in Ruby

    Following that we did one more pairing session. This time each pair got to choose from a list of limitations. My partner had commented when we sat down together how much he appreciated his mouse and that was probably what prompted me to suggest we try the “only use your keyboard” challenge. We used Java in Eclipse and apart from an annoying splash screen that we had to resort to the mouse to make go away, we managed the rest of the session to stick to just typing. Not easy though.

    The day ended with a final group review. I really enjoyed the day, appreciated learning some new skills and practising some old ones, and getting to know a great bunch of people.

  • Installing Mono in Bash on Windows 10

    I was working on a pull request to add a feature to Cake, which includes bootstrapper scripts written in PowerShell and in Bash. Ideally my PR would include changes for both scripts to keep them in feature parity. I could create a VM and install a flavour of Linux to test out the Bash shell script. But then I remembered that since the July 2016 update, Windows 10 now has an optional Linux Subsystem, which includes a ‘native’ Bash shell.

    Enable Developer Mode and Bash

    So first off, let’s get the subsystem installed and up to date. You could do this manually through Windows Settings, but I love scripting things where possible. From an elevated PowerShell prompt:

    
    $RegistryKeyPath = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\AppModelUnlock"
    if (-not(Test-Path -Path $RegistryKeyPath)) {
        New-Item -Path $RegistryKeyPath -ItemType Directory -Force
    }
    
    # Add registry value to enable Developer Mode
    New-ItemProperty -Path $RegistryKeyPath -Name AllowDevelopmentWithoutDevLicense -PropertyType DWORD -Value 1
    

    Restart Windows, then open an elevated PowerShell prompt again:

    Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
    

    Reboot again.

    Now, type in ‘Bash’ and launch the Bash shell. The first time, you’ll be prompted to enter a separate username/password. It’s a good idea to make sure all the components are current.

    Run the following to download and install any package updates:

    sudo apt-get upgrade
    

    Installing Mono

    Cake currently uses Mono when run on Linux or MacOS (apparently .NET Core support is in the works). There’s one trick regarding Mono running in Bash on Windows 10 - the build that works correctly is 4.2.4 (See the discussion on this Github issue https://github.com/mono/website/issues/199)).

    First up, add the key for the Mono project:

    sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
    

    And now download and install Mono 4.2.4 and related tools:

    sudo sh -c 'echo "deb http://download.mono-project.com/repo/debian wheezy/snapshots/4.2.4 main">>/etc/apt/sources.list.d/mono-xamarin.list;apt-get -qq update;apt-get -qq install git gcc mono-complete'
    

    I found after this, this easiest thing was to exit Bash and then open it again. Now I could use Cake’s build.sh script which could successfully use Mono to run nuget.exe and cake.exe!

  • DDD Melbourne 2016

    Sign for Monash UniversityLast weekend I was privileged to be able to attend my second DDD Melbourne conference. I flew over Friday afternoon and had an uneventful transit from Melbourne airport to the motel, via the Skybus and a train connection. I stayed locally near Monash University’s Caufield campus, the venue for this year’s event.

    Welcome and intro to DDD Melbourne

    Around 350 people were there. Monash was a great venue, with all lecture theatres having excellent AV facilities, so no problems watching presentations or hearing speakers. It was also really nice to catch up with a few familiar faces.

    Paul Fenwick with slide of 1970's sci fi robotsThe day started with a thought-provoking keynote from Paul Fenwick, making us stop and think about what kind of future we’re creating. That slide with the strange robots – I had that book as a child! Smile Morning tea break

    After that I caught the following sessions:

    • Thinking in React with Mohammad Helmy
    • Deploying Straight to Production: A Guide to the Holy Grail with Damian Brady
    • The Actor/Model pattern in .NET: Akka.Net vs Orleans for the curious with William Tulloch
    • Better APIs with GraphQL with Josh Price

    Lunch break

    After lunch I also got to present 10 tools and libraries to enhance .NET Unit Testing.

    Audience before closing presentationThe final talk for the day was from Shawn Wildermuth. An inspiring and personal look into the life of a developer, and a great way to end the day.

    Shawn talking about active listeningOne key point Shawn made was how critical it is if you want to be a good developer, is to really work in your listening skills – not just “hearing” but actual ‘active listening’, because as it turns out, good communication skills are more important that good technical skills.

    And with that DDD Melbourne was over for another year. Off to the airport for the flight back home late Saturday night to be back at home with family and my own bed.