Today I release a new version of my Checkouts Overview tool.

Version 1.1 is a feature release, improving the scanning of your hard disks searching for repository checkouts, and adding the ability to perform a git fetch while updating the entry status.

Some minor improvements to the UI also provide a more consistent look and feel.

Grab the release from Github: Release Feature Release v1.1 – Better Disk Scanning and Git Fetch · sgrottel/checkouts-overview (

Okey, a warning up ahead: this is a venting post, because I am really upset and disappointed by my most recent experience with customer service by Lenovo.

Over a year ago, I bought a ThinkPad laptop with matching docking station. And the two never worked perfectly. Sometimes the docking stations would lose the signal to the attached monitor. Sometimes it would not switch on during boot, etc. All issues which could be fixed by either un-plugging and re-plugging or, in worse cases, by turning it off and on again.

Now, recently the docking station learned a new trick: it’s ethernet port started failing. First, sometimes, and then consistently always. The supposedly good thing is, the failure is reflected in the Windows Device Manager by one USB device reporting a startup error, and that at some point, it failed always, 100%. That’s something a customer service should be able to understand and fix, right. In worst case, even when they cannot reproduce the issue, they could see the error descripting and just replace the ethernet component, right. So, I decided to give it a try.

First contact, several weeks ago, worked as expected. I was asked to replace cables, reinstall clean software etc. All understandable. A Lenovo provided cable might be incompatible, it’s better to switch to something from Amazon. And after a clean Windows 10 reinstallation on a formatted hard drive reports exactly the same USB device error in the Device Manager as before, you might start believing it might really be a hardware issue.

So, at that point, the customer service agreed on me sending in the device to a service center. To my very surprise, they asked me to send in the laptop. Only the laptop. Not the docking station. Strange, but ok. I was prepared for a “long journey” anyway. So, I send in the laptop, together with a detailed description of what’s going on, and of how to reproduce the error. That is error description number one. That is important for the conclusion.

After roughly a week the laptop returns to me with a repair report in the package. I really do not understand why Lenovo has a customer service website tracking their report tickets. They provide absolutely no information on that website other that the tracking numbers of the postal services they use. It’s useless. Anyway. The repair report stated that they replace the mainboard and the ethernet port of the laptop. Funny. I clearly stated that the ethernet port of my docking station is acting up. Well, whatever. Interestingly, however, the occasionally issue with the monitor not being detected have disappeared since then. So, I think, there was something wrong with the mainboard. Ok.

But the issue with the ethernet port of my docking station is still broken. 100% of all the time. So, I create a Lenovo Customer Service Escalation to the unresolved issue. Round two started with me providing a detailed error description of the issue and of the steps to reproduce it (basically: connect laptop, boot, see error! Minimal setup with Laptop + Dock + 3 cables: laptop-dock connection, power supply, ethernet). After some more “experimentation” with software, I finally get to send in my device to the service center, again. To my surprise, Lenovo asked me to send in both the laptop and the docking station, as it might be an issue of the combination of both. Strange, but whatever, ok. So, I send in both.

Then, after half a week, the useless report status website switches to the status “on hold.” At that point I was rather certain, that this would not end well. Then, almost a week after I sent in the devices I get an e-mail from customer service, telling me that they cannot reproduce my problem. I am very surprised. I can only imagine that they never turned on the laptop, but that they were only search of scratches of the housing. More importantly, however, they ask me to provide a detailed error description! Otherwise, they would send back my device. I mean, honestly, I already provided detailed error descriptions and step-by-step descriptions to reproduce the error. Twice. But ok!

At the same day, I write an answer to that e-mail, with, again, a detailed error description and a step-by-step description of the minimal setup to reproduce the error, remember: the two devices and three cables, and a new, clean Windows 10 installation with only all updates installed. Easy enough. It is worth noting, that I wrote those three different error descriptions all anew. It was not one text copy-pasted three time. It was three texts, all always in the context of the questions and requests from customer service, all detailed, all clear, all polite. … Three times!

Because the customer service gave me a deadline of two days to send in this information, I contacted them directly via the web live chat on the day after I received the e-mail and I sent in the information. There a friendly customer service agent, or really well-designed bot, confirmed that my e-mail was received and forwarded to the service center agent. Ok.

Then, almost a second week later, my devices were sent back to me, Laptop and docking station. And, the big surprise was the repair report included in the package this time:

They explicitly stated that they did not “repair” anything, because they never got the required information from me.

Three times!

And, by the way, the ethernet port of my docking station is still broken. 100% of the time. 100% reproducible. Always. With a defective USB device being reported in the Windows Device Manager. 100% of the time. Always.

Three times!

Greek Letters
If you ever see someone using a capital xi in an equation, just observe them quietly to learn as much as you can before they return to their home planet.

I like this one. From my experience I can tell you, at least half of those are true.

To all the scientists out there, I challenge you:

Write a real paper, a good paper, which will get accepted at a decent conference or journal, but _replace all greek letters, by Wingdings characters_!

I got a new tool in my tool box: KeePass HotKey is a wrapper utility to open a KeePass DB or trigger the Auto-Type Feature.

This utility is very specific to my use case:

  • I want to trigger one action from a dedicated hardware key on my keyboard
  • This action should either open a specific KeePass data base file, configured by the user, or
  • Trigger the “auto-type selected” feature of KeePass, if a KeePass instance is open, running, and has a selected entry.

You can find sourc code and released binaries at Github.

Hello everyone!

I am a bit late, but: Happy New Year!

And boy oh boy, this will be a year. I am so looking forward to what’s coming. Likely, the most important reason for me being happy at this moment is: I got a new job. Exactly with the new year, starting with January 1st:

I am now a Senior Software Developer at Microsoft’s Mixed Reality Team.

I am still in the middle of my on-boarding. This opportunity is great. I am grinning every morning when I switch on my workstation. And, until now, no day disappointed.

This will be a great year!

Today I present you the Checkouts Overview tool.

What? Why? Because this little tool helps me.

In my private setup, I have a lot of smaller repos checked out, and work on them only occasionally. In addition, I got several repos to collect the history of some text documents. Some of those repos are synced against servers which are only occasionally online, partially for power saving or partially due to VPN and network connectivity stuff. As a result, I often keep losing track of the sync states of all the different repos.

Is everything checked in? — most times, yes. If the change was complete.

Is everything pushed? — maybe.

Am I on branches? — no idea.

You might not need this app, if you have a better structured work process with your stuff than I do. I don’t, so I need help by a tool, by this tool.

If you are interested, you find more info in the app’s github repository.

Note: and as for the app’s icon, it’s about (repository) clones, right.

This is my second article in my series around application icons and logos. This time I want to write about colors and icon backgrounds.

Icon Color Design

Icon shape and color is most of the time defined by a corporate identity. There is then little room for creative freedom in the concrete implementation of an application icon. And, that is a good thing. Visual consistency and memorable colors and shapes are important for a brand identity to be burned into everyone’s memories. Think of the Golden Arches. I bet you can now almost taste the greasy fries.

So, designers working on an icon representation of a product or a company will, on the one hand, need to adhere to a lot of inflexible conditions dictated by the corporate identity, and, on the other hand, will try their best to create an icon usable in many situations.

I will use an older application Icon of FARO® SCENE as an example:

This icon nicely follows the design guidelines and provides a nice compact representation of the product. Some exemplary details:

  • The “S” is based on the full product title brand guideline,
  • The circular border is based on the FOCUS laser scanner brand guideline, and
  • The colors follow FAROs brand guideline of that time.

To account for some flexibility in usage the icon was designed for white (bright) background and dark (colored) background. Not an unusual approach. You can often find this approach if something is designed for digital media and print media.

And all is well, right…

Background and Shape

… More like “no”.

While the idea of having variants of an icon for different backgrounds is valid in general, it is not valid for application icons. An application is one executable binary file. With one representative icon embedded. In most scenarios, there is no way to select variants.

And, to make things worse, the icons will be used on all kinds of backgrounds. Think of a personal computer with a desktop background image chosen by the user. It can be anything in color! And as a result, the icon will need to be compatible with anything. The original FARO icon was not.

The only viable option out of this is to explicitly include a background color as part of the icon. The first versions of that icon did just set the background color.

This does work, to make the icon appear as designed. But it also completely disconnects the icon from the surrounding. The icon is not really part of the desktop or the start menu. It feels like a foreign object. Not nice.

The solution is not that hard to imagine: include the background in the icon. … Did you see what I did here? Do not just “include the background color”, do “include the background.” That is color and shape! Make a part of the background yours. An easy way to do this, is to use a background shield following the shape of the icon itself, often a circle, but sometimes a more complex shape.

The shape of the background, following the shape of the rest, becomes part of the icon. It’s no longer a disconnected image. And, if the desktop background color and the icon background color merge, then the backgrounds merge, and the icons exists as designed. No problem at all. Very good.

And, if you want to further strength the connection of the icon with the colorful background, think of using a little amount of transparency. Don’t go overboard with that. It is easy to create something which looks strange, imprecise, and ugly, with too much transparency. A little bit is all you need. This not-current version of the Steam icon is an example which does a great job on this.


For an application icon you cannot control the background color it will be placed on. You must be ready for every color.

To still be precise in your icon design, make a little bit of the background part of your icon. Not just the color, but the color and shape. Closely align the shape with your icon to create a consistent look.