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

🤖🚫 Контент вільний від AI. Цей пост на 100% написаний людиною, як і все на моєму блозі. Насолоджуйтесь!

13.02.2024

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

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

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

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

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