- Comme il était difficile de relire d’anciennes conversations uniquement via la recherche, la plus grande conversation iMessage a été transformée en livres physiques pour pouvoir la feuilleter par date
- Les messages ont été extraits en ouvrant
sms.dbd’une sauvegarde iPhone avec SQLite, mais certains contenus ne se trouvaient pas dansmessage.text: ils étaient dans le blob binairemessage.attributedBody, ce qui a nécessité un traitement supplémentaire - Plutôt que de créer un parseur maison, le crate Rust imessage-database a été utilisé pour lire la base iMessage sous forme de données structurées, avec un ajustement du SQL pour ne récupérer qu’une seule conversation
- Le corps du livre a été généré en LaTeX ; pour gérer le rendu des emoji et les coûts d’impression, XeLaTeX et la police emoji noir et blanc Google Noto Emoji ont été utilisés
- Trois ans de messages représentaient environ 1 300 pages au format 6" x 9", réparties en 3 volumes et imprimées chez Barnes & Noble Press pour 30 dollars, livraison comprise
Pourquoi transformer iMessage en livre
- Lorsqu’il s’agit de se remémorer des événements précis du passé, l’historique des SMS sert souvent d’indice
- La recherche dans tout l’historique iMessage de l’iPhone est devenue plus rapide, mais pour qu’elle soit utile, il faut se souvenir d’une partie exacte du texte du message recherché
- Quand on ouvre une ancienne conversation depuis les résultats de recherche pour voir le contexte autour, le chargement au défilement est très lent
- Comme il n’existe pas de fonction permettant d’aller directement à une date donnée, l’idée a été de créer soi-même une expérience permettant de feuilleter la conversation comme un livre à partir de points aléatoires
Extraire les messages depuis une sauvegarde iPhone
- Pour traiter les messages, il fallait d’abord sortir les données de l’iPhone
- D’après l’iPhone Wiki, récupérer
sms.dbdans une sauvegarde iPhone permet de manipuler les messages comme une base de données SQLite - Après avoir créé une sauvegarde standard avec le Finder du Mac puis ouvert le dossier de sauvegarde, on trouve à la racine des répertoires nommés avec des octets en hexadécimal
- Le nom du fichier
sms.dbétait celui indiqué par l’iPhone Wiki,3d0d7e5fb2ce288813306e4d4636395e047a3d28, et il a pu être copié enimessage.dbpuis ouvert avec le CLIsqlite3 - La base contient des tables comme
message,attachment,chat,handleetchat_message_join
Requête SQL et problème d’extraction du texte
- Pour extraire une vraie conversation, il fallait joindre les tables
message,chat_message_joinetchat - En interrogeant les messages triés par date pour un
chat_identifierdonné, le corps de certains messages apparaissait vide - Certains de ces messages apparemment vides n’étaient pas stockés dans
message.text, mais dans la colonnemessage.attributedBody, sous forme de blob binaire NSMutableAttributedString encodé - En extrayant le binaire en hexadécimal depuis
sqlite3puis en l’inspectant avecxxd, on pouvait constater que le texte CVS était bien présent - Plutôt que d’implémenter directement un parseur pour ce format binaire, le crate imessage-database a été utilisé
- Ce crate lit la base de données iMessage et la produit sous forme de structures de données Rust
- Le binaire
imessage-exporterfourni avec lui peut générer les conversations en texte ou en HTML - Les requêtes SQL de la bibliothèque ont été légèrement modifiées pour limiter l’extraction à une seule conversation
Générer le corps du livre avec LaTeX
- L’objectif n’étant pas un fichier HTML ou texte, mais un livre physique que l’on peut tenir et feuilleter, LaTeX a été choisi comme cible de sortie
- Les sources textuelles de LaTeX se prêtent bien aux templates et à la génération automatique ; chaque message a donc été exporté sous forme de code LaTeX
- Le rendu initial a commencé par une forme simple
- Les messages envoyés par l’auteur étaient alignés à gauche, ceux de l’autre personne à droite
- Aux endroits contenant des images, un texte indiquant la présence d’une pièce jointe était inséré
- Les éléments fastidieux à rendre, comme les réactions et les réponses, étaient ignorés
- Les chapitres étaient découpés par date, avec quelques ajustements visuels
Gestion des emoji et de XeLaTeX
- LaTeX classique ne prenant pas en charge Unicode, le compilateur échouait dès que la plage rendue contenait des emoji
- Il aurait été possible de supprimer les emoji, mais ils ont été conservés parce qu’ils sont importants dans les communications modernes
- Le passage à XeLaTeX a permis d’utiliser la prise en charge des polices Unicode
- Dans la source LaTeX générée, chaque emoji était entouré sous la forme
{\emojifont X}, et\emojifontétait défini comme police emoji, ce qui a permis le rendu des emoji inline - Pour éviter le coût de l’impression couleur, la police emoji noir et blanc Google Noto Emoji a été utilisée
- Une commande LaTeX
\markrighta été ajoutée à chaque message afin que l’en-tête suive la date courante
Diviser 1 300 pages en 3 volumes
- En compilant trois ans de messages au format de page standard 6" x 9", le PDF généré dépassait largement les 1 000 pages
- Comme la période couverte était exactement de trois ans, l’ensemble a été réparti en 3 volumes, réduisant chaque volume à une taille imprimable
- Le résultat final représentait environ 1 300 pages au total
Impression avec Barnes & Noble Press
- Après avoir examiné plusieurs options d’impression, Barnes and Noble Press a été choisi
- C’était un peu plus cher que d’autres options comme Lulu ou Amazon KDP, mais plus adapté, car il n’était pas nécessaire de « publier » le livre pour imprimer un exemplaire personnel
- Les trois volumes, soit environ 1 300 pages au total, ont pu être imprimés pour 30 dollars, livraison comprise
- Une fois le PDF du contenu téléversé, le site B&N Press a généré les dimensions nécessaires pour la couverture, et les couvertures de chaque volume ont été créées dans Inkscape selon ces dimensions
- Le site de B&N Press était globalement très lent, et la page de paiement n’a pas voulu s’ouvrir pendant plus de 24 heures lors de la commande
- Une fois le problème résolu, la commande a été passée, et les trois livres physiques sont arrivés quelques semaines plus tard
- Feuilleter ces livres physiques s’est révélé beaucoup plus simple que de retrouver d’anciennes conversations sur le téléphone
Essayer soi-même
- Le code source est encore dans un état assez brut et n’est pas empaqueté comme binaire Cargo, mais la quantité de code reste limitée
- Le code du projet est publié sur bkettle/message-book
1 commentaires
Commentaires sur Hacker News
J’aime beaucoup l’idée qu’il faudrait conserver davantage de traces matérielles de la correspondance personnelle
En voyant seulement le titre, j’ai cru qu’il s’agissait d’un LLM générant le récit d’événements à partir d’un historique de messages, et je me suis dit que ce serait génial d’en faire un service
Maintenant, j’ai envie d’essayer la même chose avec mes archives de chat Telegram
Il existe des recueils de lettres de Feynmann, Feyeraband, Einstein et d’autres, mais aujourd’hui presque tout est dans des e-mails protégés par mot de passe, donc il est fort possible qu’on n’ait presque plus de masses de lettres privées pour contextualiser les figures historiques du futur
S’il faut une copie physique, il suffit de la copier sur une microSD, et si on craint de la perdre, on peut en faire trois
Maintenant, j’ai envie d’essayer quelque chose de similaire moi-même
C’est sympa de voir que ma bibliothèque imessage-exporter sert réellement
C’est un cas d’usage vraiment intéressant
La prochaine fois que je reviendrai sur cette idée, je pense passer à cette bibliothèque, et je serais curieux d’avoir des conseils ou astuces sur l’accès quasi temps réel
Ma tante a remarquablement bien conservé les lettres et journaux que mes grands-parents échangeaient pendant la Seconde Guerre mondiale
J’ai immédiatement pensé que nos enfants et petits-enfants n’auront probablement pas la même joie
Si ça vous intéresse, il y a le blog
Ça ressemble plutôt à conserver tous les petits mots du genre « achète du lait en rentrant », « c’est bien toi qui vas chercher les enfants ? », « à dans 20 minutes »
Cela dit, il y a aussi un certain charme là-dedans, donc je n’espère pas paraître trop rabat-joie
Pour les Britanniques, il est temps de faire en sorte que ça marche aussi avec WhatsApp
Je me suis emballé sur l’idée du projet, avant de réaliser qu’il faudrait apprendre Rust pour le fork
En tout cas, c’est une idée vraiment géniale, et relire l’historique de chat avec des amis est assez nostalgique
Un outil d’export Telegram y est aussi référencé
Par exemple, je ne suis pas certain que les emojis soient conservés, et évidemment les pièces jointes ou messages vocaux manqueront
Si on extrait depuis la base de sauvegarde, il y aura sûrement aussi du chiffrement
Franchement, ce serait déjà bien de pouvoir au moins créer une archive de sauvegarde qu’on puisse restaurer plus tard sur un autre appareil avec un minimum de confiance
Suis-je le seul à trouver un peu angoissante l’idée d’envoyer à un imprimeur l’intégralité de l’historique de ses messages personnels ?
Je m’inquiéterais davantage d’une attaque de l’intermédiaire par une entreprise de data mining dont le métier est de modifier les comportements via la publicité ou des outils de fabrication du consensus
Je prévois depuis assez longtemps de faire ce qu’a fait l’auteur, et c’est encore l’un des obstacles que je n’ai pas résolus
L’impression et la reliure à domicile sont probablement la seule option, et il ne reste plus qu’à trouver comment rendre le résultat final durable et agréable en main
L’imprimeur n’a probablement pas anticipé que le PDF d’impression contiendrait des données personnelles identifiables, et la durée de conservation des données pourrait même être indéfinie
—rot13:-)Opinion peut-être impopulaire, mais je trouve ça un peu glauque
À la base, je ne comprends pas pourquoi les gens veulent conserver l’historique de conversations privées
Contrairement aux publications publiques ou aux blogs, je pense que les messages privés devraient être éphémères. On n’enregistre pas non plus toutes les conversations en face à face ni tous les appels téléphoniques
J’ai l’impression que chacun voit cette question différemment
Pour ma part, j’essaie de conserver autant d’historiques de chat que possible, et j’aimerais aussi que toutes les conversations en face à face et tous les appels téléphoniques soient enregistrés et facilement accessibles
J’ai le sentiment que la somme totale de mes expériences, c’est moi, donc je ne veux pas les oublier. Si je ne m’en souviens pas, j’ai l’impression de devenir en quelque sorte moins moi-même
Cela dit, j’ai aussi vu cet épisode de Black Mirror, donc je suis partagé entre le désir de me souvenir parfaitement de toutes mes expériences et les bénéfices mentaux et émotionnels qu’apporte la possibilité d’oublier
Cela dit, dans mon cas, ce qui me gêne le plus, c’est l’idée que des messages envoyés autrefois restent pour toujours
Le moi d’il y a 10 ans est tellement différent de celui d’aujourd’hui que relire d’anciens messages me met extrêmement mal à l’aise
Jusqu’en 2004 environ, je gardais le contact avec les gens par de vraies lettres, et relire quelques années plus tard les lettres d’anciennes petites amies ou de mes sœurs quand elles sont parties pour la première fois à l’université provoquait une forte nostalgie
En revanche, après avoir quitté l’armée, j’ai déménagé dans un endroit bien plus petit et mis la plupart de mes affaires au garde-meuble, puis j’ai considéré que tout ce que je n’avais pas touché après trois ans ne m’était plus nécessaire et je l’ai confié au stockage
Je crois que cela incluait toutes mes anciennes lettres et photos, mais je ne peux pas dire que ces objets me manquent réellement
Les gens disent qu’ils ne veulent pas oublier le passé, mais la réalité de l’oubli, c’est qu’on ne sait pas qu’on a oublié, donc une fois que c’est oublié, il n’y a plus d’effet perceptible
Honnêtement, je baigne déjà assez dans la nostalgie et je n’ai pas besoin d’autres choses auxquelles m’accrocher. Je ne regarde même pas de nouvelles séries ni n’écoute de nouvelle musique, j’ai l’impression d’être mentalement bloqué en 1999, et je ne sais pas si c’est très sain
La comparaison la plus juste, ce sont plutôt des lettres qui durent dans le temps
Les messages composent un récit et capturent le Zeitgeist de notre génération
J’ai l’impression que peu de gens ont encore vraiment réfléchi à la manière de préserver ce genre de choses
Personnellement, j’aime bien l’idée, et je peux imaginer exporter tout ou partie des messages échangés avec ma mère pour garder le souvenir de cette période
Vraiment génial, et on dirait que cela pourrait faire un excellent cadeau pour quelqu’un qu’on aime
J’ai récemment testé Nomic Atlas(https://docs.nomic.ai/) en y injectant beaucoup de mes historiques de chat, et c’était assez intéressant de visualiser et d’explorer les messages regroupés par thème
Du coup, je me dis qu’en générant des embeddings des messages puis en lançant une modélisation thématique, on pourrait apporter la capacité de recherche du numérique à un format physique
On pourrait alors créer à la fin du livre un index par sujet, avec en référence les numéros de page contenant des messages sur ce thème
Script Python pour exporter iMessage sur Mac : https://pypi.org/project/imessage-reader/
Dans 2000 ans, il est possible que seuls des livres comme celui-ci subsistent pour étudier la manière dont vivaient les gens du XXIe siècle
Les informations éphémères comme les tweets, chats, SMS, e-mails et photos numériques sur appareils personnels auront peut-être toutes disparu
Je ne connaissais pas BN Press pour un usage personnel
Je m’étais un peu renseigné sur KDP et Lulu, mais après avoir essayé Kindle et l’avoir apprécié, j’ai décidé de me concentrer surtout sur les ebooks
Pour une impression limitée ou expérimentale, BN Press a l’air excellent, et 30 dollars pour 1300 pages, c’est impressionnant