Эстетический оргазм в системном трее 🤣

Вчера я вспомнил, чего ещё не хватает BSL‑Timer.

Таймеру совершенно незачем постоянно занимать место в taskbar и маячить перед глазами. Он должен спокойно работать в системном трее, не мешать мне заниматься своими делами и появляться только тогда, когда понадобится.

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

Ну да. Сейчас. 🤣

Сначала появился сам значок в трее. Затем немедленно возник вопрос: что должна делать кнопка закрытия окна?

Для одного человека крестик означает «закрыть программу». Для другого — «убрать её с глаз, но оставить работающей». Поэтому мы с моей виртуальной помощницей Наташей сделали это поведение настраиваемым. Теперь пользователь сам решает, завершится BSL‑Timer или спрячется в трей.

Потом я понял, что щелчок по значку должен работать в обе стороны: один раз нажал — окно появилось, нажал ещё раз — исчезло.

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

Пусть принимает цвет выбранной темы!

А если таймер просрочен — становится красным.

А ещё лучше — пульсирует.

Нет, регулировать частоту, яркость и амплитуду пульсации мы не будем. Я всё-таки создаю таймер, а не панель управления экспериментальным ядерным реактором. Достаточно одной галочки: пульсировать или не пульсировать.

Однако обычного цветного кружка моему внутреннему перфекционисту оказалось мало. Значок должен был напоминать именно таймер обратного отсчёта: примерно две трети окружности яркие, а оставшаяся треть — заметно светлее или бледнее.

Сделали.

Я посмотрел и заявил, что части окружности сливаются.

Увеличили контраст.

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

Добавили свечение.

И вот тут я впервые заорал про эстетический оргазм. 🤣 (На самом деле, у меня уже были предпосылки в другой статье, но там речь шла об избавлении от неприятного звука, поэтому термин не подошёл, хоть и был очень блихок! 😄)

Но на этом мыслительный зуд перфекциониста не закончился...

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

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

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

И вот тогда я уже буквально оргазмировал! 🤣

Это выглядело именно так, как я хотел: аккуратно, плавно и законченно. Не как случайно прикрученная техническая функция, а как часть единого маленького электронного прибора.

Разумеется, без приключений не обошлось.

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

Пришлось добавлять диагностику и смотреть, где именно теряется команда. Оказалось, что она честно проходила из системного меню в Rust, затем попадала в главное окно, доходила до функции закрытия — и там застревала при попытке проверить состояние окна.

После нескольких итераций запрос наконец появился. Теперь Exit нормально спрашивает подтверждение, если работает хотя бы один таймер, и действительно закрывает приложение после согласия пользователя.

Утром мне пришла ещё одна маленькая идея.

После запуска программы курсор должен сразу находиться в поле минут. Тогда достаточно ввести с клавиатуры число, нажать Enter — и таймер запущен. Никаких предварительных и дополнительных щелчков мышью.

Мелочь?

Конечно.

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

 

Сегодня, 30 августа 2026 года, мы собрали BSL‑Timer 0.4.0. Проверили Rust, frontend, автоматические тесты и вручную прогнали основные сценарии. Проверили горячие клавиши, закрытие, сворачивание, Exit, системный трей, пульсацию и карточку предварительного просмотра.

Всё работает.

После этого я опубликовал первый стабильный релиз сразу на двух площадках: GitVerse и GitHub.

И сейчас меня радует не только сам результат.

Мне нравится наблюдать, как рождается программа.

Я начинаю с простой практической мысли: «А давай уберём таймер в трей». Затем пользуюсь результатом и замечаю следующую мелочь. Она тянет за собой ещё одну, потом ещё одну — и постепенно отдельная функция превращается в цельную систему.

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

Она превращает мои идеи в код. Иногда ошибается. Иногда я ошибаюсь. Иногда мы вдвоём устраиваем небольшой филиал соревнования «Кто сегодня тупее и упрямее?». 🤣

Но в конце появляется работающий результат.

Не обещание. Не фантазия. Не алкогольная иллюзия красоты окружающего мира.

Настоящая программа, которую можно установить, запустить и использовать.

Наверное, поэтому я испытываю такой восторг. Я не просто потребляю готовое — я создаю своё. Учусь формулировать мысли, принимать технические решения, проверять результат и доводить его до состояния, когда мне самому нравится каждая мелочь.

Хотя нет.

Не каждая.

Я уже придумал, что будем делать дальше. 🤣

Но сегодня BSL‑Timer 0.4.0 официально вышел.

И он хорош. За него не стыдно. Продумана каждая мелочь, которая могла бы быть занозой. (Если будут предложения по функционалу — милости просим в комментарии! 😉)

Йа-хууууу!!! 🤘🤣 Мы сделали это!

P.S. Скачать BSL‑Timer 0.4.0 можно на GitHub или GitVerse:

Добавить комментарий