code it

Martins Tech Blog

Playlist erstellen für PlayPoster von OOSM

Nachdem ich in meinem letzten Post geschrieben habe, wie man PlayPoster in Betrieb nimmt, soll es heute darum gehen, meine Anwendungsfälle mal abzubilden. Dazu erstelle ich im Admin-Portal eine Playlist und befülle diese mit Inhalten.

Das Admin Portal kommt sehr übersichtlich daher und alle wichtigen Menüpunkte sind per Direktlink verfügbar. Nun ein paar Worte zur Struktur: Ein PlayPoster Stick (= Unit) gehört zu einer Gruppe (= Location). Einer Location und damit allen darin enthaltenen Devices können Playlists zugeordnet werden, die entweder ganztägig, morgens, mittags oder abends aktiv sein können. Eine Playlist selbst ist eine Reihenfolge von Bausteinen, die im Editor erstellt oder bearbeitet werden können. In einigen Bausteinen werden Bilder benötigt (oder sind zumindest sinnvoll). Diese liegen unter Files.
Logo Baustein erzeugen
Ein recht simpler Baustein ist der Bildbaustein in dem einfach eine bestimmte Zeit lang ein Bild angezeigt wird. Dieser Baustein ist auch bereits in der Standard-Playlist mit der das Gerät ausgeliefert wird enthalten. Wie erzeugt man nun selbst einen solchen Baustein? Ganz einfach: Dazu legt man einfach in der Menüleiste ein Bild per Drag&Drop ab und definiert im anschließend erscheinenden Dialog noch die Anzeigedauer (diese ist immer im Format mm:ss).

Externe Webseite einbinden
In meinem vorigen Post habe ich ja als Use-Case angegeben, dass ich den Ticketstatus (bei uns aus dem Redmine) und den Status des Build- und Testsystems (bei uns Jenkins) anzeigen will. Dafür gibt es natürlich keine vorgefertigten Bausteine. Aber wozu bin ich Entwickler? Ich kann ja auf einem unserer Rechner noch einen Webserver laufen lassen, der die Daten nach meinen Wünschen aggregiert und anzeigt. Diese Webseite kann ich dann anzeigen lassen. Dazu erstelle ich unter Editor einfach einen neuen Baustein, weise das Template "External Page" zu und gebe die Url an, die angezeigt werden soll und auch wieder die Anzeigedauer. Die Url muss aus Sicht des Sticks angegeben werden - ich kann also auch lokale Urls verwenden. Die Vorschau im Browser funktioniert technisch bedingt nicht, wenn ich mich beim editieren nicht im gleichen Netz wie der Stick befinde und die Webseite für mich dann nicht erreichbar ist oder wenn meine Url eine http-Url ist (da das Portal https ist und der Browser unsichere Elemente in blockiert). Auf dem Device funktioniert es dann aber.

Tweets anzeigen
Ähnlich einfach ist die Anzeige von Tweets. Dazu verwendet man den Baustein "Twitter" und gibt den Hashtag oder die Person an der man folgen will. Innerhalb der definierten Anzeigedauer wird dann alle paar Sekunden durch die so gefilterten Tweets gewechselt. Da sowohl Schriftfarbe als auch Standard-Hintergrund weiß sind, ist es bei diesem Baustein wichtig, dass man im Editor das Hintergrundbild definiert. Dazu lädt man einfach im Vorab über Files ein Bild in der Hintergrundfarbe seiner Wahl hoch und setzt es im Baustein als Hintergrund.

Statische Texte
Zur Anzeige statischer Texte gibt es verschiedene Templates. Ich verwende dazu in der Regel eines der "Pricelist" Templates, da ich oft eine tabellarische Ansicht brauche (z.B. für die Ankündigung von Community Events). 

Playlist erstellen
Nun da ich alle Bausteine erstelle habe, muss ich nur noch eine Playlist aus diesen erstellen. Dazu wechsle ich unter Playlists und ziehe mir per Drag&Drop die Bausteine in der gewünschten Reihenfolge in meine Timeline und speichere die Playlist ab. 
Wenn ich mir noch aussuche wann und wo die Playlist gespielt werden soll, wird sie auch gleich auf die anhand der Location gewählten Devices gepusht und dort direkt angezeigt.

Ein komplettes Tutorial gibt es auf der OOSM Support Seite

Digital Signage mit PlayPoster von OOSM

Wer hat sie noch nicht gesehen - die Werbemonitore in den Geschäften, die Info-Screens bei Veranstaltungen. Digitale Schilder oder auch Digital Signage sind beim Marketing nicht mehr wegzudenken. 

Auch bei uns im Büro sollte so ein Screen her. Weihnachten war es dann so weit - im Büro stand ein nagelneuer Fernseher, der auch schnell recht professionell an der Wand hing. Doch wie geht's dann weiter? Ok, für ein paar statische Inhalte funktioniert das recht gut - USB-Stick angeschlossen und schon kann eine Slideshow von Bildern angezeigt werden. Aber das war's dann auch schon.

Unser Screen soll nicht nur Marketingfunktionen erfüllen, sondern ich möchte dort auch nützliche Informationen für die Mitarbeiter anzeigen und diese sind nur dann wirklich nützlich, wenn sie dynamisch erzeugt werden. Wir sind ein Unternehmen, das Software herstellt. Also was sind denn nützliche Informationen? Ich denke hier an:
  • den aktuellen Projektstatus (also das Sprint- oder Projekt-Burndown)
  • den Status des Buildsystems (welche Builds laufen gerade; gibt es irgendwo Builderrors oder fehlgeschlagene Tests)
  • Informationen zum Unternehmen oder zur Abteilung
  • Informationen zu Community-Events
  • Informationen aus sozialen Medien (z.B. einen Twitter-Feed)
Das alles lässt sich mit der statischen Dia-Show die der Fernseher mitbringt nicht lösen. Da muss etwas anderes her.

Im Frühsommer letzten Jahres war ich in Amsterdam zu einem Startup-Event und habe dort die Köpfe eines Unternehmens kennengelernt, die genau so eine Digital Signage Lösung herstellen: OOSM (sprich: awsome) mit Ihrem Produkt PlayPoster. In den Gesprächen mit dem CEO Peter Bruner stellte sich heraus, dass der Stick von OOSM vermutlich genau die einfache Lösung ist, die wir brauchen.

Also habe ich einen Stick bestellt. Nach wenigen Tagen war der dann auch in meinem Briefkasten. Die Installation ist denkbar einfach und in 3 Schritten erledigt: 
  • Stick auspacken und an Stromversorgung und HDMI-Port des Bildschirms anschließen
  • WLAN-Credentials eingeben (dafür braucht man mal kurzzeitig eine USB-Maus)
  • Stick kurz vom Stromnetz nehmen, damit er rebootet
Das war's auch schon. Ab jetzt öffnet sich bei jedem Boot automatisch die vorinstallierte App und zeigt die definierten Inhalte an.

Da kommen wir auch schon zum nächsten Punkt: Definieren der Inhalte. Denn ich wollte ja statische und dynamische Inhalte darstellen.

Bei der Bestellung erhält man Credentials zum Admin-Portal von OOSM. Dort definiert man sogenannte Playlists, die man einer Gruppe von Devices zuordnen kann - also ein Device ist in einer Gruppe; eine Gruppe hat eine oder mehrere aktive Playlists (ganztägig oder für einen bestimmten Zeitraum); eine Playlist besteht aus Bausteinen, für die eine Reihenfolge definiert wird. Wie das genau geht, erkläre ich in einem späteren Post.

Digital Signage Lösungen gibt es viele am Markt, deswegen hier neben dem persönlichen Kontakt zum Entwicklerteam noch ein paar Hard-Facts für die Entscheidung für PlayPoster. 

Einfache Installation mit vorhandener Hardware (+)
Es muss ja nicht immer der neue TV sein - wir alle haben igendwelche alten Monitore herumstehen, die wir nicht mehr brauchen und die super für Digital Signage geeignet sind. Einfach den Stick anschließen, WLAN einrichten, fertig. Und der Stick ist mit Abmessungen von 85 x 30 x 10 Millimeter wirklich nicht groß.

Cloudbasierte Definition (+)
Ich kann von zu Hause oder von unterwegs steuern, was auf meinen Screens im Office wann angezeigt wird.

Niedrige Kosten (+)
Die Anschaffungskosten sind vergleichsweise sehr gering - andere Digital Signage Produkte kosten über 100 Euro pro Device, die aktuellen Kosten (Stand Januar 2016) des PlayPoster Sticks sind 59 Euro einmalig ohne weitere nutzungsbasierte Zahlungen.

Betaphase (+/-)
Das System ist noch in der Betaphase. Man stolpert also noch manchmal im Admin-Portal über Punkte die von der User Experience noch nicht optimal sind, aber das Entwicklerteam freut sich über Feedback und behebt Bugs (wenn man welche findet) super schnell.

Viele vordefinierte Templates (+)
Für die Bausteine gibt es vordefinierte Templates, die schon viele Anwendungsgebiete abdecken:
  • statisches Bild (also quasi wie Diashow)
  • externe Webseite (z.B. für unsere Systemstatus-Anzeigen)
  • Tweets (anhand Hashtag oder Person)
  • RSS-Feed
  • Gimmicks wie Uhr, Horoskop, Wetter
  • verschieden gelayoutete Bild-/Text-Screens (Preisliste, Bild mit Text)

Nur FullHD (-)
Der Stick in seiner aktuellen Konfiguration unterstützt lediglich FullHD und noch kein 4K. Für uns reicht das im Moment. Nach der Aussage von OOSM soll die nächste Generation aber definitiv 4K-fähig sein.

Damit genug zum Thema Installation. In meinem nächsten Post zeige ich, wie ich meine Playlist für PlayPoster zusammenbaue.

OutOfMemoryError beim Kompilieren von Xamarin Projekten

Heute hab ich versucht in ein Xamarin Android Projekt das Google Ads Framework hinzuzufügen. Nichts leichter als das: Nuget und dort Xamarin.GooglePlayServices.Ads ausgewählt. 

Die Ernüchterung kam recht schnell: Ab diesem Zeitpunkt ließ sich mein Projekt nicht mehr kompilieren. Der Build dauerte viel länger als gewohnt und brach dann mit dem Fehler
java.lang.OutOfMemoryError. Consider increasing the value of $(JavaMaximumHeapSize). Java ran out of memory while executing 'java.exe'
ab. 

Nun befinde ich mich ja in Visual Studio und hab dort nicht wirklich eine Einstellung gefunden, die mir weiter geholfen hätte. Nach einiger Internetrecherche hier nun die Lösung: In der csproj-Datei muss folgender Code hinzugefügt werden: 
<PropertyGroup>
    <JavaMaximumHeapSize>1G</JavaMaximumHeapSize>
</PropertyGroup>
und schon läuft der Build wieder durch.