Poor Man Push II – php Backend mit REST

Nach dem Frontend beschreibe ich hier das Backend zur Speicherung der Abonnements von Push Nachrichten. Ich implementierte es nach dem REST Paradigma. Das Javascript schreibt die Abonnementdaten, die es vom Browser bekommt, per POST in die Ressource pmp.gawehns.de/subscription. Der Webserver speichert diese Daten in einer Datenbanktabelle.

Für den Versand der Push Nachrichten greift ein Programm auf meinem Mac per GET auf pmp.gawehns.de/subscription zu. Der Webserver fragt alle Daten ab und liefert die Abonnementdaten zurück. Das Programm verschlüsselt die Push Nachricht mit dem privaten Schlüssel und schickt diese an den Pushserver. Die Browser mit Abonnement fordern diese Nachrichten dann an. Falls ein Versand fehlschlägt, löscht das Programm den Eintrag per DELETE aus der Ressource pmp.gawehns.de/subscription.

So geht eine Implementierung nach „REST Paradigma“.

  1. Brauche ich dafür ein Framework?
  2. Was ist eigentlich das revolutionäre an diesem doch recht offensichtlichen Ansatz?

„Poor Man Push II – php Backend mit REST“ weiterlesen

Poor Man Push I – das Frontend

Wie mache ich Push Nachrichten ohne eigenen Webserver? Wenn ich den hätte, könnte ich einfach die Libs verwenden und schon kann ich meine Leser per Push über neue Artikel informieren. Ich bin so arm, daß ich meine Webpräsenz bei one.com miete. Damit verfüge ich nur über das php, das alle anderen Mieter auch haben.

Bei WordPress gibt es Plugins, die ich einbauen könnte. Aber die kostenlosen Plugins sammeln Daten per Cookies und machen so ihr Geschäft. In jedem Fall wird das Javascript per importscript(‚xyz‘) geladen. Damit kontrolliert ein anderer, was auf meinen Seiten passiert. In dem Beitrag über die Push Trojaner habe ich untersucht, was damit alles möglich ist. Kann das ein normaler Blogger verstehen, was bei diesen Plugins genau passiert? Immerhin muss er das in seiner Datenschutzseite beschreiben.

Das geht auch einfacher:

  1. Minimales Javascript zum Einbetten in Webseiten
  2. Anmeldungen in die Datenbank auf dem Server
  3. Skript zum Versenden der Push Nachrichten auf meinem Mac

Das Frontend ist so klein, dass ich an dieser Stelle auch ein wenig auf Besonderheiten von Javascript aus Sicht eines Programmierers mit C/Pascal/C++ Background eingehen kann. „Poor Man Push I – das Frontend“ weiterlesen

push client als Trojaner

Obwohl der Client bei der Registrierung angab, alle Push Nachrichten dem Anwender anzuzeigen, braucht er das gar nicht zu machen! Es gibt, zumindest beim Chrome Browser, keine Instanz, die die Einhaltung dieses Versprechens prüft. Das liest sich harmlos. Was soll passieren, wenn der service worker eine Nachricht unterschlägt?

Ich baute das einfache Beispiel unter https://www.gawehns.de/pwa aus. Nun kann ich per Push Nachrichten Befehle senden.

„push client als Trojaner“ weiterlesen

push Nachrichten und ihre Verschlüsselung

Die Service Worker können auch Nachrichten entgegennehmen, wenn die zugehörige Webseite gar nicht offen ist. Das wollte ich als Nächstes ausprobieren. Der Anfang deutete schon an, dass das nicht die ganz einfache Sache war.

Zunächst wollte ich die Notification Funktion einbauen. Damit kann eine Webseite Nachrichten außerhalb des Browsers anzeigen. Anstelle eines Alerts wird eine Nachricht angezeigt. Für den Anfang schien das ein allererster Schritt, der dann Mut macht weiter zu gehen.

Auf dem localhost tippte ich die Javascript Befehle in das index.html. Nach Speichern und Laden staunte ich nicht schlecht über die Weigerung des Browsers. Er ignorierte die Befehle. Ich sah keine „Die Webseite möchten Ihnen Nachrichten schicken“ Mitteilung.

Sollte hier https erforderlich sein? Das sollte wohl doch so schwer nicht sein. Die beim Stackexchange gefundene Anleitung las sich gut. Ich brauchte Zertifikate, damit eine sichere Verbindung aufgebaut werden kann. Das konnte ich alles mit copy&paste erzeugen lassen. Mein Apache ließ sich auch um die nötigen Plugins erweitern, aber Chrome, mein Browser, prüfte die Zertifikate und lehnte sie ab. Sie seien nicht sicher genug sagte er.

Das traf mich dann doch sehr. Vielleicht lag es gar nicht an das https? Geschwind probierte ich die Befehle direkt auf https://www.gawehns.de/pwa aus. Ich wurde gefragt, ob die gawehns.de mir Neuigkeiten schicken durfte. Ich war erleichtert.

Schnell baute ich eine Hallo Welt Anzeige ein und wunderte mich, dass diese nicht zu sehen war. Im Document Root war die richtige Version, den Browsercache hatte ich geleert, aber trotzdem war im Browser die alte Anzeige. Die http Variante zeigte die geänderte Version. Bei https war die alte. Was tun?

Ich chattete mit Julia vom one.com Support. Sie sah bei http und https die gleiche Version. Ihre Frage, ob ich den Browsercache geleert hätte, nervte. Dann aber wies sie mich auf den „Varnish Cache“ hin. Ich sollte diesen ausschalten. So lernte ich, dass der Server noch einen Cache hat, in dem auch statische Daten gecacht werden. Ob das so sinnvoll ist?

Ich las den Hinweis, setze ihn um und freute mich über wenigstens diesen Erfolg. Dann machte ich mit meinen Erkundungen bzgl. der Notifications weiter. Ich lernte so einiges über Kryptographie, Schlüssel und Libs, die man dann einbauen muss, wenn man das kann.

„push Nachrichten und ihre Verschlüsselung“ weiterlesen

Wann laufen die service worker in meinem Browser?

Ich wollte etwas über progressive web apps mit service workern schreiben. Diese service workern stellen Webseiten auch offline zur Verfügung. Seit April 2018 macht hier der MacOS Safari mit. Sie arbeiten im Verborgenen. Nur per Debugger können Sie sie sehen. Im Chrome Browser erreichen Sie den Debugger über das Menü „more Tools/developer tools“. Wenn Sie im Tab application den Eintrag „service worker from other domains“ aufklappen, Sie die Domains, die bei einem Besuch ihre service woker installiert haben. Ich staunte nicht schlecht. Es gab schon eine Menge an Webseiten, die so etwas gemacht haben.

Gefragt werden Sie nicht, ob Sie diese in Ihrem Browser haben wollen. Bei Cookies ist das anders. Obwohl Cookies nur Datenpakete sind und nur durch Software, die auf anderen System läuft, gefährlich werden können. Aber diese Javascript Sachen sind Programme und könnten durchaus auch schädlich sein. In jedem Fall sollte diese Software nur ausgeführt werden, wenn auch die zugehörige Webseite wird. Falls dann ein unbedarfter Softwerker Mist programmiert hat, leiden eben die Webseiten des zugehörigen Domains.

Ich wollte sicher gehen und ein einfaches Lehrbuchbeispiel um log Einträge erweitern, damit jeder den Javascript Code bei der Ausführung beobachten kann.

„Wann laufen die service worker in meinem Browser?“ weiterlesen

C# mit UI per fiddle

„Dann bekommen Sie eine Hausaufgabe, damit der Kunde sieht, wie sie programmieren können“, kündigte der Recruiter schon vor dem Vorstellungsgespräch an. Sie würden das immer so machen, meinte auch der Interviewpartner. Ich war gespannt, was denn da käme.

Was dann kam, hat mich vollkommen umgehauen:


/// <summary> 
/// function to return the place in the magazine level
/// </summary> 
///
/// <param name="places"> Array of bools for dimension n. true means available position, false not available (occupied) </param>
/// <param name="isRotary"> Flag, whether the level is rotary (last position is neigbour of first ) </param>
/// <param name="neededPlaces"> Number of places needed </param>
/// <returns> Index of first position found ( zero based ) or -1 if nothing found </returns>
static public int FindFreePlace(bool[] places, bool isRotary, int neededPlaces) 
{ 
    // Insert the code 
}
Das UI sollte nicht vergessen werden!
Kurz überlegte ich, solch eine Aufgabe aus dem zweiten Semester nicht zu machen. C# wollte ich nicht installieren. Nur wenn es so etwas online gäbe, würde ich das machen.
Ich fand dotnet fiddle!
Die Lösung für die console war trivial und für das UI konnte ich in Model View Controller abtauchen.
Dabei sollte ich einiges über die .Net Welt in Erfahrung bringen.

„C# mit UI per fiddle“ weiterlesen

WordPress Blog im Subdomain soll Domaineinstellungen übernehmen

Ich hatte die Komplexität des Pakets WordPress gesehen. Hier einfach etwas zu ändern, damit das dann passt, war nicht einfach. In dem Fall ist es immer besser, zu schauen, was andere so machen.

Also meldete ich mich im WordPress Forum an und suchte denjenigen, der schon einmal einen Blog in ein Subdomain gelegt hatte und nicht das Logo noch einmal dort speichern wollte.

Yanur Islam Piash hatte vor 9 Monaten genau dieses Problem und fragte in einem Forum, wie er den Link für das Logo setzen kann. Die Antwort kam schnell und verriet, wie Anpassungen von Themes gemacht werden sollten:

„WordPress Blog im Subdomain soll Domaineinstellungen übernehmen“ weiterlesen

Php debuggen

Es galt WordPress zu erkunden. Mein Logo habe ich als URL fest in dem abgeleiteten Template herein gebaut. Damit das Template wirklich ein Template ist, sollte das besser gehen können. Deswegen wollte ich erst einmal herausfinden, wie wordpress und php überhaupt funktioniert.

Bei normalen Programmiersprachen gehe ich dazu in einen Debugger. Der zeigt mir dann, wie die Sachen zusammengebaut werden. Zu meiner Enttäuschung war bei one.com kein php debugger installiert. Auf Anfrage wurde mir gesagt, ich könne ja die Fehlermeldungen einschalten.

Im Internet fand ich den Verweis auf XDebug, der Debug Erweiterung für Php. Der Plan war einfach:

  1. wordpress lokal installieren
  2. Xdebug installieren
  3. In WordPress einsteigen und das Template erweitern.

Das las sich einfach. War es aber nicht.

„Php debuggen“ weiterlesen

Da bin ich

Nun habe ich also meinen WordPress Blog eingerichtet und so ein wenig an meine alte Homepage angepasst. Das war schon eine schwierige Geburt. Es galt Entscheidungen zu treffen.

Das 1-click WordPress installieren lieferte mir eine Vorlage für Yogalehrer, die, neben ihren Kurs- und sonstigen Angeboten, Artikel über sonst etwas schreiben. Die Vorlage war zwar gut, aber ich habe schon eine Homepage, die zwar alt, mir aber ans Herz gewachsen ist. Das wollte ich nicht wegwerfen.

Ich nahm das eher minimale Template „Bhari“. Das hat schon weniger mitgeliefertes. Es ist immer gut bescheiden anzufangen.

Der Blog sollte in einer subdomain laufen. Software.gawehns.de ist seine Heimat. Damit muss die Blogstartseite von www.gawehns.de erreicht werden können. Das war nur ein „<a href= … “ einzutragen.

„Da bin ich“ weiterlesen