Hatred's Log Place

DON'T PANIC!

Jun 23, 2017 - 1 minute read - Comments -

[Memo] Manjaro OpenRC: персистентные сетевые настройки

Можно сделать при помощи Netifrc: * https://wiki.gentoo.org/wiki/Netifrc * https://wiki.gentoo.org/wiki/Handbook:X86/Full/Networking/ru * https://wiki.gentoo.org/wiki/OpenRC#Network_management

Три шага: 1. правим /etc/conf.d/net, настраиваем свой интерфейс IFACE. 2. для нужного сетевого интерфейса (IFACE) делаем симлинк:ln -s /etc/init.d/net.lo /etc/init.d/net.IFACE 3. если нужно стартовать автоматом: rc-update add net.IFACE default * вручную: service net.IFACE start/stop/restart

Jun 8, 2017 - 1 minute read - Comments -

Manjaro OpenRC: обновление elogind ломает Network Manager после выхода из сна [FIXED]

Собственно вот такое обновление:

[2017-05-28 10:33] [ALPM] upgraded libelogind (228.3-1 -> 229.3-1)
[2017-05-28 10:34] [ALPM] upgraded elogind (227.2-1 -> 229.3-1)

Самый простой вариант: откатиться. Прочие смотрятся тут: * https://forum.manjaro.org/t/unstable-elogind-update-228-1-1-breaking-suspend-hibernate/23953/8

Прицепом: * https://forum.manjaro.org/t/openrc-and-73-seat-late-rules-why-deleting-it-was-a-good-thing/24599/3

UPD: Последнее обновление (2017-06-20) починило проблему: * elogind -> 229.6-1 * libelogind -> 229.6-1

Apr 24, 2017 - 1 minute read - Comments - linux programming

Идея для BadUSB

Если создать USB-устройство, которое реализует интерфейс пера или тачскрина с абсолютными координатами, задать для осей X и Y значения: * min = 0 * max = 65535

и сделать (эмуляция) хотя бы одно перемещение, то, как минимум, Windows 8, 8.1 и 10 реагируют BSOD и перезагрузкой. Linux работает нормально.

Mar 23, 2017 - 1 minute read - Comments -

Корпуса SMD компонентов

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

Вот хорошая PDF которая может помочь разобраться: * http://www.avislab.com/blog/files/markirovka.pdf * она же, но сохранённая тут:

Дополнительные ссылки: * https://en.wikipedia.org/wiki/Surface-mount_technology - тут есть про размеры корпусов в метрических и имперских единицах (становится понятно откуда берутся обозначения типа 1206, 0805), расшифровки аббревиатур (SMD/SMA/SMT/etc) * в противовес - “дырочный” монтаж * http://www.smd.ru/ - можно использовать как каталог, что бы сориентироваться * на Али можно поискать наборы для диодов, стабилитронов, транзисторов (китайских популярных)

Mar 22, 2017 - 1 minute read - Comments - programming c++

C++17 Features

Пока лучший, что я нашёл, обзор новых фич C++17 с примерами и информацией о поддержке в компиляторах: * http://www.bfilipek.com/2017/01/cpp17features.html 1. Fixes and deprecation 2. Language clarification 3. Templates 4. Attributes 5. Simplification 6. Library changes - Filesystem 7. Library changes - Parallel STL 8. Library changes - Utils 9. Wrap up, Bonus

А вот обзор от команды Яндекса, которая теперь представляет РГ21 C++ Россия: * https://habrahabr.ru/company/yandex/blog/323972/

Вот и другие авторы начинают подтягиваться, в том числе - официальные источники: * https://isocpp.org/files/papers/p0636r0.html * http://www.modernescpp.com/index.php/c-17-what-s-new-in-the-library

Mar 21, 2017 - 3 minute read - Comments - programming c++

C++: алгоритмы с бинарным предикатом и значением

Или век живи - век учись.

Проблема описана здесь: https://stdcpp.ru/proposals/1386b162-0cde-49b7-a41e-90f2d9ee477c.

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

Mar 17, 2017 - 1 minute read - Comments -

Obexd в пользовательской сессии без systemd

Пробуем включать TransferServices плагин в Blueman и получаем что-то вроде:

Ключевое:

org.freedesktop.DBus.Error.NameHasNoOwner: Could not get owner of name 'org.bluez.obex': no such name

Исправления два: 1. добавить в атозагрузку при логине /usr/lib/bluetooth/obexd 2. подсказать dbus автоматически спавнить его при обращении

Собственно Bluez предоставляет сервис-файл для второго варианта, только он рассчитан на работу с systemd, и поэтому Exec указывает в /bin/false.

Gentoo нам подсказывает: * http://data.gpo.zugaina.org/gentoo/net-wireless/bluez/bluez-5.44.ebuild * http://www.spinics.net/lists/linux-bluetooth/msg38490.html

что нужно вместо /bin/false указать полный путь до obexd, т.е. /usr/lib/bluetooth/obexd. После чего передача файлов волшебным образом заработает сама.

Файл для редактирования: /usr/share/dbus-1/services/org.bluez.obex.service

ЗЫ ссылка на заметку: * https://forum.manjaro.org/t/bluetooth-samba/13539/4

ЗЗЫ неприятно что такие сервис-файлы нельзя переопределить через /etc/dbus/service/. Или я не смог?

Mar 7, 2017 - 2 minute read - Comments -

CMake Imported Targets

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

Для примера, если вам нужно подключить ZLIB к проекту, при классическом подходе пишется что-то вроде:

cmake_minimum_required (VERSION 3.1)
project(Foo)

find_package(ZLIB)

add_definitions(${ZLIB_DEFINITIONS})
include_directories(${ZLIB_INCLUDE_DIRS})

add_executable(foo_target 
               main.cpp)
target_link_libraries(foo_target ${ZLIB_LIBRARIES})

Какие проблемы в коде выше? 1. Добавляется новая библиотека, нужно не забыть добавить переменные в три места: 1. add_definitions() 2. include_direcrories() 3. target_link_libraries() 2. Мы забыли ключевое слово REQUIRED в find_package() и узнаем, что у нас нет ZLIB или на компиляции или на линковке (так как других условий и проверок нет, предполагаю: данная библиотека необходима). 3. Область действия add_definitions() и include_directories() - глобальная (на самом деле нет: все таргеты в текущем CMakeLists.txt во всех далее включённых, но не суть) и распространяется на все таргеты. Что не есть хорошо.

Возможно что-то ещё, чего я не заметил.

Последний пункт можно обойти уже написав более навороченный код:

cmake_minimum_required (VERSION 3.1)
project(Foo)

find_package(ZLIB)

add_executable(foo_target 
               main.cpp)
target_include_directories(foo_target ${ZLIB_INCLUDE_DIRS})
target_compile_definitions(foo_target ${ZLIB_DEFINITIONS})
target_link_libraries(foo_target ${ZLIB_LIBRARIES})

От проблемы глобальности ушли, но остальные две остались.

А вот, начиная с CMake 3.1 код выше можно переписать так:

cmake_minimum_required (VERSION 3.1)
project(Foo)

find_package(ZLIB)

add_executable(foo_target 
               main.cpp)
target_link_libraries(foo_target
                      ZLIB::ZLIB)

И теперь правильно подтянутся и параметры для компиляции, причём только для указанного таргета, и параметры линковки. А кода стало меньше. Более того, если библиотека не найдена, то цели ZLIB::ZLIB существовать не будет и вызов cmake завершится с ошибкой. А чем раньше ошибка вылазит - тем лучше.

Как это делается? А достаточно просто, маинтейнеру модуля поиска нужно в конце добавить строчки вида:

if (ZLIB_FOUND AND NOT TARGET ZLIB::ZLIB)
  add_library(ZLIB::ZLIB UNKNOWN IMPORTED)
  set_target_properties(ZLIB::ZLIB PROPERTIES
        INTERFACE_INCLUDE_DIRECTORIES "${ZLIB_INCLUDE_DIRS}"
        INTERFACE_COMPILE_OPTIONS "${ZLIB_DEFINITIONS}"
        INTERFACE_LINK_LIBRARIES "${ZLIB_LIBRARIES}")
endif()

Код для FindZLIB.cmake на самом деле несколько другой, но общую суть он отражает.

Соглашение для таких тергетов простое: PkgName::PkgComponent

где PkgName соответствует имения пакета, которое передаётся в find_package() (или имя модуля без префикса Find и суффикса .cmake), а PkgComponent - внутренний компонент внутри модуля. Если такой компонент один, он соответствует PkgName. Примеры: * ZLIB::ZLIB * Threads::Threads * Qt::Widgets (см FindQt.cmake)

Кстати, вместо проверки: if (ZLIB_FOUND)

Можно использовать: if (TARGET ZLIB::ZLIB)

да, более многословно, но везде фигурирует только одно имя таргета.

Кроме того, эти таргеты можно использовать и совместно с target_include_directories() и target_compile_definitions().

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

ЗЫ ЕМНИП то такой синтаксис можно было использовать и до 3.1, с 3.1 оно появилось в некоторых модулях, которые поставляются с самим CMake.

Mar 2, 2017 - 2 minute read - Comments - linux

linux-tools для mainline ядер в Ubuntu

Иногда приходится использовать mainline не из основных репозиториев, а отсюда: * http://kernel.ubuntu.com/~kernel-ppa/mainline

Причин тому может быть несколько. Начиная от желания быть на острие атаки, и заканчивая тем, что на новых ядрах решена проблема характерная для вашего железа или другого окружения. У меня, к примеру, только с 4.10 перестал уходить в тотальный перегрев процессор при использовании Turbo Boost.

Беда этих ядер, что нет полезных пакетов linux-tools, которые требуются таким приложениям как perf и turbostat. И их нужно собрать самому, причём так, что бы они соответствовали версии ядра. Рассмотрим как это сделать, на примере 4.10.

Feb 28, 2017 - 1 minute read - Comments -

iBus и Qt Creator

Когда в следующий раз в Qt Creator по Ctrl+Shift+U вместо поиска использования символа появится диалог iBus для ввода Unicode кода символа, вспомнить про im-config и запустить его без параметров, после чего снести использование ibus. Если только он вам не жизненно необходим. Мне - нет.

Feb 20, 2017 - 3 minute read - Comments -

Линейка Thinkpad становится всё более унылой

Походу Lonovo только “кирпичиный” дизайн не трогает. А всё остальное делает всё более казуальным. Судя по: * http://www.lenovo.com/psref/pdf/tabook.pdf ()

Итак: * Расплодили серию. Хрен пойми чем отличаются W/T/L, а ещё, типа недобуки: X/Carbon X1/etc * Уход легендарного T61 и переход к линеке Txyz (первые представители T400/T500), ознаменовалось ознаменовался завершением эры 4:3 экранов на ноутбуках. Теперь и здесь засилье wide-screen 16:9. Для видео удобно. Для работы - не очень. Даже интернеты: половина сайтов оставляет уйму места по бокам. Возможно широкий экран удобен для людей работающих с таблицами с огромным числом столбцов… Не знаю. Точно, что не спрос порождает предложение, а маркетоидный бред навязывает моду. Главное накормить непотребством, но так, что бы это вызвало “ВАУ!” * К серии x30 (T430, T530, etc) линейка лишилась своей классической узнаваемой клавиатуры в угоду модной-молодёжной чиклектной (она же островная). Да фиг с ним, но раскладка вызывает недоумение: привет PrtScr (хоть и поборолся), при этом PgUp/PgDown стали в более удобных позициях /хотя теми же средствами что и PrnScr их можно забиндить на нужное поведение/), ряд Fx клавиш без разделения на группы. * В серии x40 трекпоинт лишился своих кнопок. Волна негодования была, судя по всему, такой, что в x50 их вернули. Без дублирования кнопок снизу под тачпадом (но сенсорные остались). * Серия x30 последняя где используется ThinkLight. Оставили только подсветку клавиатуры. Кому как, а для меня это было одной из причин выбора Thinkpad. Особенно удобно, когда рядом блокнот в котором нужно сделать пометки по ходу работы. * Серия x40 так же ознаменовалась ликвидацией защелки. Мне она кажется удобной. Некоторым - рудиментом… Пока маленький сын не попытается открыть :) * Снова клавиатура. С линейки 540 (да, касается только 15.6” модели) они вкорячили полноразмерную клавиатуру. Тем самым нарушив центровку основного поля ввода относительно экрана, ровно как и расположение тачпада. Кому так жизненно необходим цифровой блок на ноутбучной клавиатуре??? У меня на обычной он покрывается пылью, а тут просто растрата места. * А вот динамики при этом решили заменить на полное непотребство. Да и 530 они не ахти, но фоном послушать можно. Точно не скажу, но с какой-то модели динамик а) монофонический и б) направлен вниз, в стол! Они что, решили стол или другую рабочую поверхность использовать как резонатор? Сабвуфер?

На фоне этого выглядит забавно это (тут свежее обсуждение): * http://blog.lenovo.com/tag/retro+thinkpad

Смотрится как эдакая попытка срубить бабла с того, что уже было, но было успешно слито. Если вообще будет сделано. А если сделано, то качественно. Воистину: > - Как сделать человеку хорошо? > - Нужно должно делать плохо, а потом просто перестать.

Походу, остаётся только Dell Latitude, со своими тараканами и нечеловеческими ценами. Радует только то, что на мою текущую модель T530 валом запчастей и в пределы производительности я ещё не упирался.

Feb 19, 2017 - 3 minute read - Comments - linux

Thinkpad T530: клавиатура

Уже были стоны и жалобы от меня по поводу несколько убогой клавиатуры, точнее раскладки, точнее расположению PrtScr кнопки. Но… или жри кактус или исправляй. Я, обычно, выбираю второй вариант.

Если коротко, команда ниже забиндит PrtScr и сделает из неё Menu (aka Compose) клиавишу:

sudo setkeycodes b7 127

Для других клавиатур и ноутбуков может сработать, но нужно уточнять сканкод (b7 в примере выше).

Эту команду помещаем в /etc/rc.local или в аналогичный.

Кому нужно подробностей и альтернативных вариантов - смотрим под катом.