Вчера я вспомнил, чего ещё не хватает 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: