Ich bin auf dieses Nuget gestoßen, weil ich WPF-UI-Anwendungen geschrieben habe und einen Folder-Picker brauchte. Irgendwer im Internet schlug vor, die WinForms-Dialoge zu verwenden. Ich hasse es irgendwie, zwei Frameworks zu verwenden. Und dann brachte jemand anderes das Nuget WindowsAPICodePack.Shell ins Spiel, mit seinen Klassen der Windows Common Dialogs, einschließlich der Möglichkeit zur Auswahl von Ordnern im File-Öffnen-Dialogfenster.

Also fing ich an, das Nuget zu benutzen. Irgendwann wies mich ein Freund darauf hin, dass das Nuget-Paket gar nicht wie ein offizielles Microsoft-Paket aussah, sondern wie ein Repackage, das irgendjemand gemacht hatte. Das brachte mich zum Nachdenken. Ich unterstelle niemandem böse Absichten, aber ich fand es sehr, sehr seltsam. Das offizielle Paket war . Und es gibt eine ganze Reihe von Paketen mit seltsamen Namen:

Ich mag das nicht. Selbst wenn keiner der Autoren böse Absichten hegt, gefällt mir das nicht, denn es riecht nach Betrug, Phishing und Schwachstellen. Tut mir leid, aber nein.

Also, wo ist das offizielle Paket? Es scheint verschwunden zu sein, deshalb gibt es die Repackages von Community-Mitgliedern. Warum ist es verschwunden? Keine Ahnung. Vielleicht wurde es bei einer halbautomatischen Bereinigung erwischt, da es verwaist war. Jemand behauptet es wäre Microsoft.Windows.SDK.Contracts ersetzt worden.

Letztendlich habe ich den Code in meinen Projekten ersetzt, indem ich entweder doch den WinForms-Dialog verwendet oder eine sehr kleine P/Invoke-Wrapper-Klasse geschrieben habe, die die Win32-API-Funktion direkt aufruft. Wen es interessiert, der kann sie sich gerne anschauen:

https://github.com/sgrottel/open-here/commit/9de68198e35f0f6dec9386372cc71bada54c2f5b

Die Moral von der Geschichte ist, dass ein Nuget-Paket nur so gut ist wie die Menschen, die es pflegen. Und ich meine Menschen, nicht Organisationen. Denn am Ende kommt es darauf an, ob eine einzelne Person dahinter steht und ihr Bestes geben will oder nicht.

Dies ist mein erster Post im Jahr 2024, und erstaunlicherweise habe ich es geschafft, siebeneinhalb Monate lang nichts zu schreiben. Das sieht aus wie ein trauriger Rekord. Nun, es ist nicht so, dass ich in dieser Zeit nichts für die Community getan hätte. Es zeigt aber, dass meine Prioritäten woanders lagen als in diesem Blog. Aufgeben werde ich den hier aber nicht.

Jedenfalls möchte ich nicht einfach aufgebläht auflisten was ich gemacht habe, indem ich, z.B., mein Github-Journal abschreibe, denn das wäre einfach nur traurig. Wenn Ihr euch dafür interessieren, was in meinen Tiny Tools, Everything Search Client, Checkouts Overview, OpenHere, LittleStarter, MyToDoBoard, aktualisierten Nuget-Paketen, SimpleLog, etc. passiert ist, dann empfehle ich direkt einen Blick in mein Github-Profil zu werfen. Das ist dann wohl die unaufgeblähte Auflistung.

Also, für heute belasse ich es bei dieser kleinen, traurigen „I am still alive“-Nachricht.

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.

Git has this cursed function to fuck up your files by doing unspeakable things to your line endings.

For example, from Githubs Documentation on Line Endings:

On Windows, you simply pass true to the configuration. For example:

$ git config –global core.autocrlf true

Please, never never never never never never never never never never never never do this!

THERE IS NO REASON TO DO IT!

Git is here to keep track of our files, NOT TO CHANGE OUR FILES IN ANY WAY.

So, please, just, never never never never never never never never never never never never do this! Leave my file endings alone!

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.

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

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!

Ich habe meine „Weisheit“, so nenne ich es gerne, aus vielen verschiedenen Quellen: Familie, Freunde, Filme, … Ich bezeichne es oft auch als „nutzloses Wissen“. Damit kann ich auch leben. Und am interessantesten wird es, wenn es um Dinge geht, die nicht (vollständig) unter unserer Kontrolle liegen. Meinungen werden dann mehr und mehr zu Reflexionen davon, wie wir diese Dinge sehen, und nicht, wie sie sind. Nun, Meinungen sind immer so, aber in diesen Fällen wird dies immer schön deutlicher. Nehmen wir zum Beispiel unsere Jobs, wir lieben sie, wir hassen sie, wir brauchen sie. Wenn ich das Ganze aus der akademischen Perspektive betrachte, dann denke ich zuerst an eine Skala (basierend auf meiner nutzlosen Weisheit):

Das obere Ende ist für mich durch ein Zitat von Konfuzius definiert. Tatsächlich habe ich es das letzte Mal gehört, als meine Schwester es mir von Kermit dem Frosch auf Instagram vorgelesen hat.

„Wähle einen Job, den du liebst, und du wirst nie einen Tag in deinem Leben arbeiten müssen.“

Und für das untere Ende, das gar nicht so negativ ist, habe ich ein Zitat aus „Der Teufel trägt Prada“ gewählt:

„Jobs, die die Miete zahlen.“

Nun, das ist nicht Konfuzius, aber es trifft sicherlich was wir oft fühlen.

Offensichtlich ist es eine offene Skala von 1 – Liebe bis 0 – Miete, und darüber hinaus an beiden Enden. Und, es gibt sicherlich so etwas wie „Das war’s. Hier ist meine Kündigung. Fickt euch alle.“, aber ich hoffe ehrlich, dass dieser Wert nicht sehr oft gebraucht wird. Setzen wir den mal auf -1.

So, da habt ihr’s. Eine schöne Skala zwischen Liebe und Hass zu unsere Jobs.

Wenn Sie einen dieser Tage haben, an dem Sie sich nahe an der Null oder sogar im negativen Bereich fühlen, dann versuchen Sie sich an einen früheren Tag zu erinnern, an dem Sie nahe an der Eins waren. Haben Sie es? Bleiben Sie dran. Ihr Ziel für die Arbeit ist es, dass diese Tage zählen! Und mehr von diesen Tagen zu haben als von den anderen. Und, für die anderen Tage, vergessen Sie auch Ihr Leben außerhalb Ihres Jobs nicht!