ABOUT US ABOUT US

> Simon Timms

Simon Timms is always interested in improving himself and learning all that he can. He has worked in various oil and gas domains as well as insurance and enterprise search. He began his career working with build systems so is very passionate about proper builds and is excited by the burgeoning DevOps movement. For the most part Simon works in C# mostly on web applications. Somehow he seems to have picked up a reputation for knowing about JavaScript. He is a big fan of ReactJS and currently dislikes knockoutjs, but that will likely change in a day or two. Check back soon!

Simon holds an honours degree in computing science from the University of Alberta and a masters in information systems from Athabasca University. Simon believes in community and giving back for all of his good fortune. He helps run the Calgary .net User Group where he typically talks several times a year. He also talks whenever he can at technical conferences. He is a two time ASP.net MVP and blogs at Simon Online.

> Blog posts

DEC
6
Creating Storage Queues in Azure DevOps
Simon Timms
Storage Queues are one of the original pieces of Azure dating back about a decade now. They are great for deferring work to later or spreading it out over a bunch of consumers. If you're following best practices for DevOps you'll know that the creation of your queues should be done in code. In some cases you can create the queues on application startup but in serverless scenarios there often is no startup code so the responsibility of creating queues falls to your deployment process. Let's look at how to do that on Azure DevOps
NOV
5
Azure Data Factory - a rapid introduction
Simon Timms
Azure is huge. There are probably a dozen ways to host a website, a similar number of different data storage technologies, tools for identity, scaling, DDoS protection - you name it Azure has it. With that many services it isn't unusual for me to find some service I didn't even know existed. Today that service is Data Factory. Data factory is a batch based Extract, Transform and Load(ETL) service which means that it moves data between locations. I mention that it is batch to distinguish it from services which are online and process events as they come in. Data Factory might be used to move data between a production database and the test system or between two data sources.
OCT
21
Checking in packages
Simon Timms
If there is one thing that we developers are good at it is holy wars. Vi vs. Emacs, tabs vs. spaces, Python vs. R, the list goes on. I'm usually smart enough to not get involved in such low brow exchanges... haha, who am I kidding? (vi, spaces and R, BTW) Recently I've been tilting at the windmill that is checking in package files. I don't mean the files that tell what version of files to check in but the actual library files.
OCT
20
DevOps and Microservices - Symbiotes
Simon Timms
Two of the major ideas de jour in development circles these past few years have been DevOps and Microservices. That they rose to the forefront at the same time was not a coincidence. They are inexorably linked ideas.
OCT
12
Terraform for a statically hosted AWS site
Simon Timms
Just the other day somebody was mentioning to me that they were having trouble setting up a statically hosted site on AWS. That was the kick in the nose I needed to get this article written as it's been on my back-burner for a while. Terraform makes the whole process easy.
JUL
2
Weird JavaScript - Destructuring
Simon Timms
I've been at this programming game for a long time and I've written two books on JavaScript. Still today I ran into some code that had me scratching my head. It looked like 1function AppliedRoute ({ component: C, props: cProps, ...rest }) { I was converting some JavaScript to TypeScript and this line threw an linting error because of implicit any. That means that the type being passed in has no associated type information and has been assumed to be of type any. This is something we'd like to avoid. Problem was I had no idea what this thing was. It looked like an object but it was being built in the parameters?
JUL
1
Application Insights Alerts
Simon Timms
Application Insights is another entry in the vast array of log aggregators that have been springing up in the last few years. I think log aggregators are very important for any deployed production system. They give you insight into what is happening on the site and should be your first stop whenever something has gone wrong. Being able to search logs and correlate multiple log streams give you just that much more power. One feature I don't see people using as much as they should is basing alerting off of log information. Let's mash on that.
JUL
1
Application Insights Cloud Role Name
Simon Timms
Logging is super important in any microservices environment or really any production environment. Being able to trace where your log messages are coming from is very helpful. Fortunately Application Insights have a field defined for just that.
MAY
17
SignalR as a Service
Simon Timms
The SignalR service which recently entered public preview in Azure closes the loop on building rich serverless applications.
MAY
15
Reporting Success in JavaScript Lambdas when Using AppInsights
Simon Timms
AWS Lambda provides a solid platform for doing serverless coding but when used in conjunction with Application Insights there are some tricks to get the function to return properly.
MAR
28
Environment Agnostic Packaging - Just Do It
Simon Timms
I've been noticing a bit of a trend lately around how some tools suggest you package your builds: they build differently for each environment. This is super-inconvenient if you're trying to progress a package through multiple environments. Just don't package configuration in with your build packages.
FEB
21
Angular Testing Patterns - Leverage Observable
Simon Timms
One of the most challenging parts of testing is finding seams to reduce the scope of tests. Doing so is important because it make your tests smaller and cleaner which makes them more resilient to changes in the rest of your code base. Testing isn't helping you if every minor change breaks dozens of interconnected tests. Angular's heavy use of Observable provides us a great seam.
DEC
31
Angular Testing Patterns - TestBed
Simon Timms
Spec files are automatically generated by Angular 5's CLI but most projects leave them empty. Why not actually write some tests? This post covers some useful patterns to make the whole process as painless as possible.
SEP
29
Creating a Custom Matcher for TS-Mokito
Simon Timms
Mocking libraries can be useful, even in JavaScript testing. One of my favorites is ts-mokito a TypeScript mocking library. One minor problem with it is that it is lacking a good array matcher. In this article we'll see how to fix that.
JUN
7
Running Kubernetes on Azure Container Services
Simon Timms
Docker is cool and all but shipping containers to production has a lot of added challenges. Scaling, deploying, rolling deployments, storage,... the list of challenges goes on and on. An orchestration engine, like Kubernetes, can solve many of the challenges.
MAY
11
The Great RS-232 Adventure
Simon Timms
Talking over the RS-232 serial protocol is a bit of a blast from the past but I needed to use in on an Android tablet from within Xamarin. This is the, painfully complete, story of my journey.
MAY
3
JSON.net not just for serialization
Simon Timms
If you happen to head over to https://www.nuget.org/packages and look at which package has been downloaded the most there is a clear winner: JSON.net. It is in everything, every where. JSON is so wildly ubiquitous that I play a little game with myself when I start a new project: how long can I go before I need to serialize or deserialize JSON and need to pull in JSON.net. I rarely last more than a couple of hours. But it turns out that there is a lot more that JSON.net can do.
APR
19
Using azure-cli in windows bash
Simon Timms
The latest versions of Windows support running linux executables. The technical trickery to get that done boggle my mind. I wanted to get the Azure command line tools working inside of the bash. The tools are written in python so we need to get that installed.
MAR
19
Getting Started with RabbitMQ in ASP.NET
Simon Timms
In the last post we looked at how to set up RabbitMQ in a Windows container. It was quite the adventure and I'm sure it was woth the time I invested. Probably. Now we have it set up we can get to writing an application using it. A pretty common use case when building a web application is that we want to do some background processing which takes longer than we'd like to keep a request open for. Doing so would lock up an IIS thread too, which ins't optimal. In this example we'd like to make our user creation a background process.
MAR
16
Creating a Rabbit MQ Container
Simon Timms
I bought a new laptop, a Dell XPS 15 and my oh my is it snazzy. The thing I was most excited about was that I'd get to play with Windows containers again. I have 3 other machines in the house but they're either unsuitable for containers (OSX running Windows in parallels) or I've so toally borked them playing with early betas of containers they need to be formatted and reinstalled - possibly also thrown into the sun. So when I found myself presented with the question "how can we get into messaging in our apps for free?" I figured I'd crack open the laptop and build something with MassTransit. I found that MassTransit supports running on RabbitMQ. Why that sounds like a perfect opportunity to deploy RabbitMQ to a container. Only problem was that I didn't really know how to do that.
NOV
9
C# Wildcard Variables
Simon Timms
Wildcard variables in C# are up for discussion for inclusion in C# 7 or some later version. They are a useful construct taken from functional languages like Haskel.
AUG
28
You're using HttpClient wrong and it is destabilizing your software
Simon Timms
I've been using HttpClient wrong for years and it finally came back to bite me. My site was unstable and my clients furious, with a simple fix performance improved greatly and the instability disapeared. At the same time I actually improved the performance of the application through more efficient socket usage.
JUL
17
An Intro to NGINX for Kestrel
Simon Timms
Kestrel is a server capable of serving up ASP.NET Core applications on any platform but in production you need to run it behind another server.
JUL
15
End to end testing for your saga
Simon Timms
Looking to do end to end testing of your saga? I strugged.
JUN
11
How I fixed OneDrive like Mark Russinovich
Simon Timms
Even with compiled applications it is possible to debug issues
MAY
6
CI with F# SQL Type Providers
Simon Timms
F# type providers are awesome but it took me a bit to figure out how to get them to work with CI
APR
27
Running your app on Windows Server Core Containers
Simon Timms
Getting started with NServiceBus on windows containers
APR
24
FSharp.Data.SqlClient Type Provider Having Trouble Bulk Loading
Simon Timms
Uh oh: Method not found: 'Void FSharp.Data.DataTable`1.BulkCopy'
APR
23
FSharp.Data.SqlClient Type Provider Not Finding Tables
Simon Timms
If the SqlProgrammabilityProvider isn't finding table names for you this might be the fix
MAR
16
What is middleware anyway?
Simon Timms
I find middleware to be a confusing term which doesn't mean anything or perhaps means everything. Let's figure out what middleware means
FEB
18
I squash my pull requests and you should too
Simon Timms
By squashing your git commits you can make everybody's life better except for Idi Amin
JAN
31
ProTip: Get a random date in SQL Server
Simon Timms
How to fill a table with some random dates.
JAN
26
Launching ASP.NET Monsters
Simon Timms
We're really excited about the new ASP.NET Core and the future of ASP.NET in general. So much so that we're starting a specialty site and a bi-weekly video blog all about it.
JAN
20
ASP.net vNext is now ASP.net 5 is now ASP.net Core 1.0
Simon Timms
What the rename was and why it didn't go far enough
DEC
17
SQL Server Aliases
Simon Timms
Ever run into that problem where everybody on your team is using a different database instance name and every time you check out you have to update the config file with your instance name?
DEC
16
Updating Sub-Collections With SQL Server's Merge
Simon Timms
When you get to be as old as me then you start to see certain problems reappearing over and over again. I think this might be called "experience" but it could also be called "not getting new experiences".
DEC
4
Copy Azure Blobs
Simon Timms
Ever wanted to copy blobs from one Azure blob container to another? Me neither, until now. I had a bunch of files I wanted to use as part of a demo in a storage container and they needed to be moved over to a new container in a new resource group. It was 10 at night and I just wanted it solved so I briefly looked for a tool to do the copying for me. I failed to find anything. Ugh, time to write some 10pm style code, that is to say terrible code. Now you too can benefit from this. I put in some comments for fun.
NOV
19
Source Control for SQL Databases
Simon Timms
There are a bunch of options for migrating database schema, how can you be sure you've picked the right one?
NOV
7
Stop OSX deleting /tmp so frequently
Simon Timms
Some time ago I lost a podcast recording because I stored it in /tmp. It is a bad habit but I tend to store things that I'm not going to need in the long run in /tmp. It is a throw back to my real Linux days when storage was expensive and I might not be back on that machine for a while to figure out why all the space was used.
OCT
13
Getting Started With ELK using Docker
Simon Timms
Being able to trace calls through services an be difficult. We need to find some way to gather and aggregate these disparate logs. This is exactly what the ELK stack does.
OCT
13
Layer Already Being Pulled by Another Client. Waiting.
Simon Timms
I've been seeing a lot of this frustrating error when working with docker today. It turns out that pressing ^C when docker is downloading layers is not a good thing. In my case I changed hotspots which broke the download so I hit ^C. There are a couple of issues on github, here and here but basically nobody cares that the docker experience in this scenario is crummy. If you encounter this error it seems the only way to solve it is to restart the machine on which docker is running. If you're running docker against a VM then restarting the machine seems to fix it.
OCT
5
Yet Another Docker Intro on OSX
Simon Timms
You would think that there were enough introductions to Docker out there already to convince me that the topic is well covered and unnecessary. Unfortunately the sickening mix of hubris and stubbornness that endears me so to rodents also makes me believe I can contribute.
OCT
3
Winner Selector
Simon Timms
A quick tool for picking winners from a list
SEP
15
CrashPlan Tip - Move the cache directory
Simon Timms
I use CrashPlan to back up my collection of computers. It is a great tool and has saved me on a number of occasions. Most memorably was the time that I forgot the password for my comically well-encrypted drive. Restoring from crash plan got me back all the important things.
SEP
11
A discussion on knockout
Simon Timms
It is rare that a day passes on the Western Devs' slack channel that we don't have some lively discussion. Today was my day to rant about knockout.js.
SEP
3
A Couple of Things About Powershell Remoting
Simon Timms
I couldn't find the answers to these questions readily anywhere on the internet so I thought I would write them down here for the good of mankind. When using remoting as a different user does the target account or my account need to be an admin?
AUG
31
Ooops, Repointing Git Head
Simon Timms
I screwed up. I force pushed a branch but I forgot to tell git which branch to push so it clobbered another branch.
AUG
28
Running Process as a Different User on Windows
Simon Timms
Running commands as another user on Windows can be a bit tricky, but this is a method that worked for me.
AUG
15
Change Management - the Missing Podcast
Simon Timms
Some people are really good at computers. I am, apparently, not one of those people. This last Friday we had a fantastic podcast with
AUG
14
Azure SQL Point in Time Restore Is Near Useless
Simon Timms
Azure SQL Point In Time restores are so slow as to be near useless.
AUG
12
Setting Up an IIS Site Using PowerShell
Simon Timms
The cloud has been such an omnipresent force in my development life that I'd kind of forgotten that IIS even existed. There are, however, some companies that either aren't ready for the cloud or have legitimate legal limitations that make using the cloud difficult.
AUG
7
Change Management for the Evolving World
Simon Timms
I've had this blog post percolating for a while. When I started it I was working for a large company that has some internal projects I was involved with deploying. I came to the project with a background in evolving projects rapidly. It has been my experience that people are not upset that software doesn't work so much as they are upset that when they discover a bug that it isn't fixed promptly.
AUG
2
Casting in Telerik Reports
Simon Timms
Short post as I couldn't find this documented anywhere. But if you need to cast a value inside the expression editor inside a Telerik Report then you can use the conversion functions
JUL
23
Unit Conversions Done (Mostly) Right
Simon Timms
Thanks to a certain country which, for the purposes of this blog let's call it Backwardlandia, which uses a different unit system there is frequently a need to use two wildly different units for some value. And they have so many people and so much money that we can't ignore them.
JUN
10
Getting lookup data into your view ASP.net MVC 6 version
Simon Timms
This is a super common problem I encounter when building ASP.net MVC applications. I have a form that has a drop down box. Not only do I need to select the correct item from the edit model to pick from the drop down but I need to populate the drop down with the possible values.

Simon Timms

Email Email
Web Web
Twitter Twitter
GitHub GitHub
RSS

Looking for someone else?

You can find the rest of the Western Devs Crew here.

© 2015 Western Devs. All Rights Reserved. Design by Karen Chudobiak, Graphic Designer