Hatred's Log Place

DON'T PANIC!

Feb 19, 2015 - 2 minute read - Comments - projects programming

CMakeProjectManager2: улучшения в диалоге конфигурирования (2)

Очередная порция изменений в развитие post/2015/01/22/cmakeprojectmanager2_uluchshenija_v_dialoge_konfigurirovanija: 1. Исправлен креш при создании конфигурации, при указании тулчейн файла, когда он лежит в директории исходников. Изредка креш проявлялся при переключении уже готовых конфигураций. 2. Добавлена кнопка обзора для выбора тулчейн-файла. По умолчанию открывается в дереве исходников проекта, если тулчейн выбран в другом месте (к примеру, у вас коллекция тулчейнов независимых от проекта), то открывается в месте, где лежит тулчейн. В быстрые закладки добавляется ссылка на дерево проекта, что бы было можно быстро туда перейти. Закрыта задача #2. 3. Добавлена возможность очищать кеш при запуске CMake, что бывает необходимо при изменении некоторых параметров, одним из них, к примеру, является CMAKE_TOOLCHAIN_FILE, другим популярным (особенно при выборе разных версий Qt) является CMAKE_PREFIX_PATH. Изменение этих параметров без удаления кеша ни к чему не приводит, поэтому добавил параметр “Reset cache on CMake run”. Стоит отметить, что при изменении тулчейна это действие обязательно, поэтому, если тулчейн поменялся, но этот параметр не включен, то будет выдаваться вопрос: “You change toolchain. This action requires CMake cache reset. Continue?”. Закрыл задачу #1 4. При встроенном редактировании тулчейна теперь открывается не пустое окно, если ничего не было, а пример тулчейна для Mingw. Можно оставлять только опции, задающие компилятор, что бы выбрать нужную версию оно в системе, если их стоит несколько. 5. Небольшое косметическое изменение: кнопка Edit стала поменьше.

Jan 28, 2015 - 1 minute read - Comments -

Predeclared ARM Register Names

Бывает нужно, часто забываю:

  • R0–R15 and r0–r15
  • c0–c15 coprocessor registers
  • p0–p15 coprocessor registers
  • a1-a4 scratch registers, synonymous with r0-r3
  • v1-v8 variable registers, synonymous with r4-r11
  • sb and SB stack base, synonymous with r9
  • sl and SL stack base, synonymous with r10
  • fp and FP frame pointer, synonymous with r11
  • ip and IP intra-procedure call scratch register, synonymous with r12
  • sp and SP stack pointer, synonymous with r13
  • lr and LR link register, synonymous with r14
  • pc and PC program counter, synonymous with r15
  • s0-s32 VFP single precision registers
  • d0-d16 VFP double precision registers
  • fpsid VFP system ID register
  • fpscr VFP status and control register
  • fpexc VFP exception register
  • wr0-wr16 WMMX SIMD data registers
  • wc0-wc16 WMMX status and control registers
  • wcid WMMX coprocessor ID register, synonymous with wc0
  • wcon WMMX control register, synonymous with wc1
  • wcssf WMMX saturation SIMD flags, synonymous with wc2
  • wcasf WMMX arithmetic SIMD flags, synonymous with wc3
  • wcgr0-wcgr3 WMMX control general purpose registers, synonymous with wc8-wc11

В дополнение - хороший справочник (armv7tdmi): * http://www.gaw.ru/html.cgi/txt/doc/micros/arm/index.htm, в частности системы команд * ARM: http://www.gaw.ru/html.cgi/txt/doc/micros/arm/asm/asm_arm/index.htm * Thumb: http://www.gaw.ru/html.cgi/txt/doc/micros/arm/asm/arm_thumb/index.htm

Jan 22, 2015 - 2 minute read - Comments - projects programming

CMakeProjectManager2: улучшения в диалоге конфигурирования

Для тех, кто не в курсе, что такое CMakeProjectManager2, вот ссылка на статью 2012 года: post/2012/10/17/cmakeprojectmanager2_-_poslednie_izmenenija. Собственно тогда и были сделаны последние крупные изменения, которых мне хватало до сегодняшнего дня. В остальном была работа по синхронизации кодовой базы с апстримом, что бы плагин продолжал собираться и радовать глаз. Код располагается на GitHub: https://github.com/h4tr3d/cmakeprojectmanager2. Инструкции по сборке приложены в README.txt

Итак, как бы ни хотелось, но времени заниматься реализацией TODO листа нет и не предвидится (суть списка: сделать парсер и обойтись без генерации файла для CodeBlocks, а всё остальное уже на это опирается). Но есть и другие задачи. В частности, в сегодняшнем обновлении несколько изменён вид окна “Run CMake” мастера, а именно: 1. Добавлена возможность выбирать тип сборки 2. Добавлена возможность назначать тулчейн (это файл с настройками среды сборки, особенно актуально для кросс-сборки: http://www.vtk.org/Wiki/CMake_Cross_Compiling#The_toolchain_file).

По сути, эти параметры служат для задания в более дружественной формы параметров для CMake: -DCMAKE_BUILD_TYPE= и -DCMAKE_TOOLCHAIN_FILE= соответственно.

Про тулчейн немного подробнее. Изначально планировалось три способа его задания: 1. Автоматическое конструирование на основе Qt Creator Kit 2. Ручное задание файла (пока сделано без возможности открытия диалога поиска, только ручной ввод: issue #2) 3. “Инлайн” тулчейн: редактирует во встроенном редакторе, при запуске контент сохраняется в директории отстройки под именем QtCreator-toolchain-override.cmake

Пока вариант на основе Qt Creator Kit выключен. Будет время - доделаю.

Плюс есть нюанс: согласно документации CMake, смена тулчейна возможно только на новой конфигурации либо на полной очистке текущей (удаления CMakeFiles и CMakeCache.txt), поэтому, если замечены изменения настроек тулчейна, производится полное переконфигурирование без использования кеша. Планирую добавить диалог с предупреждением (issue #1).

Стоит отметить, что пользовательский ввод параметров сохранён, более того, определяется, если параметр уже задан, то будет использоваться пользовательский.

Ну и картинка:

Dec 9, 2014 - 2 minute read - Comments -

Временные зоны в Lightning

Lightning_(ПО)|Lightning мощный календарь для Thunderbird . Вкупе с Exchange EWS Provider может явиться полноценной заменой Outlook.

Беда которую заметил буквально сегодня - сдвинутое время в календаре. Из за нашего перехода на перманентное зимнее время. Оказалось, что расширение содержит свою базу описания временных зон (руки отбить за такое, не даёт им покоя слава Java). И обновляться оно пока не собирается. Решил посмотреть сам.

Nov 18, 2014 - 1 minute read - Comments - programming c++

Practical Guide to Bare Metal C++

Недавно наткнулся на эту книжку на GitBook: http://arobenko.gitbooks.io/bare_metal_cpp/

Доступна для онлайн-чтения, в виде форматов ePUB, MOBI и PDF. Рассматриваются вопросы уменьшения размера приложений, написания своих реализаций ABI функций, что позволяет более детально понимать, а что там вообще внутри происходит, что бывает полезно и обычных приложениях. Вместе с ней обязательно ознакомиться с post/2013/03/28/scott_meyers._effective_c_in_an_embedded_environment.

Книга больше ориентирована на ARM, в частности Raspberry PI, но идеи адаптировать к другим платформам труда не составит.

Nov 13, 2014 - 4 minute read - Comments - linux

Linux, ThinkPad T530 и miniDP (displayport)

На Thinkpad T530 есть два порта для подключения внешних мониторов: VGA и miniDP (Display Port). Если ноутбук с дискретной графикой, то DP разведён на дискретную карту nVidia, соответственно без шаманства графику туда не выведешь.

Используйте данную ссылку только для ознакомительных целей! Подробности под катом. Полное и законченное описание подключения и вывода по ссылке:

http://www.unixreich.com/blog/2013/linux-nvidia-optimus-on-thinkpad-w520w530-with-external-monitor-finally-solved/









Sep 29, 2014 - 2 minute read - Comments -

git-svn: новый git репозиторий в существующий svn

Так сложилось, что в нашей компании используется SVN для внутренних нужд. Но делать локальные эксперименты, или вообще проверки, бранчевания и т.п. значительно удобнее используя git. Естественно и логично для индивидуальной работы использовать git-svn. В статье подробно рассмотрен вопрос экспорта своего нового проекта из git в svn с сохранением истории. Это случай, когда вы делаете локальный проект, отлаживаете его и, по результату, выкладываете в центральный SVN репозиторий.

Подкатом вольный пересказ при использовании стандартного размещения каталогов: ProjectName/{trunk,tags,branches}, для нестандартного - в статье.

Sep 24, 2014 - 2 minute read - Comments -

x264 low latency

Очень хорошая статья на тему: http://x264dev.multimedia.cx/archives/249

UPD, ссылка недоступна, через веб-архив: http://web.archive.org/web/20150421033553/http://x264dev.multimedia.cx/archives/249

Цитата оттуда: > The total latency of x264, including encoder/decoder-side buffering, is: > > B-frame latency (in frames) + Threading latency (in frames) + RC-lookahead (in frames) + Sync-lookahead (in frames) + VBV buffer size (in seconds) + Time to encode one frame (in milliseconds)

Собственно отсюда видно какие ручки крутить у того же FFmpeg что бы сделать задержку на стриминг как можно меньше:

-rc-lookahead #
-bf #
-threads #
-refs #
-x264-params sync-lookahead=#

и всякие буффера.

Эти же опции применительно к AVCodecContext:

AVCodecContext *ctx = ...;
...
av_opt_set(ctx, "rc-lookahead", "#", AV_OPT_SEARCH_CHILDREN);
av_opt_set(ctx, "threads",      "#", AV_OPT_SEARCH_CHILDREN);
av_opt_set(ctx, "bf",           "#", AV_OPT_SEARCH_CHILDREN);
av_opt_set(ctx, "refs",         "#", AV_OPT_SEARCH_CHILDREN);

GOP size (-g/“g”) будет влиять на объём траффика и как быстро картинка сможет восстановиться, если ключевой кадр был потерян.

Ну из опций видно, что загоняя эти параметры в минимальные значения, получим максимальную скорость. Уменьшать количество потоков (threads) имеет смысл когда у вас несколько подобных процессингов.

Есть ещё опция -tune (“tune”) со значением “zerolatency” - вундервафля, которая почти сгоняет задержку в ноль, но и качество картинки примерно туда же. Про то, что включает в себя различные опции тюнинга можно посмотреть в выводе:

x264 --fullhelp

Дополнительные материалы: * X264 Settings - детальное описание параметров x264, может быть не самым актуальным. * ссылка через веб-архив: http://web.archive.org/web/20150203203142/http://mewiki.project357.com/wiki/X264_Settings * Encoding presets for x264 - какие пресеты какие параметры включают, может быть не самым актуальным. * ссылка через веб-архив: http://web.archive.org/web/20150802090458/http://dev.beandog.org/x264_preset_reference.html

UPD: что-то странно, что все ссылки стали недоступны. Особенно рекомендации Ясона.

Sep 5, 2014 - 1 minute read - Comments - linux

Пакетирование отладочной информации в deb

Всё достаточно просто. В control добавляем описание нового пакета, вроде:

Package: ffmpeg-real-dbg
Section: libdevel
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}
Description: debug symbols for ffmpeg libraries
 This package contains the debug symbols for FFmpeg lubraries.
 .
 This is the real ffmpeg. The libraries are installed to the /opt/ffmpeg/lib.

А в rules что-то вроде:

override_dh_strip:
       dh_strip --dbg-package=ffmpeg-real-dbg

Главное, что бы имя пакета соответствовало. Естественно, при сборке нужно обеспечить что бы при компиляции отладочная информация вообще создавась. В случае real-ffmpeg от samrog131 нужно добавить

--enable-debug=3

к ./configure

Подробнее: http://askubuntu.com/questions/182703/how-and-why-to-create-dbg-dev-doc-packages

Sep 4, 2014 - 2 minute read - Comments -

Проблема с внутренними зависимостями при отстройке deb пакетов

Не знал как лучше сформулировать тему.

Суть: есть source-пакет из которого строится несколько бинарных deb-пакетов.

Допустим: * Библиотека: libfoo * Бинарник, зависящий от этой библиотеки: foo * Пакет для разработчика: libfoo-dev

При отстройке имеем примерно такую проблему:

dpkg-shlibdeps: error: couldn't find library libopencv_core.so.2.4 needed by debian/libopencv-ffmpeg-dev/opt/opencv/bin/opencv_traincascade (ELF format: 'elf64-x86-64'; RPATH: '')
dpkg-shlibdeps: error: couldn't find library libopencv_ml.so.2.4 needed by debian/libopencv-ffmpeg-dev/opt/opencv/bin/opencv_traincascade (ELF format: 'elf64-x86-64'; RPATH: '')
dpkg-shlibdeps: error: couldn't find library libopencv_imgproc.so.2.4 needed by debian/libopencv-ffmpeg-dev/opt/opencv/bin/opencv_traincascade (ELF format: 'elf64-x86-64'; RPATH: '')
dpkg-shlibdeps: error: couldn't find library libopencv_highgui.so.2.4 needed by debian/libopencv-ffmpeg-dev/opt/opencv/bin/opencv_traincascade (ELF format: 'elf64-x86-64'; RPATH: '')
dpkg-shlibdeps: error: couldn't find library libopencv_objdetect.so.2.4 needed by debian/libopencv-ffmpeg-dev/opt/opencv/bin/opencv_haartraining (ELF format: 'elf64-x86-64'; RPATH: '')
dpkg-shlibdeps: error: couldn't find library libopencv_calib3d.so.2.4 needed by debian/libopencv-ffmpeg-dev/opt/opencv/bin/opencv_haartraining (ELF format: 'elf64-x86-64'; RPATH: '')
dpkg-shlibdeps: error: couldn't find library libopencv_highgui.so.2.4 needed by debian/libopencv-ffmpeg-dev/opt/opencv/bin/opencv_haartraining (ELF format: 'elf64-x86-64'; RPATH: '')
dpkg-shlibdeps: error: couldn't find library libopencv_imgproc.so.2.4 needed by debian/libopencv-ffmpeg-dev/opt/opencv/bin/opencv_haartraining (ELF format: 'elf64-x86-64'; RPATH: '')
dpkg-shlibdeps: error: couldn't find library libopencv_core.so.2.4 needed by debian/libopencv-ffmpeg-dev/opt/opencv/bin/opencv_haartraining (ELF format: 'elf64-x86-64'; RPATH: '')
dpkg-shlibdeps: error: couldn't find library libopencv_core.so.2.4 needed by debian/libopencv-ffmpeg-dev/opt/opencv/bin/opencv_performance (ELF format: 'elf64-x86-64'; RPATH: '')
dpkg-shlibdeps: error: couldn't find library libopencv_highgui.so.2.4 needed by debian/libopencv-ffmpeg-dev/opt/opencv/bin/opencv_performance (ELF format: 'elf64-x86-64'; RPATH: '')
dpkg-shlibdeps: error: couldn't find library libopencv_objdetect.so.2.4 needed by debian/libopencv-ffmpeg-dev/opt/opencv/bin/opencv_performance (ELF format: 'elf64-x86-64'; RPATH: '')
dpkg-shlibdeps: error: couldn't find library libopencv_objdetect.so.2.4 needed by debian/libopencv-ffmpeg-dev/opt/opencv/bin/opencv_createsamples (ELF format: 'elf64-x86-64'; RPATH: '')
dpkg-shlibdeps: error: couldn't find library libopencv_calib3d.so.2.4 needed by debian/libopencv-ffmpeg-dev/opt/opencv/bin/opencv_createsamples (ELF format: 'elf64-x86-64'; RPATH: '')
dpkg-shlibdeps: error: couldn't find library libopencv_highgui.so.2.4 needed by debian/libopencv-ffmpeg-dev/opt/opencv/bin/opencv_createsamples (ELF format: 'elf64-x86-64'; RPATH: '')
dpkg-shlibdeps: error: couldn't find library libopencv_imgproc.so.2.4 needed by debian/libopencv-ffmpeg-dev/opt/opencv/bin/opencv_createsamples (ELF format: 'elf64-x86-64'; RPATH: '')
dpkg-shlibdeps: error: couldn't find library libopencv_core.so.2.4 needed by debian/libopencv-ffmpeg-dev/opt/opencv/bin/opencv_createsamples (ELF format: 'elf64-x86-64'; RPATH: '')
dpkg-shlibdeps: error: cannot continue due to the errors listed above
Note: libraries are not searched in other binary packages that do not have any shlibs or symbols file.
To help dpkg-shlibdeps find private libraries, you might need to set LD_LIBRARY_PATH.

При этом библиотеки отстроены и с ними всё в порядке.

Лечится добавлением в debian/rules примерно такого:

override_dh_shlibdeps:
        LD_LIBRARY_PATH=$(LD_LIBRARY_PATH):debian/tmp/PATH_TO_LIB_DIR dh_shlibdeps

Главное, замените PATH_TO_LIB_DIR на своё, обычно это PREFIX/lib или PREFIX/lib/$(DEB_HOST_MULTIARCH)

Aug 29, 2014 - 1 minute read - Comments - programming c++

MinGW и локали

Если коротко, то всё, что связано с std::locale в MinGW не работает. Точка.

Зато вполне себе работает функционал из Си:

std::locale::global(std::locale("")); // не установит текущую локаль
setlocale(LC_ALL, ""); // установит текущую локаль, у меня это Russian_Russia.Cp1251

Aug 29, 2014 - 1 minute read - Comments - programming c++

Пополняем шпаргалки по C++: неявно-генерируемые перемещающий конструктор и оператор присваивания

Статью изначально публиковал на хабре: http://habrahabr.ru/post/232775/. Здесь - для единства мыслей :)

Когда не так часто, как хотелось бы, приходится работать с языком, некоторые аспекты забываются. А некоторые никогда и не откладываются в голове. Поэтому, когда возникают вопросы, приходится отвлекаться и лезть в документацию.

Чтобы сэкономить время в последующем, а также, чтобы лучше понять в ходе обучения, крайне помогает вести конспекты и делать наглядные шпаргалки. Шпаргалку можно повесить рядом на стену. Хороши шпаргалки в виде блок-схем, по которым можно легко, по шагам, получить нужный результат (например выбрать правильный контейнер).

Под катом я решил опубликовать пару шпаргалок для определения условия когда будет создан компилятором неявно-генерируемый перемещающий конструктор и перемещающий оператор присваивания.

Шпаргалки представлены в виде PDF файлов для печати на принтере A4, в виде картинки PNG, а также исходников в SVG.