I’m Eric Tummers, Software Architect at Statistics Netherlands, and this is how I work


My jobs description says Software Architect. I’m guiding my team through the technical hurdles and do some programming/testing/analysing myself. We follow the scrum guide and are working towards continuous integration and deployment. We do this in small steps. 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!
RasczakLocation: Sittard, NL
Current Gig: Devops Teamlead, CBS
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. I’m aware of the acquisition by Microsoft and the planned end-of-life.
Evernote: I’m a fan for years now.
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.
Alfred: keyboard shortcuts for everything. I bought the powerpack and advise you to do the same. Still on v2 though.

What’s your workspace setup like?

Work at the office is on a thin client with 24 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 is still my Macbook 15 inch. I’ve a new setup with logitech keyboard and mouse (MX800) and Benq 24 inch monitor (BL2420PT). Nothing fancy but the extra screen space is very welcome.

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 replaced my Magellan Echo with the Garmin FR235. It has smart watch features and a optical heart rate monitor. My phone is on mute since the Garmin notifies me of everything.
My Apple Airpods. Easy to use, small and good sound. Never leave the house without them.

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, although it is muted since I got the Garmin.

What are you currently reading?

The Hard Thing About Hard Things. It gives an insight into the problems a CEO has and how to overcome these. I enjoyed reading it on my last vacation and plan to read it again after I finish it.

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 tea 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.

DC Rainmaker (Ray) has been on my reading list for years. His reviews about sport gadgets is amazing. If you don’t know who this is I urge you to click the link. For the rest; you know why.

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

Working keyboard only

I’ve tried working keyboard only (no mouse) for two weeks and learned to live with shortcuts. Here are my tips-and-tricks.

my keyboard with shortcuts on Post-it notes

Just do it

Put your mouse out of reach. Disconnect it. Turn it off. Just do it.
You’ll feel helpless for a minute or two and then you start to learn how to do it.

Tools

My main computer is a MacBook. The tools listed below work on Apple machines.
Alfred helps me start my apps and automate a lot of steps. I added a script to connect to my AirPods with a command.
On my main monitor I remote desktop “full screen” into my work computer. With Amethyst I can switch the mouse focus between my two monitors. Only with the mouse focus on the right place I can use my keyboard for input …
Every application I use has different shortcuts. CheatSheet displays the shortcuts for the active app by long pressing ⌘

My company runs Windows machines. Sometimes Windows and MacOs have the same shortcuts. I run Autohotkey on Windows startup to blok Windows acting on ⌘+space (alfred) and ⌘+ctrl+c (Windows Color filter)

Other

I have an awesome Logitech K800 that has a dedicated key to toggle the mouse context menu. Sometime the context menu is easier than the shortcut.
Found this Post-it template so I can print my most used shortcuts on stickies.
I Learned that navigating a webpage is easiest when searching for the text of the link and than hist ESC to see the link being selected. Now I can open the link with ENTER.

Image courtesy of ratch0013 / FreeDigitalPhotos.net
My journey continues. I’am not 100% mouse free, more like 95%. To setup the tools (alfred and amethyst) the mouse is needed – only once. Some websites and apps only work with use of the mouse (you know who you are)

Posted in Uncategorized | Leave a comment

Upgraded Windows 7 to 10 on my MacBook Early 2009

I still have my Early 2009 MacBook for my kids. It runs El Capitan and Windows 7 (bootcamp). Since the support for Windows 7 ended on January 14 2020 an upgrade was needed. Unfortunately the bootcamp 3 that comes with El Capitan doesn’t support any version higher.


Image from The Verge

A quick search on internet learned that upgrading Windows 7 to Windows 10 was easy. Just download the Media Creation Tool and download the bootcamp 4 zip for the updated drivers.

After 3 hours my old MacBook was running Windows 10 with the correct drivers. In the references all downloads are linked. The youtube link makes it dummy proof.
Maybe upgrading to macOS Catalina next time …

References

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

Bogus – testdata generator


Photo by Steve Harvey on Unsplash

https://www.nuget.org/packages/bogus

Creating testdata is not my favourite task. With bogus I can define the rules the data must adhere and generate as much data as I need.

The rules are setup with fluent syntax and reminds me of AutoMapper configuration. When you set the Randomizer the data can be generated inside your testcode and produce the same ‘random’ set of data every time.

Bogus.Randomizer.Seed = new Random(12345678);
Posted in Development, Tooling | Tagged , , , | Leave a comment

EF core: entity cannot be tracked

We use EF core to store a bulk of data with an auto-number primary key. The auto-number is an Identity column in Sql Server. When inserting a large amount of records with related children we encounter this error:

System.InvalidOperationException entity cannot be tracked because another instance with the same key value is already being tracked

The github bug that described the same bug: Adding multiple new entities at the same time results in System.InvalidOperationException entity cannot be tracked because another instance with the same key value is already being tracked #13937 The same message, but explicit no use of identity. This got us thinking.

Digging a little deeper we discovered that the TemporaryIntValueGenerator used in EF core used int.minvalue + 1000. That is the first temporary Id used in EF core to track newly created records with an Identity column. Our exception occurs with a large amount of record, maybe 1000? Would the identity value generated in Sql already be used as a temporary value? The identity columns we use start at -2147483648 (int.minvalue) and increase by 1.

We implemented our own TemporaryNumberValueGenerator that start with 214748364 (int.maxvalue / 10) and use that in the OnModelCreating override:

protected override void OnModelCreating(ModelBuilder m) {
   base.OnModelCreating(m);
   m.Entity<MY_TYPE>()
    .Property(x => x.Id)
    .HasValueGenerator<TemporaryIntValueGeneratorMaxValue>();
}
Posted in Development, Tooling | Tagged , , , | Leave a comment

Computer setup COVID-19 update

I invested in a good computer setup for working-from-home a while ago. When the lockdown for COVID-19 came I was prepared. Still I made some changes and investments to go from one-day-a-week to fulltime working-from-home. Time for an update.


No cable management and I love it

The laptop

I’ve raised my laptop so I can see the slack updates next to my actual work. The clear pastic stand was from when I used only my laptop. After buying my 24 inch monitor it was stuffed away somewhere. Luckily I could still find it and raise my laptop to eye level.

Now that my laptop is always open (used it clamshell mode before) the webcam bothered me. I bought some webcam covers and installed them on all my laptops. Just for some ease of mind.

With everybody working/learning from home my wifi wasn’t stable enough for remote desktop. I bought the thunderbolt UTP adapter and use a wired connection now. Network connection and speed are stable now.

Extra

Slack, Skype and Zoom are the places we meet-up. For some privacy and better call quality I use the AirPods 2. Connecting to Apple devices is as easy as clicking a button. The wireless charging case is a nice feature too.

My logitech K800 keyboard and Performance MX mouse use the unifying receiver. Seemed to be vulnerable for hacking. Logitech released an update and installation was easy. https://support.logi.com/hc/articles/360035037273 (Firmware Update Tool)

Sometimes writing with pen on paper is needed. I have a stack of post-it notes next to my case with pens.

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

Logging from Automapper

We’ve been using automapper to convert objects for some time. Now I have the need for logging to help bugtracking. Below a short list of sources how we set this up.

services.AddSingleton<MapperConfiguration, 
                      AutomapperConfiguration>();
services.AddTransient(serviceprovider => {
   var cfg = serviceprovider.GetService<MapperConfiguration>();
   // inject the serviceprovider so everything is available
   // and the ILogger is too
   return cfg.CreateMapper(serviceprovider.GetService);
});
Func<ResolutionContext, ILogger> createLogger = (c) =>
   c.Mapper.ServiceCtor.Invoke(typeof(ILogger)) as ILogger;
 
config.CreateMap<ObjectA, ObjectB>()
      .ConvertUsing((s, d, c) => {
         // important stuff removed ....
         var logger = createLogger(c);
         logger.LogWarning("Something happend");
      };   

And now you’ll need a serviceprovider when unittesting. Thank you AutoMoqCore.

var automoqer = new AutoMoqer();
var configuration = automoqer.Create<AutomapperConfiguration>();
var mapper = configuration.CreateMapper(automoqer.Create);
// now test the mapping configuration with the mapper instance

We managed to find the bugs and fixed them. We’ll be using this logging solution with automapper from now on.

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

AutoMoqCore – auto mocking IoC

Photo by Phillip Glickman on Unsplash
Photo by Phillip Glickman on Unsplash

https://www.nuget.org/packages/AutoMoqCore/

Dependency Inversion is one of the SOLID principles. This can be applied to unittesting as well. With AutoMoqCore I can develop robust unittests that will always compile.

Focus on the smallest possible code for your unittest and let AutoMoqCore figure out the needed dependencies. Injection of mocks is automatically and can be tailored to your needs.

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