Номенклатура жал T12
Собственно, официальнее некуда:
Размеры, рекомендации по типовому использованию и так далее.
Hatred's Log Place
Собственно, официальнее некуда:
Размеры, рекомендации по типовому использованию и так далее.
Они же - компоненты для поверхностного монтажа. Мне они в последнее время всё больше нравятся для домашнего прототипирования и поделок: меньше занимают места при хранении и если руки дошли до печатной платы, не нужно сверлить кучу дырок. Но маркировка и обилие корпусов - это адъ.
Вот хорошая PDF которая может помочь разобраться:
Дополнительные ссылки:
Пока лучший, что я нашёл, обзор новых фич C++17 с примерами и информацией о поддержке в компиляторах:
А вот обзор от команды Яндекса, которая теперь представляет РГ21 C++ Россия:
Вот и другие авторы начинают подтягиваться, в том числе - официальные источники:
Или век живи - век учись.
Проблема описана здесь: https://stdcpp.ru/proposals/1386b162-0cde-49b7-a41e-90f2d9ee477c.
Суть: зачем передавать бинарный предикат и значение, если нужное значение можно временами захватить в лямбду и не передавать вторым аргументом компаратору.
Пробуем включать TransferServices плагин в Blueman и получаем что-то вроде:

Ключевое:
org.freedesktop.DBus.Error.NameHasNoOwner: Could not get owner of name 'org.bluez.obex': no such name
Исправления два:
/usr/lib/bluetooth/obexdСобственно Bluez предоставляет сервис-файл для второго варианта, только он рассчитан на работу с systemd, и поэтому Exec указывает в /bin/false.
Gentoo нам подсказывает:
что нужно вместо /bin/false указать полный путь до obexd, т.е. /usr/lib/bluetooth/obexd. После чего передача файлов волшебным образом заработает сама.
Файл для редактирования: /usr/share/dbus-1/services/org.bluez.obex.service
ЗЫ ссылка на заметку:
ЗЗЫ неприятно что такие сервис-файлы нельзя переопределить через /etc/dbus/service/. Или я не смог?
Буквально сегодня открыл для себя 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})
Какие проблемы в коде выше?
add_definitions()
2. include_direcrories()
3. target_link_libraries()REQUIRED в find_package() и узнаем, что у нас нет ZLIB или на компиляции или на линковке (так как других условий и проверок нет, предполагаю: данная библиотека необходима).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::ZLIBThreads::ThreadsQt::Widgets (см FindQt.cmake)Кстати, вместо проверки: if (ZLIB_FOUND)
Можно использовать: if (TARGET ZLIB::ZLIB)
да, более многословно, но везде фигурирует только одно имя таргета.
Кроме того, эти таргеты можно использовать и совместно с target_include_directories() и target_compile_definitions().
В общем, я крайне рекомендую в свои модули добавить несколько строчек, которые привнесут несколько большей унификации. От старых добрый переменных вас тоже никто отказываться не заставляет :)
ЗЫ ЕМНИП то такой синтаксис можно было использовать и до 3.1, с 3.1 оно появилось в некоторых модулях, которые поставляются с самим CMake.
Иногда приходится использовать mainline не из основных репозиториев, а отсюда:
Причин тому может быть несколько. Начиная от желания быть на острие атаки, и заканчивая тем, что на новых ядрах решена проблема характерная для вашего железа или другого окружения. У меня, к примеру, только с 4.10 перестал уходить в тотальный перегрев процессор при использовании Turbo Boost.
Беда этих ядер, что нет полезных пакетов linux-tools, которые требуются таким приложениям как perf и turbostat. И их нужно собрать самому, причём так, что бы они соответствовали версии ядра. Рассмотрим как это сделать, на примере 4.10.
Когда в следующий раз в Qt Creator по
Модель имеет совмещённый порт для подключения наушников с микрофоном (TRRS). Ниже посмотрим, что делать когда нет такой гарнитуры.
Походу Lonovo только “кирпичиный” дизайн не трогает. А всё остальное делает всё более казуальным. Судя по:
Итак:
На фоне этого выглядит забавно это ( тут свежее обсуждение):
Смотрится как эдакая попытка срубить бабла с того, что уже было, но было успешно слито. Если вообще будет сделано. А если сделано, то качественно. Воистину:
- Как сделать человеку хорошо?
- Нужно должно делать плохо, а потом просто перестать.
Походу, остаётся только Dell Latitude, со своими тараканами и нечеловеческими ценами. Радует только то, что на мою текущую модель T530 валом запчастей и в пределы производительности я ещё не упирался.
Уже были стоны и жалобы от меня по поводу несколько убогой клавиатуры, точнее раскладки, точнее расположению
Если коротко, команда ниже забиндит
sudo setkeycodes b7 127
Для других клавиатур и ноутбуков может сработать, но нужно уточнять сканкод (b7 в примере выше).
Эту команду помещаем в /etc/rc.local или в аналогичный.
Кому нужно подробностей и альтернативных вариантов - смотрим под катом.
Уже, как обычно, сезон снегоступинга сходу не задаётся и в этом году. Практически весь декабрь проболел какой-то заразой (кашель без каких либо намёков на температуру или насморк), а на Новый Год, вместо празднования на вершине горы в палатке, обошёлся компанией градусника и некоторого количества мероприятий по возвращению здоровья.
Но вот новогодние каникулы закончились. Незаметно пролетела первая рабочая неделя и первые выходные. Желание куда-то выгрестись обрело форму рассылки писем с предложением сходить хоть куда-то хоть на сколько. В результате собралась компания: я, Коля, Кирилл. На один день решается сходить Спайдер (он же Лёха) с женой. Сам после перелома и для него выход — чисто проверить возможности. Он же предлагает забрасываться на его пепелаце. Обратно планируем выбираться уже на электричке.
Маршрут на 21-22 января, по итогу, получился таким:

Немного в сторону от CMakeProjectManager2, в направлении стокового плагина.
Дискуссия на LOR навела на мысль. Ради спортивного интереса попробовал реализовать и… получилось! :)
За подробностями под кат.
Вот и прошло почти два месяца с последних изменений.
Время было потрачено:
Так как код отвергли, а это, по сути, написанная с нуля реализация старого функционала, то он был взят за основу новых изменений. Ну как основу - 99%.
Есть и изменения. Малой кровью была создана обёртка поверх Server Mode Reader’а, которая предоставляет всего его внутренние профиты за исключением классического вида дерева файлов.
Соответственно изменения, сделанные для старого ридера (Tealeaf Reader), который используется для версий CMake младше 3.7, в части отображения всех файлов, добавления, удаления и переименования теперь применимы и для Server Mode Reader.
Сразу же был найден и первый баг: неправильно обрабатываются дефайны из CMAke (add_definition()).
Патч уже отослан, у себя в коде изменений делать не буду, подожду, пока попадёт в апстрим, потом засинхронизируюсь.
Функциональность же передачи Toolchain файлов выла дропнута. Можно делать настройки через Kit или же вручную создать параметр CMAKE_TOOLCHAIN_FILE и задать нужный. Главное не забудьте сделать Build -> Clear CMake Configuration после этого. Ну и будьте готовы, что парсер C++ вас перестанет понимать, как минимум, частично.
Пакеты для Ubuntu 14.04 и 16.04 и производных уже доступны через PPA. Не забываем внимательно читать описание репозитория.
В ближайших планах подготовить ветку для стабильной версии QtC - 4.2. Там окажется только текущая функциональность и нового появляться не будет (если только кто-то не возьмёт её на сопровождение). Есть вероятность, что серверный режим будет выключен, так как он требует много смежных изменений и бекпортирования. Явные косяки тоже будут переноситься. В будущем, планирую саппортить только текущую версию QtC. Для старых не планирую даже исправления ошибок переносить. На всё это нужно время.
Если кто-то предложит варианты, как делать пребилды плагина для официальных версий QtC в автоматическом или полуавтоматическом режиме, буду рад выслушать.
Ну и с ошибками и предложениями: https://github.com/h4tr3d/cmakeprojectmanager2/issues
Начиная с Tx30 Lenovo дропнули старую клавиатуру на ноутбуках серии ThinkPad, что очень грустно, так как новая в части предоставляемой раскладки просто не выдерживает критики. Одно расположение клавиши Print Screen чего только стоит - ощущение, что клавиатура для ярых скриншотеров, не меньше. С другой стороны, расположение PgUp/PgUp значительно более удобнее, нежели на классике.
Помимо сокращения числа рядов клавиш, сократилось и их количество. К примеру, нет вышеозначенных в заголовке клавиш. При этом официальная документация на сайте говорит о том, как эту функциональность можно получить. Скопирую табличку сюда:
| Клавиша | Комбинация |
|---|---|
| Fn+B | |
| Fn+S | |
| Fn+K | |
| Fn+P |
Данные комбинации не зависят от операционки, судя по всему, генерируются самим контроллером, так что должны работать и в консоли и в иксах без каких-то телодвижений.
Собственно вопрос, а чего бы эти значения не нанести на сами клавиши?
Ииии важное замечение, как работать с SysRq в Linux:
ВАЖНО: простое нажатие Alt+Fn+S+буква ни к чему не приведут.