Vielleicht habt Ihr bemerkt, dass die Shields.io-Badges für die Nuget-Pakete, die ich betreue, seit einigen Tagen verschwunden sind und jetzt durch eine einfache Tabelle ersetzt wurden. Was ist passiert?

Nun eine Entscheidung eines deutschen Gerichts is passiert, dass die Verwendung von Google Fonts von deren CDN-Server, der in den USA gehostet wird, eine Verletzung der Privatsphäre darstellen kann, wenn sie ohne die Zustimmung der Nutzer verwendet wird. Scheinbar sind auch schon einige räuberische Anwälte bereits auf der Jagd. Daher habe ich alle meine Websites so umgestellt, dass die von mir verwendeten Schriftarten auf denselben Servern gehostet werden. Auch wenn ich mich über den zusätzlichen Aufwand geärgert habe, verstehe ich die Wichtigkeit des Datenschutzes und kann die Entscheidung in diesem Sinne nachvollziehen. Soviel zu den Google Fonts. Was ist mit dem Rest?

Ich wollte meine Website so zu ändern, dass entweder alles selbst gehostet wird oder dass ich für alle eingebetteten Inhalte explizit Inhalte anfordere. Aus diesem Grund wird Shields.io nicht mehr direkt auf meiner Website verwendet. Das mag übertrieben wirken, aber ich denke es hilft auch für die „Stabilität“ des Inhalts. Jetzt holt sich mein Backend alle Daten, die ich brauche, speichert sie auf meinem eigenen Server und liefert sie als lokalen Teil meiner Website aus. In diesem Fall habe ich das Abrufen der Daten sogar auf einen Cron-Job umgestellt, der einmal pro Tag läuft. Ich bin sowieso nicht so schnell mit Nuget-Paketen.

Damit werden nun alle Inhalte, die auf sgrottel.de angezeigt werden, von den Servern ausgeliefert, auf denen sgrottel.de gehostet wird.

Der Nachteil ist natürlich, dass dies einen zusätzlichen Wartungsaufwand für mich bedeutet. Das Backend ruft halbdokumentierte APIs auf, die sich jederzeit ändern können, und es führt einige fragile Parsing-Vorgänge durch, z.B. im Falle der nicht so gut strukturierten Lua-Projekt-Website. Die derzeitige Lösung kann keine endgültige Lösung sein, und wird in Zukunft verbessert werden müssen. Wir werden sehen.

Ich stelle vor, ein neues kleines Tool für einen sehr spezifischen Zweck: OpenHere

Es findet laufende Instanzen des Windows Datei-Explorers. Von der obersten Instanz holt es sich den geöffneten Pfad und alle ausgewählten Dateien. Per Befehlszeilenanwendung können diese Informationen abgerufen werden. Oder die GUI-Anwendung erlaubt in einem Fenster eines von bis zu zwölf konfigurierten Programmen auszuwählen und zu öffnen.

Meine Tastatur hat mehrere frei belegbare Makrotasten, die ich jahrelang nicht benutzt habe. Ganz einfach, weil ich keine Ahnung hatte, was ich mit ihnen anfangen sollte. Dann kam Windows 11. Eine der vielleicht am meisten kritisierten Funktionen ist das neue Kontextmenü im Dateiexplorer, in dem die meisten Funktionen versteckt sind, die man für Dateien und Ordner aufrufen kann oder eben auch nicht. Da dachte ich mir, es wäre doch schön, über die Makrotasten etwas für die ausgewählte Datei auszulösen, z. B. das Öffnen in Notepad++ oder das Öffnen des gesamten Ordners in Visual Studio Code oder in Fork oder so etwas. Und genau dafür habe ich OpenHere geschrieben.

Ich habe einiges über Low-Level-Funktionen zu Icons gelernt, z.B. das konsequente und korrekte Laden dieser in großen Auflösungen, und ich habe mehr Erfahrung im Umgang mit WPF sammeln können.

Heute habe ich eine neue Version meines Checkouts-Overview-Tools veröffentlicht.

Version 1.1 bringt neue Funktionen, Verbesserung des Scannens der Festplatten zum Finden neuer Repository-Checkouts und die Möglichkeit beim Update von Entry-Status-Informationen auch ein git fetch durchzuführen.

Ein paar kleinere Verbesserungen der Benutzeroberfläche erzeugen ein konsistenteres Aussehen.

Ladet den neue Release von Github herunter: Release Feature Release v1.1 – Better Disk Scanning and Git Fetch · sgrottel/checkouts-overview (github.com)

Okey, eine Warnung vorweg: Dies ist ein Beitrag geschrieben mit dickem Hals, denn ich bin wirklich verärgert und enttäuscht über meine jüngste Erfahrung mit dem Kundendienst von Lenovo. Und, ich hatte wirklich keinen hohen Erwartungen. Wirklich nicht.

Vor über einem Jahr habe ich einen ThinkPad-Laptop mit passender Dockingstation gekauft. Und beides hat nie perfekt funktioniert. Manchmal verlor die Dockingstation das Signal zum angeschlossenen Monitor. Manchmal schaltete sie sich beim Hochfahren nicht ein usw. All diese Probleme konnten entweder durch Abziehen und erneutes Einstecken oder, in schlimmeren Fällen, durch Aus- und wieder Einschalten behoben werden.

Kürzlich lernte die Dockingstation einen neuen Trick: Ihr Ethernet-Anschluss begann auszufallen. Erst manchmal, dann immer. Das vermutlich Gute daran ist, dass der Ausfall im Windows-Gerätemanager dadurch angezeigt wird, dass ein USB-Gerät einen Startfehler meldet, und dass es immer, zu 100%, auftritt. Das sollte doch ein Kundendienst nachvollziehen und beheben können, oder? Im schlimmsten Fall, selbst wenn sie das Problem nicht reproduzieren können, könnten sie die Fehlerbeschreibung lesen und einfach die Ethernet-Komponente austauschen, richtig? Versuch macht kluch.

Der erste Kontakt vor einigen Wochen verlief wie erwartet: Ich wurde gebeten, Kabel auszutauschen, Software sauber neu zu installieren usw. Alles verständlich. Ein von Lenovo geliefertes Kabel könnte inkompatibel sein, es ist besser, auf etwas von Amazon zu wechseln. Und nachdem eine saubere Neuinstallation von Windows 10 auf einer formatierten Festplatte genau denselben USB-Gerätefehler im Gerätemanager meldet wie zuvor, könnte man anfangen zu glauben, dass es sich vielleicht wirklich um ein Hardwareproblem handeln könnte.

Zu diesem Zeitpunkt stimmte der Kundendienst also zu, dass ich das Gerät an ein Servicecenter einschicken kann. Zu meiner großen Überraschung sollte ich den Laptop einzuschicken. Nur den Laptop. Nicht die Dockingstation. Seltsam, aber ok. Ich war ohnehin auf eine „lange Reise“ vorbereitet. Also schicke ich den Laptop ein, zusammen mit einer detaillierten Beschreibung, was los ist und wie man den Fehler reproduzieren kann. Das ist die Fehlerbeschreibung Nummer eins. Das ist wichtig für das Ende der Geschichte.

Nach etwa einer Woche kommt der Laptop zu mir zurück, mit einem Reparaturbericht im Paket. Ich verstehe wirklich nicht, warum Lenovo eine Kundendienst-Website hat, auf der sie ihre Service Tickets anzeigen. Auf dieser Website finden sich außer den Sendungsverfolgungsnummern der Postdienste null Informationen. Nutzlos. Wie auch immer. Im Reparaturbericht stand, dass sie die Hauptplatine und den Ethernet-Anschluss des Laptops ersetzt haben. Komisch. Ich habe eindeutig angegeben, dass der Ethernet-Anschluss meiner Dockingstation nicht funktioniert. Nun, was soll’s. Interessanterweise ist das gelegentliche Problem, dass der Monitor nicht erkannt wird, seither verschwunden. Ich denke also, dass wirklich irgendetwas mit dem Mainboard nicht in Ordnung war. Nun gut.

Aber das Problem mit dem Ethernet-Anschluss meiner Dockingstation ist immer noch nicht gelöst. Er bleibt defekt in 100% aller Fälle. Also erstelle ich eine Lenovo-Kundendienst-Eskalation für das ungelöste Problem. Runde zwei begann damit, dass ich eine detaillierte Fehlerbeschreibung des Problems und der Schritte zur Reproduktion lieferte (im Grunde: Laptop anschließen, hochfahren, Fehler sehen! Minimales Setup mit Laptop + Dock + 3 Kabel: Laptop-Dock-Verbindung, Stromversorgung, Ethernet). Nach einigen weiteren „Experimenten“ mit der Software durfte ich schließlich mein Gerät endlich wieder zum Service-Center schicken. Zu meiner (immer noch recht großen) Überraschung sollte ich sowohl den Laptop als auch die Dockingstation einzuschicken, da es sich um ein Problem mit der Kombination beider Geräte handeln könnte. Seltsam, aber egal, ok. Also schicke ich beides ein.

Dann, nach einer halben Woche, wechselt die nutzlose Status-Website auf „On Hold“. Zu diesem Zeitpunkt war ich mir ziemlich sicher, dass das nicht gut ausgehen würde. Dann, fast eine Woche nachdem ich die Geräte eingeschickt habe, erhalte ich eine E-Mail vom Kundendienst, in der dieser mir mitteilt, dass er mein Problem nicht reproduzieren kann. Ach! Ich kann mir nur vorstellen, dass sie den Laptop nie eingeschaltet haben, sondern nur auf der Suche nach Kratzern am Gehäuse waren. Viel wichtiger ist jedoch, dass sie mich bitten, eine detaillierte Fehlerbeschreibung abzugeben! Ansonsten würden sie mein Gerät zurückschicken. Ich meine, ganz ehrlich, ich habe bereits detaillierte Fehlerbeschreibungen und Schritt-für-Schritt-Beschreibungen zur Reproduktion des Fehlers geliefert. Zwei Mal. Aber ok!

Noch am selben Tag schreibe ich eine Antwort auf diese E-Mail, wieder mit einer detaillierten Fehlerbeschreibung und einer Schritt-für-Schritt-Beschreibung des minimalen Setups, um den Fehler zu reproduzieren, zur Erinnerung: die zwei Geräte und drei Kabel und eine neue, saubere Windows 10-Installation mit nur allen installierten Updates. Einfach genug. Es ist erwähnenswert, dass ich diese drei verschiedenen Fehlerbeschreibungen alle jeweils neu geschrieben habe. Es war nicht ein Text, dreimal kopiert. Es waren drei Texte, alle immer im Kontext der Fragen des Kundendienstes, alle ausführlich, alle klar, alle höflich. … Drei Mal!

Da mir der Kundendienst eine Frist von zwei Tagen für die Informationen gesetzt hatte, nahm ich direkt am Tag danach über den Web-Live-Chat Kontakt mit dem Service auf. Dort bestätigte eine freundliche Kundendienstmitarbeiterin oder ein wirklich gut geschriebener Bot, dass meine E-Mail eingegangen sei und an den Kundendienstmitarbeiter weitergeleitet worden war. Nun gut.

Dann, fast eine zweite Woche später, wurden meine Geräte an mich zurückgeschickt, Laptop und Dockingstation. Mit erneut überraschendem Reparaturbericht im Paket:

Darin stand ausdrücklich, dass sie nichts „repariert“ haben, weil sie nie die erforderlichen Informationen von mir erhalten haben.

Drei Mal!

Übrigens ist der Ethernet-Anschluss meiner Dockingstation immer noch defekt. 100% der Zeit. 100% reproduzierbar. Immer. Mit der Meldung eines defekten USB-Geräts im Windows-Geräte-Manager. In 100% der Fälle. Immer.

Drei Mal!

Leider ist der Eintrag nur auf Amerikanisches Englisch verfügbar. Der Inhalt wird unten in einer verfügbaren Sprache angezeigt. Klicken Sie auf den Link, um die aktuelle Sprache zu ändern.

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_!

Ich habe ein neues Tool in meinem Software-Werkzeugkasten: KeePass HotKey ist ein Wrapper-Programm zum Öffnen einer KeePass-DB oder zum Auslösen der Auto-Type-Funktion.

Dieses Tool ist sehr spezifisch für meinen Anwendungsfall:

  • Ich möchte eine Aktion über eine spezielle Hardware-Taste auf meiner Tastatur auslösen
  • Diese Aktion soll entweder eine bestimmte, vom Benutzer konfigurierte KeePass-Datenbankdatei öffnen oder
  • die „auto-type selected“-Funktion von KeePass auslösen, wenn eine KeePass-Instanz geöffnet ist, läuft und einen ausgewählten Eintrag hat.

Quellcode und releaste Binaries sind auf Github verfügbar.

Lua Version 5.4.4 wurde veröffentlicht.

Entsprechend hab ich auch dasNuget-Paket aktualisiert. Und, ich habe den Quellcode für das Paket nach Github verschoben: https://github.com/sgrottel/nuget-lua

Erstmal bleibe ich dabei AppVeyor zum Bauen der Binärdateien zu verwenden. Es war einfach ein triviales updated. Ich denke aber darüber nach mit einem der nächsten Updates zu Github Actions zu wechseln. Ich bin mir nicht sicher. Vielleicht auch nicht. „Never change a running system“, richtig.

Hallo zusammen!

Ich bin ein bisschen spät dran, aber: Frohes neues Jahr!

Und Junge, Junge, das wird ein Jahr. Ich freue mich so sehr auf das, was kommt. Der wohl wichtigste Grund, warum ich im Moment glücklich bin, ist: Ich habe einen neuen Job. Pünktlich mit dem neuen Jahr, seit dem 1. Januar:

Bin ich jetzt Senior Software Developer im Mixed Reality Team bei Microsoft.

Ich bin noch mitten im Onboarding. Diese Möglichkeit für mich ist großartig. jeden Morgen hab ich ein breites Grinsen im Gesicht, wenn ich meinen Computer einschalte. Und bis jetzt hat noch kein Tag enttäuscht.

Das wird ein gutes Jahr!