Seri buku yang dibuat otomatis dari iMessage selama 3 tahun
(benkettle.xyz)- Karena sulit membaca ulang percakapan lama hanya dengan pencarian, percakapan iMessage terbesar diubah menjadi buku fisik agar bisa dibolak-balik berdasarkan tanggal
- Pesan diekstrak dengan membuka
sms.dbdari backup iPhone menggunakan SQLite, tetapi sebagian isi tidak berada dimessage.textmelainkan di blob binermessage.attributedBody, sehingga perlu pemrosesan tambahan - Alih-alih membuat parser sendiri, digunakan crate Rust imessage-database untuk membaca basis data iMessage sebagai data terstruktur, lalu SQL disesuaikan agar hanya mengambil satu percakapan
- Isi buku dibuat dengan LaTeX, dan untuk mengatasi masalah rendering emoji serta biaya cetak, digunakan XeLaTeX dan font hitam-putih Google Noto Emoji
- Pesan selama 3 tahun menjadi sekitar 1.300 halaman pada ukuran 6" x 9", dibagi menjadi 3 volume, dan dicetak melalui Barnes & Noble Press seharga 30 dolar termasuk pengiriman
Mengapa membuat iMessage menjadi buku
- Saat mencoba mengingat kejadian spesifik di masa lalu, riwayat pesan teks sering menjadi petunjuk
- Pencarian seluruh riwayat iMessage di iPhone memang sudah lebih cepat, tetapi agar berguna, kita harus ingat sebagian frasa yang tepat dari pesan yang dicari
- Saat masuk ke percakapan lama dari hasil pencarian untuk melihat konteks di sekitarnya, pemuatan scroll sangat lambat
- Karena tidak ada fitur untuk langsung lompat ke tanggal tertentu, diputuskan untuk membuat sendiri pengalaman membolak-balik seperti buku dari percakapan
Mengambil pesan dari backup iPhone
- Untuk mengolah pesan, pertama-tama datanya harus dikeluarkan dari iPhone
- Menurut iPhone Wiki, jika mengambil
sms.dbdari backup iPhone, pesan bisa ditangani sebagai basis data SQLite - Setelah membuat backup standar lewat Finder di Mac lalu membuka folder backup, di root ada direktori-direktori dengan nama byte heksadesimal
- Nama file
sms.dbadalah3d0d7e5fb2ce288813306e4d4636395e047a3d28seperti yang tercantum di iPhone Wiki; file itu disalin menjadiimessage.dblalu bisa dibuka dengan CLIsqlite3 - Di dalam DB ada tabel seperti
message,attachment,chat,handle, danchat_message_join
Query SQL dan masalah ekstraksi isi
- Untuk mengambil percakapan sebenarnya, tabel
message,chat_message_join, danchatharus di-join - Saat mengambil pesan berurutan berdasarkan tanggal dengan acuan
chat_identifiertertentu, isi sebagian pesan terlihat kosong - Sebagian pesan yang tampak kosong ternyata disimpan bukan di
message.text, melainkan di blob biner NSMutableAttributedString yang terenkode di kolommessage.attributedBody - Saat biner dikeluarkan sebagai hex dari
sqlite3lalu diperiksa denganxxd, terlihat bahwa isi karakter CVS memang ada di dalamnya - Alih-alih mengimplementasikan parser format binernya sendiri, digunakan crate imessage-database
- Crate ini membaca basis data iMessage dan mengeluarkannya sebagai struktur data Rust
- Binary
imessage-exporteryang disertakan dapat menghasilkan percakapan dalam bentuk teks atau HTML - Pernyataan SQL di pustaka sedikit dimodifikasi agar hanya mengambil satu percakapan tertentu
Membuat isi buku dengan LaTeX
- Karena targetnya bukan HTML atau file teks melainkan buku fisik yang bisa dipegang dan dibolak-balik, LaTeX dipilih sebagai target output
- Sumber LaTeX yang berbasis teks cocok untuk templating dan pembuatan otomatis, jadi tiap pesan diekspor sebagai kode LaTeX
- Rendering awal dimulai dari bentuk yang sederhana
- Pesan yang saya kirim diratakan ke kiri, pesan lawan bicara ke kanan
- Di tempat yang memiliki gambar, dimasukkan teks penanda lampiran
- Elemen yang merepotkan untuk dirender seperti reaksi dan balasan dilewati
- Bab dipisahkan berdasarkan tanggal dan sedikit disesuaikan secara visual
Menangani emoji dan XeLaTeX
- LaTeX biasa tidak mendukung unicode, sehingga ketika mencoba merender bagian yang berisi emoji, compiler gagal
- Emoji sebenarnya bisa saja dihapus, tetapi karena emoji dianggap penting dalam komunikasi modern, itu tidak dilakukan
- Beralih ke XeLaTeX untuk memakai dukungan font unicode
- Dalam sumber LaTeX yang dihasilkan, tiap emoji dibungkus dalam bentuk
{\\emojifont X}, lalu\\emojifontdiarahkan ke font emoji sehingga rendering emoji inline berhasil - Untuk menghindari biaya cetak warna, digunakan font emoji hitam-putih Google Noto Emoji
- Di setiap pesan ditambahkan perintah LaTeX
\\markrightagar header mengikuti tanggal saat ini
Membagi 1.300 halaman menjadi 3 volume
- Setelah pesan selama 3 tahun dikompilasi pada ukuran halaman standar 6" x 9", dihasilkan PDF yang jauh melampaui 1.000 halaman
- Karena rentang waktunya tepat 3 tahun, keseluruhannya dibagi menjadi 3 volume agar ukuran tiap volume tetap bisa dicetak
- Hasil akhirnya berjumlah sekitar 1.300 halaman
Mencetak dengan Barnes & Noble Press
- Setelah meninjau beberapa opsi pencetakan, dipilih Barnes and Noble Press
- Memang sedikit lebih mahal dibanding opsi lain seperti Lulu atau Amazon KDP, tetapi lebih cocok karena saat mencetak buku untuk penggunaan pribadi, tidak perlu “menerbitkan” buku tersebut
- Tiga volume, sekitar 1.300 halaman total, bisa dicetak seharga 30 dolar termasuk pengiriman
- Setelah PDF isi diunggah, situs B&N Press menghasilkan ukuran yang diperlukan untuk sampul, lalu sampul tiap volume dibuat dengan Inkscape mengikuti ukuran tersebut
- Situs web B&N Press secara umum sangat lambat, dan saat pemesanan ada masalah halaman pembayaran yang tidak terbuka lebih dari 24 jam
- Setelah masalah itu teratasi, pesanan diproses, dan beberapa minggu kemudian tiga buku fisik diterima
- Cara membolak-balik buku fisik ini jauh lebih mudah daripada mencari kembali percakapan lama di ponsel
Mencoba membuatnya sendiri
- Kode sumbernya masih cukup kasar dan belum dipaketkan sebagai binary Cargo, tetapi jumlah kodenya tidak banyak
- Kode proyek dipublikasikan di bkettle/message-book
1 komentar
Komentar Hacker News
Saya sangat menyukainya karena kita memang perlu meninggalkan lebih banyak catatan fisik dari korespondensi pribadi
Dari judulnya saja, saya kira ini cerita tentang LLM yang membuat narasi peristiwa berdasarkan riwayat pesan, dan rasanya keren kalau hal seperti ini dijadikan layanan
Sekarang saya jadi ingin mencobanya juga dengan riwayat chat Telegram saya
Ada buku-buku yang menghimpun surat-surat Feynmann, Feyeraband, Einstein, dan lainnya, tetapi sekarang hampir semuanya berupa email di balik kata sandi, jadi besar kemungkinan kita hampir tidak akan mendapat tumpukan surat pribadi yang bisa memberi konteks pada tokoh-tokoh historis di masa depan
Kalau butuh salinan fisik, cukup salin ke microSD, dan kalau khawatir hilang, buat saja sekitar tiga salinan
Sekarang saya jadi ingin mencoba sendiri sesuatu yang mirip
Keren melihat library yang saya buat, imessage-exporter, benar-benar digunakan
Ini kasus penggunaan yang sangat menarik
Lain kali saat meninjau ide ini lagi, saya berencana menggantinya dengan library tersebut, dan saya penasaran apakah ada saran atau kiat terkait akses yang nyaris real-time
Bibi saya telah menyimpan dengan sangat baik surat dan buku harian yang saling dikirim kakek dan nenek saya selama Perang Dunia II
Saya langsung terpikir bahwa anak-anak dan cucu-cucu kita tidak akan bisa menikmati kegembiraan yang sama
Kalau tertarik, bisa melihat blog ini
Rasanya lebih mirip menyimpan semua catatan kecil seperti “belikan susu dalam perjalanan pulang”, “kamu yang jemput anak-anak, kan?”, “ketemu 20 menit lagi”
Meski begitu, hal seperti itu tetap punya daya tariknya sendiri, jadi semoga ini tidak terdengar seperti terlalu mematahkan semangat
Sekarang saatnya membuat ini bekerja juga untuk WhatsApp demi orang-orang Inggris
Saya sempat bersemangat dengan ide proyeknya, lalu sadar bahwa untuk melakukan fork saya harus belajar Rust
Bagaimanapun, ini ide yang sangat keren, dan membaca riwayat chat dengan teman-teman memang cukup membangkitkan nostalgia
Alat ekspor Telegram juga ditautkan di sana
Misalnya saya tidak yakin apakah emoji tetap ada, dan lampiran atau pesan suara tentu saja tidak ikut
Kalau mengekstrak dari database cadangan, pasti ada enkripsinya juga
Jujur saja, saya bahkan akan senang kalau setidaknya bisa membuat arsip cadangan yang bisa saya yakini dapat dipulihkan nanti di perangkat lain
Apakah hanya saya yang agak gelisah dengan ide mengirim seluruh riwayat pesan pribadi ke penerbit untuk dicetak?
Yang seharusnya lebih membuat gelisah adalah diserang man-in-the-middle oleh perusahaan data mining yang pekerjaannya mengubah perilaku sebagai alat iklan atau pembentukan konsensus
Saya sudah cukup lama merencanakan hal yang dilakukan penulis ini, dan ini salah satu hambatan yang belum saya pecahkan
Mencetak dan menjilid sendiri di rumah mungkin satu-satunya pilihan, dan yang tersisa sekarang adalah bagaimana membuat hasil akhirnya tahan lama dan enak digenggam
Penerbit mungkin tidak menyangka ada informasi identitas pribadi di dalam PDF untuk cetak, dan masa retensi datanya bisa saja tidak terbatas
—rot13:-)Mungkin ini pendapat yang tidak populer, tapi ini agak menyeramkan
Sejak awal saya tidak paham mengapa orang ingin menyimpan riwayat percakapan pribadi
Berbeda dengan unggahan publik atau blog, menurut saya pesan pribadi seharusnya bersifat sementara. Kita kan tidak merekam semua percakapan tatap muka atau panggilan telepon
Sepertinya tiap orang memandang masalah ini secara berbeda
Saya berusaha menyimpan semua riwayat chat yang memungkinkan, dan saya juga berharap semua percakapan tatap muka serta panggilan telepon direkam dan mudah diakses
Saya punya perasaan bahwa jumlah total pengalaman sayalah yang membentuk diri saya, jadi saya tidak ingin melupakan pengalaman-pengalaman itu. Kalau tidak mengingatnya, rasanya entah bagaimana saya menjadi lebih sedikit dari diri saya sendiri
Namun saya juga sudah menonton episode Black Mirror itu, jadi saya bimbang antara keinginan mengingat semua pengalaman secara sempurna dan manfaat mental serta emosional dari kemampuan untuk melupakan
Namun bagi saya, yang lebih besar adalah rasa malu karena fakta bahwa pesan yang saya kirim dulu akan tersisa selamanya
Saya 10 tahun lalu terlalu berbeda dari saya sekarang, sehingga membaca pesan lama terasa sangat canggung
Sampai sekitar 2004 saya masih berhubungan dengan orang-orang lewat surat sungguhan, dan membaca beberapa tahun kemudian surat dari mantan pacar atau dari adik-adik perempuan saya saat pertama kali masuk universitas benar-benar membangkitkan nostalgia kuat
Di sisi lain, setelah keluar dari militer saya pindah ke tempat yang jauh lebih kecil, memasukkan sebagian besar barang ke gudang, dan setelah 3 tahun memutuskan bahwa barang yang tidak tersentuh adalah barang yang tidak saya butuhkan, lalu menyerahkannya ke tempat penyimpanan
Sepertinya semua surat dan foto lama termasuk di sana, tetapi saya tidak bisa bilang saya benar-benar merindukan barang-barang itu
Orang bilang tidak ingin melupakan masa lalu, tetapi kenyataan dari lupa adalah kita tidak tahu bahwa kita sudah lupa, jadi begitu kita lupa, tidak ada dampak yang bisa dirasakan
Jujur saja, saya sudah cukup tenggelam dalam nostalgia, dan saya rasa tidak butuh benda lain untuk terus menggenggamnya. Saya tidak menonton acara TV baru dan tidak mendengarkan musik baru, rasanya secara mental saya terjebak di 1999, dan saya tidak tahu apakah itu sehat
Perbandingan yang lebih tepat adalah surat yang bertahan lama
Pesan membentuk sebuah cerita dan memuat zeitgeist generasi kita
Sepertinya orang belum banyak memikirkan bagaimana cara melestarikan hal semacam ini
Secara pribadi saya menyukai ide ini, dan bisa membayangkan mengekspor seluruh atau sebagian pesan dengan ibu saya untuk menyimpannya sebagai kenangan dari masa itu
Benar-benar keren, dan tampaknya bisa menjadi hadiah yang luar biasa untuk orang tersayang
Baru-baru ini saya mencoba Nomic Atlas(https://docs.nomic.ai/) dan memasukkan banyak riwayat chat saya, dan cukup menarik memvisualisasikan serta menjelajahi pesan sebagai klaster berdasarkan topik
Jadi saya terpikir bahwa dengan membuat embedding pesan dan menjalankan pemodelan topik, kita bisa membawa kemampuan pencarian digital ke format fisik
Dengan begitu, di akhir buku fisiknya bisa dibuat indeks berdasarkan topik, lalu mencantumkan nomor halaman tempat pesan tentang topik itu berada sebagai referensi
Skrip Python untuk mengekspor iMessage di Mac: https://pypi.org/project/imessage-reader/
2000 tahun lagi, mungkin hanya buku-buku seperti ini yang tersisa saat meneliti bagaimana orang abad ke-21 hidup
Semua informasi sementara seperti tweet, chat, SMS, email, dan foto digital di perangkat pribadi bisa saja sudah hilang
Saya tidak tahu tentang BN Press untuk penggunaan pribadi
Saya sempat mencari tahu KDP dan Lulu, tetapi setelah mencoba Kindle dan mulai menyukainya, saya memutuskan menjadikan ebook sebagai fokus utama
Untuk cetakan terbatas atau eksperimental, BN Press tampak bagus, dan 30 dolar untuk 1300 halaman itu luar biasa