Anzeige

Am Puls von Microsoft

Anzeige

Kommentar: Microsoft und seine Tutorials zum Flüchten

DrWindows

Redaktion
Kommentar: Microsoft und seine Tutorials zum Flüchten
von Tobias Scholze
Frame-2-720x360.png


Ich liebe es zu lernen. Ich liebe es, mich im beruflichen als auch privaten weiterzuentwickeln und neue Dinge kennenzulernen und einiges davon auch auszuprobieren. Hiermit meine ich nicht nur die Kunst des Brotbacken,s was manche von uns sich in den letzten Jahren angeeignet haben, sondern auch Experimente im Digitalen wie etwa mit den neuen Windows 11 Widgets. Doch dies kann schnell steinig werden und demotivierend sein.

Klarstellung​


Viele der erwähnten Punkte können oder müssen nicht ein Fehler, Versäumnis oder gar Ignoranz von Microsoft sein. Viele der Punkte können für erfahrene Entwickler aus diesem Ökosystem selbsterklärend und einleuchtender beschrieben sein, als wie ich es erfahren habe. Dieser Beitrag ist soll weder Hass erzeugen, noch ein „Auslachen“ sein, sondern ein konstruktiver Beitrag, um Windows 11 Widgets für Entwickler zugänglich zu machen.

Fallbeispiel: Windows 11 Widgets​


Als Windows 11 vor nicht allzu langer Zeit gestartet wurde, war die Widgetleiste einer der Punkte, bei der wir bei Dr. Windows dachten, dass dies ideal sei, um unsere Leser bequem und auch noch hübsch dargestellt über neue Artikel von uns zu informieren. Eine solche Leiste gab es zwar schon bei Vista und Co., so richtig durchgesetzt hat es sich damals aber wohl nicht.

Außerdem, so war meine Vermutung, hat Microsoft sicherlich Interesse daran, dieses neue Windows 11-Feature zu bewerben und allen interessierten Entwicklern schmackhaft zu machen.

Bis vor wenigen Tagen war es nicht möglich, eigene Widgets zu entwerfen, doch mit der Veröffentlichung des Windows App SDK in Version 1.2 Preview 2 öffnete Microsoft (Dr. Windows berichtete) nun die Scheunentore, um die Horde an Entwicklern hereinzulassen! Oder waren doch nur wallende Strohballen zu hören?

Meine Stolpersteine​


Ich möchte euch meine persönlichen Stolpersteine aufzeigen und erklären, wieso sie für mich im Endeffekt zum Scheitern dieser Bastelei geführt haben. Falls ihr Tipps und Tricks habt, wie man diese Steine aus dem Weg schaffen kann, bitte ich euch, diese in den Kommentaren zu vermerken.

Alles noch in der Mache


Das Tutorial zählt auf, welche exakten Versionen, wobei dies wohl eher Mindestversionen sind, interessierte Entwickler von Windows 11 (Dev Channel) und des Widget Boards (521.20060.1205.0) installieren müssen. Microsoft erwähnt explizit, dass all das Erklärte als auch eventuell die Beispielsquelltexte mit einem Update kaputt gehen können, da es sich noch alles um Software und Bibliotheken im Beta- oder Alpha-Stadium handelt.

Some information relates to pre-released product, which may be substantially modified before it’s commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.

Ist es also noch zu früh, um sich mit dieser Thematik überhaupt zu beschäftigen? Falls ja, liegt die „Schuld“ als bei mir selbst.

Keine zusammenhängende Einführung


Da das Thema „Widget“ unter „Windows App Development“ auf learn.microsoft.com aufgeführt ist, hat es sich auch dort an die starre Sektionsstruktur zu halten. Sprich: Es gibt beispielsweise die Reiter „Getting Started“, „Design“, „Development“ und „Deploy“. Auf das Feature der Plattform, Beiträge auf Deutsch zu lesen, verzichte ich absichtlich, da diese automatische Übersetzung noch mehr zur Verwirrung beiträgt.

Leider ist im ersten und vielleicht auch wichtigsten Kapitel „Getting Started“ nichts von Widgets zu lesen, auch unter Design/Windows 11 ist davon keine Rede, sondern haben dort ihre eigene Gruppe „Windows Widgets“, auch wenn es diese nur unter Windows 11 gibt. Wobei hier der Beitrag erst mit einem „Getting started“ zu Widgets anfängt, welcher eigentlich zum großen „Getting started“ Reiter passen würde.



Das Ganze ist wenig verwirrend, wenn man die Struktur einmal begriffen hat. Etwas anderes ist es, wenn man sich einen ersten Überblick über das Windows 11-Feature verschaffen will und erst einmal wie der Ochse vor dem Berg steht, weil man den Anfang vom roten Faden nicht findet.

Für einen Einsteigerkurs in die ganze Thematik geht es bei diesen Beiträgen auch zu sehr in technische Details, welche mich zu diesem Zeitpunkt des Lernprozesses erst einmal eher abgeschreckt als motiviert haben. So blieb mir beispielsweise bis zum Schluss verborgen, was nun der Unterschied zwischen Widgets und den von Microsoft longierten Adaptive Cards sind.

Doppelt vergebene Namen-Bingo


Microsoft verwendet gerne den generischen Begriff eines „Widgets“. Es gibt sie in Teams, im Bot Framework, bei Cortana (RIP) und unter anderem auch in Microsoft Viva. Hier nun bei Suchen im Netz aber auch bei Beispielen die gewollten Informationen zu finden, kann ermüdend sein.

Adaptive Cards Designer erzeugt fehlerhaften Code


Ein Schritt in der Erstellung eines Windows 11 Widgets ist die Gestaltung der Oberfläche. Hierzu wird das gleiche Format benutzt wie auch für andere „Adaptive Cards“, und Microsoft hat hierfür die Webapp „Adaptive Cards Designer“ ins Leben gerufen.

Da der Designer alle erwähnten Arten von Widgets aka (?) Adaptive Cards unterstützt, sollte man doppelt prüfen, ob man auch das richtige Target Framework ausgewählt hat, bevor man mit der Gestaltung beginnt – da zu mindestens bei mir ein späteres Wechseln des Targets zu einem Einfrieren des Designers führte.

Des Weiteren hat bei mir der vom Designer erzeugte Code im Designer selbst zu einer Fehlermeldung während der Validierung gesorgt. Ob dies mit dem vorher erwähnten Schluckauf zusammenhängt oder ob es ein realer Fehler, ist kann ich hier nicht sagen.



Noch keine Progressive Web App-Unterbauten möglich


Nachdem das Widget, also die Oberfläche, entworfen ist, muss die dazugehörige Logik entwickelt werden, in unserem Falle für Windows 11 ein so genannter „Widget Provider“. Dies ist eine Applikation, welche das Widget mit Leben und Daten befüllt. Bisher werden hier nur „Win32“-Konsolenprogramme unterstützt.

Von dem „damaligen“ Ausspruch, dass PWAs ein First-Citizen sind, hat sich Microsoft scheinbar wieder verabschiedet – muss ja nicht verkehrt sein. Diese Möglichkeit, die Logik zu gestalten, soll später nachgereicht werden.

C++ statt C# – sorgt für Kopfschmerzen


Was mich mehr abschreckte, war, dass das offizielle Beispiel nicht, wie sonst von Microsoft üblich und im .NET-Ökosystem mittlerweile Usus, in C# vorliegt, sondern in C++. Da viele UWP- und App-Entwickler eher einen C#- oder auch mittlerweile TypeScript-Hintergrund haben, irritiert mich diese Wahl der Programmiersprache doch etwas.

Die Anleitung führt gut strukturiert durch den Prozess und dessen Life Cycles, eines eigenen Widget Provider zu entwickeln, aber durch die Verwendung von C++ lässt sich nicht alles gleich übertragen und auch noch verstehen, was eigentlich gerade passiert – vor allem im Sinne von Header Files.



Ein Link zum Beispiel auf GitHub scheint ebenso zu fehlen, so dass man auch keine „Vorlage“ hat, um zu mindestens einen Garant für ein lauffähiges Projekt zu haben.

Wer Deploy sucht, muss in Develop suchen


Persönlich bin ich nicht so weit gekommen, aber für alle fähigeren Menschen stellt sich nach der Entwicklung die Frage, wie man nun das erstelle Widget deployed – also veröffentlicht. Diese Information gibt es nicht unter dem Reiter „Deploy“, sondern ist Teil der „Develop“-Sektion. Wohl deswegen, weil es aller anscheinen nach noch kein „Hit run and build“-Button in Visual Studio für Widgets gibt.

Dass es hier zum Deployen noch sehr viel Handarbeit in der Form von zu aktualisierenden *.wapproj und *.appxmanifest Dateien gibt, schiebe ich dem aktuellen Beta- beziehungsweise Alpha-Status zu und hoffe, dass bis zum produktiven Release dies alles in Visual Studio möglich sein wird.

Was hätte ich erwartet?


Ich als Entwickler, welcher wieder zurück zu seinen Windows-Ökosystemwurzeln möchte, hätte erwartet, dass es einen einfach zu folgenden Leitfaden gibt, wo Schritt für Schritt erklärt wird, was man zum jeweiligen Zeitpunkt wo, wie und warum machen muss, um am Ende ein fertiges Widget zu haben. Dies in C# und etwaig auch in allen anderen Sprachen mit welchen win32-Anwendungen erzeugt werden können.

Dies, gepaart mit Beispielen auf GitHub aus der echten Welt wie eben einem RSS-Reader, hätten mich eventuell nicht so schnell die Flinte in das Korn werfen lassen. Dass so etwas möglich ist, zeigt Google an etlichen Stellen mit den Android-Beispielen.



Es ist noch Zeit​


Wie erwähnt, hat Microsoft bis zum produktiven Release der Widgets noch etwas Zeit. So kann es gut sein, dass nicht nur das SDK im Alpha-Status ist, sondern auch das ganze dazugehörige Lernmaterial. Es schadet also nicht, in regelmäßigen Abständen auf learn.microsoft.com vorbei zu schauen, denn, die Hoffnung auf gute Anleitungen seitens Microsoft stirbt bekanntlich zuletzt!

Microsoft ist nicht allein​


Auch wenn unser Fallbeispiel klassisch auf Microsoft abzielte, ist der Softwaregigant aus Redmond mitnichten allein. Im vergangenen Monat beschäftigte ich mich ausgiebig mit JetBrains Space App Extensions, um an deren App Contest teilzunehmen. Die hierfür vorhandenen Tutorials, welche mir als Einsteiger an die Hand gelegt wurden, sorgten nicht nur einmal dafür, dass ich diese Bastelei an den Nagel gehängt hätte, und entfernten und frustrierten mich von der ganzen Idee, JetBrains Space, eine Mischung aus Azure Dev Ops und Teams, eine Chance zu geben.

Auch Apple, Salesforce und Co. können nicht immer mit ihren Anleitungen brillieren – somit ist dies wohl eher ein Branchenproblem, statt ein Nur-Microsoft-Problem.


Hinweis: Der Artikel wird möglicherweise nicht vollständig angezeigt, eingebettete Medien sind in dieser Vorschau beispielsweise nicht zu sehen.

Artikel im Blog lesen
 
Anzeige
Das ist so dermaßen typisch für Microsoft. Es wirkt für mich oft so, als wenn bei denen oftmals kein richtiges Konzept für deren Internetseiten existiert. Wie oft landet man im Nichts, wenn man z.B. bei einer Fehlermeldung „Hilfe zu Fehler XY“ anklickt. Nichtexistierende Seiten, katastrophale Übersetzungen und eine generelle Lieblosigkeit.

Natürlich ist der Wust über die Jahre gewachsen und ich bin mir sicher, da würde nur ein Schnitt und ein Neuanfang weiterhelfen, aber ist generell erstaunlich, wie viel Chaos bei solch einem Giga-Konzern existiert.
 
Das ist so dermaßen typisch für Microsoft. Es wirkt für mich oft so, als wenn bei denen oftmals kein richtiges Konzept für deren Internetseiten existiert. Wie oft landet man im Nichts, wenn man z.B. bei einer Fehlermeldung „Hilfe zu Fehler XY“ anklickt. Nichtexistierende Seiten, katastrophale Übersetzungen und eine generelle Lieblosigkeit.

Natürlich ist der Wust über die Jahre gewachsen und ich bin mir sicher, da würde nur ein Schnitt und ein Neuanfang weiterhelfen, aber ist generell erstaunlich, wie viel Chaos bei solch einem Giga-Konzern existiert.

Das "Chaos" bei den Internetseiten ist das Eine. Das Beispiel der Widgets zeigt aber auch warum viele Ideen im Zusammenhang der Windows Betriebssysteme bei Microsoft nicht funktionieren.

Gadgets, Widgets oder auch welche Apps im Store der Standard sein sollen und wie sie letztendlich erstellt werden sollen hat sich über die Jahre gefühlt 100 Mal geändert. Und wenn es dann wie man jetzt sieht auch nicht sauber dokumentiert ist, dann wundert mich nicht, warum sich keine dieser Ideen wirklich durchsetzt.

Some information relates to pre-released product, which may be substantially modified before it’s commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.

Und wenn ich dann och sowas lese, wundert mich auch nicht, warum die Entwickler Gemeinde mittlerweile einen Bogen um solche Ideen macht
 
Als ich die Veröffentlichung des SDK dazu gelesen habe, habe ich gleich Abstand dazu genommen. Ich glaube das wird ein größerer Rohrkrepierer als die Live-Tiles zuvor. Am Anfang wird sich meiner Erfahrung nach ziemlich viel Müll bei den Widgets tummeln, weil viele Entwickler erstmal Abstand nehmen und schauen, ob Microsoft es diesmal ernst meint und nicht das ganze wieder nach kurzer Zeit einstampft.
 
Was meiner Meinung nach auch ein Beispiel für extrem schlechte Dokumentation bei Microsoft ist, ist SignalR bzw. Azure SignalR. Wie oft man einen Docs Artikel für ASP.NET bekommt obwohl man explizit für die Variante für ASP.NET Core gesucht hat... Mittlerweile hat sich das aber etwas gebessert bzw. Ist besser erkennbar. Vor ein paar Jahren wars noch schlimmer.

Aber auch dort sind die Beispiele oft dürftig und man hat den Eindruck, als würde genau an der Stelle aufgehört zu erklären die man bräuchte.
 
Das Problem liegt meiner Meinung nach in der technischen Basis. Man muss einen OutOf-process COM-Server implementieren - eine Sache die man in C# wahrscheinlich nur dann macht, wenn man dazu gezwungen wird. Mir sind die technischen Gründe dafür zwar bewusst (performane, well known interfaces, vorhandene Infrastruktur etc), aber ich verstehe, dass man eine etwas "modernere" Infrastruktur bevorzugt hätte.
 
@Andy74 ich hoffe einfach, dass es noch zündet - nur es wird, wie du schon meintest einen Grund haben warum es noch nie passiert ist

@dpaiha HM, die spräche ist ja immer nur von einer Win32 Anwendung und auch nicht, dass es z.b. mit C# nicht klappt.

Du kannst Recht haben, aber dann sollte es auch dort stehen *grübl*. Danke!
 
@Tobias Scholze
THEORETISCH wäre die Sprache egal, aber Explorer (de facto die UI-Shell) ist native Code (c/c++). Das war (leider) immer schon so. Dafür gibt es Gründe (performance vor allem), aber es gäbe auch andere Varianten - nur leider hat man gerade z.B beim Office Team negative Erfahrungen mit managed Code-Addins gemacht (weshalb es dort auch die Implementierung mit dem AutoDeactivate bei langen Ladezeiten gibt).

Meiner Meinung nach ist man hier zu stark im eigenen Umfeld gefangen - nach dem Motto "wer einen Hammer hat für den ist jedes Problem ein Nagel...".

Eine mögliche Variante wäre z.B. ein "pre-initialize" von solchen Komponenten - vergleichbar dem Deployment Model bei servlet containern, oder auch ein lazy initialize - es gibt eine ganze Menge an Patterns, mit denen man die Performance optimieren kann.

Ja, du hast leider recht - es schaut NICHT nach einem großen Wurf aus - dafür steckt mir zu wenig Design dahinter.
 
@dpaiha Woran machst Du fest, dass es sich um einen out-of-process COM server handelt? Klingt zwar nicht gänzlich unwahrscheinlich, aber keiner der Links macht dazu eine Aussage. Und der Provider selbst steckt ja sogar im AppSDK und bezieht sich auf einen WinRT Namespace... einen COM Server könnte ich auch einfach so implementieren, ich müsste nur das Interface kennen.

Ich würde eher vermuten, dass es ein reguläres WinRT-Interface (was unter der Haube natürlich auch alles meist COM ist, wie halb Windows) der nächsten Windows-Version ist (daher auch Windows 11 Developer-Channel notwendig). Bei C# wird man noch warten müssen bis das entsprechende Windows SDK als Preview vorliegt, während das AppSDK Preview sicher schon gegen einen internen Stand gebaut wurde.
 
Anzeige
Oben