Text2Store
Pobierz

Blog

Jak wydrukować całą rozmowę w iMessage (nawet 84 000 wiadomości)

Gdzieś powyżej kilku tysięcy wiadomości „wydrukuj całą rozmowę” przestaje być pozycją na liście funkcji, a staje się problemem inżynierskim. Ludzie przekonują się o tym boleśnie: fora są pełne eksportów, które wiszą w nieskończoność, dają puste strony po stronie 500 albo po prostu się wysypują. My też przekonaliśmy się o tym boleśnie, więc oto, co naprawdę dzieje się w środku i czego trzeba było, żeby rozmowa z 84 000 wiadomości dała się wydrukować.

Dlaczego duże wątki psują eksportery

Prawie każde narzędzie, które tworzy ładną transkrypcję, łącznie z naszym, w końcu prosi silnik przeglądarki o złożenie rozmowy i podzielenie jej na strony. Silniki drukowania przeglądarek zbudowano dla stron internetowych, a nie dla jednego dokumentu z latami wiadomości i tysiącami zdjęć. Poproś jeden o podzielenie tego na strony w jednym przebiegu, a zepsują się trzy rzeczy, coraz poważniej: trwa to wieki, po cichu wypluwa puste strony, gdy pamięci zaczyna brakować, a w końcu procesowi renderowania kończy się pamięć i umiera. Zgłoszenie z praktyki, które ukształtowało naszą pracę: eksport 8 400 wiadomości dał PDF z 811 stronami, pusty od strony 583. Silnik nie zgłosił błędu. Po prostu przestał rysować.

Co działa: podziel, sprawdź, połącz

  • Dzielenie. Transkrypcja renderuje najwyżej 1 500 wiadomości na przebieg, a każdy przebieg drukuje do własnego pliku częściowego. Żaden pojedynczy przebieg nie jest nigdy dość duży, by dojść do granicy.
  • Kontrola pustych stron. Każda część jest sprawdzana po zapisaniu: jeśli silnik nic nie narysował, część jest odrzucana i powtarzana, a część, która nadal się nie rysuje, jest dzielona na pół i próbowana ponownie. Pusty wynik nie może trafić do ostatecznego dokumentu.
  • Wzmocnione łączenie. Części są zszywane w jeden PDF, a połączony plik jest sprawdzany przy zapisie pod kątem usterek, na które zwracają uwagę prawdziwe czytniki PDF. Każda reguła w tej kontroli istnieje, bo nauczył nas jej prawdziwy uszkodzony eksport; surowe czytniki, takie jak Acrobat, odrzucają pliki, które te mniej wymagające otwierają bez problemu.
  • Oznaczenia zamiast pozorów. Eksport wieloczęściowy podaje w nagłówkach „Część 3 z 9, wiadomości od 12 001 do 13 500 z 84 000”. Jeśli coś pominięto, dokument to mówi.

Liczby

Testem obciążeniowym dla tego wszystkiego jest rozmowa prawdziwego użytkownika z 84 000 wiadomości, lata SMS-ów ze zdjęciami wszędzie. Eksportuje się do jednego, kompletnego, czytelnego PDF-a. Dla skali: ten sam wątek we wczesnej wersji miał 1,05 GB; obecny silnik tworzy go w 164 MB, a rozmowa z 2 500 wiadomości pełna zdjęć eksportuje się w około 17 sekund na zwykłym komputerze stacjonarnym.

Jak to naprawdę wydrukować

Jedna uczciwa uwaga: samo okno drukowania ma te same ograniczenia jednego przebiegu co każdy silnik przeglądarki, więc przy bardzo długich wątkach Text2Store kieruje Cię do Eksportuj > PDF, zamiast pozwolić oknu zawieść, a Ty drukujesz z PDF-a, całość albo tylko potrzebne strony. Instrukcja krok po kroku jest na stronie eksport SMS-ów z iPhone’a do PDF, a krótsza wersja całej tej strony na drukowanie SMS-ów z iPhone’a.

Pytania?

Napisz na hello@text2store.com. Jeśli masz wątek, który podejrzewasz o bycie za dużym, naprawdę chętnie o nim usłyszymy.