Am Puls von Microsoft

Wir bauen uns glückliche Nachrichten mit Xamarin und Azure

Wir bauen uns glückliche Nachrichten mit Xamarin und Azure

In Zeiten, wo manch Nachrichtensendung einer Zusammenfassung von Horrorgeschichten gleicht, kann es für das eigene Seelenheil selbst nützlich sein, auch einmal das Positive auf der Welt zu erfahren. Aus diesem Grund bauen wir uns eine Xamarin.Forms App für iOS und Android, welche uns die Wahl zwischen glücklichen als auch traurigen Nachrichten gibt.

Dies Ganze ist auch eine Art Spielplatz, um mit den Azure Cognitive Services experimentieren zu können. Im Genaueren werden wir das Sentiment-Feature (Wiki) der Text Analyse aus diesem Potpourri an KI-unterstützen Diensten verwenden.

Xamarin.Form – Plattformunabhängigkeit par excellence

Mit dem im Jahre 2016 von Microsoft übernommenen Xamarin ist es möglich, mobile Applikationen mit vorhandenen C#- und Microsoft-Entwicklerwissen zu erstellen.

Mit Xamarin.Forms wurde vor wenigen Jahren nun auch eine Möglichkeit geschaffen, nicht nur die Logik von iOS- und Android-Apps, sondern auch deren Oberflächengestaltung zu vereinheitlichen. Hierfür wurde auf das von UWP, Silverlight und Co gewohnte XAML (Docs) in Verbindung mit C#-Codebehind-Klassen gesetzt. Anzumerken sei allerdings, dass XAML zwischen Xamarin und beispielsweise UWP nicht komplett kompatibel sind. Hierfür soll XAML Standard, ähnlich wie .NET Standard für Abhilfen sorgen – wenn es denn mal kommen möge.

Mit Xamarin lässt sich auf Windows mit Visual Studio und auf macOS mit Visual Studio for Mac entwickeln. Für ein natives Erstellen von iOS-Applikationen wird jedoch zwingend ein Mac benötigt.

Xamarin Forms App Invia.News App Screenshots

Für das reine Betrachten und Testen von Oberflächen kann an Windows-Geräte auch mittels dem XAML Previewer ein iPhone angeschlossen werden.

Android Apps lassen sich auf beiden Plattformen ohne zusätzlich benötigte Komponenten sowohl auf den Emulator als auch auf reale Geräte spielen.

Microsoft gibt auch weiterhin Gas bei der Entwicklung von Xamarin, Xamarin.Forms und Visual Studio for Mac. Entsprechend spannende Talks wurden auf der diesjährigen .NET Conf gezeigt.

Azure Cognitive Services für alle

Anders als in unseren letzten Projekten reicht für dieses ein normaler Microsoft-Account aus, um die benötigten Azure Ressourcen zu erstellen.  Microsoft bietet außerdem die Möglichkeit an, völlig losgelöst von einem Azure Konto die Cognitive Services ohne Kreditkartenzwang sieben Tage lang zu testen. Für die meisten Experimente dürfte dies genügen.

Da in meinem Falle die Bereitstellung der Testwoche nicht mit der von Microsoft veröffentlichten Anleitung kompatibel war (GitHub Issue), empfehle ich ein kostenloses Azure Konto zu verwenden.

Azure Portal Cognitive Services Resource

Die Textanalyse ist, mit einem Limit von 5000 Abfragen im Monat, kostenlos im F0 Preis-Tier buchbar.

Nach einem simplen Einrichtungsprozess des Dienstes werden sogleich die für die App benötigten Zugangsdaten wie Endpunkt und API-Key angezeigt.

Bei Letzterem handelt es sich um ein vertrauliches Geheimnis, welches nicht öffentlich zugänglich sein sollte. Somit ist auch die Handhabung mit diesem Schlüssel im verlinkten Beispielquellcode nicht für den produktiven Betrieb gedacht.

Da Deutsch als Sprache noch in Preview ist und Englisch die nach diversen Einträgen in unterschiedlichen Communities die besten Resultate bereitstellt, werden wir englischsprachige Nachrichten als Grundlage für die Sentiment-Analyse verwenden.

Des Weiteren wird der Sentiment-Score in dieser App gleichgesetzt mit einem „Glücklichkeitswert“. Dies ist eine grobe Vereinfachung der von der Cloud gelieferten Daten, hilft jedoch, das Beispiel klein und übersichtlich zu halten.

Die Azure Cognitive Services laden aber auch sonst noch weiter zum Experimentieren ein. Es ist einfach ein Füllhorn modernster KI-Technologien geballt in, auch für Einsteiger, leicht nutzbarer Form.

Ablauf

DW zu Azure zu Xamarin Datenflow

An sich besteht der Ablauf aus drei großen Bereichen. Erstens lädt die App einen RSS Feed mit entsprechenden Nachrichten (RSS-Feed) von dw.com herunter und serialisiert diesen in für die App verständliche „Article“-Objekte (GitHub).

Auf Basis dieser Objekte werden Batch-Abfrage-Objekte erstellt, welche an die Azure Cognitive Service Text Analytics API gesendet werden. Anhand der jeweiligen, vorher gesetzten ID, kann im Falle der Wolkenantwort der entsprechende Sentiment-Score dem jeweiligen Artikel wieder zugeordnet werden.

Ist dies abgeschlossen, rendert die App anhand der aufbereiteten Daten zwei Listenansichten mit jeweils glücklichen Nachrichten. Dies sind jene mit einem Score über 75%, und eher traurig stimmende Nachrichten mit einem Score unter dem von mir erdachten Grenzwert.

Mittels dem Converter-Pattern von Xamarin (Docs) lassen sich dann die jeweilige Information zu einer Nachricht besser visualisieren. So konvertiert beispielsweise der SentimentScoreToEmoji-Converter (GitHub) entsprechende Score Wertes in Emojis. So wird aus 50% ein eher verhaltener “😕“ Emoji.

Nichtsdestotrotz zeigt diese App, dass wohl das Anbinden solcher Dienste im Vergleich zu früher viel einfacher wurde, jedoch das Interpretieren dieser nun verfügbaren Informationen die neue Herausforderung ist. Was ist den nun wirklich „glücklich“? 75% oder noch 72,8%? Oder wieso gibt es manche falsch-glücklichen Ergebnisse? Dies bleibt weiterhin zu evaluieren.

Quellcode

Die Quelldateien zur Xamarin App sind im Repository Invia.News auf GitHub für jedermann frei verfügbar. Forken, mitentwickeln und bewerten ist ausdrücklich erwünscht.

#communityrocks

Über den Autor

Tobias Scholze

Tobias Scholze

Bayrischer Open Source- und Community-Enthusiast, Verfechter des neuen Microsoft und Wandler zwischen den Betriebssystemwelten. #communityrocks Von Herzen ein Nerd mit der festen Überzeugung, dass man gemeinsam und durch den Einsatz von moderner IT die Welt für jeden ein Stückchen besser machen kann.

Anzeige