Direkt zum Hauptbereich

Tagebuch

Auf meinem Rechner befindet sich ein Verzeichnis "Archiv". Dort schlummern alte Dateien, die für mich keinen aktuellen Nutzen mehr haben und meist nur noch aus Nostalgiegründen nicht gelöscht wurden: Texte die heute ganz schnell über Google gefunden werden könnten, schlecht geschriebener Programmcode, Studienarbeiten, Spiele, die nicht mehr laufen.

Das Stöbern in diesen Ordnern hat etwas arschlogisches. Manches ist thematisch einsortiert, manches chronologisch, manches geschichtet: Ein Ordner enthält die Dateien meines letzten Rechners, der ein Archiv des vorletzten Rechners bis zurück (oder hinunter) zu meinem ersten PC (Ordnername "p75").

Dort liegt auch ein Ordner "tageneu" und Dateien mit Namen wie 1996011120 und folgendem Inhalt:
FEBEBEMMJ

\yëêy }çê gâééêu{B

Von Verschlüsselung kann hier keine Rede sein, aber es reichte aus, um ein versehentliches Lesen von anderen Computernutzern zu verhindern. Außerdem verhindert die Codierung heute, dass ich es mal ebenso lesen kann.

Ich schrieb die Tagebucheinträge in einem Pascalprogramm, zu dem ich von der Fernsehserie "Doogie Howser, M.D." inspiriert wurde.

Später übernahm dann ein Delphi-Programm.

Der erste Eintrag ist aus 1996, der letzte aus 2000. Nach 20 Jahren wollte ich doch gerne wieder lesen, was mich damals so bewegt hat. Außerdem war es ein guter Anlass um ein kleines Progrämmchen zu schreiben:

import os

def main():
    file_paths = get_sorted_file_paths('/ganz/geheimer/lokaler/pfad/')
    diary_entries = read_all_diary_entries(file_paths)
    print_diary_entries(diary_entries)

def get_sorted_file_paths(directory_path):
    return sorted([os.path.join(directory_path, f) for f in os.listdir(directory_path)])

def read_all_diary_entries(file_paths):
    return [read_diary_entry(file_path) for file_path in file_paths]

def read_diary_entry(file_path):
    encoded_byte_stream = read_file_byte_stream(file_path)
    text = decode(encoded_byte_stream)
    header = build_diary_header_text(file_path)
    return f"{header}\n{text}"

def read_file_byte_stream(file_path):
    with open(file_path, "rb") as f:
        return f.read()

def decode(encoded_content):
    rotated_bytes = rotate_non_whitespace_bytes(encoded_content)
    return rotated_bytes.decode('CP437').strip()
    #return rotated_bytes.decode('Latin-1').strip()

def rotate_non_whitespace_bytes(values):
    return bytes([rotate_non_whitespace_byte(c) for c in values])

def rotate_non_whitespace_byte(value):
    return (value - 20) if value > 32 else value

def build_diary_header_text(file_path):
    name = os.path.basename(file_path)
    return f"----- {name[6:8]}.{name[4:6]}.{name[0:4]}, {name[8:]} Uhr -----"

def print_diary_entries(diary_entries):
    print("\n".join(diary_entries))

if __name__ == "__main__":
    main()

Als nervigstes Problem hat sich die Suche nach dem richtigen Encoding gestaltet. Zuerst hatte ich die Funktion chr() verwendet. Diese nutzt aber Unicode und hat damit die Umlaute und das ß verschluckt.

Daraufhin machte ich mich dann auf die Suche, nach der richtigen Codepage. Das dauerte jedoch, bis ich merkte dass die Dateien mit zwei verschiedenen Codepages geschrieben wurden. Das Pascalprogramm nutzte CP437 (MS DOS), das Delphiprogramm dann Latin-1 (Windows). Ich habe noch keine Lösung gefunden, wie das Skript nun selbsts herausfindet, welche Codepage die momentan richtige wäre.

Und was kam nun inhaltlich dabei heraus? Das behalte ich natürlich für mich. Aber drei Dinge können verraten werden:
  • Ich hatte meine damaligen schulischen Leistungen teilweise falsch in Erinnerung.
  • Ein angefangenes Point & Click Adventure harrt seit nun bald einem Virteljahrhundert auf Fertigstellung.
  • Ich habe damals definitiv zu wenig getanzt. Das kann mit diesem Lied aus dem Jahr 1996 ein wenig nachgeholt werden:

Kommentare

  1. Das automatische Auswählen der richtigen Codepage ist NP-vollständig :-) Ich glaube, es gibt nur heuristische Verfahren. Du könntest den Text dekodieren und dann schauen, ob du häufig verwendete Worte findest, etwa "und", "der" und "ich".

    AntwortenLöschen

Kommentar veröffentlichen

Beliebte Posts aus diesem Blog

I see u

  Beim alljährlichen erzwungenen Aufräumen fand sich dieses Bild. Das älteste Kind hatte es vor etwa ein oder zwei Jahren gemalt und dann an die Tür des zweitältesten Kindes geklebt. Lieb, nicht?

Keine Angst vorm Manchester-Liberalismus

Ich recherchiere gerade etwas über das 19. Jahrhundert und die Industrielle Revolution, was sich jedoch noch etwas hinziehen wird. Im Geiste von Open Science möchte ich jedoch bereits einige Quellen vorstellen; zum Thema "Manchester-Liberalismus". Die heute gängige Vorstellung einer Ideologie, die nur auf das Eigeninteresse und die Vorteile der "Reichen" bedacht war und des Staates als Hüter des Gemeinwohls und Beschützer der Armen, der sich im 19. Jahrhundert völlig aus der Wirtschaft heraushielt, wird in den angeführten Texten als nicht ganz korrekt präsentiert. Vielmehr zeigt sich, dass die Interventionen des Staats die Lage der Armen verschlechterte und durch das Zurückdrängen des Staates verbessert wurde. Ich werde darauf hoffentlich später noch genauer eingehen können. Gerecht ist nur die Freiheit von Richard Herzinger und Mythos Manchestertum von Detmar Doering

I Want To Hold Your Hand

Ich habe gerade im Radio gehört, dass genau heute vor 60 Jahren die Beatles ihr Stück I Want To Hold Your Hand veröffentlicht haben. Dafür unterbreche ich gerne meine Blog-Abstinenz und zeige hier meine Lieblingsinterpretation dieses Lieds aus der wunderbaren Serie GLEE: