LE Blog

Инженер с поэтической душой

27.01.2020 firtree_right Медиатор между головой и руками

В прошлом году величайшему произведению киноэкспрессионизма — фильму «Метрополис» — стукнуло 90 лет. Первый раз мы смотрели его с Ирой в поезде Москва — Тольятти, потому что другого способа заставить себя сесть за что-то такое старое и медленное в эпоху всего нового и быстрого просто не было. Картина, конечно, маркирует эпоху. Она впоследствии вдохновила немалое количество отсылок, включая альбом «Сепультуры» и робота C-3PO. Из-за юбилея, фильм показывают в Берлине, озвучивая живым оркестром. Версия эта — более полная, чем мы смотрели в поезде, потому что в Буэнос-Айресе в 2008 году нашли какую-то уцелевшую копию. В итоге отсутствующих сцен, которые нужно пояснять текстом, мне кажется, всего одна.

metropolis

Последнее время у меня нарастает ощущение — особенно, когда пишу в блог, — что общие контексты дробятся и распадаются на местечковые приколы. Если у меня во дворах и школах были гардемарины и мушкетёры, а потом Шварц со Сталлоне, то лет через 10, мне кажется, персонажа известного всему двору будет уже не отыскать. Будет ли людям о чём поговорить вообще? В условиях стремительно ускользающих общих смыслов знание первоисточника кажется особенно важным. Фриц Ланг — великий визионер. Поэтому мы, конечно же, купили билеты в кинотеатр «Вавилон». Однако этот древний артефакт открылся с неожиданной стороны.

«Джокер», безусловно, на втором месте среди фильмов 2019 года. (Отдельный респект Хильдур Гуднадоуттир за саундтрек!) Сразу после мы практически залпом посмотрели «Таксиста» и «Короля комедии», которых он так неистово цитировал. Зарядившись этим шизотипическим коктейлем, мы и пошли на «Метрополис». Если вы не смотрели ничего из вышеперечисленного, то дальше будет совсем непонятно. На всякий случай, сценарий «Метрополиса» точно есть в «Википедии».

Так вот! Я думаю теперь, что всё, что произошло в фильме после взрыва на фабрике — это бред Фредера, который слёг от нервного срыва. В реальности же он увидел воспитательницу, которая зашла с детьми к ним на этаж и, будучи в самом расцвете пубертата, стал одолеваем противоречивыми чувствами. Отсюда раздвоение Марии на святую проповедницу и секс-робота. Отсюда и воображение себя ключевым героем потенциального конфликта. Мне тоже абсолютно не чуждо вообразить историю с собой-протагонистом. Особенно когда я был помоложе. Особенно, если мне кто-то был симатичен. Особенно, когда я для них какой-то незаметный хрен с горы. Так же поступили герои Де Ниро в «Таксисте» и «Короле комедии». И я, конечно, не знаю, видит ли так «Метрополис» кто-то ещё, но теперь не могу это развидеть. Мне кажется, что произведения с супер-уникальным по рождению героем — это несбыточная мечта незрелого ума. И эта фантазия сформировал большую часть современной западной культуры. А что вы себе воображаете?

27.04.2016 firtree_right Стрелки для krpano на несуществующем языке

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

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

Стрелки

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

Mayalanguage

Передо мной встала задача создать стрелки как в панорамах улиц. Математика у них не очень сложная, а для реализации я решил использовать встроенные в плеер хотспоты. Они позволяют рисовать многоугольники любой формы поверх панорамы.

Поскольку кроме фотографий плеер использует только xml, то автору пришлось придумать свой язык программирования, который бы позволял программировать внутри xml. Можно, конечно, вызывать функции джаваскрипта, но во-первых, это тормозит флэшовую версию, а во-вторых, в чём же тут интерес?

Язык напомнил мне ассемблер, хотя мне не довелось на нём много программировать. По сути это польская нотация, для которой проще всего писать интерпретатор. При этом отсутствует вложенность операций. Функции не возвращают значения (кроме одной), а изменяют аргументы. И самое главное не запутаться, где нужна переменная, а где её значение.

В общем, дорогой читатель, это очень интересный опыт. Я рекомендую всем писать хоть изредка на незнакомом языке. Освежает восприятие. Единственная проблема в том, как потом сделать что-нибудь сложнее. Если мне захочется усложнить математику и позволить наклонять стрелки относительно горизонта, то как быть?

Сжатие

Для тестирования я решил использовать микро-сервер node.js, а вместе с ним инструмент для исполнения задач gulp. Одна такая задача — убирать лишние пробелы в придуманном скриптовом языке krpano. Не столько для обфускации или экономии трафика, сколько опять же для интереса.

Для сжатия xml я нашёл pretty-data, а недостающий кусок дописал:

var gulp = require('gulp'),
    prettyData = require('gulp-pretty-data');

// Minify krpano action
function minifyAction() {
    function dry (file, cb) {
        file.contents = new Buffer(String(file.contents).replace(/(<action.+?>)([\s\S]+?)(<\/action>)/ig, function (str, opentag, cnt, closetag) {
            return opentag + cnt.replace(/\s*(^|[;,=!])\s*/g, "$1") + closetag;
        }));
        cb(null, file);
    }

    return require('event-stream').map(dry);
}

// Minify plugin xml
gulp.task('xml', function () {
    return gulp.src('dev/arrows.xml')
        .pipe(prettyData({type: 'minify'}))
        .pipe(minifyAction())
        .pipe(gulp.dest('arrows/example/'));
});

В общем, если вдруг вы используете krpano, то милости прошу за моими стрелочками. Для них мне тоже пришлось изобрести, как внутри xml задавать форму и поведение опорной точки (см. пример на странице плагина).

Ссылки

  1. Виртуальный тур по Арктике с моими стрелками.
  2. Репозиторий krpano-arrows на гитхабе.
  3. Страница плагина на krpano.com.