Чому написати код простіше ніж випустити його в реліз або історія проекту NekoWeave

7 хвилин читання

Код готовий і що далі: як я вперше випускав софт у світ і набивав гулі з магазинами, консолями та роботами Гугла

Знаєте оце відчуття коли твій код нарешті скомпілювався без помилок і ти сидиш такий максимально задоволений перед монітором. Я Олександр Сисенко і я звичайний головний системний адміністратор який вечорами займається домашнім розробництвом. Довго писав софт суто на замовлення під конкретні забаганки де тобі принесли вимоги і ти просто кодиш за гроші. Але коли вирішив випустить свій власний продукт NekoWeave то зрозумів що ринок де ти сам пропонуєш продукт а не тебе просять це зовсім інший всесвіт. Це реальна галактика болю бо написання коду займає від сили п'яту частину часу.

Сам проект NekoWeave це софт для бізнесу який автоматизує фонову музику і запускає рекламу за розкладом у магазинах чи кафе. Але головна фішка програми це інтеграція з повітряними тривогами в реальному часі щоб автоматично глушити звук і вмикати сповіщення про небезпеку. Коли я протестував локально всі фічі разом з офлайн кешуванням треків на випадок блекаутів то наївно подумав що справу зроблено. Зараз усі завантажать і полетить. Яким же я був дурнем. Перші кроки у релізі коли ти нічого в цьому не шариш перетворюються на справжню гру на виживання.

Історія про те як звичайний егзешник стає проблемою

Читайте також: Колись найважливіші моменти життя зберігалися на відеокасетах. Весілля, хрестини, шкільні свята, випускні, родинні зустрічі — усе це фіксувалося на магнітну стрічку, яка здавалася надійною та довговічною. Такі записи дбайливо зберігали у шафах і коробках, переглядали у особливі моменти, повертаючись до спогадів, які формували сімейну історію.

Перша логічна думка адміна це зробити просту сторінку і викласти туди посилання на готовий exe файл. Але тут прилітає сувора реальність. Оскільки мій софт орієнтований на бізнес його завантажують менеджери або власники закладів. Коли вони качають чистий бінарник з невідомого сайту вбудований Windows SmartScreen викочує величезне червоне вікно з криком про смертельну загрозу бо додаток не має дорогого цифрового підпису. Клієнт лякається і одразу закриває сайт.

  Тому довелося повзти в офіційні канали а саме у Microsoft Store. Процес реєстрації аккаунта розробника і пакування додатка в MSIX формат з незвички виніс мені мізок повністю. Коли відправляєш софт на сертифікацію то просто сидиш і чекаешь годинами поки роботу перевірять. Але зараз мій лістинг уже живий в мережі за адресою https://apps.microsoft.com/detail/9PBG0FLQW4MT і це дало свій профіт бо Windows більше не лається а оновлення прилітають клієнтам самі.  

Підписуйтеся на наші соцмережі

Спроба пролізти в консоль через WinGet

Оскільки я сам адмін то обожнюю консоль і круті інструменти автоматизації. Тож мені прийшла ідея додати NekoWeave у WinGet щоб люди могли ставити плеєр однією командою в терміналі бо це мега зручно.

Я взагалі ніколи цього не робив раніше. Довелося лізти на Гітхаб та вивчати як влаштовані репозиторії маніфестів Майкрософта. Потім довго створював специальний YAML файл з описом програми та архітектурою. Далі відкрив свій перший пулл реквест в офіционный репозиторій winget pkgs. І тут почалося найвеселіше бо автоматичні тести Майкрософта завертали мій маніфест кілька разів через неправильні індекси чи помилки валідації. Зараз якраз сиджу і борюся з цими перевірками та чекаю поки моє творіння пройде модерацію. Це реально крутий досвід для розуміння як працює автоматизація релізів зсередини.

Гітхаб як прозорий склад для релізів

  Паралельно постало серйозне питання довіри бо як змусити бізнес не боятися програми яка керує звуком на їхніх компютерах. Повний вихідний код я відкривати не планував бо це комерційна історія але саму площадку Гітхабу вирішив використати як офіційний публічний простір для релізів та відкритого спілкування. Створив репозиторій https://github.com/nekoweave/app.  

Тут теж був фейл спочатку бо я просто закинув туди скомпільований файл у релізи і залишив абсолютно пустий README. Звісно інші адміни подивилися на це як на якусь дичину і ніхто нічого не зрозумів. Довелося сідати і розписувати все людською мовою у документації. Пояснив як саме працює плеєр як він рятує під час зникнення інтернету за рахунок локального сховища і як плавно тушить музику коли сирена реве щоб увімкнути офіційне сповіщення про тривогу. Коли сторінка отримала нормальний опис та секцію з ішюсами для багрепортів народ став ставитися з довірою бо все прозоро і зрозуміло де брати свіжі версії додатка.

Лендінг на Carrd та приколи з мультиязичністю

  Для реклами я склепав простий лендінг на конструкторі Carrd. Одразу вирішив робити дві версії бо треба крутитися на українському ринку і одночасно думати про закордон. Англійська версія сіла на домен https://nekoweave.top а українська на піддомен https://ua.nekoweave.top.  

И тут я дізнався про існування тегів hreflang. Виявляється якщо просто скопіювати дизайн і змінить мову тексту то Гугл може подумати що це тупо спам і дублікати сторінок після чого викине піддомен з пошуку взагалі. Мені довелося розбиратися як вставити спеціальний код мовної маршрутизації в голову сайту щоб пошуковик чітко знав яку саме версію показувати користувачам залежно від їхньої геопозиції та мови системи.

Магія склеювання через Schema org

Коли у мене з'явилися сайт Гітхаб та сторінка в магазині я помітив що Гугл взагалі не розуміє що це один і той самий продукт. В пошуку вони бовталися окремо як абсолютно чужі ресурси.

Я почав курити мануали з SEO і натрапив на мікроразметку Schema org для софту. Виявилося в код сайту треба зашити скрипт SoftwareApplication де є магічний рядок sameAs. Туди я прописав точні лінки на свій GitHub репо та на лістинг в Microsoft Store. Це буквально команда для робота поисковика яка каже йому подивитися туди і туди бо це все мій додаток NekoWeave.

Потім я налаштував перехресні посилання для закріплення результату. На сайті повісив кнопки на магазин та сирці у релізах Гітхабу. На самому Гітхабі в налаштуваннях About вставив лінк на сайт. В кабінеті розробника Майкрософт вказав домашню сторінку сайту.

Після цього зайшов у Google Search Console і вручную відправив обидва домени на переіндекацію. Тепер просто чекаю поки великий брат оновить свои бази даних.

Короткий висновок

Мій висновок як першопрохідця такий що написати робочий код це десь п'ята частина справи. Весь інший час ти розбираєшся з сертифікатами воюєш з маніфестами для консолі прописуєш теги для пошукових роботів і намагаєшся довести інтернету що ти не верблюд. Якщо ви теж сидите над своїм першим егзешником і не знаєте куди ткнутися сподіваюся мій досвід трохи прояснить вам картину. Пишіть у коменти якщо теж воювали з маніфестами WinGet цікаво послухати ваші лайфхаки.