1 puan yazan GN⁺ 2024-03-08 | 1 yorum | WhatsApp'ta paylaş
  • Eski konuşmaları sadece aramayla yeniden okumak zor olduğundan, en büyük iMessage konuşmasını fiziksel bir kitaba dönüştürerek tarihe göre sayfaları çevrilebilecek hale getirdi
  • iPhone yedeğindeki sms.db dosyasını SQLite ile açıp mesajları çıkardı, ancak bazı içerikler message.text içinde değil, message.attributedBody içindeki ikili blob olarak bulunduğu için ek işlem gerekti
  • Kendi ayrıştırıcısını yazmak yerine Rust’taki imessage-database crate’ini kullanarak iMessage DB’sini yapılandırılmış veri olarak okudu ve yalnızca tek bir konuşmayı almak için SQL’i uyarladı
  • Kitap içeriği LaTeX ile üretildi; emoji işleme ve baskı maliyeti sorunlarını çözmek için XeLaTeX ile Google Noto Emoji siyah-beyaz yazı tipini kullandı
  • 3 yıllık mesajlar 6" x 9" ölçüsünde yaklaşık 1.300 sayfa tuttu, bu yüzden 3 cilde bölündü ve Barnes & Noble Press üzerinden kargo dahil 30 dolara basıldı

iMessage neden kitaba dönüştürüldü

  • Geçmişte yaşanan belirli şeyleri hatırlarken metin mesajı kayıtları sık sık ipucu oluyor
  • iPhone’daki tüm iMessage geçmişinde arama hızlandı, ancak bunu işe yarar şekilde kullanmak için aranan mesajın tam ifadesinin bir kısmını hatırlamak gerekiyor
  • Arama sonucundan eski bir konuşmaya girip çevresindeki bağlamı görmek istendiğinde kaydırarak yükleme çok yavaş kalıyor
  • Belirli bir tarihe doğrudan gitme özelliği olmadığı için, konuşmayı rastgele noktalardan kitap gibi karıştırma deneyimini kendisi oluşturmaya karar verdi

iPhone yedeğinden mesajları çıkarma

  • Mesajları işleyebilmek için önce veriyi iPhone dışına çıkarmak gerekiyordu
  • iPhone Wiki’ye göre iPhone yedeğinden sms.db alınırsa mesajlar SQLite veritabanı olarak işlenebiliyor
  • Mac Finder ile standart bir yedek oluşturduktan sonra yedek klasörü açıldığında, kökte onaltılık bayt adlarına sahip dizinler bulunuyor
  • sms.db dosya adı iPhone Wiki’de verilen 3d0d7e5fb2ce288813306e4d4636395e047a3d28 idi; bunu imessage.db olarak kopyalayıp sqlite3 CLI ile açabildi
  • Veritabanında message, attachment, chat, handle, chat_message_join gibi tablolar yer alıyor

SQL sorguları ve içerik çıkarma sorunu

  • Gerçek konuşmayı çıkarmak için message, chat_message_join, chat tablolarını birleştirmek gerekiyordu
  • Belirli bir chat_identifier için tarih sırasına göre mesajlar sorgulandığında bazı mesajların içeriği boş görünüyordu
  • Boş görünen bu mesajların bir kısmı message.text içinde değil, message.attributedBody sütunundaki kodlanmış NSMutableAttributedString ikili blob’u içinde saklanıyordu
  • sqlite3 ile ikili veriyi hex olarak çıkarıp xxd ile incelediğinde gerçek metin içeriğinin orada bulunduğunu görebildi
  • İkili biçim için kendi ayrıştırıcısını yazmak yerine imessage-database crate’ini kullandı
    • Bu crate, iMessage veritabanını okuyup Rust veri yapıları olarak çıktı veriyor
    • Birlikte gelen imessage-exporter ikilisi konuşmaları metin veya HTML olarak üretebiliyor
    • Yalnızca tek bir konuşmayı daraltarak almak için kütüphanedeki SQL ifadelerini biraz değiştirdi

LaTeX ile kitap içeriği oluşturma

  • Hedef HTML ya da metin dosyası değil, elde tutulup çevrilebilecek fiziksel bir kitap olduğu için çıktı hedefi olarak LaTeX seçildi
  • LaTeX’in metin tabanlı kaynak yapısı şablonlara ve otomatik üretime uygun olduğundan, her mesajı LaTeX kodu olarak dışa aktarma yöntemi kullanıldı
  • İlk işleme basit bir düzenle başladı
    • Gönderdiği mesajları sola, karşı tarafın mesajlarını sağa hizaladı
    • Görsel olan yerlerde ek dosya gösterim metni koydu
    • Tepkiler ve yanıtlar gibi işlenmesi zahmetli öğeleri atladı
    • Bölümleri tarihe göre ayırdı ve görsel olarak küçük ayarlamalar yaptı

Emoji ve XeLaTeX işleme

  • Normal LaTeX unicode desteklemediği için, emoji içeren bölümler işlenince derleyici hata veriyordu
  • Emojileri kaldırabilirdi, ancak modern iletişimde önemli olduklarını düşündüğü için bunu yapmadı
  • Unicode yazı tipi desteğini kullanmak için XeLaTeX’e geçti
  • Üretilen LaTeX kaynağında her emojiyi {\\emojifont X} biçiminde sardı ve \\emojifontu emoji yazı tipi olarak tanımlayarak satır içi emoji işlemeyi başardı
  • Renkli baskı maliyetinden kaçınmak için Google Noto Emoji siyah-beyaz emoji yazı tipini kullandı
  • Her mesaj için \\markright LaTeX komutunu ekleyerek üstbilginin güncel tarihi takip etmesini sağladı

1.300 sayfayı 3 cilde bölme

  • 3 yıllık mesajları standart 6" x 9" sayfa boyutunda derlediğinde 1.000 sayfayı çok aşan bir PDF oluştu
  • Hedef dönem tam olarak 3 yıl olduğu için tamamını 3 cilde bölerek her cildi basılabilir boyuta indirdi
  • Nihai hacim toplam yaklaşık 1.300 sayfa oldu

Barnes & Noble Press ile baskı

  • Çeşitli baskı seçeneklerini inceledikten sonra Barnes and Noble Press seçildi
  • Lulu ya da Amazon KDP gibi diğer seçeneklerden biraz daha pahalıydı, ancak kişisel kullanım için kitap bastırırken kitabı “yayınlamak” zorunda olmamak daha uygun geldi
  • Üç cilt ve toplam yaklaşık 1.300 sayfa, kargo dahil 30 dolara basılabildi
  • İçerik PDF’si yüklendiğinde B&N Press sitesi kapak için gereken ölçüleri oluşturdu, o da bu ölçülere göre Inkscape ile her cildin kapağını hazırladı
  • B&N Press web sitesi genel olarak çok yavaştı ve sipariş sırasında ödeme sayfasının 24 saatten uzun süre açılmaması gibi bir sorun yaşandı
  • Sorun çözüldükten sonra sipariş ilerledi ve birkaç hafta sonra üç fiziksel kitap eline ulaştı
  • Fiziksel kitap olarak sayfa çevirme yöntemi, geçmiş konuşmaları telefonda yeniden bulmaya çalışmaktan çok daha kolaydı

Kendin dene

  • Kaynak kodu düzen açısından biraz kaba ve Cargo ikilisi olarak paketlenmiş değil, ancak kod miktarı çok fazla değil
  • Proje kodu bkettle/message-book adresinde açık olarak yayımlanmış durumda

1 yorum

 
GN⁺ 2024-03-08
Hacker News yorumları
  • Kişisel yazışmaların fiziksel kayıtlarını daha fazla bırakmamız gerektiği açısından bunu çok sevdim.
    Sadece başlığa bakınca, mesaj geçmişine dayanarak bir LLM’in olayların anlatısını oluşturduğu bir şey sanmıştım; böyle bir şey hizmet olarak yapılsa harika olurdu.

    • Ben de öyle düşünmüştüm ama gerçek hikâye çok daha iyiydi.
      Şimdi bunu kendi Telegram sohbet geçmişimle de denemek istiyorum.
    • Özel e-postaların ve metin mesajlarının büyük dezavantajı, geleceğin tarihçilerinin görebileceği kişisel yazışmaların muazzam ölçüde yok olması.
      Feynmann, Feyeraband, Einstein gibi kişilerin mektuplarından derlenmiş kitaplar var; bugünse neredeyse her şey parolaların arkasındaki e-postalarda, bu yüzden gelecekteki tarihî kişilikleri bağlama oturtacak kişisel mektup yığınlarını muhtemelen pek elde edemeyeceğiz.
    • Sanat olarak güzel, ama pratikliği tartışılır.
      Fiziksel bir kopya gerekiyorsa microSD’ye kopyalanabilir; kaybolmasından endişe ediliyorsa da üç tane kadar yapılabilir.
    • Başlığı görünce tam olarak böyle bir şey hayal etmiştim ve bunun zaten oldukça ilginç olacağını düşünüyordum.
      Şimdi benzer bir şeyi kendim denemek istiyorum.
    • Ben de sohbet geçmişine dayalı, tamamen AI tarafından üretilmiş bir suç romanı çıkacağı bir şey sanmıştım.
  • Yaptığım kütüphane imessage-exporter’ın gerçekten kullanıldığını görmek güzel.
    Gerçekten ilginç bir kullanım örneği.

    • Yakın zamanda yeni mesajları temsil eden değişiklikleri izleyip çıkarmak için SQLite dosyasının içini kurcalıyordum; birkaç hileyle yaptığım ilk prototip genel olarak çalıştı.
      Bu fikre bir dahaki bakışımda o kütüphaneye geçmeyi düşünüyorum; neredeyse gerçek zamanlı erişim konusunda öneri ya da ipuçları varsa merak ederim.
  • Teyzem, İkinci Dünya Savaşı sırasında büyükbabamla büyükannemin birbirlerine yazdığı mektupları ve günlükleri harika biçimde korumuştu.
    Çocuklarımızın ve torunlarımızın aynı keyfi yaşayamayacağı hemen aklıma geldi.
    İlgilenirseniz blogu görebilirsiniz.

    • Çoğu çift için düşününce bu biraz farklı olabilir.
      Daha çok “Eve gelirken süt al”, “Çocukları sen alacaksın, değil mi?”, “20 dakika sonra görüşürüz” gibi not kâğıtlarının hepsini saklamaya benziyor.
      Yine de bunun kendine göre bir çekiciliği var; fazla heves kırıcı gibi duyulmasını istemem.
  • Britanyalılar için sırada bunu WhatsApp’ta da çalışır hâle getirmek var.
    Proje fikri beni heyecanlandırdı, sonra fork’lamak için Rust öğrenmem gerektiğini fark ettim.
    Her hâlükârda gerçekten harika bir fikir; arkadaşlarla sohbet geçmişini okumak oldukça nostaljik oluyor.

    • Bu Python paketi WhatsApp yedek sohbetlerini JSON veya HTML olarak dışa aktarabiliyor: https://github.com/KnugiHK/WhatsApp-Chat-Exporter
      Telegram dışa aktarma aracı da bağlantı olarak verilmiş.
    • WhatsApp sohbetleri txt olarak dışa aktarabiliyor ama kayıplar olacağını sanıyorum.
      Örneğin emojilerin kalıp kalmayacağından emin değilim; ekler veya sesli mesajlar da doğal olarak dışarıda kalacaktır.
      Yedek veritabanından çıkarmak isterseniz şifreleme de devreye girecektir.
    • Sadece Birleşik Krallık değil, tüm dünyanın buna ihtiyacı var.
    • Tüm mesajları ve medyayı makul biçimde incelenebilir bir formatta dışa aktarma işlevine şiddetle ihtiyaç var.
      Açıkçası daha sonra başka bir cihazda geri yükleyebileceğimden emin olabileceğim bir yedek arşiv oluşturabilsem bile yeter.
  • Kişisel mesaj geçmişinin tamamını bastırmak için bir yayınevine gönderme fikri yalnızca bana mı biraz rahatsız edici geliyor?

    • Kişisel mesaj geçmişimin tamamını bir yayınevine gönderseydim, en çok rahatsız olacak taraf sanırım yayınevi olurdu.
    • Yayınevleri kâğıda mürekkep püskürtme işindedir.
      Asıl, davranış değiştirme işi reklam veya rıza üretme araçları olan veri madenciliği şirketleri tarafından ortadaki adam saldırısına uğramaktan endişe etmek gerekir.
    • Ben de rahatsız oluyorum.
      Yazarın yaptığı şeyi epeydir planlıyordum; bu, hâlâ çözemediğim engellerden biri.
      Evde kendim basıp ciltlemek muhtemelen tek seçenek gibi; geriye kalan da son ürünü dayanıklı ve elde tutması hoş hâle getirmenin yolunu bulmak.
    • Dosyaların özellikle güvenli biçimde saklanmamasına şaşırmazdım.
      Yayınevi, baskı için gönderilen PDF’nin içinde kişisel olarak tanımlanabilir bilgiler olmasını beklememiş olabilir; veri saklama süresi de belirsiz/sonsuz olabilir.
    • —rot13 anahtarını denemek işe yarayabilir :-)
  • Popüler olmayan bir düşünce olabilir ama bu biraz ürkütücü.
    İnsanların en başta neden kişisel konuşma kayıtlarını saklamak istediğini anlayamıyorum.
    Herkese açık gönderilerden veya bloglardan farklı olarak kişisel mesajların geçici olması gerektiğini düşünüyorum. Yüz yüze konuşmaları veya telefon görüşmelerinin tamamını kaydetmiyoruz sonuçta.

    • İlginç bir konu ve illa popüler olmayan bir düşünce de olmayabilir.
      İnsanlar bu meseleye farklı bakıyor gibi.
      Ben mümkün olan tüm sohbet geçmişlerini korumaya çalışıyorum; yüz yüze konuşmaların ve telefon görüşmelerinin de tamamının kaydedilip kolayca erişilebilir olmasını isterdim.
      Deneyimlerimin toplamının beni ben yaptığı hissine sahibim; bu yüzden o deneyimleri unutmak istemiyorum. Hatırlayamazsam bir şekilde kendimden daha eksik bir varlık oluyormuşum gibi geliyor.
      Öte yandan Black Mirror’ın o bölümünü de izledim; bu yüzden tüm deneyimleri kusursuzca hatırlama arzusu ile unutabilmenin getirdiği zihinsel ve duygusal faydalar arasında kalıyorum.
    • Katılıyorum.
      Ama benim durumumda, eskiden gönderdiğim mesajların sonsuza kadar kalması gerçeği daha çok içimi burkuyor.
      10 yıl önceki ben şimdiki hâlimden o kadar farklı ki, eski mesajları okuyunca çok tuhaf hissediyorum.
    • İki tarafı da anlıyorum.
      Yaklaşık 2004’e kadar insanlarla gerçek mektuplarla iletişim kurardım; özellikle eski kız arkadaşlarımdan ya da üniversiteye ilk gittiğimde kız kardeşlerimden gelen mektupları yıllar sonra okumak güçlü bir nostalji yaratıyordu.
      Öte yandan ordudan ayrıldıktan sonra çok daha küçük bir yere taşınınca eşyalarımın çoğunu depoya koydum; 3 yıl sonra hâlâ dokunmadığım şeylerin gereksiz olduğuna karar verip onları depolama yerine devrettim.
      Sanırım eski mektupların ve fotoğrafların tamamı da bunun içindeydi ama o şeyleri gerçekten özlediğimi söyleyemem.
      İnsanlar geçmişi unutmak istemediklerini söyler ama unutmanın gerçeği, unuttuğunuzu bilmemektir; bir kez unuttuktan sonra algılanabilir bir etkisi olmaz.
      Açıkçası zaten yeterince nostaljiye batmış durumdayım ve tutunacak daha fazla eşyaya ihtiyacım olmadığını düşünüyorum. Yeni TV programları izlemiyor, yeni müzikler dinlemiyorum; zihinsel olarak 1999’da sıkışıp kalmış gibiyim ve bunun sağlıklı olup olmadığını bilmiyorum.
    • Kişisel mesajlar yüz yüze konuşma veya telefon görüşmesi değildir.
      Daha doğru benzetme, uzun süre kalan mektuplardır.
    • Bunların özel ya da geçici olduğunu varsaymıyorum.
      Mesajlar bir hikâye oluşturur ve bizim kuşağımızın zeitgeist’ını taşır.
      İnsanlar bunların nasıl korunacağı üzerine henüz pek düşünmemiş gibi.
      Kişisel olarak hoşuma giden bir fikir; annemle yaptığım mesajlaşmaların tamamını ya da bir kısmını dışa aktarıp o dönemin anısı olarak sakladığımı hayal edebiliyorum.
  • Gerçekten harika; sevilen birine verilecek mükemmel bir hediye de olabilir gibi görünüyor.
    Yakın zamanda Nomic Atlas’ı (https://docs.nomic.ai/) denerken kendi sohbet geçmişimin büyük kısmını içine koydum; mesajları konu kümeleri olarak görselleştirip gezmek oldukça ilginçti.
    Bu yüzden mesajların embedding’lerini üretip konu modelleme çalıştırınca, dijitalin aranabilirliğini fiziksel formata taşımanın mümkün olabileceğini düşündüm.
    Böylece gerçek kitabın sonuna konu bazlı bir dizin oluşturulabilir ve o konudaki mesajların bulunduğu sayfa numaraları referans olarak eklenebilir.

  • Mac’te iMessage dışa aktarmak için Python betiği: https://pypi.org/project/imessage-reader/

  • 2000 yıl sonra, 21. yüzyıl insanlarının nasıl yaşadığını araştırırken geriye yalnızca böyle kitaplar kalmış olabilir.
    Tweet’ler, sohbetler, SMS’ler, e-postalar, kişisel cihazlardaki dijital fotoğraflar gibi geçici bilgiler tamamen yok olmuş olabilir.

  • Kişisel kullanım için BN Press’i bilmiyordum.
    KDP ve Lulu’ya biraz bakmıştım ama Kindle’ı deneyip sevdikten sonra ana odağımı e-kitaplar yapmaya karar verdim.
    Sınırlı veya deneme amaçlı baskılar için BN Press harika görünüyor; 1300 sayfa için 30 dolar da müthiş.