
На работе надумали обзавестись серьёзным production для проекта, написанного на MatLab.
Как говорят на anekdot.ru, преамбула. Мы когда-то давно говорили с MathWorks по несколько иному поводу — у нас были сомнения в производительности системы, они предложили аудит нашего кода, мы с удовольствием согласились. Ребята втроём копали код несколько дней, сгенерировали кучу слайдов для презентации, которая сводилась к двум пунктам:
1. Ваш код написан идеально, не к чему придраться!
2. Мы можем вам продать сервер за какие-то шестизначные суммы в год, летать будет всё.
Первый пункт лично мне понравился, но оставались какие-то сомнения в его искренности. Через некоторое время у меня дошли руки просмотреть profile проекта, перечитать код модуля, который жрал 90% общего времени (в качестве отмазки себя и своих коллег скажу, что он таки был написан IT-консультантом, настоящим профессионалом своего дела, за какие-то космические деньги в час), выкинул оттуда все лишние строчки (только то, что считается по два раза, и то, что считается впустую — никакой алгоритмической оптимизации), и код стал работать вчетверо быстрее.
После чего сомнения появились и во второй строчке презентации MathWorks (дети! никогда не обманывайте! особенно там, где вас можно легко поймать...) — так ли нам нужен их сервер, если мы можем скопилировать проект и распихать его по уже имеющимся серверам в виде простых exe-шников?
Перехожу ко вчерашней истории. Погоняли мы проект на Windows-машине, хоть на физической, хоть на виртуальной. По этому поводу удивительное дело — у нас IT-дирекция перешла недавно на какую-то более свежую версию виртуализации, и вместо x4 к времени рассчётов, как было раньше, виртуализация даёт всего +10%. Очень хорошо, но мы решили проверить и виртуальные Unix-машины. И тут начался эпос.
1. Компилятор MatLab компилирует только под ту платформу, где он сам находится. При том, что для скомпилированного кода ставится «Matlab runtime environment» на гигабайт, то есть я ожидал компиляции по типу java — в некоторый псевдо-код, единый для всех платформ. Но нет. Я несколько раз переспрашивал, прежде чем поверил. В счастью, «платформа» — это одна из трёх групп: Windows, Mac, Unix.
2. У нас нет клиентских Unix-машин. В смысле простого доступа к ним (я не могу ни «подключиться к экрану», ни зайти по telnet — это отдельная сетка, мне туда входа нет. Договорились, что я подъеду в Orléans, где сидят наши администраторы. По этому поводу — карикатурная ситуация с бородатыми админами в майках и с пивом осталась, только мальчики успели подрасти и поседеть/полысеть, но атмосфера всё та же.
3. У нас нет никакого графического интерфейса на Unix. По этому поводу MathWorks выдал прекрасный термин (наверное, распространённый, я просто давно не общался на эти темы): headless installation. Да, MatLab можно поставить без GUI, только с командной строкой.
4. Стандартный вариант установки: скачиваем «маленький» инсталлятор (120 MB), вводим все идентификаторы, и он скачивает всё необходимое для установки именно того, что ты купил. Очевидно, что этот инсталлятор графический, для нас не подходит. Ок, говорят MathWorks (в какой-то момент они меня начали по голосу узнавать, я им звонил раз 10 вчера), вы можете скачать два iso-образа со всеми продуктами, в момент инсталляции поставится то, что вам нужно. По этому поводу я не премину потоптаться по компетентности наших коллег из MathWorks. Говорят дословно: скачайте iso-образы и разархивируйте их в одну папку. Что значит, «разарзивируйте», в некотором ошалении спрашиваю я? Да, говорят, это то же самое, что zip, он просто называется iso :-)
5. Скачали образы, 11 GB. Сидящий рядом со мной администратор Unix’а начинает нервничать, потому что у него на машине свободного места не так много, и он не собирался сегодня пересматривать всю свою файловую систему. Начали ставить, места предсказуемо не хватает. Попытался стереть откровенно ненужные файлы (всё, что начинается с Simulink — это другой продукт MathWorks, мы его не покупали), но установщику зачем-то нужны все эти файлы. Я вспомнил молодость, жонглирование файлами на дискетах без жёского диска — красиво, но нет, тоже не получилось. С матюками админ полез добавлять ещё одну файловую систему.
6. Ещё одно погружение в детство — для установки нужно отредактировать файл параметров. Очевидно запускаем vi — и руки мои всё ещё помнят, как в нём работать! В этот момент я, по-моему, сильно вырос в глазах всех администраторов. До этого я был для них очередным «представителем клиента», человеком, который должен путать слова «монитор» и «компьютер».
7. Аутентификация MatLab’а проходит через так называемый license server. У нас было много вопросов по этому поводу: моя лицензия привязана к моему Windows-account, как объяснить серверу, что я из-под Unix — это тот же самый я? Попытались вообразить разные варианты аутентификации, потом всё-таки позвонили MathWorks — спокойно, говорят. Мы проверяем только имя пользователя. Чисто как строку. Хозяйке на заметку: для того, чтобы использовать зарегистрированный на кого-то другого MatLab, достаточно создать локальную учётную запись с тем же именем.
8. С горем пополам поставили, скомпилировали, запустили — не работает. Но это уже понятно: у нас весь код с анти-слэшами, а для Unix’а слэши нужны прямые. MatLab даже предлагает мега-функцию filesep, которая возвращает «\» или «/» в зависимости от платформы. На этом мы с админами расстались, договорившись, что я сегодня перепишу всё через эту функцию.
9. Приехав сегодня на работу, я увидел, что мы используем ещё и system для запуска команд DOS (тоже всё работа с файлами) — понятно, что можно написать везде if и продублировать на Unix, но как мы всё это будем тестрировать без доступа к машинам? Плюс, у нас есть работа с Excel — опять же, MathWorks божится, что все его функции используют MS Office API только для скорости, а если Офиса нет — то они и своими средствами обходятся, но как-то даже и пробовать расхотелось. Спасибо за творчески проведённый день, но мы пока что останемся на той же платформе.