I’m Eric Tummers, Technical Consultant at Valid, and this is how I work

hulk_behind_me
I’m hired as a Software Architect to build a solution with Microsoft products. Our team works by the scrum guide and is moving towards continuous deployment. We are learning and growing while delivering business value. This is hard work. Every sprint we complete means the retrospective is done in the pub.

I expect the best and I give the best. Here’s the beer. Here’s the entertainment. Now have fun. That’s an order!
Rasczak

Location: Sittard, NL
Current Gig: Technical Consultant, Valid
Word that best describes how you work: Teamwork
Current mobile device: iPhone se
Current computer: MacBook 15 inch

What apps/software/tools can’t you live without? Why?

Wunderlist: work tasks, chores, groceries, planning, every task is there.
Evernote: I’m a fan for years now. Not to happy about the recent update but time will improve this.
iSmoothrun: when I’m not working, I’m running, this app tracks just about every metric I can think of and shares it to all the platforms (runkeeper for one)
Parallels 11: Running Windows on my MacBook is a must. And of course visual studio, team foundation server, build, release manager, sql server management studio, remote desktop, powershell, and some other tools I need for work.

What’s your workspace setup like?

Work at the office is on a thin client with 21 inch screen and (wired) mouse and keyboard. The desk and chair comply with all regulations. We have a great coffee machine.

dekstop_2017

My home workspace has moved to the kitchen table with my Macbook 15 inch. No externals and enough battery for the whole day. Freedom!

What’s your best time-saving shortcut/life hack?

Timebox. Start on a task and spent the time you’ve got to get the best result. Get someone to look at it, get feedback. Then decide if the result is final or to spent some more time.

Besides your phone and computer, what gadget can’t you live without and why?

I’ve been running with my Magellan Echo for some time. It is a sports watch that hooks up to my phone by bluetooth to start / stop my runs, control the music and see the metrics right on my wrist. It is powered by a battery that lasts 6 months and is easy to replace.
My Apple TV2 (jailbroken) hooked up to my NAS for movies and series. Also hooked to my stereo for music streaming. Awesome device!

What everyday thing are you better at than everyone else? What’s your secret?

Learning new things. My current project lets me implement new things (joy) Also I try to learn the things I know to my team or anyone who listens.
I have a basic understanding of how things work and try to map new things on there. For the details I have a Pluralsight subscription and black belt google skills.

What do you listen to while you work?

My alarm clock plays classical music to wake me up in the morning. The car stereo plays about everything (grunge, rock, kids stories) driving to work. When I need some focus I play drum and bass on my headphones. My ringtone is still Run riot by Camo & Krooked.

What are you currently reading?

Tools of Titans by Tim Ferriss. A Christmas gift. Best described as a book of “How I Work” posts full with tips and tricks of the titans (experts)

tools-of-titans

How do you recharge? What do you do when you want to forget about work?

Spending quality time with my wife and daughters. Phone on silent, no screens, no work. Mostly piggyback riding and thee parties
Also sports like running, fitness, climbing and snowboarding to keep me fit and healthy.

Fill in the blank: I’d love to see _________ answer these same questions.

Iris Classon, because she had to start from zero with her career shift and is now a Microsoft MVP (Most Valuable Professional).

What’s the best advice you’ve ever received?

someecards.com - Make a shit first draft you cannot edit a blank page
I believe this is a variant on a Hemingway quote.

Is there anything else you’d like to add that might be interesting to readers?

Learn Powershell. There is so much possible with Powershell. If you can learn one thing this year pick Powershell. 

Original idea from Lifehacker.com.

Posted in Uncategorized | Tagged , , , , , | Leave a comment

Elasticsearch

Elasticsearch is a distributed, RESTful search and analytics engine capable of solving a growing number of use cases. As the heart of the Elastic Stack, it centrally stores your data so you can discover the expected and uncover the unexpected.
https://www.elastic.co/products/elasticsearch

marten-newhall-226045-unsplash

We are building a system to search for information. Searching (and finding) is what Elasticsearch is made for. It uses apache lucene to store and index documents and runs on java.

The same metadata we put into Neo4J we want to find with Elasticsearch. The heavy lifting of syncing the data is done by the neo4j-to-elasticsearch plugin.

So far we’ve learned that controlling the number of shards in DEV and TEST is a must to get predictable search results. This is caused by the limited amount of documents (only one million) in these environments. Read more

Want to start searching too? Here are some links:

SaveSave

Posted in Tooling | Tagged , | Leave a comment

Neo4j

I am added to a team that is using Neo4j as a datastore. After my last Neo4j experience I had to dust of my skills 🙄 I still don’t think in graphs but am getting there.

monkey string

We store metadata about datasets in a graph. Using some smart logic we try to couple different datasets. For this we needed special functions like shortest path between nodes. Neo4j is great at these.

Neo4j is developed in Java and offers extensibility trough plugins. One of the plugins we plan to use is the UUID, unmutable unique identifier. This adds a solution for the evil ID used by Neo4j.

Looking forward to learning more about graphdatabases? Here are the resources I used:

Posted in Tooling | Tagged , | Leave a comment

Colouring with Google and Bing

We all know google is the synonym to searching (and finding) stuff on the internet. Microsoft has bing for this. Both platforms offer custom searching as an API. So developers can take advantage of the massive resources both companies have and build that into their next awesome new product.

My kids use google to search for images they can print and colour. They just want to search, print and colour. A simple workflow that can be automated using the custom search API.

Print

One of the features is the full page printing of the image. Sometimes the image fills up multiple pages or just a small portion when printed. Using google I found some samples to scale and print an image.

Google vs Bing

Comparing the search API provided by Google and Bing they are very similar. I created the Colouring app with both API’s and my kids were happy with the results from both platforms. Happy customers 😉

Google Cloud platform Bing
Documentation CSE:list Bing Images Search
Pricing €5.00 per 1000 calls €3.37 per 1000 calls (S3)
Free? 100 calls per day 30 days
Other Max results is 10 Max results is 150

As you can see the free option is only available on google. So I went that way first. After hitting the 100 calls limit on google I migrated to the Bing Api with a trial license. Nobody noticed the change since the customer is not interested in the technical details, but in the finished product.

Colouring Surfer

References

Posted in Development | Tagged , , , , , , , | Leave a comment

Setup Boot Camp with hyper-V support

For development I’m using Windows in a Parallels VM on my MacBook Pro. To use docker on Windows I need to enable Hyper-V.

Parallels has an option called “nested virtualisation” where the guest OS can do virtualisation. For this you’ll need a Pro subscription, which I don’t have. This means I cannot use nested virtualisation.


My only option is setting up Boot Camp and boot native into Windows. My hurdles steps are listed below.

Disk space

The first step in the Boot Camp Assistant is setting up the Boot Camp partition. I want to assign 80Gb since I’m installing Windows, Visual Studio, Docker and some other development stuff. My disk reports 105Gb of free space so that’s okay .. not ..

The assistant lets me assign max 48 Gb. What is going on? Seems that local time machine backups secretly eat into your available disk space. Luckily there is a way of removing these hidden files. The assistant now lets me create the partition of 80Gb.

Remove partition

The ISO file I downloaded from the msdn subscriptions page was incompatible and resulted in an error. Looks like only the commercial version of the ISO is supported. Now I have a corrupted Boot Camp partition. To remove these I used Disk Util as described here.


After downloading the supported ISO file and rebooting (have you tried turning it off and on again) the Boot Camp assistant did the job.

Installation

After a reboot I was presented the Windows 10 installation setup. Boot Camp installed the drivers after the first login. Another reboot and Visual Studio, Docker, … all installed without issues. Happy developer 😉

Cold boot

The next day I started my MacBook into Windows and docker crashed…
The logfile presented me with this:

Virtual machine ‘MobyLinuxVM’ could not be started because the hypervisor is not running (Virtual machine ID ~some GUID~).
The following actions may help you resolve the problem:
1) Verify that the processor of the physical computer has a supported version of hardware-assisted virtualization.
2) Verify that hardware-assisted virtualization and hardware-assisted data execution protection are enabled in the BIOS of the physical computer. (If you edit the BIOS to enable either setting, you must turn off the power to the physical computer and then turn it back on. Resetting the physical computer is not sufficient.)
3) If you have made changes to the Boot Configuration Data store, review these changes to ensure that the hypervisor is configured to launch automatically.

Google suggested to run this command to check if Hypervisor was activated/present. The answer was False.

(gcim Win32_ComputerSystem).HypervisorPresent

There seems to be a virtualisation bug that disables hyper-v on a cold boot. For now I’ll be booting into macOS and then booting into Windows. The command above will return True this way and everything works.

Aftermath

The option of running Windows in Parallels still interested me. By installing a trial version of Parallels Desktop I was able to start the Boot Camp Windows installation from within macOS. In the trial version all options are available, so I used the nested virtualisation option. The machine creation took some time while installing the Parallels Tools. But right after the startup (again) docker crashed.

Docker also crashed when native booted into Windows. This was resolved after uninstallation of the Parallels Tools. No Parallels for now.

Posted in Development, Tooling | Tagged , , , , , | Leave a comment

A first look at IntelliTest

Looking into Visual Studio 2017 features I found that Pex was back in the form of IntelliTest. It was actually introduced in VS2015 but I’ve never seen it. Time to give it a spin.

For this I use my Traffic Demo. The solution shows how a state pattern can be used to implement complex business rules. There are already unit tests because it is a test driven development demo. I will add extra unit tests with the IntelliTest feature.

Open the solution in Visual Studio and go to the method to IntelliTest. Then open the context menu and IntelliTest > Create IntelliTest. A dialog will ask for some naming convention.

intellitest_01

After completion there is a generated partial class that contains code to test the method selected. Some lines of comment suggest to add an Assert. I add the Assert that confirms a property is set during the action on the state.

[PexMethod]
public void VooruitIntelliTest([PexAssumeUnderTest]Auto target)
{
    target.Vooruit(); // English: drive
    // TODO: add assertions to method AutoIntelliTest.VooruitIntelliTest(Auto)
    Assert.IsInstanceOfType(target.Verplaatsing, typeof(NaarVoren));
}

Now run the IntelliTests by going into the context menu and IntelliTest > Run IntelliTest. The result is shown in the IntelliTest Exploration Results. Open the warnings and see the Object creation warning. This is because there is no way for IntelliTest to vary between different states. Context menu on the warning and click Fix.

intellitest_02

This will create a simple factory class that can be altered to allow variation between different states. Do this by adding parameters to the static Create method.

[PexFactoryMethod(typeof(Auto))]
public static Auto Create(Verplaatsing verplaatsing, string bestuurder)
{
    Auto auto = new Auto // English: car
    {
        Verplaatsing = verplaatsing, // English: direction
        Bestuurder = bestuurder // English: driver
    };
    return auto;
}

Now run the IntelliTests again. This time some exceptions are reported.
The first is the NullReferenceException, caused by passing null for the first parameter to the Create method above. We need to tell IntelliTest to not pass null. For this the PexAssumeNotNull attribute is available which I add to the first parameter.

[PexFactoryMethod(typeof(Auto))]
public static Auto Create(
     [PexAssumeNotNull]Verplaatsing verplaatsing,
     string bestuurder)
{
    // rest of factory method
}

The other exception is a exception thrown by my code because a businessrule is violated. In English the businessrule is: in case the car is driving backwards and you put it in drive an accident (ongeluk) is thrown. Again with an attribute this can be told to IntelliTest: PexAllowedExceptionFromType.

[PexMethod]
[PexAllowedExceptionFromType(typeof(Ongeluk), typeof(NaarAchteren))]
public void VooruitIntelliTest([PexAssumeUnderTest]Auto target)
{
    // rest of intellitest
}

This adds the ExpectedException attribute on the generated unit test in case the exception of type Ongeluk is thrown from the type NaarAchteren (English: Reverse) You can see this in the generated g.cs file.

// part of AutoIntelliTest.VooruitIntelliTest.g.cs
[TestMethod]
[PexGeneratedBy(typeof(AutoIntelliTest))]
[ExpectedException(typeof(Ongeluk))]
public void VooruitIntelliTestThrowsOngeluk41()
{
    Auto auto;
    NaarAchteren s0 = new NaarAchteren();
    auto = AutoFactory.Create((Verplaatsing)s0, (string)null);
    this.VooruitIntelliTest(auto);
}

Now compile the intellitest project and run the tests from Test Explorer with code coverage enabled. Code coverage is 100%. Good job!

intellitest_03

Code available on github.

Final thoughts

I prefer test driven development and create the unit test first. This method of generating unit tests feels like cheating. On the other hand it creates some extra tests to up the code coverage and discovery of edge cases. Use it wise grasshopper.

Posted in Test | Tagged , , , | Leave a comment

Internet services that have a great free option

Image courtesy of ratch0013 / FreeDigitalPhotos.net

The internet has a lot of services. Most of them have a free or try-for-a-period option. After trying a service I decide about the paid options stay on the free tier or discard it. Below is a list of services I use with the free tier. Some are already featured in my Dev Tool List.

Image courtesy of ratch0013 / FreeDigitalPhotos.net

  • bit.ly, shorten urls and customised urls for better sharing on slides all with stats.
  • Dropbox, the file sync platform, use it primarily for sharing documents between devices.
  • Freshdesk, self service and ticketing system for small projects.
  • Github, personal projects, demo projects, all public. Private stuff is for work.
  • Namecheap, the freedns service is free and provides the dns for my domain.
  • Opendns, monitor the internet usage for my home network.
  • Pocket, save links for later viewing on my iPad or in my browser.
  • Rescuetime, log the time I use my computer for optimisation of screen time, am I being productive?
  • Spotify, listen to new music with occasional adds.
  • Uptimerobot, 3rd party logging of website availability, keep azure free tier websites loaded by sending requests 😉
  • Wunderlist, my shopping list, my work todo, my maintenance jobs, my chores, all there.

These are the services I use. Am I missing out on something great? Let met know in the comments.

Posted in Tooling | Tagged , , , , , , , , , | Leave a comment

Services I pay for and why

The internet has a lot of services. Most of them have a free or try-for-a-period option. After trying a service I decide about the paid options, stay on the free tier or discard it. Below is a list of services I pay for and why I think they are worth the money.

Evernote Premium

evernoteWith Evernote I have all my information in one place and am able to find what I need. The app is cross platform and I use it on my laptop (Win/Mac), iPhone and iPad. I’m have a premium subscription because I use the annotation and presentation features.
Alternative: Evernote free

 

iCloud

icon_hero_icloud_largeWe use iCloud storage for pictures, mail and device backups. It integrates seamless with Photos on MacOS and iOS. I’m stil backing up the original pictures on my NAS just in case.
Alternative: 5Gb storage free with iDevice registration

 

iTunes Match

apple-itunes-match-and-icloud-logo-1107Yes, I’m stil using iTunes Match. The price of Apple Music (that has the same features) is so much higher that we’ll not be moving until Apple discontinues iTunes Match.
We have invested in the Apple ecosystem and play music from Apple TV, MacBook (2x), iPad (2x) and iPhone.
Alternative: iTunes server on NAS

 

Wired Magazine digital

wiredThe digital edition has extra media content since it has an internet connection and the printed magazine has not 😉 Got to love the “angry nerd”.

 

GoDaddy .NL domain

godaddy-schema-logo-minEveryone should have their own domain. I have it set up to forward requests to other locations through a free dns service. This way I can give out my own domain in slides and know people end up here.

 

WordPress Personal

wordpress-logoEver noticed there are no adds here? You’re welcome.
This also includes the custom .com domain and extra storage.

 

Pluralsight

pluralsight-logo-vrt-color-2To be honest: my boss pays for this subscription. With Pluralsight I’m able to get up to speed really quick. I have the app on my iPad and iPhone but I mostly use it on my laptop.
TIP: signup here and we both get a discount.

 

These are the services I use. Am I missing out on something great? Let met know in the comments.
Posted in Tooling | Tagged , , , , | Leave a comment