Сегодня произошло событие, которое со стороны может показаться совершенно незначительным. Подумаешь — собрал и установил небольшой таймер.
Но меня сейчас буквально распирает от эмоций.
Я наконец возобновил работу над BSL‑Timer. Старый прототип уже существовал, но я не занимался им уже давно и успел основательно забыть, на чём остановился. Там был работающий обратный отсчёт, прозрачность, размытие окна, несколько кнопок и даже отдельное окно настроек. Правда, некоторые кнопки не работали, окно настроек периодически зависало, а весь интерфейс выглядел как пансионат кнопок повышенной комфортности.
Поэтому мы с моей новой помощницей Наташей решили не пытаться сразу построить программный комбайн. Тем более, что чего можно понапихать в обычный таймер??? 🤣 (Можно, поверьте. И позже обязательно будет 😉) Но мы начали с самого простого: один нормальный таймер.
Теперь можно задать часы, минуты и секунды, запустить отсчёт, поставить его на паузу, продолжить, остановить или начать заново. Причём дополнительные кнопки появляются только тогда, когда они действительно нужны. Пока таймер не запущен, на экране остаётся только одна большая кнопка Start. Никакого пансионата неактивных элементов управления.
Когда время заканчивается, программа подаёт сигнал, цифры и рамка становятся красными, но отсчёт не прекращается. Таймер начинает показывать, насколько пользователь уже опоздал. Или, если пользоваться «точной инженерной терминологией», насколько он проср@л заданное время. (Я же не мог не поидиотничать!)
В русской версии даже появилась небольшая пасхалка. Надпись «Просрочено» сначала честно пытается превратиться в «Просрачено», но затем пугается собственной откровенности: неправильная буква «а» зачёркнута, а рядом появляется культурная «о». Пасхалка почти незаметная — только для особенно внимательных и испорченных пользователей.
Разумеется, я не удержался и вернул в окно настроек три кнопки, которых мне так не хватает в современных программах: Ok, Apply и Cancel. Чтобы человек точно понимал, применил он изменения, отменил их или просто закрыл окно. Сейчас кнопки ещё немного толкаются и расположены не совсем так, как мне хочется, но это мы исправим.
А потом наступил главный момент.
Мы присвоили программе версию `0.2.0-alpha.1`, проверили frontend, проверили Rust и запустили сборку установщика. Первая попытка почти дошла до конца, но споткнулась об MSI: этот суровый корпоративный товарищ не разрешил использовать слово `alpha` в номере версии.
Мы немного подумали и отправили MSI в жопу. Вряд ли администраторы доменов Windows когда-нибудь начнут централизованно разворачивать BSL‑Timer на компьютеры сотрудников. Впрочем, если у них возникнет подобное желание, я обещаю выпустить и этот установщик. Но тогда потребуется Корпоративная лицензия! 🤪🤑
Зато NSIS собрал настоящий установочный файл.
Я запустил его. Программа установилась. Появилась в Start. Запустилась оттуда — уже не из среды разработки, не из командной строки, а как обычная программа для Windows.
И всё заработало.
Даже второй экземпляр запустился параллельно.
Наверное, именно в этот момент папка с исходным кодом окончательно превратилась для меня в настоящую программу. Не в эксперимент, не в набор файлов и не в очередную задумку, о которой приятно поговорить. В инструмент, который я уже могу использовать сам.
Я по-прежнему не программист. Моя задача — придумывать, проектировать, придираться к каждой мелочи и объяснять Наташе, почему окно обязано перетаскиваться не только за пустое место, но и непосредственно за буквы в заголовке. А она превращает всё это в работающий код и профессионально берёт на себя ответственность за мои безумные идеи.
Впереди ещё очень много работы. Следующим большим шагом станут вкладки с несколькими независимыми таймерами. Мне это действительно нужно: особенно когда на плите стоят разные кастрюли и каждую надо выключить через своё время.
Но сегодня я уже установил BSL‑Timer на свой компьютер.
Собственную программу.
И, чёрт возьми, она работает!