Tuesday, May 31, 2016

Interactive Azure Platform overview

Azure, Microsofts Cloud Platform keeps growing and growing. A good tool to help you understand the available components and services is the interactive Azure Platform website; available at http://azureplatform.azurewebsites.net/en-us/.


From there you can easily click through to the actual documentation.

Monday, May 30, 2016

Angular 2.0(beta) - Invalid module name in augmentation, module '../../Observable' cannot be found.

When trying to use Angular 2.0 (beta) in Visual Studio 2015, the TypeScript compiler generated the following error message:

Error    TS2664    Invalid module name in augmentation, module '../../Observable' cannot be found.   

Here is the package.json I was using:

The problem seems to be related to the combination of the RxJs and Angular version I was using. To fix it, I had to change the RxJs version from

"rxjs": "5.0.0-beta.4"


"rxjs": "5.0.0-beta.2"

After NPM installed the correct packages, the TypeScript error disappeared.

Wednesday, May 18, 2016

VSTS–Live updates on Kanban board

Yesterday I discovered a nice new feature on the VSTS Kanban board, I noticed the addition of a new icon image


If you click on it, live updates of the board will be activated. Once enabled, everyone in your team, can observe changes made to the board immediatelly. So no need anymore to refresh the screen.

It’s great how I keep finding hidden gems that improve our workflow.

Tuesday, May 17, 2016

Using the Entity–Attribute–Value(EAV) model in NHibernate

Sometimes you receive a User Story/Requirement where users want to dynamically create and add custom columns to your application. One solution is to predefine a set of custom columns in your database like ExtraColumn1, ExtraColumn2,… but first of all this limits the user in the number of additional fields that can be added, but also doesn’t look very nice on your beautiful Entity Relation Diagram(ERD) Smile

A better solution can be found in the EAV model (Entity- Attribute- Value model), where you model part of your database to a flexible storage mechanism. Of course, if you are using a No-SQL solution this ain’t much of a problem, but with a relational database and an ORM tool like NHibernate you still have some work to do.

The simplest way is to take advantage of the dynamic-component feature of NHibernate:

Wednesday, May 11, 2016

Impress your colleagues with your knowledge about… HashSet

Sometimes when working with .NET you discover some hidden gems. Some of them very useful, other ones a little bit harder to find a good way to benefit from their functionality.

.NET offers a lot of collection types out-of-the-box. Most developers just use the List<T> without much thought. However there are a lot of (better?) alternatives available. One of the collection types that doesn’t receive a lot of love is the HashSet<T>.

What makes a HashSet<T> different from a regular List<T>?

HashSet is an unordered collection containing unique elements. It offers the standard collection operations Add, Remove, Contains, but since it uses a hash-based implementation, these operations has a cost of O(1). (Compare this to the List<T> for example, which has a cost of O(n) for Contains and Remove.) What this means it does not matter how many elements HashSet has it will take same amount of time to check if there's such element or not. HashSet also provides standard set operations such as union, intersection, and symmetric difference.

Most programming languages have their own (Hash)Set implementation. The HashSet class in C#  not preserves the order of elements. This makes it much faster than a regular List, but it doesn’t allow access by indices. To access elements you can either use an enumerator or use the built-in function to convert the HashSet into a List and iterate through that.

Here are some performance benchmarks: http://theburningmonk.com/2011/03/hashset-vs-list-vs-dictionary/

Tuesday, May 10, 2016

Xamarin Evolve 2016–Videos available

If you were one of the lucky guys/girls who attended Xamarin Evolve, you can ignore this post. For all other people, the videos from all sessions at Evolve are published yesterday.

So time to free some time in your agenda, close the curtains, get some good popcorn and start learning…!


Monday, May 9, 2016

Windows Identity Foundation: SSO issue when browsing from one subsite to another

Last week I had some fun investigating a WIF issue. A colleague came to me and explained the following situation:

I have 2 sites under the same domain each configured as a separate application in IIS with their own applicationpool. Site 1 is available at my.domain.name/Site1. The other site is available at my.domain.name/Portal/Site2. When I login to site 1 through ADFS everything is ok. Then I go to site 2 where I also login. When I then move back to Site 1, I get the following error message:

The input is not a valid Base-64 string as it contains a non-base 64 character, more than two padding characters, or an illegal character among the padding characters.


When I investigated the issue, I noticed that the “same” FedAuth cookie was issued twice, once scoped to my.domain.name/Site1, once scoped to the root domain my.domain.name. When browsing back to Site1, WIF get both cookies(as both apply to the target domain). However as both cookies are issued for different websites, combining them results in an invalid cookie, explaining the error message above.

To solve this we had to change the WIF configuration to scope the cookie correctly:

The original config:



      <cookieHandler requireSsl="true" />

      <wsFederation passiveRedirectEnabled="false" issuer="https://adfs2/adfs/ls/" realm="https://my.domain.name/site1/" requireHttps="true" />



The updated config:



      <cookieHandler path="/" requireSsl="true" />

      <wsFederation passiveRedirectEnabled="false" issuer="https://adfs2/adfs/ls/" realm="https://my.domain.name/site1/" requireHttps="true" />



After doing that, we got an other error instead:

ID4291: The security token ‘System.IdentityModel.Tokens.SessionSecurityToken’ is not scoped to the current endpoint.


This error is caused by the fact that both sites are using a different application pool.  To solve this second error, there are 2 possible solutions:

Solution 1

Run both sites using the same application pool.

Solution 2

Update your WIF configuration to use the MachineKeySessionSecurityTokenHandler instead of the default SessionSecurityTokenHandler:




     <remove type="System.IdentityModel.Tokens.SessionSecurityTokenHandler, System.IdentityModel, Version=, Culture=neutral, PublicKeyToken=b77a5c561934e089" />

      <add type="System.IdentityModel.Services.Tokens.MachineKeySessionSecurityTokenHandler, System.IdentityModel.Services, Version=, Culture=neutral, PublicKeyToken=b77a5c561934e089" />




Friday, May 6, 2016

ng-conf 2016

In case you missed it, at the moment of writing ng-conf 2016 is happening and after the first day of the conference they already shared a lot of great announcements about Angular 2.

One annoucement that I really liked was the announcement of a new Google Chrome Dev Tools extension, Angular Augory:

Wednesday, May 4, 2016

SQL Server Analysis Services–Last process time

Just a quick post so I don’t forget how to get the last time the cube was processed from SQL Server Analysis services.

Execute the following query from inside SQL Server Management Studio:

SELECT LAST_DATA_UPDATE FROM $system.mdschema_cubes

That’s it!

Tuesday, May 3, 2016

Team Foundation Server: Migrate the TFS warehouse to a different server

Moving the TFS warehouse to a different server is not that hard and can be done with a few steps:

  • Log in on the TFS server and open the TFS Administration console
  • Go to the Reporting tab


  • Click on Edit and click OK to stop all running jobs.
  • Change the server name and instance to your new SQL server on the Warehouse and Analysis Services tab


  • Click on Test Connection. It should succeed and display a message saying that the database does not exist but will be created.
  • Click on Start Jobs.

Monday, May 2, 2016

Team Foundation Server 2015–Create a new Team Project from the web interface

For a long time, the only way to create a new Team Project in TFS on premise was through Visual Studio. With the introduction of Visual Studio Team Services(VSTS), an option was added to create your Team Project directly from the web interface.

Unfortunately this feature was only available in the online version and I couldn’t find the same option on premise… or at least this was what I thought.

Recently I discovered the following option inside the web interface(look at the last option at the bottom):


Yes! The option is finally available. I have no clue when it was added, but I’m glad it’s there…

When you click on it, the New team project window is shown:


Note that you cannot create and configure Reporting Services and Sharepoint integration for your team project, if you decide to create your team project through the web interface.