суббота, 30 апреля 2016 г.

[prog.actors] Интересная задачка на применимость модели акторов и акторных фреймворков

В комментариях к одной из предыдущих заметок ув.тов.Dmitry Popov (aka thedeemon) подкинул интересную задачку.

Суть такая. Интерактивное приложение, где пользователь тыкает в произвольную позицию на таймлайне. Надо показать соответствующий кадр из видео, но кадр этот должен пройти обработку цепочкой фильтров. Причем любой фильтр для получения кадра N может захотеть иметь кадры N-2, N-1, N и N+1, поэтому чтобы показать пользователю кадр 123, прошедший через три фильтра, надо чтобы фильтр_1 получил на вход и обработал кадры 120-125, фильтр_2 из них сделал 121-124, а фильтр_3 сделал бы из них кадр-результат 123. Дальше пользователь может захотеть следующий кадр, 124, для которого фильтру_3 понадобятся кадры 122-125 от фильтра_2 (часть которых он уже сделал, но не все), тому - кадры 121-126 от фильтра_1 и т.д. А может пользователь захотеть кадр 200, и все эти 120-126 уже не нужны. Фильтры небыстрые, надо бы им работать в разных потоках параллельно. Цепочка фильтров не статична, пользователь может ее менять, а также временно отключать некоторые фильтры (как в фотошопе слой невидимым сделать).

Логика работы при этом получается следующая:

  • gui говорит фильтру_3: дай мне кадр 123;
  • фильтр_3 понимает, что ему нужны кадры 121-124 и запрашивает их у фильтра_2;
  • фильтр_2 понимает, что ему нужны кадры 120-125 и запрашивает их у фильра_1;
  • ...
  • пока все задействованные в цепочке обработки фильтры занимаются своим делом, от gui может прилететь команда "дай мне кадр 200";
  • фильтр_3 в этом случае говорит фильтру_2 "забей на кадры 121-124 и займись кадрами 198-201";
  • фильтр_2 в этом случае говорит фильтру_1 "забей на кадры 120-125 и займись кадрами 197-202"...

Плюс стоит добавить, что помимо такого интерактивного режима есть еще режим "обработать все кадры от первого до последнего", где все видео через эту цепочку фильтров проходит. И там уже важно, чтобы максимально параллельно все происходило и никто никого не ждал сверх необходимого.

Собственно, задачка в том, чтобы понять, как эту задачу можно решать с помощью акторов вообще. Ну и применительно к фреймворкам, вроде SObjectizer и CAF в частности.

Что ж, попробуем пофантазировать.

[life.cinema] Очередной кинообзор (2016/04)

Подошло время очередного кинообзора. В начале списка те фильмы, которые больше понравились. В конце, соответственно, которые понравились меньше. Ну и отдельно упомянут фильм "Лобстер", который лично я вообще не знаю как оценить.


Пятница (2016). Мне понравилось.

Доверие (The Trust, 2016). Николас Кейдж в кои-то веки снялся в достойном фильме.

Три девятки (Triple 9, 2016). Крепкий криминальный фильм.

Кукла (The Boy, 2016). Достойная попытка сделать ремейк "Привязанные к дому", но на более высоком техническом уровне.

Да здравствует Цезарь! (Hail, Caesar! 2016). Такое ощущение, что братья Коэн сняли фильм про своих и для своих. Для все остальных, кто с производством кино не связан, ценность фильма будет не очень понятна. Я, например, не проникся.

СуперБобровы (2015). Серединка на половинку. Местами смешно. А в целом впечатление, что эта каша из отдельных юмористических фрагментов, которые не были толком увязаны в одно целое.

Последний обряд (Demonic, 2015). Не самый плохой ужастик на околомистическую тему. Но далеко не шедевр.

И грянул шторм (The Finest Hours, 2016). Ну очень неспешно все развивается на экране. И это убивает все остальные впечатления от фильма.

Мой парень - киллер (Mr. Right, 2015). Не торкнуло. Вообще.

Я есть гнев (I am Wrath, 2016). Посредственный боевик.

Лобстер (The Lobster, 2015). Не смотря на хороших актеров и потрясающее техническое качество, лично я так и не понял -- что же это было.

пятница, 29 апреля 2016 г.

[prog.c++] Про отсутствие прогресса в развитии SObjectizer в последнее время

С момента релиза версии 5.5.16 прошло уже больше месяца. С тех пор в SO-5 изменений не вносилось. Может сложиться впечатление, что развитие проекта остановилось, что не так уж редко происходит с мелкими OpenSource-проектами. Надо бы пояснить, что к чему.

Сейчас SO-5 активно используется при разработке прототипа одной любопытной системы (подробности раскрывать не могу). Плюс, насколько мне известно, SO-5 продолжает активно использоваться внутри компании Интервэйл, откуда он и вышел в свое время. Так что SO-5 находится в повседневном использовании.

И это самое использование показывает, что нет какой-либо острой необходимости добавлять в SO-5 еще какие-либо фичи. В самом SO-5 всего хватает. Работает себе и работает. А добавлять какие-то мелкие рюшечки ради маркетинга уже не хочется. Хоть я и называю SO-5 маленьким проектом, но для нашей команды он таковым не является: для нас это довольно большой и сложный проект. Увеличивать его объем и сложность просто "ради галочки" не только не интересно, но и тупо дорого. Поэтому развитие SO-5 пока приостановлено.

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

Так что работа, на самом-то деле идет, и довольно напряженная. Только сейчас она идет уже в другом направлении. Раньше мы создавали SO-5 в качестве прочного фундамента. Теперь уже очевидно, что фундамент есть и мы занялись несколько другими вещами, опираясь на этот самый фундамент.

Хотя есть несколько моментов, ради которых имело бы смысл выпустить SO-5.5.17. Но решения для этих самых моментов пока еще не очевидны, поэтому работы над 5.5.17 еще не начались.

среда, 27 апреля 2016 г.

[prog] Не могу не поделиться удовольствием от использования MxxRu::externals

Совсем маленький свежий пример. Было небольшое описание внешних зависимостей для тестового проектика:

MxxRu::svn_externals :so5 do |e|
  e.url 'http://svn.code.sf.net/p/sobjectizer/repo/tags/so_5/5.5.16'
  e.option '-q'
  e.option '--native-eol''LF'

  e.map_dir 'dev/so_5' => 'dev'
end

MxxRu::svn_externals :timertt do |e|
  e.url 'http://svn.code.sf.net/p/sobjectizer/repo/tags/timertt/1.1.1'
  e.option '-q'
  e.option '--native-eol''LF'

  e.map_dir 'dev/timertt' => 'dev'
end

MxxRu::arch_externals :boost_process do |e|
  e.url 'http://www.highscore.de/boost/process0.5/process.zip'

  e.map_dir 'boost' => 'dev'
end

MxxRu::hg_externals :boost_process_mxxru do |e|
  e.url 'https://bitbucket.org/sobjectizerteam/boost_process_mxxru-0.1'
  e.map_dir 'dev/boost_process_mxxru' => 'dev'
end

Понадобилось добавить в проект еще одну зависимость -- библиотеку procxx. Эта малюсенькая header-only библиотека, которая живет на GitHub-е, имеет только одну ветку master и не имеет на данный момент ни одного релиза. Добавляю всего несколько строк в externals.rb и получаю зависимость от конкретного коммита в репозитории procxx (что позволяет не боятся сюрпризов, если в последующих коммитах появятся какие-нибудь ломающие совместимость изменения):

MxxRu::git_externals :procxx do |e|
  e.url 'https://github.com/skystrife/procxx'
  e.commit 'dfd9818'
  e.map_file 'include/process.h' => 'dev/procxx/*'
end

Запускаю mxxruexternals...

понедельник, 25 апреля 2016 г.

[prog] Mxx_ru-1.6.11 с первой версией поддержки CMake-проектов

Mxx_ru обновился до версии 1.6.11

Установить Mxx_ru можно командой gem install Mxx_ru

Обновить Mxx_ru можно командой gem update Mxx_ru

Так же Mxx_ru можно загрузить с SourceForge (gem-файл).

Из мелочей: в данной версии появились новые шаблоны externals и ext-cmake-prj для mxxrugen. А так же новый тип obj_placement-а под именем ToolsetRuntimeSubdirObjPlacement, который создает имена подкаталогов с результатами компиляции вида vc14_0_19_00_23918_x64 и gccmingw_5_3_0__x86_64_w64_mingw32.

А из главного в этой версии реализована возможность использования проектов с CMake-вскими проектными файлами в рамках контролируемой Mxx_ru сборки. Как это может выглядеть покажу на примере подключения исходников библиотеки soci в Mxx_ru-шный проект.

воскресенье, 24 апреля 2016 г.

[life.prog] Краткие впечатления о конференции GECon-2016

Побывал сегодня на ИТ-шной конференции GECon-2016, которую ЕПАМ проводил в Гомеле. Это уже вторая ЕПАМовская конференция, на которой доводится побывать. И второй раз организация на самом высоком уровне. Решпект и уважуха :)

Что до докладов, то остро ощущается, что я уже старый и слишком много знаю. Так что, к сожалению, если бы я поставил себе целью сделать фоторепортаж с конференции, то эта задача была бы интереснее, чем задача узнать что-нибудь новое. Но это мои личные заморочки. На конференции было много молодежи, такие вещи, очевидно, им и интереснее, и полезнее.

Тем не менее, надеюсь, конференция станет ежегодной и на нее смогут попасть докладчики не только из ЕПАМа.

Кстати о фотографиях: немного картинок с выставки можно найти в этом альбоме.