Google Next 2018 Wrap Up

Google Next 2018 Wrap Up

A few weeks ago, I got the amazing opportunity to head over to San Francisco for the Google Next 2018 conference.

Over the past 7 years, I have attended many conferences such as Microsoft TechEd, Microsoft //BUILD, Amazon re:Invent and a few others; both in North America and here in Europe. This was my first big Google conference, and it won’t be my last.

To be honest, my first impression of Google Next (the judge the book by its cover review) was not so great. The Google Next mobile and web application were not so user friendly to plan your sessions, for example when clicking on a time slot where I had free time – you got around a hundred of sessions with no way to filter or sort on category or time slot and if you decided to click on one for more details and then went back to the list view… it didn’t remember where you where in the list. So, you had to scroll back to where you were. I eventually gave up on bookmarking/adding sessions to my schedule.

Another thing that scared me before the conference was the multiple locations the conference was being held at; this immediately brought back nightmares of spending 30-90 minutes of travelling between venues at Amazon re:Invent in Las Vegas and every other session was, as my colleagues called it, “the hallway session”, where you missed your session and sat in the hallway waiting for the next one. With Google Next, even with all of the construction that was ongoing around Moscone during the conference, this was not an issue at all. All locations were around 5-15 minute walk and the free time you have between sessions was more than enough, I even had some spare time to visit the many expo areas between sessions.

I flew in on Sunday afternoon from Copenhagen and joined a couple of my colleagues that arrived the day before for some dinner and drinks. One thing I learned about travelling overseas; the day you land is the most important to get your body in the new groove, you have to force yourself into the new timezone and drink lots of water! Pro-tip: Never trust a “quick nap”, it will mess up your entire week, get out of your hotel room and find something to do – worse case, just grab your laptop and chill in the hotel bar.

On Monday, I attended a full day boot-camp on Advanced Kubernetes. It was located in another hotel just a couple blocks from where I was staying and it was well planned out, the food was great, and content was extremely useful. The boot-camp itself was hosted by half a dozen Googlers who knew alot about Kubernetes. I will try to do this again next year if it is available and if there are topics relevant to my area. Pro-tip; if you attend a boot-camp before the event, you get your badge at the boot-camp for the rest of the conference and since you are doing it early, you get a “K” badge which means priority seating at the keynote.

On Tuesday morning, my colleagues and I met at a local diner for some breakfast and headed over to Moscone South for the keynote, there was a line-up to get into the building because of the security and metal detectors but it went surprisingly fast. Even though this was Google’s largest conference they ever hosted, they seemed to plan accordingly for the 23000 attendees. Since we had “K” badges, we past most of the lineups but I am sure some people were annoyed with the limited keynote seating.

After the keynote, we visited the Moscone South expo hall and walked over to Moscone West where the majority of sessions where being hosted. At 1:30 pm, I had my first of two Certification exams for the week; Cloud Engineer. I then went to a couple more sessions in the late afternoon. In the evening, my team met for beers before we went to an event.

Wednesday was much of the same, get up early for breakfast (we never ate at the conference but instead went to local restaurants), head over to the keynote and then attend sessions, private meetings or certification exams.

Thursday was, in my opinion, the best day – opening developer keynote was great, I never seen Mr. Hightower live before and I was not disappointed, even with his copy paste challenges in Stack Overflow, haha.

It was a great week all around and we made sure to attend a bunch of evening activities when we had the chance or when we received invites. Pro-tip; when visiting the expo hall, look for opportunities of networking and ask around about parties or where people are meeting up in the evening, these conferences are great for building your network.

Things I would like changed for the next Google Next:

  • For the opening day keynote, more seating should be available so everyone could attend live. Though I didn’t experience this, I am guessing that travelling to a conference and having to watch they keynote in an overflow room is quite annoying.
  • Make the mobile application more user friendly for planning the sessions

Things I will do differently for the next Google Next:

  • Book the hotel early and do not use the Google Next hotel finder – there are many great hotels available and at a much cheaper cost; we already booked our hotels for Google Next 2019 in April.
  • I will not book two exams back to back, it was intense.

How was your Google Next and what announcements were you excited most about?


WSUS Error: Unexpected Error

WSUS Error: Unexpected Error

In the organization I work for, we have roughly 130K Windows machines that are domain joined that are reporting into our WSUS implementation. We only use one WSUS cluster to manage all of them…. if you want to know more about how we set that up, please let me know in the comments!

Once we got the majority of clients/servers reporting in, we started seeing this error every time we tired to expand some of the computer groups.

Error: Unexpected Error
An unexpected error occurred. Please contact your system administrator if the problem persists. 

One of my admins, clicked on the Copy Error to Clipboard and sent it to me – there is usually a good start in trouble shooting in that error text, that is when I started hunting. The exact error was: (note: the non-ASCII character is changed to ‘[]’ below)

The WSUS administration console has encountered an unexpected error. This may be a transient error; try restarting the administration console. If this error persists, Try removing the persisted preferences for the console by deleting the wsus file under %appdata%\Microsoft\MMC\.
The WSUS administration console has encountered an unexpected error. This may be a transient error; try restarting the administration console. If this error persists,
Try removing the persisted preferences for the console by deleting the wsus file under %appdata%\Microsoft\MMC\.

System.Xml.XmlException -- '[]', hexadecimal value 0x16, is an invalid character. Line 1, position 11167920. Source System.Xml Stack Trace:
at System.Xml.XmlTextReaderImpl.Throw(String res, String[] args)
at System.Xml.XmlTextReaderImpl.ParseNumericCharRefInline(Int32 startPos, Boolean expand,
StringBuilder internalSubsetBuilder, Int32& charCount, EntityType& entityType)
at System.Xml.XmlTextReaderImpl.ParseCharRefInline(Int32 startPos, Int32& charCount,
EntityType& entityType)
at System.Xml.XmlTextReaderImpl.ParseText(Int32& startPos, Int32& endPos, Int32&

Okay, so they are apparently using a XML reader from the data they are getting back from the WSUS web services and he chokes to death on a non-ASCII character… cool (seems like that the WSUS database has great data quality checks in place there [sarcasm]).

So where is the data coming actually from?…. If you open up Wireshark and reproduce the error, it shows that there are two calls made when you try to expand a group in the WSUS console (one for the group, then another one for the computers in the selected group).

The web service seems to be calling a stored procedure in the database called [dbo].[spSearchComputers] which outputs an XML file… so I manually ran thís stored procedure (for all computer groups) and exported the file as one massive TXT file (which was 133389 lines).

So, I then searched in that text file for this little non-ASCII char – “[]”….  I found 3 results!

The issue for us was the Model column in the database. In the text file, I grabbed the ComputerID GUID for each of the 3 culprits and queried their data to get their TargetID’s since that is how the WSUS database seems to store Make/Model/BIOS, in a different table [dbo].[tbComputerTargetDetail].

I manually updated the ComputerModel column to ‘Unknown’ for the 3 culprits, then gave it a try in the WSUS console, worked like a charm!!

But, I knew this only fixes the issue until those 3 clients report in again and I assumed there was probably another stored procedure that is called for merging the computer detail table. After looking for a bit, I found a procedure called [dbo].[spRegisterComputer] that I am guessing is called when a computer reports it’s data. I ended up actually updating that stored procedure to include this:

DECLARE @newComputerModel nvarchar(64)
IF UNICODE(@ComputerModel) between 32 and 255
SET @newComputerModel = @ComputerModel;
SET @newComputerModel = 'Unknown';

That way, when the ComputerModel gets another non-ASCII character, it will write ‘Unknown’ instead of something that XML will not like.

The root cause of this issue is – that in our domain, there seems to be a couple machines with some “junk” written into the motherboard that is most likely picked up by WMI. Though I really think the WSUS database could do a better job of data quality.

Thanks for reading!


My favorite paragraph this year.

“In this age of infinite information and endless distraction, it’s easy to spend an entire day reacting and responding. Demands coming at you from others will always consume some portion of your day. Yet in most cases, what you will be most proud of a decade from now will not be anything that was a result of you simply responding.
What will matter in life is what you initiate today – striking up a conversation that leads to a new friendship, sharing an idea with someone at work turns into a new product or offering, or investing in another person’s growth and watching him/her succeed over the years. If you want to create a positive charge for others, your ability to do so will be almost directly proportional to the amount of time you can spend initiating instead of responding”

– Tom Rath “Are you Fully Charged?”

Choosing the best Azure Data Center

Speed is obviously the number one thing you should look at when deciding where to stick your Azure services/resources. The faster the speed, the better the performance. Want to know which data center has the lowest latency from you? (tested against blob storage) Check this out link –

However, please note that not all services are available in all Azure regions, this is actually one of the deciding factors of how we chose which Azure Data Center to be in.

For example, in Europe, features appear first in the West Europe (Netherlands) before North Europe (Ireland). So, if you want to be on the bleeding edge, this might be a deciding factor.

What to know what is available where? Check this out –

Hope this helps!!



How do you dynamically change the proxy configuration on Windows laptop computers depending on network, all using PowerShell?

Determining if an IP address is within a range is quite cumbersome when you think about it in terms of programming…

Here was the problem we had to solve while migrating from a proxy solution:
Today, all managed computers (100’000+) that we have in our domain are using a proxy to gain access to the outside, there are 5 proxy servers split out by region (As an example: Europe, North America, Australia, Singapore, and China). These proxy servers are configured on the clients using our home grown computer management system which is backboned by PowerShell… we specify a configuration value on the computer and the agent that is installed on the computer assigns the proper proxy server to Internet Options. However, starting now, we are in the middle of rolling out default routes at all sites and that project will take about many months to complete….

The problem:

We can dynamically change the configuration value of all computers at a site in our system to “Disable Proxy” and Windows would just use the default route… easy, right?

Well, what happens when we assign that new value to 20 mobile laptops at one site and then those users travel to a different site that does not have the same solution in place? (a specified proxy is required) Well, the internet would not work for that computer… obviously 

So, our problem was, how do we dynamically change the proxy configuration on laptop computers depending on if that computer was located as a legacy proxy site or default route site, all using PowerShell?

Before implementing what we did…. we investigated a lot of options (like .pac files) but we needed something dynamic that could be changed on the fly.
The first solution we played with was we ended up getting the IP address on a computer and checking if it was in range of a list of networks on a distributed file share (UNC), this worked but it was very slow and the project did not want to list each network on a text file because there are dozens of networks at one location and that list would become massive over time. Remember, we are talking about 500+ sites in 60+ countries… we had to think big.

So, the solution we implemented and we are using today is kind of just combining a bunch of stuff we already knew. Here are the steps:

  1. Laptop computers grab a list of networks from a DFS – I will talk about what this looks like and how it is setup below
  2. PowerShell checks if their current IP address is within any network on that list – we do a lot of checking like (is the computer on VPN?, is the computer on a local network (home)?, etc. etc.) – this all happens client side
  3. Depending on the flow, the PowerShell script modifies the proxy settings and refreshes Internet Settings to instantly update computer – this is done in the user’s context since proxy settings are in HKCU.

The list of networks is maintained by a network administrator (from the rollout project) in a DFS, the text file looks something like this: A LAN B Wireless

Then the admin double clicks on a RunMe.cmd file that just calls a PowerShell script in the same directory to create the actual file that the computer grabs, which contains:
167772160..167776255# A LAN
171709440..171709951# B Wireless
(the PowerShell script that creates the script also copies the previous file into a backup folder in case of rollback purposes)

The first part of each line is the IP address’ span in decimal format, separated by “..” so that PowerShell treats that as an array. The rest of each line is just information, like the entered network, the actual span and the comment. We transport this information to the local client for logging purposes like “proxy disabled because it is in span XXX called XXX”

When the logon script runs, it fetches the file (if newer than the one it might already have) and does a check, as an example:
If ((Convert-IPAddressToDecimal $ipAddress) -in 171709440..171709951)
         #Do things

If you think of another solution, I would love to hear it…. Or if you want me to go into details or need the functions to convert IP Address’ let me know as well.


Unleash yourself from that email

During the last six weeks I have been playing with an “auto reply” message that everyone receives when they send me an email. I did this for numerous reasons but the couple main points were:

  • I am no longer tied to email and I can close Outlook when I am working on something and…
  • That people now expect to have a rough idea when I would get back to them, if they didn’t like that… they just need to call me.

After having this message active for the last month and a half, I have received emails from six people asking me if this was something they could copy for their personal work emails, I of course had no problem with it.

The message goes something like this:



In an effort to increase productivity and efficiency I am beginning a new personal email policy.

I’ve recently realized that I spend more time shuffling through my inbox and less time focused on the task at hand. It has become an unnecessary distraction that ultimately creates longer lead times on my ever-growing ‘to do’ list.

Going forward I will only be checking/responding to email in the morning at 08:00 CET and after lunch at 13:00 CET on business days. I will try and respond to email in a timely manner.

If you need an immediate time-sensitive response… please don’t hesitate to call me. Phones are always more fun anyways.

Hopefully this new approach to email management will result in shorter lead times with more focused & creative work on my part.

Cheers & here’s to life outside of my inbox!

Best regards,



I do realize this is not possible for everyone, like my wife who seems to be in meetings from 08:00 – 17:00 and has to do email whenever there is chance. If you are hired to just answer email… then obliviously this not for you. I highly recommend giving it a try!

I have to give a huge thank you to Timothy Ferriss for releasing the book called “The 4-Hour Workweek”, this is where the idea has come from. I will continue to leave the message on.


Visual Studio 2013 Cool Features!


At work today we updated all development machines that myself and colleague use to Visual Studio 2013 (not really update but we installed it along side 2010). I must say, I was a huge skeptic of the new IDE but after using it for 8 hours today… I am a huge believer!

Why? Here are four features that I love:

1. User settings are now synced with your account you use with VS2013… this will save me a huge amounts of time. Why? Well my department is also in charge of evaluating, testing and preparing new models of computers in the environment and every year it seems someone comes to me and hands me a laptop and says “use this now”… I comply and roll my eyes knowing that I will spend the next business day setting it up to be perfect (I like everything to be in a particular way). Now… I will install VS2013 through a deployment machine (automated), I will fire it up and log on with my live account and boom…. all settings are synced. No more turning on line numbers or changing the VS theme to blue. Its all done for me   🙂

2. Code Peeking, at first I didn’t know about this one, but in the afternoon I was in a WebEx meeting with our Microsoft go to person and I was running through the code for Hyper-V 2012 R2 integration and was clicking on methods and hitting F12 to jump to it, like any programmer would do. All I heard on the phone was “No, no, no… Alt+F12 Matt!”… my mind was blown. It showed me the code while still being on the same page!

Code Peeking, awesome!!
Code Peeking, awesome!!

3. Not really a VS2013 feature but one of my favorites that came along, 64 bit Edit and Continue – If you are starting any new projects of have the possibility to convert an existing one to .NET Framework 4.5.1, I highly suggest you do so for the sole reason of debugging on the fly. Just like the 32 bit .NET applications, you can now debug the application and make changes while still debugging… no more error messages!!


4. Code Map (this is only available in Visual Studio 2013 Ultimate), you ever wonder what code is talking to or linked together? Now you can right click and choose “Show on Code Map” and boom… A graph appears showing this exact information. I believe this was introduced in VS2012 but I never used that version (it was the Vista of Visual Studio, haha).

One word of warning though, do not go deleting or commenting out code just because it is not linked to something else. For example, WPF data binding does not show on Code Map… investigate the same way you would before before doing something stupid  🙂





Windows 8.1 “Sorry, there was a problem mounting the file” ISO issue

Quite recently, I installed the Windows 8.1 RTM version on my home PC for testing purposes which came along with my MSDN account. I must say, I am really liking the changes that Microsoft has implemented to the new operating system… from the start button making a return to the start screen changes (tile sizes, personalizing colors and themes, application docking, etc.). However, I have had a few problems that a little <insert your favorite search engine> + “ing” and sysinternal tools took care of in solving… one – being not able to mount any ISO files.

After receiving the error message:



I started to think I either had a driver problem or something was corrupt… I re-downloaded the ISO file and gave it a try again… same problem. Then tried another ISO from Microsoft, same issue.

Then Mark Russinovich spoke to me like god himself – “Remember what I taught you at TechEd!?”…. Yeah, yeah Mark… I got it. Started up sysinternal tool ProcMon  and saw what was going  on… seemed my system had some registry problems with the driver…. weird?

Instead of just mucking around in the registry (if you do decide to do that, please export the registry first!!), I did more research and viola!, after some trail and error, I found this post Anyway, follow these steps:

* I am not responsible for you messing up your computer, proceed with caution *

  1. Press the Windows logo key+R to open the Run dialog box.
  2. Type regedit in the Run dialog box, then press Enter. If you are prompted for an administrator password or for a confirmation, type the password, or click Allow
  3. In the navigation pane, locate and then click the following registry subkey:
  4. In the right pane, click UpperFilters.
    Note You may also see an UpperFilters.bak registry entry. You do not have to remove that entry. Click UpperFilters only. If you do not see the UpperFilters registry entry, you still might have to remove the LowerFilters registry entry. To do this, go to step 7.
  5. On the Edit menu, click Delete.
  6. When you are prompted to confirm the deletion, click Yes.
  7. In the right pane, click LowerFilters.
    Note If you do not see the LowerFilters registry entry, go to Method 4.
  8. On the Edit menu, click Delete.
  9. When you are prompted to confirm the deletion, click Yes.
  10. Exit Registry Editor.
  11. Restart the computer.

Anyway, hopefully this helps people if they run into the same issue!