<?xml version="1.0" encoding="utf-8" ?><rss version="2.0" xmlns:tt="http://teletype.in/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>Samoilenko Yuri</title><generator>teletype.in</generator><description><![CDATA[Lead developer and technical writer @ RNDSOFT  // Ruby 💕 

Тут пишу про интересное, чем занимаюсь на работе - IT, проектирование, разработка...]]></description><image><url>https://teletype.in/files/1c/38/1c3810ba-96a6-4a5b-aff9-c17ae28dd44a.png</url><title>Samoilenko Yuri</title><link>https://teletype.in/@jerry_ru</link></image><link>https://teletype.in/@jerry_ru?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=jerry_ru</link><atom:link rel="self" type="application/rss+xml" href="https://teletype.in/rss/jerry_ru?offset=0"></atom:link><atom:link rel="next" type="application/rss+xml" href="https://teletype.in/rss/jerry_ru?offset=10"></atom:link><atom:link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></atom:link><pubDate>Fri, 07 Aug 2026 03:39:59 GMT</pubDate><lastBuildDate>Fri, 07 Aug 2026 03:39:59 GMT</lastBuildDate><item><guid isPermaLink="true">https://teletype.in/@jerry_ru/x7lDs3PQUub</guid><link>https://teletype.in/@jerry_ru/x7lDs3PQUub?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=jerry_ru</link><comments>https://teletype.in/@jerry_ru/x7lDs3PQUub?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=jerry_ru#comments</comments><dc:creator>jerry_ru</dc:creator><title>Наконец-то GitHub Pages (и GitLab Pages — для симметрии)</title><pubDate>Sun, 02 Aug 2026 12:22:16 GMT</pubDate><media:content medium="image" url="https://img4.teletype.in/files/30/de/30deb93e-9071-4a8a-90b8-d5fce174891f.png"></media:content><category>блог</category><description><![CDATA[<img src="https://img3.teletype.in/files/22/f5/22f5b394-0142-43f3-96d5-dc955e05ff2f.jpeg"></img>Давно присматривался к GitHub Pages, но руки никак не доходили.]]></description><content:encoded><![CDATA[
  <figure id="11Vl" class="m_column">
    <img src="https://img3.teletype.in/files/22/f5/22f5b394-0142-43f3-96d5-dc955e05ff2f.jpeg" width="1280" />
  </figure>
  <p id="x317">Давно присматривался к <a href="https://pages.github.com/" target="_blank">GitHub Pages</a>, но руки никак не доходили.</p>
  <p id="ScVs">Внезапно решил навести порядок на площадках, где публикую статьи и заметки, и решился-таки на статику (как доп. площадку).</p>
  <h2 id="sXJG">Всякие разные Pages</h2>
  <p id="aLg7"><code>GitHub Pages</code> нативно поддерживает <a href="https://jekyllrb.com/" target="_blank">Jekyll</a> — пушнул в репозиторий, и сайт сам собрался. Никаких докеров, никаких CI/CD (ну почти), никаких серверов.</p>
  <p id="kS47">А чтобы было совсем хорошо, решил поддерживать и <code>GitLab Pages</code> — для симметрии. Чтоб не привязываться к одной платформе и чтоб было куда переключиться, если что. Но тут без CI/CD никак.</p>
  <h3 id="BHzt">Структура репозитория и настройки</h3>
  <p id="lUAS">Репозиторий называется как положено — <code><a href="https://kinnalru.github.io/" target="_blank">kinnalru.github.io</a></code> - тогда он будет доступен по этому доменному имени. Gemfile:</p>
  <pre id="CqgC" data-lang="ruby">gem &quot;github-pages&quot;, group: :jekyll_plugins

group :jekyll_plugins do
  gem &quot;jekyll-feed&quot;
  gem &quot;jekyll-sitemap&quot;
end</pre>
  <p id="TPpW">Обратите внимание на <code>github-pages</code> — это мета-гем, который тянет <code>Jekyll</code> и все нужные плагины в совместимых версиях. Никаких &quot;а у меня работает&quot;, потому что <code>GitHub Pages</code> собирает ровно тем же набором.</p>
  <p id="CbvU">Заполняем конфигурацию <a href="https://github.com/kinnalru/kinnalru.github.io/blob/master/_config.yml" target="_blank">_config.yml</a> где выбираем тему, плагины, и всякие настройки. Тема <a href="https://github.com/jekyll/minima" target="_blank">minima</a>  — адаптивная под светлую/темную тему. И сразу же в конфиге ссылочки на все свои ресурсы: <strong>GitLab</strong>, <strong>GitHub</strong>, <strong>Teletype</strong>, <strong>Telegram</strong>, <strong>Dev.to</strong>. Чтоб гость зашел и сразу понял, где меня искать, а то вдруг нигде раньше не нашел ссылок :)</p>
  <h3 id="pYmg">GitLab Pages — симметрия ради симметрии</h3>
  <p id="GR3L">Для <code>GitLab Pages</code> пришлось чуть заморочиться. <code>GitHub Pages</code> собирает <code>Jekyll</code> сам, а <code>GitLab</code> — нет, нужен <a href="https://github.com/kinnalru/kinnalru.github.io/blob/master/.gitlab-ci.yml" target="_blank">.gitlab-ci.yml</a>:</p>
  <pre id="Jshq" data-lang="yaml">image: ruby:3.2-slim

build:
  script:
    - apt-get update -y; apt-get install -y build-essential
    - bundle
    - JEKYLL_ENV=production bundle exec jekyll build --config _config.yml,_config.gitlab.yml -d ./public/
  pages:
    publish: public
  rules:
    - if: ($CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH) &amp;&amp; ($CI_PIPELINE_SOURCE != &quot;schedule&quot;)</pre>
  <p id="F985">И отдельный <code>_config.gitlab.yml</code> — переопределяем только <strong>url</strong>:</p>
  <pre id="hDwW" data-lang="yaml">url: https://kinnalru.gitlab.io</pre>
  <p id="ru5a"><code>Jekyll</code> умеет мержить конфиги при сборке: <code>--config _config.yml,_config.gitlab.yml</code>. Всё, что идет справа, переопределяет то, что слева.</p>
  <h3 id="W4iw">Чтоб было &quot;хорошо&quot; — намазал сверху RSS и Sitemap</h3>
  <p id="IHX4">Просто собирать HTML — это скучно. Мне нужно, чтоб поисковики индексировали, а читатели подписывались. Поэтому сверху еще и:</p>
  <ul id="03IC">
    <li id="OGtJ">ставим плагин <code>jekyll-sitemap</code>, и он автоматически генерирует <code>/sitemap.xml</code>. Но я не доверяю автоматике до конца, поэтому в <code>_includes/custom-head.html</code> добавил явную ссылку:</li>
  </ul>
  <pre id="F4lT" data-lang="html">  &lt;link rel=&quot;sitemap&quot; type=&quot;application/xml&quot; title=&quot;Sitemap&quot; href=&quot;/sitemap.xml&quot; /&gt;</pre>
  <ul id="9k0F">
    <li id="TiWg">ставим плагин <code>jekyll-feed</code> — он генерирует базовый <code>/feed.xml</code></li>
    <li id="d7hN">но я решил, что хочу RSS с полным контентом статей и расширенными настройками, поэтому написал свой шаблон <a href="https://github.com/kinnalru/kinnalru.github.io/blob/master/feed.xml" target="_blank">feed.xml</a></li>
  </ul>
  <h3 id="i8A8">Кастомные шаблоны</h3>
  <p id="aN2q">Стандартная minima хороша, но мне хотелось, чтоб на каждом посте была ссылка на оригинальную публикацию. Переопределил <code>_layouts/post.html</code> и <code>_layouts/home.html</code> — добавил <strong>canonical_url</strong> и пометку <em>&quot;Моя публикация на ...&quot;</em>. Теперь зеркало не выглядит как украденный контент, а как полноценный агрегатор.</p>
  <h3 id="M5aZ">Что в итоге?</h3>
  <p id="fMGK">В результате мы имеем:<br />- Статический сайт на <code>Jekyll</code>, который собирается автоматически<br />- Зеркало на <code>GitHub Pages</code> — <a href="https://kinnalru.github.io" target="_blank">kinnalru.github.io</a><br />- Зеркало на <code>GitLab Pages</code> — <a href="https://kinnalru.gitlab.io" target="_blank">kinnalru.gitlab.io</a><br />- <code>RSS</code> с полным контентом для подписчиков и дальнейшей обработки<br />- <code>Sitemap</code> для поисковиков<br />- Все ссылки на мои ресурсы в одном месте</p>
  <blockquote id="rLBe">Keep it simple, stupid — но при этом всё должно работать.</blockquote>
  <hr />
  <p id="3DB6" data-align="center"><a href="https://teletype.in/@jerry_ru" target="_blank">Teletype</a> | <a href="https://t.me/architdev" target="_blank">Архи DEV</a> | <a href="https://dev.to/kinnalru" target="_blank">Dev.to</a> | <a href="https://github.com/kinnalru" target="_blank">GitHub</a> | <a href="https://kinnalru.blogspot.com" target="_blank">Blogger</a></p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@jerry_ru/scWep5L3rOI</guid><link>https://teletype.in/@jerry_ru/scWep5L3rOI?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=jerry_ru</link><comments>https://teletype.in/@jerry_ru/scWep5L3rOI?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=jerry_ru#comments</comments><dc:creator>jerry_ru</dc:creator><title>Опять синхронизация, но теперь блогов</title><pubDate>Fri, 31 Jul 2026 13:26:25 GMT</pubDate><media:content medium="image" url="https://img3.teletype.in/files/a3/0e/a30e23dc-f04e-4686-98b7-c9cc77fdc36c.png"></media:content><description><![CDATA[<img src="https://img2.teletype.in/files/1d/3f/1d3f9bce-2b33-4ef8-8aaa-98be6dd4ad1c.jpeg"></img>Есть у меня небольшой фетиш по синхронизации… И в очередной раз, подойдя к проблеме блога, я наконец собрал разрозненные куски в единую систему :)]]></description><content:encoded><![CDATA[
  <p id="xxAX">Есть у меня небольшой фетиш по синхронизации… И в очередной раз, подойдя к проблеме блога, я наконец собрал разрозненные куски в единую систему :)</p>
  <h3 id="Bzpm">Кто к нам с чем и зачем?</h3>
  <p id="0elG">За годы у меня накопилась целая коллекция площадок, куда я (и не только я) что-то публикую:</p>
  <ul id="coHe">
    <li id="8Dnx"><strong>Личный блог</strong> на <a href="https://teletype.in/@jerry_ru" target="_blank">Teletype</a> — сюда пишу руками</li>
    <li id="IW7r"><strong>Корпоративный блог</strong> <a href="https://blog.rnds.pro/" target="_blank">blog.rnds.pro</a> — пишем вместе с коллегами</li>
    <li id="PNP7"><strong>Dev.to</strong> — личный аккаунт <a href="https://dev.to/kinnalru" target="_blank">kinnalru</a> и корпоративная организация <a href="https://dev.to/rnds" target="_blank">RNDSOFT</a></li>
    <li id="Nlyk"><strong>GitHub Pages</strong> — <a href="https://kinnalru.github.io" target="_blank">kinnalru.github.io</a></li>
    <li id="oUj5"><strong>Blogger (Blogspot)</strong> — <a href="https://kinnalru.blogspot.com" target="_blank">kinnalru.blogspot.com</a></li>
  </ul>
  <p id="GueE">Раньше тут обитал ещё и <s>Hashnode</s>, но теперь у этих негодяев платное API для публикации — пусть сами к себе пишут.</p>
  <h3 id="5cKI">Как теперь работает схема</h3>
  <ol id="FlmS">
    <li id="1FIQ">Пишу статью вручную в Teletype (личное) или в корпоративный блог.</li>
    <li id="gq2i">Статьи автоматически улетают в черновики <code>Dev.to</code> через <code>RSS</code></li>
    <li id="IMr6">Перед публикацией на Dev.to я добавляю <strong>FrontMatter</strong><code>original_author=kinnalru</code>.</li>
    <li id="KD11">Публикуем: личные — от себя, корпоративные — от организации <a href="https://dev.to/rnds" target="_blank">RNDSOFT</a></li>
    <li id="DQnm">По крону (через GitLab Pipelines) запускается скрипт-синхронизатор, который забирает только мои статьи (по фильтру <code>original_author</code>) и публикует их дальше: </li>
  </ol>
  <ul id="VEYI">
    <ul id="z8Be">
      <li id="a00a">на GitHub Pages</li>
      <li id="aqQx">на Blogger</li>
    </ul>
  </ul>
  <h3 id="RRov">Итог</h3>
  <p id="U5To">Написал небольшой синхронизатор, который делает всё ровно так, как мне нужно. Теперь дело за малым — писать сами статьи :)</p>
  <hr />
  <p id="Zupr" data-align="center"><a href="https://teletype.in/@jerry_ru" target="_blank">Teletype </a>| <a href="https://t.me/architdev" target="_blank">Архи DEV</a> | <a href="https://dev.to/kinnalru" target="_blank">Dev.to</a> | <a href="https://kinnalru.github.io" target="_blank">GitHub</a> | <a href="https://kinnalru.blogspot.com" target="_blank">Blogger</a></p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@jerry_ru/zr1TXqKdCZy</guid><link>https://teletype.in/@jerry_ru/zr1TXqKdCZy?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=jerry_ru</link><comments>https://teletype.in/@jerry_ru/zr1TXqKdCZy?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=jerry_ru#comments</comments><dc:creator>jerry_ru</dc:creator><title>Пост 30.07.2026</title><pubDate>Thu, 30 Jul 2026 20:21:11 GMT</pubDate><description><![CDATA[классную штуку нашёл и заиспользовал]]></description><content:encoded><![CDATA[
  <p id="D42s">классную штуку нашёл и заиспользовал</p>
  <figure id="iTsh">
    <tt-article data-article-id="8894226"></tt-article>
  </figure>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@jerry_ru/NpCFHTA1uZQ</guid><link>https://teletype.in/@jerry_ru/NpCFHTA1uZQ?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=jerry_ru</link><comments>https://teletype.in/@jerry_ru/NpCFHTA1uZQ?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=jerry_ru#comments</comments><dc:creator>jerry_ru</dc:creator><title>Syncerman: от bash-скриптов к Go cli для пяти облаков одновременно</title><pubDate>Tue, 21 Jul 2026 15:46:22 GMT</pubDate><media:content medium="image" url="https://img1.teletype.in/files/07/b5/07b5935c-8973-46d3-8aad-c631d43426cd.png"></media:content><description><![CDATA[<img src="https://img3.teletype.in/files/a3/78/a378884e-5416-4669-b2fb-a001bce9d848.png"></img>Иногда, чтобы решить свою проблему, приходится написать инструмент. А иногда — чтобы написать инструмент, приходится решить свою проблему. Короче, как обычно, всё началось не с идеи сделать утилиту, а с того, что добавилась пара важных документов (по иппотке) к существующему зоопарку данных, которые надо хранить.]]></description><content:encoded><![CDATA[
  <figure id="IDYK" class="m_column">
    <img src="https://img3.teletype.in/files/a3/78/a378884e-5416-4669-b2fb-a001bce9d848.png" width="1768" />
  </figure>
  <p id="Z4r2">Иногда, чтобы решить свою проблему, приходится написать инструмент. А иногда — чтобы написать инструмент, приходится решить свою проблему. Короче, как обычно, всё началось не с идеи сделать утилиту, а с того, что добавилась пара важных документов (по иппотке) к существующему зоопарку данных, которые надо хранить.</p>
  <h3 id="Be8d">Как я к этому пришел</h3>
  <p id="xuVl">У меня давно назрела проблема: синхронизировать разные файлы с разных рабочих мест — по крайней мере дома и на работе. Документы (важные), сохранения из игр, книги для читалки. Ну и надёжный архив всего этого добра, потому что терять даже что-то незначительное это боль 🤕.</p>
  <p id="VVdw">Просто положить всё в одно облако — хорошо, но нужен ещё постоянный процесс актуализации. <code>Яндекс Диск</code> работает, <code>Google Drive</code> может изменить условия, <code>Dropbox</code> может внезапно ограничить доступ. Поэтому идея была простая: <strong>хранить копии везде</strong>. <code>Яндекс Диск</code>, <code>Google Drive</code>, <code>Mail.ru Cloud</code>, <code>Dropbox</code> — чем больше, тем надёжнее. Только файлы, только хардкор! </p>
  <p id="nq1A"><br />Раньше я обходился консольным демоном <code>yandex-disk</code> — он работал, но только с Яндексом. Потом перешёл на самописные bash-скрипты, которые вызывали <a href="https://rclone.org/" target="_blank">rclone</a> напрямую. Это работало… до поры до времени. Конфигурация разрасталась, порядок синхронизации был важен (нельзя синкать из пустого облака в другое до того, как туда прилетели файлы) и всякое подобное. Проблема!</p>
  <p id="yxo0">Когда появились нормальные ИИ-ассистенты для кодинга, я решил, что пора пробовать, а мне нужен нормальный инструмент. Declarative configuration, predictable order, automatic error handling и пр. Так родился <a href="https://gitlab.com/kinnalru/syncerman" target="_blank">Syncerman</a>.</p>
  <h3 id="hK4h"><s>Из говна и палок</s> архитектура и технологии</h3>
  <p id="8efP"><code>Syncerman</code> написан на <strong>Go</strong> — выбрал его только за простоту распространения (один бинарник).</p>
  <p id="jtkg">В основе лежит <a href="https://rclone.org/bisync/" target="_blank">rclone bisync</a> — двусторонняя синхронизация с сохранением метаданных. <code>Syncerman</code> не пытается переизобрести колесо синхронизации, а выступает оркестратором над <code>rclone</code>, предоставляя удобный CLI и YAML-конфигурацию. Никаких серверов и БД.</p>
  <h3 id="Hkbu">YAML-конфигурация</h3>
  <p id="PgEt">Вместо папок с ссылками на bash-скрипты — чёткая структура:</p>
  <pre id="USS9" data-lang="yaml">jobs:
  important:
    name: &quot;Важное&quot;
    priority: 10
    tasks:
      - from: &quot;local:/home/jerry/cloud/mirror/Documents&quot;
        to:
          - path: &quot;gdrive:folders/Documents&quot;
          - path: &quot;ydisk:folders/Documents&quot;
      - from: local:Наследие
        to:
          - path: gdrive:Наследие/
            args: [ &quot;--force&quot; ]
          - path: ydisk:Наследие/
            args: [ &quot;--force&quot; ]
          - path: mailru:Наследие/
            args: [ &quot;--force&quot; ]

  games:
    name: &quot;игрули&quot;
    priority: 20
    tasks:
      - from: &quot;local:games_sync&quot;
        to:
          - path: &quot;ydisk:folders/games_sync&quot;</pre>
  <p id="BSFP">Порядок <strong>tasks</strong> и <strong>to</strong> внутри массивов сохраняется строго. Это критично для цепочек: <code>local → Google Drive → Yandex Disk</code>. Без этого — катастрофа.</p>
  <h3 id="sRPV">Проблемасики</h3>
  <p id="eMgG"><code>rclone bisync</code> требует state-файлы для работы (они лежат где-то в папке пользователя). При первом запуске на новой паре путей он падает с ошибкой <em>&quot;cannot find prior Path1 or Path2 listings&quot;</em>. Syncerman детектирует это по двум паттернам в выводе и автоматически перезапускает синхронизацию с флагом <code>--resync</code>. Пользователь даже не замечает проблемы. Раньше делал руками.</p>
  <p id="imKH">На ранних этапах обнаружился критический баг: из-за использования map в Go порядок выполнения целей был недетерминированным. Для линейных цепочек это катастрофа: если сначала синкать из пустого <code>Yandex</code> в <code>Google</code>, а потом из локальной папки в <code>Google</code> — быть беде. Проблема! Так появились массивы.</p>
  <h3 id="kWCn">Результат</h3>
  <p id="nH30"><a href="https://gitlab.com/kinnalru/syncerman" target="_blank">Syncerman</a> версии **0.3.6** сейчас работает в production — то есть на моих машинах :) Само собой нужны пруфы, и их есть у меня!</p>
  <ul id="rmas">
    <li id="exGG">бинарники для Linux и Windows (сборка сразу подо всё)</li>
    <li id="Mea6">GitLab CI как в лучших домах</li>
    <li id="tbNO">Покрытие тестами - самому было бы лень писать а тут юнит-тесты для всех ключевых пакетов (config, rclone, sync), интеграционные тесты (не просто интеграционные а целые <strong>bash-сценарии с десятком шагов</strong>).</li>
  </ul>
  <p id="uFDI">Публичные репозитории (это мой фетиш):</p>
  <ul id="0Rdg">
    <li id="fqVe">Gitlab <a href="https://gitlab.com/kinnalru/syncerman" target="_blank">https://gitlab.com/kinnalru/syncerman</a></li>
    <li id="QP9Z">Github <a href="https://github.com/kinnalru/syncerman" target="_blank">https://github.com/kinnalru/syncerman</a></li>
    <li id="HGZ3">Gitflic <a href="https://gitflic.ru/project/kinnalru/syncerman" target="_blank">https://gitflic.ru/project/kinnalru/syncerman</a></li>
    <li id="zG5B">Gitverse <a href="https://gitverse.ru/kinnalru/syncerman" target="_blank">https://gitverse.ru/kinnalru/syncerman</a></li>
  </ul>
  <h3 id="gmfZ">Использование</h3>
  <p id="KC8f">Мой <code>crontab</code> выглядит так:</p>
  <pre id="gOCW" data-lang="bash"># Синхронизация документов и сохранений 2 рааз в час и лог для ручной проверки
10,30 * * * *   /bin/sh -lc &quot;cd /home/jerry/cloud/mirror &amp;&amp; syncerman sync 2&gt;&amp;1 | tee ./lastrun.log&quot;</pre>
  <p id="bTiU">Конфигурация зеркалирует локальные папки во все облака (настроенные в <code>rclone</code>) одновременно, а затем синхронизирует облака между собой. Если одно облако отвалится — данные остаются в остальных. Если <code>rclone</code> выдаст <code>first-run</code> ошибку — <code>Syncerman</code> сам всё починит. </p>
  <h3 id="ONVK">Вместо вывода</h3>
  <p id="0EVJ">Появление ИИ-ассистентов снизило порог входа для написания таких инструментов. Раньше мне было лень писать то, что и так работает с помощью пары строк на bash. А сейчас это делаю не я :) — разбор выхлопов <code>rclone</code>, обработка edge cases и тестирование делаются очень легко. Я могу заняться решением проблем (архитектурой и требованиями), а рутина &quot;делается сама&quot;. </p>
  <hr />
  <p id="uKqc">Второй фетиш это ссылочки:</p>
  <ul id="Bf8d">
    <li id="bQjX"><a href="https://rclone.org/bisync/" target="_blank">rclone bisync</a> - это база</li>
    <li id="phUm"><a href="https://github.com/bcpierce00/unison" target="_blank">unison</a> - еще одна классная штука по теме синхронизации, она прочно заняла место в моём сердце, но об это в другой раз</li>
  </ul>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@jerry_ru/ZtDQsnXWPM5</guid><link>https://teletype.in/@jerry_ru/ZtDQsnXWPM5?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=jerry_ru</link><comments>https://teletype.in/@jerry_ru/ZtDQsnXWPM5?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=jerry_ru#comments</comments><dc:creator>jerry_ru</dc:creator><title>Linux - Wine - DxWnd - Capitalism 2</title><pubDate>Mon, 20 Jan 2025 20:09:22 GMT</pubDate><media:content medium="image" url="https://img3.teletype.in/files/eb/f7/ebf715c1-5b3e-4ad8-b071-ae50791db3a7.png"></media:content><category>games</category><description><![CDATA[<img src="https://img3.teletype.in/files/66/f8/66f84541-472d-428d-8971-72742d1c7b8b.png"></img>Захотелось поиграть в шикарную старую игрулину моего детства Capitalism 2. Захотеть то я захотел, а вот чтоб её запустить пришлось вспомнить свои старые навыки - ведь я Core/Kernel Linux Developer (хоть и в прошлом). Получилось инетресно и позновательно - рекомендую для ознакомления.]]></description><content:encoded><![CDATA[
  <p id="mxO8">Захотелось поиграть в шикарную старую игрулину моего детства <a href="https://en.wikipedia.org/wiki/Capitalism_II" target="_blank">Capitalism 2</a>. Захотеть то я захотел, а вот чтоб её запустить пришлось вспомнить свои старые навыки - ведь я Core/Kernel Linux Developer (хоть и в прошлом). Получилось инетресно и позновательно - рекомендую для ознакомления.</p>
  <h2 id="ATun">Шаг первый - установка</h2>
  <p id="uD2Z">Игра очень крутая - используется в универах для обучения экономике, однако выпущена в 2001 под Windows и это большая проблема.</p>
  <p id="VZvg">Находим пыльный диск или качаем с торрентов, ставим себе wine и устанавливаем игру. Ей потребуются зависимости, которые проще всего поставить с помощью <a href="https://gitlab.winehq.org/wine/wine/-/wikis/Winetricks" target="_blank">winetricks</a> - они очень помогают. Зависимости:</p>
  <ul id="BnLK">
    <li id="l7kR">mfc42.dll</li>
    <li id="bN40">шрифты (я ставлю все)</li>
    <li id="4PlB">DirectPlay (без этого сетевая игра по локалочке с друганом не заработает)</li>
  </ul>
  <p id="6SYg">Игра достаточно сложная и я предпочитаю играть в неё с хорошей локализацией, для этого мало поставить русскую версию, надо еще накатить 2 (два) патча с исправлением локализации - ищите их на торрентах.</p>
  <p id="TYcJ">Для запуска надо будет задать локаль:</p>
  <pre id="GAD4" data-lang="shell">LC_ALL=ru_RU.UTF-8 LANG=ru_RU.UTF-8 wine cap2.exe</pre>
  <h3 id="Anqm">Эмуляция CDROM</h3>
  <p id="eZZk">Всё запустится, но не будет работать одиночная игра. Дело в том что если у вас не похаченная версия, то ей нeжен будет CDROM. Его эмуляция делается через <code>winecfg</code> - выбираем Диски, указывам путь к файлам инсталятора, тип ставим CDROM:</p>
  <figure id="xvwx" class="m_original">
    <img src="https://img2.teletype.in/files/57/5d/575dc7fe-a098-452e-81c8-731c41152f94.png" width="542" />
  </figure>
  <p id="d6Dj">Запускаем еще раз и оно работает! На первый взгляд. Но если запустить саму игру то окажется что у неё не перерисовывается экран :( </p>
  <p id="gilF">Это ввергло меня в уныние... Я много и долго тыкал в настройки wine, режимы совместимости, поставил всякие древние версии DirectX и пр. и ничего. Но не зря же я разработчик с 20ти летним стажем?!? Дай, думаю, запущу в оконном режиме. Таких настроек в игре нет, но это не может меня остановить - я перлопатил все файлы игры в поисках конфигов, но не нашел. </p>
  <p id="PKte">После этого я пошел гуглить как заставить игру под виндой работать в оконном режиме и нашел! </p>
  <h2 id="doNY">Шаг второй - DxWnd</h2>
  <section style="background-color:hsl(hsl(0, 0%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="MOaO"><strong>DxWnd</strong><br />Window hooker to run fullscreen programs in window and much more...</p>
    <p id="mEpW">Windows hooker - intercepts system calls to make Win32 programs run in a window, to enhance application compatibility, to enhance video modes, to stretch timing and emulate CD disk data and audio tracks. It is typically very useful to run old Windows games.</p>
  </section>
  <p id="gLH2">Это такая дич которая перехватывает системные вызовы и вызовы к библиотеке DirectX и позволяет надругиваться над ними. </p>
  <p id="btun">Ставим эту волшебную прогу также под wine, запускам и настраиваем запуск Capitalism 2. Мне подошло <code>1440x900 Desktop center</code>, но вы можете указать там что хотите.</p>
  <figure id="fyFG" class="m_original">
    <img src="https://img3.teletype.in/files/a9/62/a962f09d-ea70-41e0-94f7-9aa7c80208c6.png" width="531" />
  </figure>
  <h2 id="PTlp">Шаг третий - пора играть!</h2>
  <p id="Xsy1">И вот, наконец, после прочтения тонны логов и выхлопов из wine, плясок с версиями библиотек, шрифтами, локалями и DirectX, можно наконец.... Лечь спать. Играть буду в другой день :)</p>
  <figure id="52Ua" class="m_original">
    <img src="https://img3.teletype.in/files/66/f8/66f84541-472d-428d-8971-72742d1c7b8b.png" width="1572" />
  </figure>
  <figure id="yqXD" class="m_column">
    <iframe src="data:text/html;charset=utf-8, <head><base target=&#x27;_blank&#x27; /></head> <body><script src=&#x27;https://static.elfsight.com/platform/platform.js&#x27; async></script> <div class=&#x27;elfsight-app-1fd8a750-8313-41db-a2e7-e8f396a33bc1&#x27; data-elfsight-app-lazy></div> </body>"></iframe>
    <figcaption>Мои ссылочки</figcaption>
  </figure>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@jerry_ru/kjJhxMMi8vE</guid><link>https://teletype.in/@jerry_ru/kjJhxMMi8vE?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=jerry_ru</link><comments>https://teletype.in/@jerry_ru/kjJhxMMi8vE?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=jerry_ru#comments</comments><dc:creator>jerry_ru</dc:creator><title>Шахматы. Реставрация.</title><pubDate>Sat, 20 Aug 2022 14:14:04 GMT</pubDate><media:content medium="image" url="https://img3.teletype.in/files/65/6f/656fbf73-fe87-4cb6-885e-652d46df15ea.png"></media:content><category>Семья</category><description><![CDATA[<img src="https://img4.teletype.in/files/74/4d/744d1ac3-50e4-46ea-a898-bc2f0e4194c2.jpeg"></img>На барахолке купил сыну шахматы. За 200 рублей. Поиграли в них с месяц и я решил их отреставрировать :). Конечно не сам по себе а сыном, которому 7 лет и у него чешутся руки что-нибудь&quot;помастерить&quot;. Вот процесс и результат!]]></description><content:encoded><![CDATA[
  <p id="H8Lz">На барахолке купил сыну шахматы. За 200 рублей. Поиграли в них с месяц и я решил их отреставрировать :). Конечно не сам по себе а сыном, которому 7 лет и у него чешутся руки что-нибудь&quot;помастерить&quot;. Вот процесс и результат!</p>
  <figure id="5Ap5" class="m_original">
    <img src="https://img4.teletype.in/files/74/4d/744d1ac3-50e4-46ea-a898-bc2f0e4194c2.jpeg" width="720" />
  </figure>
  <figure id="TS54" class="m_original">
    <img src="https://img1.teletype.in/files/0d/d4/0dd4314f-1abb-4efe-8faa-0e3ee5e30e8d.jpeg" width="720" />
  </figure>
  <figure id="J1qe" class="m_original">
    <img src="https://img4.teletype.in/files/78/3a/783aef5b-e963-4f4f-9c75-e369472e2884.jpeg" width="3000" />
  </figure>
  <figure id="o53t" class="m_original">
    <img src="https://img3.teletype.in/files/6c/19/6c1961c4-eea5-4c3b-a916-a28c4119bb5c.jpeg" width="3000" />
  </figure>
  <figure id="QyJt" class="m_original">
    <img src="https://img3.teletype.in/files/a5/fb/a5fb0591-dc13-473b-adf4-eadab0817a16.jpeg" width="3000" />
  </figure>
  <p id="uPuQ">Всем рекомендую - очень увлекательно :)</p>
  <figure id="ASg5" class="m_original">
    <img src="https://img3.teletype.in/files/68/65/68650da8-cca3-43be-8524-638fb80f7d17.jpeg" width="3000" />
  </figure>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@jerry_ru/-Fp7-gjdDan</guid><link>https://teletype.in/@jerry_ru/-Fp7-gjdDan?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=jerry_ru</link><comments>https://teletype.in/@jerry_ru/-Fp7-gjdDan?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=jerry_ru#comments</comments><dc:creator>jerry_ru</dc:creator><title>Ветер бей сильней!</title><pubDate>Mon, 14 Mar 2022 07:45:43 GMT</pubDate><category>мысли</category><tt:hashtag>ярусский</tt:hashtag><tt:hashtag>санкции</tt:hashtag><description><![CDATA[Ветер бей сильней, раздувай огонь в крови!
Дух мятежный, непокорный, дай мне знать, что впереди!
Чтобы жить вопреки!]]></description><content:encoded><![CDATA[
  <p id="vs2Y">Ветер бей сильней, раздувай огонь в крови!<br />Дух мятежный, непокорный, дай мне знать, что впереди!<br />Чтобы жить вопреки!</p>
  <figure id="xtBd" class="m_column">
    <iframe src="https://www.youtube.com/embed/HhR5W8-BNjU?autoplay=0&loop=0&mute=0"></iframe>
  </figure>
  <tt-tags id="6CVY">
    <tt-tag name="ярусский">#ярусский</tt-tag>
    <tt-tag name="санкции">#санкции</tt-tag>
  </tt-tags>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@jerry_ru/fz-ky_6THu4</guid><link>https://teletype.in/@jerry_ru/fz-ky_6THu4?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=jerry_ru</link><comments>https://teletype.in/@jerry_ru/fz-ky_6THu4?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=jerry_ru#comments</comments><dc:creator>jerry_ru</dc:creator><title>Техблоггинг: Синхронизация файлов без регистрации и СМС - lsyncd</title><pubDate>Thu, 10 Mar 2022 10:57:21 GMT</pubDate><media:content medium="image" url="https://img1.teletype.in/files/06/59/0659d64b-6534-4a65-b900-4039cfb1e43c.png"></media:content><category>rndsoft</category><tt:hashtag>lsyncd</tt:hashtag><tt:hashtag>syncronization</tt:hashtag><tt:hashtag>infra</tt:hashtag><tt:hashtag>infrastructure</tt:hashtag><tt:hashtag>rsync</tt:hashtag><tt:hashtag>inotify</tt:hashtag><tt:hashtag>docker</tt:hashtag><tt:hashtag>cloud</tt:hashtag><tt:hashtag>cluster</tt:hashtag><tt:hashtag>distributed_systems</tt:hashtag><tt:hashtag>fault_tolerance</tt:hashtag><description><![CDATA[<img src="https://img2.teletype.in/files/94/c2/94c27234-1041-48cb-9f43-53fbb4128406.jpeg"></img>В этот раз про синхронизацию файлов с помощью #lsyncd: https://blog.rnds.pro/024-lsyncd]]></description><content:encoded><![CDATA[
  <p id="W8L9">В этот раз про синхронизацию файлов с помощью <a href="https://twitter.com/hashtag/Portainer?src=hashtag_click" target="_blank">#lsyncd</a>: <a href="https://blog.rnds.pro/024-lsyncd" target="_blank">https://blog.rnds.pro/024-lsyncd</a></p>
  <figure id="hzg8" class="m_original">
    <img src="https://img2.teletype.in/files/94/c2/94c27234-1041-48cb-9f43-53fbb4128406.jpeg" width="695" />
  </figure>
  <tt-tags id="yGXJ">
    <tt-tag name="lsyncd">#lsyncd</tt-tag>
    <tt-tag name="syncronization">#syncronization</tt-tag>
    <tt-tag name="infra">#infra</tt-tag>
    <tt-tag name="infrastructure">#infrastructure</tt-tag>
    <tt-tag name="rsync">#rsync</tt-tag>
    <tt-tag name="inotify">#inotify</tt-tag>
    <tt-tag name="docker">#docker</tt-tag>
    <tt-tag name="cloud">#cloud</tt-tag>
    <tt-tag name="cluster">#cluster</tt-tag>
    <tt-tag name="distributed_systems">#distributed_systems</tt-tag>
    <tt-tag name="fault_tolerance">#fault_tolerance</tt-tag>
  </tt-tags>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@jerry_ru/investtech</guid><link>https://teletype.in/@jerry_ru/investtech?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=jerry_ru</link><comments>https://teletype.in/@jerry_ru/investtech?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=jerry_ru#comments</comments><dc:creator>jerry_ru</dc:creator><title>Хакатон</title><pubDate>Sun, 14 Nov 2021 06:57:28 GMT</pubDate><media:content medium="image" url="https://img2.teletype.in/files/9c/03/9c0300ca-7c74-412c-91aa-9d716e4563f1.png"></media:content><category>rndsoft</category><description><![CDATA[<img src="https://img2.teletype.in/files/5f/9f/5f9fb864-c82e-4d0b-98ac-5e0289e8f6f4.png"></img>Вчера от нескольких участников слышал вопросы &quot;такое решение подходит?&quot; или &quot;это мы сделали правильно?&quot; и сейчас я хочу открыть небольшой &quot;секрет&quot; всем командам оптом. Секрет заключается в том как именно я, находясь в жюри, оцениваю команды. ]]></description><content:encoded><![CDATA[
  <p id="gW4x">Вчера от нескольких участников слышал вопросы &quot;такое решение подходит?&quot; или &quot;это мы сделали правильно?&quot; и сейчас я хочу открыть небольшой &quot;секрет&quot; всем командам оптом. Секрет заключается в том как именно я, находясь в жюри, оцениваю команды. </p>
  <section style="background-color:hsl(hsl(0,   0%,  var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <blockquote id="XCod">Рассказываю про себя - остальные члены жюри сами принимают решения.</blockquote>
  </section>
  <p id="G4or">Прежде всего скажу о том что &quot;правильного решения&quot; нет и вообще &quot;решения&quot; нет. Есть работа и, возможно, её результат.  И оценивать я буду стараться весь процесс работы всей команды: аналитику предметной области, презентацию/доклад, конечный результат и многое другое.</p>
  <p id="HFbd">И вот тут хочу отдельно обратить внимание на некоторые моменты и для примера рассмотреть разные кейсы. </p>
  <p id="i5bb">Допустим у вас сильный разработчик, гений алгоритмизации и прирождённый архитектор. Если в вашем общении с жюри и докладе не будет поставлен акцент на крутость ваших технических решений или их красоту/простоту, то никто не узнает о проделанной работе, о сложностях и о ваших сильных качествах. </p>
  <p id="DwnC">С другой стороны, у вас может быть сильная аналитическая составляющая, вы всей командой нашли тот самый кейс, который перевернёт привычный взгляд на вещи, но результат вашего труда выглядит посредственно... Как быть? Делать ставку именно на аналитику! Довести до жюри ваше видение, перспективы и потенциалы развития вашего решения.</p>
  <p id="gClm">И третий случай. У вас обычные прогеры, обычная аналитика и простенький <s>сова, натянутая на глобус</s> бутстрап, натянутый на джангу. Но у вас хорошо распределены роли, каждый знает и делает свою задачу, и у вас есть простой, но законченный продукт, который соответствует вашей аналитике. Вы чётко рассчитали свои силы, оценили риски и уложились в сроки. Красавчики.</p>
  <p id="OZTl">Каждый из этих кейсов может рассчитывать на победу и победить. Но для этого жюри должно узнать о ваших сильных сторонах. О планировании, постановке задач, взаимодействии участников команды о проблемах и их решениях. Всё это целиком уместить в 5 минут отчёта не просто, да и не надо - сосредоточьтесь на ваших достижениях. </p>
  <p id="4DYv">Определите вашу собственную стратегию, сделайте ставку именно на ваши сильные стороны и дерзайте!</p>
  <figure id="mkvH" class="m_custom">
    <img src="https://img2.teletype.in/files/5f/9f/5f9fb864-c82e-4d0b-98ac-5e0289e8f6f4.png" width="350" />
  </figure>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@jerry_ru/n4Q6WziH2Vc</guid><link>https://teletype.in/@jerry_ru/n4Q6WziH2Vc?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=jerry_ru</link><comments>https://teletype.in/@jerry_ru/n4Q6WziH2Vc?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=jerry_ru#comments</comments><dc:creator>jerry_ru</dc:creator><title>Парк Галицкого</title><pubDate>Sat, 30 Oct 2021 11:02:30 GMT</pubDate><media:content medium="image" url="https://img4.teletype.in/files/f4/5a/f45a88e5-20c7-4b5c-a1ce-69efcb221f60.jpeg"></media:content><category>Семья</category><description><![CDATA[<img src="https://img4.teletype.in/files/b1/9a/b19a6910-d700-4e92-bf3b-c9abc0931b87.jpeg"></img>На выходных решили сгонять в Краснодар. В планах у нас посещение парка, охота на белого тигра в зоопарке и встреча с родственниками.]]></description><content:encoded><![CDATA[
  <p id="qCe4">На выходных решили сгонять в Краснодар. В планах у нас посещение парка, охота на белого тигра в зоопарке и встреча с родственниками.</p>
  <p id="bAc1">Парк нас встретил зимующим баобабом...</p>
  <figure id="us79" class="m_column">
    <img src="https://img4.teletype.in/files/b1/9a/b19a6910-d700-4e92-bf3b-c9abc0931b87.jpeg" width="2000" />
  </figure>
  <p id="IO1h">А дальше нас ждёт страшное...</p>
  <figure id="MKhh" class="m_column">
    <iframe src="https://www.youtube.com/embed/5q5W831KXb8?autoplay=0&loop=0&mute=0"></iframe>
    <figcaption>Белый тигр растерзал внедорожник!</figcaption>
  </figure>

]]></content:encoded></item></channel></rss>