Friday, June 23, 2017

Visual Studio 2017 - Build Failure. Error: 'path' cannot be an empty string ("") or start with the null character.

After upgrading to Visual Studio 2017 version 15.2, building some of my projects started to fail with the following error message:

Build Failure. Error: 'path' cannot be an empty string ("") or start with the null character.

The problem only appeared for projects where I enabled the lightweight solution loading feature.

Lightweight solution loading:

Many common tasks, such as navigating through your codebase, editing code, and building your projects will not require any projects to be loaded at all. Therefore Microsoft created the lightweight Solution load feature. The effect is that Visual Studio will not fully load projects until you start working with them increasing performance especially for large projects.

As the problem only happened for these projects, I decided to disable Lightweight solution load again. This indeed solved the problem for me(note: I had to close and reopen the solution before I saw an effect).

image

Hopefully a bug fix will be released with the next update…

Thursday, June 22, 2017

Conway’s Law–The original paper

In the context of software architecture, people sometimes talk about Conway’s Law:

Any organization that designs a system (defined broadly) will produce a design whose structure is a copy of the organization's communication structure.

Although we apply it on software architecture, this definition is originally created in a more broader sense. If you are interested in reading the original paper, go check it out here; http://www.melconway.com/Home/Committees_Paper.html

image

The original paper in PDF format can be found here; http://www.melconway.com/Home/pdf/committees.pdf

Wednesday, June 21, 2017

NPM 5 - Hopes for the future

I’m not a big fan of NPM, it’s not persé the fault of the tool itself but you don’t get happy when you end up with 1000’s of packages and any package change has a ripple effect through your code base. It even gets better when package creators don’t follow the semantic versioning rules and breaking changes appear without a warning. Everything I have to open up a new codebased and NPM starts its magic behind the scenes, it is not without fear that I first start compiling my code.

Sidenote: You can say similar things about any other packaging tool I guess, e.g. NuGet

But hey, enough complaining, time for some good news. Last month, the NPM released version 5 and they promised a lot of improvements.

The announcement:

Starting today, typing `npm install npm@latest -g` will update you to npm version 5.0.1.
npm@5 is all new and packed with performance, reliability, and usability improvements we know you’ll love. These include a new approach to lockfiles, more robust caching, and incredible speed — for many common tasks, npm@5 is up to 5x faster than previous versions.
The update is available now and we recommend it for everyone.
You can learn more about npm@5
here.

Did the update and it is certainly faster! Made my day…

Tuesday, June 20, 2017

Angular 4–Visual Studio 2017 - error TS2420: Class 'MdButton' incorrectly implements interface 'CanDisable'. Property 'disabled' is missing in type 'MdButton'.

After upgrading to Angular 4, my Visual Studio turned red from all the TypeScript errors.

Some samples:

/node_modules/@angular/material/typings/button/button.d.ts(40,22): error TS2420: Class 'MdButton' incorrectly implements interface 'CanDisable'.
  Property 'disabled' is missing in type 'MdButton'.

/node_modules/@angular/material/typings/button/button.d.ts(40,39): error TS2507: Type '(new (...args: any[]) => CanDisable) & typeof MdButtonBase' is not a constructor function type.
The strange thing was, that when I used the Angular CLI and ng build(or serve) no errors appeared and everything seemed to work. 
I first tried to remove my node_modules folder and do a clean install –> didn’t help Sad smile
Then I removed my globally installed node_modules and reinstalled them as well –> didn’t help Sad smile
Then I upgraded my TypeScript version and the related Visual Studio tooling –> didn’t help Sad smile
In the end I found a solution that worked for me here, I had to update to Visual Studio 2017 Update 15.2. I don’t understand why upgrading an Angular version will get Visual Studio into trouble. I hope this experience will improve as I will become hesitant to upgrade Angular in the future.
Remark: Afterwards I noticed that a colleague already sent me an email telling me to update my Visual Studio before upgrading. Better read my mails next time… Confused smile

Monday, June 19, 2017

Getting up to speed with QuickApp, an ASPNET Core / Angular4 startup project template

I’m always disappointed to see the amount of work to get your application setup done(you know the typical ‘Sprint 0’ work). Creating your frontend and backend projects, setting up your authentication and authorization, configure the webpack magic and so on… Before you know it you are 2 weeks in your project and you didn’t deliver a single bit of business functionality.

So every tool, framework or library that can help you get up to speed is a welcome addition to our toolbox. Recently I discovered QuickApp, an ASP.NET Core/AngularX Project Template.

QuickApp Demo

From the documentation:

This application consists of:

  • Template pages using Angular4 and TypeScript
  • RESTful API Backend using ASP.NET Core MVC Web API
  • Database using Entity Framework Core
  • Authentication based on OpenID Connect
  • API Documentation using Swagger
  • Webpack2 for managing client-side libraries
  • Theming using Bootstrap

You get the benefits of:

  • A complete backend and frontend project structure to build on, with login, user and permission-based role management already integrated
  • Data Access Layer built with the Repository and Unit of Work Pattern
  • Code First Database
  • A RESTful API Design
  • Angular Directives Quidance
  • Angular Pipes Quidance
  • Angular Animations Quidance
  • Angular Services
  • Dialog and Notification Services
  • Configuration Page and Configuration Service
  • Integrated Internationaliztion
  • Theming with SASS
  • Ready-to-use email API
  • Handling Access and Refresh Tokens with WebStorage (Bearer authentication) - No Cookies
  • Jquery Integration (Ability to use standard Jquery libraries)
  • CRUD APIs

Friday, June 16, 2017

What is the JavaScript variant of .Any() in LINQ(C#)?

Today during our ‘Bug Fix Friday’ we were discussing how to rewrite a rather complex loop construction using a more functional style syntax. As we were all C# developers, the equivalent of what we wanted to achieve in JavaScript was what C# offers through the .Any() LINQ operation.

So the discussion was if their was a similar approach possible in JavaScript?

And the answer is… of course! The Array.prototype.some() method did exactly what we needed.

From MDN:

some() executes the callback function once for each element present in the array until it finds one where callback returns a truthy value (a value that becomes true when converted to a Boolean). If such an element is found, some() immediately returns true. Otherwise, some() returns false. callback is invoked only for indexes of the array which have assigned values; it is not invoked for indexes which have been deleted or which have never been assigned values.

An example:

Thursday, June 15, 2017

.NET 4.6.2 OutputCache max-age is incorrect

After upgrading to .NET 4.6.2 we started noticing problems with our ASP.NET MVC applications. We intesively use caching to limit the load on our web servers. This is easy to implement thanks to the OutputCache attribute in MVC.

The problem we noticed after upgrading was that the max-age in the response headers was no longer correct after hitting the cache. An example:

  • We had the following OutputCache attribute on top of our MVC controller:
    [OutputCache(Duration = 86400 )]
  • When executing the first request, we see the following response heade
    Cache-Control: public, max-age=86400
  • On all subsequent requests, we see the following
    Cache-Control: public, max-age=63623538558

More information: https://github.com/Microsoft/dotnet/issues/330

Remark: This problem is fixed in .NET 4.7 and a specific quality update.

Wednesday, June 14, 2017

Windows 10–Remove the Windows.old folder after upgrading

After upgrading my Windows 10 installation to the Anniversary Update, I noticed that I had two windows folders; windows & windows.old. Both were eating up a lot of disk space, but I had no clue if I could safely delete the windows.old folder.

The windows.old folder contains all information about your previous windows version. Idea is that if you want to roll back to the old version, it’s possible through the recovery option. Windows will automatically clean up the old folder after some time but if you can’t wait here is a (safe) alternative:

  • Open Windows Explorer.
  • Right click on the drive that contains your Windows installation. Choose Properties.
  • Click the Disk Cleanup button on the General tab.
  • After the Disk Cleanup tool is done calculating, click on the Cleanup System Files button.
  • Select the Previous Windows Installation(s) option to delete the Windows.old folder

delete-previous-windows-version

Remark: I noticed that if you don’t run the Disk Cleanup tool as an administrator, the Previous Windows Installation(s) option is not available.

Friday, June 2, 2017

From developer to architect–A logical evolution…or not?

Most of the people I have the pleasure to work with are developers, all great, intelligent people with passion for technology and IT. When I talk with them about their career and how they think they should evolve, a lot of them aspire to become an architect. Now the job title architect can mean a lot of different things, but that is not the topic I want to rant about today Smile

*** START RANT ***

I’m a little bit puzzled why a lot of developers think that becoming an architect is the logical way forward. Why you ask me? Let me explain…

Developers are creative people, great thinkers and problem solvers. They like to tackle complex problems, that’s what they live for. Once they are no more problems to solve, they start to get bored and start looking at new frameworks and tools just to have new problems to tackle. Developers LOVE complexity.

“Developers are attracted to complexity like moths to a flame”

As an architect it is quite the opposite. You are not aiming for sprints but want to do marathons. Every decision you take has an impact that can haunt you forever(until the next rewrite arrives Winking smile). Therefore as an architect you should be risk averse, better safe than sorry. Architects HATE complexity. It makes every solution unmaintainable in the long run. Simpler IS better…

As an architect you strive for a clean architecture with only an essential level of complexity and try to avoid accidental complexity at all cost. Developers are proud on the clever solutions they create(and they should be!) but as an architect simplicity will always win over cleverness in the long run.

This made me wonder if becoming an architect is such a logical stepping stone in the career of a developer. It’s a complete mindswitch which is not easy to take(ask me…).

*** END RANT ***

Food for thought… (Now I have to go, I have to create a Functional Reactive DDD CQRS Microservice DevOps architecture to get some data out of the database and show it on a website Punk)

Thursday, June 1, 2017

Angular - Host your Angular CLI app in a virtual directory in IIS

I’m a big fan of the Angular CLI, it makes working with Angular a lot easier and guarantees a level of consistenty between all team members. But I noticed that some people get into trouble the moment they try to host their application in IIS.

Most of the time you don’t host your Angular app directly under the Default Website, instead you add a virtual application and host your files in it.

image

image

Problem is that if you just do an ‘ng build’ and copy the dist folder to your target directory, it will probably not work. When you browse to the URI, you only get a ‘loading…’ message and nothing seems to happen.

image

Inside the console, you see that the Angular application tries to load all your bundles from ‘http://localhost’ instead of ‘http://localhost/sampleapp’:

image

To fix this you have to specify some extra parameters when building your Angular app for distribution:

ng build --deploy-url "/sampleapp" --base-href="/sampleapp"

That should do the trick…

Wednesday, May 31, 2017

The Module DLL C:\WINDOWS\system32\inetsrv\aspnetcore.dll failed to load. The data is the error.

After upgrading to the Anniversary Update of Windows 10, all applications on my local IIS no longer work and return a 503 error instead. When looking inside IIS I noticed that my Application pools were stopped but after restarting them, they stopped when the first new request arrives.

Inside the Windows Event Viewer I noticed the following error message:

The Module DLL C:\WINDOWS\system32\inetsrv\aspnetcore.dll failed to load.  The data is the error.

To fix it, I had to repair the installation of Microsoft .NET Core 1.0.1 – VS 2015 Tooling Preview 2:

  • Go to “Programs and Features”
  • Search for .NET Core

image

  • Select Microsoft .NET Core 1.0.1 – VS 2015 Tooling Preview 2 from the list
  • Click on Change and choose Repair

image

Tuesday, May 30, 2017

TFS–View Test Results for your Test Cases

I had a hard time yesterday finding out how I could see what Test Results are available for specific Test Cases.

In case I ever need it again(or someone else is as bad in finding it’s way through the TFS interface as me), here are the steps:

  • Open the TFS web portal and go to a specific Team Project.
  • Go to the Test Tab

image

  • Select a Test plan from the dropdown on the left and click on the Test suite that contains your test cases

image

  • On the right you see the list of available test cases

image

  • Click on the Show/Hide details button in the far right corner image
  • A detail pane is shown on the right

image

  • Click on the ‘Test case’ text next to the Pane and change it to ‘Test results’

image

Monday, May 29, 2017

TFS–How to see the executed commands and parameters

TFS keeps track of an activity log of all recent activities. This information is stored in 2 tables inside Tfs_Configuration and Tfs_collectionname called tbl_Command and tbl_Parameter. These tables keep a record of every single command that every single user has executed against TFS for the last 14 days(!).

So if you want to know which query is used to execute a specific action, it’s not that hard to find it through the Activity log.

image

If you don’t like to open SQL Server Management studio, you can also browse to the ‘hidden’ management pages at http://<tfsurl/_oi

image

Note: You can only access these pages when you do it directly from your TFS application server

When you click on the … next to the command you can see the related details

image

image

Friday, May 26, 2017

Using RyuJIT, the next generation JIT compiler for .NET

RyuJIT is the next generation Just-In-Time (JIT) compiler for .NET. It uses a high-performance JIT architecture, focused on high throughput JIT compilation. It is much faster than the existing JIT64 64-bit JIT that has been used for the last 10 years.  Before  the 32-bit JIT compiler was a lot faster than the 64-bit version making it sometimes better to compile and run your .NET application in 32-bit.

With the introduction of RyuJIT this gap is finally closed, making it easier to exclusively target 64-bit architectures or migrate workloads from 32- to 64-bit.

What should I do to enable RyuJIT?

The answer is simple; nothing Smile! If you have .NET Framework 4.6 installed, RyuJIT will be enabled for all 64-bit processes running on top of it. Your app will run in a 64-bit process if it is compiled as 64-bit or AnyCPU (although not as Prefer 32-bit), and run on a 64-bit operating system. RyuJIT is similarly integrated into .NET Core, as the 64-bit JIT.

If your servers are 64-bit(they probably are), and your applications are still using 32-bit, it’s time to do some benchmarking and maybe make the switch to 64-bit all the way!

Here is a link to the first time RuyJIT was announced almost 4 years ago: https://blogs.msdn.microsoft.com/dotnet/2013/09/30/ryujit-the-next-generation-jit-compiler-for-net/

Thursday, May 25, 2017

Essential Angular

2 of the core contributors of Angular Victor Savkin and Jeff Cross created a short but complete blog series about all aspects of the Angular framework. If you have never used Angular before or if you want to get a better understanding of how the framework is architected this is a great introduction.

Essential Angular

Here is the full list of posts:

Remark: You can also check out the Essential Angular book, which has some extra content not available in the blog series.

Wednesday, May 24, 2017

Greatness by David Marquet

My boss sent me a link to the following Youtube video:

I especially liked the following quote in the presentation:

“Take control and attract followers. Give control and create leaders”

Tuesday, May 23, 2017

The Microsoft Azure App

While getting up to date with all the great announcements at Build 2017 I noticed a small but interesting fact. It turns out that Microsoft has a mobile app (for iOS and Android) that allows you to manage Azure from your mobile device.

image image

From the documentation:

The Microsoft Azure app helps you keep track of your resources while on-the-go:
- Stay connected to the cloud and check status and critical metrics anytime, anywhere
- Stay informed with notifications and alerts about important health issues
- Stay in control of your resources and take corrective actions, like starting and stopping VMs and web apps

Great! Now can I spin up a new VM while being stuck in traffic Winking smile

Monday, May 22, 2017

TypeScript–Functional magic with discriminated unions and pattern matching

If you like the Functional style of programming, you will be happy to know that TypeScript supports discriminated unions. Instead of using inheritance and creating full blown classes, you can create a simple type that can be of different ‘subtypes’, e.g. a shape can either be a circle, rectangle or square:

This is already a lot less code then when using classes, but another advantage is you can now use pattern matching over this type. The TypeScript uses control flow based type analysis and can identify the different cases in the switch and provides the correct intellisense in each case:

image

Note that I’m using another nice trick to warn me if I missed a switch statement by adding an assertNever function that throws an exception if I forgot to implement one of the cases:

image

Here is the related code:

More information at https://www.typescriptlang.org/docs/handbook/advanced-types.html

Friday, May 19, 2017

VS Code–Angular Language Service

Yesterday while listening to the Adventures in Angular Podcast, I heard someone mention the Angular Language Service extension for VS Code.

From the documentation:

This extension provides a rich editing experience for Angular templates, both inline
and external templates including:

  • Completions lists
  • AOT Diagnostic messages
  • Quick info
  • Go to definition

demo

Thursday, May 18, 2017

Improve performance of your ASP.NET Core application

ASP.NET Core is running on Kestrel, ASP.NET Core’s internal web server. Although really fast Kestrel is not a full blown web server. The idea is that you put another web server(on Windows typically IIS) in front of it that acts as a proxy and forwards the requests to Kestrel.

To get this working in IIS, an AspNetCoreModule exists that achieves this goal. Here is the web.config that configures all of this:

If you look at the configuration, you see that by default all request(path="*" verb="*") are forwarded to Kestrel. This isn't ideal because Kestrel is a lot slower in handling static files than IIS.

A better solution is to only forward the requests that should be handled by ASP.NET Core(by example; path="api/*" verb="*") and let other requests be served by IIS.

The magic trick is to use IIS URL Rewrite rules to forward requests to the wwwroot folder of your ASP.NET Core app:

UPDATE: Rick Strahl did a more complete blog post where he took this approach a few steps further: https://weblog.west-wind.com/posts/2017/Apr/27/IIS-and-ASPNET-Core-Rewrite-Rules-for-AspNetCoreModule

Wednesday, May 17, 2017

Visual Studio Live! Videos

Over the years Visual Studio Live! delivered a lot of great content around the globe. On the Visual Studio Magazine blog, you find an overview of all keynotes. Certainly worth checking out…

One of my favorite sessions - Zero to DevOps with VSTS:

Tuesday, May 16, 2017

Visual Studio 2017–Convert to interpolated string refactoring

C# 6 introduces the concept of string interpolation allowing to use expressions inside your string literals providing a type safe alternative to string.format.

Last week I noticed a related refactoring option in VS 2017; when you have an existing string.format statement Visual Studio allows you to convert it to an interpolated string.

Nice!

clip_image002

Monday, May 15, 2017

No assembly found containing an OwinStartupAttribute

After switching to Visual Studio 2017, one of the projects we were working on started to fail with the following error message:

The following errors occurred while attempting to load the app.

- No assembly found containing an OwinStartupAttribute.

- No assembly found containing a Startup or [AssemblyName].Startup class.

To disable OWIN startup discovery, add the appSetting owin:AutomaticAppStartup with a value of "false" in your web.config.

To specify the OWIN startup Assembly, Class, or Method, add the appSetting owin:AppStartup with the fully qualified startup class or configuration method name in your web.config.

In our case we don’t need the OWIN startup detection, so we followed the suggestion as mentioned in the error message and updated our config to:

<appSettings>

       <add key="owin:AutomaticAppStartup" value="false" />

</appSettings>

Strange that we didn’t had this problem before VS 2017…

More information:

Friday, May 12, 2017

Take a look into what’s coming next on Azure–The Azure Preview portal

After the “classic” Azure Portal and the “current” Azure Portal, it’s time to introduce a 3th portal, the PREVIEW portal. The Preview Portal allows you to access Azure Portal features before they are released to the main Azure Portal. This enables a sort of “Insider Preview” for just the Azure Portal.

You can access the Azure “Preview” Portal by visiting http://preview.portal.azure.com

image

Thursday, May 11, 2017

ASP.NET core–Log errors to disk

Quick tip if your ASP.NET core application is crashing and you cannot figure out why.

Inside the web.config of the IIS hosting process, change the configuration. Set the sdtoutLogEnabled property to true and specify a location where to output the logs using the stdoutLogFile property.

<aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false"/>

Remark: I noticed that I had to create the logs folder first otherwise no files were written to this location…

Wednesday, May 10, 2017

Angular CLI–Documentation and Guidance

I’m a big fan of the Angular CLI, it made my life as an Angular developer a lot easier. It still has some rough edges but Angular was made to use with this kind of tooling.

One of the pieces that is still missing is good documentation. There is some guidance in the Angular documentation and some info on the GitHub website but I found the information to be incomplete(at the moment of writing) and had to fallback to StackOverflow for finding a lot of information.

Last week a colleague heard my complaints about the documentation and sent me a link to The Ultimate Angular CLI Reference Guide. Great tip!

Tuesday, May 9, 2017

.NET Application Architecture

If you want to get some insights on how to architect applications for the .NET stack , Microsoft created https://www.microsoft.com/net/architecture.

Practical advice, best practices, and sample applications for using .NET with microservices, Docker containers, Kubernetes, Xamarin, ASP.NET, Azure, Service Fabric, and more.

image

Monday, May 8, 2017

TFS 2017–How to unconfigure an existing build agent

I couldn’t find good documentation, so here are the steps I used:

  • Browse to the folder where your agent is installed

D:\Builds\Agents\Main1>

  • Execute the /unconfigure command:

D:\Builds\Agents\Main1>agent\vsoagent /unconfigure

Removing EventLog source vsoagent.tfs.Agent-TMD4.

Service vsoagent.tfs.Agent-TMD4 is being removed from the system...

Service vsoagent.tfs.Agent-TMD4 was successfully removed from the system.

Attempt to stop service vsoagent.tfs.Agent-TMD4.

Remark:

First time I tried this, I invoked the command directly from the agent subfolder:

D:\Builds\Agents\Main1\agent>vsoagent /unconfigure

However this failed with the following error message:

You cannot run the vsoAgent.exe interactively from within the Agent folder.

Friday, May 5, 2017

How can I view the used SSL certificate in Chrome?

As of Chrome 56, I noticed that it became a lot harder to inspect the SSL certificate used by a site. You can still access the SSL certificate settings in Windows by opening the Developer Tools (CTRL+SHIFT+i), go to "Security" tab and click the "View Certificate" button.

clip_image002

Thursday, May 4, 2017

TFS Build Agent doesn’t pick up all capabilities

Once a TFS build agent is configured on a build server it should scan the server for all capabilities and add them to a list. These capabilities can then be linked to demands to select an appropriate agent for your specific build script.

image

However at one client we noticed that the list of capabilities for all agents turned out rather empty whereas a lot of components were in fact installed on the server.

Inside the agent logs we found the following error message:

[2017-05-03 09:06:01Z INFO ProcessInvoker] Process started with process id 2828, waiting for process exit.

[2017-05-03 09:06:03Z INFO PowerShellCapabilitiesProvider] STDERR: . : File D:\Builds\dev-agent-3\bin\powershell\Add-Capabilities.ps1 cannot be loaded. The file D:\Builds\dev-agent-3\bin

[2017-05-03 09:06:03Z INFO PowerShellCapabilitiesProvider] STDERR: \powershell\Add-Capabilities.ps1 is not digitally signed. You cannot run this script on the current system. For more in

[2017-05-03 09:06:03Z INFO PowerShellCapabilitiesProvider] STDERR: formation about running scripts and setting execution policy, see about_Execution_Policies at http://go.microsoft.com/f

[2017-05-03 09:06:03Z INFO PowerShellCapabilitiesProvider] STDERR: wlink/?LinkID=135170.

[2017-05-03 09:06:03Z INFO PowerShellCapabilitiesProvider] STDERR: At line:1 char:3

[2017-05-03 09:06:03Z INFO PowerShellCapabilitiesProvider] STDERR: + . 'D:\Builds\dev-agent-3\bin\powershell\Add-Capabilities.ps1'

[2017-05-03 09:06:03Z INFO PowerShellCapabilitiesProvider] STDERR: +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

[2017-05-03 09:06:03Z INFO PowerShellCapabilitiesProvider] STDERR:     + CategoryInfo          : SecurityError: (:) [], PSSecurityException

[2017-05-03 09:06:03Z INFO PowerShellCapabilitiesProvider] STDERR:     + FullyQualifiedErrorId : UnauthorizedAccess

[2017-05-03 09:06:03Z INFO ProcessInvoker] Finished process with exit code 1, and elapsed time 00:00:01.2248303.

On this server a group policy is applied that prevents the execution of unsiged Powershell scripts. As the agent is using Powershell to scan a system for capabilities it failed silenty behind the scenes.

The solution was to ask the server team to sign all scripts for us.

Wednesday, May 3, 2017

Explaining LINQ visually

If you are not convinced in using LINQ yet, go have a look at Michael Sorens blog post. He nicely visualize the behavior of (almost) every LINQ operator and provides a set of characteristics of each LINQ operator explaining position, syntax,execution, laziness, complexity and any optional features.

A must read for every .NET developer!

image

image

Tuesday, May 2, 2017

MSTest–Setting the Culture of your tests

Last week after introducing localization into our application our builds started to fail. Inside the build log we saw that only tests related to localization were failing.

What happened? The problem was that the tests where expecting a specific culture to be set which was different on our local machines compared to the build server. So we needed a way to set the (UI)culture for our tests.

A solution that worked for us was to set the CultureInfo.DefaultThreadCurrentCulture and CultureInfo.DefaultThreadCurrentUICulture in the Assembly initializer of our tests:

 

Remark: Don’t forget to add the [TestClass] attribute on top of your class otherwise MSTest will not invoke the AssemblyInitialize method.

Monday, May 1, 2017

TFS 2017–How to uninstall the ElasticSearch service?

One of the new features of TFS 2017 is the introduction of a code search service. This service is built on top of a customized version of ElasticSearch and can be installed together with the rest of the product.

However the experience is still somewhat rough around the edges.

For example deleting the ElasticSearch service can’t be done through Add/Remove Programs or through an UI but you have to fallback to Powershell instead:

  • Open Powershell as an administrator
  • Go to the folder where ConfigureTFSSearch.ps1 is installed.
  • Run the script again with the remove option: "ConfigureTFSSearch.ps1 -RemoveTFSSearch"

In case you cannot find this Powershell commandlet an alternative option is to browse to the ElasticSearch bin directory and execute the following command:

  • service.bat remove

Friday, April 28, 2017

TF246017: Team Foundation Server could not connect to the database

A colleague forwarded me the following error message:

clip_image002

The problem occured when he tried to create a branch, but only on this specific project we had issues.

Time to log on the TFS server and check the Event Log. There I found the following error message:

DESCRIPTION: SQL Server Assertion: File: , line=951 Failed Assertion = 'IS_OFF (BUF_MINLOGGED, m_buf->bstat) || pageModifyType != PageModifyType_Contents || GetPagePtr ()->IsTextPage ()'. This error may be timing-related. If the error persists after rerunning the statement, use DBCC CHECKDB to check the database for structural integrity, or restart the server to ensure in-memory data structures are not corrupted.

This error message brought me to the following Connect ticket: https://connect.microsoft.com/SQLServer/feedback/details/3005568/sql-server-2016-merge-statement-fails-when-running-db-in-simple-recovery-model

I first tried to install all possible updates but no luck, the issue remained. Then I saw that in the ticket they mention switching to the Full recovery model. I tried that and it seemed to work.

Now

Thursday, April 27, 2017

Angular – Component Libraries

The new Angular(can’t call it Angular 2 anymore) ecosystem is still evolving. Control libraries start to appear.

Here are some of the libraries I had a look at:

(Don’t ask me which one I prefer, as with all control libraries they have their pros and cons you’ll have to learn to live with…)

Angular Material

Material Design components for Angular apps https://material.angular.io/

Remark: The Angular Material library for Angular >=2 is still rather limited. Don’t confuse it with the Angular 1 variant at https://material.angularjs.org/latest/.

image.

NG-Lightning

Native Angular components & directives for Lightning Design System http://ng-lightning.github.io/ng-lightning/#/

Created by the Salesforce’s guys on top of Angular and Salesforce's Lightning Design System.

image

TERADATA Covalent

Covalent(https://teradata.github.io/covalent/#/) is a UI Platform that combines proven design language with a comprehensive web framework, built on Angular & Angular-Material (Design).

image

PrimeNG

PrimeNG(https://www.primefaces.org/primeng/) is a collection of rich UI components for Angular 2. PrimeNG is a sibling of the popular JavaServer Faces Component Suite, PrimeFaces.

image

Kendo Angular UI

Professional Grade Angular UI Components http://www.telerik.com/kendo-angular-ui/

image

Wednesday, April 26, 2017

IT Manager, it’s a monkey job…

In my current job I’m active as a manager where I have a team of +20 people. My main focus is to guide these people through their career and help them grow into professional IT consultants. Sometimes I get completely overwhelmed by the questions, problems,little and bigger things, … that people keep asking me.

My manager(the manager’s manager Winking smile) noticed it and shared the following article from Harvard Business Review with me; Management time: Who’s got the monkey?. Although from 1974(!) still as relevant today…

image

Don’t forget the follow up article Making time for Gorillas(part of the same link).

Thanks Jörgen for the tip! And now I have to go as it is time to get the monkeys of my back…