WordPress-Desaster

Ein Standbein von mir ist ja Webprogrammierung (auch wenn das Thema in der letzten Zeit immer weniger wichtig wird) und ich lehne mich  aus dem Fenster, dass ich Alles zu HTML und so gut wie Alles zu JavaScript kenne, was es zu wissen gibt. Im Grunde auch zu CSS, soweit es relevant ist. Auch zu CMS wie Joomla! und WordPress sollte ich mich ziemlich gut auskennen. Ich betreibe damit mehrere Seiten und habe dazu diverse Bücher geschrieben und Videotraining aufgenommen. Aber ein grafischer Builder, der als Plugin in einer WordPress-Installation von einer Agentur eingerichtet wurde, hat mich ausgeknockt und den Abschluss einer trivalen Aufgabe sabotiert. „WordPress-Desaster“ weiterlesen

OpenStreetMap statt Google oder Bing

Im Rahmen meiner Vorlesung zur Entwicklung von plattformneutralen Apps mit Cordova an der TH Bingen ist mir aufgefallen, dass die Verwendung des Google Map-APIs nicht mehr so funktioniert hat, wie ich es gewohnt war. Ältere, aber erprobte/getestete Codes haben einen Fehler produziert. Ich stelle den Studenten schon seit ein paar Semestern als eine mögliche Semesterarbeit eine App als Aufgabe, die unter anderem die aktuelle Position in einer Karte zeigen soll. Dabei habe ich bisher Google Maps und als Alternative Bing Maps verwendet. Die jeweiligen APIs ließen sich bisher problemlos verwenden. Nur benötigt man mittlerweile bei neuen Versionen der APIs dafür API-Keys. Die sind zwar kostenfrei zu bekommen (mit ein paar Einschränkungen hinsichtlich der erlaubten Verwendung), aber die Generierung ist dennoch mittlerweile etwas umständlich bzw. ich komme mit den unendlich vielen Details und unübersichtlichen Entwicklerwebseiten einfach nicht klar. Die speziellen Features der neuen Versionen habe ich auch bisher nicht benötigt.

Die Version 2 des Google Maps API hat aber keinen API-Key erfordert und war deshalb sowohl für meine Beispiel-Apps als auch viele Webseiten immer noch eine sehr gute Wahl. Nur das Problem in der Vorlesung beim Verwenden der alten Codes hat mich zu der Info auf den Entwicklerseiten von Google gebracht:

The Maps JavaScript API v2 is no longer available as of May 26, 2021. As a result, your site’s v2 maps will stop working, and will return JavaScript errors. To continue using maps on your site, migrate to the Maps JavaScript API v3. This guide will help you through the process.

Ganz toll – einfach die API-Version eingestellt und die bisherigen Webseiten und Apps sind an die Wand gefahren. Bei Bing Maps war es nicht besser – die alten Codes funktionieren auch nicht mehr.

Oft haben das die Betreiber von Webseiten auch gar nicht bemerkt bisher, denke ich. Gestern war ich auf einer entsprechenden Webseite eines Gleitschirmvereins, wo die Karte nicht mehr funktioniert. Klar – man kann argumentieren, dass Entwickler die Verantwortung haben, die Funktion ihrer Produkte regelmässig zu kontrollieren. Aber das ist m.E. nur die eine Seite der Medaille. Man kann auch argumentieren, dass es eine Art „Bestandschutz“ gibt. Was einmal getestet ist, sollte auf Dauer funktionieren. Da sieht man mal wieder, in welche Abhängigkeiten man sich begibt, wenn man fremde Ressourcen und Leistungen nutzt. Die aktuellen Probleme bei einigen Cloud-Anbietern passen in diese Problematik.

Und me culpa – auch auf einer meiner Seiten hatte ich eine Karte mit dem Google Maps API, die nicht mehr korrekt angezeigt wurde und was ich bisher nicht bemerkt hatte – es hatte sich bisher auch kein Besucher beschwert.

Einer meiner Studenten hatte sich vor einigen Tagen wegen dieser ganzen Umstände mit dem Google Maps bzw. Bing Maps API so geäußert, dass er auf OpenStreetMap umsteigen würde. Fand ich eine gute Idee und deshalb hatte ich schon vor ein paar Tagen damit sowie Mapbox experimentiert. Auch in Verbindung mit einer Django-Webseite, weil ich die nächsten Wochen dazu ein Videotraining bei  LinkedIn Learning einspielen will, wo ich diese Techniken in Beispielen nutzen will.

Aber erst einmal habe ich jetzt die Webseite, die ich betreue, auf OpenStreetMap umgestellt.

Die Seite arbeitet mit Joomla! und da taugt das OSModul ziemlich gut, um auf einfache Weise eine Karte von OpenStreetMap in eine Webseite zu integrieren.

 

Doppelschlag

Dieser Mittwoch bietet Anlass zur doppelten Freude :-).

  1. Mein regelmäßiger wöchentlicher Entwickler-Tipp zu Python ist da und behandelt diese Woche das Top-Level-Script-Environment. Dabei geht es darum, wie man die oberste Ebene einer Python-Anwendung zur Laufzeit identifizieren und wie man mit einigen magischen Elementen das Verhalten beim Aufruf steuern kann.
  2. Der zweite Anlass der Freude 😉 ist, das wieder einmal ein Buch bzw. Schulungsheft von mir erschienen ist. Beim Herdt-Verlag veröffentliche ich ja seit mehreren Jahren regelmäßig solche Schulungsunterlagen oder lektoriere manchmal auch fachlich andere Unterlagen. Einige Unterlagen sind dabei von Grund auf von mir, aber diverse habe ich irgendwann übernommen und aktualisiert.
    Das gerade erschienene Buch bzw. Schulungsheft zu Joomla! 4 ist so eines, was ich vor vielen Jahren (2015) schon übernommen und damals auf die Version 3 aktualisiert hatte. Nun hat sich die Entwicklung von Joomla! 4 jedoch ewig hingezogen, aber Ende August ist die neue Version endlich erschienen und wir sind damit just-in-time mit dem Buch zu Joomla! 4 auf dem Markt. Natürlich habe ich mit Vorversionen von Joomla! 4 gearbeitet, aber die waren schon so gut wie fertig und bei der Überarbeitung habe ich gegengeprüft. Genaugenomen hatte ich schon 2020 mit der Überarbeitung begonnen, weil ich mit einer Fertigstellung von Joomla! 4 in dem Jahr fest gerechnet hatte. Schon da war das Projekt weit hinter der Roadmap zurück. Aber nachdem sich die Verzögerung in der Fertigstellung nicht mehr in Tagen oder Wochen und eigentlich auch nicht Monaten, sondern eigentlich nur in Jahren spezifizieren lies, habe ich Ende 2020 die Überarbeitung erst einmal eingestellt. Zumal die Vorversion zu dem Zeitpunkt auch noch unausgereift waren, wie mir bei der Arbeit damals deutlich wurde. Diesen Sommer hatte ich aber sowohl wieder Zeit und auch die Vorversionen von Joomla! waren endlich soweit, dass das Erscheinen der Finalversion greifbar wurde. Und so sind wir wie gesagt mit dem heutigen Tag mehr oder weniger just-in-time fertig geworden :-).

CronTab, Schedule und Python

Nachdem ich vor ein paar Wochen meinen neuen V-Server auch gleich auf eine neue Version von Ubuntu umgestellt hatte, musste ich sämtliche Webseiten wieder neu einspielen. Bis auf meine Webseite zum Gleitschirmfliegen, in der ich eine Webcam und Wetterdaten von einem Flughang bereitstelle, konnte ich auch alle Seiten problemlos wieder einspielen. Nur diese Seite (ein Joomla!-System) hatte herumgezickt und deshalb habe ich sie einfach neu aufgesetzt (jedoch mit WordPress). Aber ein Feature habe ich da auf die Schnelle nicht hinbekommen – das Kopieren und Sichern des aktuellen Bildes der Webcam, das minütlich mit FTP auf meinen V-Server geladen wird.

Es ist aber ganz hilfreich, wenn man über eine gewisse Zeitspanne verfolgen kann, wie etwa schon vor Ort befindliche Gleitschirme oder Windfahnen sich verhalten, um zu entscheiden, ob sich ein Tripp an den Hang lohnt. Ich wurde sogar explizit gebeten, dieses Feature wieder bereitzustellen.

Die originalen PHP-Skripte hatte ich noch alle, aber das Zeug war so zusammengefrickelt (wie so oft), dass ich erst einmal meine eigenen Codes nicht mehr verstanden habe.

Aber da ich parallel im Moment Themen sammle, die ich irgendwann in meinen wöchentlichen Tipps & Tricks zu Python bei LinkedIn Learning (LiL) verwenden kann, kam ich auf die Idee, das Kopieren doch mit Python statt mit PHP zu machen sowie auch das Schedulen vielleicht auch gleich mit Python. Es gibt ja dazu das sched-Modul und/oder die klassischen Module shutil, datatime und time. Dazu gibt es noch in der Community das zusätzliche Module schedule. Also habe ich mich damit eine Weile beschäftigt. Allerdings kam ich darüber über kurz oder lang auch auf die eigentlichen Crontabs von Linux/Unix. Und wenn man die genauer ansieht, ist es fast einfacher, die direkt zu schreiben, als sie von einem Framework wie dem schedule-Modul generieren zu lassen.

Auf der anderen Seite musste ich zudem noch meinen V-Server weiter konfigurieren. Dabei habe ich auf dem Weg nano nachinstalliert, denn ich greife ja per SSH auf den V-Server zu und mit Erschrecken festgestellt, dass da bisher mir nur vim zur Verfügung stand. Also so rudimentär will ich doch nicht mehr arbeiten.

In der Folge habe ich meine neu erstellen Python-Skripte zum Kopieren der Dateien und dem täglichen Löschen des Verzeichnisses (mein Server soll ja nicht volllaufen) hochgeladen und in die CronTab direkt eingebunden. Das geht ganz einfach und logisch, wenn man sich von der Syntax nicht abschrecken lässt.

  • crontab -e öffnet die CronTab-Datei.
  • Wenn man mit nano arbeitet, kann man mit Strg+o die Datei speichern und mit Strg+x den Editor verlassen. Mehr braucht man da eigentlich nicht zu wissen.
  • Mit crontab -l kann man sich alle Cronjobs anzeigen lassen und
  • mit crontab -r bei Bedarf alle Cronjobs löschen (was aber brutal ist, weil direkt alles weg ist).

Die eigentlichen Einträge in der CronTab sehen etwa so aus:

# m h dom mon dow command
*/2 8-20 * * * python3 [pfad]/copierereichenbach.py >> /var/www/vhosts/rjs.de/rb.autoren-net.de/thumb/log.txt
* 5,23 * * * python3 [pfad]/loeschereichenbach.py

Das kopiert dann alle 2 Minuten in der Zeit von 8 bis 20 Uhr das aktuelle Bild der Webcam und um 5 und 23 Uhr wird das Verzeichnis gelöscht.

In Python selbst arbeite ich mit shutil.rmtree() und os.mkdir() beim Löschen des Verzeichnisses. Einfach alles weghauen und dann das Verzeichnis neu erstellen.

Beim Kopieren nehme ich shutil.copy2() und hänge an den Standarddateinamen einfach einen Timestamp an der von datetime.datetime.now().timestamp() geliefert wird.

Das Anzeigen der Bilddateien mache ich natürlich weiter mit PHP – da konnte ich eines meiner altern Skripts nach einer kleinen Anpassung wieder verwenden.

Server-Umzug abgeschlossen

Der Umzug meines V-Servers sollte jetzt fertig sein. Der E-Mail-Server läuft und ist hinreichend konfiguriert. Der Spamschutz scheint besser wie vorher zu sein und auch die Kommunikation mit einer E-Mail-Adresse, die bisher nie durchging, hat eben funktioniert.

Soweit ich das sehen kann, sind jetzt auch alle Webseiten von mir wiederhergestellt und gleich mal auf den neusten Stand aktualisiert. Die unwichtigste Seite hat – natürlich ;-(  – die meiste Arbeit gemacht. Aber ich habe zumindest wieder etwas zu der Bedeutung von Eigentum und Gruppenzugehörigkeit unter Linux (und auch WordPress) gelernt und diverse Linux-Shell-Befehle geübt. Bisher war ich wirklich so naiv und dachte, dass Dateirechte die entscheidenden Stellen sind und man spätestens mit 755 auf der sicheren Seite hinsichtlich der Ausführung, dem Zugriff und ggfl. Schreiben in entsprechende Verzeichnisse auf dem Server sein sollte, wenn man Webseiten bereitstellt. Ich habe wegen diverser Probleme eine gefühlte Ewigkeit erfolglos mit den Schreibrechten herum experimentiert (sowohl über FTP als auch direkt per SSH mit chmod bis hin zu 777), bis mir aufgefallen war, dass bei den Webseiten ohne Probleme ganz andere Eigentumsrechte und Gruppenzugehörigkeiten da waren als bei denen mit Problemen. Da lag der Hase im Pfeffer und root ist nicht immer root (zumindest nicht im universellen Sinn – der root des SSH ist nicht immer der root der Webserver oder gar irgendeiner Verwaltungssoftware wie Plesk). Admin fuddeln vielleicht da rum – unglaublich.

Mit chown -R für den Eigentümer und chown : für die Gruppenzugehörigkeit haben sich dann aber (fast) alle Probleme in Luft aufgelöst. Nur die Zugriffs- bzw. Rechteprobleme bei der unwichtigsten Seite (einem Joomla!-System) habe ich einfach nicht in Griff bekommen. Die Seite habe ich dann kurzentschlossen komplett neu aufgesetzt (jetzt aber als WordPress-System) und dann einfach die wichtigsten Inhalte aus meiner lokalen Sicherung eingefügt.

Und da ich gerade dabei war, habe ich auf dem neuen V-CordovaServer Docker angeschaltet und gleich mit meinem Cordova-Skript für die kommende Vorlesung an der TH Bingen getestet. Das ging wie Butter durch ein heißes Messer – oder auch umgekehrt. Alle notwendigen Programme und Bibliotheken wurden problemlos (und fix) installiert und der Container ist sofort gelaufen. Das konkrete Erstellen der Cordova-App für eine Android-Plattform ging ebenso perfekt. Ich habe mich dann noch von einem anderen Rechner per SSH auf dem Server eingeloggt und aus dem Terminal die generierte App aus dem Docker-Container auf das Host-System kopiert. Null Problemo. Unter Linux läuft so Zeug die Docker einfach perfekt.

Ich komme immer mehr auf den Geschmack, meine Kenntnisse um Docker etwas zu intensivieren und zudem mehr mit dem Server zu machen als bisher.

XML – Kurz und bündig – mein neustes Buch

XML - Kurz und bündig
XML – Kurz und bündig

Ich habe in den Wochen vor dem Jahresende so langsam meine Schulungen zurückgefahren, um einmal etwas zur Ruhe zu kommen und andererseits Zeit für die Überarbeitung meiner Joomla!-Schulungsunterlagen beim Herdt-Verlag zu haben.

Nur gibt es massive Verzögerungen bei der Veröffentlichung der Version 4 von Joomla! und es macht wenig Sinn, die Überarbeitung auf die Betaversion von Joomla! aufzubauen. Also habe ich die frei gewordene Zeit genutzt und mein ganzes bereits über die Jahre gesammeltes Material zu XML in eine Buchform gegossen. Auch wenn ich normalerweise für grosse Verlage Bücher schreibe, publiziere ich hin und wieder auch im Selbstverlag. Bisher habe ich auf diese Weise bereits ein Buch zu HTML und eines zu Cobol veröffentlicht. Hier gibt es nun mein neustes Buch zu XML.

Das ist die Eckdaten:

  • ISBN: 9783753133423
  • Format: DIN A5 hoch
  • Seiten: 128
  • Erscheinungsdatum: 13.12.2020

Das Buch wurde ein Lehrbuch für den Einstieg in XML. Es soll sowohl beim Selbststudium helfen als auch Basis dafür sein, in entsprechenden Kursen XML zu lernen. Der Fokus liegt auf dem Erstellen von XML-Dokumenten und dem Verstehen der Logik und Syntax. Aber auch die Validierung von XML-Dokumenten wird gezeigt und, was man mit XML in der Praxis machen kann. Das Buch wendet sich im Wesentlichen also an Leser, welche die Erstellung sowie das Lesen und Verstehen von XML-Dokumenten als auch Anwendungen mit einer XML-Basis (z.B. SVG, XHTML, Datenbank-Export und -Import, Erstellung grafischer Oberflächen, etc.) lernen wollen. Es ist also explizit ein Einsteigerbuch geworden.