Стендап Сьогодні
Що я зробив, що я хочу зробити, і що це все значить.
Повсякденні здобутки в форматі стендапу.
Детальніше в статті
Підписатись на RSS
📢
Канал в Telegram @stendap_sogodni
🦣
@stendap_sogodni@shevtsov.me в Федиверсі
03.01.2024
Weightplot: запуск та сайт
Нарешті, вчора WeightPlot пішов в маси: ось сторінка в AppStore (готовий поділитися промокодом). Щоб це здійснилось, вчора розробляв сайт.
Бо, як писав минулого разу, сайт мусить бути, це обовʼязкова вимога до всіх застосунків в App Store. Тож, окрім розробника, доведеться попрацювати маркетологом.
Спочатку хотів зробити сайт чисто на HTML. Проте, згадав, що я збираюся накидати туди хоч декілька статей — для розʼяснення та для SEO - то все ж взяв рідний Hugo та зробив на ньому.
Щоб впоратись за день, відшукав готову тему. Зазвичай не люблю брати готові теми, але, оскільки сайт грає другу скрипку, то це має повний сенс. Обрав тему Paige. Вона побудована на Bootstrap, та тому дозволила доробити все, що потрібно — наприклад, табличку функцій.
Проблеми зʼявилися з деплоєм на Vercel. Річ у тім, що теми на Hugo тепер встановлюються як… модулі Go. Що, як на мене, дуже дивно. А на Vercel взагалі з цими модулями відбувається щось дивно, та я за кілька годин так і не зрозумів, що. На щастя, є тупе, але ефективне рішення: будувати сайт локально, комітити, та залишити на Vercel тільки хостинг.
Взагалі, цінуйте роботу відділу маркетингу. Бо без нього все, що інженери наробили, просто нікому буде невідомо та не потрібно.
02.01.2024
Реверс-інжинірінг пріоритетів з розкладу
В продовження теми, мені спало на думку, що якщо єдина справжня пріоритизація — це те, на що ти витрачаєш час, то можна провернути це у зворотному порядку та з розкладу денного отримати свої “справжні” пріоритети. Навіщо це потрібно? Для самосвідомості та сходження очікувань та, власне, пріоритетів.
Наприклад, якщо ти повторюєш собі щодня, що спорт — це важливо, але насправді нічого спортивного не робиш, то такий пріоритет — самообман. Може, ми так робимо тому, що думки про важливість спорту мозком сприймаються як вже якийсь прогрес, та заспокоюють. Але, як я казав, поки нічого не зроблено — прогрес тільки сниться.
Або навпаки: кажеш, що сперечатися в інтернеті — марна справа, але витрачаєш години на написання коментарів. В такому випадку, очевидно, тобі реально важливо мати правду — важливіше ніж, наприклад, зробити зарядку, або ще щось.
Одне з дійсно найважливіших занять — це відпочинок. Але при тому з боку нашої уявної пріоритизації відпочинок виглядає навпаки, тим, що можна зрізати в першу чергу, та втиснути замість нього більше “корисного” часу. От тільки відпочинок все одно знаходить шлях до нашого розкладу: зайвим серфінгом та іншим марнотратством часу. А якщо цей пріоритет усвідомити, можна нарешті планувати свій відпочинок, тобто дозволити собі відпочити без “користі” та без докору.
Тоді, може, потім зʼявиться час зробити щось нове, пріоритетне.
01.01.2024
2023: Роздуми року
Якщо виділити думку року, то це: існує осяжна межа того, що можна встигнути зробити за рік. Є роки, коли відчуваєш, що можна було постаратися та зробити більше. Однак 2023 - рік, коли я наблизився до межі можливого.
З одного боку, це наштовхує на всілякі чорні думки про те, що років нам дано не так багато, ну і так далі. Скільки переїздів з базу на базу, ремонтів, подій залишилось в житті? Але з іншого, така усвідомленість може навчити пріоритизувати.
Пріоритизація — це не просто розуміти, що важливе. Це значить, в першу чергу, робити важливе. Робити, звісно, складніше. Якщо подумати, то пріоритизація без дій проста тому, що абсолютно ні на що не впливає. Вона уявна. Думаєш, що щось важливе — доведи це своїми вчинками.
А ремонт навчив мене, що треба планувати на майбутнє. Як би це пояснити… я звик планувати те, що вже відбувається, тобто треба вирішити послідовність дій. Але я зрозумів, що можна почати планувати ще тоді, коли весь екшн далеко в майбутньому.
Наприклад: з майстром варто поговорити не тоді, коли він потрібний завтра (то, сподіваюсь, очевидно), або через тиждень, а за місяці до того, коли ніякі терміни взагалі невідомі — щоб краще розуміти план роботи.
Або можна інакше сформулювати: інколи планування — це повноцінний етап проєкту. Та приємно те, що планувати що завгодно можна хоч прямо зараз.
31.12.2023
Дев-адвент 31: випускаємо!
🥂 Нарешті застосунок готовий до випуску в App Store. Фаза щоденної розробки закінчується.
Щоб випустити застосунок, окрім власне програми ще багато всього треба наробити. Скриншоти з різних моделей айфонів — принаймні два набори — без кнопки “Додому” та з кнопкою. Опис, звісно. Всілякі анкети ставлення до приватності та обмежень по віку.
Але ще в будь-якого застосунку повинен бути сайт. Мінімальний зміст сайту — це сторінка з контактною інформацією та з політикою приватності. Я сайт зробив, але ще не наповнив. Політику приватності десь треба буде взяти, хоча в моєму випадку вона має бути дуже простою, бо програма нічого нікуди не передає, абсолютно — та навіть не містить аналітики. Коли йдеться про таку інтимну інформацію, як вага, я вважаю що це єдиний шлях.
Що далі? Доробити мінімальний сайт, запостити на всілякі ресурси, та потроху додавати функціонал. Частину з того, що я зробив, я потім приховав — наприклад, віджети — бо по нім не було чіткого розуміння. Так само й експорт. Бо недостатньо просто мати функцію — вона мусить бути частиною системи, а не просто “стирчати з боку”.
30.12.2023
Дев-адвент 30: онбордінг
Зробив екран онбордінгу.
Взагалі, спостерігаю, що продукт для людей відрізняється від поробки для власного використання вже тим, що в ньому повинні бути ці “зайві” з точки зору функціонала, але життєво необхідні для користувача елементи — онбордінг, довідка, обробка порожнього стану і таке інше.
Радий тому, що з SwiftUI легко зробити красивий екран. До того ж він буде нормально відображатися на айфонах різного розміру. Більшість верстки робиться компонентами HStack
, VStack
та Spacer
. Порівняно з CSS, це легше вхопити — немає історичного розмаїття підходів.
А ще мені було потрібно місце, де запросити дозвіл до Apple Health - це й стало головним CTA для екрана. До речі, цікаво, що задля приватності в Apple Health немає способу дізнатись, чи є в тебе доступ на читання — якщо немає, то всі запити будуть повертатися порожніми. Ну, зате “дозволу немає” та “даних немає” можна обʼєднати в єдиний випадок.
29.12.2023
Дев-адвент 29: екран поточного статусу
Нарешті дістався до екрана поточного статусу. (Також, мабуть, одна з перших потреб, але уявлення про нього довго не зʼявлялось.)
Замість “блокового” дизайну, який був на самому початку, обрав табличний. Блоки мені теж подобались, бо воно так барвисто та соковито — але на практиці ми опинимось з одним і тим самим набором блоків протягом довгих проміжків часу (бо вага так швидко не змінюється), та око від них просто втомлюється. А табличку легко продивитись та побачити, як справи. Та вона чудово доповнює графік, що над нею.
Щодо показників. Тренд вирішив показувати тижневий — це той проміжок, за який відбувається мінімальна помітна зміна. Окрім того, обчислюю вагу через місяць такого тренду. Це заміна більш класичному “до цілі залишилось Х днів”. За досвідом, якщо ціль далеко, то такі прогнози не ліпше за погоду — зате місяць цілком можливо витримати в одному темпі.
Нарешті, дефіцит чи надлишок калорій обчислюються за простою формулою: різниця ваги, помножена на 7700 ккал/кг. Саме стільки зберігає один кілограм жиру. А оскільки я беру різницю вже від “реальної”, тобто згладженої, ваги, то це достатньо точна оцінка.
28.12.2023
Дев-адвент 28: нарешті, назва
Готую програму до публікації. Як не кумедно, але тільки сьогодні остаточно обрав назву. До того була тільки робоча: HDiet.
З технічних аспектів: перейменувати проєкт в XCode досить просто, принаймні поки він не опублікований. Для цього XCode закривається, відкривається VSCode, та робиться масова заміна по коду назви; після чого залишається так само знайти та замінити в назвах файлів, для чого я не знайшов автоматичного механізму, бо ліньки (хоча довелося перейменовувати сьогодні разів пʼять.)
З бюрократичних: назва застосунку в App Store має бути унікальною! Але тільки для конкретної базової мови… я читав, що люди обходять це через вибір мови “Англійська (Канада)”, але мені не хотілося. Причому назва резервується на момент реєстрації в App Store Connect (це “залаштунки” App Store.) Навіть якщо застосунок не опублікований чи застарілий. Тому багато з обраних мною назв ніби не в пошуці не знаходились, втім не були дозволені до реєстрації.
З творчих: назва WeightPlot містить невеличку гру слів. “Plot” може значити або “графік/діаграма”, або “сюжет”. Обидва значення описують функціональність моєї програми: графік ваги та історію її змін. Слово “дієта” вирішив не притягувати, бо до харчування вона як раз не має відношення.
Отакої! Вже недовго залишилося.
27.12.2023
Дев-адвент 27: форматування та одиниці виміру
Переді мною стояла дилема: або я перекладаю програму українською, або залишаю англійською, але впроваджую підтримку фунтів. Інакше множина потенціальних користувачів залишається якщо не порожньою, то принаймні надто вузькою.
Повірте, переклад незрівнянно складніший, ніж підтримка одиниць виміру. Але й обчислення в різних одиницях — не так просто. Константи в моєму коді налаштовані на кілограми та метри; просто так замінити на фунти та фути не вийде, а до того ж ускладнить підтримку. Тому я вирішив, що внутрішні величини та обчислення завжди будуть вестися в метричній системі, а конвертація відбуватиметься на виводі.
Таким чином, зробив конвертацію одиниць виміру частиною форматування. Чудовий привід відрефакторити форматування, бо до цього часу по коду були розсипані шаблони на кшталт "%0.1f kg"
. А тепер повсюди одна бібліотечна функція.
Самі одиниці виміру я беру з Apple Health; звідти відомо, які одиниці обрав користувач, тож не доведеться про це питати. Єдине, що конвертування вбудованими засобами дуже повільно, бо це треба створити HKQuantity
та викликати в неї doubleValue(for: unit)
. В циклі для графіка це непіднімно. На щастя, одиниці виміру ваги конвертуються множенням на коефіцієнт, а його можна дізнатись викликом:
HKQuantity(unit: kiloUnit, doubleValue: 1.0).doubleValue(for: preferredUnit)
26.12.2023
Дев-адвент 26: історія
Сьогодні історія набула приблизно такого вигляду, якою я хочу її бачити. Також додав деяку статистику (а для того треба було придумати, куди.)
З технічних моментів: у Swift є такі “обчислювані властивості”, які виглядають, як властивість з ініціалізатором. Я, чомусь, наївно думав, що такі властивості зберігають своє значення. Але насправді нічого такого немає, обчислювана властивість — це звичайна функція, відрізняється лише синтаксис її виклику. Довелося трохи порефакторити.
А ще виправив алгоритм, щоб він не утворював послідовні проміжки стабільності. Була в нього така особливість, що якщо вага дуже повільно зростає або зменшується, то виходить, наприклад, три тижні однієї “стабільної” ваги, а потім два тижні вже іншої “стабільної” ваги. Виправити було дуже легко — просто, буквально, не дозволяю алгоритму брати два стабільних відрізки підряд. В результаті перебір знайде наступний за оцінкою розвʼязок та все буде добре.
Історія буде ще цікавішою, коли там зʼявляться коментарі та світлини, але це не для MVP.
25.12.2023
Дев-адвент 25: яка статистика цікава?
Нарешті дістався до візуально цікавого — збагачення історії визначними точками. Ось поточний перелік ідей по тому, що можна вчепити, навіть без доступу до додаткових джерел інформації та ручного вводу:
-
Найбільша та найменша вага — за весь час та за рік. Звісно, з датами. Це, певно, найцікавіше з всього.
-
Найдовший проміжок — набору, схуднення, стабільності. Альтернативно: проміжки з найбільшою різницею. Довжина вказує на стійкість намірів, але різниця — на їхню успішність.
-
Перетин визначних значень: круглих дат, категорій індексу маси тіла. Наближення до найбільшої та найменшої ваги. (Також колись я додам можливість вказати значення-ціль, тоді можна буде відзначати наближення до цілі.)
-
Особливі дати — свята та сезони. З Apple Health можна навіть день народження взяти. (Інженер в мені каже, що можна інтегруватись з календарем, але насправді то надто складно та можливість додавати коментарі на дату цілком перекриває таку потребу.)
Перелік такого роду в голові виглядає довжелезним, аж поки не спробуєш його записати. А ще треба придумати набір коментарів до поточного стану.