01
Nov 23

Nostalgie und Bangs

Seiten, über die ich einmal stolperte, an denen ich mich erfreut habe, die dann aber wieder in Vergessenheit geraten sind. Durch die Korrektursichtung blättere ich in der Sammlung meiner Entdeckungen von früher. Viele der Links sind inzwischen mit einem offline markiert. Die automatische Prüfung auf tote Links arbeitet leise im Hintergrund. Sie erwischt nur Seiten, die komplett unerreichbar sind, umgewidmete Seiten werden nicht erkannt.

Wo ich die Beiträge sichte, blicke ich das ein oder andere Mal in die Vergangenheit des Netzes. Aus Nostalgie werfe ich einen Blick in die Wayback Machine wenn eine spannend klingende Seite von damals als offline angezeigt wird. Übrigens: wer die Suchmaschine DuckDuckGo verwendet, kommt sehr bequem ins Archiv einer Seite. !wayback in den Suchschlitz zum nicht mehr funktionierenden Link packen und es wird die Wayback Machine geöffnet mit der Übersicht der vorhandenen Sicherungen (Snapshots) des angegebenen Links. In einer Jahresleiste wird mittels eines Balkendiagrams angedeutet, wie viele Sicherungen existiern. Wählt man ein Jahr aus sind Tage mit vorhandenen Sicherungen bläulich markiert (siehe Abb. 1). Klickt man darauf, erhält man eine Liste der Snapshots. Klickt man auf einen Sicherungszeitpunkt, gelangt man auf die gespeicherte Seite.

Annotierter Screenshot der Wayback-Machine. Zu sehen ist eine Information über die Anzahl der gespeicherten Sicherungen (Snapshots). Darunter eine Jahresleiste in der in Balkendiagrammen die Anzahl der gesicherten Snapshots pro Monat angedeutet werden. Das Jahr 2005 ist gelb hervorgehoben. Ein Pfeil zeigt darauf mit einer Infobox, die darauf hinweist, dass man zuerst das Jahr auswählen muss. 
Darunter befindet sich ein Jahreskalender mit Monaten und Tagen. Tage, an denen ein Snapshot existiert sind blau hervorgehoben. 
Ein Pfeil zeigt auf den blau hervorgehobenen 24. Januar mit der Infobox, dass im zweiten Schritt der Tag und der Snapshot ausgewählt werden müssen. Vom 24. Januar aus öffnet sich eine rechteckige Sprechblase, in der vermerkt ist, dass es an diesem tag 1 snapshot gibt, sowie die Uhrzeit jener Sicherung. Diese ist verlinkt und eine Maushand liegt darüber um zu anzudeuten, dass man auf den Link klicken muss, um zur Sicherung zu gelangen.
Abb. 1: Screenshot der Ergebnisanzeige der Wayback Machine mit Hervorhebung.

Und wo ich so den Namen der so nützlichen Funktionaliät1 nachschlage (Bangs), stelle ich fest, dass es sogar noch schneller geht: !wbm. Möchte man das Internet Archive motivieren, eine Sicherung einer Seite zu speichern, z.B. weil diese historisch relevant werden könnte, kann auch dies via DuckDuckGo über den Bang !save initiiert werden. Ansonsten: Wer ein wenig hinter die Kulissen blicken möchte: im Juli führte Netzpolitik ein Interview mit einem Mitglied des Archive Teams (2023). Lesenswert ist auch der Heise Online Artikel von Pit Noack (2018).

Die Wayback Machine ist natürlich nicht das einzige Projekt, das versucht dem Verschwinden von Informationen im Netz entgegen zu treten. Andere Dienste sind z.B. archive.today (!ais). Salman Ravoof hat im November letzten Jahres einen recht umfangreichen Artikel zum Thema geschrieben (2022), in dem mehr Dienste und andere Möglichkeiten entdeckt werden können. Auch in Awesome OSINT Listen kann zu dem Thema einiges gefunden werden. Neben der rechtlichen Diskussion mag ich hier auch das Fass der Herausforderung der Langzeitarchivierung gerade nicht aufmachen. Diese Sicherungen sind häufig genug alles andere als vollständig. Bilder, Videos, Flash, andere multimediale oder dynamische Inhalte fehlen oder funktionieren einfach nicht mehr, Technologien sterben. Oder die Seiten liegen hinter eine Login- oder Paywall und sind damit für solche Dienste unerreichbar.

Weil ich gerade Flash erwähnt habe: Düster erinnere ich mich an den Bericht über ein Flash-Archiv, über das ich kürzlich etwas gelesen habe. *geht mal nachschauen* Oder vielleicht auch doch nicht so kürzlich: im November 2020 berichtete das Internet Archive über die damals neue Flash-Emulierung in der digitalen Bibliothek. Hier geht's zum Flash Showcase, in dem sich auch das ein oder andere in meinem Blog besprochene Spielchen noch mal ansehen und spielen lässt.

Und weil es so gut passt, drüben bei Netbib wurde vor ein paar Tagen auf die Internet Artifacts verwiesen (via Vorspeisenplatte): ein kleines digitales Museum, in dem man einen Blick auf die Geschichte des Internets werfen kann. Sehr liebevoll gestaltet.

Nachgereicht: Erinnerung und Vergessen

  1. im Dauergebrauch bei mir auch !wiki[]

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ánek 1, 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. GifCities 1, 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.