1 Punkte von GN⁺ 2024-03-08 | 1 Kommentare | Auf WhatsApp teilen
  • Da sich alte Unterhaltungen selbst mit der Suche nur schwer wiederlesen ließen, wurden die größte iMessage-Konversationen in physische Bücher umgewandelt, damit man sie nach Datum durchblättern kann
  • Aus dem sms.db eines iPhone-Backups wurden die Nachrichten per SQLite extrahiert, aber ein Teil des Inhalts steckte nicht in message.text, sondern im binären Blob von message.attributedBody, was zusätzliche Verarbeitung erforderte
  • Statt selbst einen Parser zu schreiben, wurde das Rust-Crate imessage-database verwendet, um die iMessage-DB als strukturierte Daten zu lesen, und das SQL wurde so angepasst, dass nur eine einzelne Unterhaltung geladen wird
  • Der Buchinhalt wurde mit LaTeX erzeugt; um Emoji-Rendering und Druckkosten zu lösen, kamen XeLaTeX und die schwarzweiße Google-Schrift Noto Emoji zum Einsatz
  • Drei Jahre an Nachrichten ergaben im Format 6" x 9" rund 1.300 Seiten, aufgeteilt in drei Bände, und wurden bei Barnes & Noble Press inklusive Versand für 30 Dollar gedruckt

Warum iMessage in ein Buch verwandeln?

  • Beim Erinnern an konkrete Dinge aus der Vergangenheit dienen Textnachrichten oft als Anhaltspunkte
  • Die Suche im gesamten iMessage-Verlauf auf dem iPhone ist schneller geworden, aber um sie sinnvoll zu nutzen, muss man sich an einen genauen Teil der Formulierung der gesuchten Nachricht erinnern
  • Öffnet man aus den Suchergebnissen eine alte Unterhaltung, um den umgebenden Kontext zu sehen, ist das Nachladen beim Scrollen sehr langsam
  • Da es keine Funktion gibt, direkt zu einem bestimmten Datum zu springen, wurde entschieden, selbst eine buchartige Blätter-Erfahrung zu schaffen, bei der man die Unterhaltung an zufälligen Stellen aufschlagen kann

Nachrichten aus dem iPhone-Backup holen

  • Um die Nachrichten zu verarbeiten, mussten die Daten zuerst aus dem iPhone herausgeholt werden
  • Laut iPhone Wiki lässt sich durch das Holen von sms.db aus einem iPhone-Backup mit den Nachrichten als SQLite-Datenbank arbeiten
  • Nach dem Erstellen eines Standard-Backups im Finder auf dem Mac und dem Öffnen des Backup-Ordners finden sich im Wurzelverzeichnis Verzeichnisse mit hexadezimalen Byte-Namen
  • Der Dateiname von sms.db war laut iPhone Wiki 3d0d7e5fb2ce288813306e4d4636395e047a3d28; diese Datei wurde als imessage.db kopiert und ließ sich mit der sqlite3-CLI öffnen
  • Die DB enthält Tabellen wie message, attachment, chat, handle und chat_message_join

SQL-Abfragen und das Problem bei der Textextraktion

  • Um eine reale Unterhaltung herauszuziehen, mussten die Tabellen message, chat_message_join und chat gejoint werden
  • Als die Nachrichten für einen bestimmten chat_identifier chronologisch abgefragt wurden, waren manche Nachrichtentexte leer
  • Ein Teil dieser scheinbar leeren Nachrichten war nicht in message.text, sondern als codierter binärer Blob einer NSMutableAttributedString-Struktur in der Spalte message.attributedBody gespeichert
  • Als die Binärdaten in sqlite3 als Hex ausgegeben und mit xxd geprüft wurden, war zu sehen, dass der eigentliche Textinhalt darin enthalten war
  • Statt selbst einen Parser für das Binärformat zu implementieren, wurde das Crate imessage-database verwendet
    • Dieses Crate liest die iMessage-Datenbank und gibt sie als Rust-Datenstrukturen aus
    • Das mitgelieferte Binary imessage-exporter kann Unterhaltungen als Text oder HTML erzeugen
    • Die SQL-Statements der Bibliothek wurden leicht angepasst, damit nur eine einzelne Unterhaltung gezielt geladen wird

Den Buchinhalt mit LaTeX erzeugen

  • Da das Ziel nicht HTML oder eine Textdatei war, sondern ein physisches Buch zum Anfassen und Durchblättern, wurde LaTeX als Ausgabeformat gewählt
  • Der textbasierte Quelltext von LaTeX eignet sich gut für Templates und automatische Erzeugung, daher wurde jede Nachricht als LaTeX-Code ausgegeben
  • Das erste Rendering begann in einfacher Form
    • Eigene Nachrichten wurden links, Nachrichten der anderen Person rechts ausgerichtet
    • An Stellen mit Bildern wurde ein Textmarker für Anhänge eingefügt
    • Aufwendig zu rendernde Elemente wie Reaktionen und Antworten wurden übersprungen
    • Kapitel wurden nach Datum getrennt und visuell leicht angepasst

Emoji und XeLaTeX

  • Normales LaTeX unterstützt kein Unicode, daher schlug der Compiler fehl, sobald Bereiche mit Emoji gerendert wurden
  • Die Emoji zu entfernen wäre möglich gewesen, aber da sie in moderner Kommunikation wichtig sind, wurden sie nicht weggelassen
  • Es wurde auf XeLaTeX umgestellt, um Unicode-Schriftunterstützung zu nutzen
  • Im erzeugten LaTeX-Quelltext wurde jedes Emoji in die Form {\\emojifont X} eingeschlossen, und \\emojifont wurde auf eine Emoji-Schrift gesetzt, sodass Inline-Emoji erfolgreich gerendert werden konnten
  • Um Farbdruckkosten zu vermeiden, wurde die schwarzweiße Emoji-Schrift Google Noto Emoji verwendet
  • Für jede Nachricht wurde der LaTeX-Befehl \\markright eingefügt, damit die Kopfzeile dem aktuellen Datum folgt

1.300 Seiten auf drei Bände aufteilen

  • Beim Kompilieren von drei Jahren Nachrichten im Standardformat 6" x 9" entstand ein PDF mit deutlich mehr als 1.000 Seiten
  • Da der Zielzeitraum genau drei Jahre umfasste, wurde das Ganze in drei Bände aufgeteilt, um jeden Band auf eine druckbare Größe zu bringen
  • Der endgültige Umfang lag bei insgesamt rund 1.300 Seiten

Druck mit Barnes & Noble Press

  • Nach Prüfung mehrerer Druckoptionen fiel die Wahl auf Barnes and Noble Press
  • Es war zwar etwas teurer als andere Optionen wie Lulu oder Amazon KDP, passte aber besser, weil man beim Druck eines privaten Buchs das Buch nicht „veröffentlichen“ musste
  • Alle drei Bände mit insgesamt etwa 1.300 Seiten konnten inklusive Versand für 30 Dollar gedruckt werden
  • Nach dem Upload des PDF für den Innenteil erzeugte die B&N-Press-Website die für das Cover nötigen Maße, und anhand dieser Maße wurden die Umschläge für jeden Band in Inkscape erstellt
  • Die B&N-Press-Website war insgesamt sehr langsam, und während der Bestellung gab es das Problem, dass sich die Bezahlseite über 24 Stunden lang nicht öffnen ließ
  • Nachdem das Problem behoben war, wurde die Bestellung verarbeitet, und einige Wochen später trafen die drei physischen Bücher ein
  • Das Durchblättern in physischer Buchform war deutlich einfacher, als alte Unterhaltungen auf dem Handy wiederzufinden

Selbst ausprobieren

  • Der Quellcode ist noch etwas unaufgeräumt und nicht als Cargo-Binary paketiert, aber der Umfang des Codes ist nicht groß
  • Der Projektcode ist unter bkettle/message-book veröffentlicht

1 Kommentare

 
GN⁺ 2024-03-08
Kommentare auf Hacker News
  • Mir gefällt das sehr, weil wir mehr physische Aufzeichnungen persönlicher Korrespondenz hinterlassen sollten.
    Als ich nur den Titel sah, dachte ich, es ginge darum, dass ein LLM aus Nachrichtenverläufen eine Erzählung der Ereignisse generiert; als Service wäre so etwas ziemlich cool.

    • Das dachte ich auch, aber die tatsächliche Geschichte war viel besser.
      Jetzt möchte ich das auch mit meinen Telegram-Chatverläufen ausprobieren.
    • Ein großer Nachteil privater E-Mails und Textnachrichten ist, dass enorm viel persönliche Korrespondenz verschwindet, die künftige Historiker sehen könnten.
      Es gibt Bücher mit gesammelten Briefen von Feynman, Feyerabend, Einstein usw.; heute liegt fast alles als E-Mail hinter Passwörtern, daher ist es gut möglich, dass wir kaum Stapel persönlicher Briefe bekommen werden, mit denen sich historische Personen der Zukunft kontextualisieren lassen.
    • Als Kunst ist das schön, aber der praktische Nutzen ist fraglich.
      Wenn man eine physische Kopie braucht, kann man sie auf eine microSD kopieren; wenn man Angst vor Verlust hat, macht man eben drei davon.
    • Beim Titel habe ich mir genau so etwas vorgestellt und fand die Idee schon ziemlich spannend.
      Jetzt möchte ich selbst etwas Ähnliches ausprobieren.
    • Ich dachte ebenfalls, es ginge um einen vollständig KI-generierten Kriminalroman auf Basis eines Chatverlaufs.
  • Cool zu sehen, dass meine Bibliothek imessage-exporter tatsächlich genutzt wird.
    Ein wirklich interessanter Use Case.

    • Ich habe mich kürzlich durch die SQLite-Datei gearbeitet, um Änderungen für neue Nachrichten zu überwachen und zu extrahieren; ein erster Prototyp mit ein paar Tricks funktionierte größtenteils.
      Wenn ich diese Idee das nächste Mal wieder aufgreife, werde ich wohl auf diese Bibliothek umsteigen; falls es Ratschläge oder Tipps zum nahezu Echtzeit-Zugriff gibt, wäre ich interessiert.
  • Meine Tante hat die Briefe und Tagebücher, die mein Großvater und meine Großmutter während des Zweiten Weltkriegs ausgetauscht haben, wunderbar bewahrt.
    Mir kam sofort der Gedanke, dass unsere Kinder und Enkel diese Freude nicht haben werden.
    Bei Interesse gibt es den Blog.

    • Für die meisten Paare könnte das etwas anders sein.
      Es wirkt eher so, als würde man alle Zettelnotizen wie „Bring auf dem Heimweg Milch mit“, „Du holst doch die Kinder ab, oder?“ oder „Bis in 20 Minuten“ aufbewahren.
      Trotzdem hat auch das seinen eigenen Reiz; ich hoffe also, das klingt nicht zu sehr nach Spielverderberei.
  • Als Nächstes muss das für die Briten auch mit WhatsApp funktionieren.
    Ich war ganz begeistert von der Projektidee, bis mir klar wurde, dass ich Rust lernen müsste, um es zu forken.
    Auf jeden Fall eine wirklich tolle Idee, und Chatverläufe mit Freunden zu lesen, ist ziemlich nostalgisch.

    • Dieses Python-Paket kann WhatsApp-Backup-Chats nach JSON oder HTML exportieren: https://github.com/KnugiHK/WhatsApp-Chat-Exporter
      Ein Telegram-Exporttool ist dort ebenfalls verlinkt.
    • WhatsApp kann Chats als txt exportieren, aber vermutlich mit Verlusten.
      Zum Beispiel bin ich mir nicht sicher, ob Emojis erhalten bleiben; Anhänge oder Sprachnachrichten fehlen natürlich.
      Wenn man aus der Backup-Datenbank extrahieren will, ist sie außerdem verschlüsselt.
    • Nicht nur Großbritannien, die ganze Welt braucht das.
    • Eine Funktion, die alle Nachrichten und Medien in ein vernünftig überprüfbares Format exportiert, wird dringend gebraucht.
      Ehrlich gesagt wäre ich schon froh, wenn ich wenigstens ein Backup-Archiv erstellen könnte, bei dem ich sicher bin, es später auf einem anderen Gerät wiederherstellen zu können.
  • Bin ich der Einzige, dem die Idee, den vollständigen Verlauf persönlicher Nachrichten zum Drucken an einen Verlag zu schicken, etwas unheimlich ist?

    • Wenn ich meinen vollständigen Verlauf persönlicher Nachrichten an einen Verlag schicken würde, wäre vermutlich der Verlag derjenige, dem am unheimlichsten wäre.
    • Verlage sind Unternehmen, die Tinte auf Papier bringen.
      Viel unheimlicher sollte einem eher ein Man-in-the-Middle-Angriff durch Data-Mining-Unternehmen sein, deren Job es ist, Verhalten über Werbung oder Konsensbildungswerkzeuge zu verändern.
    • Mir ist dabei auch unwohl.
      Ich plane seit ziemlich langer Zeit, etwas Ähnliches wie der Autor zu machen, und das ist eine der Hürden, die ich noch nicht gelöst habe.
      Selbst zu Hause zu drucken und zu binden ist wahrscheinlich die einzige Option; dann bleibt nur noch die Frage, wie man das Endergebnis haltbar und angenehm in der Hand macht.
    • Es würde mich nicht überraschen, wenn die Datei nicht besonders sicher gespeichert wird.
      Der Verlag hat vermutlich nicht erwartet, dass eine druckfertige PDF personenbezogene Daten enthält, und die Aufbewahrungsfrist für die Daten könnte unbegrenzt sein.
    • Vielleicht mal den Schalter —rot13 ausprobieren :-)
  • Das ist vielleicht eine unpopuläre Ansicht, aber ich finde das ein wenig gruselig.
    Ich verstehe grundsätzlich nicht, warum Menschen private Gesprächsverläufe aufbewahren wollen.
    Anders als öffentliche Posts oder Blogs sollten private Nachrichten meiner Meinung nach vergänglich sein. Man zeichnet ja auch nicht jedes persönliche Gespräch oder Telefonat auf.

    • Ein interessantes Thema, und vielleicht gar keine so unpopuläre Ansicht.
      Menschen scheinen das sehr unterschiedlich zu sehen.
      Ich versuche, möglichst alle Chatverläufe zu bewahren, und ich wünschte, auch persönliche Gespräche und Telefonate wären alle aufgezeichnet und leicht zugänglich.
      Ich habe das Gefühl, dass die Summe meiner Erfahrungen mich ausmacht, und ich möchte diese Erfahrungen nicht vergessen. Wenn ich mich nicht erinnere, fühlt es sich an, als wäre ich irgendwie weniger ich selbst.
      Allerdings habe ich auch diese Black-Mirror-Folge gesehen, deshalb bin ich hin- und hergerissen zwischen dem Wunsch, mich perfekt an alle Erfahrungen zu erinnern, und den mentalen und emotionalen Vorteilen des Vergessenkönnens.
    • Zustimmung.
      In meinem Fall überwiegt allerdings das Fremdschämen darüber, dass früher verschickte Nachrichten für immer existieren.
      Ich vor 10 Jahren war so anders als heute, dass es sich extrem unangenehm anfühlt, alte Nachrichten zu lesen.
    • Ich verstehe beide Seiten.
      Bis etwa 2004 habe ich noch mit echten Briefen mit Leuten Kontakt gehalten, und Briefe von früheren Freundinnen oder von meinen kleinen Schwestern aus der Zeit, als ich gerade an die Uni gegangen war, Jahre später zu lesen, war stark nostalgisch.
      Andererseits bin ich nach meinem Ausscheiden aus dem Militär an einen viel kleineren Ort gezogen, habe den Großteil meiner Sachen eingelagert und nach drei Jahren entschieden, dass alles, was ich bis dahin nicht angefasst hatte, nicht gebraucht wird, und es dem Lager überlassen.
      Ich glaube, darunter waren alle alten Briefe und Fotos, aber ich kann nicht behaupten, dass ich diese Dinge wirklich vermisse.
      Menschen sagen, sie wollten die Vergangenheit nicht vergessen, aber die Realität des Vergessens ist ja, dass man nicht weiß, dass man vergessen hat; sobald man es vergessen hat, hat es keine wahrnehmbare Wirkung mehr.
      Ehrlich gesagt bin ich schon nostalgisch genug, und ich glaube nicht, dass ich noch mehr Dinge brauche, an denen ich mich festhalte. Ich schaue keine neuen TV-Serien und höre keine neue Musik; mental stecke ich anscheinend im Jahr 1999 fest, und ich weiß nicht, ob das gesund ist.
    • Private Nachrichten sind keine persönlichen Gespräche und keine Telefonate.
      Ein genauerer Vergleich wären Briefe, die lange erhalten bleiben.
    • Ich gehe nicht davon aus, dass solche Dinge privat oder vergänglich sind.
      Nachrichten ergeben eine Geschichte und enthalten den Zeitgeist unserer Generation.
      Wie man so etwas bewahrt, darüber scheinen sich viele Menschen noch nicht intensiv Gedanken gemacht zu haben.
      Mir persönlich gefällt die Idee, und ich kann mir vorstellen, den gesamten oder einen Teil des Nachrichtenverlaufs mit meiner Mutter zu exportieren und als Erinnerung an diese Zeit zu behalten.
  • Wirklich cool, und es könnte auch ein tolles Geschenk für einen geliebten Menschen sein.
    Ich habe kürzlich Nomic Atlas (https://docs.nomic.ai/) ausprobiert und viele meiner Chatverläufe hineingeladen; es war ziemlich interessant, die Nachrichten nach Themenclustern visualisiert zu sehen und darin zu stöbern.
    Dadurch kam mir der Gedanke, dass man durch das Erzeugen von Embeddings der Nachrichten und anschließendes Topic Modeling die digitale Durchsuchbarkeit in ein physisches Format bringen könnte.
    Dann könnte man am Ende des echten Buchs einen thematischen Index erstellen und auf die Seitenzahlen verweisen, auf denen Nachrichten zu diesem Thema stehen.

  • Python-Skript zum Exportieren von iMessage auf dem Mac: https://pypi.org/project/imessage-reader/

  • In 2000 Jahren sind solche Bücher vielleicht das Einzige, was übrig bleibt, wenn man erforscht, wie Menschen im 21. Jahrhundert gelebt haben.
    Vergängliche Informationen wie Tweets, Chats, SMS, E-Mails und digitale Fotos auf persönlichen Geräten könnten dann alle verschwunden sein.

  • BN Press für Privatnutzer kannte ich nicht.
    KDP und Lulu hatte ich mir ein wenig angesehen, aber nachdem ich Kindle ausprobiert und schätzen gelernt hatte, habe ich beschlossen, mich hauptsächlich auf E-Books zu konzentrieren.
    Für begrenzte oder experimentelle Druckauflagen wirkt BN Press großartig, und 30 Dollar für 1300 Seiten sind beeindruckend.