Hatred's Log Place

DON'T PANIC!

Dec 8, 2017 - 1 minute read - Comments -

QtC: снова Baremetal и новые GDB

В продолжение post/2017/08/25/qt_creator_baremetal_i_svjazka_gdb_7.7.1_openocd. Снова косяк и снова QtC не имеет прямого отношения к нему. Судя по всему, в самом GDB какие-то гонки.

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

В общем, пока откатился на GDB 7.8 от Linaro: https://aur.archlinux.org/packages/arm-none-eabi-gdb-linaro, оно, по крайней мере, работает.

Связанные ссылки и обсуждения: * https://github.com/gnu-mcu-eclipse/eclipse-plugins/issues/186 * https://github.com/gnu-mcu-eclipse/eclipse-plugins/issues/167

PS текущая связка: GDB 7.8 + OpenOCD 0.10.0

Dec 7, 2017 - 1 minute read - Comments -

KDE5: создание Samba-шар из Dolphin

И не только.

Для начала выполняем шаги, описанные в руководстве: * Создание ресурсов общего доступа от имени обычного пользователя, или * Creating usershare path

Если коротко и коспективно: 1. Создаём директорию usershare: mkdir -p /var/lib/samba/usershare 2. Создаём группу sambashare: groupadd sambashare 3. Правим права доступа к директории:``` chown root:sambashare /var/lib/samba/usershare chmod 1770 /var/lib/samba/usershare

  1. Проверяем конфигурацию `smb.conf`:```
...
[global]
  usershare path = /var/lib/samba/usershare
  usershare max shares = 100
  usershare allow guests = yes
  usershare owner only = yes
  ...
  1. Разрешаем вашему пользователю создавать шары: usermod -a -G sambashare $USER
  2. Рестартуем демоны smbd и nmbd
  3. Перелогиниваемся в систему

Как минимум теперь вы сможете управлять пользовательскими шарами, используя командную строку:

net usershare help

Для использования этого функционала через Dolphin, потребуется поставить пакет kdenetwork-filesharing: pacman -S kdenetwork-filesharing

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

Nov 13, 2017 - 1 minute read - Comments -

KDE5, pulseaudio, индикатор громкости и qmmp

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

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

Судя по всему qmmp умудряется переопределить глобальный хук и полностью получает управление этими кнопками. До плазмоида попросту не доходят события. А так как подписка происходит при старте плазмоида, то и после выхода из qmmp обработка не возвращается на свои места.

Лечение простое: 1. в настройках qmmp для плагина глобальных клавиш убрать реакцию на кнопки управления громкостью. 2. открыть настройки трея и выключить и снова включить индикатор громкости.

PS подобное наблюдается и при использовании kmix. Более того, управления перехватывает последний запущенный механизм: или плазмоид или kmix. При закрытии одного из них, рекомендую перезагрузить оставшийся.

Nov 10, 2017 - 2 minute read - Comments -

KDE5: иконки в трее

На днях заметил, что часть приложений время от времени перестают рисовать свои иконки в трее. С одной стороны, xembed - deprecated, но, судя по всему, плазма как-то пытается его использовать и отображать иконки в трее для “устаревших” приложений. Но не всегда это получается (ниже чуть подробнее).

По сути, нормально работать будут только приложения, которые поддерживают appindicator api.

Oct 4, 2017 - 1 minute read - Comments -

Как проще проиграть звук с нескольких источников в ffplay?

Я делаю так:

ffmpeg -f v4l2 -i /dev/video0 -f alsa -i hw:1 -c:v copy -c:a copy -f matroska - | ffplay -autoexit -f matroska -

matroska может запаковать RAW/YUV/RGB данные, поэтому она. MPEG-TS не может, поэтому не подходит.

Или не менее наркоманский вариант, используя только FFMPEG:

ffmpeg -f v4l2 -i /dev/video0 -f alsa -i hw:1 -vcodec rawvideo -pix_fmt yuv420p -c:a copy -f sdl2 default -f alsa default

Конвертация в yuv420p нужна для SDL2.

Sep 29, 2017 - 1 minute read - Comments - programming c++

C++: операторы сравнения для структур

Памятка: * https://stackoverflow.com/questions/3882467/defining-operator-for-a-struct (второй ответ) * http://www.cplusplus.com/reference/tuple/tuple/operators/

Т.е. используя std::tie() вполне, без труда и пыли, можно сделать операторы сравнения для сложных структур. Сложности могут возникнуть, если нужно переопределить операторы сравнения для отдельных элементов (например: критерии сравнения строк).

Почему tie, а не напрямую tuple? tie захватывает аргументы по ссылке - экономия на копировании.

Sep 26, 2017 - 2 minute read - Comments -

Совместное использование ALSA и PulseAudio

Когда PulseAudio стартует, оно захватывает устройства и если пробуем запустить какое-то приложение, которое может только ALSA, то получим сообщение о невозможности открыть устройство, так как оно уже занято.

Что бы решить проблему нужна пара простых (по факту, но не по пути, которым к ним пришёл) шагов. Но для начала нужно посмотреть соответствующий раздел в вики Арчика: https://wiki.archlinux.org/index.php/PulseAudio#ALSA.2Fdmix_without_grabbing_hardware_device

Идея проста: сказать пульсе работать через dmix для воспроизведения и через dsnoop для записи.

Sep 7, 2017 - 1 minute read - Comments - linux

Pacman: информация по пакетам, установленным как зависимости...

…и не нужные никакому пакету.

На случай, если что-то удалялось как pacman -R пакет вместо pacman -Rs пакет:

DEL:

pacman -Qd | awk '{print $1}' | xargs -I{} bash -c 'cnt=$(LANG=C pacman -Qi {} | grep "Required By<br/>|Optional For" | grep None | wc -l); (test $cnt -eq 2 && echo "{}")' | xargs -I{} bash -c '(pacman -Qi {};pacaur -Sii {};echo ================:simple_smile:' 2>&1 | less -R

Спасибо Романычу, просто список пакетов:

pacman -Qtdq

и с описанием, как в уродстве выше (без запроса к Sync базе или AUR можно просто: pacman -Qtdqi):

pacman -Qtdq | xargs -I{} bash -c '(pacman -Qi {};pacaur -Sii {};echo ================:simple_smile:' 2>&1 | less -R

pacaur используется, что бы запросить информацию для AUR пакетов.

Если какой-то пакет в этом списке уже нужен как самостоятельная единица, то можно снять пометку:

pacman -S --asexplicit пакет

Теперь вопрос: а как проще?

ЗЫ пакеты, которые не требуются никаким другим пакетом можно получить просто выполнив pacman -Qt

Sep 1, 2017 - 1 minute read - Comments - programming

Bioshock 1, 2 Localization reverse

Вроде не делал анонс…

Серия старых скринкастов, описывающая процесс разбора формата файлов локализации игр Boishock 1 и 2, создания библиотеки для распаковки/паковки и графического кросс-платформенного архиватора.

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

Ссыль: https://www.youtube.com/playlist?list=PLUrplWzJ_-EupzIVpgfRlarNjN0zcarpr

Aug 29, 2017 - 1 minute read - Comments - life

Мемориз: зубчатый шпатель

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

Хорошая статья которая описывает нюансы: * http://proplitki.ru/instrumentyi/zubchatyiy-shpatel.html

Aug 25, 2017 - 3 minute read - Comments -

Qt Creator, Baremetal и связка GDB>=7.7.1+OpenOCD

Если коротко, то эта связка криво работает. Поймано на ARM GDB 8.0, но воспроизводится и на 7.12.1. При наличии на борту устройства какой-либо RTOS. У меня это ThreadX. Хотя, возможно, для других всё отработает нормально. Но это мало что меняет: на старом GDB 7.7.1 тот же OpenOCD работает.

Суть проблемы и способ её решения без вмешивания в код под катом.

Aug 25, 2017 - 1 minute read - Comments -

Проблема с зависанием при выходе из сна

Проблема на ядрах 4.12 и 4.13 в Manjaro. На ядре 4.11 проблема не наблюдается. Засыпание в память, не на диск.

Пока окончательного решения не найдено. Ниже ссылки, которые будут определять направление движения: 1. https://forum.manjaro.org/t/linux-4-12/27111/74 * тут много чего: и отказ от blk-mq и игра с модулями ядра для virtualbox host и рекомендация остановить tlp (не мой случай). * Отказ от blk-mq: * https://forum.manjaro.org/t/kernel-4-12-crashes-when-resuming-from-suspending/28435/17 1. https://forum.manjaro.org/t/kernel-4-12-crashes-when-resuming-from-suspending/28435/52 * название говорит само за себя: * отказ от blk-mq * замена bfq-mq на bfq-sq * отказ от bfq в пользу deadline или cfq 1. https://digi-merc.org/blog/2017-05-16-archlinux-freeze-resume/ и https://www.reddit.com/r/archlinux/comments/4ytogl/suspend_to_ram_would_randomly_freeze_the_computer/ * замена асинхронного засыпания, последовательным. Возможно может решить часть проблем связанhttps://01.org/blogs/rzhang/2015/best-practice-debug-linux-suspend/hibernate-issuesные с железом и гонками.

После пары перезагрузок, включения bfq-mq на HDD вместо mq-deadline и установки не-DKMS версии virtualbox host, проблему не получается решить.

Для отладки использую следующую методику: 1. логин на первой консоли и: while true; do dmesg | tail -n 30; sleep 1; done 2. логин на второй консоли и: sudo tail -f /var/log/everything | grep -v 'Tor<br/>[' 3. логин на третьей консоли, ничего не вводим, используем как дисплей, но SysRq командой повышаем уровень логирования до максимального: Alt+SysRq+9 (для T530: Alt+Fn[press]+S[press]+S[release]+Fn[release]+9)

После чего работает в обычном режиме.

Прочее полезное: * анализ проблем с suspend: https://01.org/blogs/rzhang/2015/best-practice-debug-linux-suspend/hibernate-issues

Aug 10, 2017 - 1 minute read - Comments -

Онлайн парсер для USB дескрипторов и запросов

Собственно полезно при отладке и разборе: * http://eleccelerator.com/usbdescreqparser/ * анонс на Reddit

Запросов - подразумевается SETUP. Разбирает только стандартные запросы. Специфичные для интерфейсов, даже стандартных функций - нет.

Умеет: * разбор дескрипторов * разбор SETUP запросов * разбор HID дескрипторов (не проверял)

Чумовой особенностью этого парсера является: > The page uses Javascript, so it must be enabled. This page can be downloaded and used offline, because it does not depend on any external or online resources.

Так что…