Sunday, 1 January 2017

2016 in review

It’s the first day of 2017, so a good time to reflect on the year just past.

Travel

A couple of friends have commented either “You’ve travelled a lot this year” or “where are you travelling to next?”. My first reaction was surprise – I don’t travel a lot do I?

Well ok, that was a few trips. But no future travel plans at this stage.

Family

I won’t dwell on this too much but the health challenges continue for some members. Some of you know me well enough to know the details.

The kids did well at school (I’m sure better than I ever did!). They’re all growing up fast too.

We did have a couple of sad losses – Princess Layer (one of our bantam hens) and Guido (a goldfish) both passed away. Layer died quite suddenly of unknown causes (maybe snake or spider bite). We held a little burial ceremony in the backyard for her.

I’ve got a couple of weeks off over the Christmas break. Nice to spend time at home with the family, do a bit of gardening/weeding, a few bike rides and take it easy.

Garden

We planted new cherry, apricot and nectarine trees. Looking forward to seeing them fruit in years to come.

I finally finished the chicken run, so we can let the chooks out of their shed into the run during the day, and not worry about foxes or the odd stray dog. If we’re home, we usually let them out of the run to roam around the backyard anyway.

Technology

I got a new laptop, and more recently a new phone. The girls got iPads for Christmas so all three kids now have them. As annoying as it is to set up, at least the Apple Family Sharing means we can share single app purchases amongst all the devices. I say annoying as from my experience the ‘app approval’ part only works if a parent also has an Apple device.

Maybe updating to an XBox One S as a late family Christmas present?

Also on the radar is one of these Ubiquiti UniFi AP AC Lite WiFi access points. We have a few reception dead spots around the house that I think could be fixed by one of these.

Don’t think I’m buying new toys/technology all the time! Like most families we have a limited budget so these purchases only happen when absolutely necessary and we’ll get as much use out of them as we can.

Apparently in a few months our suburb will have the NBN. I’ll be looking closely at my options when that becomes available.

.NET and dev things

I’m in my second year as a Microsoft MVP. I’ve really appreciated the opportunities this has given me to participate and learn more. It’s also opened some doors particularly in regards to the Adelaide .NET User Group, which I help run.

The group continues to meet monthly and enjoys good attendances. It would be great to have some other members step up and get more involved with the organising and possibly allow us to run a “DDD Adelaide” event too.

This year I became a volunteer moderator for Chocolatey. I’ve been a fan of Chocolatey for a number of years now (my “Let’s get Chocolatey” t-shirt from supporting their KickStarter is a favourite), and it’s nice to be able to help share the load of moderating new package submissions.

Microsoft has changed considerably as a company over recent years. I really like their approach to doing much more in the open (including developing many products as open source on Github) and working with (instead of against) Linux and other platforms. The way .NET is evolving, together with new innovations like TypeScript gives me confidence that they’re heading the the right direction.

Work

I don’t generally write about the details of my day-to-day work at RL Solutions, but it has been a busy year and 2017 looks to be no different. The consistent highlight is the people I work with. We recently advertised for a graduate developer to join our Adelaide team. It’s good to be growing (and also I can finally pass on the “new guy” mantle).

I’m sure I’ve missed some things, but that will do for now. Happy New Year!

Friday, 23 December 2016

Farewell Windows Phone, Hey iPhone

I’ve had my Nokia Lumia 920 phone for just over three and a half years, and it’s starting to age. It has served me pretty well, but the screen is showing a distinct yellowing and more annoyingly if someone calls me, I need to switch to hands free mode for them to hear me. (Not always convenient if I’m in a public place like sitting on a bus!)

So I’d started thinking about what’s next. I’d already decided that as much as I love the Windows Phone interface, there’s only a limited future for those phones so a change of platform was due.

Initially I was looking at Android phones, in particular the Nexus models (figuring that they would be better supported and updated seeing as they come from Google). I was a bit concerned about a number of security vulnerabilities discovered in Android recently, and while iOS isn’t necessarily any more secure, I had been impressed with the stance Apple had taken with the FBI earlier this year. The other consideration was that the kids will all have iPads for school, so maybe iOS could make sense.

I didn’t want a huge phone, so something similar in size to the 920 would be nice. A friend recently bought an iPhone 6 and I’d helped her set it up, and I thought it looked pretty good.

So weighing all that up (combined with getting $140 store credit when I bought two iPads on Black Friday) an iPhone it is. I ended up gong with an iPhone, opting for the latest iPhone 7 model.

I placed the order on Wednesday and went in to the Apple Store here in Adelaide first thing Thursday morning to pick it up. Turns out most of the people in the queue outside the shop were for service and repairs so I was in and out in about 5 minutes. A quick visit across the road to Vodafone to get a nano SIM and job done. Because of the new SIM card, it did mean I couldn’t wait until Christmas morning to open my new present!

iPhone Screen Shot

I already had an existing Apple ID, and it has a rather complex password. It’s quite a pain to have to enter into the phone repeatedly. I soon figured out that the fingerprint reader on the phone can be used instead of having to re-enter the password, but you need to enable that as it’s turned off by default.

Next stop was to install apps. A few favourites to match those I’d used on my Lumia and a few new ones to try out.

  • Twitter
  • Facebook
  • BOM Weather
  • Skype
  • Dropbox
  • My Vodafone Australia
  • Microsoft Word/Excel/PowerPoint/OneNote/Outlook
  • Office Lens
  • Microsoft Authenticator
  • Pluralsight
  • Stocard
  • metroMATE
  • KeePass Touch
  • Feedly
  • Endomondo
  • Australian Taxation Office
  • SwiftKey Keyboard
  • Google Maps
  • Fing Network Scanner
  • Pocket Casts

Paul Thurrott has written a couple of posts for people transitioning to iOS from Windows Phone. They are informative reading:

Some app-specific notes

Stocard

I used this on the Lumia, but frustratingly the Windows Phone version doesn’t have a backup/export option, so I’ll need to re-enter all my store cards. Maybe I can scan the barcodes off of the Windows Phone app directly into the iOS one?

Microsoft Authenticator

A nice two-factor authentication app. Obviously I needed to manually transfer all my accounts over. One nice thing, I can now just ‘Approve’ when my Microsoft Account needs authentication. No idea why they couldn’t do that on Windows Phone.

Australian Taxation Office

I was able to export my data from this app on Windows Phone to OneDrive and import it into the iOS version. The only thing which doesn’t transfer is any photos of receipts.

Pocket Casts

It does cost $5.99, but a) it’s created by an Adelaide company and b) it has a lot of recommendations (including Thurrott), so I splashed out on this Smile. It can import OPML files. I had one lying around on OneDrive, though it wasn’t my current list as the default Windows Phone podcast app doesn’t support exporting OPML files. Not a big drama.

So that’s my new Christmas present! Any other app suggestions for me?

Sunday, 13 November 2016

MVP Summit 2016

My MVP Summit nametagI’ve just returned from my second Microsoft MVP Summit held in Bellevue and Redmond, Washington (just outside Seattle). I had an awesome time!

I flew over on Saturday going via Brisbane and Vancouver. It was drizzly in Seattle when I arrived (not uncommon I know), but not so wet that I couldn’t spend a bit of time walking around downtown, getting a few souvenirs for the family and generally trying to stay awake as long as I could with the plan to try and go to sleep at right time. That wasn’t easy!

I’d stayed in Seattle the first night, but the summit was over at Bellevue and at Microsoft’s Redmond campus, so I caught the bus up there on Sunday.

MVPs are from all over the worldI stayed at the Bellevue Hyatt, which was very nice (and convenient as that was also where registration and some of the off-campus events were being held).

Sunday afternoon there were some optional “pre-event” workshops that I attended.

Monday through Wednesday, I attended technical sessions hosted by the various Microsoft Product Teams at Redmond Campus. These started at 8am, so I was up bright and early to grab breakfast and jump on the shuttle buses to get from Bellevue to Redmond in time.

.NET Foundation medalOne unexpected surprise was to be one of a handful of MVPs to receive a special token of appreciation for contributing to open source projects connected to the .NET Foundation.

I believe some of the technical sessions were recorded with the intention that where they don’t cover NDA content they’ll be published to Channel 9. Also, you should watch out for the Microsoft Connect() event happening this week.

Thursday was a bit different. Still an 8am start, but for my area (Visual Studio and Development Technologies), Jeff Fritz (who had been coordinating the previous three days) organised a day-long hackathon.

I joined the Visual Studio Extensions group and worked on an extension code analyzer, which can check for common mistakes when creating an extension and offer code fixes. The idea for the analyzer came about after getting some advice on another of my extensions the previous night from Mads Kristensen (Microsoft Web Tooling and Visual Studio Extension author extraordinaire) and Justin Clareburt (expat Aussie and Senior Program Manager for Visual Studio Extensibility). You can see my progress on Github. After a little bit more polish, I hope to publish the analyzer to NuGet (and yes, I even spelled it with a ‘z’ Smile )

Jeff tweeted about one of the other extensions produced at the hackathon, which integrates with the new Surface Dial. Very cool!


David playing with a HTC Vive VR headsetAnother highlight was going down to visit the Microsoft Store in the Bellevue shops and trying out the Surface Studio and having snowball fight with their HTC Vive Virtual Reality headset (photo taken by fellow MVP Alan Burchill).

Thursday night I headed home, arriving back Saturday afternoon. There were some tight connections, but staff at both Vancouver and Brisbane were able to ensure I (and my baggage) made my flights. Phew.

Special thanks to RL Solutions for supporting me attending the summit and especially for my family for allowing me to be away for the week.

Sunday, 30 October 2016

Upgrading to new “new” outlook.com (ADDriverStoreAccessNonLocalException)

A few weeks ago I received an email saying that I would be upgraded to the new outlook.com. Then last weekend I noticed I’d stopped receiving new emails and figured the migration had begun.

My email setup is a bit unusual. I have a custom domain “gardiner.net.au” and email for this domain is handled by Google Apps Free edition (legacy). This is the version of Google Apps (now called “G Suite”) that Google no longer offers for new customers, but maintain for existing ones.

A while back when Google and Microsoft were being less than friendly about GMail support with Windows Phones (combined with a weird problem on my phone where using GMail was using unusually high cellular data), I switched to using Outlook.com. To make this work, I configured Outlook.com to regularly pull email from GMail, and to send all outbound emails back through GMail too (so that SPF and DKIM would continue to work).

That setup worked well for my phone, and also for family calendar sharing (seeing as my wife Narelle had been using Hotmail for ages).

The downsides were that there appeared to be a sporadic bug with the email import process. Just occasionally emails would get ever so slightly corrupted. Most times you could still read them, but sometimes just one character changing was enough to render it completely unreadable.

I lived in hope that the migration to the new O365 infrastructure would resolve the corruption problem.

So where was the new Outlook.com? Every time I tried to log in, I kept getting a “Sorry, something went wrong” page, and if I looked at the details of the error, it mentioned this “ADDriverStoreAccessNonLocalException”. I sent a number of tweets to @Outlook, but got zero responses (disappointing).

I figured I’d give it a few days, but then it was still saying the same thing. Eventually I stumbled across a post to the Microsoft Support Forums which suggested switching my Microsoft Account to use a different default profile. It sounded crazy, but I was willing to give it a try. And it worked!

The new Outlook.com now loaded in my browser in all it’s O365-like glory. Great!

New outlook.com banner

I suspect the reason I might have had this problem is that I’d previously set up a real O365 account (via a free trial through being an MVP) and I’d partially configured that to use “gardiner.net.au” (without ever changing my MX records to actually deliver there). My theory is that new Outlook.com, being O365-based, probably could see that other half-set up system and got confused. As part of resolving this I also modified the settings on the O365 service to remove the “gardiner.net.au” domain settings.

I could then switch my default profile back to my @gardiner.net.au name and things continued to work.

The new Outlook.com. More responsive, and so far not prone to those import corruption issues. That’s great.

BUT

I noticed that the integration with my custom domain hosted on GMail was also reduced. Sending emails continued to work correctly – they’d use the GMail SMTP gateway that I’d configured in the Outlook.com settings. However when I went create a meeting invite, the email wasn’t sent through GMail, but directly from Outlook.com, and it was sent using one of the profile aliases (not my @gardiner.net.au address).

The migration also seemed to have messed up my email filter rules. Ok, I’ll go in and edit them then. Well looks like there’s some bugs there as this is all I get for editing the list of email addresses for a rule:

image

Yes, kind of hard to edit email addresses when the text box is empty. That’s just annoying.

The other downside to this whole “pulling email from GMail into Outlook.com” is that it uses polling – so there’s often a delay of a few minutes, up to maybe 30 minutes between polls from Outlook.com back to GMail checking for new emails.

So now I’m thinking that I might move back to using GMail directly (whilst keeping an eye on phone data usage).

Sometimes an “extra layer of abstraction” doesn’t help so much.

Sunday, 23 October 2016

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!

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.

Wednesday, 19 October 2016

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!

Saturday, 20 August 2016

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.