Wer besucht meine Webseite?

Als Betreiber will man ja wissen, ob eine Webseite auch genutzt wird. Es wäre doch schön, eine Lampe im Regal stehen zu haben, die bei jedem Besucher aufleuchtet. Dazu habe ich heute mal experimentiert. Fertig ist es nicht, aber zumindest ein Ansatz:

Um so etwas zu realisieren, bruacht man zunächst einen Computer, der so eine Lampe ansteuern kann – zum Beispiel einen Raspberry Pi. Der muss natürlich aus dem Internet erreichbar sein. Dazu braucht er einen DynDNS-Service (zum Beispiel https://afraid.org), und eine Portweiterleitung im heimischen Router. Außerdem muss ein Webserver (z.B. Apache) installiert sein – und irgendwas, um die Lampe einzuschalten.

Der Webserver sucht nach Daten normalerweise im Ordner /var/www/html, wo ich folgende Dateien erstellt habe:

franz@cloud:/var/www/html $ ls -al
insgesamt 68
drwxrwxr-x 4 www-data www-data  4096 10. Jul 11:48 .
drwxrwxr-x 7 www-data www-data  4096 31. Mär 20:24 ..
-rw-r--r-- 1 franz    franz      433 10. Jul 11:37 img.php
-rw-r--r-- 1 franz    franz    32239 10. Jul 10:32 img.png
-rwxr-xr-x 1 franz    franz      226 10. Jul 11:48 myPythonScript.py
-rw-r--r-- 1 www-data www-data   223 10. Jul 12:18 visitors.txt

Die Wichtigste Datei ist img.php. Die ist in PHP geschrieben, einer Scriptsprache, die der Webserver ausführen kann. Sie macht zwei Dinge:

  • sie liefert dem Browser ein Katzenbild (img.png) zurück
  • sie ruft das Python-Script myPythonScript.py auf.

Im Moment übergibt sie dem Python-Script auch noch die IP-Adresse des Browsers – wenn man nur eine Lampe einschalten will, ist das natürlich nicht erforderlich.

So sieht das PHP-Script aus:

<?php

# execute the python script that will do something
$output=null;
$retval=null;
$arg = $_SERVER['REMOTE_ADDR'];
$cmd = './myPythonScript.py ' . escapeshellarg($arg);
exec($cmd , $output, $retval);


# return an image
$name = 'img.png';
$fp = fopen($name, 'rb');
header("Content-Type: image/png");
header("Content-Length: " . filesize($name));
fpassthru($fp);
exit;

# do not close <php-tag, it might mess up the returned image

Die eigentliche Arbeit wird von dem Python-Script myPythonScript.py gemacht. Da ich keine Lampe habe, die ich einschalten könnte, habe ich mich stattdessen entschlossen, die Besucher in eine Datai mitzuloggen. Das Script sieht so aus:

#!/usr/bin/python3

# read parameters
import sys
visitor = "<unknown>"
if len(sys.argv) == 2:
	visitor = sys.argv[1]

# Append to file
f = open("visitors.txt", "a", encoding="utf-8")
f.write(visitor + " was here\n")
f.close()

Damit PHP das Python-Script ausführen kann, müssen mehrere Dinge beachtet werden:

  • Das Script muss als ausführbare Datei gekennzeichnet sein – erkennt man an dem x in der Verzeichnisliste, und macht man mit dem Shell-Befehl chmod ugo+x myPythonScript.py
  • Das Script muss mit dem sog. Shebang in der ersten Zeile anfangen, damit das System weiß, dass es ein Python-Programm ist
  • Es muss natürlich Schreibrechte in die Datei visitors.txt haben. Der Webserver wird als Benutzer www-data ausgeführt, und diesem Benutzer sollte im einfachsten Fall auch die Datei gehören. Normalerweise ist das der Fall, weil das Script die Datei selbst anlegt.

Es sollte sehr einfach sein, das Script so anzupassen, dass es stattdessen eine Lampe einschaltet. Schwieriger dürfte es werden, die Lampe wieder auszuschalten – das Script sollte nämlich so schnell wie möglich beendet sein. Es kann also nicht einfach eine Zeit lang warten, und die Lampe dann wieder ausschalten. Außerdem gäbe das auch Probleme, wenn zwei Besucher kurz nacheinander auf die Webseite kommen.

Nun muss man nur noch dafür Sorgen, dass das PHP-Script auch aufgerufen wird. Dazu wird das Bild einfach in die Webseite eingebunden:

<img src="https://myRasperryPi.afraid.org/img.php" />
Hier sollte eine Katze zu sehen sein, und Deine IP-Adresse ist jetzt geloggt.
Katze

Deine IP-Adresse steht jetzt in meinem Logfile…

Fortune Cookies

Fortune Cookie Machine
Fortune Cookie Machine

In Japan gibt es ja alles, was man sich vorstellen kann. Und alles andere auch. Das hier, zum Beispiel, ist ein Fortune Cookie Automat. Man wirft 200 Yen ein, und sofort geht die kleine Priesterin mit Licht- und Soundeffekten in den Tempel, und kommt nach kurzer Zeit mit einer kleinen Schriftrolle zurück.

Die Schriftrolle enthält viele gute Ratschläge. In den USA kennt man das als Fortune Cookies, weil die chinesischen Restaurants dort Kekse mit solchen Schriftrollen drin als Nachtisch servieren. Die chinesischen Restaurants in China machen so etwas im Übrigen natürlich nicht.

Aber die Japaner sind ja Perfektionisten, und daher wird so eine japanische Maschine bestimmt einen Grund haben, warum sie mir gerade jetzt genau diesen Spruch geliefert hat:

Head north! Make sure to take as much medicine and supplement as possible.

Nara

Letztes Wochenende war endlich mal schönes Wetter, und ichhabe es genutzt, um nach Nara zu fahren.

Nara ist von Osaka mit dem Zug sehr bequem zu erreichen, Es war mal die Hauptstadt von Japan und ist heute ein beliebtes Ziel für Touristen: es hat große, sehenswerte Tempelanlagen, die idyllisch im Wald am Fuß eines Hügels liegen, große Parks und eine lebendige Innenstadt. Und Rehe.

Die Rehe, hunderte davon, wohnen in den Parks und leben von den Touristen. Also, von den Keksen, die die Touristen dabei haben. Es gibt überall Reh-Keks-Verkäufer mit Wagen voll Keksen. Kein Reh interessiert sich dafür. Aber sobald ein Tourist sich einem Verkäufer nähert, sehen sie das. Und dann kommen sie in Scharen und machen dem Touristen klar, daß sie die Kekse haben wollen, und zwar jetzt.

Sie schubsen, ziehen und beißen, bis sie alle Kekse bekommen haben. Dann sind sie wieder friedlich.

Also: Wenn man in Japan ist, Nara unbedingt besuchen – aber weg bleiben von den Keksverkäufern!

Nara: Tourist wird von Rehen gefressen
Nara: Tourist wird von Rehen gefressen

Wochenende in Osaka

Juhu, es ist wieder Wochenende! Ich bin in Osaka und habe zwei Tage frei! Was ich da alles machen und anschauen kann!

Allerdings soll es wieder regnen. Es hat bisher fast jedes Wochenende geregnet. Das Wetter in Japan ist auch nicht mehr so, wie ich das in Erinnerung habe. Wenigstens ist es unter der Woche noch schön, wenn ich arbeiten muss.

Aber man kann ja sicher auch bei Regen was unternehmen, Mal im Internet recherchieren:

Osaka ist wegen Corona-Virus geschlossen

Sieht aus, als wird das ein langweiliges Wochenende.

Toastbrote

Straße in Frankfurt
Straßenszene in Frankfurt

Neulich musste ich mal wieder mit dem Auto nach Frankfurt. Das versuche ich immer zu vermeiden: für meinen Geschmack ist da zu viel Verkehr, zu viele Ampeln, zu viel Stau und zu wenige Parkplätze.

In Japan ist das ganz anders: da sieht man kaum Autos, selbst in der Innenstadt von Tokio. Das Handelsblatt hat das in dem Artikel „Autos, die wie Toastbrote aussehen“ mal erklärt:

  • Man darf nicht am Straßenrand parken
  • Man kann kein Auto kaufen, ohne vorher einen Parkplatz nachzuweisen
  • Leichtkraftwagen sind steuerlich begünstigt
  • Beim Autokauf fällt eine gewichtsabhängige Steuer an

Der Artikel vergisst, das gut ausgebaute und zuverlässige Bahnnetz zu erwähnen. Und er hinterlässt bei mir den Eindruck, als würden die Autoren diese Regeln am liebsten abgeschafft haben, schließlich behindern die ja den internationalen Handel.

Ich denke eher, man sollte diese Regeln auch bei uns einführen. Eine Stadt ohen Autos ist einfach schöner.

Straße in Japan
Straßenszene in Japan

SLIGHTLY FROWNING FACE :-(

Ich wollte jetzt eigentlich was über Emojis schreiben. Smilies, oder eigentlich Emoticons, kennt man seit den frühen Tagen des Internets. Das waren einfache ASCII-Sequenzen, mit denen man in e-Mails Gefühle oder Stimmungen ausgedrückt hat, angefangen vom einfachen glücklichen Gesicht (-: bis zum aufwändigen whatever-Emoticon. ¯\_(ツ)_/¯

Ich war immer der Meinung, die Emojis die man heute in Foren, Chats und Tweets findet, wären einfach kleine Grafiken, die die jeweilige Software anzeigt, wenn sie so einen ASCII-Smily findet. Aber Emojis sind mittlerweile offizieller Bestandteil von Unicode.

Unter Linux kann man Emojis über die Tastatur eingeben, wenn man den Unicode-Codepoint kennt: <CTRL-SHIFT-u>1F60E fügt ein SMILING FACE WITH SUNGLASSES ein. Unter Windows soll das mit 1F60E<Alt-x> funktionieren. Außerdem gibt es für beide Betriebssysteme Programme, um Emojis per Mausklick einzufügen.

Damit stehen alle Möglichkeiten offen: Man kann Emojis nicht nur in Whatsapp verwenden, sondern überall. e-Mail, Dateinamen, WLAN-ssid, URLs, etc.
Mein Versuch, eine Emoji-Domain zu registrieren, ist aber gescheitert: in Domain-Namen sind Emojis derzeit nicht zugelassen.

Die Auswahl an Emojis ist übrigens nicht auf lachende oder weinende Gesichter beschränkt. Es gibt außerdem Tiere, Gebäude, Fahrzeuge, Nahrungsmittel, Flaggen, und noch viel mehr. Und wenn das nicht reicht, dann gibt es die „skin Tone modifier“ (1F3FB bis 1F3FF) und „hair components“ (1F9B0 – 1F9B3)

Und wenn das immer noch nicht reicht, dann gibt es den „zero width joiner“ 200D. Damit kann man Emojis kombinieren. So ergibt die Sequenz 1F473-200D-2640-FE0F (person wearing turban – joiner – female sign – variation selector) eine Frau mit Turban, und 1F468 – 200D – 2708 (man – joiner – airplane) ergibt einen Pilot.

So ganz durchdacht kommt mir das nicht vor. So gibt es das Zeichen 1F473 „person wearing turban“, das sich mit „male sign“ oder „female sign“ variieren lässt. Viel logischer als „person wearing turban – joiner – male“ wäre „man – joiner – turban“ gewesen.

Aber wenn man schon dieses Muster „person – joiner – male“ verwendet, warum gibt es dann 1F742 „man with chinese hat“ oder 1F5D9 „woman with headscarf“, wo man das Geschlecht nicht ändern kann? 1F9D4 „bearded person“ scheint wieder in das Muster zu passen, aber auch hier lässt sich das Geschlecht nicht ändern.
Weitere Beispiele:

  • Eine Mechanikerin wird aus „woman – joiner – wrench“ zusammengesetzt, eine Magierin aber aus „mage – joner – female – variation selector“.
  • Eine blonde Frau ist „blond haired person – joiner – female“. Eine Frau mit Locken ist „woman – joiner – curly hair“

Und warum kommen in diesem Text keine Beispiele vor? Weil WordPress den Artikel nicht abspeichern will, sobald ich ein Emoji einfüge.

1F926 1F3FD 200D 2642 FE0F man facepalming: medium skin tone

Japan: Im Restaurant

In Japan im Restaurant zu essen ist eigentlich ganz einfach.

Sobald man zu Tür hereinkommt, kommt auch schon eine Kellnerin und führt den Gast zu einem freien Tisch. Man darf natürlich nicht den Fehler machen und zu den Stoßzeiten kommen, denn dann kann es leicht passieren, daß man sich nur in eine Liste eintragen darf und dann warten muß, bis ein Tisch frei wird.

Am Platz angekommen sieht man dann das hier:

Die Speisekarte liegt schon am Tisch bereit. Einige Restaurants haben auch englische Speisekarten, aber dank der vielen Bilder braucht man die eigentlich nicht. Anders als bei uns bleibt die Speisekarte nach dem Bestellen auch am Tisch. Wenn man also feststellt, daß man doch noch einen Nachtisch essen könnte, kann man direkt nachschauen, was es so gibt.

Die Kellnerin kommt dann sofort nochmal mit kostenlosem Leitungswasser oder Tee. Alle anderen üblichen Getränke gibt es natürlich auch.

Wenn man etwas zu essen gefunden hat, drückt man kurz auf den Klingelknopf, und sofort kommt jemand. Sie tippt dann die Bestellung direkt in ihren kleinen Computer ein, und liest sie hinterher nochmal vor, das vermeidet Missverständnisse. Zumindest, wenn man die Sprache kann.

Das Essen kommt dann meist relativ schnell, aber selten in einer sinnvollen Reihenfolge. Die Vorspeise zuerst, und etwas später die Hauptspeise – das wäre schön, ist aber offenbar nicht vorgesehen. Stäbchen, Gewürze und Servietten stehen in einer Ecke auf dem Tisch bereit.

Zusammen mit dem letzten Essen kommt auch die Rechnung. Dafür steht auf dem Tisch extra ein Rechnungshalter. Man zahlt an der Kasse. Trinkgeld ist unüblich – die Japaner geben sich auch so größte Mühe, ihren Job perfekt zu erledigen.

Ein kurzes Mittagessen ist so für 10€ möglich, und muss kaum 20 Minuten dauern. Vielleicht ist das einer der Gründe dafür, daß man in Japan deutlich öfter Essen geht als bei uns (wofür ich leider keine belastbare Statistik gefunden habe).