- Como era difícil volver a leer conversaciones antiguas solo con búsqueda, convirtió su conversación más grande de iMessage en un libro físico que puede hojearse por fecha
- Extrajo los mensajes abriendo
sms.dbdel respaldo del iPhone con SQLite, pero parte del contenido no estaba enmessage.text, sino en un blob binario demessage.attributedBody, así que hizo falta procesamiento adicional - En vez de crear su propio parser, aprovechó el crate de Rust imessage-database para leer la base de datos de iMessage como datos estructurados, y ajustó el SQL para traer solo una conversación
- El contenido del libro se generó con LaTeX, y para resolver el renderizado de emoji y el costo de impresión usó XeLaTeX y la fuente monocromática Google Noto Emoji
- Los mensajes de 3 años sumaron unas 1,300 páginas en formato 6" x 9", así que se dividieron en 3 volúmenes y se imprimieron por 30 dólares con envío incluido en Barnes & Noble Press
Por qué convertir iMessage en un libro
- Al intentar recordar hechos concretos del pasado, el historial de mensajes de texto suele servir como pista
- La búsqueda del historial completo de iMessage en iPhone ha mejorado en velocidad, pero para que sea útil hay que recordar una parte exacta del texto del mensaje que se busca
- Al entrar desde los resultados de búsqueda a una conversación antigua para ver el contexto alrededor, la carga por desplazamiento es muy lenta
- Como no existe una función para saltar directamente a una fecha específica, decidió crear por su cuenta una experiencia de hojear la conversación como si fuera un libro
Extraer mensajes desde un respaldo de iPhone
- Para procesar los mensajes, primero tuvo que sacar los datos fuera del iPhone
- Según iPhone Wiki, al obtener
sms.dbdesde un respaldo de iPhone se pueden manejar los mensajes como una base de datos SQLite - Tras crear un respaldo estándar con Finder en Mac y abrir la carpeta del respaldo, en la raíz aparecen directorios con nombres en bytes hexadecimales
- El nombre de archivo de
sms.dbera3d0d7e5fb2ce288813306e4d4636395e047a3d28, tal como aparece en iPhone Wiki, y pudo copiarlo comoimessage.dby abrirlo con la CLI desqlite3 - La base incluía tablas como
message,attachment,chat,handleychat_message_join
Consulta SQL y el problema de extraer el contenido
- Para sacar la conversación real, tuvo que unir las tablas
message,chat_message_joinychat - Al consultar los mensajes de un
chat_identifierespecífico en orden cronológico, vio que algunos mensajes aparecían sin contenido - Parte de esos mensajes aparentemente vacíos no estaba en
message.text, sino en un blob binario codificado de NSMutableAttributedString dentro de la columnamessage.attributedBody - Al extraer el binario en hex desde
sqlite3y revisarlo conxxd, pudo ver que el contenido de texto realmente estaba ahí - En lugar de implementar por cuenta propia un parser del formato binario, usó el crate imessage-database
- Este crate lee la base de datos de iMessage y la convierte en estructuras de datos de Rust
- El binario
imessage-exporterincluido puede generar conversaciones como texto o HTML - Modificó ligeramente la sentencia SQL de la librería para limitar la extracción a una sola conversación
Crear el contenido del libro con LaTeX
- Como el objetivo no era un archivo HTML o de texto, sino un libro físico que pudiera sostenerse y hojearse, eligió LaTeX como formato de salida
- El código fuente basado en texto de LaTeX encaja bien con plantillas y generación automática, así que exportó cada mensaje como código LaTeX
- El renderizado inicial comenzó de forma simple
- Los mensajes enviados por él se alineaban a la izquierda, y los de la otra persona a la derecha
- Donde había imágenes, insertó un texto indicando archivo adjunto
- Omitió elementos más engorrosos de renderizar, como reacciones y respuestas
- Dividió capítulos por fecha e hizo algunos ajustes visuales
Manejo de emoji y XeLaTeX
- LaTeX normal no soporta unicode, así que si intentaba renderizar tramos que incluían emoji, el compilador fallaba
- Podría haber eliminado los emoji, pero consideró que son importantes en la comunicación moderna y decidió no excluirlos
- Cambió a XeLaTeX para usar soporte de fuentes unicode
- En el código LaTeX generado, envolvió cada emoji con la forma
{\\emojifont X}y asignó\\emojifonta una fuente de emoji, logrando renderizar emoji inline - Para evitar el costo de la impresión a color, usó la fuente monocromática de emoji de Google Noto Emoji
- Insertó el comando LaTeX
\\markrighten cada mensaje para que el encabezado siguiera la fecha actual
Dividir 1,300 páginas en 3 volúmenes
- Al compilar 3 años de mensajes con el tamaño de página estándar de 6" x 9", se generó un PDF de bastante más de 1,000 páginas
- Como el período objetivo era exactamente de 3 años, dividió el conjunto completo en 3 volúmenes para reducir cada uno a un tamaño imprimible
- La extensión final fue de aproximadamente 1,300 páginas en total
Impresión con Barnes & Noble Press
- Después de revisar varias opciones de impresión, eligió Barnes and Noble Press
- Era algo más caro que otras opciones como Lulu o Amazon KDP, pero resultó más adecuado porque al imprimir un libro para uso personal no era necesario “publicarlo”
- Pudo imprimir los tres volúmenes, unas 1,300 páginas en total, por 30 dólares con envío incluido
- Al subir el PDF del interior, el sitio de B&N Press generó las medidas necesarias para la portada, y con esas medidas creó las portadas de cada volumen en Inkscape
- El sitio web de B&N Press en general era muy lento, y durante el pedido hubo un problema por el cual la página de pago no abría durante más de 24 horas
- Una vez resuelto el problema, el pedido siguió adelante y unas semanas después recibió los tres libros físicos
- Hojearlos como libros físicos resultó mucho más fácil que volver a buscar conversaciones pasadas en el teléfono
Cómo hacerlo tú mismo
- El código fuente está algo desordenado y no está empaquetado como binario de Cargo, pero la cantidad de código no es mucha
- El código del proyecto está publicado en bkettle/message-book
1 comentarios
Opiniones de Hacker News
Me encanta por la idea de dejar más registros físicos de la correspondencia personal
Por el título pensé que sería una historia sobre un LLM generando una narrativa de eventos a partir del historial de mensajes, y siento que eso sería genial como servicio
Ahora me dieron ganas de intentarlo también con mi historial de chats de Telegram
Hay libros que recopilan cartas de Feynmann, Feyeraband, Einstein y otros; ahora casi todo son correos detrás de una contraseña, así que es muy probable que no quede ese montón de cartas personales para contextualizar a las figuras históricas del futuro
Si necesitas una copia física, podrías copiarlo a una microSD, y si te preocupa perderla, haces unas tres
Ahora quiero intentar hacer algo parecido yo mismo
Qué genial ver que la librería que hice, imessage-exporter, se usa de verdad
Es un caso de uso realmente interesante
La próxima vez que retome esta idea pienso cambiarme a esa librería, y me interesaría cualquier consejo o tip sobre acceso casi en tiempo real
Mi tía ha conservado de forma maravillosa las cartas y diarios que mis abuelos intercambiaron durante la Segunda Guerra Mundial
De inmediato pensé que nuestros hijos y nietos no van a poder disfrutar de lo mismo
Si les interesa, pueden ver el blog
En realidad se parecería más a conservar todas las notitas de “compra leche de camino a casa”, “sí vas a recoger a los niños, ¿verdad?” o “nos vemos en 20 minutos”
Aun así, eso también tiene su encanto, así que espero no sonar demasiado aguafiestas
Ya toca hacer que esto funcione también con WhatsApp para los británicos
Me emocioné con la idea del proyecto, hasta que me di cuenta de que para hacer un fork tendría que aprender Rust
De todos modos, es una idea realmente genial, y leer historiales de chat con amigos da bastante nostalgia
También enlaza una herramienta de exportación de Telegram
Por ejemplo, no estoy seguro de que conserve los emojis, y obviamente dejaría fuera adjuntos o mensajes de voz
Si lo extraes de la base de datos de respaldo, además seguro está cifrada
Si soy sincero, me conformaría incluso con poder crear un archivo de respaldo del que realmente pudiera estar seguro de restaurar más tarde en otro dispositivo
¿Soy el único al que le inquieta un poco la idea de mandar a una editorial el historial completo de mensajes personales para imprimirlo?
Más bien debería preocuparte más un ataque de intermediario por parte de una empresa de minería de datos cuyo negocio es cambiar comportamientos mediante publicidad o herramientas de formación de consenso
Llevo bastante tiempo queriendo hacer algo como lo que hizo la autora, y este sigue siendo uno de los obstáculos que no he resuelto
Imprimir y encuadernar en casa probablemente sea la única opción, y ahora lo que queda es encontrar cómo hacer que el resultado final sea duradero y agradable al tacto
Es muy probable que la editorial no esperara que el PDF de impresión incluyera información de identificación personal, y el período de retención de datos incluso podría ser indefinido
—rot13:-)Puede que sea una opinión impopular, pero esto me da un poco de escalofríos
Para empezar, no entiendo por qué la gente querría guardar un registro de sus conversaciones privadas
A diferencia de las publicaciones públicas o los blogs, creo que los mensajes privados deberían ser efímeros. No grabamos todas las conversaciones cara a cara ni todas las llamadas telefónicas
Parece que cada quien ve este asunto de forma distinta
Yo intento conservar todos los historiales de chat que puedo, y también me gustaría que todas las conversaciones cara a cara y llamadas telefónicas quedaran grabadas y fueran fácilmente accesibles
Siento que la suma total de mis experiencias es lo que soy, así que no quiero olvidarlas. Si no puedo recordarlas, siento como si de algún modo fuera menos yo mismo
Pero también vi ese episodio de Black Mirror, así que termino dividido entre el deseo de recordar perfectamente todas mis experiencias y los beneficios mentales y emocionales de poder olvidar
Aunque en mi caso me da más cringe saber que los mensajes que mandé antes siguen ahí para siempre
Yo hace 10 años era tan distinto a como soy ahora que leer mensajes viejos se siente muy incómodo
Hasta alrededor de 2004 todavía me comunicaba con la gente por cartas reales, y leer unos años después cartas de exnovias o de mis hermanas menores cuando entré por primera vez a la universidad me provocaba una nostalgia muy fuerte
Por otro lado, después de dejar el ejército me mudé a un lugar mucho más pequeño y metí la mayoría de mis cosas en una bodega; tras tres años, decidí que cualquier cosa que no hubiera tocado no la necesitaba y la mandé al almacén
Creo que ahí iban incluidas todas mis cartas y fotos antiguas, pero no puedo decir que de verdad extrañe esas cosas
La gente dice que no quiere olvidar el pasado, pero la realidad de olvidar es que no sabes que olvidaste algo, así que una vez que ya lo olvidaste no hay un efecto perceptible
Si soy sincero, ya estoy lo bastante empapado de nostalgia y no necesito más cosas a las que aferrarme. Ni siquiera veo programas nuevos ni escucho música nueva; siento que mentalmente sigo atrapado en 1999, y no sé si eso sea saludable
La comparación más precisa serían las cartas, que sí duran mucho tiempo
Los mensajes forman una narrativa y capturan el espíritu de la época de nuestra generación
Parece que la gente todavía no ha pensado mucho en cómo conservar este tipo de cosas
En lo personal, me gusta la idea, y puedo imaginar exportar todos o algunos de los mensajes que intercambié con mi madre para conservarlos como recuerdo de esa época
Está padrísimo, y parece que podría ser un regalo excelente para alguien querido
Hace poco, mientras probaba Nomic Atlas(https://docs.nomic.ai/), le metí bastante de mis historiales de chat, y fue muy interesante visualizar y explorar los mensajes agrupados por temas
Así que se me ocurre que, si generas embeddings de los mensajes y corres modelado de temas, podrías llevar la capacidad de búsqueda de lo digital a un formato físico
Entonces podrías crear al final del libro real un índice por temas, con referencias a los números de página donde aparecen mensajes sobre ese tema
Script de Python para exportar iMessage en Mac: https://pypi.org/project/imessage-reader/
Dentro de 2000 años, quizá este tipo de libros sea lo único que quede para estudiar cómo vivía la gente del siglo XXI
Puede que toda la información efímera —tuits, chats, SMS, correos, fotos digitales en dispositivos personales— haya desaparecido
No conocía BN Press para uso personal
Había investigado un poco KDP y Lulu, pero después de probar Kindle y de que me gustara, decidí enfocar mis esfuerzos principalmente en libros electrónicos
Para impresiones limitadas o experimentales, BN Press se ve excelente, y 30 dólares por 1300 páginas es impresionante