Tim Murphy's .NET Software Architecture Blog

Sketchnotes: Microsoft Windows 10 Creator Update Event Oct 26

On October 26, 2016 Microsoft had an event to show off the future of Windows 10 and some new hardware.  The following sketchnotes summarize the announcements from that event.





Cloud Battles: Azure vs AWS–The Video Jun 29

Earlier this month Norm Murrin and I gave a talk at the Chicago Coder Conference.  We learned a lot about how the offerings of each company compares during our preparation.  In the end we come to the conclusion that there is no clear winner except those of us who are leveraging the resources.  Check out this video posted by the conference do get the blow-by-blow details.

Application Integration: Azure Functions Vs WebJobs Jun 02



UI development gets all the attention, but application integration is where the real work is done.  When it comes to application integration in the Azure ecosystem you better learn how Functions and WebJobs are developed and under what conditions you should use each.  In this post I will try to answer those questions.

For me it is important that a solutions is reasonably maintainable, deployable through environments and can be easily managed under source control.

Both products are built on the same code base and share the same base API.  From that perspective they are closely matched.  Functions do have the advantage of handling web hooks as opposed to simply timer and storage events with WebJobs.

There is another difference that I haven’t been able to prove you, but I’ve seen mentioned in a couple of places.  It seems like Functions may take time to warm up since they aren’t always instantiated.  Since WebJobs are always running they would not incur this startup cost.  If immediate processing is important then WebJobs may be the more appropriate options for you.

When it comes to actual development I prefer to have the resources of Visual Studio to write and manage source code as well as package my deliverables for deployment.  As of this writing I have not been able to find a Visual Studio project type.  This means you edit the code through a web browser.  This in portal editor does allow you to integrate with Git or VSTS for source control.  I would expect at some point in the future we will get a Functions project type.

Both WebJobs and Functions can be written using C#/VB.NET and Node.js.  From the language availability perspective they are even.


So what is the real separating line between using one or the other.  From what I have experienced so far, if you need the web hooks then Functions are the right choice.  If you don’t need the web hooks and maintainability is you priority then WebJobs are the way to go.  I’m sure there are more reason, but these are the most obvious in the early days of Functions.  As the products evolve I’ll post updates.


Christopher Anderson (@crandycodes) from the Azure team replied via Twitter with the following:

You hit on some key points like lack of tooling/VS integration. We plan on addressing those before GA.
I think the major point missing is the dynamic scale functionality, pay per use. Functions scale automatically and don't cost a VM.
Also, if you run Functions in dedicated with always on, there is no cold start issues, but you pay per VM at that point.
WebJobs vs Functions is really: "Do I want to manage my own custom service?" Yes: WebJobs, No: Functions. Otherwise, similar power.

A TFS Developer In A GitHub World May 04

Git and GitHub have been around for a few years now.  They are becoming more popular by the day.  I finally got around to looking at them more closely over the last few months and decided to summarize the experiences.

My first experience with GitHub was not the most pleasant.  I was using Visual Studio 2013 which doesn’t seem to have the best integration story (or at least didn’t when I tried it).  The fact that it required that an existing repository be cloned via the GitHub desktop before Visual Studio knew anything about it was the biggest pain.

Visual Studio 2015 on the other hand has a much better use story.  You are able to log into your repository and get a clone of the repository without breaking out to another tool.  The commit process is pretty similar to that of TFS from that point on.

From my trials I have found that GitHub works well as a source control repository.  It is hard at first getting used to the non-Microsoft verbs that are used.  Retraining yourself that you have to do a commit and push before something is actually checked in instead of just doing a

As for working as a team I think that TFS still has the better features.  This may just be because it isn’t as well integrated with Visual Studio.  Having customizable work items in TFS comes in very handy, especially on larger enterprise projects.

The wiki gives a good place to put documentation, but it doesn’t give you a place to manage Word, Excel, PowerPoint, PDF and Visio documents that might have important information about your project. This is where TFS and SharePoint really shine.

Another drawback I see over TFS is that GitHub repositories are public and can’t be private unless you have a paid account.  I can create a free TFS Online account that gives me private repositories and access for up to five users.  This makes it better for the individual developer to the small team.

Of course there is a third option that you can use Git in TFS.  This gives you the source control of Git with the project management features of TFS.  It took a little bit to get may existing code into the new Git-TFS project repository.  Then came the realization that the only source control viewer for Git repositories is in the portal.  The growing pains continue.


I am sure that the story around GitHub will improve over time, but right now it just seems like people are using it because it is what the cool kids are doing or they are working on open source projects.  If I have to advise a client I am going to suggest they go with the product with the best and most complete story with the best integration to their current toolset.  For now that is TFS, especially if you are a Microsoft development shop.

As for my GitHub experiment, it goes on but I deleted the repository I had created for security reason.  Stay tuned and see what else develops.  The next step is probably Git in TFS.

Increase Cloud Application Responsiveness With Azure Queues and WebJobs May 03

This post is based on the presentation I gave at Cloud Saturday Chicago.

In a mobile first world services need to be able to process high volumes of traffic as quickly as possible. With the certification and deployment process which native mobile apps have to go through being long and sometimes uncertain, we find ourselves looking for ways to make improvements without changing the device code. The flexibility of Azure and other cloud platforms gives developers the ability to easily implement changes to solutions using that can be deployed quickly with nearly infinite resources.

The solutions described here can also help the throughput of you web applications as easily as mobile apps. This article will demonstrate the capabilities of Azure WebJobs and Queues improve application responsiveness by deferring processing.

Let’s start with what a normal mobile app infrastructure design may look like. We have a mobile app which is sending data to a web service to be processed. This service may have a whole workflow of operations to perform on that data once it is received. Once the processing is complete the data is stored in an Azure SQL Database.  The problem that we are facing is that you don't want the mobile app to continue to wait while the processing occurs as this may cause timeouts or the delays in the UI while.


To reduce the delays we can make a couple of minor changes using features of Azure. We remove the main workload from the web service so that it simply puts the incoming message on an Azure queue. The work that used to be in the service is now moved to a continuous Azure WebJob along with code to read from the queue. This give the service the ability to return an acknowlegement message to the mobile app almost immediately. The WebJob can pull from the queue at its own speed and since we are in the cloud we can easily add new instances of the WebJob to scale out if needed.


What are the actual performance differences? That will depend greatly on how much work your service was doing to begin with. If it was only a simple table insert there may not be a significant improvement or possibly even a loss due to the serialization to the queue. If you have to reach out to several different resources or perform a strong of operations this will off load the real work.

The Code

The first thing that we need to do is add the code to insert into the queue from the service.

string connectionString = ConfigurationManager.ConnectionStrings["AzureWebJobsStorage"].ToString();

CloudStorageAccount storageAccount = CloudStorageAccount.Parse(

CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();

CloudQueue queue = queueClient.GetQueueReference("yourrequestqueue");


var tempMessage = JsonConvert.SerializeObject(request);
CloudQueueMessage message = new CloudQueueMessage(tempMessage);


In order for this code to work we need to setup configuration connection strings to the storage account which will contain the queue.  In order to get the keys for the storage account open the Azure portal and go to [your storage account] –> Keys.


Below are the connection string entries that you should use.

<add name="AzureWebJobsDashboard" connectionString="DefaultEndpointsProtocol=https;AccountName=yourstore;AccountKey=your secondary access key" />
<add name="AzureWebJobsStorage" connectionString="DefaultEndpointsProtocol=https;AccountName=yourstore;AccountKey=your secondary access key" />

Now we add a new Azure WebJob project to our solution.  You will find the Azure WebJob template under the Cloud template section.


Once we have the project add the following code to a method in the Functions class specifying the name of the queue in the QueueTrigger parameter.  In this instance I have used the JavaScriptSerializer to deserialize the message from the queue.  You can then pass the object on to the processing methods as you originally had in the service.

public static void ProcessQueueMessage([QueueTrigger("your queue")] string message, TextWriter log)
    var serializer = new JavaScriptSerializer();
    YourType tempRequest = serializer.Deserialize<YourType>(message);
    // Do your work here

Once the storage key is added to the connection strings for the WebJob as we did for the service we will be ready to deploy and test.

Deploying the WebJob is fairly straight forward.  If you zip up the contents of your bin folder including the config file you can then upload it through the App Service –> [Your App Service] –> Settings –> WebJobs blade of the Azure portal.


Give the WebJob a name, leave the other settings and select the file for your zipped bin folder and you are all set to go.  I will cover debugging in a future post.


Creating WebJobs and manipulating Azure queues is not rocket surgery.  If you have kept your code as loosely coupled as possible then moving to a continuous WebJob solution will be fairly quick and painless.  With just a little effort your application will seem more responsive and will be able to handle much larger request loads.

IDEs For Developing Node.js In A Windows Environment Apr 11

Node.js has become one of the most predominant JavaScript based solution frameworks over the last couple of years.  As with most ideas that start in the open source community it has crept its way into the Microsoft based platforms.  For those of us who make our living in the Windows ecosystem it is beneficial to know what tools are available to add Node.js components to our solution landscape.

This post will briefly introduce four of the development environments to build Node.js projects on the Windows platform.  These include DOS command line, VS Code, WebMatrix and Node.js tools for Visual Studio.

Command Line


As with most development, the solution with the fewest bells and whistles has the most power.  You can simply download the Node.js base from nodejs.org.  This will supply you with all the basic components including a Node.js command window.  At that point you can use npm to pull down what ever packages you wish to leverage and use your favorite text editor to develop solutions.

VS Code

One step up from command line is Visual Studio Code.  This is a tool that Microsoft built in response to the portion of the development community who prefer a minimalist solution where you pick every feature you want to include in your code explicitly.  Since it is a very file based/folder based tool there is no native support for managing associated resources such as modules that you want to include in your Node.js package.  In many cases you still need to leverage the command line in order to perform operations such as adding modules.


You can open an existing Node.js folder and effectively maintain your application.  There are several VS Code Extensions available to help with the out of the box deficiencies and more are being added all the time.


With WebMatrix you add the ability to start from a project template. You still won’t have the capability out of the box to add new Node packages.  In theory this should be overcome by simply installing the NPM Gallery extension, but when I tried it there were bugs that prevented retrieving any new packages.


On another cautionary note, I have found that WebMatrix can have unpredictable problems where sometimes Node.js code that will work in other tools will have random results.  I’m not sure if this is a result of my environment or the WebMatrix hosting model, but buyer beware.

Node.js Tools for Visual Studio

Visual Studio is the envy of all other development platforms so it is to be expected that it is the best development experience for the Windows platform.  You have all your favorite productivity features.  If you are normally a .NET developer and need to do Node.js development this is your choice, hands down.  It gives you intellisense, debugging and profiling on top of NPM integration.  What more could you ask for?



In the end everyone will have their favorite toolset based on how they work and what type of projects they are developing.  There isn’t a right or wrong choice, just your personal preferences.

BUILD 2016 Thoughts: Home Sweet Windows Apr 04

It is that time of year again where Microsoft developers gather in San Francisco to hear the direction that Microsoft is moving and the tools they are offering to get us there.  The big theme this year has been “Windows is home for developers”.  So what did Microsoft have in store for us?

How Far Have We Come

There were a lot of stats that showed up during the keynotes.  A couple that stood out for me were that there are currently over 270 million users on Windows 10 and that Cortana is answering over 1 million voice questions a day.  First, this makes Windows 10 the fastest adopted version of Windows in history which say to me that Microsoft is starting to get a little of its appeal back.  Second, it tells me that even if Windows Phone didn’t take of the way it should have it still brought about assets that for Microsoft that they are leveraging to the benefit of users.


Now I didn’t hear anyone at BUILD say why, but the next update to Windows 10 will be called the Anniversary Update (I guess 31 years is a nice round number).  Whatever the reason there were a number of new features that will be coming with the release that are worth looking at.  The three big features included security, ink and Linux (believe it or not). 

The one security feature that stood out is biometric logins from Edge.  This allows you to use something like a fingerprint reader to log into a web site.  My understanding is that this is an extension of the Windows Hello interface.

The second big feature is the ink enhancements.  The statement was that since most people still use a pen and paper so often that it should be front and center in your experience. This includes context sensitive handwriting recognition that can realize that if you write a word that implies a date it will be a link that can open Cortana and set a reminder.  This along with new highlighting feature, a new sketch pad and rulers that make it easier to draw lines and shapes the ability to use a pen on your computer becomes infinitely more powerful.

For the third announcement Microsoft introduced a Bash shell for Windows running Ubuntu Linux.  I’m still not sure where this is useful, but the fact that the two can live together and interact bears another look.


Here is where wishes come true.  It was rumored before last year’s BUILD that we would hear that Microsoft would buy Xamarin.  That announcement came earlier this year instead.  This week we really got our wish when Scott Gu announce on stage that Xamarin will come free to every Visual Studio user.  Not only that but we will also get access to the other Xamarin goodies like the iOS emulator, test recorder, and test cloud. 

BUT WAIT!  There’s more!  The Gu also announced that Xamarin will be open sourced through the Open Source Foundation.  Merry Christmas!


While it didn’t feature as prominently as it did last year, HoloLens still got some stage time.  It could be that your next classroom experience is with HoloLens if you happen to be a medical student at Case Western Reserve University.  Or you may find HoloLens at your next visit to the Kennedy Space Center where you can explore Mars with Buzz Aldrin.


Azure continues to be a home run and savior for Microsoft.  As PC sales decline and the types of devices we use diversify the cloud has become the backing service for everything.  You can see then why Azure is now in what will be mile long data centers and why almost the entire second day keynote of BUILD was dedicated to Azure.

Xbox And Gaming

Developers are finally getting the opportunities on Xbox One that they have been asking about since it was announced.  The combination of Universal Windows Platform (UWP) and DirectX 12 not only means that more games will be shipped for both Xbox One and PC, but developers will be able to able to write Xbox One apps and games more easily.  They will be able to test them by using the new developer mode that will be available on the Xbox One.  They will then be able to release it to a unified store.  What more can you ask for.


As we have seen over the last year, Cortana is everywhere.  Since every device, regardless of platform, can run Cortana it has the ability to help you in ways that other personal assistant AIs can’t.  They also showed off how Cortana will be integrated with Skype and Bots to give you access to entertainment, products and services that relate to your chat conversations.

Cognitive Services and Bots

I can’t say that the keynotes really made it clear what cognitive services and bots are.  We say where they play but there was not explicit definition of what they are.  From what I saw the cognitive services are pre-packaged services built on top of machine learning.  They are handy tools that you can incorporate into your applications to make them more human friendly like the ability to detect emotions from a person’s expressions.

Bots on the other hand are built on a new framework that is available to devs which integrates services with natural language syntax understanding.  It seems to be the next step in allowing developers to create components that will plug in as part of a greater AI type experience for users.


That is a lot to take in and a ton of new things for devs to learn.  Microsoft is making it easier for developers of all backgrounds to use Windows as their main development environment and a jumping off point to develop solutions that will live on other platforms.  At the same time they are building cloud and device features that have the potential to move computing light years forward.  Even though this year wasn’t about the hardware it is still an exciting time to be developing on the Microsoft platform.  Check out the content from BUILD on Channel9 and find out which new features you can apply to your solutions.

Do You Know How Much Your Azure VM Costs? Feb 09

You go through the Azure price calculator and figure out everything you think are going to need for your Azure VM and how much each resource will cost you on a monthly basis.  You then pick a template from the marketplace and implement it assuming you know what services are being stood up.  Do you really know?

What you may not realize is that if you didn’t go through the pricing calculator thuroughly you may be in for some surprises on your bill.  Not only do you get charged for the hardware that you have selected, but also the image that you choose to run on it. 

The cost per minute of each image is not posted on the image itself.  This is made up of each component you are using and can be figured by reviewing adding up all the costs listed here.  If you don’t know to look there then you won’t know that there are additional costs until you get the invoice at the end of your billing period, and these can really add up.

As I mentioned above this surprise can also be avoided by knowing server type you should select in the pricing calculator.  You may assume you are just getting a Windows server and then adding SQL Server too it, but if you pick SQL Server as the Type for you vitual machine you will see that the real cost almost doubles for you VM.  This is the server type that is actually used for the SQL Server templates.

In some cases you will find that licensing the software in the template costs much less than running the image.  Since you are renting SQL Server instead of buying it you are paying for it each month. 

If a SQL Server standard license cost you $600 per processor and you are running a 2 processor server you can put SQL server on it yourself for $1200.  The same VM loaded with SQL Server standard will cost you ~$300 a month.  At that rate you would pay for the license in 4 months.  You need to take this into account when making your decisions.

Of course if you are only running the server as a testing server that is shut down most of the time then your cost for a year may actually come in under the cost of a license.

The point is be educated about what your Azure VM is really going to cost you and what your return on investment is.

No Excuse For Not Developing For Windows Phone Dec 10

Ok, I’m biased.  Let’s get that out of the way up front.  I am a fan of the Windows Phone and it’s user interface.  I think the live tiles, informative lock screen and application contracts offer a far superior experience to Android and iOS.  Regardless of my preference I believe that at this point it is inexcusable for all but the smallest companies to ignore Windows Phone.

There has been one big reason for the lack of adoption Windows Phone: Apps!  About 75% (not a scientific number) of the people that I have talked to would prefer a Windows Phone over Apple or Android if the apps were there.  Microsoft has a chicken and egg problem though.  They can’t get better market share without more key apps, but no one wants to put there apps on a platform that doesn’t have market share.

I know the stats: Windows Phone has 2% market share.  I don’t think that is the real story.  That ignores that fact that this still equates to over 50 million active users.  That is a significant number of your customers that you are choosing to neglect.  The good will of your customers is worth more than the cost of development and maintenance.

Universal apps mean that you can reach more users than any other platform with a single code base.  With over 110 million installations of Windows 10 and a much larger pool of potential Windows users your app can reach a wide and profitable margin.  Add to that tools like Xamarin which allow you to write once and deploy to iOS, Android and Windows along with reusing your back end architecture and any arguments against writing for Windows Phone get really thin.

Lastly, the business adoption of the Microsoft Surface and the rumored Surface Phone give another potential market for Windows Phone.  This opens line of business application development.  While not a large user base for each individual app, it gives an infinite number of opportunities.

In the end, the variety of value opportunities make a strong case for investing in Windows Phone development.  Spend some time with the tools and ecosystem.  You will find the experience rewarding.

Open Live Writer Released Dec 09


Windows Live Writer has been my blog writing tool of choice since it first came out.  When Microsoft announced that it would no longer support and upgrade the product I was understandably disappointed.

Some time ago we heard (I believe from Scott Hansleman) that they were looking at open sourcing the tool.  While anyone who reads my blog knows OS is not my first choice I anticipated the change because I don’t want to lose this productive and flexible tool.

Now it is here. No more worrying about an end of life situation for WLW now that OLW has been release.  The interface is the same and it even seems to use the same directory structure so you won’t lose work in progress.

I just wanted to say thank you to the team that made this happen.


Azure Sketchnote Collection: Part 2 Nov 25

This is the second in a series of sketchnotes documenting different aspects of Azure and related technologies.  Hopefully you find a few gems that lead to a better understanding of Azure.

Why Azure


Azure For Developers


Azure Redis Cache


Power BI


Hybrid Cloud


Azure Application Component Deployment Nov 05

I think I can! I think I can!

One of the aspects of Azure development that I have found the least amount of information written about is the deployment of your application components.  This is especially the case when it comes to ALM (Application Lifecycle Management) approaches are considered.  As with most things you get the WSYWG demo, but not how things should actually be done in an enterprise environment.  This post will try to cover as many deployment approaches as possible.  While it won’t be comprehensive it will give you enough alternatives to start coming up with your own processes.

Visual Studio

This is usually where every demo of Azure development begins and ends.  You right your web app or cloud service and “Poof!”, your solution magically ends up in your Azure environment.  In this scenario you use the publish option of the project context menu to open a wizard that allows you to connect to an Azure subscription and define where you what site or service you want to publish too.  The process is even simpler if you defined these parameters when you created the project.


Zip Files

While creating web jobs I came across this method of deployment.  You zip up your web job solution and go to Web Jobs under Settings for your Web App and you will see the blade shown below.  You can learn more about this in my earlier post here.



This is the point where we get to a manageable deployment process.  Once you have finished coding your Cloud Service you can go to the project in Visual Studio and create a deployment package using the context menu shown below.


Once you have that visit your cloud service in the portal and select the Update button.  The blade in the figure below will appear and allow you to upload the package and the appropriate configuration.  Azure will then complete the deployment from the provided resources.



If you like to be hands on FTP may be the deployment approach that is right for your team.  It should be familiar to anyone who is used to manually copying their files to a web server.  Once you go into Deployment Credentials for your Web App as shown below and then grab the FTP host name from the properties page you will be able to navigate straight to the wwwroot directory and copy your application files to the server.


From Source Control

Any of us who have been in this game for a couple of decades know that automated builds and deployments save a lot of manual deployment mistakes.  Thankfully we have a number of options for deploying from source control to Azure.  Rather than explain each I’ll put a couple of links here that do a good job of explaining the process of setting these scenarios up..

Visual Studio Online

TFS On Premis


This post gives just a quick taste of Azure deployments from the quick and dirty options to methods better suited for enterprise developments processes.  Be sure to try as many of them out as possible to understand they fit with your development team.

Can Sketch Noting Help You Keep Up With Technology? Oct 14


I saw a post from someone who had created a Sketchnote of one of Scott Hanselman’s talks.  It was the first time I had seen this as an defined process for note taking.  As I get older and technology moves faster I am finding that it is getting harder to keep up and remember everything I need to learn.  This approach looks like it could be part of the solution.  This post documents my findings as I start to use sketchnoting.

One of the things I noticed as I learned more about sketchnotes is that I have seen this approach used before in industry books.  Specifically the “Head First” series had the look and feel of a sketchnote.  It seems the authority on sketchnotes is Mike Rohde.  I took the time to go through his workbook and videos.  I wish I had started with his handbook.

Not being an artist by any stretch of the imagination I wasn’t sure how difficult learning this skill would be.  I’m always up for a challenge though and I am finding it fun to exercise my drawing skills.  One thing that I have found that makes it easier is to Bing other people’s drawings to get ideas.

As has been mentioned in a number of articles I perused it is difficult to take notes on a tablet.  Most of this has to do with the touch control available in most of the current generation of devices.  Of course your mileage will vary.  I have tried drawing with both my Surface Pro and HP Spectre 360 with varying success.  I think newer generations like the Surface Pro 4 and Surface Book will do much better.

I took a look at Moleskines but I like having a bigger drawing surface.  I am finding that a 8 1/2 x 11 graph paper spiral note book is my sweet spot.  It makes getting your fonts right easier and better alignment.  The thinner the pens you are using for your fonts can also make things look better.  The biggest problem with some of these thin pens is that they tend to bleed ink making it harder to keep clean lines, but those are the trade-offs.

Overall I am enjoying the process and it is helping me remember more of what I am working on even if it is mostly just because I am writing more.  It takes more time, but the relaxation factor is also a benefit.  It also gives you an easy way to review what you have been learning which will re-enforce topics so I would say it indeed will help you keep up with technology if implemented regularly.  I would suggest that anyone give this a try and see if it fits your style.  Have fun.

Azure Sketchnote Collection: Pt 1 Oct 02

I recently started sketchnoting to better understand topics with as many new technologies and languages come out every day.  This post is simply a collection of Azure related sketchnotes that I created.  It is meant as a quick overview of some of the key components and concepts around Azure.  I’ll post more in a future post.  I hope at least a few people find them helpful and I invite feedback.

AzureCon 2015






Azure Security Center


Azure Machine Learning


Earn Your Playing Time Oct 02

FalconsWheaton20150906 (151)

It is aggravating being a coach and a parent watching other parents complain that their child doesn’t get their fair share of playing time.  I could have done this with my own son this season, but instead I told him to work harder and he is now a starter.  Those who show effort and willingness to learn will earn their playing time.  We do our children a disservice by expecting someone to give them a role they haven’t put in the work for or don’t have the skill to perform.

We have to realize this applies to ourselves as well in our business lives.  You need to show to your company that you have value and that they are better off with you as a starter.  As a developer this may mean that you need to spend your own time writing a proof of concept.  Another approach is to ask what areas the company has skill deficiencies and make an effort to gain those skills.  You should also see if you can find a mentor.  Often this will make the road easier and both of you can improve your game.

The more you show that you have the ability and drive to make the company successful the more often they will come to you first for the important projects.  Work hard, make yourself visible and earn your playing time.