Thursday, June 25, 2015

Engineering Culture – The Spotify & OutSystems examples

The culture of an organization is a key stone to it's growth. In case of Engineering teams, the culture brutally affects productivity. Here's a good example by Spotify:



And here's another good example by OutSystems:


Monday, June 22, 2015

It's been 7 years!

Guess what: My first post on this blog was 7 years ago!

WhatsApp hadn't been released yet; Facebook's $104 billion IPO was yet to happen; Windows Vista was the latest Microsoft OS back then; iPhone was in it's 1st generation (original iPhone); Lehman Brothers was still "alive".

I'm still active around here after all this time. That's because one of the fundamental premises that led me to start the blog still remains valid: "Sharing knowledge is an invaluable characteristics of a professional."

Wednesday, June 17, 2015

5 Aspects of Emotional Intelligence

A couple a years ago, an IT professional was just someone who needed to have really good "Hard Skills". Nowadays, an IT professional is much more than that. Sure, there are still companies that don't mind the "geek in a box", just focused in a monitor without social life, with human aversion, but that's not the rule anymore. "Soft skills" are definitely crucial.

Here's a great article on emotional intelligence @ Inc. Magazine

Tuesday, June 16, 2015

Project Management Extreme Version

Is it really possible to plan everything...?

Plan everything in Project Management

Friday, June 5, 2015

MS caches query parameters in WebAPI 2.0

ASP.NET WebAPI extensibility is actually quite simple to implement thought the use of Filters and MessageHandlers. However, looking at the WebAPI HTTPMessage LifeCycle, you can see that only one filter occurs before ModelBinding:

ASP.NET WebAPI Page LifeCycle

(click to enlarge)


So, to do something like Form to URL Encoded (application/x-www-form-urlencoded) you either use the Authorization Filter or MessageHandlers. Taking this scenario, imagine you have a parameter in the body like:
Source = 'CA'

But, your Controller is expecting this parameter in the URL:

Parameter URL WebAPI

(click to enlarge)


To do this before the ModelBinding happens, you either do the trick and use the AuthorizationFilter or implement a MessageHandler. The first option is a kind of "Hack" since you're not actually doing authorization logic, but it works. In our scenario, we want to do something like this (ignore the "hammer code", it's the simplest to illustrate):

Change URI WebAPI Filter

(click to enlarge)


Now, there's an extra hack. Microsoft caches the Query parameters in a varsbag and uses those cached parameters in the ModelBinders (e.g.: my TimeBinder in the above example). So, altering any request URI won't have any effect until you clear the "cached params":

new StringContent

(click to enlarge)


After you do this, you can alter the RequestUri (although this is not a good practice). This only works on WebAPI 2.0. Here's more info: