вторник, 1 января 2030 г.

О блоге

Более двадцати лет я занимался разработкой ПО, в основном как программист и тим-лид, а в 2012-2014гг как руководитель департамента разработки и внедрения ПО в компании Интервэйл (подробнее на LinkedIn). Поэтому в моем блоге много заметок о работе, в частности о программировании и компьютерах, а так же об управлении.

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

понедельник, 31 декабря 2029 г.

[life.photo] Характерный портрет: вы и ваш мир моими глазами. Безвозмездно :)

Вы художник? Бармен или музыкант? Или, может быть, коллекционер? Плотник или столяр? Кузнец или слесарь? Владеете маленьким магазинчиком или управляете большим производством? Реставрируете старинные часы или просто починяете примус? Всю жизнь занимаетесь своим любимым делом и хотели бы иметь фото на память?

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

суббота, 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-шный проект.