<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>HMDW/me</title>
  <icon>https://www.gravatar.com/avatar/1967ff3ffad0520297a7744cba472788</icon>
  
  <link href="https://hmdw.me/atom.xml" rel="self"/>
  
  <link href="https://hmdw.me/"/>
  <updated>2026-03-26T08:54:03.688Z</updated>
  <id>https://hmdw.me/</id>
  
  <author>
    <name>Rail</name>
    <email>contact@hmdw.me</email>
  </author>
  
  <generator uri="https://hexo.io/">Hexo</generator>
  
  <entry>
    <title>Hex Tool</title>
    <link href="https://hmdw.me/hex-tool/"/>
    <id>https://hmdw.me/hex-tool/</id>
    <published>2026-01-14T16:45:40.000Z</published>
    <updated>2026-03-26T08:54:03.688Z</updated>
    
    <content type="html"><![CDATA[<p>Всем привет!</p><p>Вспомнил что когда-то давно я задумывался о GUI для статик-генератора Hexo. Всем меня этот генератор устраивает, но с локальной админкой было бы удобнее.</p><p>Я даже пробовал какие-то инструменты, но тогда они мне не понравились. Речи о том чтобы написать свое решение даже не шло так как это могло вылиться в целый месяц работы.</p><p>Но в век AI можно все довольно быстро навайбкодить. Поэтому встречайте - <strong>Hex Tool</strong>!</p><span id="more"></span><p><img src="/images/hex-tool-screen.jpg" alt="hex-tool-screen.jpg"></p><p>Чтобы задача была интереснее я решил попробовать новые современные технологии - Tauri и Svelte.</p><p>В итоге получилось кроссплатформенное приложение обладающее плюсами Electron, но при этом с довольно маленьким размером бинарника. Версия под macOS весит всего лишь 11 мегабайт.</p><p>Бэкенд <del>написан</del> навайбкожен на Tauri и Rust, фронтенд на Svelte и Tailwind.</p><blockquote><p>Да, это только ранняя версия и она поддерживает только конкретные Frontmatter-теги из блога HMDW.me, но если будет время я подумаю над более универсальным решением.</p></blockquote><p>Репозиторий проекта:<br><a href="https://github.com/rhamdeew/hex-tool">https://github.com/rhamdeew/hex-tool</a></p><h3 id="Подробности-разработки"><a href="#Подробности-разработки" class="headerlink" title="Подробности разработки"></a>Подробности разработки</h3><p>Первым делом я создал пустую директорию, запустил Claude Code с установленным в него Super Claude Framework и запустил скилл <code>/sc:brainstorm</code> с кратким описанием пожеланий по проекту.</p><p>Клод мне задал несколько уточняющих вопросов и сгенерировал спецификацию вместе с оценкой сроков разработки в 4-6 недель. Напомню что это было вчера 😁</p><p>Вот спека: <a href="https://github.com/rhamdeew/hex-tool/blob/master/SPECIFICATION.md">https://github.com/rhamdeew/hex-tool/blob/master/SPECIFICATION.md</a></p><p>Затем я запустил разработку с Sonnet 4.5. Нужно сказать что 5-часовые лимиты на тарифе Pro довольно быстро закончились и я переключился на GLM 4.7 запустив его в Claude Code.</p><p>Приложение довольно скоро начало обретать вид чего-то рабочего, но содержало кучу багов которые постепенно чинились агентами.</p><p>Позже я еще раз запустил сессию с Sonnet 4.5, еще одну сессию с GLM 4.7 и уже в финале все допилил при помощи Codex с GPT 5.2.</p><p>Не то что бы нужен был именно такой порядок, но просто так получилось 🙂</p><p>В целом можно сказать что приложение было навайбкожено в фоновом режиме. Изредка я запускал тестовый билд, находил новые баги и отправлял фидбек агенту.</p><p>Приятно конечно скачать dmg со своей программой из раздела Releases в GitHub-репозитории и установить.</p><p>Честно скажу что из-за отсутствия сертификатов макось поместила аппку в карантин и для того чтобы её запустить пришлось еще выполнить команду:</p><p><code>xattr -dr com.apple.quarantine &quot;/Applications/Hex Tool.app”</code></p><p>В итоге все заработало. Такой вот новый мир разработки 🙂</p>]]></content>
    
    
    <summary type="html">GUI для Hexo на Rust</summary>
    
    
    
    
    <category term="tech" scheme="https://hmdw.me/tags/tech/"/>
    
  </entry>
  
  <entry>
    <title>Выделенка</title>
    <link href="https://hmdw.me/ethernet/"/>
    <id>https://hmdw.me/ethernet/</id>
    <published>2025-10-08T18:10:22.000Z</published>
    <updated>2026-03-26T08:54:03.687Z</updated>
    
    <content type="html"><![CDATA[<p>Привет! Сегодня у нас снова история о днях давно прошедших. Речь пойдет о конкретном времени и конкретном месте.</p><span id="more"></span><p><em>2006 год, город Ульяновск, район Дальнее Засвияжье.</em></p><p>В начале нулевых самым распространенным способом подключения к интернету был dial up. Затем в тех домах где была относительно новая телефонная сеть появилась возможность подключения по ADSL. По сути это такой же диалап, но со скоростью подключения в 3-4 раза выше и возможностью параллельного использования домашнего телефона. Скорость подключения в этом случая падала, но хотя бы телефон не был вечно занят.</p><p>В целом само существование возможности выйти в сеть уже было чем-то невероятным, но все же для учебы™ медленный и дорогой интернет подходил не очень. Картинки мучительно долго загружались сверху вниз, а об онлайн-играх можно было только мечтать.</p><h3 id="Выделенка-тариф-“Почтовый”"><a href="#Выделенка-тариф-“Почтовый”" class="headerlink" title="Выделенка, тариф “Почтовый”"></a>Выделенка, тариф “Почтовый”</h3><p>И вот где-то в 2005-2006 годах в Ульяновске появился провайдер интернета по “выделенной линии”. В квартиру проводился ethernet-кабель и подключение было постоянным, на высокой скорости и без занятого телефона.</p><p>Несмотря на все эти плюсы интернет все еще оставался очень дорогим и объем трафика по-тарифу можно было с легкостью потратить менее чем за час.</p><p><img src="/images/ethernet/ethernet_5.jpg"></p><p><em>VIP мог скачать из интернета чуть больше гигабайта, не говоря уж о боссе с жалкими 780 мегабайт.</em></p><p>И какой же был самый популярный тариф, спросит дорогой читатель. И я отвечу - ну конечно же “Почтовый”. Невероятные 35 мегабайт трафика в месяц за 150 рублей!</p><p>При этом я думаю что большинство абонентов не имели на то время даже электронного почтового ящика 😁</p><p>Но при этом очень многие хотели стать абонентами данного провайдера. Так в чем же была причина? Дело в том что все абоненты по сути подключались в огромную локальную сеть с безлимитным трафиком внутри сети. Скорость была ограничена только возможностями оборудования!</p><p>Платим довольно ощутимые на то время 750 рублей за подключение и затем по 150 рублей каждый месяц.<br>И в итоге имеем жалкие 35 мегабайт трафика на скорости 256 кбит&#x2F;сек в настоящий интернет (тариф “Почтовый”) и невероятные 100 мбит&#x2F;сек в локальную сеть с несколькими тысячами пользователей!</p><p>Провайдер кстати любезно предоставлял кнопку отключения доступа в интернет прямо в личном кабинете пользователя. Поэтому за перерасход трафика можно было не бояться. Насколько я помню у меня даже оставались не израсходованными какие-то мегабайты каждый месяц. Наверное потому что я ходил в интернет с отключенными картинками и вручную прогружал только нужные 😁</p><h3 id="Локальная-сеть"><a href="#Локальная-сеть" class="headerlink" title="Локальная сеть"></a>Локальная сеть</h3><h4 id="IRC"><a href="#IRC" class="headerlink" title="IRC"></a>IRC</h4><p>Помню что изначально доступными ресурсами были:</p><ul><li>Форум провайдера  </li><li>Публичный FTP-сервер провайдера  </li><li>Доступ в IRC-сеть WeNet с заблокированной возможностью отправки файлов</li></ul><p>В основном пользователи тусовались в IRC на официальном канале провайдера <code>#svnet</code></p><p>В том чате происходило многое - общение, знакомства, разборки, анонсы тематических IRC-каналов и еще куча всего интересного. Самый популярный клиент под Windows назывался mIRC, в простонародье “мирка”.<br>Этот клиент поддерживал встроенный скриптовый язык позволяющий добавлять разные кастомизации. В итоге пользовательские интерфейсы выглядели достаточно пестро и достаточно всрато, но такова была мода.  </p><p><img src="/images/ethernet/ethernet_3.jpg"></p><p>Там была возможности писать в личку, но только в случае если пользователь был в сети. </p><blockquote><p>Уголок душнилы. Кстати говоря IRC и сейчас довольно популярен… среди ботоводов. Благодаря простоте протокола его часто выбирают для создания C&amp;C серверов. Работает это так - в чате сидят боты и ждут команды от владельца ботнета.</p></blockquote><p>Интересный случай. Однажды я даже был приглашен во временный канал для разборок с ребятами с соседнего района. Причиной тому послужил конфликт моего приятеля с другим пользователем в общем чате. Для экономии времени стрелку забили прямо в IRC. </p><p>21 век на дворе, технологии!</p><p>Кстати, главной особенностью локалки было то что каждому абоненту присваивался свой внутренний ip и каждой группе домов соответствовала определенная подсеть - локацию пользователя можно было реально вычислить по IP в точностью в пределах 2-3 домов.<br>Поэтому прежде чем нахамить кому-то в сети сперва нужно было проверить его IP. Удобно 🙂</p><p><img src="/images/ethernet/ethernet_12.jpg"></p><h4 id="StrongDC"><a href="#StrongDC" class="headerlink" title="StrongDC"></a>StrongDC</h4><p><img src="/images/ethernet/ethernet_6.jpg"></p><p>Также в сети был доступ в файлообменную сеть DirectConnect. Самым популярным клиентом для этой сети был StrongDC++ и по названию этой программы сетку стали называть просто “стронг”.</p><p>Главной особенностью сети было то что в настройках клиента можно было выбрать какими файлами ты хочешь делиться с другими пользователями. Например это могла быть папка с фильмами на компьютере.</p><p>После подключения в интерфейсе программы появлялся список клиентов которые в данный момент онлайн. Напротив каждого ника было указано сколько гигабайт данных он расшарил. Был глобальный поиск по файлам и возможность открыть “шары” конкретного пользователя.<br>Стоит ли говорить что некоторые пользователи по ошибке могли пошарить к примеру весь диск C на своем компьютере. </p><p><img src="/images/ethernet/ethernet_10.jpg"><br><em>Сколько я ни пытался, но файлы крипто кошельков не находил. Наверное дело в том что их еще не придумали.</em></p><h4 id="Хакинг"><a href="#Хакинг" class="headerlink" title="Хакинг"></a>Хакинг</h4><p>Так как у большинства пользователей компьютеры были подключены напрямую в сеть и на компьютерах не были установлены фаерволы то это открывало большой простор для разного рода экспериментов.</p><p>К примеру при помощи сканера портов в сети легко находились запущенные экземпляры Radmin с дефолтными паролями.</p><p><img src="/images/ethernet/ethernet_9.png"></p><h4 id="Игры-и-прочие-развлечения"><a href="#Игры-и-прочие-развлечения" class="headerlink" title="Игры и прочие развлечения"></a>Игры и прочие развлечения</h4><p>Затем постепенно начали запускаться сервисы от пользователей. Если не ошибаюсь началось все с серверов Counter-Strike доступных 24&#x2F;7. Затем появился локальный сервер WOW. Я в вовку не играл, но по отзывам друзей главной фичей того сервера было то что админы могли вдруг внезапно сбросить весь прогресс игроков 😁</p><p>Было даже время когда пользователи скидывались админу CS на апгрейд компа.</p><p><img src="/images/ethernet/ethernet_7.jpg"><br><em>Вместо тысячи слов</em></p><p>В целом в локальной сети было практически все необходимое для юного пользователя - онлайн игры, свежие фильмы, чаты и прочее. </p><p>Большой интернет в то время был нужен разве что для проверки почты (тариф “Почтовый” же, ну ё-моё) или для того чтобы что-то загуглить.</p><p>Спустя полгода после того как я подключился провайдер объявил акцию “подключение за 10 рублей”. В сеть повалили новые пользователи. Так как на первых порах кроме увеличенной нагрузки они ничего не приносили их стали презрительно называть “десятирублевщиками”.</p><p><img src="/images/ethernet/ethernet_2.jpg"></p><h4 id="Волга-река-разделяет-на-два-берега"><a href="#Волга-река-разделяет-на-два-берега" class="headerlink" title="Волга река разделяет на два берега"></a>Волга река разделяет на два берега</h4><p><img src="/images/ethernet/ethernet_11.jpg"></p><p>Локальная сеть в дальнем засвияжье была довольно большая. Но на другом конце города в заволжье была еще одна локальная сеть от той же компании СКТВ. Из-за того что провайдер пришел туда сильно раньше сеть была в разы больше.</p><p>В планах у провайдера было объединение двух сетей в одну, но сложность добавляла широченная река Волга разделяющая две части города.</p><p>В итоге спустя где-то полгода сети наконец-то объединили!</p><p>Помню как был приятно удивлен увидев в StrongDC++ объем общих расшаренных файлов в 10+ терабайт вместо прошлых 1.5! Естественно я первым же делом побежал осматривать “шары” пользователей с незнакомыми никами.</p><p>У локалки из НГ кстати был свой форум - “<a href="http://forum.newtown.ru/">forum.newtown.ru</a>”. Там было сильно больше интересного контента. Особенно активным почему-то был раздел с обсуждением Hip-Hop.</p><p><img src="/images/ethernet/ethernet_4.jpg"></p><p>Там даже проводились рэп-баттлы онлайн!</p><blockquote><p>Вспомнился один трек присланный местным <del>школьником</del> баттл-репером. Рэп он читал довольно тихо, затем на фоне послышалось как его зовет мать, а в треке прозвучало еще тише - “… вот мамка в комнату зашла…”</p></blockquote><p>В этой огромной объединенной сети было все необходимое. Свежие игры и софт скачивались либо с локальных торрент-трекеров либо с вышеупомянутого DC++.</p><p>Как-то даже был запущен аналог ютуба позволяющий загружать и смотреть видео онлайн. Загруженное видео автоматически конвертировалось в формат flv.<br>Еще вспомнился местный аналог сервиса Blogspot запущенный на базе WordPress 2.</p><p>Также вместо старого доброго IRC челики из Нового города использовали современный iChat (возможно написание неточное) который естественно называли не иначе как “Ычат”. В этом мессенджере были полноценные профили пользователей.</p><p>Помню как открыв профиль одной из пользовательниц увидел там странную ссылку вида <code>https://vkontakte.ru/id00000</code>.</p><p>Тогда я подумал что это что-то в виде визитной карточки, но зайдя на сайт увидел что-то совершенно новое - а именно социальную сеть! Зарегистрировавшись там я нашел там всего одного знакомого человека - это была моя одноклассница.</p><p><img src="/images/ethernet/ethernet_8.png"></p><h3 id="Конец-истории"><a href="#Конец-истории" class="headerlink" title="Конец истории"></a>Конец истории</h3><p>Все это великолепие было актуально еще пару лет, но появление безлимитных тарифов доступа в интернет сделало свое дело - пользователи постепенно выбрались в большой интернет и забросили локалку.</p><p>Место компьютеров с воткнутыми в них напрямую провайдерских ethernet-кабелей заняли Wi-Fi-роутеры, а общение перешло в глобальные соцсети и мессенджеры.</p><p>Это было хорошее время, но как и все хорошее оно когда-то закончилось 🙂</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;Привет! Сегодня у нас снова история о днях давно прошедших. Речь пойдет о конкретном времени и конкретном месте.&lt;/p&gt;</summary>
    
    
    
    
    <category term="ithink" scheme="https://hmdw.me/tags/ithink/"/>
    
  </entry>
  
  <entry>
    <title>Вайб-кодинг</title>
    <link href="https://hmdw.me/vibe-code-1/"/>
    <id>https://hmdw.me/vibe-code-1/</id>
    <published>2025-06-06T00:01:45.000Z</published>
    <updated>2026-03-26T08:54:03.694Z</updated>
    
    <content type="html"><![CDATA[<p>Привет! Сегодня у нас короткий пост про вайб-кодинг.</p><p>Итак, я уже довольно давно использую ИИ в работе и люблю в свободное время вайбкодить какие-нибудь утилиты для себя. В этой статье речь пойдет о написании программы для решения пазла-головоломки.</p><p>Если вы еще здесь то начнем 🙂</p><span id="more"></span><h3 id="Проблема-несуществующая"><a href="#Проблема-несуществующая" class="headerlink" title="Проблема (несуществующая)"></a>Проблема (несуществующая)</h3><p><img src="/images/puzzle_solver/idiocracy_meme.jpg"></p><p>У нас в офисе есть универсальный пазл с головоломкой которую можно решать каждый день 365 дней в году. Он находится на кухне и помогает скоротать время в момент чаепития.</p><p>Часто бывает что чай уже закончился, <del>а рабочие задачи нет</del> а пазл так и не сложился. В один из таких моментов я задумался о том решить проблему программным способом.</p><p>Естественно без написания кода вручную и с максимально комфортным подходом.</p><p>Выглядит всё как приключение на 5 минут. Ну что, погнали! 🏃‍♂️‍➡️</p><h3 id="Попытка-решения-№1"><a href="#Попытка-решения-№1" class="headerlink" title="Попытка решения №1"></a>Попытка решения №1</h3><blockquote><p>В основом для вайбкодинга я выбираю Go так как программы компилируются в бинарник поддерживаемый на всех популярных платформах. Также из плюсов хочу отметить что большинство ошибок проявляется на этапе компилирования программы, а тулинг поддерживает тесты и автоматическое форматирование из коробки.</p><p>Этот язык мне очень нравится хотя на нем я самостоятельно написал наверное менее сотни строк.</p><p>Но в этот раз я почему-то решил начать с Python.</p></blockquote><p>Первым делом я сфотографировал пазл со всеми его деталями:</p><p><img src="/images/puzzle_solver/puzzle.jpg" alt="Пазл"></p><p>Открыл Cursor, выбрал в чате claude-4-sonnet, приложил туда фотографию и написал вот такой промт:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">I have a challenge to fill this board with &quot;bricks&quot; and make cells related to current date unfilled. </span><br><span class="line">For example today it should be filled excluding 26 and &quot;Май&quot;</span><br><span class="line">Please write a Python 3 script that will provide schema for every date</span><br></pre></td></tr></table></figure><p>Сразу скажу что промт неоптимальный и неправильный.</p><p>Тем не менее Claude честно попытался решить эту задачу и сгенерировал скрипт который он назвал Calendar Puzzle Solver.</p><p>В первой версии скрипта он накосячил с фигурками и просто заполнял поле фигурами произвольных форм.</p><p>На что резонно получил вот такой комментарий:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Please fix your solution. You should use only provided limited bricks set.</span><br></pre></td></tr></table></figure><p>Получив следующий результат я понял что Claude неверно интерпретировал картинку и неправильно определил доступный сет фигурок.</p><p>Следующий мой промт был такой, с попыткой в ASCII-арт 😁:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line">Here is a set of bricks:</span><br><span class="line">* L piece: 5 cells, equal lenghts</span><br><span class="line">* Long L piece - 4 cells line + 1 cell</span><br><span class="line">* 2x3 piece (6 cells)</span><br><span class="line">* 2x3 piece without one corner cell (5 cells)</span><br><span class="line">* 2x3 piece without one central cell (5 cells)</span><br><span class="line">* Z piece (5 cells)</span><br><span class="line">* AAA</span><br><span class="line">      AA picece (5 cells)</span><br><span class="line">* AAAA</span><br><span class="line">      A    piece (5 cells)</span><br></pre></td></tr></table></figure><p>На этот раз я почему-то получил в качестве решения скрипт который ожидал 44 ячейки притом что их всего лишь 43,</p><p>На то он получил новый промт.</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Please fix program. It expectecs 44 total cells, but board has only 43 cells - 12 for months and 31 for days</span><br></pre></td></tr></table></figure><p>В этот раз я получил скрипт который по заверениям Claude точно должен работать. Я запустил его и не дождался окончания работы скрипта за 5 минут. Очевидно решение нерабочее.</p><p><img src="/images/puzzle_solver/puzzle2.png" alt="Подвисший python-скрипт"></p><p>Так так так, кажется я зашел в тупик. Самое время открыть новый чат.</p><h3 id="Попытка-решения-№2"><a href="#Попытка-решения-№2" class="headerlink" title="Попытка решения №2"></a>Попытка решения №2</h3><p><img src="/images/puzzle_solver/nui.jpg" alt="Ну и не нужно"></p><p>На этом моменте я удалил весь код и написал новый стартовый промт и также приложил картинку с пазлом.</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br></pre></td><td class="code"><pre><span class="line">I have a challenge to fill this board with &quot;bricks&quot; and make cells related to current date unfilled. For example today it should be filled excluding 26 and &quot;Май&quot;</span><br><span class="line">Please write a Python 3 script that will provide schema for every date</span><br><span class="line">Board has 43 cells - 12 for months, 31 for days</span><br><span class="line"></span><br><span class="line">Bricks:</span><br><span class="line"></span><br><span class="line">A</span><br><span class="line">A</span><br><span class="line">AAA - 5 cells</span><br><span class="line"></span><br><span class="line">A</span><br><span class="line">A</span><br><span class="line">A</span><br><span class="line">AA - 5 cells</span><br><span class="line"></span><br><span class="line">AA  </span><br><span class="line">AAA - 5 cells</span><br><span class="line"></span><br><span class="line">AAA</span><br><span class="line">AAA - 6 cells</span><br><span class="line"></span><br><span class="line">A A</span><br><span class="line">AAA - 5 cells</span><br><span class="line"></span><br><span class="line">AA</span><br><span class="line"> A</span><br><span class="line"> AA - 5 cells</span><br><span class="line"></span><br><span class="line">A</span><br><span class="line">A</span><br><span class="line">AA</span><br><span class="line">A    - 5 cells</span><br><span class="line"></span><br><span class="line">A</span><br><span class="line">A</span><br><span class="line">AA</span><br><span class="line"> A   - 5 cells</span><br></pre></td></tr></table></figure><p>На этот раз клод меня почти понял и после первого решения пришлось подправить только одну фигуру.</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">Please fix Piece 6</span><br><span class="line">            # Piece 6: Z-shape (5 cells)</span><br><span class="line">            # AA</span><br><span class="line">            #  A</span><br><span class="line">            #  AA</span><br><span class="line">            [(0, 0), (0, 1), (1, 1), (2, 1), (2, 2)],</span><br></pre></td></tr></table></figure><p>Насколько я помню эта версия скрипта также работала очень долго и не смогла решить задачу. </p><p>Поэтому я решил что пора немного подебажить.</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">Please print configuration of board on script run. I want to be sure that board has correct dimensions</span><br><span class="line"></span><br></pre></td></tr></table></figure><p>И еще немного</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">And please also show bricks</span><br></pre></td></tr></table></figure><p>Также добавить статистику</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">And please also count time that spent for finding solution</span><br></pre></td></tr></table></figure><p>И поддержку аргументов</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">How to run script for another date?</span><br></pre></td></tr></table></figure><p>В результате я получил довольно информативный скрипт который тем не менее работал очень долго и не решал мою задачу 😁</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br></pre></td><td class="code"><pre><span class="line">python ./main.py</span><br><span class="line">BOARD CONFIGURATION:</span><br><span class="line">==================================================</span><br><span class="line">       0   1   2   3   4   5   6</span><br><span class="line">0: Янв Фев Март Апр Май Июнь   . </span><br><span class="line">1: Июль Авг Сент Окт Нояб Дек   . </span><br><span class="line">2:   1   2   3   4   5   6   7 </span><br><span class="line">3:   8   9  10  11  12  13  14 </span><br><span class="line">4:  15  16  17  18  19  20  21 </span><br><span class="line">5:  22  23  24  25  26  27  28 </span><br><span class="line">6:  29  30  31   .   .   .   . </span><br><span class="line"></span><br><span class="line">Board Statistics:</span><br><span class="line">- Total grid size: 7x7 = 49 positions</span><br><span class="line">- Valid calendar cells: 43</span><br><span class="line">- Month cells: 12</span><br><span class="line">- Day cells: 31</span><br><span class="line">- Empty/Invalid positions: 6</span><br><span class="line">- Expected filled cells per solution: 41 (total - current date)</span><br><span class="line"></span><br><span class="line">BRICK PIECES CONFIGURATION:</span><br><span class="line">==================================================</span><br><span class="line"></span><br><span class="line">Piece 1: L-shape (5 cells):</span><br><span class="line">  A . .</span><br><span class="line">  A . .</span><br><span class="line">  A A A</span><br><span class="line">  Coordinates: [(0, 0), (1, 0), (2, 0), (2, 1), (2, 2)]</span><br><span class="line"></span><br><span class="line">Piece 2: Long L (5 cells):</span><br><span class="line">  A .</span><br><span class="line">  A .</span><br><span class="line">  A .</span><br><span class="line">  A A</span><br><span class="line">  Coordinates: [(0, 0), (1, 0), (2, 0), (3, 0), (3, 1)]</span><br><span class="line"></span><br><span class="line">Piece 3: Short L (5 cells):</span><br><span class="line">  A A .</span><br><span class="line">  A A A</span><br><span class="line">  Coordinates: [(0, 0), (0, 1), (1, 0), (1, 1), (1, 2)]</span><br><span class="line"></span><br><span class="line">Piece 4: Rectangle (6 cells):</span><br><span class="line">  A A A</span><br><span class="line">  A A A</span><br><span class="line">  Coordinates: [(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2)]</span><br><span class="line"></span><br><span class="line">Piece 5: T-shape (5 cells):</span><br><span class="line">  A . A</span><br><span class="line">  A A A</span><br><span class="line">  Coordinates: [(0, 0), (0, 2), (1, 0), (1, 1), (1, 2)]</span><br><span class="line"></span><br><span class="line">Piece 6: Z-shape (5 cells):</span><br><span class="line">  A A .</span><br><span class="line">  . A .</span><br><span class="line">  . A A</span><br><span class="line">  Coordinates: [(0, 0), (0, 1), (1, 1), (2, 1), (2, 2)]</span><br><span class="line"></span><br><span class="line">Piece 7: P-shape (5 cells):</span><br><span class="line">  A .</span><br><span class="line">  A .</span><br><span class="line">  A A</span><br><span class="line">  A .</span><br><span class="line">  Coordinates: [(0, 0), (1, 0), (2, 0), (2, 1), (3, 0)]</span><br><span class="line"></span><br><span class="line">Piece 8: Modified P (5 cells):</span><br><span class="line">  A .</span><br><span class="line">  A .</span><br><span class="line">  A A</span><br><span class="line">  . A</span><br><span class="line">  Coordinates: [(0, 0), (1, 0), (2, 0), (2, 1), (3, 1)]</span><br><span class="line"></span><br><span class="line">Total pieces: 8</span><br><span class="line">Total cells in all pieces: 41</span><br><span class="line">Expected coverage: 41 cells</span><br><span class="line"></span><br><span class="line">==================================================</span><br><span class="line">Using current date: 6 Июнь</span><br><span class="line"></span><br><span class="line">Solving calendar board for: 6 Июнь</span><br><span class="line">Available pieces: 8 pieces</span><br><span class="line">Piece sizes: [5, 5, 5, 6, 5, 5, 5, 5] cells each</span><br></pre></td></tr></table></figure><h3 id="Попытка-решения-3"><a href="#Попытка-решения-3" class="headerlink" title="Попытка решения #3"></a>Попытка решения #3</h3><p><img src="/images/puzzle_solver/thinking.gif"></p><p>На этом этапе я задал себе вопрос - «а зачем тут нужен Python?»</p><p>Итак, срочно переписываем все на Go. В этом случае хотя бы есть шанс дождаться заверешения работы программы 😁</p><p>Тем более с го есть возможность нагрузить все ядра CPU, а не только одно 🤣</p><p>Вставляем в промт последнюю версию полученного скрипта на Python и добавляем такой текст:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Please rewrite this script in go and use parallel calculations</span><br></pre></td></tr></table></figure><p>Запускаем программу и видим результам уже через 11 секунд и 10 млн. попыток, а не спустя вечность как это было с питоном.</p><p>Правда решение не нашлось 💩</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">✗ No solution found for 6 Июнь (took 11.7612 seconds)</span><br><span class="line">Total attempts: 10069962</span><br></pre></td></tr></table></figure><p>Что ж, самое время разьяснить условия мсье Клоду более подробно.</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">Unfortunately it can&#x27;t found solutions. All bricks can be rotated 90 degrees and flipped</span><br><span class="line"></span><br></pre></td></tr></table></figure><p>Ура! Текущее решение работает! Просим клода пофиксить нейминг для фигур и написать README.md.</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Please generate a descriptive README</span><br></pre></td></tr></table></figure><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">Please update names of piece 3, because it is not square, it is cutted rectangle</span><br><span class="line"></span><br><span class="line">And fix name of piece 8 because it&#x27;s not a line</span><br></pre></td></tr></table></figure><p>В итоге получаем рабочую программу которая мнгновенно решает задачу и нагружает все доступные ядра CPU.</p><p><img src="/images/puzzle_solver/puzzle3.png" alt="Оно работает!"></p><p>Здесь цифрами от 1 до 8 у нас помечены фигуры, а <code>x</code> это пустые клетки. </p><p>Судя по скрину программа подобрала решение для сегодняшней головоломки всего лишь за 0.2 секунды и 13 тысяч попыток!</p><p>При этом было задействовано 11 ядер CPU 🚀</p><p>Ну что ж, неплохо! Дальше мы просто инициализируем git-репозиторий и выкатываем наше поделие на GitHub - <a href="https://github.com/rhamdeew/calendar_solver">https://github.com/rhamdeew/calendar_solver</a></p><h3 id="Бонус-вариант"><a href="#Бонус-вариант" class="headerlink" title="Бонус вариант"></a>Бонус вариант</h3><p>CLI-утилита это конечно круто, но недостаточно удобно. Давайте же сделаем Web GUI! </p><p>Причем чтобы было еще интереснее портируем наше решение на WebAssembly!</p><p>На этом моменте я осмелел достаточно чтобы написать промт в духе:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">1. Extract core logic into separate file</span><br><span class="line">2. Create WASM app in `web` directory that re-use logic from p.1</span><br></pre></td></tr></table></figure><p>Claude бодро приступил к работе, но подвис на первом пункте. Далее я пытался давать ему только первую часть задачи, но клод каждый раз зависал пытаясь сгенерировать <code>solver.go</code>.</p><p>Ну что ж, тогда перестаем дружить с клодом и идем к новому приятелю - <code>gemini-2.5-pro</code>!</p><p><img src="/images/puzzle_solver/friendship_end_meme.jpg"></p><p>Новый укороченный промт:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Extract solver logic into `solver.go` file. I want to re-use it.</span><br></pre></td></tr></table></figure><p>Gemini в отличие от Claude прекрасно справился с этой задачей. Логика вынесена в solver.go, аппка прекрасно собирается и работает точно так же 💪</p><p>Теперь попробуем доделать все остальное в одном чате:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Create `web` directory and implement similar solution written on Go but with web GUI using htmlx, tailwind  and WebAssembly</span><br></pre></td></tr></table></figure><p>Тут Gemini начал прекрасно, но потом закопался в названиях файлов и не смог сделать так чтобы все корректно собиралось. </p><p>Понятно, откатываемся 💩</p><blockquote><p>Важный момент - хоть в Cursor и реализована система чекпоинов к которым можно откатываться все же надежнее коммитить каждый шаг. Лишние коммиты потом можно отребейзить, а вот случайно попорченный код восстанавливать не так удобно.</p></blockquote><p>Кстати, похоже что зря я гнал на Claude что он не смог вынести логику из одного файла в другой. </p><p>Такое ощущение что он просто работает сегодня с большими перебоями. Дело не в задаче в общем 🙂</p><p>Делаем шаг назад и просим Gemini чуть поменять структуру файлов</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">I use `solver.go` as a package. Please move it into directory with name that follows Go conventions and best practices.</span><br><span class="line"></span><br><span class="line">Move main.go into `cli` directory</span><br></pre></td></tr></table></figure><p>Итак, гемини отработал и сказал что все прекрасно работает. </p><p>Разбираться в том как теперь собирать приложение мне лень, поэтому спросим это у нашего нового друга.</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">How to build cli app?</span><br></pre></td></tr></table></figure><p>И заодно попросим написать мейкфаил</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">Please generate Makefile with:</span><br><span class="line"></span><br><span class="line">- build_cli</span><br><span class="line">- run_cli</span><br><span class="line"></span><br><span class="line">targets</span><br></pre></td></tr></table></figure><p>Так, вроде бы все хорошо, но кажется чего-то не хватает. Может ТЕСТОВ? 🤔</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Write tests for cli app and add `test_cli` target</span><br></pre></td></tr></table></figure><p>Так, теперь у нас есть код cli-приложения с корректной структурой и даже есть тесты.</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br></pre></td><td class="code"><pre><span class="line">make test_cli</span><br><span class="line">Testing CLI application...</span><br><span class="line">go test -v ./cli</span><br><span class="line">=== RUN   TestGetMonthName</span><br><span class="line">=== RUN   TestGetMonthName/Янв</span><br><span class="line">=== RUN   TestGetMonthName/1</span><br><span class="line">=== RUN   TestGetMonthName/12</span><br><span class="line">=== RUN   TestGetMonthName/янв</span><br><span class="line">=== RUN   TestGetMonthName/март</span><br><span class="line">=== RUN   TestGetMonthName/invalid</span><br><span class="line">=== RUN   TestGetMonthName/13</span><br><span class="line">=== RUN   TestGetMonthName/#00</span><br><span class="line">--- PASS: TestGetMonthName (0.00s)</span><br><span class="line">    --- PASS: TestGetMonthName/Янв (0.00s)</span><br><span class="line">    --- PASS: TestGetMonthName/1 (0.00s)</span><br><span class="line">    --- PASS: TestGetMonthName/12 (0.00s)</span><br><span class="line">    --- PASS: TestGetMonthName/янв (0.00s)</span><br><span class="line">    --- PASS: TestGetMonthName/март (0.00s)</span><br><span class="line">    --- PASS: TestGetMonthName/invalid (0.00s)</span><br><span class="line">    --- PASS: TestGetMonthName/13 (0.00s)</span><br><span class="line">    --- PASS: TestGetMonthName/#00 (0.00s)</span><br><span class="line">=== RUN   TestMainCLI</span><br><span class="line">=== RUN   TestMainCLI/Specific_Date</span><br><span class="line">=== RUN   TestMainCLI/Test_Only</span><br><span class="line">=== RUN   TestMainCLI/Invalid_Month</span><br><span class="line">=== RUN   TestMainCLI/No_args</span><br><span class="line">--- PASS: TestMainCLI (23.72s)</span><br><span class="line">    --- PASS: TestMainCLI/Specific_Date (4.85s)</span><br><span class="line">    --- PASS: TestMainCLI/Test_Only (9.28s)</span><br><span class="line">    --- PASS: TestMainCLI/Invalid_Month (0.00s)</span><br><span class="line">    --- PASS: TestMainCLI/No_args (9.46s)</span><br><span class="line">PASS</span><br><span class="line">ok  puzzle_solver/cli23.887s</span><br></pre></td></tr></table></figure><p><img src="/images/puzzle_solver/kan.jpg"></p><p>Приступаем в генерации web-приложения на WebAssembly.</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">Create `web` directory and implement similar solution written on Go but with web GUI using htmlx, tailwind and WebAssembly</span><br><span class="line"></span><br><span class="line">Use solver/solver.go for core functionality</span><br></pre></td></tr></table></figure><p>Gemini спорил сам с собой то и дело переписывая код, но в итоге родил что-то что может собираться в бинарник и запускать сервер.</p><p>Также я попросил его добавить Makefile со всеми необходимыми целями для сборки и запуска обоих версий приложения.</p><p>Запускаем веб версию:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">make web</span><br></pre></td></tr></table></figure><p>Выглядит красиво!</p><p><img src="/images/puzzle_solver/solver_web_1.png"></p><p>Но работает некорректно:</p><p><img src="/images/puzzle_solver/solver_web_2.png"></p><p>Судя по одинаковому с cli-версией количеству попыток для подбора решение правильное, а вот отображение решения какое-то кривое.</p><p>Снова идем в чат и жалуемся:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Please fix your solution. It displays incorrect board with incorrect block positions, but attempts count similar to cli solution. I think calculations is correct, rendering not correct.</span><br></pre></td></tr></table></figure><p>Gemini снова думает, но рождает почему-то такое же решение 🤔</p><p>Жалуемся еще</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br></pre></td><td class="code"><pre><span class="line">No, your board is incorrect.</span><br><span class="line"></span><br><span class="line">Correct board configuration</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">BOARD CONFIGURATION:</span><br><span class="line">==================================================</span><br><span class="line">       0   1   2   3   4   5   6</span><br><span class="line">0: Янв Фев Март Апр Май Июнь   . </span><br><span class="line">1: Июль Авг Сент Окт Нояб Дек   . </span><br><span class="line">2:   1   2   3   4   5   6   7 </span><br><span class="line">3:   8   9  10  11  12  13  14 </span><br><span class="line">4:  15  16  17  18  19  20  21 </span><br><span class="line">5:  22  23  24  25  26  27  28 </span><br><span class="line">6:  29  30  31   .   .   .   . </span><br><span class="line"></span><br><span class="line"></span><br><span class="line">And correct solution</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">Solution for 6 Июнь:</span><br><span class="line">==============================</span><br><span class="line">1 6 8 8 8 X .</span><br><span class="line">1 6 6 6 8 8 .</span><br><span class="line">1 1 1 6 5 X 5</span><br><span class="line">2 4 4 4 5 5 5</span><br><span class="line">2 4 4 4 3 3 3</span><br><span class="line">2 7 7 7 7 3 3</span><br><span class="line">2 2 7 . . . .</span><br><span class="line"></span><br></pre></td></tr></table></figure><p>Результат:</p><p><img src="/images/puzzle_solver/solver_web_3.png"></p><p>Мне уже практически все нравится, но думаю стоит немного поправить стили.</p><p>Также заодно похвалим Gemini (и впустую израсходуем токены).</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">Thanks! It looks good!</span><br><span class="line"></span><br><span class="line">Pleae make small UI changes:</span><br><span class="line"></span><br><span class="line">1. Display text inside cell with opacity 50%, smaller font size and padding</span><br><span class="line">2. Switch colors for black cells - display white cells with black text</span><br></pre></td></tr></table></figure><p><strong>Новый результат:</strong></p><p><img src="/images/puzzle_solver/solver_web_4.png"></p><p>Все это конечно круто, но я хочу лайв-демо прямо на гитхабе.</p><p>Идем в новый чат.</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">I want to push this repo to GitHub and want to make index.html accessible from web as a live demo. How to do it?</span><br></pre></td></tr></table></figure><p>На что Gemini предлагает вручную копировать билд в <code>docs</code>. Минус вайб 💩</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Is there a way to do it using GitHub Actions? I don&#x27;t want to manually copy every build to `docs` dir</span><br></pre></td></tr></table></figure><p>Gemini сказал что все сделает. Плюс вайб 👍</p><p>На этом этапе почти все заработало, но нужно было еще включить GitHub Pages в настройках репозитория.</p><p><img src="/images/puzzle_solver/github_actions_1.png"><br><img src="/images/puzzle_solver/github_actions_2.png"><br><img src="/images/puzzle_solver/github_actions_3.png"></p><h3 id="Итог"><a href="#Итог" class="headerlink" title="Итог"></a>Итог</h3><p>Потрачено конечно чуть больше чем 5 минут, но результат стоит того 🙂</p><p><img src="/images/puzzle_solver/solver_web_5.png"></p><p><strong>Live demo:</strong> <a href="https://rhamdeew.github.io/calendar_solver/">https://rhamdeew.github.io/calendar_solver/</a></p><p><strong>UPD 12.03.2026:</strong><br>На работе вдруг неожиданно зашел разговор про эту головоломку. В процессе я вспомнил что код брутфорса получился сильно неоптимальный. Захотелось попробовать чуть его улучшить при помощи актуального Sonnet 4.6.</p><p>Пришла пора ознакомиться с алгоритмом:<br><img src="/images/puzzle_solver/cc_1.png" alt="cc_1.png"></p><p>И попросить его немного улучшить:<br><img src="/images/puzzle_solver/cc_2.png" alt="cc_2.png"></p><p>Результат:<br><img src="/images/puzzle_solver/new_result.png" alt="new_result.png"></p><p>Ой! Кажется мы случайно ускорили перебор в 6000 раз 🤣</p><p><strong>UPD 26.03.2026:</strong></p><p>Попросил клода допилить апп до PWA. Теперь появилась возможность установить приложение на смартфон и пользоваться им даже оффлайн.</p><p><img src="/images/puzzle_solver/pwa.jpg" alt="pwa.jpg"></p>]]></content>
    
    
    <summary type="html">&lt;p&gt;Привет! Сегодня у нас короткий пост про вайб-кодинг.&lt;/p&gt;
&lt;p&gt;Итак, я уже довольно давно использую ИИ в работе и люблю в свободное время вайбкодить какие-нибудь утилиты для себя. В этой статье речь пойдет о написании программы для решения пазла-головоломки.&lt;/p&gt;
&lt;p&gt;Если вы еще здесь то начнем 🙂&lt;/p&gt;</summary>
    
    
    
    
    <category term="tech" scheme="https://hmdw.me/tags/tech/"/>
    
  </entry>
  
  <entry>
    <title>Оцифровываем VHS</title>
    <link href="https://hmdw.me/vhs-to-digital/"/>
    <id>https://hmdw.me/vhs-to-digital/</id>
    <published>2025-04-24T18:28:45.000Z</published>
    <updated>2026-03-26T08:54:03.694Z</updated>
    
    <content type="html"><![CDATA[<p>Привет! Думаю я опоздал с этим постом лет на 20. Ну да ладно 🙂</p><p>Эта короткая статья о том как я внезапно вспомнил что на старых VHS есть семейные записи 30-летней давности и вдруг решил их оцифровать.</p><p>Сам процесс оказался довольно простой.</p><span id="more"></span><h3 id="Идея"><a href="#Идея" class="headerlink" title="Идея"></a>Идея</h3><p>Вообще об оцифровке старых видеозаписей я задумывался еще давно когда узнал о существовании такой услуги. Но я все как-то откладывал это дело и честно говоря даже не связывался с сервисом.</p><p>Но вот недавно листая бесконечную ленту предложений WB с разными мультиметрами, портативными сварочными аппаратами и прочими нужными в хозяйстве вещами я задумался - а что если купить плату для видеозахвата и оцифровать старые VHS? 🤔</p><h3 id="Устройство-для-видеозахвата"><a href="#Устройство-для-видеозахвата" class="headerlink" title="Устройство для видеозахвата"></a>Устройство для видеозахвата</h3><p>В итоге за целых 450 рублей на WB было приобретено вот такое устройство.</p><p><img src="/images/vhs_video/4.jpg"></p><p>В комплекте также шел mini-CD с программой под Windows, но мне он не подадобился так как:</p><ul><li>в 2025 году у меня нет CD-ROM 😁</li><li>под рукой нет компьютера с Windows</li></ul><h3 id="Воплощение-идеи"><a href="#Воплощение-идеи" class="headerlink" title="Воплощение идеи"></a>Воплощение идеи</h3><p>Ну что ж, было решено не читать никаких инструкций и подключить все как есть. В качестве программы для видеозахвата я решил использовать OBS Studio которую установил из дефолтного репозитория Ubuntu.</p><p>Подключить видеомагнитофон тоже не было проблемой, но понадобился кабель с тюльпанами типа «папа» с обеих сторон так как на видеомагнитофоне и на выходах из устройства видеозахвата были разъемы «мама».</p><p>В итоге я нашел старый кабель от видеомагнитофона и все подключил - желтый разъем в Video OUT, красный и белый в Audio OUT, а само устройство вставил в USB-разъем на компьютере.</p><p><img src="/images/vhs_video/2.jpg"></p><p>Далее запускаем OBS Studio, в источниках добавляем «Устройство захвата видео» и «Захват входного потока аудио». В настройках обоих источников выбираем наше USB-устройство. У меня оно называется M210…</p><p>Потом вставляем кассету в видеомагнитофон, нажимаем Play и наблюдаем изображение в OBS.</p><blockquote><p>Признаться честно на этом этапе меня сперва ждал облом - первую кассету видак зажевал. Поэтому пришлось скидывать с него крышку и аккуратно вытаскивать кассету. Благо для теста я сперва выбрал кассету с каким-то неинтересным фильмом.</p></blockquote><p>Ну а дальше жмем кнопку «Начать запись» и ждем 3 часа 😁</p><p><strong>Важный момент</strong> - лучше сперва попробовать записать небольшой отрывок в пару десятков секунд и проверить что все корректно записалось. Так у меня сперва записывалось только изображение без звука и пришлось чуть покопаться в настройках аудиоисточника.</p><p>Дальше все прошло нормально и я получил цифровые версии драгоценных видеозаписей которые на видеокассетах уже начали немного портиться.</p><p>Для лучшей атмосферы сфотографировал экран компьютера вместо скриншота (ладно, на самом деле мне просто было лень перекидывать скрин, а телефон вот он, под рукой 😁)</p><p><img src="/images/vhs_video/3.jpg"></p><h3 id="Результат"><a href="#Результат" class="headerlink" title="Результат"></a>Результат</h3><p>В итоге выяснил что в 6 лет я обладал довольно густыми волосами, а потом что-то пошло не так и к 30 годам аэродинамические показатели головы значительно улучшились.</p><p><img src="/images/vhs_video/5.jpg"></p><p>Вывод тут простой - если у вас есть свободный вечер то можно его потратить на то чтобы сохранить раритетные архивные записи. Делать это самому намного интереснее чем везти кассеты какому-то непонятному дядьке</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;Привет! Думаю я опоздал с этим постом лет на 20. Ну да ладно 🙂&lt;/p&gt;
&lt;p&gt;Эта короткая статья о том как я внезапно вспомнил что на старых VHS есть семейные записи 30-летней давности и вдруг решил их оцифровать.&lt;/p&gt;
&lt;p&gt;Сам процесс оказался довольно простой.&lt;/p&gt;</summary>
    
    
    
    
    <category term="tech" scheme="https://hmdw.me/tags/tech/"/>
    
  </entry>
  
  <entry>
    <title>Зимний дрифт</title>
    <link href="https://hmdw.me/winter-drift/"/>
    <id>https://hmdw.me/winter-drift/</id>
    <published>2025-04-08T19:12:31.000Z</published>
    <updated>2026-03-26T08:54:03.695Z</updated>
    
    <content type="html"><![CDATA[<p>Привет! Сегодня я хочу вам рассказать про такой вид автоспорта как зимний дрифт.</p><span id="more"></span><h2 id="Видел-такое-на-парковке-у-Ашана-Об-этом-целая-статья"><a href="#Видел-такое-на-парковке-у-Ашана-Об-этом-целая-статья" class="headerlink" title="Видел такое на парковке у Ашана. Об этом целая статья?"></a>Видел такое на парковке у Ашана. Об этом целая статья?</h2><p>Думаю, для большинства читателей это все ассоциируется с такой картинкой.  </p><p><img src="/images/winter_drift/2.jpg"></p><p><del>Так все и обстоит на самом деле.</del> В целом если вы просто купите Жигули (не пиво), сделаете заварку (не чай) и поедете крутить бублики (не еда) на парковку ближайшего ТЦ то возможно это и будет весело, но автоспортом называться не будет 🙂</p><p>Есть конечно стритовики которым в кайф кататься нелегально по ночным улицам и лесным дорогам. Это тоже очень интересно, но опасно и нелегально. Как минимум можно узнать о пункте правил 12.5.1 и о том что это значит 😁</p><p>В этой же статье мы поговорим о легальном и интересном виде автоспорта в который можно вкатиться с разумным бюджетом так как в целом гонки это очень дорого.</p><p>Итак, давайте вкатимся!</p><p>Начнем с правил дрифта.</p><h2 id="Правила-соревнований"><a href="#Правила-соревнований" class="headerlink" title="Правила соревнований"></a>Правила соревнований</h2><p><img src="/images/winter_drift/3.jpg"></p><p><em>Кеичи Тсучия показывает как надо</em></p><p>Дрифт зародился на извилистых горных дорогах в Японии где молодые японские ребята катались в поисках адреналина. В итоге они пришли к тому что крутые повороты можно проходить в управляемом заносе. Плюсов сразу несколько - это увлекательно, зрелищно и в некоторых случаях может быть эффективно.</p><p><strong>Здесь <a href="https://www.youtube.com/watch?v=Ay_9ptP7PMY">интересный выпуск “Гоночной среды”</a> с попыткой рассказать самую полную историю дрифта.</strong></p><p>В итоге все это переросло в соревнования где нужно пройти весь трек в управляемом заносе, не распрямляясь. Машины при этом едут как можно ближе друг за другом и преследователь синхронно повторяет движения лидера. В дрифте автомобили не обгоняют друг друга. Здесь идет соревнование на точность управления автомобилем.</p><p><img src="/images/winter_drift/4.jpg"></p><p><em>Пример судейского задания</em></p><p>Для заездов обычно используется не весь трек, а только его часть называемая конфигурацией. Также на конфиге разрабатывается судейское задание - на дорожное полотно наносятся специальные метки - в какие-то нужно обязательно попасть колесами, а какие-то нужно старательно объезжать.</p><p>Судьи оценивают проезды сразу по нескольким параметрам - траектория, стиль и угол. Как можно догадаться, часть этих параметров объективная, а часть субъективная.</p><p>Дрифт это очень зрелищный спорт и поэтому стиль управления автомобилем имеет большое значение.</p><p>Классический заезд состоит из двух хитов - сперва один едет лидером и второй преследователем, а затем они меняются.</p><p>В правилах есть множество нюансов. Если вам интересно чуть подробнее можете ознакомиться к примеру <a href="https://www.youtube.com/watch?v=Tut5aWLzqJ0">с этим видео</a>.</p><p>В зимнем дрифте правила такие же, но автомобили менее мощные и на шипованной резине.</p><p><strong>Главный плюс зимнего дрифта это адекватный бюджет мероприятия. Летний дрифт стоит в разы дороже.</strong></p><h2 id="Как-вкатиться-в-зимний-дрифт"><a href="#Как-вкатиться-в-зимний-дрифт" class="headerlink" title="Как вкатиться в зимний дрифт"></a>Как вкатиться в зимний дрифт</h2><p>Для начала вам нужно обзавестись заднеприводным автомобилем на механической коробке передач.</p><h3 id="Покупаем-Жигули"><a href="#Покупаем-Жигули" class="headerlink" title="Покупаем Жигули"></a>Покупаем Жигули</h3><p>Самый доступный и популярный вариант для зимнего дрифта это классические Жигули.<br>Запчасти доступны по адекватной цене. Есть готовые решения по подвеске, двигателю и кузову. Купить что-то другое значит встать на путь рискованных экспериментов. </p><p>При выборе автомобиля смотрите в первую очередь на состояние кузова. Бодрый мотор и обслуженная подвеска также приветствуются, но главное это живой кузов.</p><p><strong>Есть мнение что жигули выпущенные в СССР покрепче чем “новодел”. Плюс “копейка” и “двойка” чуть легче “шестерок” и “семерок”.</strong></p><p>В стоке двигатель у Жигулей один - вариации классического вазовского «восьмиклопа». Отличия в типе подачи топлива (карбюратор или инжектор) и объеме. В основном они все цепные, но может попасться и двигатель с ремнем ГРМ.</p><p>Я лично за инжекторный двигатель так как считаю его более надежным и беспроблемным.</p><p>Если в выбранном вами автомобиле стоит шестнадцатиклапанный двигатель, то поздравляю - возможно перед вами уже готовый болид для зимнего дрифта!<br>Покупка готового корча может быть более выгодна. Но тут много нюансов. Новичку такой вариант могу посоветовать только если машину будет подбирать опытный человек.</p><p><strong>Дрифт это контактный вид спорта. Будьте готовы к неизбежным повреждениям кузова.</strong></p><p>Пускаем Жигули боком, ищем площадку</p><p>Для того чтобы начать дрифтить достаточно заблокировать задний дифференциал. Самый простой способ это блокировка редуктора путем его заварки.</p><p>А для того чтобы автомобиль при этом еще ехал и рулился нужно доработать переднюю подвеску и сделать выворот. Плюс еще нужны колеса с хорошим шипом.</p><p><img src="/images/winter_drift/5.jpg"></p><p><em><del>Шиворот на</del>выворот</em></p><p>По передней подвеске есть как готовые комплекты (Красноярский выворот клаб турбо, We Ride) так и возможность переделки стандартных рычагов. Самый базовый вариант - установить только укороченные сошки.</p><p>Лучше всего если вам все это соберет и настроит человек с опытом. На крайний случай можно собрать все по рекомендациям из интернета.</p><p>Вот собственно и все, вы уже можете пытаться пускать автомобиль в управляемый занос на льду или на снегу. Мощности стандартного мотора на этом этапе будет достаточно.</p><p>Рекомендую сразу купить хороший шлем. Безопасность не бывает лишней. А на официальные мероприятия без шлема попросту не пустят.</p><p>Затем нужно найти подходящую площадку. Вполне возможно что в вашем городе есть подготовленный трек. Как вариант можете поискать ближайшие к вам события на <a href="http://racemonitor.ru/">рейсмониторе</a> либо просто погуглить с указанием названия вашего города.</p><p>Самый лучший вариант - найти кого-то с опытом и покататься с ним. Так вы получите ценные советы относительно вождения и фидбек по вашему автомобилю.</p><p><em>Еще думаю стоит упомянуть про типичную ошибку новичка - подвеску сделали, редуктор заварили, а резину купили самую дешевую б&#x2F;ушную. В этом случае вместо красивого дрифта у вас получится неуправляемое фигурное катание. Резина здесь очень важна. Лучше взять новые колеса с большим количеством качественных шипов.</em></p><h3 id="Что-дальше"><a href="#Что-дальше" class="headerlink" title="Что дальше?"></a>Что дальше?</h3><p>А дальше вам скорее всего перестанет хватать мотора, окажется что стандартное вазовское кресло не заточено под спорт и вы узнаете что огромный стандартный руль годится только для пенсионерской езды.</p><p>Поздравляю, вы встали на бесконечный путь тюнинга. </p><ul><li>Устанавливаем гидравлический ручник чтобы иметь возможность точно корректировать движение автомобиля в заносе  </li><li>Устанавливаем гоночный «ковш» со спортивными ремнями безопасности вместо стандартных кресел для правильной посадки и лучшей связи с автомобилем  </li><li>Меняем руль на спортивный, меньшего диаметра  </li><li>Подбираем подходящий редуктор и КПП  </li><li>Увеличиваем мощность мотора либо вовсе меняем его (шеснарь сила!)  </li><li>Покупаем правильную шипованную резину и правильно её прикатываем  </li><li>Раскатываем или подрезаем колесные арки чтобы колеса не цепляли за них  </li><li>Выкидываем все лишнее из автомобиля  </li><li>Устанавливаем каркас безопасности  </li><li>Меняем кузовные панели на пластиковые  </li><li>Все продаем и покупаем BMW E30  </li><li>От нас отворачивается семья и близкие</li></ul><p>Процесс очень увлекательный. Похожего эффекта можно добиться однажды попробовав рыбалку или оффроад 🙂</p><h2 id="Моя-машина"><a href="#Моя-машина" class="headerlink" title="Моя машина"></a>Моя машина</h2><p>Для зимнего дрифта у меня есть инжекторная “семерка” на стандартном восьмиклапанном двигателе мощностью в 73 могучих лошади.</p><ul><li>Передняя подвеска - кастомная вариация на тему “красноярского выворота”, проставки 50мм спереди  </li><li>Диски - ковка 15’ ВСМПО  </li><li>Резина - Tracmax S500  </li><li>Гидравлический ручник с отдельным контуром только на задние колеса  </li><li>Передние тормоза - стоковые десяточные  </li><li>КПП - сток 4-х ступка  </li><li>Выхлоп - прямоток 4-1 ДК Про  </li><li>Ковш Sparco Junior  </li><li>Ремни Sabelt  </li><li>Шлем LS2 FF353</li></ul><p>На этой машине я участвовал в паре этапов IDW 2024 в прошлом году и успел поучаствовать в паре этапов CRDC 2025 в этом году.</p><p><strong>Если в младшей серии IDW мощности сток восьмиклопа еще как-то хватало, то CRDC c 60+ участников показал что его уже не хватает. Так что в планах либо увеличение мощности этого мотора хотя бы до 100+ л.с. либо свап на «шеснарь».</strong> </p><p>Теперь стоит вспомнить мой совет про поиск машины с живым кузовом и посмотреть как автомобиль выглядел до участия в гонках. Не делайте так 😁</p><p>С другой стороны мой покемон выбрал меня сам!</p><h3 id="Бережное-хранение-на-теплом-паркинге-с-2019-по-2021-год"><a href="#Бережное-хранение-на-теплом-паркинге-с-2019-по-2021-год" class="headerlink" title="Бережное хранение на теплом паркинге с 2019 по 2021 год"></a>Бережное хранение <del>на теплом паркинге</del> с 2019 по 2021 год</h3><p><img src="/images/winter_drift/6.jpg"></p><p><em>Косплеим сюжет первого Форсажа</em></p><h3 id="Сезон-2024"><a href="#Сезон-2024" class="headerlink" title="Сезон 2024"></a>Сезон 2024</h3><p><img src="/images/winter_drift/7.jpg"></p><p><em>Косплеим раскраску легендарной AE86</em></p><h3 id="Сезон-2025"><a href="#Сезон-2025" class="headerlink" title="Сезон 2025"></a>Сезон 2025</h3><p><img src="/images/winter_drift/8.jpg"></p><p><em>Широко известная гоночная команда Race IT с одним участником</em></p><h2 id="Зачем-все-это-нужно"><a href="#Зачем-все-это-нужно" class="headerlink" title="Зачем все это нужно"></a>Зачем все это нужно</h2><p>Скажу за себя - хоть каких-то значимых результатов на соревнованиях пока добиться и не удалось, но я все равно рад что вписался в этот движ.</p><p>Как говорил Торетто в первой части фильма «Форсаж» - “Моя жизнь длится всего 10 секунд – между стартом и разгоном.” 😁</p><p>Накататься на трек дне до отваливающихся рук и ехать потом домой с ароматом гаража, моторного масла и выхлопных газов очень увлекательно!</p><p>Интереснее этого только чинить свой спортинвентарь в гараже.</p><p><img src="/images/winter_drift/9.jpg"></p><p><em>Привет, один тут отдыхаешь?</em></p><h2 id="Хочу-покататься-пассажиром-Как-быть"><a href="#Хочу-покататься-пассажиром-Как-быть" class="headerlink" title="Хочу покататься пассажиром. Как быть?"></a>Хочу покататься пассажиром. Как быть?</h2><p>Все просто! Узнаете время проведения открытых трек дней. Приезжаете туда и пытаетесь поймать кого-нибудь из пилотов и попросить прокатить в качестве пассажира. С большой вероятностью вас покатают. Препятствием может стать только отсутствие дополнительного шлема.</p><p>Если у вас есть хотя бы сноубордический шлем - можете прихватить его с собой.</p><h2 id="Ссылки"><a href="#Ссылки" class="headerlink" title="Ссылки"></a>Ссылки</h2><p><img src="/images/winter_drift/10.jpg"></p><p>Ну а теперь главный блок ради которого вся статья и затевалась 😁</p><ul><li>Более подробно про поднятие моих жигулей с колен - <a href="https://vas3k.club/post/1988539/">раз</a> и <a href="https://vas3k.club/post/19887/">два</a>  </li><li>Пост про <a href="https://vas3k.club/post/2275469/">первые гонки</a>  </li><li><a href="https://t.me/zhigulizm_drift">Телеграм канал!</a></li></ul><p>Если нужны какие-то подробности за рамками этой статьи - велком в комменты 🙂</p><p>Пара красивых фоточек с 4 этапа CRDC </p><p><img src="/images/winter_drift/11.jpg"><br><img src="/images/winter_drift/12.jpg"></p><h2 id="Планы-на-следующий-сезон"><a href="#Планы-на-следующий-сезон" class="headerlink" title="Планы на следующий сезон"></a>Планы на следующий сезон</h2><p>Научиться ездить!</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;Привет! Сегодня я хочу вам рассказать про такой вид автоспорта как зимний дрифт.&lt;/p&gt;</summary>
    
    
    
    
    <category term="ithink" scheme="https://hmdw.me/tags/ithink/"/>
    
    <category term="auto" scheme="https://hmdw.me/tags/auto/"/>
    
  </entry>
  
  <entry>
    <title>Отчет: 2024</title>
    <link href="https://hmdw.me/2024report/"/>
    <id>https://hmdw.me/2024report/</id>
    <published>2024-12-31T12:00:00.000Z</published>
    <updated>2026-03-26T08:54:03.686Z</updated>
    
    <content type="html"><![CDATA[<p>Всем привет!</p><p>Если честно в этот пост я просто скопипастил содержимое моего комментария в Вастрик.Клубе с итогами 2024 года. </p><p>Всех с наступающим Новым Годом и новогодними праздниками! Пусть в 2025 году у вас все будет еще лучше чем в 2024! 🎄🎄🎄</p><span id="more"></span><h3 id="🏆-Достижение-года"><a href="#🏆-Достижение-года" class="headerlink" title="🏆 Достижение года"></a>🏆 Достижение года</h3><p>Наконец-то поучаствовал в настоящих автомобильных соревнованиях.</p><p>Проехал больше 100км на велосипеде за лето. Для кого-то это маршрут одного дня. А для меня это важная ачивка.</p><h3 id="🛍-Покупки-года"><a href="#🛍-Покупки-года" class="headerlink" title="🛍 Покупки года"></a>🛍 Покупки года</h3><ol><li>Старенький минивэн Chrysler Voyager. Давно хотел попробовать автомобиль такого формата и мне понравилось!</li><li>Дачный участок. Да, теперь совсем как взрослые 🙂</li><li>MacBook Pro на M3 Pro. Наконец-то перешел на мак с новой процессорной архитектурой. Сплошные плюсы!</li><li>Электроинструмент. Купил себе в этом году аккумуляторную цепную пилу, пару <del>болгарочек</del> УШМ, новый гайковерт, еще один шуруповерт и сварочный аппарат.</li><li>DJ-контроллер Numark DJ2GO2 Touch. Вообще стоило купить себе контроллер еще лет 10 назад.</li></ol><h3 id="✍️-Блоггеры-ютюберы-телеграм-каналы-года"><a href="#✍️-Блоггеры-ютюберы-телеграм-каналы-года" class="headerlink" title="✍️ Блоггеры, ютюберы, телеграм-каналы года"></a>✍️ Блоггеры, ютюберы, телеграм-каналы года</h3><p>Тут может быть очень длинный список ютуб-каналов на автомобильную тематику. </p><p>Первые 5:</p><ol><li>Absurd Racing &#x2F; Absurd Drive</li><li>ВАЛ канал</li><li>HOLIKORN</li><li>Тачка под задачку</li><li>ФОРСАЖ</li></ol><h3 id="🎥-Фильмы-и-сериалы-года"><a href="#🎥-Фильмы-и-сериалы-года" class="headerlink" title="🎥 Фильмы и сериалы года"></a>🎥 Фильмы и сериалы года</h3><p>Честно говоря уже трудно вспомнить что смотрел в этом году. Пишу о чем удалось вспомнить 😁</p><ol><li>Джентльмены. Британский криминальный сериал.</li><li>ЮЗЗЗ. Российский криминальный сериал. Наткнулся случайно. Посмотрел весь единственный сезон за день. Рекомендую. </li><li>Жуки. Российский сериал про айтишников волей случая оказавшихся в деревне. Мне нравится общая позитивная атмосфера сериала.</li></ol><h3 id="🎮-Игры-года"><a href="#🎮-Игры-года" class="headerlink" title="🎮 Игры года"></a>🎮 Игры года</h3><p>Изредка играю на телефоне. Игры далеко не новые 😁</p><ol><li>CarX Drift 2</li><li>GTA San Andreas</li><li>CarX Rally</li></ol><h3 id="🎹-Музыка-года"><a href="#🎹-Музыка-года" class="headerlink" title="🎹 Музыка года"></a>🎹 Музыка года</h3><p>В целом слушаю практически то же что и раньше. Есть желание открывать для себя новую музыку, но не могу найти что-то интересное.</p><ol><li>Гудтаймс</li><li>Turbosh</li><li>Заточка</li></ol><h3 id="📚-Книги-года"><a href="#📚-Книги-года" class="headerlink" title="📚 Книги года"></a>📚 Книги года</h3><p>Стыд и позор. Ни одной полностью прочитанной книги в этом году. Читал только детскую литературу дочке.</p><p>Прослушал пару аудиокниг:</p><ol><li>Наталья Краснова - Секс. Все, что вы хотели узнать о сексе, но боялись спросить: от анатомии до психологии.</li><li>Алексей Марков - Хулиномика</li></ol><h3 id="💻-Новый-софт-года"><a href="#💻-Новый-софт-года" class="headerlink" title="💻 Новый софт года"></a>💻 Новый софт года</h3><p>На первое место тут стоит поставить  многочисленные AI-сервисы. ИИ прочно вошел в нашу жизнь. Вместо гугления мы теперь спрашиваем ChatGPT и Claude. Они же помогают нам программировать и заниматься саморефлексией.</p><ol><li>ChatGPT (Claude, Phind, Perplexity, etc)</li><li>Zed. Легковесная и удобная замена VS Code.</li><li>CapCut for Mac. Для какого-то легкого видеомонтажа эта программа подходит больше тяжеловесного DaVinci Resolve.</li></ol><h3 id="💎-Событие-года"><a href="#💎-Событие-года" class="headerlink" title="💎 Событие года"></a>💎 Событие года</h3><p>Гонки. Это прекрасное чувство когда ты стоишь на старте, подгазовываешь и ждешь взмаха флага от маршала чтобы устремиться вперед.</p><h3 id="😫-Провал-или-разочарование-года"><a href="#😫-Провал-или-разочарование-года" class="headerlink" title="😫 Провал или разочарование года"></a>😫 Провал или разочарование года</h3><ul><li>Canon. Фототехника уже не такая надежная как раньше. У жены на практически новом Canon R6 навернулся затвор. Cтарые добрые Canon 5D Mark II и Mark III вообще ни разу не подводили за годы работы.</li><li>Сервис в турецком all inclusive. В предыдущие годы было все прекрасно и вежливо. А в этом году я ругался на ресепшне. Причем конфликт был начат не мной.</li><li>Моя активность в соцсетях. Такое ощущение что я будто выключил себя из социума.</li><li>Планы на празднование Нового Года. Мы должны были сейчас заселяться в арендованный загородный дом на горнолыжке, но вместо этого я пишу этот отчет сидя дома. Планы поменялись 30 декабря. Так бывает.</li></ul><h3 id="👍-Что-важного-я-понял-за-2024-й-год"><a href="#👍-Что-важного-я-понял-за-2024-й-год" class="headerlink" title="👍 Что важного я понял за 2024-й год?"></a>👍 Что важного я понял за 2024-й год?</h3><p>Прежде всего, я понял, что здоровье — наше всё. Забота о своем здоровье и близких становится не только приоритетом, но и основой счастливой жизни.</p><p>Второе, что я понял, — не стоит пускать жизнь на самотёк. Если не ставить долгосрочные цели и не записывать свои достижения, жизнь может пролететь с невероятной скоростью. И, посмотрев назад, можно обнаружить, что и вспомнить-то нечего.</p><p>Так легко застрять в бесконечной рутине: «работа, еда, сон» + немного праздников (НГ, ДР и т.п.), где нечего выделить. Поэтому я стал уделять больше внимания мечтам, планам и моментам, за которые стоит зацепиться в памяти.</p><p>Также не стоит откладывать свои хобби и увлечения на “потом”. Деньги это ресурс восполняемый, а здоровье и молодость не совсем. </p><p>Можно и в 50 лет заняться скейтбордом, но лучше заняться этим в 18-20 🙂 </p><p><em>К примеру я считал людей покупающих айфон в кредит однозначно легкомысленными и недальновидными. Но с другой стороны хороший телефон человеку нужен сейчас, а не через несколько лет когда он сможет на него накопить.</em></p><h3 id="⏭-Планы-на-2025-й"><a href="#⏭-Планы-на-2025-й" class="headerlink" title="⏭ Планы на 2025-й"></a>⏭ Планы на 2025-й</h3><ul><li>Рост в профессиональном плане</li><li>Больше автоспорта</li><li>Больше физического спорта</li><li>Оживить свой блог и соцсети. Про GitHub тоже не забыть 😉</li><li>Доделать ремонт в квартире 😁</li><li>Вспомнить про свою творческую сторону (видео и музыка)</li><li>Научиться сварке на приемлимом уровне</li></ul><h3 id="PS-Дополнительные-ссылки-😉"><a href="#PS-Дополнительные-ссылки-😉" class="headerlink" title="PS. Дополнительные ссылки 😉"></a>PS. Дополнительные ссылки 😉</h3><ul><li><a href="https://t.me/zhigulizm_drift">TG-канал Жигулизм</a></li><li><a href="https://t.me/begemoth_voyager">TG-канал Voyager</a></li></ul>]]></content>
    
    
    <summary type="html">&lt;p&gt;Всем привет!&lt;/p&gt;
&lt;p&gt;Если честно в этот пост я просто скопипастил содержимое моего комментария в Вастрик.Клубе с итогами 2024 года. &lt;/p&gt;
&lt;p&gt;Всех с наступающим Новым Годом и новогодними праздниками! Пусть в 2025 году у вас все будет еще лучше чем в 2024! 🎄🎄🎄&lt;/p&gt;</summary>
    
    
    
    
    <category term="ithink" scheme="https://hmdw.me/tags/ithink/"/>
    
  </entry>
  
  <entry>
    <title>Ulcamp 2024</title>
    <link href="https://hmdw.me/ulcamp2024/"/>
    <id>https://hmdw.me/ulcamp2024/</id>
    <published>2024-10-28T12:22:00.000Z</published>
    <updated>2026-03-26T08:54:03.694Z</updated>
    
    <content type="html"><![CDATA[<p>Всем привет!</p><p>В этом году фестиваль Ulcamp снова состоялся. Было очень круто и весело. Но по ощущениям выходные с пятницу по воскресенье пролетели как мнгновение. Только мы приехали и начали ставить палатки как уже собираем все обратно с бодуна 🙂</p><span id="more"></span><h3 id="Как-прошел-фестиваль"><a href="#Как-прошел-фестиваль" class="headerlink" title="Как прошел фестиваль"></a>Как прошел фестиваль</h3><p>В этом году я также как и в прошлом подготовил отчетное видео:</p><iframe width="560" height="315" src="https://www.youtube.com/embed/rm1JFtvoKe0?si=ij5yPU9PoXsjaHMr" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe><p><strong>Предыдущие улкэмпы</strong>:</p><ul><li><a href="/ulcamp2016/">Ulcamp 2016</a></li><li><a href="/ulcamp2018/">Ulcamp 2017, 2018</a></li><li><a href="/ulcamp2019/">Ulcamp 2019</a></li><li><a href="/ulcamp2024/">Ulcamp 2024</a></li></ul>]]></content>
    
    
    <summary type="html">&lt;p&gt;Всем привет!&lt;/p&gt;
&lt;p&gt;В этом году фестиваль Ulcamp снова состоялся. Было очень круто и весело. Но по ощущениям выходные с пятницу по воскресенье пролетели как мнгновение. Только мы приехали и начали ставить палатки как уже собираем все обратно с бодуна 🙂&lt;/p&gt;</summary>
    
    
    
    
    <category term="ithink" scheme="https://hmdw.me/tags/ithink/"/>
    
  </entry>
  
  <entry>
    <title>Прошивка приборной панели Infiniti EX35</title>
    <link href="https://hmdw.me/dashboard-firmware/"/>
    <id>https://hmdw.me/dashboard-firmware/</id>
    <published>2024-06-05T01:53:08.000Z</published>
    <updated>2026-03-26T08:54:03.686Z</updated>
    
    <content type="html"><![CDATA[<p>Этот пост должен был выйти в <a href="https://ex35.hamdeew.ru/">блоге финика</a>, но так как он больше связан с IT я решил опубликовать его здесь.</p><p><strong>TLDR</strong> - я купил бу приборку в более лучшем состоянии для своего автомобиля и скорректировал на ней пробег выставив значения со старой приборки.</p><span id="more"></span><h3 id="Зачем"><a href="#Зачем" class="headerlink" title="Зачем"></a>Зачем</h3><p>Итак, уже довольно давно я являюсь владельцем автомобиля Infiniti EX35. В целом он меня почти всем устраивает. Не устраивает только высокий транспортный налог и то что машине уже 16 лет. Если с первым стоит просто смириться, то со вторым еще как-то можно работать время от времени обслуживая автомобиль и заменяя устаревшие агрегаты.</p><p>Еще при покупке я заметил что на приборной панели не светило два светодиода. Тогда я подумал что пробелма решлается простой перепайкой пары светодиодов. Но как оказалось светодиоды там не самые распространенной версии и найти их довольно трудно. Также при перепайке только пары светодиодов подсветка стала бы неравномерной.</p><p><img src="/images/ex35_dashboard_1.jpg" alt="Приборная панель Infiniti EX35"></p><p><em>На фото видно что левая часть спидометра светит более тускло, а на тахометре погасли пара светодиодов</em></p><p>Короче проблему я отложил в долгий ящик и ездил так. А потом наткнулся на авито на объявление о продаже приборки с EX37 в хорошем состоянии и со всеми целыми светодиодами.</p><p>На донорской приборке пробег был 219 тысяч км. Тогда как на моей было только 200 703 км. Разница невелика, но я решил перепрошить приборку так как мне это было вдобавок и интересно 😄.</p><p><img src="/images/ex35_dashboard_2.jpg" alt="Приборная панель Infiniti EX35"></p><p><em>Приборка которая ко мне приехала</em></p><h3 id="Подготовка-к-перепрошивке"><a href="#Подготовка-к-перепрошивке" class="headerlink" title="Подготовка к перепрошивке"></a>Подготовка к перепрошивке</h3><p>На просторах драйва нагуглился вот такой материал - <a href="https://www.drive2.ru/l/668752385023161800/">https://www.drive2.ru/l/668752385023161800/</a></p><p>Получается что для коррекции пробега нужно купить программатор ch341a, правильно подключиться прищепкой к чипу S93C76, слить дамп, поправить пробег и зашить дамп обратно.</p><p>На этом моменте я заказал на WB программатор (артикул 93568117).</p><p>Чтобы избежать правки пробега я решил просто слить дамп со своей приборки и залить его в новую. Это было первым моим ошибочным решением. Ниже подробности.</p><h3 id="Первый-облом"><a href="#Первый-облом" class="headerlink" title="Первый облом"></a>Первый облом</h3><p>Как только программатор пришел я сразу же попытался подключиться к плате прищепкой. И тут меня ждал облом - прищепка подключалась к маленькой плате-ключу из комплекта программатора, но это был вариант для подключения к микросхемам другого типа. Мне же было необходимо подключить прищепку к ряду ножек на программаторе.</p><p>В интернете нагуглились разные решения в виде припаивания пинов пришепки напрямую к программатору и т.д. </p><p>А я выбрал другой путь - заказал на том же WB провода мама-папа (артикул 175797158).</p><h3 id="Вторая-попытка-тоже-облом"><a href="#Вторая-попытка-тоже-облом" class="headerlink" title="Вторая попытка, тоже облом"></a>Вторая попытка, тоже облом</h3><p><em>Схема подключения программатора</em></p><p><img src="/images/ex35_dashboard_3.jpg" alt="Схема подключения программатора"></p><p>С проводами все получилось аккуратно подключить. Так как на разъеме прищепки пины не были пронумерованы я воспользовался лайфхаком - взял плату-ключ, приложил к разъему и подсмотрел на ключе цифры которыми пронумерованы пины.</p><p>В найденных в интернете мануалах обычно предлагалось прошивать плату при помощи программы SiberiaProg которая работает на Windows.</p><p>Винды под рукой у меня не было и я решил воспользоваться линуксовой утилитой IMSProg. Это стало второй моей ошибкой.</p><p><em>На фото первое подключение программатора.</em></p><p><img src="/images/ex35_dashboard_4.jpg" alt="Подключениe программатора"><br><img src="/images/ex35_dashboard_5.jpg" alt="Подключениe программатора"><br><img src="/images/ex35_dashboard_6.jpg" alt="Подключениe программатора"><br><img src="/images/ex35_dashboard_7.jpg" alt="Подключениe программатора"></p><p>Программатор определился в программе, но вот точый тип используемого чипа не идентифицировался. Я выбрал подходящий как мне кажется вариант и сдампил прошивку с новой приборки. В окне программы появилось что-то похожее на код с приборки. Я на радостях сохранил этот код и побежал в гараж прошиваться.</p><p>В гараже я слил дамп с оригинальной приборки и попробовал зашить его в новую.</p><p><img src="/images/ex35_dashboard_8.jpg" alt="Прошивка приборки"><br><img src="/images/ex35_dashboard_9.jpg" alt="Прошивка приборки"></p><p>В процессе прошивки я получил ошибку записи данных. Новая приборка при подключении к автомобилю показала 999 999км и перевела указатели топлива и температуры в неестественные положения выше максимума.</p><p>Прошивка не удалась. Откат к бэкапу также не удался.</p><p>В итоге я отправился домой для установки винды и поиска нормального дампа.</p><h3 id="Подготовка-к-третьей-попытке"><a href="#Подготовка-к-третьей-попытке" class="headerlink" title="Подготовка к третьей попытке"></a>Подготовка к третьей попытке</h3><p>Так как сносить линукс не хотелось я решил поставить VirtualBox и установить туда старую добрую Windows XP. Чтобы не тратить время на установку ОС я просто взял образ XP который ранее бесплатно распространяла Microsoft для того чтобы разработчики могли тестировать сайты на IE. Сейчас набор этих образов можно найти на торрентах.</p><p>С дампом прошивки вышло интереснее. Нашлось несколько сайтов типа CarDamp где дампы предлагались за деньги. Платить порядка 10 евро за попытку с непредсказуемым результатом не хотелось и поэтому мне удалось нагуглить <a href="https://cloud.mail.ru/public/mbvU/kzKoUte1Q">дамп с Infiniti G25</a>. Да машина другая, но приборка там идентичная.</p><p>Как оказалось сфера это довольно мутная так как коррекцией пробегов часто занимаются не из благих побуждений. Поэтому онлайн-калькуляторы пробегов и архивы дампов платные.</p><p>На этот раз прошиваться я решил при помощи SiberiaProg.</p><h3 id="Третья-попытка-частичный-успех"><a href="#Третья-попытка-частичный-успех" class="headerlink" title="Третья попытка, частичный успех"></a>Третья попытка, частичный успех</h3><p>Сперва я решил попробовать заново сдампить прошивку с родной приборки и залить в новую. SiberiaProg сама определила используемый чип и мне осталось только нажать пару кнопок. В результате я также получил окирпиченную новую приборку. Но в этот раз кое что бросилось мне в глаза - на моей приборке чип определился как S93C66! А в этом чипе памяти в два раза меньше - 512 байт вместо 1 килобайта!</p><p><img src="/images/ex35_dashboard_10.jpg" alt="Прошивка приборки"></p><p><em>Чип S93C76 в новой приборке</em></p><p><strong>Кто бы мог подумать что в разных ревизиях приборки разные чипы.</strong></p><p>В итоге остался только один вариант - шить скачанный дамп от G25. В итоге я его загрузил и… приборка заработала! Правда пробег на ней стал вообще в районе 70 тысяч км 😄</p><p><img src="/images/ex35_dashboard_11.jpg" alt="Прошивка приборки"><br><img src="/images/ex35_dashboard_12.jpg" alt="Прошивка приборки"></p><h3 id="Четвертая-попытка-успех"><a href="#Четвертая-попытка-успех" class="headerlink" title="Четвертая попытка, успех"></a>Четвертая попытка, успех</h3><p>Сперва я решил подправить пробег в онлайн калькуляторе Carprog online. После загрузки дампа веб-сервис правильно его считывал и показывал верный пробег. Но для получения скорректированной версии он просил деньги. В целом я уже был готов заплатить деньги, но решил поискать варианты еще.</p><p>Сперва я попробовал разобраться в дампе самостоятельно, а также при помощи ChatGPT. У нас обоих это не удалось. Единственное что я выяснил это строчки в которых хранится пробег и чексумма этого зачения. Но алгоритм генерации значения я не узнал.</p><p>Затем нагуглилась старая программа под Windows под названием NYO4. В ней был оффлайн-кальулятор. При помощи этой программы я забил свой пробег в 200703 км и прошил приборку.</p><p>Все прошло успешно, но пробег почему-то выставился в 200529 км. Решив что +-200км это допустимая погрешность я успокоился и собрал наконец панель обратно.</p><p><img src="/images/ex35_dashboard_13.jpg" alt="Прошивка приборки"></p>]]></content>
    
    
    <summary type="html">&lt;p&gt;Этот пост должен был выйти в &lt;a href=&quot;https://ex35.hamdeew.ru/&quot;&gt;блоге финика&lt;/a&gt;, но так как он больше связан с IT я решил опубликовать его здесь.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;TLDR&lt;/strong&gt; - я купил бу приборку в более лучшем состоянии для своего автомобиля и скорректировал на ней пробег выставив значения со старой приборки.&lt;/p&gt;</summary>
    
    
    
    
    <category term="auto" scheme="https://hmdw.me/tags/auto/"/>
    
  </entry>
  
  <entry>
    <title>Копитрейдинг</title>
    <link href="https://hmdw.me/copytrading/"/>
    <id>https://hmdw.me/copytrading/</id>
    <published>2024-05-22T01:48:53.000Z</published>
    <updated>2026-03-26T08:54:03.686Z</updated>
    
    <content type="html"><![CDATA[<p>Привет!</p><blockquote><p>Внимательный читатель заметит здесь новый тег #shorts. Дело в том что очень многое о чем я хотел бы написать в блог так и остается в виде коротких мыслей. Мысли эти обычно длиннее чем твит, но короче чем полноценный пост в блоге. Потому встречайте короткие посты! 😊</p></blockquote><p><strong>TLDR</strong> - копитрейдинг это очень эффективный способ быстро потерять свои деньги</p><span id="more"></span><h3 id="Предисловие"><a href="#Предисловие" class="headerlink" title="Предисловие"></a>Предисловие</h3><p>Я иногда торгую криптовалютами на биржах на небольшие суммы которые не страшно потерять. Это для меня нечто вроде игры в веселую ферму, но только с реальными результатами. Обычно я покупаю немного монеток, сразу же выставляю ордер на продажу по цене чуть дороже и просто жду. </p><p><img src="/images/crypto_meme.jpg"></p><p>Нюанс в том что зарабатываются деньги таким образом обычно медленно маленькими шагами, а потерять все заработанное можно очень быстро просто сделав неверную ставку 😄. Поэтому я обычно и делаю осторожные ставки с минимальным профитом.</p><p>Если бы я вкладывал большие суммы и делал рисковые ставки то давно бы поеседел от нервов. А так это просто забавная игра.</p><h3 id="Копитрейдинг"><a href="#Копитрейдинг" class="headerlink" title="Копитрейдинг"></a>Копитрейдинг</h3><p>Также иногда я пробую новые фичи предлагаемые биржами - торговых ботов, стейкинг и прочие штуки позволяющие бирже зарабатывать на мне 😄. </p><p>Так вот - вчера я повелся на рекламу новой фичи под названием «Копитрейдинг». На картинках все выглядело красиво - просто выбираешь топового трейдера, пополняешь счет и всё - все сделки этого трейдера автоматически копируются на твоем аккаунте. Сплошной вин без необходимости что-то делать!</p><p>Я выбрал трех трейдеров и влошился. </p><p>Надо заметить что вчера все основные валюты бешено росли в цене. К примеру стоимость ETH за день выросла с ~$3000 до ~3800. Причем эфир подтянулся через некоторое после роста цены биткоина. Короче рост происходил прямо на глазах.</p><p><img src="/images/eth_chart.png"></p><p>Так вот - что сделал один из трейдеров? Правильно! Начал пытаться шортить растущий эфир с плечом 20x! Пару легких движений и от вложенных $100 на счете осталось только $20.</p><p>Спасибо, но так эффективно торговать я и сам умею! Чудом успел вывести оставшуюся двадцатку. </p><p>Пользоваться копитрейдингом не рекомендую.</p><h3 id="UPD"><a href="#UPD" class="headerlink" title="UPD:"></a>UPD:</h3><p>Все же я наверное погорячился так безаппелятивно заявив что пользоваться этим инструментом совсем нельзя. Из интереса я вложился в трех трейдеров и один из них показывает вполне неплохие результаты. А на двух других я потерял деньги. Короче это высокорискованная штука в которую нужно заходить имея необходимые знания. Универсального решения для зарабатывания денег без знаний и усилий пока не придумали 😄.</p><p>Вот кстати довольно интересная статья на тему: <a href="https://habr.com/ru/articles/808635/">https://habr.com/ru/articles/808635/</a> </p>]]></content>
    
    
    <summary type="html">&lt;p&gt;Привет!&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Внимательный читатель заметит здесь новый тег #shorts. Дело в том что очень многое о чем я хотел бы написать в блог так и остается в виде коротких мыслей. Мысли эти обычно длиннее чем твит, но короче чем полноценный пост в блоге. Потому встречайте короткие посты! 😊&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;TLDR&lt;/strong&gt; - копитрейдинг это очень эффективный способ быстро потерять свои деньги&lt;/p&gt;</summary>
    
    
    
    
    <category term="shorts" scheme="https://hmdw.me/tags/shorts/"/>
    
  </entry>
  
  <entry>
    <title>Ulcamp X</title>
    <link href="https://hmdw.me/ulcamp2023/"/>
    <id>https://hmdw.me/ulcamp2023/</id>
    <published>2023-08-18T03:06:24.000Z</published>
    <updated>2026-03-26T08:54:03.694Z</updated>
    
    <content type="html"><![CDATA[<p>Всем привет!</p><p>В этом году долгожданный пляжный фестиваль Ulcamp наконец-то состоялся. Это был юбилейный десятый раз когда программисты собирались на берегу Волги <del>на пьянку</del> чтобы послушать доклады.</p><span id="more"></span><h3 id="Как-прошел-фестиваль"><a href="#Как-прошел-фестиваль" class="headerlink" title="Как прошел фестиваль"></a>Как прошел фестиваль</h3><p>Жаль конечно что многие друзья и знакомые не смогли приехать, но тем не менее дух фестиваля остался и все было очень круто и весело!</p><p>Кстати даже погода повторяла прошлый фестиваль 2019 года. В пятницу вечером начался ливень с жестким ветром, а в субботу погода была переменной. Палящее солнце сменялось кратковременным ливнем со шквалистым ветром.</p><p>Не буду утомлять читателей кучей текста с фотографиями, ведь у меня есть кое-что получше - отчетное видео! 🙂</p><iframe width="560" height="315" src="https://www.youtube.com/embed/LkM07OI97SQ" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe><p><strong>Предыдущие улкэмпы</strong>:</p><ul><li><a href="/ulcamp2016/">Ulcamp 2016</a></li><li><a href="/ulcamp2018/">Ulcamp 2017, 2018</a></li><li><a href="/ulcamp2019/">Ulcamp 2019</a></li></ul>]]></content>
    
    
    <summary type="html">&lt;p&gt;Всем привет!&lt;/p&gt;
&lt;p&gt;В этом году долгожданный пляжный фестиваль Ulcamp наконец-то состоялся. Это был юбилейный десятый раз когда программисты собирались на берегу Волги &lt;del&gt;на пьянку&lt;/del&gt; чтобы послушать доклады.&lt;/p&gt;</summary>
    
    
    
    
    <category term="ithink" scheme="https://hmdw.me/tags/ithink/"/>
    
  </entry>
  
  <entry>
    <title>Новости 2023</title>
    <link href="https://hmdw.me/news-2023/"/>
    <id>https://hmdw.me/news-2023/</id>
    <published>2023-03-31T01:58:26.000Z</published>
    <updated>2026-03-26T08:54:03.689Z</updated>
    
    <content type="html"><![CDATA[<p>Всем привет! Вообще до этого поста я планировал написать еще несколько других, но так и не собрался с силами это сделать. Поэтому пишу сейчас этот, актуальный на сегодняшний день пост.</p><span id="more"></span><h3 id="Предисловие"><a href="#Предисловие" class="headerlink" title="Предисловие"></a>Предисловие</h3><p>Уже много лет в интернете я оставляю свой цифровой след - где-то это аккаунты в социальных сетях и платформах, где-то мои собственные сайты. </p><p>Каждый раз когда я пишу что-то в сети задумываюсь о приемлемом для меня балансе откровенности. С одной стороны иногда хочется поделиться чем-то довольно личным, а с другой я понимаю что это не очень безопасно. Да и в реальной жизни я не особо любитель трепаться о личном. В итоге рождаются неинтересные посты с кучей недомолвок и намеков. Вот и сейчас видимо один из них.</p><hr><h3 id="Главное"><a href="#Главное" class="headerlink" title="Главное"></a>Главное</h3><p>Год начинался в целом неплохо, но в начале марта в моей семье случилось довольно печальное событие. У меня умер отец. Я конечно понимал что никто не вечен и все это лишь вопрос времени, но переживать это довольно сложно.</p><p>Рад что с отцом в последние годы у нас были прекрасные отношения. Да, местами возникало недопонимание из-за разницы поколений, но при этом мы не ругались. Отца я любил, но при этом нечасто заходил к родителям в гости. Он был далеко не идеальным, но при этом хорошим человеком. Покойся с миром отец! Минем әти!</p><p>Теперь нужно стараться больше помогать маме, следить за дачей, гаражом и т.д. Ну что ж, так тому и быть.</p><hr><h3 id="Остальное"><a href="#Остальное" class="headerlink" title="Остальное"></a>Остальное</h3><p><img src="/images/IMG_0833.jpg" alt="Морозы в Свияжиских холмах"></p><p>В этом году мы снова поехали на новогодние праздники в Свияжские Холмы. В предыдущие годы мы ездили туда с друзьями на двух машинах, а в этот раз вынужденно отправились на одной нашей. Поездка была забронирована заранее и мы не знали что в эти дни ударят морозы в -35. В итоге мы просидели все дни в домике. На сноуборде и лыжах не катались. Машину заморозили и она не завелась)</p><p><a href="https://ex35.hamdeew.ru/2023/01/10/freezing/">Более подробно - в блоге финика</a></p><hr><p>В декабре 2022 я купил себе б&#x2F;ушный сноуборд так как захотелось кататься больше. Также я приобрел себе сноубордический шлем и очки.</p><p><img src="/images/snowboard_1.jpg" alt="Сноуборд K2 и ботинки Burton"><br><img src="/images/snowboard_2.jpg" alt="Сноуборд K2"></p><p>В этом сезоне удалось где-то 6-7 раз сгонять на горку. Катался я исключительно на склоне для новичков так как решил сперва научиться уверенно стоять на доске. </p><p>Оказалось что привозить свою доску, переобуваться и сразу идти кататься это удобно! Надеюсь что сноуборд не испортится от хранения в подвале гаража.</p><hr><p>Жигули для дрифта. Еще одно новое зимнее увлечение. Напишу об этом отдельный пост.</p><p><img src="/images/zhiga.jpg" alt="Жига для дрифта"></p><hr><p>На этом пока все. </p><p>Времена начиная с прошлого года пошли неспокойные. Многое поменялось и меняется до сих пор. </p><p>Желаю вам всего хорошего!</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;Всем привет! Вообще до этого поста я планировал написать еще несколько других, но так и не собрался с силами это сделать. Поэтому пишу сейчас этот, актуальный на сегодняшний день пост.&lt;/p&gt;</summary>
    
    
    
    
    <category term="ithink" scheme="https://hmdw.me/tags/ithink/"/>
    
  </entry>
  
  <entry>
    <title>Первая половина 2022</title>
    <link href="https://hmdw.me/first-half-of-2022/"/>
    <id>https://hmdw.me/first-half-of-2022/</id>
    <published>2022-08-19T03:09:08.000Z</published>
    <updated>2026-03-26T08:54:03.687Z</updated>
    
    <content type="html"><![CDATA[<p>Тут пост о том что было дальше.</p><span id="more"></span><h4 id="Продолжение-весна-2022"><a href="#Продолжение-весна-2022" class="headerlink" title="Продолжение, весна 2022"></a>Продолжение, весна 2022</h4><p>Еще в начале марта я успел положить деньги на баланс Apple ID чтобы в случае чего их хватило на ближайшие полгода. Тогда еще банковские карты не были заблокированы и платеж успешно прошел.</p><p>Примерно в тот же момент я забил на личные проекты и забил на инстаграм. Больше занимался работой и семьей.</p><p>В марте пришел последний платеж с Google Adsense. Платежи у меня были небольшие, но регулярные. А тут им настал конец.</p><p>Я как-то писал в прошлом году что закинул немного денег на Тинькофф Инвестиции. Закинул ту сумму которую не жалко. Частенько большая часть портфеля у меня была в плюсе. Теперь же у меня в портфеле почти все стало красное и неизвестно когда отрастет. В приложение я даже и не захожу чтобы лишний раз не огорчаться.</p><p>В конце апреля съездили с супругой в Казань. Из примечательного - тогда я посетил музей АкБарс Авто. Также мне очень понравился парк Урам.</p><h4 id="Лето-2022"><a href="#Лето-2022" class="headerlink" title="Лето 2022"></a>Лето 2022</h4><p>Далее в начале июня была семейная поездка в Тольятти (в Alpen Park). Альпенпарк удивил крутыми гостиничными номерами в отдельно стоящем коттедже. </p><p>Ну и заодно удалось исполнить давнюю мечту – посетить музей АвтоВАЗ 😉. На обратном пути мы еще заехали в AlphaGlamping. Место довольно интересное, но ехать туда далековато)</p><p>Старый добрый Ulcamp остался в доковидном и доспецоперационном 2019 году. С каждым годом надежда на его возрождение угасает. В этом году взамен улкэмпа были проведены две конференции помельче - SummerMerge и DevSpace. </p><p>На мердж я не поехал (мерджей мне и на работе хватает лол), а вот девспейс оказался пропитан духом того самого улкэмпа. Масштабы были в разы меньше, но тусовка была ламповой. Я очень рад что встретил кучу друзей и знакомых и хорошо провел там время.</p><p>Также удалось в этом году сходить на байдарки с друзьями. Получилось очень атмосферно.</p><p>Прочитал летом две книги Дмитрия Глуховского - «Пост» и «Пост. Спастись и сохранить».</p><h4 id="Билайн"><a href="#Билайн" class="headerlink" title="Билайн"></a>Билайн</h4><p>Дальше история про то как деньги на Apple ID стали заканчиваться и я решил пополнить счет через мобильного оператора. Один раз я уже платил с мобильного счета Yota. Но сейчас вроде как платежи через Yota уже не работают. Честно говоря не знаю, не проверял.</p><p>На этот раз я решил затестить Билайн. Для этих целей я приобрел e-sim с каким-то непонятным тарифом за 300 рублей в месяц. Плюс с меня взяли дополнительно 50 рублей за выпуск сим-карты (которой не было). Выглядело это так - я в салоне связи заплатил 350 рублей, а мне в ответ дали чек с QR-кодом. Я скачал приложение для того чтобы поменять тариф на “посекундный” и вернуть потраченные деньги на счет. Тариф успешно поменялся, а вот на счет вернули только 88 рублей. Да и то произошло это после бодания со специалистом техподдержки в чате.</p><p>Уровень клиентского сервиса оцениваю на 3 из 5.</p><p>Но, главное что мне таки удалось положить деньги на счет Билайна и затем оттуда пополнить ими счет Apple ID. Потраченные деньги считаю комиссией.</p><h4 id="Квадрокоптер"><a href="#Квадрокоптер" class="headerlink" title="Квадрокоптер"></a>Квадрокоптер</h4><p>Честно говоря я хотел себе квадрокоптер еще в те времена когда Dji только начала выпускать свои первые устройства. Затем у меня было желание купить Dji Mini. Потом я на все это забил и в итоге ничего не купил. И тут листая объявления на одной из айтишных барахолок я увидел пост о продаже б&#x2F;ушного Dji Mavic Air. Ну и купил в итоге. </p><p>Штука прикольная. Налетал я пока очень мало, но занятие это очень увлекательное. Очень рад что решился на покупку.</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;Тут пост о том что было дальше.&lt;/p&gt;</summary>
    
    
    
    
    <category term="ithink" scheme="https://hmdw.me/tags/ithink/"/>
    
  </entry>
  
  <entry>
    <title>Начало 2022 года</title>
    <link href="https://hmdw.me/beginning-of-2022/"/>
    <id>https://hmdw.me/beginning-of-2022/</id>
    <published>2022-08-06T01:39:00.000Z</published>
    <updated>2026-03-26T08:54:03.686Z</updated>
    
    <content type="html"><![CDATA[<p>Бегло просмотрел свои предыдущие посты из 2021 года и поймал себя на мысли что выглядят они так будто все это было очень давно. Очень многое поменялось за это время. В 2020 в интернете шутили что Парфенов замучается делать «Намедни» за 2020 год. </p><p>А оказалось что дальше события будут разворачиваться куда динамичнее и события 2020 года покажутся куда более простыми. Очень многое поменялось.</p><span id="more"></span><p>На компьютере при этом мало что изменилось. Даже в истории команд zsh все еще сохранились команды для hexo которые я набирал чтобы создать предыдущий пост в блоге.</p><h4 id="Год-2021"><a href="#Год-2021" class="headerlink" title="Год 2021"></a>Год 2021</h4><p>Я собирался написать пост с обзором прошедшего 2021 года в начале января, но так это и не сделал. А сейчас уже частично и позабыл что там было в 2021 году.</p><p>Из того что смог вспомнить:</p><ul><li>залил на свой <a href="https://www.youtube.com/c/RailHamdeew">ютуб-канал</a> около 10 видеороликов</li><li>начал учить английский на постоянной основе</li><li>съездили с семьей в Свияжские холмы, Альпен Парк и в Камский Трофей</li><li>была куча планов по запуску новых проектов, переделке блога и т.д.</li><li>отменилась поездка в Турцию</li><li>слетал в Москву к другу и заодно посетил музей М.О.С.Т.</li><li>были конечно и личные потрясения, но в целом год прошел спокойно</li></ul><hr><h4 id="Январь"><a href="#Январь" class="headerlink" title="Январь"></a>Январь</h4><p>Новый год начался не очень, причем с самого начала его празднования. Я даже думал что это все возможно потому что мы изменили традициям и вместо того чтобы уехать на турбазу или горнолыжный курорт мы решили отметить этот праздник дома. Было весело, но завершился праздник не очень хорошо. Тут уж без подробностей) Уже тогда возникло ощущение что что-то не то.</p><p>Далее, спустя неделю мы съездили на горнолыжку в Свияжские Холмы и в целом хорошо провели там время. А в это время в соседнем Казахстане происходили смутные события. Не то что бы это как-то влияло на нас, но сейчас по прошествии полугода это выглядит как тревожный звоночек.</p><p>Спустя еще пару недель мы с женой отправились в Казань и <a href="https://ex35.hamdeew.ru/2022/01/26/flew-into-a-ditch/">на скользкой дороге мы вылетели с трассы</a>. Сами целы, с машиной тоже почти все в порядке, но эмоционально это оставило довольно сильный отпечаток. Я всегда понимал что на дороге может случиться всякое и никто от этого не застрахован, но к этому мы не были готовы. В Казань по этой трассе я ездил много раз и днем и ночью и в хорошую погоду и даже в плохую. А тут бац и понимаешь что потерять контроль за доли секунды. С тех пор я стал помедленнее ездить и реже обгонять машины на трассе. Больше конечно это в эмоциональном плане повлияло на мою супругу. Она теперь с тревогой думает о предстоящих поездках.</p><p><em>Получилось довольно иронично что спустя неделю после съезда в кювет я сходил на урок контраварийного вождения от Биньямина Джепаева. Урок был запланирован на три недели раньше, но боевой УАЗ сломался в тот раз. Сам урок пролетел очень быстро. Гонять на УАЗе по заснеженной трассе оказалось очень увлекательно. Но для закрепления занятий лучше сразу брать пакет из 6 занятий. Заодно удалось поговорить с многократным чемпионом автогонщиком Биньямином Джепаевым. Хороший дядька.</em></p><h4 id="Февраль"><a href="#Февраль" class="headerlink" title="Февраль"></a>Февраль</h4><p>В начале февраля дорожный инцидент уже начал забываться, а в новостях стали появляться тревожные материалы связанные со страной X и страной Y. Я до последнего полагал что все обойдется и верил в лучшее. А потом все как завертелось… и мы стали жить в стремительно меняющемся мире.</p><p>Практически моментально возникли сложности с оплатой зарубежных сервисов, работой Apple Pay. А еще я удалил с телефона Tandem так как мне стало стрёмно знакомиться с людьми и говорить кто я и откуда.</p><p>Но это мелочи которые можно потерпеть. </p><blockquote><p>Мне очень жаль пострадавших людей и до сих пор трудно поверить в то что такое может происходить в 21 веке. Очень хочу чтобы все это поскорее закончилось и люди перестали страдать.</p></blockquote>]]></content>
    
    
    <summary type="html">&lt;p&gt;Бегло просмотрел свои предыдущие посты из 2021 года и поймал себя на мысли что выглядят они так будто все это было очень давно. Очень многое поменялось за это время. В 2020 в интернете шутили что Парфенов замучается делать «Намедни» за 2020 год. &lt;/p&gt;
&lt;p&gt;А оказалось что дальше события будут разворачиваться куда динамичнее и события 2020 года покажутся куда более простыми. Очень многое поменялось.&lt;/p&gt;</summary>
    
    
    
    
    <category term="ithink" scheme="https://hmdw.me/tags/ithink/"/>
    
  </entry>
  
  <entry>
    <title>AK BARS RETRO CARS</title>
    <link href="https://hmdw.me/akbars-museum/"/>
    <id>https://hmdw.me/akbars-museum/</id>
    <published>2022-05-31T15:48:22.000Z</published>
    <updated>2026-03-26T08:54:03.686Z</updated>
    
    <content type="html"><![CDATA[<p>Привет!</p><p>Здесь короткий пост о том как я посетил экспозицию <a href="https://akbarsretrocars.ru/">AK BARS RETRO CARS</a> в Казани. </p><blockquote><p>Этот пост я написал в мае 2023 года, но выставил ему дату публикации на май 2022 чтобы не нарушать хронологию. Возможно содержимое выставки уже изменилось спустя год.</p></blockquote><span id="more"></span><h3 id="Как-я-туда-попал"><a href="#Как-я-туда-попал" class="headerlink" title="Как я туда попал"></a>Как я туда попал</h3><p>Вообще попасть в музей обычно несложно. Нужно всего лишь купить билет и придти в рабочие часы 🙂</p><p>Но тут все вышло несколько сложнее.</p><p>Итак, мы поехали по делам в Казань и по пути решили заскочить в музей. Войти нам тогда не удалось так как в этот день в помещении музея проводилось закрытое мероприятие</p><p>На следующий день у меня был свободен целый день и я решил еще разок попробовать туда попасть. На сей раз на входе я увидел большое количество молодых людей. Встал в очередь. Уже стоя в очереди краем уха услышал диалог парней стоящих спереди. Они обсуждали инвестиции. Тут у меня начали закрадываться подозрения в том что не все эти люди стоящие в очереди ценители ретро-автомобилей 😀</p><p>Когда дошла моя очередь я узнал что там проводится инвестиционный форум и что на машины можно посмотреть только купив билет на форум. Билет стоил 3000 рублей вместо обычных 300. Я вежливо отказался от покупки и вышел из здания. </p><blockquote><p>Кто знает, возможно мне стоило купить билет на форум и сейчас я был бы сказочно богат)</p></blockquote><p>Честно говоря в тот момент я огорчился что приезжаю сюда второй раз и никак не могу попасть внутрь. Я собирался уже уехать оттуда, но потом решил зайти снова и посмотреть экспонаты хотя бы издалека. </p><p>Внутри я увидел лестницу ведущую на второй этаж и поднялся туда. На втором этаже располагалось кафе, а также открывался вид сверху на выставку. Там же был стенд с призовыми кубками.</p><p>Я посмотрел на автомобили издалека, посмотрел кубки и… увидел еще одну неприметную лестницу в углу. Спустился и оказался прямо в центре выставки 😀</p><p>Вот так посещение музея получилось для меня бесплатным.</p><h3 id="Фото-с-выставки"><a href="#Фото-с-выставки" class="headerlink" title="Фото с выставки"></a>Фото с выставки</h3><h5 id="Автомобили-на-парковке"><a href="#Автомобили-на-парковке" class="headerlink" title="Автомобили на парковке"></a>Автомобили на парковке</h5><p>«Тройка» на автомате. Снаружи она ничем не отличается, но в салоне действительно виднеется селектор АКПП.</p><p><img src="/images/akbars/akbars_1.jpg"></p><p>ЗиЛ-41047</p><p><img src="/images/akbars/akbars_2.jpg"><br><img src="/images/akbars/akbars_3.jpg"></p><h5 id="Автомобили-внутри"><a href="#Автомобили-внутри" class="headerlink" title="Автомобили внутри"></a>Автомобили внутри</h5><p>Мотовездеход GG Quad</p><p><img src="/images/akbars/akbars_4.jpg"></p><p>Тот самый «вид сверху» на выставку 😀<br><img src="/images/akbars/akbars_5.jpg"></p><p>Гоночный КамАЗ команды Kamaz-Master<br><img src="/images/akbars/akbars_6.jpg"></p><p>Внедорожник Zibar MK2<br><img src="/images/akbars/akbars_7.jpg"></p><p>Aurus и Maybach<br><img src="/images/akbars/akbars_8.jpg"><br><img src="/images/akbars/akbars_9.jpg"></p><p>Bugatti Veyron Grand Sport 2010 года.<br><img src="/images/akbars/akbars_10.jpg"></p><p>Модный стильный молодежный Chevrolet Apache 1959 года.<br><img src="/images/akbars/akbars_11.jpg"></p><p>ЗиС 110<br><img src="/images/akbars/akbars_12.jpg"></p><p>ГАЗ 13<br><img src="/images/akbars/akbars_13.jpg"></p><p>В целом выставка не очень большая и все экспонаты умещаются в одном зале. Я туда хотел попасть в первую очередь чтобы прикоснуться к гоночному КамАЗу. </p><p>Музей рекомендую к посещению. Также рекомендую предварительно туда позвонить и уточнить можно ли туда попасть в этот день.</p><p>Больше фото на <a href="https://drive.google.com/drive/folders/1-WAZA9tMGJans5ABBH_jTFh-JGzm9ihE?usp=drive_link">Google Drive</a></p>]]></content>
    
    
    <summary type="html">&lt;p&gt;Привет!&lt;/p&gt;
&lt;p&gt;Здесь короткий пост о том как я посетил экспозицию &lt;a href=&quot;https://akbarsretrocars.ru/&quot;&gt;AK BARS RETRO CARS&lt;/a&gt; в Казани. &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Этот пост я написал в мае 2023 года, но выставил ему дату публикации на май 2022 чтобы не нарушать хронологию. Возможно содержимое выставки уже изменилось спустя год.&lt;/p&gt;
&lt;/blockquote&gt;</summary>
    
    
    
    
    <category term="ithink" scheme="https://hmdw.me/tags/ithink/"/>
    
    <category term="auto" scheme="https://hmdw.me/tags/auto/"/>
    
  </entry>
  
  <entry>
    <title>Гейм чейнджер</title>
    <link href="https://hmdw.me/game-changer/"/>
    <id>https://hmdw.me/game-changer/</id>
    <published>2021-12-01T01:08:21.000Z</published>
    <updated>2026-03-26T08:54:03.687Z</updated>
    
    <content type="html"><![CDATA[<p><img src="/images/think_meme.png" alt="think meme"></p><p>Увидел на днях новость о том что вышел <strong>Next.js 12</strong> с кучей новых крутых фич и улучшений. А я давно хотел уже поиграться с современным фронтендом на своих pet-проектах, да все никак не находил подходящую задачу под эти инструменты.</p><span id="more"></span><p>Я зашел на официальный сайт Next.js и увидел большой раздел документации посвященный интеграции со сторонними CMS.</p><p><img src="/images/image-20211201001221568.png" alt="-20211201001221568"></p><p>Тут мне закралась мысль, а не попробовать ли мне Next.js для блога 🤔</p><h3 id="Текущее-решение"><a href="#Текущее-решение" class="headerlink" title="Текущее решение"></a>Текущее решение</h3><p>Я свои блоги уже давно перевел на статик-генераторы и в большинстве случаев использую Hugo. Генерируется все моментально из простых md-файлов в не менее простые html-файлы. Из коробки есть Live-reload, возможность использовать минимальную логику в шаблонах и т.д. Готовую статику можно закидывать на GitHub&#x2F;GitLab pages, Vercel, S3 и куда душе угодно.</p><p>Но вот есть один минус – это использование картинок постах. У меня это выглядит так – я копирую картинки в static&#x2F;uploads и вручную прописываю к ним пути в редакторе во время написания поста.</p><p>А хочется как в современных CMS - просто перетянуть файл в окошко редактора чтобы оно само куда надо подтянулось.</p><h3 id="WordPress-спешит-на-помощь"><a href="#WordPress-спешит-на-помощь" class="headerlink" title="WordPress спешит на помощь"></a>WordPress спешит на помощь</h3><p>Вот тут я и решил попробовать связку Next.js + WordPress. Тем более что все основные фичи для создания блога у WordPress есть из коробки + с недавних пор там есть новый крутой блочный редактор для текстов.</p><p>Я открыл ридми у <a href="https://github.com/vercel/next.js/tree/canary/examples/cms-wordpress">https://github.com/vercel/next.js/tree/canary/examples/cms-wordpress</a>, поднял локальный веб-сервер с WordPress и начал погружение в удивительный мир современного фронтенда.</p><p>Из описания стало понятно что при сборке сайта посты подтягиваются из WordPress и превращаются в странички на Next.js. Кажется то что мне нужно)</p><p>Удивительно, но на этапе <code>npx create-next-app</code> и <code>npm install</code> даже ничего не сломалось 😂</p><p>Нужно отметить что делал я все по документации - создал пару постов в WordPress с текстом и картинками с unsplash.com и установил плагин WP Graphql</p><h4 id="Проблема-раз"><a href="#Проблема-раз" class="headerlink" title="Проблема раз"></a>Проблема раз</h4><p>Затем я запустил <code>npm run dev</code> и получил ошибку гласящую о том что картинку с домена gravatar мы загрузить не можем и нужно этот домен добавить в список разрешенных в конфиг-файле (которого ещё нет). Что ж, я нагуглил в официальной документации как должен выглядеть кусок конфига и пофиксил эту проблему.</p><p>next.config.js</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">/**</span></span><br><span class="line"><span class="comment"> * <span class="doctag">@type</span> &#123;<span class="type">import(&#x27;next&#x27;).NextConfig</span>&#125;</span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line"><span class="keyword">const</span> nextConfig = &#123;</span><br><span class="line">  <span class="attr">images</span>: &#123;</span><br><span class="line">    <span class="attr">loader</span>: <span class="string">&#x27;imgix&#x27;</span>,</span><br><span class="line">    <span class="attr">path</span>: <span class="string">&#x27;https://example.com/images/&#x27;</span>,</span><br><span class="line">    <span class="attr">domains</span>: [<span class="string">&#x27;1.gravatar.com&#x27;</span>],</span><br><span class="line">  &#125;,</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="variable language_">module</span>.<span class="property">exports</span> = nextConfig</span><br></pre></td></tr></table></figure><p>Главная страница моего чудесного блога стала загружаться по адресу <code>http://localhost:3000</code>!</p><h4 id="Проблема-два"><a href="#Проблема-два" class="headerlink" title="Проблема два"></a>Проблема два</h4><p>Далее я кликнул на один из постов и после долгого ожидания увидел сообщение об ошибке. Оказалось что наш Next.js ожидает наличие главного изображения у каждого поста и в случае его отсутствия падает с ошибкой. Окей.</p><p>Я добавил главные картинки в оба поста и на сей раз мой блог все же прогрузился.</p><p>Тут я уже решил что несмотря на эти косяки в целом все круто и пора бы собрать статичную версию сайта (как раз везде пишут что для Next.js рекомендован режим SSG!).</p><h4 id="Проблема-три"><a href="#Проблема-три" class="headerlink" title="Проблема три"></a>Проблема три</h4><p>Набрал <code>npm run build</code> и надо ли говорить о том что ожидаемых html-файлов которые можно закинуть куда угодно я не увидел. В <a href="https://nextjs.org/docs/deployment">официальной доке</a> пишут что все ок, нужно просто импортнуть то что получилось в Vercel и оно там будет работать. В качестве альтернатив предлагается поднять свой сервер на node.js для запуска нашего сайта либо экспортировать статичный сайт.</p><p>Окей, переходим на страницу документации рассказывающую о <code>next export</code> и кажется это то что нужно. Запускаю команду и получаю ошибку - оптимизация картинок в этом режиме не поддерживается и потому экспортировать сайт нельзя. В качестве решения предлагается воспользоваться сторонними облачными сервисами для оптимизации картинок или прикручивать свой кастомный loader который будет как-то манипулировать с картинками.</p><p>Ну ок, прописал в настройках использование стороннего сервиса <code>imgix</code> и запустил экспорт.</p><p>Получил новую ошибку:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Pages with `fallback` enabled in `getStaticPaths` can not be exported.</span><br></pre></td></tr></table></figure><p>На этом мое терпение лопнуло.</p><h3 id="Зачем-это-все"><a href="#Зачем-это-все" class="headerlink" title="Зачем это все?"></a>Зачем это все?</h3><p>Перед установкой всего этого зоопарка я думал о том что получится собрать из коробки простое решение где можно будет запустить WP локально, написать новый пост, а затем подтянув эти данные собрать статичный сайт и задеплоить его. В идеале чтобы картинки вытянулись из WP и задеплоились вместе со статичным сайтом. Ну или на худой конец поставить в WP плагин чтобы картинки улетали в S3 и были доступны оттуда.</p><p>Оказалось что из коробки это не работает. Даже если просто воспроизводить шаги из документации то наткнешься на досадные ошибки.</p><hr><p>Как я понял дефолтный юзкейс такой – имеем запущенный и доступный публично WordPress + деплоим Next.js на Vercel. Посты у нас импортируются при сборке Next.js, а картинки видимо планируется тянуть с WP.</p><p>При таком подходе никаких плюсов по сравнению с голым WP я не увидел. Теперь вместо одной точки отказа у нас их две + добавляется шаг по пересборке всей этой балалайке при каждом обновлении контента.</p><p>Для чего-то простого оно не подходит и не работает из коробки, а для сложного нужно все переписывать.</p><hr><p>Если честно, у меня однажды был подобный юзкейс. Где-то в недрах корпоративной сети был установлен WordPress в котором контент-менеджеры создавали новые посты и запускалась некая тулза которая подтягивала все посты через REST API и публиковала эти посты наружу. С таким я сталкивался лишь один раз и больше о таком никто не просил)</p><h3 id="Выводы"><a href="#Выводы" class="headerlink" title="Выводы"></a>Выводы</h3><p>Странно это все. В очередной раз я решил попробовать новый модный инструмент и он не подошел под мои задачи.</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;&lt;img src=&quot;/images/think_meme.png&quot; alt=&quot;think meme&quot;&gt;&lt;/p&gt;
&lt;p&gt;Увидел на днях новость о том что вышел &lt;strong&gt;Next.js 12&lt;/strong&gt; с кучей новых крутых фич и улучшений. А я давно хотел уже поиграться с современным фронтендом на своих pet-проектах, да все никак не находил подходящую задачу под эти инструменты.&lt;/p&gt;</summary>
    
    
    
    
    <category term="ithink" scheme="https://hmdw.me/tags/ithink/"/>
    
  </entry>
  
  <entry>
    <title>Музей М.О.С.Т.</title>
    <link href="https://hmdw.me/most-museum/"/>
    <id>https://hmdw.me/most-museum/</id>
    <published>2021-10-08T02:24:02.000Z</published>
    <updated>2026-03-26T08:54:03.689Z</updated>
    
    <content type="html"><![CDATA[<p>Привет!</p><p>Это ультра-короткая заметка о ныне закрытом музее МОСТ.</p><blockquote><p>Этот пост я написал в августе 2023 года, но выставил ему дату публикации на октябрь 2021 чтобы не нарушать хронологию. За эти неполных два года изменилось очень многое. Тогда главной проблемой было вакцинироваться от ковида и получить QR-код. Музей кстати уже закрылся.</p></blockquote><span id="more"></span><h3 id="Что-это-за-место-и-как-я-туда-попал"><a href="#Что-это-за-место-и-как-я-туда-попал" class="headerlink" title="Что это за место и как я туда попал"></a>Что это за место и как я туда попал</h3><p>Музей находился в гаражном помещении под мостом, откуда и получил свое название. Музей был в основном посвящен американской автокультуре. Там выставлялись культовые масл-кары и другие интересные автомобили.</p><p>Я давно туда хотел попасть и осенью 2021 года мне это удалось.</p><p>Я прилетел к другу в гости на пару дней в Москву и мы с ним скатались в музей.</p><h3 id="Немного-фотографий-из-музея"><a href="#Немного-фотографий-из-музея" class="headerlink" title="Немного фотографий из музея"></a>Немного фотографий из музея</h3><p><img src="/images/moct/moct_2.jpg"><br><img src="/images/moct/moct_3.jpg"><br><img src="/images/moct/moct_4.jpg"><br><img src="/images/moct/moct_5.jpg"><br><img src="/images/moct/moct_6.jpg"><br><img src="/images/moct/moct_7.jpg"><br><img src="/images/moct/moct_8.jpg"><br><img src="/images/moct/moct_9.jpg"><br><img src="/images/moct/moct_10.jpg"><br><img src="/images/moct/moct_11.jpg"><br><img src="/images/moct/moct_12.jpg"><br><img src="/images/moct/moct_13.jpg"><br><img src="/images/moct/moct_14.jpg"><br><img src="/images/moct/moct_15.jpg"><br><img src="/images/moct/moct_16.jpg"><br><img src="/images/moct/moct_17.jpg"><br><img src="/images/moct/moct_18.jpg"><br><img src="/images/moct/moct_19.jpg"><br><img src="/images/moct/moct_20.jpg"></p>]]></content>
    
    
    <summary type="html">&lt;p&gt;Привет!&lt;/p&gt;
&lt;p&gt;Это ультра-короткая заметка о ныне закрытом музее МОСТ.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Этот пост я написал в августе 2023 года, но выставил ему дату публикации на октябрь 2021 чтобы не нарушать хронологию. За эти неполных два года изменилось очень многое. Тогда главной проблемой было вакцинироваться от ковида и получить QR-код. Музей кстати уже закрылся.&lt;/p&gt;
&lt;/blockquote&gt;</summary>
    
    
    
    
    <category term="ithink" scheme="https://hmdw.me/tags/ithink/"/>
    
    <category term="auto" scheme="https://hmdw.me/tags/auto/"/>
    
  </entry>
  
  <entry>
    <title>Weekly Digest RU #4</title>
    <link href="https://hmdw.me/weekly-digest-ru-4/"/>
    <id>https://hmdw.me/weekly-digest-ru-4/</id>
    <published>2021-10-06T12:22:24.000Z</published>
    <updated>2026-03-26T08:54:03.695Z</updated>
    
    <content type="html"><![CDATA[<p>Привет!</p><p>Этот выпуска дайджеста вышел уже через 1.5 месяца. Прогресс 😄</p><span id="more"></span><h3 id="Ретроспектива"><a href="#Ретроспектива" class="headerlink" title="Ретроспектива"></a>Ретроспектива</h3><h5 id="Pet-проекты"><a href="#Pet-проекты" class="headerlink" title="Pet-проекты"></a>Pet-проекты</h5><p>Проекты на GitHub подросли, но прямо чуть-чуть:</p><ul><li><a href="https://github.com/rhamdeew/docker-compose-php">docker-compose-php</a> здесь 39 звезд</li><li><a href="https://github.com/rhamdeew/docker-compose-openvpn">docker-compose-openvpn</a> здесь 9 звезд</li></ul><hr><h5 id="YouTube"><a href="#YouTube" class="headerlink" title="YouTube"></a>YouTube</h5><p>А вот так себя чувствуют скринкасты:</p><ul><li><a href="https://www.youtube.com/watch?v=_1DKwP7YuTY">Разворачиваем WordPress в Docker-compose для локальной веб-разработки</a> - <strong>1728</strong></li><li><a href="https://www.youtube.com/watch?v=8AJMsEQfh-E">Поднимаем OpenVPN при помощи Ansible и Docker за 10 минут</a> - <strong>258</strong></li><li><a href="https://www.youtube.com/watch?v=KApzBc6V6HY">Setup·your·own·OpenVPN-server·with·Ansible·and·Docker</a> - <strong>530</strong></li><li><a href="https://www.youtube.com/watch?v=RCbhcGbUrm4">Настройка терминала в macOS, установка Alacritty, Kitty и консольных утилит.</a> - <strong>101</strong></li><li><a href="https://www.youtube.com/watch?v=w9deHF5pqDs">Мои настройки Vim</a> - <strong>105</strong></li></ul><p>Просмотры растут, но очень медленно. </p><p>Также я собирался записать скринкаст по NeoVim. Нужно это сделать в ближайшее время)</p><p>А еще мы с друзьями задумали проект по оживлению старых Жигулей. Сил и свободного времени пока хватило только на 3 ролика.</p><p>Вот самый первый:</p><iframe width="560" height="315" src="https://www.youtube.com/embed/9XX6_PYYZ5I" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe><hr><h5 id="Инструменты"><a href="#Инструменты" class="headerlink" title="Инструменты"></a>Инструменты</h5><p><strong>VS Code + Remote - SSH</strong></p><p>Понадобилось тут мне поднять копию приложения вместе с довольно большой базой (около 50 гигабайт). Крутить все это на ноутбуке под аккомпанемент шумящих вентиляторов не хотелось и потому я арендовал виртуальную машину в Hetzner Cloud c 4 vCPU, 8Gb RAM и 160 Gb SSD.</p><p>Первые несколько дней я использовал связку Tmux + NeoVim, а порты прокидывал через дополнительное ssh подключение (<code>ssh  -L 8080:127.0.0.1:8080 hetzner</code>).</p><p>Затем подлагивания при редактировании кода стали немного раздражать и я решил попробовать новую фичу VS Code - возможность установить серверную часть VS Code и работать с кодом на удаленной машине локально.</p><p>Когда-то давно я уже использовал VS Code для подобных целей просто монтируя директории по SSHFS. Почему VS Code? Да потому что он один среди аналогичных редакторов не глючил при подобной схеме работы.</p><p>Ну и тут я решил попробовать новую фичу. Установил плагин и увидел список хостов из своего ssh-конфига. Кликнул на нужный и спустя пару десятков секунд увидел сообщение о том что VS Code успешно установлен на удаленном хосте. Затем я просто открыл директорию с кодом на удаленном сервере и приступил за работу.</p><p>Оказалось что пользоваться встроенным терминалом в целом удобно. Понравилась фича с пробрасыванием портов на локальную машину. Здесь это дело пары кликов.</p><p>В итоге я получил полноценное “облачное” рабочее место с выполнением всех необходимых операций в VS Code.</p><p>Разве что для запуска каких то тяжелых тасков я подключался по SSH из Alacritty и запускал на сервере сессию Tmux. Запускать Tmux в маленьком окошке встроенного терминала VS Code я не решился 🙂 </p><hr><h5 id="Код"><a href="#Код" class="headerlink" title="Код"></a>Код</h5><p>Дошли руки до написания тестов для одного старого проекта на Yii2. Жил он себе жил без тестов, а теперь они появились для части функционала 😀</p><p>Оказалось что никаких сложностей здесь нет и тесты для этого фреймворка пишутся вполне себе удобно. Просто я ленился и не начинал.</p><hr><h5 id="Английский"><a href="#Английский" class="headerlink" title="Английский"></a>Английский</h5><p>Duolingo, Tandem и Cake я пока забросил. Прохожу платный курс в Skyeng и иногда смотрю видео с resh.edu.ru (сейчас смотрю видосики за 7 класс средней школы).</p><hr><h5 id="Книги"><a href="#Книги" class="headerlink" title="Книги"></a>Книги</h5><p>Хотел продолжить читать книгу по ООП в Ruby, но никак не могу найти её дома. Нужно заняться этим вопросом.</p><hr><h5 id="macOS"><a href="#macOS" class="headerlink" title="macOS"></a>macOS</h5><p>Узнал про хоткей в macOS который открывает панель с emoji - <code>Control + Command + Spacebar</code></p><p>Забавно что в эмуляторе терминала Kitty при этом запускается консольная тулза для выбора emoji 😉</p><hr><h3 id="Ссылки"><a href="#Ссылки" class="headerlink" title="Ссылки"></a>Ссылки</h3><h5 id="YouTube-1"><a href="#YouTube-1" class="headerlink" title="YouTube"></a>YouTube</h5><p>На канале Lenta.ru вышел новый сезон видео об истории русской поп-музыки. На сей раз рассказывается о поп-музыке с 2001 по 2010 годы. </p><p>Пока что самое интересное для меня видео было про 2006 год:</p><iframe width="560" height="315" src="https://www.youtube.com/embed/6czry1bWIpM" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe><p>Видео с концерта группы Anacondaz на песню “Метафизика”. Песня крутая, монтаж очень классный. Видео полностью погружает в атмосферу концерта. Открыл для себя группу “Заточка”. Классные ребята.</p><iframe width="560" height="315" src="https://www.youtube.com/embed/i8BoPRnUdAw" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe><hr><h3 id="Планы"><a href="#Планы" class="headerlink" title="Планы"></a>Планы</h3><p>Идею со спринтами не закончил, но на третьей неделе переоценил свои возможности и спринт “Ghost in Shell” идет до сих пор (я его продляю так как никак не могу завершить таски по нему). Подход неправильный. Следующие спринты будут с меньшим количеством тасков и жестко зафиксированной датой.</p><h4 id="Обучение"><a href="#Обучение" class="headerlink" title="Обучение"></a>Обучение</h4><p><strong>Tech</strong></p><ul><li>Перепройти курс <a href="https://code-basics.com/languages/javascript">https://code-basics.com/languages/javascript</a></li><li>Закрыть все таски в текущем спринте</li></ul><h4 id="Рекомендации"><a href="#Рекомендации" class="headerlink" title="Рекомендации"></a>Рекомендации</h4><p><strong>Подкасты</strong></p><ul><li>RWpod</li></ul><p><strong>Книги</strong></p><ul><li>Ruby. Объектно ориентированное программирование. Сэнди Метц</li></ul>]]></content>
    
    
    <summary type="html">&lt;p&gt;Привет!&lt;/p&gt;
&lt;p&gt;Этот выпуска дайджеста вышел уже через 1.5 месяца. Прогресс 😄&lt;/p&gt;</summary>
    
    
    
    
    <category term="ithink" scheme="https://hmdw.me/tags/ithink/"/>
    
    <category term="digest" scheme="https://hmdw.me/tags/digest/"/>
    
  </entry>
  
  <entry>
    <title>Weekly Digest #4</title>
    <link href="https://hmdw.me/weekly-digest-4/"/>
    <id>https://hmdw.me/weekly-digest-4/</id>
    <published>2021-10-06T12:19:02.000Z</published>
    <updated>2026-03-26T08:54:03.695Z</updated>
    
    <content type="html"><![CDATA[<p>Hi!</p><p>This issue of the digest came out in 1.5 months. Progress 😄</p><span id="more"></span><h3 id="Retrospective"><a href="#Retrospective" class="headerlink" title="Retrospective"></a>Retrospective</h3><h5 id="Pet-projects"><a href="#Pet-projects" class="headerlink" title="Pet-projects"></a>Pet-projects</h5><p>Projects on GitHub have grown, but just a little bit: </p><ul><li><a href="https://github.com/rhamdeew/docker-compose-php">docker-compose-php</a> here is 39 stars</li><li><a href="https://github.com/rhamdeew/docker-compose-openvpn">docker-compose-openvpn</a> here is 9 stars</li></ul><hr><h5 id="YouTube"><a href="#YouTube" class="headerlink" title="YouTube:"></a>YouTube:</h5><p>And here my statistics about screencasts:</p><ul><li><a href="https://www.youtube.com/watch?v=_1DKwP7YuTY">How to run WordPress with Docker-compose for local development</a> - <strong>1728</strong></li><li><a href="https://www.youtube.com/watch?v=8AJMsEQfh-E">Setup·your·own·OpenVPN-server·with·Ansible·and·Docker RU</a> - <strong>258</strong></li><li><a href="https://www.youtube.com/watch?v=KApzBc6V6HY">Setup·your·own·OpenVPN-server·with·Ansible·and·Docker</a> - <strong>530</strong></li><li><a href="https://www.youtube.com/watch?v=RCbhcGbUrm4">macOS terminal setup - Alacritty, Kitty and  CLI-utils</a> - <strong>101</strong></li><li><a href="https://www.youtube.com/watch?v=w9deHF5pqDs">My Vim settings</a> - <strong>105</strong></li></ul><p>Views are growing, but very slowly.</p><p>Also, I have a plan to record a screencast about my NeoVim settings. I need to record it soon.</p><p>And also We (I and my Friends) started a YouTube project about restoring a classic LADA car. So far, we only had enough strength for 3 videos 😁</p><p>Here is the first video:</p><iframe width="560" height="315" src="https://www.youtube.com/embed/9XX6_PYYZ5I" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe><hr><h5 id="Tools"><a href="#Tools" class="headerlink" title="Tools"></a>Tools</h5><p><strong>VS Code + Remote - SSH</strong></p><p>I needed to run a local copy of a web application with a huge database (about 50 Gb).  I didn’t want to spin all this on a laptop to the accompaniment of noisy fans, so I rented a virtual machine in the Hetzner Cloud with 4 vCPU, 8Gb RAM and 160 Gb SSD.</p><p>For the first few days, I used a bundle of Tmux + NeoVim, and passed the ports through an additional ssh connection (<code>ssh -L 8080: 127.0.0.1: 8080 hetzner</code>).</p><p>Then the lags when editing the code became a little annoying and I decided to try a new feature of VS Code - the ability to install the server-side of VS Code and work with the code on a remote machine locally.</p><p>Once upon a time I already used VS Code for similar purposes simply by mounting directories via SSHFS. Why VS Code? Yes, because he alone among similar editors did not bug with such a scheme of work.</p><p>Well, and then I decided to try a new feature. I installed the plugin and saw a list of hosts from my ssh config. I clicked on the desired one and after a couple of tens of seconds, I saw a message stating that VS Code was successfully installed on the remote host. Then I just opened the code directory on the remote server and got to work.</p><p>It turned out that it is generally convenient to use the built-in terminal. I liked the feature with port forwarding to the local machine. This is done in just a couple of clicks.</p><p>As a result, I got a full-fledged “cloud” workplace in VS Code.</p><p>But to run some heavy tasks, I am connecting via SSH from Alacritty and starting a Tmux session on the server. I did not dare to launch Tmux in a small window of the built-in terminal of VS Code 🙂</p><hr><h5 id="Code"><a href="#Code" class="headerlink" title="Code"></a>Code</h5><p>I started to write tests for one old project in Yii2. This project lived a long time without tests, and now they have appeared for part of the functionality 😀</p><p>It turns out that writing tests for this framework are very convenient. And I was just lazy and did not write tests.</p><hr><h5 id="English"><a href="#English" class="headerlink" title="English"></a>English</h5><p>I have given up Duolingo, Tandem and Cake for now. I take a paid course at Skyeng and sometimes watch videos from resh.edu.ru (now I watch videos for the 7th grade of high school).</p><hr><h5 id="Books"><a href="#Books" class="headerlink" title="Books"></a>Books</h5><p>I wanted to read a book about OOP in Ruby, but I lost this book somewhere at home.</p><hr><h5 id="macOS"><a href="#macOS" class="headerlink" title="macOS"></a>macOS</h5><p>I learned about hotkey that opens a panel with emoji’s - <code>Control + Command + Spacebar</code></p><hr><h3 id="Links"><a href="#Links" class="headerlink" title="Links"></a>Links</h3><h5 id="YouTube-1"><a href="#YouTube-1" class="headerlink" title="YouTube"></a>YouTube</h5><p>A new season of video about the history of Russian pop music has been released on the Lenta.ru channel. This time it is about pop music from 2001 to 2010.</p><p>So far, the most interesting video for me was about 2006: </p><iframe width="560" height="315" src="https://www.youtube.com/embed/6czry1bWIpM" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe><p>Video from the concert of the group Anacondaz for the song “Metaphysics”. The song is cool, the editing is very cool. The video completely immerses you in the atmosphere of the concert. I discovered the “Zatochka” group. Nice guys. </p><iframe width="560" height="315" src="https://www.youtube.com/embed/i8BoPRnUdAw" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe><hr><h3 id="Plans"><a href="#Plans" class="headerlink" title="Plans"></a>Plans</h3><p>I did not cancel the idea with sprints, but in the third week I overestimated my capabilities and the sprint “Ghost in Shell” is still going on (I am extending it since I can not complete tasks on it in any way). The approach is wrong. The next sprints will be with fewer tasks and a fixed date. </p><h4 id="Education"><a href="#Education" class="headerlink" title="Education"></a>Education</h4><p><strong>Tech</strong></p><ul><li>I need to repeat the course <a href="https://code-basics.com/languages/javascript">https://code-basics.com/languages/javascript</a></li><li>I need to close all tasks in the current sprint</li></ul><h4 id="Recommendations"><a href="#Recommendations" class="headerlink" title="Recommendations"></a>Recommendations</h4><p><strong>Podcasts</strong></p><ul><li>RWpod</li></ul><p><strong>Books</strong></p><ul><li>Practical Object-Oriented Design in Ruby: An Agile Prime</li></ul>]]></content>
    
    
    <summary type="html">&lt;p&gt;Hi!&lt;/p&gt;
&lt;p&gt;This issue of the digest came out in 1.5 months. Progress 😄&lt;/p&gt;</summary>
    
    
    
    
    <category term="ithink" scheme="https://hmdw.me/tags/ithink/"/>
    
    <category term="english" scheme="https://hmdw.me/tags/english/"/>
    
    <category term="digest" scheme="https://hmdw.me/tags/digest/"/>
    
  </entry>
  
  <entry>
    <title>Weekly Digest RU #3</title>
    <link href="https://hmdw.me/weekly-digest-ru-3/"/>
    <id>https://hmdw.me/weekly-digest-ru-3/</id>
    <published>2021-08-08T01:08:19.000Z</published>
    <updated>2026-03-26T08:54:03.695Z</updated>
    
    <content type="html"><![CDATA[<p>Привет!</p><p>Это новый выпуск дайджеста. Опять придется мучительно вспоминать чем же я занимался эти 3 месяца)</p><span id="more"></span><h3 id="Ретроспектива"><a href="#Ретроспектива" class="headerlink" title="Ретроспектива"></a>Ретроспектива</h3><h5 id="Pet-проекты"><a href="#Pet-проекты" class="headerlink" title="Pet-проекты"></a>Pet-проекты</h5><p>Проекты на GitHub совсем немного подросли:</p><ul><li><a href="https://github.com/rhamdeew/docker-compose-php">docker-compose-php</a> здесь 38 звезд</li><li><a href="https://github.com/rhamdeew/docker-compose-openvpn">docker-compose-openvpn</a> здесь 7 звезд</li></ul><p>Пора уже пилить новый и более полезный опенсорс 🙂</p><hr><h5 id="Блог"><a href="#Блог" class="headerlink" title="Блог"></a>Блог</h5><p>В конце мая в блоге появился новый пост в блоге о том как я посетил автомобильную экспозицию на ВДНХ - <a href="/mechtamoskvicha/"><strong>«Выставка «Мечта Москвича»</strong></a></p><hr><h5 id="Инструменты"><a href="#Инструменты" class="headerlink" title="Инструменты"></a>Инструменты</h5><p><strong>VSCodium</strong> &#x3D;&gt; <strong>Sublime Text 3</strong> &#x3D;&gt; <strong>NeoVim 0.44</strong> &#x3D;&gt; <strong>RubyMine</strong> &#x3D;&gt; <strong>NeoVim 0.5</strong></p><p>Вот такие интересные метаморфозы) Я попробовал VSCodium и заметил что в некоторых случаях набор текста начинает сильно тормозить. Скорее всего проблема в плагине реализующем режим Vim. Немного огорчившись (в остальном VSCodium реально удобный) я попробовал старый добрый ST3.</p><p>Sublime Text 3 работает шустро, памяти ест мало, режим Vim из коробки. Работать можно, но есть ощущение что саблайм уже сдал свои позиции. Плагинов у него сильно меньше и разрабатываются они не так шустро. Поддержки LSP насколько я понимаю нет. Но удалять его у меня не поднялась рука. Оставил саблайм на всякий случай.</p><p>Далее я перекатился обратно на Neovim 0.44. Тут без каких-либо изменений.</p><p>Потом я попробовал денек поработать в RubyMine. Тут как и в остальных IDE от JetBrains. Сперва долго индексирует проект, а потом дает кучу подсказок и подсвечивает всё и вся. Работает все хорошо, да и проблем со шрифтами в маке нет. Но все равно не то пальто)</p><p>Случайно узнал о том что наконец-то зарелизился NeoVim 0.5 с нативной поддержкой LSP, поддержкой нового конфига init.lua, а также кучей новых плагинов написаных на Lua. Вот мой новый <a href="https://github.com/rhamdeew/dotfiles/blob/master/nvim/init.lua">init.lua</a></p><p><strong>Веб-браузер Safari</strong></p><p>В прошлом дайджесте я писал о том как решил попробовать браузер Brave. В целом он мне понравился, но оказался не так удобен как Firefox. Да и история с майнингом криптовалют браузером мне не понравилась.</p><p>Затем я решил попробовать Safari в качестве основного браузера. Да, батарейка при работе в Safari живет на макбуке чуть дольше, но браузер сильно уступает по функционалу Chrome и Firefox.</p><p>Я думал недельку пожить на сафари, но протерпел день или два. И я снова на Firefox 🙂</p><p><strong>Broot</strong></p><p><img src="/images/broot.png" alt="Broot"></p><p>Добавил в копилку установленных cli-утилит на rust новый файл-менеджер под названием «broot». Штука удобная, особенно мне понравился ключик “-w” (на скрине) отображающий директории отсортированными по занимаемому месту.</p><hr><h5 id="Видео"><a href="#Видео" class="headerlink" title="Видео"></a>Видео</h5><p><strong>Скринкаст</strong></p><p>В прошлом дайджесте я писал про скринкаст про настройку OpenVPN и про видео с переводом татарской песни.</p><p>Обновленные результаты:</p><ul><li><a href="https://youtu.be/KApzBc6V6HY">Setup your own OpenVPN-server with Ansible and Docker</a> - <strong>414</strong></li><li><a href="https://youtu.be/8AJMsEQfh-E">Поднимаем OpenVPN при помощи Ansible и Docker за 10 минут</a> - <strong>166</strong></li><li><a href="https://youtu.be/F3_5KjXYj1c">Перевод песни “Чаба поезд, чаба” с татарского на русский</a> - <strong>105</strong></li></ul><p>Также я записал 2 новых видео. И они практически не набрали никаких просмотров 🙂</p><p><strong>Выставка «Мечта Москвича»</strong>. Тут <strong>17</strong> умопомрачительных просмотров 🙂</p><iframe width="560" height="315" src="https://www.youtube.com/embed/L3DyHkgJV2M" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe><p><strong>Настройка терминала в macOS</strong>. Тут уже побольше, целых <strong>20</strong> просмотров!</p><iframe width="560" height="315" src="https://www.youtube.com/embed/RCbhcGbUrm4" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe><hr><h5 id="Английский"><a href="#Английский" class="headerlink" title="Английский"></a>Английский</h5><p><strong>Duolingo</strong> – на это приложение я честно говоря подзабил. Всего 144 короны по итогу. Платную подписку пока что отменил. Посмотрим как будет дальше.</p><p><strong>Skyeng</strong> - купил платную подписку на 16 уроков и уже практически прошел их. Нужно поторопиться с изучением английского! Тем более что компания предложила компенсировать мне стоимость уроков. Спасибо!</p><p><strong>HelloTalk</strong> – я попробовал использовать это приложение и удалил его по итогу так как нашел более крутой аналог - Tandem. В HelloTalk очень мало пользователей и какие-то странные ограничения в бесплатной версии.</p><p><strong>Tandem</strong> - тут принцип такой же как в HelloTalk. Показывается список пользователей желающих поболтать и улучшить владение языком и между делом показываются баннеры. Есть функционал текстовых сообщений, аудиосообщений, аудио и видеозвонков. Пользователей тут в разы больше и люди не прочь поболтать. Вот он тот самый интернет о котором я мечтал - с возможностью просто поболтать с человеком на другом конце земного шара. В основном мне пока попадались только адекватные собеседники)</p><p><strong>Resh.edu.ru</strong> - тут я начал проходить школьную программу по английскому языку. В школе я изучал немецкий, поэтому это будет не лишним. Начал с 5 класса. Платформа кстати крутая, видеоуроки тут бесплатные и качественные.</p><h5 id="Книги"><a href="#Книги" class="headerlink" title="Книги"></a>Книги</h5><p><strong>Атомные привычки</strong> - эту книгу я прочитал)</p><hr><h3 id="Ссылки"><a href="#Ссылки" class="headerlink" title="Ссылки"></a>Ссылки</h3><h5 id="YouTube"><a href="#YouTube" class="headerlink" title="YouTube"></a>YouTube</h5><p><strong>In the Komarovo</strong></p><iframe width="560" height="315" src="https://www.youtube.com/embed/rv44-VSFKWw" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe><p>На видео лицо Игоря Скляра заменено на лицо Честера Беннингтона. Mashup в итоге получился крутой, а песня обрела новый грустный смысл.</p><hr><h3 id="Планы"><a href="#Планы" class="headerlink" title="Планы"></a>Планы</h3><p>На этой неделе я решил изменить подход с планами. У меня уже есть аккаунт в YouTrack в котором я как-то пытался трекать и создавать себе задачки по саморазвитию. В итоге я создал пару десятков тасков и они висели.</p><p>На этой неделе я решил попробовать недельные спринты. Я создал спринты и раскидал по ним подвисшие и новые задачки. Каждому спринту решил дать название фильма. Например сейчас идет спринт <strong>Project X</strong> &#x3D;)))</p><p><img src="/images/project_x.png" alt="YouTrack sprint"></p><h4 id="Обучение"><a href="#Обучение" class="headerlink" title="Обучение"></a>Обучение</h4><p><strong>Tech</strong></p><ul><li>Курс <a href="https://code-basics.com/languages/ruby">https://code-basics.com/languages/ruby</a> еще выпущен не полностью. Я прошел все уроки которые на данный момент опубликованы.</li><li>Закрыть все таски в спринте 🙂</li></ul><h4 id="Рекомендации"><a href="#Рекомендации" class="headerlink" title="Рекомендации"></a>Рекомендации</h4><p><strong>Подкасты</strong></p><ul><li>RWpod</li></ul><p><strong>Книги</strong></p><ul><li>Ruby. Объектно ориентированное программирование. Сэнди Метц</li></ul>]]></content>
    
    
    <summary type="html">&lt;p&gt;Привет!&lt;/p&gt;
&lt;p&gt;Это новый выпуск дайджеста. Опять придется мучительно вспоминать чем же я занимался эти 3 месяца)&lt;/p&gt;</summary>
    
    
    
    
    <category term="ithink" scheme="https://hmdw.me/tags/ithink/"/>
    
    <category term="digest" scheme="https://hmdw.me/tags/digest/"/>
    
  </entry>
  
  <entry>
    <title>Weekly Digest #3</title>
    <link href="https://hmdw.me/weekly-digest-3/"/>
    <id>https://hmdw.me/weekly-digest-3/</id>
    <published>2021-08-08T01:07:10.000Z</published>
    <updated>2026-03-26T08:54:03.695Z</updated>
    
    <content type="html"><![CDATA[<p>Hello!</p><p>This is a new issue of Digest. Again, I will have to painfully remember what I was doing these 3 months)</p><span id="more"></span><h3 id="Retrospective"><a href="#Retrospective" class="headerlink" title="Retrospective"></a>Retrospective</h3><h5 id="Pet-projects"><a href="#Pet-projects" class="headerlink" title="Pet-projects"></a>Pet-projects</h5><p>Projects on GitHub have grown a little:</p><ul><li><a href="https://github.com/rhamdeew/docker-compose-php">docker-compose-php</a> here are 38 stars</li><li><a href="https://github.com/rhamdeew/docker-compose-openvpn">docker-compose-openvpn</a> here are 7 stars</li></ul><p>It’s time for me to create new open-source projects 🙂</p><hr><h5 id="Blog"><a href="#Blog" class="headerlink" title="Blog"></a>Blog</h5><p>At the end of May, a new blog post appeared on the blog about how I visited the automobile exposition at VDNKh - <a href="/mechtamoskvicha/"><strong>Exhibition “Moskvitch Dream”</strong></a></p><hr><h5 id="Tools"><a href="#Tools" class="headerlink" title="Tools"></a>Tools</h5><p><strong>VSCodium</strong> &#x3D;&gt; <strong>Sublime Text 3</strong> &#x3D;&gt; <strong>NeoVim 0.44</strong> &#x3D;&gt; <strong>RubyMine</strong> &#x3D;&gt; <strong>NeoVim 0.5</strong></p><p>These are such interesting metamorphoses) I tried VSCodium and noticed that in some cases typing starts to slow down. Most likely the problem is in the plugin implementing Vim mode. A bit upset (the rest of the VSCodium is really comfortable), I tried the good old ST3.</p><p>Sublime Text 3 works smartly, eats little memory, Vim mode out of the box. You can work, but there is a feeling that the “sublime” has already surrendered its positions. He has much fewer plugins and they are not developed so quickly. As far as I understand, there is no LSP support. But my hand did not rise to remove it. I left the sublime just in case.</p><p>Then I rolled back to Neovim 0.44. Here without any changes.</p><p>Then I tried RubyMine for a day. Here, as in other IDEs from JetBrains. First, it indexes the project for a long time, and then gives a bunch of tips and highlights everything and everyone. Everything works well, and there are no problems with fonts in the poppy. But still the wrong coat)</p><p>I accidentally found out that NeoVim 0.5 has finally been released with native LSP support, support for the new init.lua config, and a bunch of new plugins written in Lua. Here is my new [init.lua] (<a href="https://github.com/rhamdeew/dotfiles/blob/master/nvim/init.lua">https://github.com/rhamdeew/dotfiles/blob/master/nvim/init.lua</a>)</p><p>** Safari web browser **</p><p>In the last digest, I wrote about how I decided to try the Brave browser. In general, I liked it, but it was not as user-friendly as Firefox. And I didn’t like the story of cryptocurrency mining by the browser.</p><p>Then I decided to try Safari as my primary browser. Yes, when working in Safari, the battery lives on a MacBook a little longer, but the browser is much inferior in functionality to Chrome and Firefox.</p><p>I thought of living on a safari for a week, but endured a day or two. And I’m back on Firefox 🙂</p><p>** Broot **</p><p><img src="/images/broot.png" alt="Broot"></p><p>Added a new file manager called “broot” to the list of installed cli utilities for rust. The thing is convenient, I especially liked the “-w” argument (on the screen), which displays the directories sorted by the space they occupy.</p><hr><h5 id="Video"><a href="#Video" class="headerlink" title="Video"></a>Video</h5><p><strong>Screencast</strong></p><p>In the last digest, I wrote about a screencast about setting up OpenVPN and about a video with a translation of a Tatar song.</p><p>Updated results:</p><ul><li><a href="https://youtu.be/KApzBc6V6HY">Setup your own OpenVPN-server with Ansible and Docker</a> - <strong>414</strong></li><li><a href="https://youtu.be/8AJMsEQfh-E">Russian version</a> - <strong>166</strong></li><li><a href="https://youtu.be/F3_5KjXYj1c">Video about Tatar song</a> - <strong>105</strong></li></ul><p>I also recorded 2 new videos. And they almost didn’t get any views 🙂</p><p><strong>Exhibition “Moskvich’s Dream”</strong>. Here <strong>17</strong> breathtaking views 🙂</p><iframe width="560" height="315" src="https://www.youtube.com/embed/L3DyHkgJV2M" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe><p><strong>Terminal setup in macOS</strong>. There are already more, as much as <strong>20</strong> views!</p><iframe width="560" height="315" src="https://www.youtube.com/embed/RCbhcGbUrm4" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe><hr><h5 id="English"><a href="#English" class="headerlink" title="English"></a>English</h5><p><strong>Duolingo</strong> - I honestly forgot about this application. A total of 144 crowns in total. I have cancelled my paid subscription so far. Let’s see what happens next.</p><p><strong>Skyeng</strong> - I bought a paid subscription for 16 lessons and have almost completed them. We need to hurry up with learning English! Moreover, the company offered to compensate me for the cost of the lessons. Thank you!</p><p><strong>HelloTalk</strong> - I tried using this application and deleted it as a result, as I found a cooler analogue - Tandem. HelloTalk has very few users and some strange restrictions in the free version.</p><p><strong>Tandem</strong> - the principle is the same as in HelloTalk. A list of users who want to chat and improve their language skills is shown and banners are shown in between. There is a functionality of text messages, audio messages, audio and video calls. There are many more users here and people are not averse to chatting. This is the Internet that I dreamed of - with the ability to just chat with a person on the other side of the world. Basically, so far only adequate interlocutors have come across to me)</p><p><strong>Resh.edu.ru</strong> - here I started to go through the school curriculum in English. I studied German at school, so it won’t be superfluous. I started with the 5th grade. By the way, the platform is cool, video tutorials here are free and of high quality.</p><h5 id="Books"><a href="#Books" class="headerlink" title="Books"></a>Books</h5><p><strong>Atomic Habits</strong> - I have read this book already</p><hr><h3 id="Links"><a href="#Links" class="headerlink" title="Links"></a>Links</h3><h5 id="YouTube"><a href="#YouTube" class="headerlink" title="YouTube"></a>YouTube</h5><p><strong>In the Komarovo</strong></p><iframe width="560" height="315" src="https://www.youtube.com/embed/rv44-VSFKWw" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe><p>In the video, Igor Sklyar’s face is replaced with the face of Chester Bennington. The mashup ended up being cool and the song took on a new sad meaning.</p><hr><h3 id="Plans"><a href="#Plans" class="headerlink" title="Plans"></a>Plans</h3><p>This week I decided to change my approach with plans. I already have an account in YouTrack in which I somehow tried to track and create self-development tasks for myself. As a result, I created a couple of dozen tasks and they hung.</p><p>This week I decided to try weekly sprints. I have created sprints and scattered the hanging and new issues around them. I decided to give each sprint a movie title. For example, now there is a sprint ** Project X ** &#x3D;)))</p><p><img src="/images/project_x.png" alt="YouTrack sprint"></p><h4 id="Education"><a href="#Education" class="headerlink" title="Education"></a>Education</h4><p><strong>Tech</strong></p><ul><li>The course <a href="https://code-basics.com/languages/ruby">https://code-basics.com/languages/ruby</a> has not yet been fully released.</li><li>I need to close all tasks in the sprint 🙂</li></ul><h4 id="Recommendations"><a href="#Recommendations" class="headerlink" title="Recommendations"></a>Recommendations</h4><p><strong>Podcasts</strong></p><ul><li>RWpod</li></ul><p><strong>Books</strong></p><ul><li>Practical Object-Oriented Design in Ruby: An Agile Prime</li></ul>]]></content>
    
    
    <summary type="html">&lt;p&gt;Hello!&lt;/p&gt;
&lt;p&gt;This is a new issue of Digest. Again, I will have to painfully remember what I was doing these 3 months)&lt;/p&gt;</summary>
    
    
    
    
    <category term="ithink" scheme="https://hmdw.me/tags/ithink/"/>
    
    <category term="english" scheme="https://hmdw.me/tags/english/"/>
    
    <category term="digest" scheme="https://hmdw.me/tags/digest/"/>
    
  </entry>
  
</feed>
