На работе приходится сидеть в Windows по ряду причин, но очень неудобно, что нет привычного переключателя раскладок клавиатуры по CapsLock.
Перебрал несколько вариантов: специализированные утилиты (сайты большинства умерли (привет Recaps, Keyla) за исключением, пожалуй
Capslang), правка реестра Windows (
https://habrahabr.ru/post/305658/, не понравилось), использовал PuntoSwitcher (стрельба из пушки по воробьям ради только переключалки, плюс досадно глючил временами).
В результате остановился на варианте с AutoHotkeys и эмуляцией нажатия клавиш переключения раскладки. Кроме того, учёл, что в рабочей сессии VirtualBox переопределять клавишу не нужно (для других VM код будет похожим). В результате получился такой скрипт:
SetTitleMatchMode RegEx
#ifWinNotActive, ^.+ - Oracle VM VirtualBox$
SetCapsLockState, AlwaysOff
+CapsLock::CapsLock
CapsLock::Send, {Ctrl down}{Shift down}{Shift up}{Ctrl up}
#ifWinNotActive
return
Сохраняем, запускаем, пользуемся. Если нужно, добавляем в автозагрузку. CapsLock остаётся доступен по сочетанию Shift+CapsLock.
Справочник по регуляркам:
https://autohotkey.com/docs/misc/RegEx-QuickRef.htm
Ссылки по теме:
Немного накопилось, что не подошло, что хочется поменять, а что уже заменилось, поэтому выставляю:
-
Лот 1: (Б/У) Навигатор Garmin GPSMAP 62s, в полной комплектации, с картами ДВ, Домашних вулканов Камчатки, Кодара, Тункинских гольцов на Восточном Сайне и района Белухи на Алтае, цена вопроса 15000 руб УШЁЛ
-
Лот 2: (Новый) Котелок с теплообменником Bulin S2500, 2 литра, цена вопроса - 2500 руб:
-
Лот 3: (Б/У) Алюминиевые секции дуги для палатки, диаметр 8.5мм, длинна полная 360мм, 5 штук, цена вопроса 100 руб/штука:
-
Лот 4: (Новый) Алюминиевая дуга для палатки, диаметр 8.5мм, длинна полшная 3.6м, 11 секций, цена вопроса 1200 руб:
-
Лот 5: (Новый) Запасные наконечники для трекинговых палок, резьба, совместимы с кольцами Leki, 4 штуки, цена вопроса 100 руб/штука:
Существуют хорошие практики программирования и их стоит изучать. Часть из них применима не всегда. Часть стандартов хорошо себя зарекомендовала, но стоят денег, например MISRA C++, но, помимо цены, ещё и достаточно консервативен и покрывает только язык до стандарта C++11 (выпущен в 2008 году).
Ниже список, на мой взгляд, хороших источников, которые хорошо иметь под рукой и регулярно пробегаться глазами:
Ну и на затравку: писать надёжный софт на C++ можно -
C++ on Mars: Incorporating C++ into Mars Rover Flight Software :wink:
И стоит помнить, что есть практики, есть стандарты, но не стоит выключать свой мозг и обкладываться паттернами, бустом и прочими непотребствами, если вам нужно вывести всего лишь “Hello, world!”.
Пара линков на тему:
Первый описывает базовые подходы для версий debhelper меньше и больше 7. Второй линк описывает новый, рекомендованный подход с автоматическим созданием dbgsym пакетов.
Что бы файлы с отладочной информацией строились в PPA, в настройках (Change details…) нужно включить опции:
[x] Build debug symbols
[x] Publish debug symbols
Просто перечисление нескольких скрытых опций, которые могут оказаться полезными. В дополнение к
http://kb.mozillazine.org/Stop_threading_by_subject:
mailnews.sort_threads_by_root
- если кому-то хочется, что бы при сортировке по дате обсуждений использовалась дата корневого письма, а не самого последнее. Не знаю, кому такое может пригодиться, но полезно знать, на случай, если какое-то расширение изменит эту настройку в true.
mail.operate_on_msgs_in_collapsed_threads
- управляет поведением на свёрнутых обсуждениях: показывать не-conversation вариант (true - по-умолчанию) или показывает корневое сообщение (false). Так как conversation-вариант попросту нефункциональный в TB, то я использую false.
Теперь ищу способ для:
- Сделать свернутое обсуждение не просто подчёркнутым но выделенным жирным. Вроде как через пользовательский CSS можно.
- Сделать так, что бы обсуждение было только с одним уровнем ветвления, а остальные сообщения были в порядке прихода. Для большинства обсуждений важна хронология, а контекст содержится в цитируемом сообщении. Этот бы вариант можно было бы решить группировкой по дискуссии (Group By Discussion), к сожалению поиск в интернете для этого не дал мне результатов (и
вопрошание на SuperUser - тоже).
Ну а под катом немного расширений, которые могут показаться кому-то интересными в части организации дискуссий.
В транке появилась пачка изменений, ориентированные на использование
CMake Server Mode, в связи с чем плагин теперь может работать только с CMake версии 3.0 и более новым. Тобиас крепко взялся за плагин и будем надеяться, что, как минимум, скоро не будет требоваться:
- промежуточная генерация CodeBlocks проекта, дабы распарсить цели, получить список файлов и параметров компилятора.
- ручное парсирование файла кеша, для получения списка опций и их изменения.
Пока CMake Server Mode большего не предоставлят: в основном информация, но не изменение её. Так что ожидать автоматическое добавление файла к нужной цели или переименование файла в билд-системе средствами этого нового режима не стоит.
Ну а в самом QtC пока только инфраструктурные изменения, чтобы эту фичу начать поддерживать.
И от себя: в CMakeProjectManager2 добавил возможность использовать трюк от cmake, что бы задать варианты возможных значений для какого-то параметра и выводить их при редактировании в виде выпадающего списка. Фичу портировал в апстрим и завёл ревью, кому нужно, голосуйте:
https://codereview.qt-project.org/#/c/173340
Про сам трюк:
Если коротко, то в вашем CMakeLists.txt, для задания возможных значений для параметра, нужно добавить конструкцию:
set_property(CACHE OptionName PROPERTY STRINGS PossibleValue1 PossibleValue2 PossibleValue3 ... PossibleValueN)
Ни на что, кроме как для подсказки GUI этот параметр не влияет: CMake не делает валидацию введённых значений, поэтому возможность задать любое другое - остаётся.
Ссылки по теме:
Не мог обойти вниманием сиё творение.
Ребята запилили на суровом C++11/14 однозадачную сервисо-ориентированную операционку. Суть: операционка с минимальным футпринтом (образ 707кб), которая обслуживает ровно одну задачу (в их терминологии - сервис) и работает под управлением виртуальной машины: KVM, VirtualBox, используя возможности аппаратной виртуализации.
Сама операционка внутри представлена в виде асинхронного фреймворка, призванного, в первую очередь, строить сетевые приложения. Т.е. внутри реализован стек TCP/IP (судя по описанию, пока только IPv4, но IPv6 активно пилится). Многопоточность не поддерживается, реализован подход с кооперативной многозадачностью, которых очень хорошо ложится на асинхронную модель. Есть базовая поддержка файловых и дисковых операций (как минимум есть поддержка RAM-диска и файловых систем Ext4 и FAT).
При всём этом доступны для использования libc++ от LLVM (в том числе исключения), stdc в лице newlib.
В общем, интересное решение для сервис-ориентированных архитектур, для создания выделенных микросервисов. Плюс приятная лицензия: Apache2.
Ну и ссылки:
Покупаешь палки, ходишь, и через некоторое время наконечники превращаются в такое:
и перестают “цепляться”, а при дальнейшем износе уже начинают убиваться сами палки.
Всегда хочется, что бы ноутбук смог проработать в автономке подольше. Тут помимо оптимизации энергопотребления (статей посвящённых этому вопросу в интернетах уйма) иногда встаёт вопрос более ёмкой батареи. Причём актуальность автономной работы часто перекрывает некоторые неудобства, связанные с весом и габаритами.
Или разлепляем пельмени, а потом собираем их обратно. Пару заметок.
Собственно разработчики Linux Mint всегда рекомендовали использовать новую установку вместо того, что бы просто обновлять систему. Несколько релизов я всё же обновлялся путём исправления репозиториев и apg-get upgrade
/ apt-get dist-upgrade
. При выходе 18 версии дистрибутива авторы выложили инструмент и инструкцию для сего обновления:
Как обычно проблемы кроятся в мелочах. А именно: не учитывается влияние PPA от слова совсем.
Снова мемориз.
-
Находим BIOS
тут или по модели
тут. Скачиваем ISO. Не смущаемся наличием в описании разных Windows.
-
Используем руководство
отсюда. В частности,
как использовать GRUB2, что бы не шить ISO никуда. У меня не сработало - зависание программы прошивальщика после первого подтверждения своих намерений. Помог способ с
загрузочной флешкой. Конспективно:
./geteltorito.pl -o xxx.img xxx.iso
sudo dd if=xxx.img of=/dev/sdX
-
Перезагружаемся, выбираем флешку как источник загрузки и грузимся с неё. Дальше всё понятно.
Опционально
проверяем версию BIOS и время релиза из системы:
sudo dmidecode -s bios-version
sudo dmidecode -s bios-release-date
Это просто мемориз, а то задолбался каждый раз искать где и как брать свежий фирмварь и патчер для JNX.
-
Прошивка:
-
Патчер:
-
GPSMAP 66/66s:
- Просто полезная информация:
Инструкция по обновлению (подсматривается на официальной странице прошивки нажав Ctrl-U :simple_smile:):
NOTE FOR USERS WANTING TO DOWNLOAD SOFTWARE ON ONE COMPUTER AND THEN INSTALL IT TO THEIR
DEVICE USING A DIFFERENT COMPUTER:
1) To download the region file used by WebUpdater, copy and paste this link into your browser
on computer #1:
http://download.garmin.com/software/GPSMAP62_78_WebUpdater__630.gcd
2) Bring GPSMAP62_78_WebUpdater__630.gcd to computer #2 where your device is attached.
3a) Then you can drag-and-drop GPSMAP62_78_WebUpdater__630.gcd onto the WebUpdater icon on your desktop.
3b) Or you can invoke WebUpdater at the command line, passing in the region file as a parameter:
C:<br/>>WebUpdater.exe c:<br/>path<br/>to<br/>GPSMAP62_78_WebUpdater__630.gcd
Что они нормальным путём этого не предлагают мне не понятно.
Инструкция тоже не полная. Нужно:
- Скачать файл прошивки
- Переименовать его в GUPDATE.GCD
- Закачать на флешку в папочку Garmin
- Перезагрузите навигатор, прошивка начнётся сама.
Изрядно обновил статью
, поместил ссылку на неё в
статьи. Если коротко: то в общем и целом настройка чуть упростилась и улучшилась. Но дёготь остался, куда без него.
В преддверии похода по Восточному Саяну впервые приготовил топлёное масло. Оказалось несложно - главное подобрать хороший исходный продукт.
Вырвано из G+:
С сайта:
A curated list of awesome C/C++ frameworks, libraries, resources, and shiny things
Систематизированный список библиотек для решения различных задач на C++. Пока ограничен битбакетом и гитхабом, поэтому добавить некоторые полезные библиотеки за пределами этих площадок пока (?) возможности нет.
Список раньше хостился на GitHub, теперь обрёл второе рождение в виде сервиса.
Система рейтингов и меток должна помогать выбирать полезное. Как будет работать на самом деле - покажет время.
В подвале сайта смотреть подобные каталоги для других языков, в частности,
Rust и
Go.