Skip to main content


Showing posts from July, 2017

Caching your static files in ASP.NET Core

In ASP.NET Core static files(images, css,…) are typically served using the Static file middleware . The static file middleware can be configured by adding a dependency on the Microsoft.AspNetCore.StaticFiles package to your project and then calling the UseStaticFiles extension method from Startup.Configure : Unfortunately this code will not do its job in the most efficient way. By default, no caching is applied meaning that the browser will request these files again and again increasing the load on your server. Luckily it’s not that hard to change the middleware configuration to introduce caching. In this example we set the caching to one day: Remark: An alternative approach would be to let your proxy server(IIS,…) handle the static file requests as discussed here .

Guaranteeing “exactly once” semantics by using idempotency keys

A few weeks ago I had a discussion with a colleague about the importance of idempotency. From : From a RESTful service standpoint, for an operation (or service call) to be idempotent, clients can make that same call repeatedly while producing the same result. In other words, making multiple identical requests has the same effect as making a single request. Note that while idempotent operations produce the same result on the server (no side effects), the response itself may not be the same (e.g. a resource's state may change between requests). A good example where you can get into trouble is when your API withdraws some money from a customer account. If the user accidently calls your API twice the customer is double-charged, which I don’t think they’ll like very much… A solution for this problem is the usage of idempotency keys. The idea is that the client generates a unique key that is send to the server along with

Check compatibility between .NET versions

Compatibility is a very important goal of the .NET team at Microsoft. The team always made a great deal to guarantee that newer versions will not break previous functionality. However sometimes this is unavoidable to address security issues, fix bugs or improve performance. To understand the consequences you have to make a difference between runtime changes and retargeting changes: Runtime changes: Changes that occur when a new runtime is placed on a machine and the same binaries are run, but expose different behavior Retargeting changes: Changes that occur when an assembly that was targeting .NET FW version x is now set to target version y.  To help you identify possible compatibility issues, Microsoft created the .NET Compatibility Diagnostics, a set of Roslyn based analyzers. Here is how to use them: First you have to choose if you want to check for Runtime changes or for Retargeting changes Now you need to select the ‘From .NET Framework version’ and the ‘

The state of Developer Ecosystem in 2017

JetBrains did a survey among 5000 developers to identify the current state of the Developer Ecosystem. Here are some interesting facts that came out of it: Java is the most popular primary programming language JavaScript is the most used programming language Go is the most promising programming language Only 55% of the participants write unit tests 50% are full stack developers Of the C# developers 66% are using ASP.NET MVC Of the C# developers 92% use Visual Studio and only 3% use VS Code Go explore all the results yourself at

Improve your HTML and CSS editing skills in Visual Studio by using Emmet

Last week I discovered a great feature in VS Code that made my life so much easier; the support for Emmet snippet extension. If you don’t know Emmet I suggest having a look at the demo at ……………………… convinced? Let’s show you how this works in VS Code: Open an HTML file inside VS code: Type a snippet using the Emmet abbrevations : Hit ‘Tab’ and let the magic happen:

Type check your JavaScript files

Starting from TypeScript 2.3 you can not only use the type checking and error reporting features of TypeScript in your .ts files but also in your .js files as well. This new feature is an opt-in option that can be enabled by adding the -- checkJs flag. this will enable type checking for all .js files by default.  Open your tsconfig.json file and add the following line “checkJs”:true : If you now create a JavaScript file and introduce a type checking error, you’ll get a nice error message from the TypeScript transpiler; By default setting this flag will enable this feature for all your .js files. It is still possible to selective include/exclude specific files/lines by using any of the following comments; Use // @ts-check to enable type checking for a single file . Use // @ts-nocheck to disable type checking for a single file . Use // @ts-ignore to disable type checking for a single line .

WPF Debounce trick

Sometimes you have to appreciate the power and simplicity that WPF(and by extend XAML has to offer). While having to do a lot of voodoo magic with Reactive Extensions to support debouncing , in WPF it can be reduced to one binding property,  the Delay Binding Property . You can use the WPF Delay binding property to debounce binding events. For example following code will debounces the key input until nothing changes for 0.5 seconds: Text="{Binding UserName,UpdateSourceTrigger=PropertyChanged,Delay=500}" Sweet!

Installing a Windows Service using Topshelf

For a Windows Service we are building, we are using Topshelf : Topshelf is a framework for hosting services written using the .NET framework. The creation of services is simplified, allowing developers to create a simple console application that can be installed as a service using Topshelf. The reason for this is simple: It is far easier to debug a console application than a service. And once the application is tested and ready for production, Topshelf makes it easy to install the application as a service. Great tool and a lot easier during debugging and development! However when I tried to install the final exe as a windows service using installutil.exe it failed with the following error message: "No public installers with the RunInstallerAttribute.Yes attribute could be found in the SampleService.exe assembly." Turns out that you don’t need the installutil.exe tool when you are using Topshelf. Instead you should invoke your executable with the ‘install’ op

SQL Server Profiler is depecrated

The SQL Server Profiler has been around for a very long time. It is very useful if you are trying to see in real time what SQL queries are being executed against your database. However, in the SQL Server 2016, Microsoft announced that the SQL Profiler will be deprecated in future versions. Does this mean that there are no profiling options left in SQL Server? Luckily no, the SQL Profiler will be replaced by Extended Events(XE). Extended Events works via Event Tracing (ETW) which consumes less resources and allows much more flexibility. It also can monitor more events than the Profiler. Where can I find these Extended Events? Open SQL Server Management Studio ( for SQL 2014 or higher) and connect to one of your Database instances Go to Management>Extended Events : Expand the Extended Events section, right click on Sessions and choose New Session Wizard The Session wizard will help us to select the events we want to profile. Click on Next > S


A long listed request finally arrived into VSTS, the introduction of a built-in Wiki. Before you had to fallback to the Wiki extension in the marketplace .  It’s still in preview but offers enough features to start playing with it. Open up your VSTS account and you’ll find the following new menu item: When you click on it, you are welcomed with one button ‘Create Wiki’. Shall we? After clicking on Create Wiki , an editor(with Markdown support) is opened that allows you to create your first Wiki page: Let’s hit Save , specify some comments and there is our first Wiki page on VSTS: Creating a link to another Wiki page is as simple as using a Markdown link, don’t forget to replace spaces by a ‘-‘ in the link URL: What features are coming next ? Our team is working hard to get you the next set of Wiki features, such as… Wiki search across projects Tags Wiki integration with work items Rich editing experience that support: HTML tags


You sometimes here people say that they’ll keep using HTTP because it’s faster than HTTPS. This doesn’t have to be true(to spoil the surprise think HTTP2 ). Let’s try the test on : The first test is using HTTPS, loads 360 unique, non-cached images and completes in 0.716 seconds. To proof there is no magic, here is the network traffic overview: Let’s do the same test but with HTTP instead. 7.770 seconds! Auw, that hurts: And an overview of the related traffic: So where is the magic? As a I already revealed at the beginning of this post, the magic is in the usage of HTTP2 . HTTP2 is the replacement for HTTP with a focus on speed. It only works on secured connections using SSL but as the tests above proof is a lot faster than HTTP.  So no excuses anymore to not start using HTTPS(and HTTP2)!

AlternativeTo–Crowdsourced software recommendations

A great tip from a colleague I wanted to share… AlternativeTo is simple in its beauty. It allows you to search for alternatives for specific applications. A great help if you need to buy a new tool but want to compare some options. From the site : Don’t settle for crappy apps. We’ll help you find alternatives. AlternativeTo is a new approach to finding good software. Tell us what application you want to replace and we give you great alternatives, based on user recommendations. An example, let’s look at a replacement for Visual Studio(*): . I get 84 alternatives back. For every alternative you can vote if it’s a good replacement or not. (*): I’m sorry, I’m not planning to replace my Visual Studio.

Team Foundation Server Code-Search Administration scripts

Starting from Team Foundation Server 2017, the Code Search feature that was available for a while in VSTS, gets an on-premise equivalent. The feature is built on top of a customized version of ElasticSearch . However the integration between the 2 products(TFS and ElasticSearch) is rather limited right now. To help you maintain your ElasticSearch instance, Microsoft has a set of Powershell scripts available that allow you to: Pause and Restart indexing Clean and reset your ElasticSearch instance Trigger code indexing Etc… A must have for every TFS administrator…