05
Okt 19

Navigation im Archiv: Alte Webserversicherungen zu Leben erwecken – Teil 3

Die Verzeichnis-Indexierung ist auf dem Webserver deaktiviert. Das könnte ich ändern und hätte damit meine Möglichkeit, die Verzeichnisse zu durchbrowsen. Reizvoller war es für mich, mir selbst ein kleines Script zu erstellen, dass die Inhalte auflistet. Insbesondere da in meinem Kopf die Idee herumschwirrt, die Liste später mit Screenshots anzureichern.

Unter Zuhilfenahme der Lösung der StackOverflow-Frage „How to list directories, sub-directories and all files in php“ (Lösung von Tomás Aresak Malcánek1, 17.10.2015) schnell etwas zusammengezimmert und „schöner“ gemacht. Hier nur der relevante PHP-Code.

function list_folder_content($path) {
  $items = scandir($path);
  $folder = explode("/", getcwd());
  echo "<h1>" . $folder[array_key_last($folder)] . "</h1>";
  echo "<ul>";
  foreach($items as $item) {
    if ($item != ".") {  // ignore "."
      // list files
      if (is_file($path . $item)) {
        echo "<li class=\"file\"><a href=\"" . $item . "\">" . $item . "</a></li>";
      } 
      // list folders
      else { 
        echo "<li ";
        if ($item == "..") echo " class=\"up\""; // special class for "directory up"
        echo "><a href=\"" . $item . "/\">" . $item . "</a></li>";
      } 
    }
  }
  echo "</ul>";
}
 
list_folder_content("./");

Praktischerweise funktioniert Pawel Kazakows portables Programm pkColorPicker auch nach 9 Jahren wie ich es gewohnt bin und ermöglicht mir die einfache Farbauswahl.

Mit dem Web-Generator ICONSVG von Gaddafi Rusli habe ich an mein Farbkonzept angepasste Icons für die Ordnerliste erstellt.

Problem: Das Script muss in allen Ordner liegen, in denen das Verzeichnis gelistet werden soll. Da ich nicht ständig neu kopieren möchte, dachte ich zuerst an einen symbolischen Link. Ad hoc ließ sich dies mit der existierenden Berechtigungsstruktur nicht einstellen, da für den Administrator das Netzlaufwerk nicht eingebunden ist.

Lösung: In den Ordnern, die ebenfalls den Script anzeigen sollen, liegt eine index.php, welche das eigentliche Script includiert:

$index = "#absoluter/Pfad/zum/Script#";
if (file_exists($index)) {
  include ($index);
}

Damit die Einbindung auf diversen Ebenen funktioniert, muss der Pfad absolut angegeben werden. Sicherlich gibt es da elegantere Lösungen… aber elegant ist im Moment nicht mein Ziel. Mit dieser kleinen Lösung muss ich das Script nur an einer Stelle warten.

Offene Punkte

  • Blog-Font updaten, damit alle Zeichen angezeigt werden
  • Bildvorschau für Ordner
  • Administrator-Shell: Zugriff auf Netzlaufwerke
  1. Es tut mir Leid, die aktuell verwendete Schriftart scheint die benötigten Zeichen nicht zu unterstützen – deswegen die Vereinfachung der Schreibweise []

04
Okt 19

Die Überreste einer einst an 3. Traffic-Stelle stehenden Webseite

Es sollte keine große Überraschung sein, dass die Langzeitverfügbarkeit von Internetinhalten eher so „mäh“ ist. In den letzten Jahrzehnten hat sich das Netz stark verändert. Das Silomodell machte Schule – vieles Eigene wurde Zugunsten der Plattformen aufgegeben und wer kann schon sagen, Herscher:in seiner eigenen Daten zu sein.

Natürlich gab es schon früher Plattformen. Einige davon verschwanden obwohl sie einmal der Platzhirsch waren. Populärstes Beispiel wahrscheinlich GeoCities, welches 2009 seinen Dienst einstellte. Einige Projekte machten es sich zum Ziel wenigstens einen Teil dieser Netzgeschichte zu bewahren. Wer sich für Details interessiert, sei auf das Wiki des Archive Teams verwiesen, welche GeoCities für die Nachwelt erhalten haben.

Die Sicherung des damaligen Homepage-Planeten brachte durchaus Kuriositäten hervor, wie z.B. GifCities1, wo man heute, bei vorhandener Geduld, damals eingesetzten Wackelbildchen durchsuchen kann. Andere Projekte (z.B. ReoCities) haben inzwischen selbst das Zeitliche gesegnet.

Was Künstler aus dem GeoCities-Archiv gemacht haben, kann man im Artikel „The Impulse of the Geocities Archive: One Terabyte of Kilobyte Age“ von Daniel Rourke (16.05.2013) über Olia Lialina und Dragan Espenschied und ihr Projekt One Terabyte of Kilobyte Age nachlesen. Meghan McDonough & Marcie LaCerte haben das Thema in diesem Jahr (20.09.2019) erneut aufgegriffen und berichtet in „The early internet is breaking—meet the people saving it“ ebenfalls über das Künstlerpaar.

Version 1.5 meiner ersten Homepage, natürlich mit Marquee-Effekt. Nicht im Bild: Farblich angepasste Scrollbalken. Ein Feature, welches nur der damals innovative IE beherrschte.

Erwähnt wird im Video/Artikel auch das Open Source Archivierungswerkzeug Webrecorder.io. Der ebenfalls von Rhizome, „Serviceleister“ für digitale Künstler, entwickelte Webrecorder Player könnte eine Option für mein eigenes Archivierungsproblem sein.

Edit: Oh je, ich bin Clickbait-geschädigt und produziere jetzt auch schon solche fürchterlichen Überschriften -_-“

  1. Katzengifs aus den 00er Jahren – anyone? []

03
Okt 19

Das Problem mit den dynamischen Inhalten: Alte Webserversicherungen zum Leben erwecken – Teil 2

Die Wahl haben zwischen Neuschreiben von altem Code oder doch Container anlegen, die mit alten PHP/MySQL-Versionen laufen. Es gibt noch eine dritte Möglichkeit, die jedoch voraussetzt, dass die Sicherungen auf den alten portablen Webservern unter WinXP noch einwandfrei funktionieren (was sie nur bedingt tun): Eine statische Sicherung der PHP-Ausgaben.

Alle drei Mölichkeiten sind mehr oder weniger – sehr – zeitaufwändig. Reverse Engineering hat das Problem, dass ich sowohl vor 10+ Jahren als auch jetzt ein absoluter Noob bin, was das Schreiben ordentlichen Codes angeht. Damals, weil es neu war – und heute, weil ich zuletzt vor etwa 10 Jahren wirklich aktiv gecoded habe. Seitdem ist viel passiert.

Mit einer steigenden Komplexität des Codes – Frameworks, Bibliotheken wird die Entwicklung einfacher/strukturierter – niemand muss das Rad mehr neu erfinden – doch die Komplexität dahinter steigt: viele Abhängigkeiten. Wird alles noch gewartet? Die Wetten, wie es in einem Jahr aussieht sind klar.

Trotz allem Aufwand wollte ich eines der Projekte wieder zum Leben erwecken. Was hat sich im letzten Jahrzehnt in PHP verändert? Wie funktionieren neue Funktionen? Es hat etwas befriedigendes, wenn dann nach und nach die PHP-Fehler verschwinden und die eigentlichen Inhalte ausgegeben werden. Und doch auch die traurige Gewissheit, dass es nicht sinnvoll ist, sämtlichen schlechten Code von damals in einer vermutlich ebenso schlechten Version wieder zum Leben zu erwecken. Bleiben die Optionen 2 und 3.


03
Okt 19

In die Kaninchenhöhle gefallen: alte Webserversicherungen zum Leben erwecken – Teil 1

Wenn nach langem Wunsch endlich ein Server zu Hause steht und die Idee aufkeimt, die Historie der eigenen Webseiten aus den Backups und portablen Webserver-Sicherungen an einer Stelle zusammenzuführen … und wieder zum Laufen zu bringen. Schließlich gibt es nichts schöneres, als sich über die Sünden der Vergangenheit zu amüsieren ^-^ – Augenkrebs und so (Hier am Beispiel der Crazylounge anno 2001).

Problem: Portable Webserver laufen nicht mehr. Genauer gesagt, die MySQL-Datenbank funktioniert unter Windows 10 nicht.

Versuch 1: Glücklicherweise funktioniert die Windows XP VM, welche ich bis vor gar nicht all zu langer Zeit noch zur Nutzung des Scanners einsetzte, nach wie vor einwandfrei. Der Webserver startet dort, inklusive Zugriff auf die MySQL-Datenbanken & phpMyAdmin. Dumm nur, dass in dem funktionerenden Webserver die betroffenen Datenbanken doch nicht drin waren.

Versuch 2: Internet-Suche bringt mich zur Anleitung „Recovering MySQL Files and Database Tables“ von Hetman Software. Mit Hilfe von MySQL Workbench können auch Datenbanken exportiert werden, deren Ordner aus dem ursprünglichen mysql-Verzeichnis in den mysql-Ordner einer bestehenden Datenbank hineinkopiert werden.

Nächster Schritt: Eine bestehende Datenbank muss her, also Docker-Container aufsetzen. Dieses Mal nicht in der Konsole sondern aus Bequemlichkeit direkt im Synology-Docker-Interface. Nicht vergessen die Variable MYSQL_ROOT_PASSWORD zu setzen.

Einrichten einer neuen Verbindung in MySQL Workbench: Hostname entspricht dem hostnamen des Servers, Port kann über docker ps herausgefunden werden. Klappt. Jetzt müsste ich die Ordner in den data-Ordner der Datenbank hineinkopieren …

Problem: Upload von Dateien in den MySQL-Docker-Container ist gerade etwas umständlich für mich.

Alternative: Eine MySQL-DB, die in Windows läuft und auf deren Verzeichnisse ich aus Windows heraus zugreifen kann, wäre doch etwas angenehmer. Glücklicherweise habe ich den Bitnami-WAMP-Stack noch nicht ins Nirvana geschickt, nachdem die darauf laufenden Services auf den Webserver umgezogen sind. Zugriff darauf klappt genauso wie das Hinzufügen der Ordner aus alten mysql-Ordnern.

Wie in der oben erwähnten Anleitung den Data Export für einen der alten Ordner anstoßen. Ich exportiere zu einer Self-Contained File inklusive Dump- und Schema-Instruktionen. Die Warnung, dass die MySQL-Version nicht übereinstimmt ignoriere ich. Mehr als schiefgehen kann es nicht, immerhin liegt mehr als ein Jahrzehnt zwischen den Versionen.

Anschließend nutze ich die Exportdatei um die Datenbank in der Docker-Datenbank zu importieren. Es werden Tabellen angelegt, in den Tabellen ist Inhalt der so aussieht, als sei er komplett. Zugegebenermaßen – inbesondere die frühen Datenbanken sind so basic, dass ich weniger Probleme erwarte.

Als nächster Schritt bleibt nun die große Aufgabe, den PHP-Teil der Webseiten wieder mit dem Datenbankteil zu verbinden. Denn natürlich möchte ich nicht mit einer PHP-anno-tubac-Version auf dem Server arbeiten. Dies ist ein größeres Projekt – oder ich finde eine Bibliothek, die mysql_* in mysqli_* transformiert. Aber nicht mehr heute.


08
Dez 14

Gelesenes – 8. Dezember 2014

Nachlese von älteren Artikeln. Hängen geblieben sind heute nur wenige…