Опыт: как потерять документ, сохранив его

28.01.2021

Все мы знаем, что Иллюстратор может «упасть». Все мы не раз доставали документ из бэкапов, который сам Иллюстратор регулярно делает. Все мы ругали Иллюстратор и самих себя, когда не сделали дополнительную копию документа. Но этот случай о том, как нажатие «Сохранить» привело к безвозвратной потери содержания документа.

Задача

Когда я делал анонс проекта «Генератор дорожных указателей», я решил записать замедленное видео прорисовки знака:

Реально замедлить видео в 10 тысяч раз невозможно, поэтому я придумал, как мне показалось, достаточно элегантный способ — ставить маленькие паузы внутри скрипта.

Решение

Во время разработки я использую самописный скрипт, который пишет в лог-файл все действия, чтобы видеть процесс изнутри. Этот скрипт вызывается во всех функциях и методах, инициализаторах классов и для логирования переменных — то есть мне даже не надо было проставлять эти паузы внутри экстеншена. Я просто смогу поставить маленькую паузу в функцию логирования.

Ещё был момент, что иллюстратор во время выполнения скриптов не прорисовывает документ, а только по окончании скрипта. Но можно принудительно в скрипте сказать ему «Рисуй!».

И вот я добавил в логирование:

$.sleep(15);   // паузка 15 миллисекунд
app.redraw();  // перерисовка документа

Получилось идеально — всего 2 строчки кода и на выходе я получаю медленный процесс рисования знака. Осталось подготовить знак и запустить экстеншен.

Ошибка

У меня был один иллюстратовский файл, в котором я хранил все исходники для анонса. Там и решил запустить процесс рисования знака. Я добавил новый артборд и запустил экстеншен — прорисовалось идеально! Теперь надо было записать скринкаст.

Я выделил всё, удалил сгенерированный перед этим знак, запустил экстеншен, полюбовался процессом, остановил запись видео. И сохранился в Иллюстраторе.

Всё. Документ я потерял именно тут.

В чём ошибка?

В тот момент, когда я выделил всё перед записью видео и удалил, естественно я удалил всё из документа (кроме заблокированных слоёв и элементов). Но это совершенно нормально — я могу нажать «Отмену» и всё восстановится, или не сохранять документ и просто выйти из него.

НО! Проблема в том, что команда app.redraw() в скрипте после прорисовки добавляет шаг в историю документа. То есть скрипт сгенерировал огромную тучу шагов в историю документа. И мне надо было нажать около 400 раз «отмену». Но в настройках истории в Иллюстраторе у меня стояло 100 действий. А так как я сохранился, я уже не мог закрыть документ без сохранения.

И вот я нажимаю «отмену», нажимаю ещё, и ещё, И ЕЩЁ, И ЕЩЁ! А всё, что происходит, — это только: пропал артборд у знака, пропала легенда, пропал цвет у фона знака, изменилась ширина у фона и так далее. И вот я нажал 100 раз отмену, но всё, что вижу перед собой, — это недорисованный знак и пустой документ...

В тот момент, когда я это понял, у меня засосало под ложечкой (как у Гарри Поттера). Этот файл я делал долго, собирая разные знаки из готовых результатов и файлов процесса. И вот я всё потерял: вместо знаков я видел пустые артборды.

Я даже попробовал принудительно покрашить Иллюстратор в надежде найти _backup-файл. Но мой документ был совершенно нормально сохранён. И ничего не сохранилось...

Вывод

Конечно, в этом кейсе я виноват сам: удалил элементы и не подумал — сохранится ли он. Но способ потери документа для меня был новым.

Я не переделывал всё, потому что многие артборды я уже экспортировал в растры. Но по мере наполнения анонса пришлось переделывать файлы. И каждый раз я вспоминал этот случай.

Теперь я знаю — для записи замедленного видео надо делать отдельный документ.

PS: Как подсказывают мне коллеги, вывод ещё можно дополнить хранением бэкапов файлов или в облачных сервисах. Конечно, когда речь идёт о рабочих проектах — без этого никуда. Но тут — свой личный файл... В общем, надо относиться к своим проектам как к полноценным, рабочим!