Report: Microsoft Australia DX hackfest (July)

An important part of being a Technical Evangelist at Microsoft is continuously upskilling and playing with different technologies. Taking 2 days out a month to sit down together and hack, gives us a chance to learn from each other. For example Simon briefly mentioned that he was playing with Xamarin Forms & Android development, but was having issues with the Intel Android emulators, so I was able to quickly show him the new Visual Studio ones that run on Hyper-V. Conversely I was having issues with NodeJS that Simon & Elaine were able to help me out with.

And of course, we took the time out for our usual #TacoTuesday DE--sUTUAAAmwLR.jpg

Like our previous hacks, the Melbourne team were hosted by Frank Arrigo out at the Telstra Innovation Labs While we also had Azadeh joining in remotely from Sydney, and Hannes remotely from New Zealand. 20170718_152147(0)

David (Me) – Meme classifier

I decided to make a system that could automatically classify Internet Memes. There are whole subcultures on Reddit dedicated to them, one of my favourites being I wanted to use the new Custom Vision service to train it on the different meme types, and be able to upload a meme and be told which category it is.

Training the custom AI was easy, I uploaded samples that I got off Reddit and clicked train. Testing it with other images correctly identifies them. Creating and training only took 10 minutes, I spent way longer browsing Reddit looking at memes ^_^;;

custom vision trainingcustom vision test

Next I wanted to build a chat bot and allow people to upload an image, and have the AI return back the category, and send a link to the correct page on Know Your Meme e.g. Success Kid. I decided it would be a great time to try out the Microsoft Bot Framework for NodeJS. I have used NodeJS & npm to download and use Blockchain toolchains, but never developed directly on it.
I have enough time to fully build out the chat bot, but I learned HEAPS about using VS Code and debugging NodeJS apps using VS Code. Lots of little gotchas when developing with NodeJS for the first time.


Azadeh (remote from Sydney)

I wanted to solve the first world problem that most of us have! have I turned off my hair iron strengthener?
It turned out there are lots of people have the same problem, please read and
to solve the problem I used wemo switch. I created two recipes/applets in ifttt for turning on and turning off the wemo switch. Basically, I got two endpoints for turning on and off the switch.
To make it more user-friendly and accessible, I used azure bot service and created a chat bot that can get commands to turn on and off the switch.
I used LUIS to understand intents and call the proper endpoint based on the command.
I hosted the source code on github and set continues integration to make sure after every push to master, the new code got deployed to azure bot service and updates the bot.
source code:



I used Azure Cognitive Services Text Analytics to analyse Star Wars subtitles tracks. Topic Detection and Sentiment Analysis both seemed like good candidates.
Key Learnings:
1) Topic Detection doesn’t work well with many ‘documents’ of very small size (e.g. lines of subtitles), of as little as one word. A better approach was to approximate scenes and aggregate lines into larger documents.
2) Sentiment data is very noisy. A naive prediction is that such a sentiment analysis would track the cadence of the film. This is not at all the case, as you can see in the graph of the sentiment of the Phantom Menace.
3) Slang/ colloquialisms break topic detection, e.g. Jar Jar Binks’ lines like ‘mesa in trouble’. These should be excluded from the Topic Detection algorithm using Stop Words or Stop Phrases field in the request.

The plot below tracks sentiment across all pseudo-scenes throughout the film. You can see the data is highly variable and does not seem to follow the cadence of the film. A further research question might be to vary the size of pseudo-scenes (i.e. to aggregate lines into variable sized batches), and run sentiment analysis on all these pseudo-scenes. The result may better approximate the cadence of the film.

MicrosoftTeams-image (2).png


Hannes (remote from NZ)

hannes hololens.png

The app is made using Unity, and the HoloToolkit.
You can see how far along progress currently is in this video.
The idea is to bounce a table tennis ball on a paddle that you drag around with your hand. It has a scoreboard that tracks your high score for the session.
When you open the game, you are presented with a paddle and a ball hanging in the air above it. To start the game, you simply tap and hold on the paddle, which starts the ball falling. Keep the paddle under the ball to make it bounce. You get a point for every time the ball bounces on the paddle. Releasing the paddle resets the position of the ball.




Build 2017 keynote day 1


My main takeaways:

  • serverless computing and the CosmosDB are going to allow you to quickly create new ultra scalable applications.
  • AI, cognitive services and Cortana skills will allow you to build some real Sci-Fi things.
  • Microsoft graph is improving and adding more features that will allow you to build more personal apps.

Continue reading

Microsoft “Project Natick” puts datacentres under the ocean

I came across an interesting Microsoft research project, where they looked at what it took to manufacture and operate an underwater datacenter

According to the team, the idea behind these underwater datacentres is because 50% of the population lives near costal areas. Deploying servers along the coasts can help bring computing power closer to where the people are, reducing latency. Being submerged in water can also help with the heat exchange.

It is an interesting concept and there is more information in the short 2 minute video below.




SQL Server on Linux means you’ll be able to run a full .Net application in Linux Docker containers in Azure, developed on a Mac

SQL Loves Linux_2_Twitter (002)

There was some interesting news on the web today, Scott Guthrie announced that “private preview of SQL Server on Linux is available starting today” and that they are “targeting availability in mid-2017”.
When combined with some other recent announcements, in my head I can see it unlocking some unique scenarios which were never possible before in the Microsoft ecosystem:

In the very near future a developer will be able to create a new website with Visual Studio Code on a Macbook, using .NET core + ASP.NET core + Entity Framework core for a full stack application, which is held in a Linux Docker container, hosted on top of a Windows Server 2016 core VM inside of the container system, with the data being retrieved from a SQL Server instance hosted on a Red Hat Linux VM.

While this may be a contrived scenario for the sake of it, it does highlight what is possible with the new tools and frameworks being released by Microsoft. It is refreshing to see Microsoft embrace developers and operations teams that are working on non-Microsoft platforms. My favourite quote I heard from the team, is that they want to have the tools work on every platform equally well, and let the best platform host win. We have also seen the ASP.NET team working hard at making sure that the new ASP.NET core framework is optimised to work much faster than previous releases and recently achieved a 2300% increase in request throughput over ASP.NET 4.6

Microsoft today also announced that it is joining the Eclipse foundation. In the past they had already procided Eclipse plugins for Azure Toolkit for Eclipse & Team Explorer Everywhere as well as the Java SDK for Azure enables Eclipse users to build cloud applications.

Here are a whole heap of links to help you research this new paradigm:


If you are an ASP.NET developer and want to learn what is new about ASP.Net core, then there is a great usergroup talk by @AdamStephensen where he dives into what he wished he had known when getting started with it.

And to continue your education on new website development, this Dev Super Powers video by @DuncanHunter will show you how to get started with Angular 2 with Visual Studio Code.

Mining bitcoin with Azure (and why it is a terrible idea)

Update: I posted about my experience purchasing mining power from a dedicated hosting provider

Note: This is extrememly inefficient and will not earn any bitcoin. You will just burn through Azure credits. Purchasing a $30 USB device is ~100000x faster.

TL;DR The commands to create a machine in Azure to CPU mine are at the bottom. But don’t bother.

I have been playing with the blockchain lately, most notably the programmable blockchain Ethereum. I was interested in seeing how difficult it was to set up a machine to mine Bitcoin. What I discovered through my research was that it is possible, but pointless to do CPU mining in the cloud.

Why is mining on Azure bad?

While it is easy to set it up, CPU mining is extremely inefficient. Mining on CPUs was depreceated a long time ago when it was discovered that it was faster to do on GPUs. But now even GPUs have been deprecated in favor of power efficient ASIC machines

Here are some hardware comparisions of ASIC devices from


There are even cheap USB devices that you can plug in that give you GIGAhashes/second

How did my Azure miner go?

My 2 core Azure machine costs $85/month, and doing CPU only getting me 4.24+4.25= 8.5 kilohash/second (0.0000085 GH/s), compare that to the 3.6 GH/s that an ASIC $30 USB device provides.


And after 2 days of mining I didn’t even get a single hash even accepted by the mining pool, effictivelly making my mining worth 0%.

Could this be faster?

On Azure, renting servers with a faster CPU (D & G-Series) would net negligble increases due to CPU mining.

The upcoming N-Series of VMs will have dedicated GPUs attached that you can offload work to. This would be an order of magnitude faster in mining.

The price per hour of a N-Series VM would be so high that you would be better off just paying to rent dedicated ASIC bitcoin mining rigs e.g. there is a list at the bottom of this blog post

Instructions for creating on Azure (if you really want to try it)

  1. Sign up for a mining pool e.g. (to give you a higher chance of getting a trickle)
  2. login to
  3. create a new Ubuntu virtual machine from the marketplace.
    I recommend Ubuntu on a basic size VM as we won’t be using the features of standard
  4. use Putty to remotely connect to your VM
  5. Install bitcoind (bitcoin daemon)
    sudo add-apt-repository ppa:bitcoin/bitcoin
    sudo apt-get update
    sudo apt-get install bitcoin-qt
  6. Configure bitcoind
    Run bitcoind to see instructions on what should be in the bitcoin.conf
    Create a bitcoin.conf file under ~/.bitcoin
    sudo nano ~/.bitcoin/bitcoin.conf
  7. Install a miner (cpuminer). Instructions from
    sudo apt-get install build-essential libcurl4-openssl-dev
    tar xzf pooler-cpuminer-*.tar.gz
    cd cpuminer-*
    ./configure CFLAGS=”-O3″
  8. start the miner to test it all works
    ./minerd -o stratum+tcp:// –u <username_workernumber> -p X
  9. add the miner to startup. Edit /etc/rc.local to add it
    sudo nano /etc/rc.local
    Then on a line before exit 0, add the full path of your startup command with & at the end of the line
    e.g. /home/youruser/cpuminerXYZ/minerd -o stratum+tcp:// –u <username_workernumber> -p X &

Adding Application Insights to SharePoint

app insights sharepoint

TL;DR I helped write an SSW rule on setting up Application Insights in SharePoint.

I’ve been adding Application Insights to a number of SSW websites (such as and Since being added, App Insights has been helping us to keep on top of our application metrics and unhandled exceptions.

We wanted to add Application Insights to SharePoint, but we couldn’t find any useful documentation online. I started some investigations into how I could do this manually myself. As SharePoint is an ASP.NET application, I started teased apart how Visual Studio adds hooks into projects. I created an empty git repository, created a website, checked it in, used Visual Studio to add App Insights, checked in, then diffed all the changes.

After investigating, we discovered that it was easier than I thought. You can track the browser metrics by simply adding the App Insights JavaScript to the SharePoint master page.

For the server side metrics, as it is an ASP.NET website, you can update the web.config file on the server to start tracking those metrics, we found that the Application Insights Status Monitor configuration tool was the easiest way to get this done.

A full write up of the SSW rule on setting up Application Insights in SharePoint is available for you to follow.
I have also helped write a series of SSW Rules to better Application Insights that can help you get the most out of it.

Improving your website with Application Insights

Application Insights Logo

TL;DR I helped write a series of SSW rules on setting up Application Insights that you can follow to improve the monitoring of your website.

One of my favourite Azure offerings is Application Insights. I think it is an extremely simple thing that should be added to every website you manage. It is free for basic usage and only takes a couple of minutes to set up.

I’ve been adding App Insights to a number of SSW websites (such as and Since being added, App Insights has been helping us to keep on top of our application metrics and unhandled exceptions.

Because I think App Insights is a great product and want more people to get usage out of it, I helped write a series of series of rules detailing the hows and whys of Application Insights. My favourites are:

There are many more listed up there but those are just my getting started favourites. Check the rules out and start improving the monitoring of your application’s health.