Стендап Сьогодні 📢 Канал в Telegram @stendap_sogodni

🤖🚫 AI-free content. This post is 100% written by a human, as is everything on my blog. Enjoy!

Пости з тегом #CтохастичнийТаймтрекер

04.02.2024

Стохастичний тайм-трекінг на SwiftUI

Сьогодні наполовину для розваги, наполовину для діла спробував зробити на SwiftUI реалізацію одного особливого тайм-трекера. Особливий він тим, що, замість ручного ведення журналу чи автоматичного збору даних, трекер питає тебе, чим зараз займаєшся. А щоб це не було передбачуваним — інтервал запитів буде стохастичним, тобто випадковим. Інколи через пʼять хвилин, інколи через дві години. Випадковість моменту робить такий трекер неупередженим (якщо завжди заносити саме те, що робиш зараз.) На довгому проміжку часу статистика дає правдивий розподіл часу.

Це все не я придумав — йдеться про TagTime - зроблений чимало років тому розробниками сервісу Beeminder. TagTime має вигляд купки скриптів на Perl та, відповідно, здатний працювати тільки на десктопі.

А в мене ідея зробити застосунок для Apple Watch та скористатись повсюдністю годинника. У WatchOS є така цікава можливість. як long look для повідомлень — фактично цілий інтерактивний екран, доступний безпосередньо при перегляді сповіщення.

До того ж використання бази даних CloudKit та універсальності SwiftUI дозволяє легко зробити застосунок, в який можна заносити з десктопу, з телефону чи з годинника — де зручніше. А інтеграція Apple Health може автоматично логувати сон та тренування. Причому виглядає так, ніби все це не потребує багато зусиль, динамічного програмування і так далі. Ну, подивимось.


13.02.2024

TimeTag - прогрес, автозаповнення

CтохастичнийТаймтрекер набуває форму. Зʼясував, чому (ще) сповіщення не були надійними — виявилося, що максимальна кількість запланованих сповіщень це 64. А я створював 100. При цьому 36 (практично випадкових) сповіщень затиралися іншими, без жодних попереджень. Обожнюю, коли так відбувається.

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

Одним з таких джерел є Apple Health. В базі Health зберігається журнал сну та тренувань. Для збереження принципу випадковості я не можу просто скопіювати їх у трекер. (Нагадаю, що трекер будується на тій ідеї, що історія станів у випадкові моменти дає репрезентативну статистику.) Доведеться знайти ті (випадково заплановані) пропущені записи, що припадають, наприклад, на сон, та помітити їх як сон.

Нарешті, щоб ефективно застосувати масив проміжків сну до масиву пропущених записів, варто уникнути простого вкладеного циклу, який веде до квадратичної складності. Натомість обидва масиви потрібно відсортувати за часом, та просуватись обома масивами одночасно — а точніше, просуватися масивом проміжків, та всередині “доганяти” поточний проміжок вказівником на поточний запис. Так отримуємо лінійну складність: кожним масивом ми пройдемося тільки один раз.


23.02.2024

10 днів зі стохастичним таймтрекером

Вже трохи більше як тиждень користуюся своїм таймтрекером (який паралельно дописую). Коли виправив надсилання сповіщень, то, фактично, MVP вже був готовий. Нагадаю, що на відміну від типового трекера, цей — стохастичний — самостійно опитує (“пінгує”) тебе у випадкові моменти часу — так само як це роблять статистичні профайлери коду. В середньому, раз на 45 хвилин, але на практиці бачив і раз в 3 хвилини, і 3 години без пінгів.

Поки експеримент мені подобається, далі буде.


04.03.2024

Ще 10 днів зі стохастичним таймтрекером

З попереднього запису минуло ще десять днів. Тоді в мене були здебільшого технічні враження, а тепер — трохи концептуальних.

По-перше, сам факт, що поки я продовжую заносити записи в трекер. Майже всі! Цьому сприяє легкість занесення — відкрити телефон та вказати пару тегів це справа на десять секунд. Плюс, про цей трекер не потрібно памʼятати — він сам нагадує. Нагадує нечасто, тому не дратує.

По-друге, такий метод таймтрекінгу точно віддає перевагу “великій картині”, а не дрібницям. Щоб тег засвітився в статистиці, він має трапитись багато разів. Тобто це ті активності, які повторюються кожен день. Та вони, абсолютно точно, є ключем до розуміння та покращення витрат власного часу.

Одне діло думати “я надто багато часу сиджу в телефоні”, та зовсім інше — бачити, що сидіння в телефоні у топ-10 активностей за тиждень (топ-1 виходить “сон”, до речі, а топ-2 “сидіння за компʼютером”… теж є над чим подумати.) Причому це більш точний показник ніж функція телефону “екранний час”, бо тег “в телефоні” значить, що я буквально в цей час дивився в телефон… відмазок немає.

Зате з позитивного — я більше часу проводжу з сімʼєю, ніж уявляв. Тут теж, СтохастичнийТаймтрекер здатний виміряти те, що я б ніколи не записував традиційним чином (підійшов до сина — відкрив Toggl - увімкнув таймер… бррр.) Навіть більше, ніж сиджу в телефоні! (Хотілося б, щоб це було очевидно, але такі вони, наші часи.)

А ще стільки всього можна доробити. Схожий метод використовують для журналу емоцій — можна пропонувати окрім тегів, ткнути в коло емоцій. А потім взагалі корелювати теги та емоції! Ще цікавий показник — монотонність тегів — тобто як часто тег повторюється — це вказує на схильність активності до відволікань.

Одним словом, я в захваті, не дочекаюся, коли вже можна буде поділитися цим продуктом з людьми.


19.04.2024

Стохастичний трекер: перші успіхи

Несподівано пройшов цілий місяць користування стохастичним таймтрекером. Але написати хотів не про те. Я нарешті зрозумів, що ця програма може дати (бо без того розробка трохи застрягла — проєкт без користі продуктом не стане.)

Нагадаю, що трекер складається з випадкових (розподілених пуассонівські) пінгів, для яких ти записуєш, чим займаєшся в той самий момент. Як я раніше писав, на один день пінгів дивитися мало сенсу через випадковість — тому я збираю статистику по тижнях. На ілюстрації видно, що на рівні тижнів пінги показують цілком реальну картину (хіба що в широких межах; смуга на графіку це область ймовірної тривалості тегу.)

Проте на статистиці по тижнях зміни зʼявляться тільки наприкінці тижня. Не дуже дієво. Тож я сидів, записував пінги та думав, що робити.

Аж допоки цього тижня не помітив, що посеред тижня тег “робота” був якось… низько. Та цього сигналу було достатньо, щоб звернути увагу та догнати плани на тиждень. Без трекера, я б просто не побачив різницю завчасно.

Насправді пригадав, що це не перший такий випадок. Минулого місяця навпаки, помітив, що BG3 може затягнути на години — що ще важче помітити самостійно. Зазвичай буває “ой, вихідні минули, а нічого не встиг”.

Одним словом, буду робити функціонал раннього попередження, коли розподіл тегів відрізняється від звичайного.


29.06.2024

Стохастичний таймтрекер та робота

Хоч розробка таймтрекера трохи уповільнилася — але користуюся я ним постійно та веду охайний облік власного часу. От, роздивився, чи може такий облік допомогти для робочих звітів.

(Нагадаю, що СтохастичнийТаймтрекер — на відміну від класичного — питає тебе у випадкові моменти, чим ти займаєшся на той самий час. З одного боку, це не так точно, з іншого боку — не потребує відстежувати кожну активність вручну, та тому краще виявляє відволікання та зміни контексту.)

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

Але чи дійсно такі звіти потрібні, якщо все одно вони агрегуються в статистику на місяць? На такому масштабі стохастичний трекер вже цілком точно вимірює витрачений час.

В минулому я тегував час за субпродуктом та категорією активності (програмування, пошук помилки, комунікація, …) Категорія активності це корисно, субпродукт — не настільки; було б краще тегувати за епіком (навіть напряму — кодом задачі.) В наступному місяці спробую, бо повинно вийти дуже наочно. Також спробую розділяти активності за обовʼязками (наприклад, комунікація — це може бути допомога, чи навпаки пошук допомоги, чи дискусія тощо)

Цікаво побачити, скільки часу уходить на побічні активності; обовʼязки як перегляд PRів здаються такими що відбирають багато часу, але на практиці витрати мінімальні. Хоча це нічого не каже про ментальне навантаження — можливо, в майбутньому почну відстежувати і його рівень.