3 साल के iMessage से अपने-आप बनी किताबों की सीरीज़
(benkettle.xyz)- पुराने conversations को सिर्फ search करके दोबारा पढ़ना मुश्किल था, इसलिए सबसे बड़े iMessage conversation को भौतिक किताब में बदल दिया ताकि तारीख के हिसाब से पन्ने पलटे जा सकें
- iPhone backup के
sms.dbको SQLite में खोलकर messages निकाले, लेकिन कुछ body textmessage.textमें नहीं बल्किmessage.attributedBodyके binary blob में था, इसलिए अतिरिक्त processing की जरूरत पड़ी - अपना parser बनाने के बजाय Rust के imessage-database crate का इस्तेमाल करके iMessage DB को structured data के रूप में पढ़ा, और केवल एक conversation लाने के लिए SQL को adjust किया
- किताब का body LaTeX से generate किया गया, और emoji rendering व printing cost की समस्या हल करने के लिए XeLaTeX और Google Noto Emoji black-and-white font का इस्तेमाल किया गया
- 3 साल के messages 6" x 9" format में करीब 1,300 pages बने, इसलिए उन्हें 3 volumes में बांटा गया, और Barnes & Noble Press से shipping सहित 30 डॉलर में print किया गया
iMessage को किताब क्यों बनाया
- अतीत की किसी खास घटना को याद करते समय text message history अक्सर clue बनती है
- iPhone में पूरे iMessage history की search तेज हो गई है, लेकिन उपयोगी तरीके से इस्तेमाल करने के लिए जिस message को ढूंढ रहे हैं उसकी ठीक-ठीक wording का कुछ हिस्सा याद होना चाहिए
- Search result से पुराने conversation में जाकर आसपास का context देखने की कोशिश करें तो scroll loading बहुत धीमी होती है
- किसी खास तारीख पर सीधे जाने का feature नहीं है, इसलिए conversation को किसी random point से किताब की तरह पलटकर देखने का experience खुद बनाने का फैसला किया
iPhone backup से messages निकालना
- Messages को process करने के लिए पहले data को iPhone से बाहर निकालना जरूरी था
- iPhone Wiki के मुताबिक iPhone backup से
sms.dbनिकालने पर messages को SQLite database के रूप में handle किया जा सकता है - Mac Finder से standard backup बनाने के बाद backup folder खोलने पर root में hexadecimal byte names वाली directories दिखती हैं
sms.dbfilename iPhone Wiki में दिया गया3d0d7e5fb2ce288813306e4d4636395e047a3d28था, और इसेimessage.dbके रूप में copy करकेsqlite3CLI से खोला जा सका- DB में
message,attachment,chat,handle,chat_message_joinजैसी tables थीं
SQL query और body extraction की समस्या
- असली conversation निकालने के लिए
message,chat_message_join,chattables को join करना पड़ा - किसी खास
chat_identifierके आधार पर date order में messages query करने पर कुछ messages का body खाली था - खाली दिखने वाले कुछ messages
message.textमें नहीं बल्किmessage.attributedBodycolumn के encoded NSMutableAttributedString binary blob में stored थे sqlite3से binary को hex में निकालकरxxdसे check करने पर दिखा कि CVS text content वास्तव में मौजूद था- Binary format parser खुद implement करने के बजाय imessage-database crate का इस्तेमाल किया
- यह crate iMessage database पढ़कर Rust data structures के रूप में output देता है
- साथ आने वाला
imessage-exporterbinary conversations को text या HTML में generate कर सकता है - सिर्फ एक conversation तक सीमित करके लाने के लिए library के SQL statement में थोड़ा बदलाव किया
LaTeX से किताब का body बनाना
- लक्ष्य HTML या text file नहीं, बल्कि हाथ में लेकर पलटी जा सकने वाली भौतिक किताब था, इसलिए output target के रूप में LaTeX चुना गया
- LaTeX का text-based source templates और automatic generation के लिए अच्छा fit है, इसलिए हर message को LaTeX code के रूप में export करने का तरीका इस्तेमाल किया गया
- शुरुआती rendering simple form से शुरू हुई
- मेरे भेजे messages को left, और दूसरे व्यक्ति के messages को right align किया
- जहां image थी वहां attachment संकेत text डाला
- reactions और replies जैसे render करने में झंझट वाले elements skip किए
- तारीख के आधार पर chapters बांटे और visual तौर पर थोड़ा adjust किया
emoji और XeLaTeX handling
- सामान्य LaTeX unicode support नहीं करता, इसलिए emoji वाला range render करने पर compiler fail हो गया
- emoji हटाए भी जा सकते थे, लेकिन modern communication में emoji महत्वपूर्ण हैं, इसलिए उन्हें exclude नहीं किया
- XeLaTeX पर switch करके unicode font support का इस्तेमाल किया
- Generated LaTeX source में हर emoji को
{\emojifont X}form में wrap किया, और\emojifontको emoji font के रूप में specify करके inline emoji rendering सफल की - Color printing cost से बचने के लिए Google Noto Emoji का black-and-white emoji font इस्तेमाल किया
- हर message में
\markrightLaTeX command जोड़ा, ताकि header current date के साथ follow करे
1,300 pages को 3 volumes में बांटना
- 3 साल के messages को standard 6" x 9" page size में compile करने पर 1,000 pages से काफी ज्यादा का PDF बना
- Target period ठीक 3 साल था, इसलिए पूरे content को 3 volumes में बांटकर हर volume को printable size में घटाया गया
- Final length कुल मिलाकर करीब 1,300 pages थी
Barnes & Noble Press से printing
- कई printing options देखने के बाद Barnes and Noble Press चुना गया
- Lulu या Amazon KDP जैसे दूसरे options से थोड़ा महंगा था, लेकिन personal book print करते समय किताब को “publish” न करना पड़े, यह बात ज्यादा suitable थी
- तीन volumes, कुल करीब 1,300 pages, shipping सहित 30 डॉलर में print हो सके
- Body PDF upload करने पर B&N Press site ने cover के लिए जरूरी dimensions generate किए, और इन dimensions के हिसाब से Inkscape में हर volume का cover बनाया गया
- B&N Press website कुल मिलाकर बहुत slow थी, और order के दौरान payment page 24 घंटे से ज्यादा समय तक नहीं खुलने की समस्या आई
- समस्या ठीक होने के बाद order आगे बढ़ा, और कुछ हफ्तों बाद तीनों physical books मिल गईं
- Physical book की तरह पन्ने पलटकर देखना, phone पर पुरानी conversations फिर से खोजने की तुलना में कहीं ज्यादा आसान था
खुद बनाकर देखें
- Source code की स्थिति अभी rough है और इसे Cargo binary के रूप में package नहीं किया गया है, लेकिन code बहुत ज्यादा नहीं है
- Project code bkettle/message-book पर public है
1 टिप्पणियां
Hacker News की राय
मुझे यह बात बहुत पसंद आई कि हमें निजी पत्राचार का भौतिक रिकॉर्ड ज्यादा छोड़ना चाहिए
शीर्षक देखकर लगा था कि यह संदेशों के इतिहास के आधार पर LLM द्वारा घटनाओं की कथा बनाने की कहानी होगी, और ऐसा कुछ service के रूप में बनाया जाए तो बढ़िया लगेगा
अब अपने Telegram chat history के साथ भी यह आजमाने का मन हो रहा है
Feynmann, Feyeraband, Einstein आदि के पत्रों के संग्रह वाली किताबें हैं, लेकिन अब लगभग सब कुछ password के पीछे छिपे email में है, इसलिए भविष्य की ऐतिहासिक हस्तियों को संदर्भित करने के लिए निजी पत्रों के ढेर मिलने की संभावना बहुत कम है
अगर physical copy चाहिए तो microSD पर copy कर सकते हैं, और खोने की चिंता हो तो तीन-चार बना लें
अब कुछ मिलता-जुलता खुद करके देखने का मन हो रहा है
मेरी बनाई library imessage-exporter को असल में इस्तेमाल होते देखना अच्छा है
सचमुच दिलचस्प use case है
अगली बार इस idea पर लौटूंगा तो उस library पर switch करने का सोच रहा हूं, और near-real-time access को लेकर कोई सलाह या tips हों तो जानना चाहूंगा
मेरी मौसी ने द्वितीय विश्व युद्ध के दौरान मेरे दादा-दादी के बीच हुए पत्रों और diaries को बहुत अच्छी तरह संजोकर रखा है
तुरंत यह ख्याल आया कि हमारे बच्चे और पोते-पोतियां वही खुशी नहीं ले पाएंगे
दिलचस्पी हो तो blog देख सकते हैं
यह तो ज्यादा “घर आते हुए दूध ले आना”, “बच्चों को तुम ही लेने जा रहे हो न?”, “20 मिनट में मिलते हैं” जैसे सारे notes संजोने जैसा लगता है
फिर भी इसमें अपनी अलग charm है, इसलिए उम्मीद है यह बहुत ज्यादा उत्साह ठंडा करने जैसा नहीं लगेगा
अब ब्रिटिश लोगों के लिए इसे WhatsApp पर भी काम कराने की बारी है
project idea से उत्साहित हुआ, फिर समझ आया कि fork करने के लिए Rust सीखनी पड़ेगी
वैसे भी सच में शानदार idea है, और दोस्तों के साथ chat history पढ़ना काफी nostalgic होता है
Telegram export tool भी link किया गया है
जैसे, पक्का नहीं कि emoji बचे रहेंगे या नहीं, और attachments या voice messages तो जाहिर है छूट जाएंगे
backup database से extract करना हो तो encryption भी होगी
सच कहूं तो कम से कम ऐसा backup archive ही बना पाऊं जिस पर भरोसा हो कि बाद में किसी दूसरी device पर restore किया जा सके, तो भी अच्छा होगा
क्या सिर्फ मुझे ही निजी messages का पूरा इतिहास print कराने के लिए publisher को भेजने का idea थोड़ा बेचैन करने वाला लगता है?
बल्कि ज्यादा चिंता उस data mining company द्वारा man-in-the-middle attack की होनी चाहिए जिसका काम ads या consensus-building tools के जरिए व्यवहार बदलना है
लेखक ने जो किया, मैं काफी समय से वैसा करने की planning कर रहा हूं, और यह उन hurdles में से एक है जिसे अभी तक solve नहीं कर पाया
घर पर खुद print और bind करना शायद इकलौता option होगा, और अब बस यह बचता है कि final result को durable और हाथ में अच्छा महसूस होने वाला कैसे बनाया जाए
publisher ने शायद उम्मीद नहीं की होगी कि print-ready PDF में personally identifiable information होगी, और data retention अवधि भी indefinite हो सकती है
—rot13switch आजमाया जा सकता है शायद :-)यह unpopular thought हो सकता है, लेकिन यह थोड़ा creepy है
मुझे समझ नहीं आता कि लोग शुरू में ही निजी बातचीत के records क्यों रखना चाहेंगे
सार्वजनिक posts या blogs के उलट, private messages temporary होने चाहिए। हम आमने-सामने की बातचीत या phone calls पूरी record नहीं करते
लगता है लोग इस मुद्दे को अलग-अलग तरह से देखते हैं
मैं संभव हर chat history को preserve करने की कोशिश करता हूं, और चाहता हूं कि आमने-सामने की बातचीत और phone calls भी पूरी record होकर आसानी से accessible हों
मुझे यह एहसास है कि मेरे experiences का कुल योग ही मैं हूं, इसलिए उन experiences को भूलना नहीं चाहता। याद न रहे तो कहीं न कहीं लगता है कि मैं अपने आप से कम हो गया हूं
हालांकि मैंने Black Mirror का वह episode भी देखा है, इसलिए हर experience को perfectly याद रखने की इच्छा और भूल पाने से मिलने वाले मानसिक व भावनात्मक फायदे के बीच conflict रहता है
हालांकि मेरे मामले में यह बात ज्यादा cringe कराती है कि मेरे पुराने भेजे हुए messages हमेशा के लिए बचे हुए हैं
10 साल पहले का मैं आज से इतना अलग था कि पुराने messages पढ़ना बहुत awkward लगता है
करीब 2004 तक मैं लोगों से असली letters के जरिए संपर्क में रहता था, और खासकर पुरानी girlfriends या जब मैं पहली बार college गया था तब छोटी बहनों के भेजे letters को कुछ साल बाद पढ़ना बहुत nostalgic था
दूसरी तरफ, सेना छोड़ने के बाद मैं बहुत छोटी जगह में शिफ्ट हुआ, तो ज्यादातर सामान storage में रख दिया, और 3 साल बाद भी जिन चीजों को नहीं छुआ था उन्हें गैरजरूरी मानकर storage facility को दे दिया
लगता है उनमें सारे पुराने letters और photos भी शामिल थे, लेकिन सच कहूं तो मैं नहीं कह सकता कि मुझे वे चीजें याद आती हैं
लोग कहते हैं कि वे past भूलना नहीं चाहते, लेकिन भूलने की हकीकत यह है कि आपको पता ही नहीं होता कि आप भूल चुके हैं, इसलिए एक बार भूल जाने पर कोई perceivable impact नहीं रहता
ईमानदारी से कहूं तो मैं पहले ही nostalgia में काफी डूबा हूं, और पकड़कर रखने के लिए और चीजों की जरूरत नहीं है। नए TV programs नहीं देखता, नया music नहीं सुनता, और मानसिक रूप से 1999 में अटका हुआ लगता हूं; यह healthy है या नहीं, पता नहीं
ज्यादा सही तुलना उन letters से है जो लंबे समय तक टिकते हैं
messages एक कहानी बनाते हैं, और हमारी पीढ़ी की zeitgeist को समेटे होते हैं
लगता है लोगों ने अभी इस बारे में ज्यादा नहीं सोचा कि ऐसी चीजों को कैसे preserve किया जाए
निजी तौर पर मुझे यह idea पसंद है, और मैं कल्पना कर सकता हूं कि अपनी मां के साथ हुए सारे या कुछ messages export करके उस समय की याद के रूप में रखूं
सच में शानदार है, और किसी प्रिय व्यक्ति को देने के लिए बढ़िया gift भी हो सकता है
हाल ही में Nomic Atlas(https://docs.nomic.ai/) इस्तेमाल करते हुए मैंने अपनी काफी chat history इसमें डाली, और messages को topic-wise clusters में visualize और explore करना काफी दिलचस्प था
इसलिए लगा कि messages के embeddings generate करके और topic modeling चलाकर digital की searchability को physical format में लाया जा सकता है
फिर असली किताब के अंत में topic-wise index बनाया जा सकता है, और उन pages के नंबर reference के रूप में दिए जा सकते हैं जहां उस topic के messages हैं
Mac पर iMessage export करने वाली Python script: https://pypi.org/project/imessage-reader/
2000 साल बाद, 21वीं सदी के लोग कैसे रहते थे इसका अध्ययन करते समय शायद ऐसी किताबें ही बची होंगी
tweets, chats, SMS, emails, निजी devices की digital photos जैसी ephemeral information सब गायब हो चुकी हो सकती है
personal use के लिए BN Press के बारे में नहीं जानता था
KDP और Lulu को थोड़ा देखा था, लेकिन Kindle इस्तेमाल करके पसंद आने के बाद मैंने ebooks को main focus बनाने का फैसला किया
limited या experimental printing के लिए BN Press शानदार लगता है, और 1300 pages के लिए 30 dollars कमाल है