Конь-огонь

В лавке им
такой ответ:
— Лошадей сегодня нет.
Но, конечно,
может мастер
сделать лошадь
всякой масти

В крупной конторе, не разменивающейся на клиентов меньше пароходства или национального ВМФ, процесс написания маленького модного продукта для портфолио должен быть максимально коротким. Совершенно не романтичным, но приятным и не хлопотным. Берём картографический движок в одном отделе, коллекцию карт в другом, систему защиты в третьем, быстренько склеиваем всё дизайнерским GUI, отдаем продажникам и неспешно сопровождаем. Рай земной, и премию не за что давать. Самый Большой Босс в начале года велел нам справиться с этой детской задачей за три-четыре месяца, к сезону.

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

В общем, реюз был отринут как морально нестойкий, и мы приступили к написанию своей картографии, самой лучшей, самой портируемой, самой легкой и самой быстрой. Опять же, всегда была возможность хотя бы вприкуску употреблять залежи кода наследной библиотеки, могучей, непознаваемой, наполненной скрытым знанием, которым меня пугали с самого первого дня в конторе. В принципе, существовали какие-то окаменевшие документы, но они старались противоречить друг другу, как могли. Картографы, опять же, вносили посильный вклад в сумятицу. И ещё довольно сильно мешало отсутствие расово верной, образцово референсной картинки, потому как каждый коммерческий продукт в конторе (да что там, каждая версия продукта) видит себе её немножечко по-своему.

В итоге то, что получилось, даже библиотекой назвать сложно. Традиционный подход обычно какой? Для начала умные люди с разной степенью успешности абстрагируют ядро графики. Появляются все эти Canvas, DrawLine, SetColor и прочая. Рисовать надо сложное, поэтому ядро жирнеет и обрастает нечеловеческой подробности интерфейсами, начинает заводить срезы и подмножества. Потом добавляются абстракции источников данных, файловых систем и ещё какой-нибудь экзотики, в зависимости от испорченности разработчиков (например, многопоточные примитивы, моё любимое). Потом над всем этим богатством курчавится гео-семантика, насмерть повязанная на ядрёные абстракции. Получившийся монолит обзаводится собственной системой сборки и отливается в граните. Всё, можно начинать сначала.

У нас времени на ритуальные жертвоприношения не было, шевелиться пришлось в темпе. Обошлись без ядра, получив пачку специализированных слабо связанных микро-утилит по рисованию отдельных фич на карте. Да, с первого взгляда, на клиента нашей картографии переложено неприлично много. Он у нас и файлы итерирует, и текстуры склеивает, и карты расшифровывает. А библиотека вроде как и не делает толком ничего. Просто содержит знание. Зато, чтобы пользоваться этим знанием, не надо платить подсадкой на иглу каких-нибудь «базовых понятий» и нагибом традиционных платформенных практик под сферические библиотечные. Коллега @vox-humana не утерпел, и подпольные сборки для Windows и Linux (на базе agg) появились через полтора месяца после начала работы, что немного намекае. Кстати, виндовая версия до сих пор довольно педантично содержится у нас в чистоте и собираемости, настолько, что многие баги представления карты фиксятся прямо в ней.

В любом случае, картография — это только присказка. Сказка воспоследует.

комментария 2

Добавить комментарий