<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Денискины заметки</title>
    <description>Привет. Меня зовут Денис. А это — канал с заметками о беге, истории и впечатления из путешествий</description>
    <link>https://denisfl.ru/</link>
    <item>
      <title>Нельзя просто взять и сгенерировать тему</title>
      <description>
        <![CDATA[<p>В рамках работы над open-source проектом работал над <a href="https://github.com/archestra-ai/archestra/issues/4076">задачкой по генерации тем</a>. То есть в проекте было несколько тем: одни темы имели светлый и темный режим, другие - только светлый или только темный. И задача сводилась к тому, чтобы сделать для всех тем светлый и темный режим. </p>

<p><img src="https://cdn.denisfl.ru/uploads/20260429_090506_ae78eb.webp" alt="20260429_090506_ae78eb.webp"></p>

<p>Вот на скриншоте показаны несколько темных тем: Dracula, Solarized, Gruvbox, Monokai, Moonlight. В теории можно взять и инвертировать светлоту, получив тем самым светлую тему. В теории теория и практика не отличаются. На практике всё совсем наоборот 😀. Чтобы объяснить почему, полезно сначала посмотреть на то, как устроена работа с цветом в принципе.</p>

<p>В 2011 году Этан Шунуовер опубликовал <a href="https://ethanschoonover.com/solarized/">Solarized</a> — палитру из шестнадцати цветов для терминалов и редакторов. Она стала популярной потому что в основе проектирования цвета была конкретная методология.</p>

<p>Шунуовер проектировал схему с точными соотношениями светлоты в <a href="https://en.wikipedia.org/wiki/CIELAB_color_space">пространстве CIELAB</a> и набором оттенков, основанных на фиксированных отношениях на цветовом круге. Палитра тестировалась на откалиброванных и намеренно некалиброванных дисплеях, в различных условиях освещения.</p>

<p>Ключевое свойство Solarized в том, что монотонные цвета имеют симметричные разницы светлоты в CIELAB, поэтому переключение между тёмным и светлым режимами сохраняет одинаковую воспринимаемую контрастность между каждым значением. Это достигается точным зеркалированием Lab-координат: <code>base03</code> и <code>base3</code> симметричны относительно средней точки шкалы, как и все остальные пары.</p>

<p>Solarized снижает контраст яркости, но, в отличие от многих низкоконтрастных схем, сохраняет контрастирующие оттенки для читаемости синтаксической подсветки. Это важно, потому что необходимо уменьшить «слепящий» эффект белого на чёрном, не потеряв при этом различимость элементов.</p>

<p>Именно поэтому я считаю, что Solarized — очень хороший пример темы, хотя и сам ей не пользуюсь. В схему вложена хорошая идея и такая же хорошая реализация — оба режима (темный и светлый) должны восприниматься как части единой системы. </p>

<h3>Разные цветовые модели</h3>

<p>Когда мы говорим о цвете, мы часто думаем о HEX или HSL. HEX — это просто RGB в другой записи, а HSL хоть и интуитивен, но математически нечестен. Два цвета с одинаковым L в HSL воспринимаются глазом совершенно по-разному. Зелёный при <code>hsl(120 100% 50%)</code> — ослепительно яркий, синий при <code>hsl(240 100% 50%)</code> — значительно темнее, хотя формально у них одна «светлота».</p>

<p>Шунуовер работал в CIELAB именно потому, что это пространство перцептивно равномерное: одинаковое числовое расстояние между точками соответствует одинаковому воспринимаемому различию для глаза. Отсюда и возможность строить симметрию: если <code>base03</code> имеет <code>L=15</code>, а <code>base3</code> имеет <code>L=97</code>, то их среднее — <code>L=56</code>, и вся палитра строится как зеркало вокруг этой оси.</p>

<p>Современные системы дизайна, переходят на <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Values/color_value/oklch">OKLCH</a>. Это улучшенная версия того же принципа. В нём L (lightness) означает одно и то же для любого оттенка. Поэтому цвета с <code>L = 0.55</code> воспринимаются одинаково яркими. Это позволяет строить палитры более системно, а не на глаз.
В нашем случае темы хранятся именно в OKLCH, а в браузере они рендерятся как <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Values/color_value/lab">lab()</a>.</p>

<h3>Проблема контраста</h3>

<p>Solarized решал контраст вручную, через Lab-симметрию. В нашем же случае мы не можем всё выверять вручную. В текущей реализации есть лишь автоматическая генерации и нет симметрии. У нас есть только числа, которые нужно проверять.</p>

<p>Для проверки контрастности можно использовать относительную яркость (relative luminance). Она используется в <a href="https://www.wcag.com/resource/what-is-wcag/">WCAG</a>. Но яркость относительна, поэтому мы не можем полагаться на нее полностью как на L в OKLCH. Синие и фиолетовые цвета при <code>L ≈ 0.55</code> дают относительную яркость около 0.22–0.25, что обеспечивает контраст ~5:1 с белым текстом. Этого достаточно, для того, чтобы комфортно читать текст. Но жёлтый и оранжевый при той же OKLCH-светлоте имеют яркость 0.35–0.45, и контраст с белым падает до 2.5–3:1. А такого контраста уже недостаточно для читаемости.</p>

<p>Первая попытка генерации светлых тем для Gruvbox и Monokai дала золотистый primary с тёмным текстом поверх него. Визуально это выглядело плохо. У меня не сохранилось скриншотов, поверьте на слово, было так себе. Поэтому для последующей генерации я решил для тёплых хроматических <code>primary-color</code> (жёлтый, оранжевый, золотой) нужно опускать L до 0.45–0.50 и использовать белый <code>foreground-color</code>. Для холодных (синий, фиолетовый) можно оставлять L ≈ 0.50–0.58. Это нельзя вычислить автоматически без анализа конкретного цвета.</p>

<h3>Проблема сохранения визуальной идентичности</h3>

<p>Любая тема, которую мы генерируем в дополнение к уже существующей должна удовлетворять как минимум двум условиям: 
— иметь правильный контраст
— быть узнаваемой</p>

<p>Solarized — это крайний случай. Тут идентичность задокументирована точными Lab-значениями. Но есть темы, у которых нет такой хорошей документации. </p>

<p>Например, Dracula узнаваемы по пурпурно-розовому оттенку из <code>#bd93f9</code>. Но этот цвет воспроизводится по-разному в разных редакторах. Более того, для многих тем существуют еще и различные вариации, то есть нет только темной или светлой темы. Есть наборы из нескольких темных и нескольких светлых вариантов.</p>

<p>Первая автоматически сгенерированная версия Dracula использовала <code>--primary: oklch(0.550 0.178 295°)</code>. Цвет синевато-фиолетовый, контраст с белым нормальный. Вроде технически верно. Но полученный оттенок был скорее пурпурно-розовый. При 295° тема начинает напоминать Moonlight. В результате смещение на 10 градусов по оттенку разрушало идентичность.</p>

<h3>Инвертированная логика акцентов</h3>

<p>В качестве компонентов в проекте используются <a href="https://ui.shadcn.com/">shadcn</a>. Одна из неочевидных конвенций shadcn это то, как работает accent в светлых и тёмных темах. В тёмной теме accent — это насыщенный цвет. Он используется для подсветки активных элементов. В светлой теме accent — это очень бледная, почти белая поверхность для hover-состояний, а accent-foreground — тёмный текст поверх неё. При автоматической генерации мы копируем тёмные значения accent в светлые варианты. В результате получаются элементы с насыщенным фоном и светлым текстом. Все это можно описать некрасивым эмодзи, но не буду этого делать 😁.</p>

<p>В общем, задачка прлучилась довольно интересной. Просто скопировать и сделать вжух не вышло. Пришлось подумать и поэкспериментировать. Для каждой новой темы необходимо понимать ее идентичность, проверять контраст и accent-инверсию, корректировать и проверять.</p>

<p>Результат работы можно посмотреть ниже или открыть <a href="https://github.com/archestra-ai/archestra/pull/4135">пулл реквест и исследовать код</a>. Конечно, некоторые моменты еще можно докрутить и улучшить. Хотя у меня и нет года, как у Шунуовера, я считаю, что результат получился вполне достойным.</p>

<p><img src="https://cdn.denisfl.ru/uploads/20260429_094839_58ea6a.webp" alt="20260429_094839_58ea6a.webp" title="Solarized Light"></p>

<p><img src="https://cdn.denisfl.ru/uploads/20260429_094846_02ec2b.webp" alt="20260429_094846_02ec2b.webp" title="Solarized Dark"></p>

<p><img src="https://cdn.denisfl.ru/uploads/20260429_094839_cafb2d.webp" alt="20260429_094839_cafb2d.webp" title="Dracula Light"></p>

<p><img src="https://cdn.denisfl.ru/uploads/20260429_094846_7ee90c.webp" alt="20260429_094846_7ee90c.webp" title="Dracula Dark"></p>

<p><img src="https://cdn.denisfl.ru/uploads/20260429_094846_424701.webp" alt="20260429_094846_424701.webp" title="Bubblegum Light"></p>

<p><img src="https://cdn.denisfl.ru/uploads/20260429_094839_34dd69.webp" alt="20260429_094839_34dd69.webp" title="Bubblegum Dark"></p>
]]>
      </description>
      <pubDate>Wed, 29 Apr 2026 11:11:03 +0000</pubDate>
      <link>https://denisfl.ru/notes/114</link>
      <guid>https://denisfl.ru/notes/114</guid>
    </item>
    <item>
      <title>Про подключение Garmin MCP к Claude Code и забег в Бечее</title>
      <description>
        <![CDATA[<p>На днях с подачи приятеля подключил Garmin MCP к Claude Code. Опыт интересный. В первую очередь, потому что все эти данные мне и так известны и доступны в виде сухой статистики в Garmin Connect. Хотелось попробовать новый опыт взаимодействия.</p>

<p><img src="https://cdn.denisfl.ru/uploads/20260328_202912_0a7bbc.webp" alt="20260328_202912_0a7bbc.webp"></p>

<p>Вот что Claude делает очень хорошо, так это строит графики и выполняет рутинные задачи. Ну а еще льстит, конечно. Для эксперимента я попросил построить прогноз на сегодняшний забег. Я долго сомневался бежать 5км или 10км. По итогу бежал 10, потому что слоты на 5 просто закончились :)</p>

<p>Вот с такими данными я пришел к Claude и планировал бежать 28-го марта 10км.</p>

<p><img src="https://cdn.denisfl.ru/uploads/20260328_203523_5c64f5.webp" alt="20260328_203523_5c64f5.webp"></p>

<blockquote>
<p>Прогноз Garmin: 48:56. Реалистичная цель: 48–50 мин. Оптимистичная (при хорошем самочувствии): 47:30. </p>
</blockquote>

<p>... Сказал Claude и дал раскладку на гонку: 
— Км 1–2: 5:05–5:10 <em>Разгон</em>
— Км 3–8: 4:50–4:55 <em>Основной блок</em>
— Км 9–10: 4:35–4:45 <em>Финишное ускорение</em></p>

<p>Тут я посмеялся. Уверен, что мой тренер, читающий этот пост тоже посмеялся, зная меня. Для тех кто не знает, скажу: никакого финишного ускорения у меня быть не может. Я так не делаю. У меня или всё ровно, или финишное замедление :D Хотя последнее я стараюсь избегать. И вот, чтобы его избегать и не сбрасывать, мне очень важно бежать всю дистанцию ровно. </p>

<p>&quot;Любой каприз за ваши токены&quot;. Claude скорректировал раскладку после уточнения. </p>

<p><img src="https://cdn.denisfl.ru/uploads/20260328_204152_1de959.webp" alt="20260328_204152_1de959.webp"></p>

<p>Это уже выглядит ближе к реальности. Если бы не один нюанс. Claude ничего обо мне не знает. Он проанализировал тренировки и выстроил свои предположения. Насколько они близки к реальной картине не так уж и важно. Просил план, вот держи.</p>

<p>А вот реальный результат. Он сильно отличается от прогноза Garmin и плана Claude. И это очень важно иметь в виду, когда и если вы захотите попробовать эти инструменты в работе.</p>

<p><img src="https://cdn.denisfl.ru/uploads/20260328_204823_e7cc57.webp" alt="20260328_204823_e7cc57.webp"></p>

<p><img src="https://cdn.denisfl.ru/uploads/20260328_210604_33ee8e.webp" alt="20260328_210604_33ee8e.webp"></p>

<p>Зачем вообще всё это? Использование ИИ сейчас повсеместно. Но надо быть очень аккуратными с тем, что мы получаем в результате его использования. Чтобы прогнозы были точными, любую модель нужно обучать, запросы должны быть точнее, ограничения в рамках которых модель мыслит должны быть жестче. Иначе результат будет далек от истины.</p>

<p>Но в чем ИИ точно хорош, так это в исполнении рутинных задач. Например, подключив к Claude коннектры Garmin и Calendar, можно делегировать ему планирование тренировок с учетом плана, списка дел в календаре и пожеланий. В результате за считанные секунды неделя будет распланирована, в Календаре и плане Garmin будут стоять тренировки с расписанными блоками. Вот это действительно классно.</p>

<p>Ниже опишу кратко шаги, необходимые для подключения Garmin MCP к Claude Code.</p>

<hr>

<h3>Требования</h3>

<ul>
<li>macOS / Linux</li>
<li>Python 3.10+</li>
<li><a href="https://docs.astral.sh/uv/">uv</a> — менеджер пакетов Python</li>
<li>Аккаунт Garmin Connect</li>
</ul>

<hr>

<h3>Шаг 1 — Установка uv</h3>

<p><code>bash
curl -LsSf https://astral.sh/uv/install.sh | sh
</code></p>

<p>Проверка:
<code>bash
uv --version
</code></p>

<hr>

<h3>Шаг 2 — Клонирование репозитория</h3>

<p><code>bash
git clone https://github.com/Taxuspt/garmin_mcp ~/dev/garmin
cd ~/dev/garmin
uv sync
</code></p>

<hr>

<h3>Шаг 3 — Аутентификация в Garmin Connect</h3>

<p>Токены сохраняются в <code>~/.garminconnect</code> и используются повторно — пароль вводится только один раз.</p>

<p><code>bash
cd ~/dev/garmin
GARMIN_EMAIL=your@email.com GARMIN_PASSWORD=your_password uv run garmin-mcp-auth
</code></p>

<p>Если включена MFA — нужно ввести код при запросе.</p>

<p><strong>Проверка токенов:</strong>
<code>bash
uv run garmin-mcp-auth --verify
</code></p>

<p><strong>Принудительная повторная аутентификация (если токены устарели):</strong>
<code>bash
uv run garmin-mcp-auth --force-reauth
</code></p>

<p>Токены действительны ~6 месяцев.</p>

<hr>

<h3>Шаг 4 — Подключение к Claude Code</h3>

<p>Добавить MCP-сервер глобально (для всех проектов):</p>

<p><code>bash
claude mcp add -s user garmin -- /path/to/uv --directory ~/dev/garmin run garmin-mcp
</code></p>

<p>Узнать полный путь к <code>uv</code>:
<code>bash
which uv
</code>
Например: /Users/denis/.local/bin/uv</p>

<p>Итоговая команда:
<code>bash
claude mcp add -s user garmin -- /Users/denis/.local/bin/uv --directory /Users/denis/dev/garmin run garmin-mcp
</code></p>

<p>Проверь подключение:
<code>bash
claude mcp list
</code></p>

<p>В случае успеха, должны увидеть что-то вроде <code>garmin: ... - ✓ Connected</code></p>

<p>После этого MCP доступен в любом проекте без дополнительных настроек.</p>

<hr>

<h3>Шаг 5 — Подключение к Claude Desktop</h3>

<p>Нужно открыть файл конфигурации:</p>

<ul>
<li><strong>macOS:</strong> <code>~/Library/Application Support/Claude/claude_desktop_config.json</code></li>
<li><strong>Windows:</strong> <code>%APPDATA%\Claude\claude_desktop_config.json</code></li>
</ul>

<p>Добавить секцию <code>mcpServers</code>:</p>

<p><code>json
{
  &quot;mcpServers&quot;: {
    &quot;garmin&quot;: {
      &quot;command&quot;: &quot;/Users/denis/.local/bin/uv&quot;,
      &quot;args&quot;: [
        &quot;--directory&quot;,
        &quot;/Users/denis/dev/garmin&quot;,
        &quot;run&quot;,
        &quot;garmin-mcp&quot;
      ]
    }
  }
}
</code>
Важно заменить <code>/Users/denis</code> на свой домашний каталог. Полный путь к <code>uv</code> важен — Claude Desktop не использует PATH из терминала.</p>

<p>Перезапустить Claude Desktop. В интерфейсе появится иконка с подключённым сервером <code>garmin</code>.</p>

<hr>

<h3>Использование</h3>

<p>Тут все конечно зависит от фантазии. Можно начать с простого:</p>

<p><code>
Покажи мою сегодняшнюю активность
Проанализируй мою последнюю пробежку
Сколько шагов я сделал вчера?
Какой у меня был сон на этой неделе?
Сравни тренировки за последние 7 дней
</code></p>

<p>Доступно 96+ инструментов: активности, шаги, сон, пульс, стресс, вес, тренировки, устройства и др.</p>

<hr>

<h3>Обновление токенов</h3>

<p>Токены Garmin истекают примерно раз в полгода. При ошибке подключения:</p>

<p>```bash
cd ~/dev/garmin
GARMIN<em>EMAIL=<a href="mailto:your@email.com">your@email.com</a> GARMIN</em>PASSWORD=your_password uv run garmin-mcp-auth --force-reauth</p>

<h2>```</h2>

<h3>Решение проблем</h3>

<p><em><code>Failed to connect</code> в <code>claude mcp list</code></em>. Токены не найдены или истекли — повтори Шаг 3.</p>

<p><em><code>429 Too Many Requests</code> при аутентификации</em>. Garmin временно заблокировал IP. Надо подождать 15–30 минут и попробуй снова.</p>

<p><em>Claude Desktop не видит MCP</em>. Нужно убедиться, что в <code>claude_desktop_config.json</code> указан <strong>полный путь</strong> к <code>uv</code> (не просто <code>uv</code>). Проверь: <code>which uv</code>.</p>

<h4>Логи Claude Desktop</h4>

<ul>
<li>macOS: <code>~/Library/Logs/Claude/mcp-server-garmin.log</code></li>
<li>Windows: <code>%APPDATA%\Claude\logs\mcp-server-garmin.log</code></li>
</ul>

<p>PS: Еще экспериментировал дополнительно с локальными моделями Ollama + qwen + openapi с гарминовскими ендпоинтами. Но в базовом варианте, это решение выглядит абсолютно нерабочим, если вы хотите просто общаться с ИИ через чат, не тратя время на настройку модели.</p>
]]>
      </description>
      <pubDate>Sat, 28 Mar 2026 21:10:09 +0000</pubDate>
      <link>https://denisfl.ru/notes/113</link>
      <guid>https://denisfl.ru/notes/113</guid>
    </item>
    <item>
      <title>TrueNorth для ясности в делах</title>
      <description>
        <![CDATA[<p>С декабря прошлого года работаю над парой проектов, которые идут рука об руку. Про первую вкратце писал в итогах прошлого года. Про вторую не говорил, потому что показать было нечего. Теперь вот есть — <a href="https://truenrth.app">TrueNorth</a></p>

<p><img src="https://cdn.denisfl.ru/uploads/20260118_132929_a4d078.webp" alt="20260118_132929_a4d078.webp" title="TrueNorth Dashboard"></p>

<h4>О чем вообще речь?</h4>

<p>Это инструмент для таких же, как я — фрилансеров, контракторов, тех, кто работает над разными проектами и любит осознанно подходить к своей работе.</p>

<p>Тут стоит уточнить, что я считаю работой, проектами и осознанным подходом. Наверняка я скажу очевидные и само собой разумеющиеся вещи, но всё же. Понимайте это всё в общем смысле.</p>

<p>Любая деятельность — это <em>работа</em>. Возможно, вы получаете за неё нематериальные блага, но даже если вы увлечённо и с постоянной периодичностью бьёте палкой по луже, то можете считать это работой.</p>

<p><em>Проектом</em> можно считать не только то, что приходит от вашего менеджера в виде описания и задач. Если вы что-то учите, готовитесь к поездке или строите дом, можете также считать это проектом.</p>

<p>Ну и в конце концов <em>осознанность</em>. Я предполагаю, что вы отдаёте себе отчёт в том, что делаете, и имеете некое представление о целях, задачах и потенциальной точке завершения проекта.</p>

<p>Иными словами, даже если вы бьёте палкой по луже, вы совершаете эту работу в рамках некоего проекта и понимаете, зачем вы это делаете.</p>

<p>Ну так вот, в череде дел очень сложно держать фокус на разных проектах. Кажется, что вот делаешь что-то, и дела вроде двигаются вперёд, но понять ценность нельзя. Опишу пару примеров.</p>

<p>Начиная искать работу, я стал записывать то, что сделал за сегодня, чтобы спустя месяц не скатиться в состояние тоски и уныния: «я ничего не делаю, буду прокрастинировать».</p>

<p>Работая над бесплатными (или условно бесплатными) проектами, я также стараюсь вести учёт задач и времени. Что-то в меньшей степени, что-то в большей. Но важно понимать объём проделанной работы, сколько сил и времени вложено.</p>

<p>Учтённое время можно конвертировать в деньги — заработанные или незаработанные. Можно прикинуть ценность дел, проектов, затраченных сил и времени. За всю свою жизнь я успел поработать во множестве проектов. И очень часто мне приходилось считать своё время и выставлять счета на основе фактических трудозатрат. Я пробовал разные инструменты. Был Toggl, Harvest, ещё что-то, о чём успел забыть. Но в результате я перенёс опыт использования этих инструментов на собственное решение, которое воплотилось в <a href="https://truenrth.app">TrueNorth</a>.</p>

<p>Для чего этот сервис? Чтобы осознанно подходить к ведению своих проектов. С помощью учёта времени вы можете видеть объём вложенных усилий. С помощью отслеживания расходов вы можете видеть ценность своей деятельности.</p>

<p>Следуя идее «делайте продукт, которым будете пользоваться сами», я разработал решение для себя. Насколько оно подходит остальным — покажет время. Именно поэтому я пишу, предлагая вам попробовать и дать обратную связь. Пока всё бесплатно, но с регистрацией.</p>

<p>Что даёт система? Она позволит вам видеть затраченное время на работу, которой вы занимаетесь. Если вы работаете над несколькими проектами, вы увидите, где и откуда приходит больше денег, а где вы, наоборот, теряете. А ещё это простой способ увидеть, сколько времени вы действительно занимаетесь какой-то деятельностью. Сделает ли этот сервис вас продуктивнее? Однозначно нет. Ни один сервис не сделает вас продуктивным, пока вы сами этого не захотите. Но <a href="https://truenrth.app">TrueNorth</a> может показать вам те реальные цифры, которые побудят вас к размышлениям.</p>

<p>В общем, попробовать стоит. Возможно, статистика сделает вам больно. Но также возможно, что это поможет вам осознать те пробелы, которые вы можете закрыть. В этом и заключается осознанность, правда?</p>
]]>
      </description>
      <pubDate>Sun, 18 Jan 2026 13:30:22 +0000</pubDate>
      <link>https://denisfl.ru/notes/112</link>
      <guid>https://denisfl.ru/notes/112</guid>
    </item>
    <item>
      <title>Итоги 2025-го года</title>
      <description>
        <![CDATA[<p>Добавим к итогам в копилку итогов ещё один год. <a href="https://denisfl.ru/notes/73">Об итогах 2024</a> можно почитать по ссылке.</p>

<p>Как обычно, мне изначально казалось, что тут и говорить не о чем. Пока не начал разматывать клубок воспоминаний.</p>

<h3>Про бег</h3>

<p>В этом году я бегал. Не так много, как в прошлом, но всё же.</p>

<p>— <a href="https://denisfl.ru/notes/88">Участвовал в благотворительном забеге в Паличе</a>
— <a href="https://denisfl.ru/notes/92">Сбегал почти марафон в Иванице</a>
— <a href="https://denisfl.ru/notes/95">Был на Дрине</a>
— <a href="https://denisfl.ru/notes/96">Участвовал в ночном марафоне по городу</a>
— А ещё <a href="https://denisfl.ru/notes/99">сбегал ночной трейл на Фрушке</a>
— Ещё была <a href="https://denisfl.ru/notes/103">Белградская 10-ка</a>
— И ночной трейл на Авале, который мы скорее прошли, чем пробежали, с сыном.</p>

<h3>Личные проекты</h3>

<p>— Летом сделал календари.</p>

<p><img src="https://cdn.denisfl.ru/uploads/20251231_142101_633c7a.webp" alt="20251231_142101_633c7a.webp"></p>

<p>Идея так зашла местной типографии, что они даже выпустили свою версию по моим макетам — до сих пор улыбаюсь, вспоминая это. Но главное не в этом. Часть календарей я продал, часть просто раздаю.</p>

<p>В каждом месяце — фотография, которую я сделал именно в тот период, когда она и должна быть: январь — из январского дня, июль — из июльского, и так далее. Получился такой маленький визуальный дневник года.</p>

<p>— Осенью запустил <a href="https://syn-co.me/">syn-co.me</a>, который помогает координировать работу команды в разных часовых поясах. Писал о нём вот тут — <a href="https://denisfl.ru/notes/109">Координатор по часовым поясам</a>.</p>

<p>— Почти запустил, но ещё не совсем, <a href="https://strata-app-ar2.pages.dev/">STRATA</a>. Проект пока в бете. Всё работает, но домен я ещё не покупал, и мелкие огрехи вроде оформления страницы «О проекте» требуют полировки.</p>

<p>Суть проекта — посмотреть на то, как тратится ваше личное время. Без давления, без громкого «будь продуктивнее, выше, сильнее». Просто честный взгляд на то, куда уходит день. В основе лежит методология PARA, точнее её часть — <code>areas</code>. День можно разбить на повторяющиеся действия, посчитать их и увидеть, из каких слоёв состоит ваш день, неделя, жизнь.</p>

<p>Приходите тестировать <a href="https://strata-app-ar2.pages.dev/">STRATA</a>. Всё работает без регистрации и SMS. Но регистрация позволит хранить данные и пользоваться таймером с любого устройства.</p>

<p><img src="https://cdn.denisfl.ru/uploads/20251231_135936_d8b74e.webp" alt="20251231_135936_d8b74e.webp"></p>

<p>Как обычно, много работал, а к концу года стал открыт к новым предложениям, возможностям и вызовам 😁.</p>

<h3>Про увлечения</h3>

<p>Много писал в блокнотик и иногда рисовал.</p>

<p><img src="https://cdn.denisfl.ru/uploads/20251231_140435_122af6.webp" alt="20251231_140435_122af6.webp"></p>

<p>Про блокнот хочу сказать отдельно. В этом году я избавился почти ото всех электронных таск-трекеров и систем заметок — и заменил всё бумагой. За полгода исписал один блокнот и начал второй. Ещё вспомнил о своей любви к перьевым ручкам. Пользовался ими ещё в детстве: в старших классах у меня была перьевая ручка, которой я писал постоянно.</p>

<p>Сейчас у меня появился небольшой зоопарк ручек и чернил. Рассказ о них, возможно, потянет на отдельный пост.</p>

<p>Ещё в этом году удалось перевезти гитару. Спасибо всем причастным — мы не виделись с этой крошкой почти три года.</p>

<hr>

<p>Год снова получился насыщенным. Были и сложности, и радости, но главное — движение вперёд. Впереди новый сезон, новые старты и новые вызовы.</p>

<p>Друзья, с наступающим вас 🎄 Спасибо, что были рядом весь этот год — на забегах, в путешествиях, в комментариях и личных сообщениях. Каждая встреча, каждый разговор делали этот год особенным. Пусть в новом году у каждого из вас будет больше поводов для улыбок, интересных маршрутов и классных достижений. До встречи в 2026-м! ✨</p>
]]>
      </description>
      <pubDate>Wed, 31 Dec 2025 14:17:03 +0000</pubDate>
      <link>https://denisfl.ru/notes/111</link>
      <guid>https://denisfl.ru/notes/111</guid>
    </item>
    <item>
      <title>Что не так с совеременной почтой?</title>
      <description>
        <![CDATA[<p>Почта давно перестала быть простым (и возможно удобным) инструментом. В череде изменений интерфейса в Gmail, в чехарде перепрыгиваний с одной почты на другую, я перестал доверять почтовому сервису.</p>

<p>Даже если сервис предоставляет возможность подключения собственного домена, на сегодняшний день этого недостаточно.</p>

<p>Я отказался от почты Gmail примерно четыре года назад. Переехал на Proton, в надежде, что сервис будет развиваться вглубь. Но спустя два года пришел к выводу, что использовать Proton все еще неудобно. Пришлось переехать на FastMail. В результате, вместо одного аккаунта Gmail у меня три почты, и мне все еще приходится периодически проверять их. Миграция с одного ящика на другой — это не про то, чтобы просто перетащить почтовые рассылки.</p>

<p>На почту завязано огромное количество сервисов. Даже если просто изменить доменное имя, то в старом аккаунте могут остаться важные данные. А может быть, и не останутся. Например, тот же Proton дает лишь 1 Гб бесплатного хранилища. Так что при переезде с него мне пришлось просто удалить 5 Гб данных. Как бы я ни старался все сохранить, я уже столкнулся с пробелами в истории переписки.</p>

<p>Если честно, я считаю свое решение использовать Proton большой ошибкой, и теперь мне жалко исчезнувших данных.</p>

<p>Почта сейчас как ID-карточка или номер телефона. Это настолько важная вещь, которую часто уже и не хочется менять, потому что затраты на переезд — очень высоки из-за риска потери данных (будь контакт, сохраненное или даже еще неполученное письмо).</p>

<p>Я так же искренне верю, что сейчас уже не нужна просто еще одна почта. Нужен удобный сервис, вмещающий много смежных функций. Одна из самых важных функций, которая должна быть интегрирована в почту — календарь. Планирование — неотъемлемая часть жизни. Именно поэтому календарь и почта должны идти рука об руку. Большинство сервисов поддерживают синхронизацию с Google-календарем. Но стоит вам использовать иное решение, то события начинают теряться. Иной раз, создавая событие на полгода вперед, я ловлю себя на мысли о том, что пытаюсь понять где лучше создать это событие, чтобы вот уже точно не пропустить: в календаре Google, на MacOS, в FastMail или планировщике Singularity? И знаете, для особо важных событий я создаю дубликаты. Это ужасно, но вот она реальность.</p>

<p>Теперь про письма. Когда-то давным-давно Google экспериментировал с Inbox. Я считаю, что это был один из очень успешных проектов, просто пользователи в то время не были готовы к такому подходу. Однако я считаю, что почтовые сообщения действительно стоит рассматривать как своего рода задачи. Их можно писать самому себе, формировать проекты. А если мы говорим о рабочих письмах, то в большинстве своем все письма можно рассматривать как сущности различных проектов.</p>

<p>Добавим сюда же систему напоминаний и заметки. И вот у нас получилась не просто сервис по отправке сообщений, а мощный гибкий инструмент, который помогает управлять и организовывать всю жизнь.</p>

<p><em>Примечание</em>: У этой заметки недоформулирована мысль, но я решил опубликовать ее как есть.</p>
]]>
      </description>
      <pubDate>Tue, 09 Dec 2025 11:45:33 +0000</pubDate>
      <link>https://denisfl.ru/notes/110</link>
      <guid>https://denisfl.ru/notes/110</guid>
    </item>
  </channel>
</rss>
