- Como era difícil reler conversas antigas apenas com busca, a maior conversa de iMessage foi transformada em um livro físico para poder folheá-la por data
- As mensagens foram extraídas abrindo o
sms.dbdo backup do iPhone em SQLite, mas parte do conteúdo não estava emmessage.texte sim em um blob binário demessage.attributedBody, exigindo processamento adicional - Em vez de criar um parser do zero, foi usado o crate Rust imessage-database para ler o banco do iMessage como dados estruturados, ajustando o SQL para buscar apenas uma conversa
- O miolo do livro foi gerado em LaTeX e, para resolver problemas de renderização de emoji e custo de impressão, foram usados XeLaTeX e a fonte monocromática Google Noto Emoji
- As mensagens de 3 anos chegaram a cerca de 1.300 páginas no formato 6" x 9", então foram divididas em 3 volumes e impressas por US$ 30 com frete incluído pela Barnes & Noble Press
Por que transformar iMessage em livro
- Ao tentar lembrar acontecimentos específicos do passado, o histórico de mensagens de texto frequentemente serve como pista
- A busca no histórico completo do iMessage no iPhone ficou mais rápida, mas para ser realmente útil é preciso lembrar parte exata da frase da mensagem procurada
- Ao entrar em conversas antigas a partir dos resultados de busca para ver o contexto ao redor, o carregamento por rolagem é muito lento
- Como não há função para ir direto a uma data específica, decidiu-se criar manualmente uma experiência de folhear como um livro a partir de pontos aleatórios da conversa
Extraindo mensagens do backup do iPhone
- Para processar as mensagens, primeiro foi preciso tirar os dados do iPhone
- Segundo a iPhone Wiki, ao obter o
sms.dbdo backup do iPhone é possível lidar com as mensagens como um banco de dados SQLite - Depois de criar um backup padrão pelo Finder no Mac e abrir a pasta do backup, havia diretórios na raiz com nomes em bytes hexadecimais
- O nome do arquivo
sms.dbera3d0d7e5fb2ce288813306e4d4636395e047a3d28, conforme indicado na iPhone Wiki, e foi possível copiá-lo comoimessage.dbe abri-lo no CLIsqlite3 - O banco continha tabelas como
message,attachment,chat,handleechat_message_join
Consulta SQL e o problema da extração do conteúdo
- Para extrair uma conversa real, foi preciso fazer join entre as tabelas
message,chat_message_joinechat - Ao consultar as mensagens em ordem cronológica com base em um
chat_identifierespecífico, parte delas aparecia com o conteúdo vazio - Algumas dessas mensagens aparentemente vazias não estavam em
message.text, mas sim armazenadas como um blob binário NSMutableAttributedString codificado na colunamessage.attributedBody - Ao extrair o binário em hex no
sqlite3e inspecioná-lo comxxd, foi possível ver que o conteúdo textual de fato estava ali - Em vez de implementar um parser para o formato binário manualmente, foi usado o crate imessage-database
- Esse crate lê o banco de dados do iMessage e o exporta como estruturas de dados Rust
- O binário
imessage-exporterfornecido junto consegue gerar conversas em texto ou HTML - As instruções SQL da biblioteca foram levemente modificadas para restringir a extração a uma única conversa
Gerando o miolo do livro com LaTeX
- Como o objetivo não era HTML nem arquivo de texto, mas um livro físico para segurar e folhear, o LaTeX foi escolhido como formato de saída
- Como o código-fonte em texto do LaTeX combina bem com templates e geração automática, cada mensagem passou a ser exportada como código LaTeX
- A renderização inicial começou de forma simples
- As mensagens enviadas por mim eram alinhadas à esquerda, e as da outra pessoa à direita
- Onde havia imagens, era inserido um texto indicando anexo
- Elementos trabalhosos de renderizar, como reações e respostas, foram ignorados
- Os capítulos foram divididos por data e ajustados visualmente de forma leve
Emoji e processamento com XeLaTeX
- O LaTeX comum não oferece suporte a unicode, então ao tentar renderizar trechos com emoji o compilador falhava
- Emojis poderiam ter sido removidos, mas por serem considerados importantes na comunicação moderna, não foram excluídos
- A solução foi mudar para o XeLaTeX para usar suporte a fontes unicode
- No código LaTeX gerado, cada emoji foi envolvido no formato
{\\emojifont X}, e\\emojifontfoi definido como uma fonte de emoji, permitindo renderização inline - Para evitar o custo de impressão colorida, foi usada a fonte de emoji monocromática Google Noto Emoji
- O comando LaTeX
\\markrightfoi inserido em cada mensagem para que o cabeçalho acompanhasse a data atual
Dividindo 1.300 páginas em 3 volumes
- Ao compilar 3 anos de mensagens no tamanho de página padrão 6" x 9", o resultado foi um PDF com bem mais de 1.000 páginas
- Como o período-alvo era exatamente de 3 anos, o conjunto inteiro foi dividido em 3 volumes para reduzir cada um a um tamanho imprimível
- O total final ficou em cerca de 1.300 páginas
Impressão com Barnes & Noble Press
- Depois de avaliar várias opções de impressão, a escolhida foi a Barnes and Noble Press
- Era um pouco mais cara que alternativas como Lulu ou Amazon KDP, mas se adequava melhor por não exigir que o livro fosse “publicado” para imprimir uma cópia pessoal
- Foi possível imprimir os três volumes, cerca de 1.300 páginas no total, por US$ 30 com frete incluído
- Após enviar o PDF do miolo, o site da B&N Press gerou as dimensões necessárias para a capa, e com essas medidas foram criadas as capas de cada volume no Inkscape
- O site da B&N Press era muito lento no geral, e durante o pedido houve um problema em que a página de pagamento não abria por mais de 24 horas
- Depois que o problema foi resolvido, o pedido avançou e algumas semanas depois os três livros físicos chegaram
- Folhear o conteúdo em formato de livro físico foi muito mais fácil do que tentar reencontrar conversas antigas no celular
Faça você mesmo
- O código-fonte não está muito organizado e não foi empacotado como binário Cargo, mas a quantidade de código não é grande
- O código do projeto está disponível em bkettle/message-book
1 comentários
Opiniões no Hacker News
Gosto muito da ideia de deixarmos mais registros físicos de correspondências pessoais.
Pelo título, achei que seria uma história sobre um LLM gerando uma narrativa dos acontecimentos com base no histórico de mensagens, e acho que seria legal transformar algo assim em um serviço.
Agora fiquei com vontade de fazer o mesmo com meu histórico de conversas do Telegram.
Há livros que reúnem cartas de Feynman, Feyerabend, Einstein etc.; hoje, quase tudo está em e-mails protegidos por senha, então é bem provável que no futuro quase não existam pilhas de cartas pessoais para contextualizar figuras históricas.
Se você precisa de uma cópia física, basta copiar para um microSD; se tem medo de perder, faça umas três cópias.
Agora fiquei com vontade de tentar fazer algo parecido eu mesmo.
É legal ver que a biblioteca que criei, imessage-exporter, está sendo usada de verdade.
É um caso de uso realmente interessante.
Da próxima vez que eu revisitar essa ideia, pretendo trocar para essa biblioteca, e ficaria curioso por conselhos ou dicas sobre acesso quase em tempo real.
Minha tia preservou maravilhosamente as cartas e diários que meu avô e minha avó trocaram durante a Segunda Guerra Mundial.
A primeira coisa que me veio à mente foi que nossos filhos e netos não terão a mesma alegria.
Se tiver interesse, pode ver o blog.
Parece mais próximo de preservar todos aqueles bilhetes do tipo “compra leite no caminho para casa”, “você vai buscar as crianças, certo?” e “te vejo em 20 minutos”.
Ainda assim, há um certo charme nisso, então espero não soar como alguém jogando um balde de água fria demais.
Agora é hora de fazer isso funcionar também no WhatsApp para os britânicos.
Fiquei empolgado com a ideia do projeto, até perceber que teria de aprender Rust para fazer um fork.
De qualquer forma, é uma ideia muito legal, e ler históricos de conversas com amigos é algo bastante nostálgico.
Ele também traz link para uma ferramenta de exportação do Telegram.
Por exemplo, não tenho certeza se os emojis permanecem, e anexos ou mensagens de voz obviamente ficam de fora.
Para extrair do banco de dados de backup, também deve haver criptografia envolvida.
Sinceramente, eu ficaria feliz se ao menos pudesse criar um arquivo de backup que eu tivesse confiança de conseguir restaurar depois em outro dispositivo.
Sou só eu que acho meio inquietante a ideia de enviar todo o histórico de mensagens pessoais para uma editora imprimir?
Você deveria se preocupar mais em sofrer um ataque man-in-the-middle por parte de uma empresa de mineração de dados cujo trabalho é mudar comportamentos por meio de publicidade ou ferramentas de formação de consenso.
Venho planejando fazer o que o autor fez há bastante tempo, e esse ainda é um dos obstáculos que não resolvi.
Imprimir e encadernar em casa provavelmente é a única opção; agora resta descobrir como tornar o resultado final durável e com uma boa sensação ao toque.
É bem possível que a editora não esperasse que o PDF de impressão contivesse informações de identificação pessoal, e o período de retenção dos dados pode ser indefinido.
—rot13:-)Pode ser uma opinião impopular, mas acho isso um pouco assustador.
Para começo de conversa, não entendo por que as pessoas querem guardar registros de conversas pessoais.
Ao contrário de posts públicos ou blogs, acho que mensagens pessoais deveriam ser efêmeras. Afinal, não gravamos todas as conversas presenciais ou ligações telefônicas.
Parece que cada pessoa enxerga essa questão de um jeito.
Eu tento preservar todos os históricos de chat possíveis, e gostaria que todas as conversas presenciais e ligações telefônicas também fossem gravadas e facilmente acessíveis.
Tenho a sensação de que sou a soma das minhas experiências, então não quero esquecê-las. Se não me lembro delas, sinto como se de algum modo eu fosse menos eu mesmo.
Ao mesmo tempo, vi aquele episódio de Black Mirror, então fico dividido entre o desejo de lembrar perfeitamente todas as experiências e os benefícios mentais e emocionais de poder esquecer.
No meu caso, porém, pesa mais a vergonha de saber que mensagens que enviei no passado continuam existindo para sempre.
O eu de 10 anos atrás era tão diferente de quem sou hoje que ler mensagens antigas me parece extremamente constrangedor.
Até mais ou menos 2004, eu ainda me correspondia com pessoas por cartas de verdade, e reler anos depois as cartas que ex-namoradas ou minhas irmãs mais novas me mandaram quando fui para a faculdade pela primeira vez despertava uma nostalgia forte.
Por outro lado, depois de sair das Forças Armadas, me mudei para um lugar muito menor e coloquei a maior parte das minhas coisas em um depósito; três anos depois, concluí que tudo que eu não tinha tocado era desnecessário e entreguei o conteúdo do depósito.
Acho que isso incluía todas as cartas e fotos antigas, mas não posso dizer que de fato sinta falta desses objetos.
As pessoas dizem que não querem esquecer o passado, mas a realidade de esquecer é que você não sabe que esqueceu, então, uma vez esquecido, não há efeito perceptível.
Sinceramente, acho que já estou mergulhado em nostalgia o suficiente e não preciso de mais coisas para me agarrar. Não assisto a programas de TV novos nem ouço música nova; sinto que estou mentalmente preso em 1999, e não sei se isso é saudável.
Cartas, que duram muito tempo, são uma comparação mais precisa.
Mensagens constroem uma história e contêm o zeitgeist da nossa geração.
Parece que as pessoas ainda não pensaram muito sobre como preservar esse tipo de coisa.
Pessoalmente, gosto da ideia e consigo imaginar exportar todas ou algumas das mensagens que troquei com minha mãe para guardá-las como lembrança daquela época.
Muito legal, e parece que poderia ser um ótimo presente para alguém querido.
Recentemente, testei o Nomic Atlas(https://docs.nomic.ai/) colocando bastante do meu histórico de chats, e foi bem interessante visualizar e explorar as mensagens em clusters por assunto.
Isso me fez pensar que, se você gerar embeddings das mensagens e rodar modelagem de tópicos, poderia trazer a capacidade de busca do digital para o formato físico.
Assim, seria possível criar um índice por assunto no fim do livro físico, com referências aos números das páginas onde aparecem mensagens daquele tema.
Script em Python para exportar iMessage no Mac: https://pypi.org/project/imessage-reader/
Daqui a 2.000 anos, talvez só restem livros como este para estudar como as pessoas do século 21 viviam.
Informações efêmeras como tweets, chats, SMS, e-mails e fotos digitais em dispositivos pessoais podem ter desaparecido todas.
Eu não conhecia o BN Press para uso pessoal.
Dei uma olhada no KDP e no Lulu, mas depois de experimentar um Kindle e passar a gostar dele, decidi focar principalmente em e-books.
Para impressões limitadas ou experimentais, o BN Press parece excelente, e 30 dólares por 1.300 páginas é impressionante.