ХаритоновСофт
56 subscribers
38 photos
1 video
11 files
118 links
Download Telegram
Начал с того, что продолжил переходить на однопоточную модель. Очень понравилось полноценно дебажить. Гораздо быстрее чем вдумчиво смотреть на логи. Тем кто не смотрел на логи Индикатора, стоит ради интереса врубить как-нибудь галку «Писать лог-файл» и удивиться, сколько работы идёт под капотом. Уже давно несмотрю их в лоб. Каждый модуль имеет свой тэг, по нему и фильтрую. Помогает линуксовый серверный опыт, "tail -f LayoutIndicator.log | grep CaretIndicator" и вот уже в реальном времени можно дивиться удивительной жизнью индикатора каретки. Кто ещё не использует линуксовые утилиты в Windows, люто рекомендую.

Прелопатив основную часть, запустил новую версию на своих настройках и словил жуткие фризы, всё залипало и еле двигалось. Оказалось, из-за поддержки клавиатур Corsair. Попытки подключится к ним, жили в отдельном потоке. Немного помучив нейронку вопросами как бы дождаться подключения и UI не зафризить, по старинке написал колбэк, хоть и очень не хотелось специально для этого менять код.

Достал из сусеков клавиатуру и затестил, всё мигает как раньше, ничего не виснет, во всех кейсах. Там своя атмосфера. Стандартная библиотека реализует работу не с самой клавиатурой а с API сервера для устройств Corsair. Поэтому, много чего может не быть. Сервера, подключения к серверу, подключения клавиатуры к серверу. Не так-то просто мигать подсветкой кнопочек.

Есть, кстати, прекрасная открытая библиотека, которая управляет цветом и поддерживает кучу устройств. Там и мыши и кулеры и материнские платы. Она даже дотнетовская, смотрел код когда писал свою поддержку. Получается можно всё это затащить в Индикатор, но как это тестировать без реального железа — не представляю.

Победив подвисания, начал жить на новой версии и сразу заметил, что индикация чуть запаздывает. Какие-то жалкие миллисекунды, работать можно, но раздражает страшно. Тут же попробовал прошлую версию, подтвердил, что дело в однопотоке. Покопался в обработке очереди на таймер — не помогло. Откатываться на мультитред — не вариант. Пришла идея сделать переключатель планировщика задач из однопоточного режима в многопоточный, таким образом, чтобы не менять код добавления задач. Довольно легко запилил, задержка ушла. Задав командой препроцессора #if DEBUG переключение в сингл-режим, я получил и отладку и скорость прошлых версий. Вот это я называю вин-вин.

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

Дойдя до логического конца с этим режимом, занялся проблемой с которой чаще всего обращались в последнее время — определение раскладки по системному индикатору. Он мистическим образом пропадал с радаров, а где-то и вовсе не находился в известных местах.

К задаче подошёл творчески, спросил что делать у GPT, не давая никаких намёков на пути решения. За много лет, я уже, наверное, знаю все способы получения языка в Windows. Причём, львиную долю пробовал либо реализовывал на практике.

ИИ не обрадовал. Единственный новый способ, который он выдал, внутри, опирался на старый добрый вызов winapi, это первое, что предлагают бедолагам, решившим программно получить текущую раскладку. Но! В дебрях его решения был один нюанс, который не сразу бросился в глаза, а при проверке оказалось, позволяет решить проблему получения разных раскладок внутри одного языка, если способ определения — не системный индикатор.

Без понятия сколько людей на земле используют разные раскладки одного языка. И сколько из них не работают в консольных и UWP-приложениях, чтобы можно было отрубить определялку по системному индикатору. Но на их улице сегодня праздник. Жители ликуют. Боже, чем я занимаюсь... (Смеюсь).

У меня был коварный план — посмотреть предложения от нейронки а потом покапать уже целенаправленно, туда где мне грезилось универсальное решение. Но об этом в следующей заметке сумасшедшего.
👍2