<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Токарчук Андрей Михайлович | TypeScript, AI, VueJS, PHP и другие интересные штуки. Блог Zend Framework разработчика. Программирование на PHP, вопросы использование memcached, mysql, nosql баз данных, jquery, apache, nginx,mongodb, php и т.д.</title>
	<atom:link href="https://tokarchuk.ru/feed/" rel="self" type="application/rss+xml" />
	<link>https://tokarchuk.ru</link>
	<description>Разработка корпоративных веб-приложений</description>
	<lastBuildDate>Thu, 02 Oct 2025 07:34:13 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://tokarchuk.ru/wp-content/uploads/2023/11/cropped-tk_labs_icon-32x32.png</url>
	<title>Токарчук Андрей Михайлович | TypeScript, AI, VueJS, PHP и другие интересные штуки. Блог Zend Framework разработчика. Программирование на PHP, вопросы использование memcached, mysql, nosql баз данных, jquery, apache, nginx,mongodb, php и т.д.</title>
	<link>https://tokarchuk.ru</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Obsidian Sync без подписки: мой метод</title>
		<link>https://tokarchuk.ru/2025/10/02/obsidian-sync-for-free/</link>
					<comments>https://tokarchuk.ru/2025/10/02/obsidian-sync-for-free/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Thu, 02 Oct 2025 07:34:13 +0000</pubDate>
				<category><![CDATA[Веб-разработка]]></category>
		<category><![CDATA[Мысли]]></category>
		<category><![CDATA[evernote]]></category>
		<category><![CDATA[obsidian]]></category>
		<guid isPermaLink="false">https://tokarchuk.ru/?p=9076</guid>

					<description><![CDATA[</p>
<p>Когда я только начал использовать Obsidian, то быстро понял, что встроенный сервис Obsidian Sync — это удобно, но не дешево. Я решил собрать свою схему синхронизации заметок без подписки. Ниже делюсь рабочим вариантом, которым пользуюсь уже давно.</p>
<p><img fetchpriority="high" decoding="async" class="aligncenter wp-image-9078" src="https://tokarchuk.ru/wp-content/uploads/2025/10/obsidin-stone.jpg" alt="" width="720" height="480" srcset="https://tokarchuk.ru/wp-content/uploads/2025/10/obsidin-stone.jpg 1024w, https://tokarchuk.ru/wp-content/uploads/2025/10/obsidin-stone-300x200.jpg 300w, https://tokarchuk.ru/wp-content/uploads/2025/10/obsidin-stone-768x512.jpg 768w" sizes="(max-width: 720px) 100vw, 720px" /></p>
<p>Базовая идея</p>
<p>У меня есть две цели:</p>
<ol>
<li>Синхронизировать заметки между компьютером и телефоном.</li>
<li>Делать автоматический бэкап в GitLab, чтобы ничего не потерять.</li>
</ol>
<p>Для этого я собрал простую схему с использованием Google Drive,</p>
<p>The post <a href="https://tokarchuk.ru/2025/10/02/obsidian-sync-for-free/">Obsidian Sync без подписки: мой метод</a> first appeared on <a href="https://tokarchuk.ru">Токарчук Андрей Михайлович | TypeScript, AI, VueJS, PHP и другие интересные штуки. Блог Zend Framework разработчика. Программирование на PHP, вопросы использование memcached, mysql, nosql баз данных, jquery, apache, nginx,mongodb, php и т.д.</a>.</p>]]></description>
										<content:encoded><![CDATA[<p><!-- Начало статьи --></p>
<p>Когда я только начал использовать Obsidian, то быстро понял, что встроенный сервис Obsidian Sync — это удобно, но не дешево. Я решил собрать свою схему синхронизации заметок без подписки. Ниже делюсь рабочим вариантом, которым пользуюсь уже давно.</p>
<p><img decoding="async" class="aligncenter wp-image-9078" src="https://tokarchuk.ru/wp-content/uploads/2025/10/obsidin-stone.jpg" alt="" width="720" height="480" srcset="https://tokarchuk.ru/wp-content/uploads/2025/10/obsidin-stone.jpg 1024w, https://tokarchuk.ru/wp-content/uploads/2025/10/obsidin-stone-300x200.jpg 300w, https://tokarchuk.ru/wp-content/uploads/2025/10/obsidin-stone-768x512.jpg 768w" sizes="(max-width: 720px) 100vw, 720px" /></p>
<h2>Базовая идея</h2>
<p>У меня есть две цели:</p>
<ol>
<li>Синхронизировать заметки между компьютером и телефоном.</li>
<li>Делать автоматический бэкап в GitLab, чтобы ничего не потерять.</li>
</ol>
<p>Для этого я собрал простую схему с использованием Google Drive, мобильного приложения AutoSync и плагина obsidian-git.</p>
<h2>Структура папок</h2>
<ul>
<li><strong>GitRepo:</strong> <code>/Users/andrey/Library/CloudStorage/GoogleDrive-myaccount@gmail.com/My Drive/Obsidian</code></li>
<li><strong>Vault root:</strong> <code>/Users/andrey/Library/CloudStorage/GoogleDrive-myaccount@gmail.com/My Drive/Obsidian/Notes</code></li>
</ul>
<p>То есть сама база заметок живет в папке Google Drive, а репозиторий git настроен поверх этой же структуры.</p>
<h2>На компьютере</h2>
<ol>
<li>Obsidian Desktop Client.</li>
<li>Google Drive — для синхронизации в облако.</li>
<li>Плагин <a href="https://github.com/Vinzent03/obsidian-git/releases" target="_blank" rel="noopener">obsidian-git</a> — для автокоммитов в GitLab.</li>
</ol>
<p>Плагин настроен на автосохранение раз в час. Google Drive синхронизируется в фоне.</p>
<h2>На телефоне</h2>
<ol>
<li>Obsidian Mobile (из App Store/Google Play).</li>
<li><a href="https://play.google.com/store/apps/details?id=com.ttxapps.autosync&amp;hl=ru" target="_blank" rel="noopener">AutoSync</a> (раньше назывался DriveSync).</li>
</ol>
<p>AutoSync я настроил тоже на синхронизацию раз в час. Работает в обе стороны: изменения на телефоне попадают в Google Drive, и наоборот.</p>
<h2>Как это работает</h2>
<p>Фактически получается master–master (двухсторонняя) синхронизация:</p>
<ul>
<li><strong>Компьютер</strong> → файлы сохраняются в Google Drive → плагин obsidian-git коммитит их в GitLab (бэкап).</li>
<li><strong>Телефон</strong> → изменения уходят через AutoSync в Google Drive → они попадают на компьютер → git-плагин пушит их в репозиторий.</li>
</ul>
<p>Так заметки доступны везде, плюс у меня есть надежный бэкап в GitLab.</p>
<h2>Важный момент</h2>
<p>Обратите внимание: obsidian-git — это плагин только для десктопа. То есть на компьютере нужно хотя бы периодически запускать Obsidian, чтобы коммиты и пуши в GitLab выполнялись.</p>
<p>Для меня это не проблема, потому что Obsidian у меня почти всегда открыт, но если вы работаете только с телефона, это стоит учитывать.</p>
<p><!-- Конец статьи --></p><p>The post <a href="https://tokarchuk.ru/2025/10/02/obsidian-sync-for-free/">Obsidian Sync без подписки: мой метод</a> first appeared on <a href="https://tokarchuk.ru">Токарчук Андрей Михайлович | TypeScript, AI, VueJS, PHP и другие интересные штуки. Блог Zend Framework разработчика. Программирование на PHP, вопросы использование memcached, mysql, nosql баз данных, jquery, apache, nginx,mongodb, php и т.д.</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://tokarchuk.ru/2025/10/02/obsidian-sync-for-free/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Настройка GitLab Service Desk: пошаговое руководство</title>
		<link>https://tokarchuk.ru/2025/09/02/configure-gitlab-service-desk/</link>
					<comments>https://tokarchuk.ru/2025/09/02/configure-gitlab-service-desk/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Tue, 02 Sep 2025 12:40:02 +0000</pubDate>
				<category><![CDATA[Системное администрирование]]></category>
		<category><![CDATA[gitlab]]></category>
		<category><![CDATA[helpdesk]]></category>
		<category><![CDATA[service desk]]></category>
		<guid isPermaLink="false">https://tokarchuk.ru/?p=9068</guid>

					<description><![CDATA[<p>Всем привет! С вами @netandreus, и сегодня мы рассмотрим настройку GitLab Service Desk. Это мощный инструмент для автоматизации обработки обращений пользователей через электронную почту. Ниже рассмотрим процесс настройки системы для группы компаний, где каждая компания получает собственный репозиторий и адрес для технической поддержки.</p>
<p><img decoding="async" class="aligncenter size-full wp-image-9070" src="https://tokarchuk.ru/wp-content/uploads/2025/09/it_crowd.jpg" alt="" width="872" height="480" srcset="https://tokarchuk.ru/wp-content/uploads/2025/09/it_crowd.jpg 872w, https://tokarchuk.ru/wp-content/uploads/2025/09/it_crowd-300x165.jpg 300w, https://tokarchuk.ru/wp-content/uploads/2025/09/it_crowd-768x423.jpg 768w" sizes="(max-width: 872px) 100vw, 872px" /><br />
Архитектура решения<br />
Концепция<br />
Система построена на принципе автоматического создания тикетов (issues) в GitLab на основе входящих писем от пользователей. Для группы компаний &#8220;company_group&#8221; каждая отдельная компания &#8220;company&#8221; получает:<br />
&#8211; Собственный репозиторий<br />
&#8211;</p>
<p>The post <a href="https://tokarchuk.ru/2025/09/02/configure-gitlab-service-desk/">Настройка GitLab Service Desk: пошаговое руководство</a> first appeared on <a href="https://tokarchuk.ru">Токарчук Андрей Михайлович | TypeScript, AI, VueJS, PHP и другие интересные штуки. Блог Zend Framework разработчика. Программирование на PHP, вопросы использование memcached, mysql, nosql баз данных, jquery, apache, nginx,mongodb, php и т.д.</a>.</p>]]></description>
										<content:encoded><![CDATA[<div>
<div>Всем привет! С вами @netandreus, и сегодня мы рассмотрим настройку GitLab Service Desk. Это мощный инструмент для автоматизации обработки обращений пользователей через электронную почту. Ниже рассмотрим процесс настройки системы для группы компаний, где каждая компания получает собственный репозиторий и адрес для технической поддержки.</div>
</div>
<div>
<p><span id="more-9068"></span></p>
<h2><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-9070" src="https://tokarchuk.ru/wp-content/uploads/2025/09/it_crowd.jpg" alt="" width="872" height="480" srcset="https://tokarchuk.ru/wp-content/uploads/2025/09/it_crowd.jpg 872w, https://tokarchuk.ru/wp-content/uploads/2025/09/it_crowd-300x165.jpg 300w, https://tokarchuk.ru/wp-content/uploads/2025/09/it_crowd-768x423.jpg 768w" sizes="auto, (max-width: 872px) 100vw, 872px" /></h2>
<h2>Архитектура решения</h2>
<h3>Концепция</h3>
<div>Система построена на принципе автоматического создания тикетов (issues) в GitLab на основе входящих писем от пользователей. Для группы компаний &#8220;company_group&#8221; каждая отдельная компания &#8220;company&#8221; получает:</div>
<div>&#8211; Собственный репозиторий</div>
<div>&#8211; Уникальный адрес для helpdesk: <code>helpdesk_company@company_group.id</code></div>
<div></div>
<h3>Почтовые ящики</h3>
<div>Для корректной работы системы требуется три почтовых ящика:</div>
<div>1. <strong>Основной ящик</strong> (<code>helpdesk@company_group.id</code>) — для обработки входящих писем</div>
<div>2. <strong>Ящик ответов</strong> (<code>replies@company_group.id</code>) — для обработки ответов пользователей</div>
<div>3. <strong>Проектный ящик</strong> (<code>helpdesk_company@company_group.id</code>) — для конкретного проекта в качестве &#8220;Custom email address&#8221;</div>
<div><strong>Важно</strong>: Если не указать проектный ящик в поле Custom email, пользователи не будут получать подтверждения о получении их обращений.</div>
<h3>Пошаговая настройка</h3>
<h4>Шаг 1: Создание почтовых ящиков</h4>
<div>Создайте три почтовых ящика на базе Zoho Mail:</div>
<div>&#8211; <strong>incoming_email_address</strong> — для входящих писем</div>
<div>&#8211; <strong>service_desk_email_address</strong> — для служебной переписки</div>
<div>&#8211; <strong>custom_email_address</strong> — для проектных обращений</div>
<div></div>
<h4>Шаг 2: Конфигурация GitLab</h4>
<div>Отредактируйте файл <strong>/etc/gitlab/gitlab.rb</strong>:</div>
</div>
<div></div>
<div>
<pre class="urvanov-syntax-highlighter-plain-tag"># Настройки входящей почты
gitlab_rails['incoming_email_enabled'] = true
gitlab_rails['incoming_email_address'] = "replies+%{key}@company_group.id"
gitlab_rails['incoming_email_email'] = "replies@company_group.id"
gitlab_rails['incoming_email_password'] = "xxxxxxxxx"
gitlab_rails['incoming_email_host'] = "imappro.zoho.com"
gitlab_rails['incoming_email_port'] = 993
gitlab_rails['incoming_email_ssl'] = true
gitlab_rails['incoming_email_start_tls'] = false
gitlab_rails['incoming_email_user'] = "replies@company_group.id"
gitlab_rails['incoming_email_mailbox'] = "inbox"
gitlab_rails['incoming_email_delete_after_delivery'] = true
gitlab_rails['incoming_email_expunge_deleted'] = true
# Настройки Service Desk
gitlab_rails['service_desk_email_enabled'] = true
gitlab_rails['service_desk_email_address'] = "helpdesk+%{key}@company_group.id"
gitlab_rails['service_desk_email_email'] = "helpdesk@company_group.id"
gitlab_rails['service_desk_email_password'] = "xxxxxx"
gitlab_rails['service_desk_email_host'] = "imappro.zoho.com"
gitlab_rails['service_desk_email_port'] = 993
gitlab_rails['service_desk_email_ssl'] = true
gitlab_rails['service_desk_email_start_tls'] = false
gitlab_rails['service_desk_email_user'] = "helpdesk@company_group.id"
gitlab_rails['service_desk_email_mailbox'] = "inbox"
gitlab_rails['service_desk_email_delete_after_delivery'] = true
gitlab_rails['service_desk_email_expunge_deleted'] = true</pre>
</div>
<div>
<div><strong>Критически важно:</strong> Установите параметры <code>incoming_email_delete_after_delivery</code> и <code>incoming_email_expunge_deleted</code> в значение <code>true</code>. Без этого будет происходить бесконечный цикл создания issues, так как GitLab не будет удалять обработанные письма.</div>
<div></div>
<h4>Шаг 3: Применение конфигурации</h4>
<div>Перезапустите GitLab с новыми настройками:</div>
<div>
<pre class="urvanov-syntax-highlighter-plain-tag">sudo gitlab-ctl reconfigure</pre>
</div>
<h4>Шаг 4: Проверка работоспособности</h4>
<div>Убедитесь, что почтовая система работает корректно:</div>
<div>
<pre class="urvanov-syntax-highlighter-plain-tag">sudo gitlab-rake gitlab:incoming_email:check</pre>
</div>
<div>Пример успешного вывода:</div>
<div>
<pre class="urvanov-syntax-highlighter-plain-tag">Checking Incoming Email ...
Incoming Email: ... Checking Reply by email ...
IMAP server credentials are correct? ... Checking helpdesk@company_group.id
yes
Mailroom enabled? ... skipped
MailRoom running? ... skipped
Checking Reply by email ... Finished
Checking Incoming Email ... Finished</pre>
</div>
<h4>Шаг 5: Настройка переадресации</h4>
<div>На почтовом ящике <code>custom_email_address</code> (<code>helpdesk_company@company_group.id</code>) в веб-интерфейсе Zoho создайте фильтр для безусловной переадресации всех писем на <strong>incoming_email_address</strong> с ключом конкретного проекта, например &#8220;replies+company-helpdesk-5-issue-@company_group.id&#8221;.</div>
</div>
<div></div>
<div>
<div>Адрес проекта можно найти в разделе:</div>
<div><strong>Project</strong> → <strong>Settings</strong> → <strong>General</strong> → <strong>Service Desk</strong> → <strong>Email address to use for Service Desk</strong></div>
</div>
<div></div>
<div>Если в конфиге указан только incoming_email_address, то он будет в поле &#8220;Email address to use for Service Desk&#8221;. Используете его для переадресации. Если же у вас в конфиге указаны оба адреса: и incoming_email_address и service_desk_email_address, то под основным полем будет подпись &#8220;Emails sent to replies+%{key}@company_group.id&#8221;, тогда берете его для вставки в переадресацию.</div>
<div>
<h4>Шаг 6: Активация кастомного email-адреса</h4>
<div>После создания и валидации переадресации активируйте &#8220;Configure a custom email address&#8221; и заполните данные проектного ящика:</div>
</div>
<div>
<pre class="urvanov-syntax-highlighter-plain-tag">Custom email address: helpdesk_company@company_group.id
SMTP Host: smtppro.zoho.com
SMTP Port: 587
SMTP username: helpdesk_company@company_group.id
SMTP password (application password): xxxxxx</pre>
</div>
<div>
<h3>Принцип работы верификации</h3>
<div>1. GitLab отправляет письмо с кодом подтверждения на <code>custom_email_address</code></div>
<div>2. Срабатывает Zoho filter (forwarder) на почту проекта</div>
<div>3. GitLab получает письмо, проверяет код и верифицирует почтовый ящик</div>
<div></div>
<h3>Разделение почтовых ящиков: техническое обоснование</h3>
<h4>Почему нужны разные ящики</h4>
<div>Функции <code>incoming_email_address</code> и <code>service_desk_email_address</code> обрабатываются разными пайплайнами и воркерами. Использование одного почтового ящика для обеих функций приводит к:</div>
<div>&#8211; Двойному захвату сообщений</div>
<div>&#8211; Неправильной маршрутизации</div>
<div>&#8211; Дублированию issues</div>
<h4>Внутренняя архитектура</h4>
<div>GitLab использует два независимых потока обработки:</div>
<div>1.<strong> Service Desk</strong> — создание новых внешних тикетов по email</div>
<div>2. <strong>Incoming Email</strong> — обработка ответов по email и создание issues от пользователей</div>
<h4>Технические детали</h4>
<div>&#8211; MailRoom запускает отдельный поток для каждого настроенного почтового ящика</div>
<div>&#8211; Каждый поллер опрашивает свой inbox с заданным интервалом</div>
<div>&#8211; При совмещении функций в один inbox происходит повторная обработка писем</div>
<div>&#8211; Дублирование происходит примерно каждые 10 минут</div>
<h4>Рекомендации по настройке</h4>
<div>&#8211; Оставьте <code>service_desk_email_*</code> настроенным на ящик вида <code>helpdesk@...</code></div>
<div>&#8211; Настройте <code>incoming_email_*</code> на другой ящик, например <code>replies@...</code></div>
<div>&#8211; Не создавайте алиасы на один и тот же inbox</div>
<div>&#8211; Избегайте смешивания функций</div>
<div>Такое разделение исключает двойной захват писем, обеспечивает корректную маршрутизацию и устраняет повторяющиеся проблемы.</div>
<h4>Заключение</h4>
<div>Правильная настройка GitLab Service Desk требует понимания архитектуры системы и соблюдения принципа разделения почтовых ящиков. Следование описанным шагам обеспечит стабильную работу системы автоматизации обработки обращений пользователей.</div>
</div>
<p>&nbsp;</p><p>The post <a href="https://tokarchuk.ru/2025/09/02/configure-gitlab-service-desk/">Настройка GitLab Service Desk: пошаговое руководство</a> first appeared on <a href="https://tokarchuk.ru">Токарчук Андрей Михайлович | TypeScript, AI, VueJS, PHP и другие интересные штуки. Блог Zend Framework разработчика. Программирование на PHP, вопросы использование memcached, mysql, nosql баз данных, jquery, apache, nginx,mongodb, php и т.д.</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://tokarchuk.ru/2025/09/02/configure-gitlab-service-desk/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Lazydocker &#8211; быстрая установка</title>
		<link>https://tokarchuk.ru/2025/03/19/lazydocker-quick-install/</link>
					<comments>https://tokarchuk.ru/2025/03/19/lazydocker-quick-install/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Wed, 19 Mar 2025 06:07:25 +0000</pubDate>
				<category><![CDATA[Системное администрирование]]></category>
		<category><![CDATA[docker]]></category>
		<guid isPermaLink="false">https://tokarchuk.ru/?p=9064</guid>

					<description><![CDATA[<p>Несколько лет назад, в поисках более удобного способа управления Docker-контейнерами, я наткнулся на Lazydocker — интерактивный терминальный интерфейс для Docker и Docker Compose. С тех пор этот инструмент стал неотъемлемой частью моей повседневной работы.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-9065" src="https://tokarchuk.ru/wp-content/uploads/2025/03/lazydocker.jpg" alt="" width="1024" height="557" srcset="https://tokarchuk.ru/wp-content/uploads/2025/03/lazydocker.jpg 1024w, https://tokarchuk.ru/wp-content/uploads/2025/03/lazydocker-300x163.jpg 300w, https://tokarchuk.ru/wp-content/uploads/2025/03/lazydocker-768x418.jpg 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></p>
<p><a href="https://github.com/jesseduffield/lazydocker">Lazydocker</a> предоставляет возможность в одном окне терминала отслеживать состояние контейнеров, просматривать логи, статистику использования ресурсов и управлять сервисами. Благодаря поддержке как клавиатуры, так и мыши, навигация по интерфейсу становится интуитивно понятной. Особенно ценю возможность быстро перезапускать или останавливать контейнеры,</p>
<p>The post <a href="https://tokarchuk.ru/2025/03/19/lazydocker-quick-install/">Lazydocker – быстрая установка</a> first appeared on <a href="https://tokarchuk.ru">Токарчук Андрей Михайлович | TypeScript, AI, VueJS, PHP и другие интересные штуки. Блог Zend Framework разработчика. Программирование на PHP, вопросы использование memcached, mysql, nosql баз данных, jquery, apache, nginx,mongodb, php и т.д.</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>Несколько лет назад, в поисках более удобного способа управления Docker-контейнерами, я наткнулся на Lazydocker — интерактивный терминальный интерфейс для Docker и Docker Compose. С тех пор этот инструмент стал неотъемлемой частью моей повседневной работы.<span id="more-9064"></span></p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-9065" src="https://tokarchuk.ru/wp-content/uploads/2025/03/lazydocker.jpg" alt="" width="1024" height="557" srcset="https://tokarchuk.ru/wp-content/uploads/2025/03/lazydocker.jpg 1024w, https://tokarchuk.ru/wp-content/uploads/2025/03/lazydocker-300x163.jpg 300w, https://tokarchuk.ru/wp-content/uploads/2025/03/lazydocker-768x418.jpg 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></p>
<p><a href="https://github.com/jesseduffield/lazydocker">Lazydocker</a> предоставляет возможность в одном окне терминала отслеживать состояние контейнеров, просматривать логи, статистику использования ресурсов и управлять сервисами. Благодаря поддержке как клавиатуры, так и мыши, навигация по интерфейсу становится интуитивно понятной. Особенно ценю возможность быстро перезапускать или останавливать контейнеры, а также очищать неиспользуемые образы и тома.</p>
<p>Но почему-то его до сих пор нет в стандартных репозитариях Ubuntu, поэтому ловите однострочник для его быстрой установки.</p><pre class="urvanov-syntax-highlighter-plain-tag">curl -sSL https://raw.githubusercontent.com/upciti/wakemeops/main/assets/install_repository | sudo bash &amp;&amp; sudo apt install lazydocker</pre><p></p>
<h3>Материалы</h3>
<ul>
<li>https://docs.wakemeops.com/packages/lazydocker/</li>
</ul><p>The post <a href="https://tokarchuk.ru/2025/03/19/lazydocker-quick-install/">Lazydocker – быстрая установка</a> first appeared on <a href="https://tokarchuk.ru">Токарчук Андрей Михайлович | TypeScript, AI, VueJS, PHP и другие интересные штуки. Блог Zend Framework разработчика. Программирование на PHP, вопросы использование memcached, mysql, nosql баз данных, jquery, apache, nginx,mongodb, php и т.д.</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://tokarchuk.ru/2025/03/19/lazydocker-quick-install/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Зависание картинки RDP</title>
		<link>https://tokarchuk.ru/2025/03/12/rdp-hang-out/</link>
					<comments>https://tokarchuk.ru/2025/03/12/rdp-hang-out/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Wed, 12 Mar 2025 05:18:15 +0000</pubDate>
				<category><![CDATA[Системное администрирование]]></category>
		<category><![CDATA[RDP]]></category>
		<category><![CDATA[windows]]></category>
		<guid isPermaLink="false">https://tokarchuk.ru/?p=9058</guid>

					<description><![CDATA[<p>Столкнулся тут с проблемой, когда коннектишься по RDP к Windows 10 из стандартного маковского клиента Microsoft RDP то почему-то зависает картинка и дальше коннект не идет.</p>
<p>Выглядит это вот так:</p>
<p><img loading="lazy" decoding="async" class="aligncenter  wp-image-9059" src="https://tokarchuk.ru/wp-content/uploads/2025/03/Screenshot-2025-03-11-at-21.20.59-1024x661.png" alt="" width="682" height="440" srcset="https://tokarchuk.ru/wp-content/uploads/2025/03/Screenshot-2025-03-11-at-21.20.59-1024x661.png 1024w, https://tokarchuk.ru/wp-content/uploads/2025/03/Screenshot-2025-03-11-at-21.20.59-300x194.png 300w, https://tokarchuk.ru/wp-content/uploads/2025/03/Screenshot-2025-03-11-at-21.20.59-768x496.png 768w, https://tokarchuk.ru/wp-content/uploads/2025/03/Screenshot-2025-03-11-at-21.20.59-1536x992.png 1536w, https://tokarchuk.ru/wp-content/uploads/2025/03/Screenshot-2025-03-11-at-21.20.59-2048x1323.png 2048w" sizes="auto, (max-width: 682px) 100vw, 682px" /></p>
<p>Спасибо коллеге, подсказал, как это можно быстро пофиксить. Итак запускаем в целевой виртуалке консоль с правами администратора, выполняем там:<br />
[crayon-6a19db6b34aef631406028/]<br />
Потом перезагружаем систему. После этого коннект проходит нормально.</p>
<p>The post <a href="https://tokarchuk.ru/2025/03/12/rdp-hang-out/">Зависание картинки RDP</a> first appeared on <a href="https://tokarchuk.ru">Токарчук Андрей Михайлович | TypeScript, AI, VueJS, PHP и другие интересные штуки. Блог Zend Framework разработчика. Программирование на PHP, вопросы использование memcached, mysql, nosql баз данных, jquery, apache, nginx,mongodb, php и т.д.</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>Столкнулся тут с проблемой, когда коннектишься по RDP к Windows 10 из стандартного маковского клиента Microsoft RDP то почему-то зависает картинка и дальше коннект не идет.<span id="more-9058"></span></p>
<p>Выглядит это вот так:</p>
<p><img loading="lazy" decoding="async" class="aligncenter  wp-image-9059" src="https://tokarchuk.ru/wp-content/uploads/2025/03/Screenshot-2025-03-11-at-21.20.59-1024x661.png" alt="" width="682" height="440" srcset="https://tokarchuk.ru/wp-content/uploads/2025/03/Screenshot-2025-03-11-at-21.20.59-1024x661.png 1024w, https://tokarchuk.ru/wp-content/uploads/2025/03/Screenshot-2025-03-11-at-21.20.59-300x194.png 300w, https://tokarchuk.ru/wp-content/uploads/2025/03/Screenshot-2025-03-11-at-21.20.59-768x496.png 768w, https://tokarchuk.ru/wp-content/uploads/2025/03/Screenshot-2025-03-11-at-21.20.59-1536x992.png 1536w, https://tokarchuk.ru/wp-content/uploads/2025/03/Screenshot-2025-03-11-at-21.20.59-2048x1323.png 2048w" sizes="auto, (max-width: 682px) 100vw, 682px" /></p>
<p>Спасибо коллеге, подсказал, как это можно быстро пофиксить. Итак запускаем в целевой виртуалке консоль с правами администратора, выполняем там:</p><pre class="urvanov-syntax-highlighter-plain-tag">reg add "HKLM\software\policies\microsoft\windows nt\Terminal Services\Client" /v fClientDisableUDP /d 1 /t REG_DWORD</pre><p>Потом перезагружаем систему. После этого коннект проходит нормально.</p><p>The post <a href="https://tokarchuk.ru/2025/03/12/rdp-hang-out/">Зависание картинки RDP</a> first appeared on <a href="https://tokarchuk.ru">Токарчук Андрей Михайлович | TypeScript, AI, VueJS, PHP и другие интересные штуки. Блог Zend Framework разработчика. Программирование на PHP, вопросы использование memcached, mysql, nosql баз данных, jquery, apache, nginx,mongodb, php и т.д.</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://tokarchuk.ru/2025/03/12/rdp-hang-out/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Использование NetBird peer как default gateway</title>
		<link>https://tokarchuk.ru/2025/03/11/netbird-peer-default-gateway/</link>
					<comments>https://tokarchuk.ru/2025/03/11/netbird-peer-default-gateway/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Tue, 11 Mar 2025 13:59:58 +0000</pubDate>
				<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[Системное администрирование]]></category>
		<guid isPermaLink="false">https://tokarchuk.ru/?p=9055</guid>

					<description><![CDATA[<p>Есть несколько вариантов установки NetBird. Один из вариантов подразумевает,  что вы можете использовать его как шлюз по умолчанию для других ваших сетевых устройств (на которых не установлен vpn-клиент). Так вот, из коробки он не работает. Вообще 🙂</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-9056" src="https://tokarchuk.ru/wp-content/uploads/2025/03/system_administrator.jpg" alt="" width="819" height="546" srcset="https://tokarchuk.ru/wp-content/uploads/2025/03/system_administrator.jpg 1000w, https://tokarchuk.ru/wp-content/uploads/2025/03/system_administrator-300x200.jpg 300w, https://tokarchuk.ru/wp-content/uploads/2025/03/system_administrator-768x512.jpg 768w" sizes="auto, (max-width: 819px) 100vw, 819px" /></p>
<p>Схема сети у нас такая:</p>
<ul>
<li>vm-1 (10.10.109.22) &#8211; пользовательская машина на локальной площадке.</li>
<li>vm-2 (10.10.109.24) &#8211; netbird peer на локальной площадке.</li>
<li>vm-3 (x.x.x.x) &#8211; netbird peer на удаленной площадке.</li>
</ul>
<p>The post <a href="https://tokarchuk.ru/2025/03/11/netbird-peer-default-gateway/">Использование NetBird peer как default gateway</a> first appeared on <a href="https://tokarchuk.ru">Токарчук Андрей Михайлович | TypeScript, AI, VueJS, PHP и другие интересные штуки. Блог Zend Framework разработчика. Программирование на PHP, вопросы использование memcached, mysql, nosql баз данных, jquery, apache, nginx,mongodb, php и т.д.</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>Есть несколько вариантов установки NetBird. Один из вариантов подразумевает,  что вы можете использовать его как шлюз по умолчанию для других ваших сетевых устройств (на которых не установлен vpn-клиент). Так вот, из коробки он не работает. Вообще <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /><span id="more-9055"></span></p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-9056" src="https://tokarchuk.ru/wp-content/uploads/2025/03/system_administrator.jpg" alt="" width="819" height="546" srcset="https://tokarchuk.ru/wp-content/uploads/2025/03/system_administrator.jpg 1000w, https://tokarchuk.ru/wp-content/uploads/2025/03/system_administrator-300x200.jpg 300w, https://tokarchuk.ru/wp-content/uploads/2025/03/system_administrator-768x512.jpg 768w" sizes="auto, (max-width: 819px) 100vw, 819px" /></p>
<p>Схема сети у нас такая:</p>
<ul>
<li><strong>vm-1</strong> (10.10.109.22) &#8211; пользовательская машина на локальной площадке.</li>
<li><strong>vm-2</strong> (10.10.109.24) &#8211; netbird peer на локальной площадке.</li>
<li><strong>vm-3</strong> (x.x.x.x) &#8211; netbird peer на удаленной площадке.</li>
</ul>
<p>&nbsp;</p>
<h2>Проблема</h2>
<p>Задача собственно такая: необходимо чтобы весь исходящий трафик с машинки <strong>vm-1</strong> выходил в интернет через машинку <strong>vm-3</strong>. При этом на машинке <strong>vm-1</strong> мы не можем использовать никакой софт (прокси, vpn-клиенты, вообще ничего). Мы можем только указать сетевые настройки и все. А может это и не машинка вообще. И это я еще сильно все упрощаю. А вот на машинке <strong>vm-2</strong> мы можем ставить что угодно и как угодно. Но она должна быть network gateway для машинки <strong>vm-1</strong>. При этом мы не можем выпускать трафик с <strong>vm-2</strong> в интернет, нам надо, чтобы он роутился через <strong>vm-3</strong>.</p>
<p>Для решения этой задачи мы поставили Wireguard туннель между vm-2 и vm-3. Дальше начали тестировать с помощью запуска speedtest-cli на vm2.</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo apt-get install speedtest-cli
sudo speedtest-cli --secure
sudo speedtest-cli</pre><p>&nbsp;</p>
<p>Вариант с &#8211;secure используем для тестирования HTTPS, вариант без него для тестирования HTTP. Для машинки vm-1 указываем вот такие сетевые настройки:</p><pre class="urvanov-syntax-highlighter-plain-tag">network:
    ethernets:
        ens33:
            addresses:
            - 10.10.109.22/24
            nameservers:
                addresses:
                - 8.8.8.8
                search:
                - trs.internal
            routes:
            -   to: default
                via: 10.10.109.24
    version: 2</pre><p>То есть для нее роутером будет vm-2. На vm-2 у нас два сетевых интерфейса: eth0 (обычный) и wt0 (wireguard). И вот тут то начинаются проблемы. У нас категорически не хотел работать Интернет на vm-1. При этом пинги шли абсолютно нормально. В общем, довольно долго мы с этим разбирались, пока друг не подсказал мне что возможно тут проблемы с MTU. И начались переборы MTU. Для каких-то значений начинал работать speedtest-cli &#8211;secure, для каких-то отрубался и он. Но потом решение нашлось.</p>
<h2>Решение</h2>
<p>Оказалось, что править надо было не только MTU, но еще и MSS. В результате надо было исполнить такую команду:</p><pre class="urvanov-syntax-highlighter-plain-tag">sudo apt install iproute2 iptables
sudo ip link set dev wt0 mtu 1380
sudo iptables -t mangle -A POSTROUTING -o wt0 -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1340</pre><p>на всех NetBird peer-ах по пути следования пакета. В нашем случае vm-2 и vm-3. После этого все заработало. Учтите, что эти значение не сохраняются после перезагрузки и каждый раз их надо применять заново.</p><p>The post <a href="https://tokarchuk.ru/2025/03/11/netbird-peer-default-gateway/">Использование NetBird peer как default gateway</a> first appeared on <a href="https://tokarchuk.ru">Токарчук Андрей Михайлович | TypeScript, AI, VueJS, PHP и другие интересные штуки. Блог Zend Framework разработчика. Программирование на PHP, вопросы использование memcached, mysql, nosql баз данных, jquery, apache, nginx,mongodb, php и т.д.</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://tokarchuk.ru/2025/03/11/netbird-peer-default-gateway/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>NetBird и проблемы с Caddy контейнером</title>
		<link>https://tokarchuk.ru/2025/02/24/netbird-and-caddy-container-problems/</link>
					<comments>https://tokarchuk.ru/2025/02/24/netbird-and-caddy-container-problems/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Mon, 24 Feb 2025 09:37:04 +0000</pubDate>
				<category><![CDATA[Системное администрирование]]></category>
		<category><![CDATA[netbird]]></category>
		<category><![CDATA[vpn]]></category>
		<guid isPermaLink="false">https://tokarchuk.ru/?p=9048</guid>

					<description><![CDATA[<p>Сегодня внезапно отвалилась оверлейная сеть. Когда начал разибраться &#8211; то выяснилось странное. Не стартовал web интерфейс, и половина контейнеров не работала.</p>
<p>Проблема</p>
<p>Когда я подключился на vCenter то увидел совершенно дичайшее потребление CPU.</p>
<p>&#160;</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-large wp-image-9050" src="https://tokarchuk.ru/wp-content/uploads/2025/02/netbird-vm-1024x468.png" alt="" width="1024" height="468" srcset="https://tokarchuk.ru/wp-content/uploads/2025/02/netbird-vm-1024x468.png 1024w, https://tokarchuk.ru/wp-content/uploads/2025/02/netbird-vm-300x137.png 300w, https://tokarchuk.ru/wp-content/uploads/2025/02/netbird-vm-768x351.png 768w, https://tokarchuk.ru/wp-content/uploads/2025/02/netbird-vm-1536x702.png 1536w, https://tokarchuk.ru/wp-content/uploads/2025/02/netbird-vm-811x372.png 811w, https://tokarchuk.ru/wp-content/uploads/2025/02/netbird-vm.png 1658w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></p>
<p>&#160;</p>
<p>А внутри машины отображалась вот эта ошибка.</p>
<p>&#160;</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-large wp-image-9051" src="https://tokarchuk.ru/wp-content/uploads/2025/02/netbird-vm-2-1024x294.png" alt="" width="1024" height="294" srcset="https://tokarchuk.ru/wp-content/uploads/2025/02/netbird-vm-2-1024x294.png 1024w, https://tokarchuk.ru/wp-content/uploads/2025/02/netbird-vm-2-300x86.png 300w, https://tokarchuk.ru/wp-content/uploads/2025/02/netbird-vm-2-768x221.png 768w, https://tokarchuk.ru/wp-content/uploads/2025/02/netbird-vm-2-1536x441.png 1536w, https://tokarchuk.ru/wp-content/uploads/2025/02/netbird-vm-2-2048x589.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></p>
<p>В общем из-за того, что надиске кончилось место контейнер с Caddy не смог переполучить SSL-сертификат,</p>
<p>The post <a href="https://tokarchuk.ru/2025/02/24/netbird-and-caddy-container-problems/">NetBird и проблемы с Caddy контейнером</a> first appeared on <a href="https://tokarchuk.ru">Токарчук Андрей Михайлович | TypeScript, AI, VueJS, PHP и другие интересные штуки. Блог Zend Framework разработчика. Программирование на PHP, вопросы использование memcached, mysql, nosql баз данных, jquery, apache, nginx,mongodb, php и т.д.</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>Сегодня внезапно отвалилась оверлейная сеть. Когда начал разибраться &#8211; то выяснилось странное. Не стартовал web интерфейс, и половина контейнеров не работала.<span id="more-9048"></span></p>
<h2>Проблема</h2>
<p>Когда я подключился на vCenter то увидел совершенно дичайшее потребление CPU.</p>
<p>&nbsp;</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-large wp-image-9050" src="https://tokarchuk.ru/wp-content/uploads/2025/02/netbird-vm-1024x468.png" alt="" width="1024" height="468" srcset="https://tokarchuk.ru/wp-content/uploads/2025/02/netbird-vm-1024x468.png 1024w, https://tokarchuk.ru/wp-content/uploads/2025/02/netbird-vm-300x137.png 300w, https://tokarchuk.ru/wp-content/uploads/2025/02/netbird-vm-768x351.png 768w, https://tokarchuk.ru/wp-content/uploads/2025/02/netbird-vm-1536x702.png 1536w, https://tokarchuk.ru/wp-content/uploads/2025/02/netbird-vm-811x372.png 811w, https://tokarchuk.ru/wp-content/uploads/2025/02/netbird-vm.png 1658w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></p>
<p>&nbsp;</p>
<p>А внутри машины отображалась вот эта ошибка.</p>
<p>&nbsp;</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-large wp-image-9051" src="https://tokarchuk.ru/wp-content/uploads/2025/02/netbird-vm-2-1024x294.png" alt="" width="1024" height="294" srcset="https://tokarchuk.ru/wp-content/uploads/2025/02/netbird-vm-2-1024x294.png 1024w, https://tokarchuk.ru/wp-content/uploads/2025/02/netbird-vm-2-300x86.png 300w, https://tokarchuk.ru/wp-content/uploads/2025/02/netbird-vm-2-768x221.png 768w, https://tokarchuk.ru/wp-content/uploads/2025/02/netbird-vm-2-1536x441.png 1536w, https://tokarchuk.ru/wp-content/uploads/2025/02/netbird-vm-2-2048x589.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></p>
<p>В общем из-за того, что надиске кончилось место контейнер с Caddy не смог переполучить SSL-сертификат, пиры не смогли установить шфированное соединение ну а дальше все пошло по бороде. Я, естественно, добавил диска, перезапустил машину &#8211; но caddy все равно не стартанул корректно. Тогда после того как я облазил весь GitHub у NetBird я нашел <a href="https://github.com/netbirdio/netbird/issues/2654">похожую проблему</a>.</p>
<h2>Решение</h2>
<p>Надо</p>
<ol>
<li>Посмотреть, какой docker volume присоединен к контейнеру caddy.</li>
<li>Удалить контейнер caddy</li>
<li>Удалить этот volume</li>
<li>Заново создать контейнер с caddy. Можно просто запустить docker compose up -d в корне проекта.</li>
</ol>
<h2>Materials</h2>
<ul>
<li>https://github.com/netbirdio/netbird/issues/2654</li>
</ul><p>The post <a href="https://tokarchuk.ru/2025/02/24/netbird-and-caddy-container-problems/">NetBird и проблемы с Caddy контейнером</a> first appeared on <a href="https://tokarchuk.ru">Токарчук Андрей Михайлович | TypeScript, AI, VueJS, PHP и другие интересные штуки. Блог Zend Framework разработчика. Программирование на PHP, вопросы использование memcached, mysql, nosql баз данных, jquery, apache, nginx,mongodb, php и т.д.</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://tokarchuk.ru/2025/02/24/netbird-and-caddy-container-problems/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>AI Tinkerers &#8211; Meetup #3 (Feb 2025)</title>
		<link>https://tokarchuk.ru/2025/02/22/ai-tinkerers-meetup-3/</link>
					<comments>https://tokarchuk.ru/2025/02/22/ai-tinkerers-meetup-3/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Sat, 22 Feb 2025 07:23:26 +0000</pubDate>
				<category><![CDATA[Искусственный интеллект]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[AI Tinkerers]]></category>
		<category><![CDATA[Azure]]></category>
		<guid isPermaLink="false">https://tokarchuk.ru/?p=9036</guid>

					<description><![CDATA[<p>Вчера вечером, после работы, я был уже довольно уставшим, но в календаре висело приглашение на митап <em data-start="131" data-end="145">AI Tinkerers</em>. А как истинный <em data-start="162" data-end="172">tinkerer</em>, я просто не мог его пропустить. И, как оказалось, не зря.
</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-large wp-image-9037" src="https://tokarchuk.ru/wp-content/uploads/2025/02/tinkerers_2025_02_22_1-1024x473.jpeg" alt="" width="1024" height="473" srcset="https://tokarchuk.ru/wp-content/uploads/2025/02/tinkerers_2025_02_22_1-1024x473.jpeg 1024w, https://tokarchuk.ru/wp-content/uploads/2025/02/tinkerers_2025_02_22_1-300x139.jpeg 300w, https://tokarchuk.ru/wp-content/uploads/2025/02/tinkerers_2025_02_22_1-768x355.jpeg 768w, https://tokarchuk.ru/wp-content/uploads/2025/02/tinkerers_2025_02_22_1.jpeg 1280w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></p>
<p>&#160;</p>
<p data-start="29" data-end="393">Вначале Mohammed Fazalullah, как обычно, обратился с приветственным словом и рассказал о нашем сообществе, встречах и основной идее, которая за ним стоит. У него очень интересная система отбора.</p>
<p>The post <a href="https://tokarchuk.ru/2025/02/22/ai-tinkerers-meetup-3/">AI Tinkerers – Meetup #3 (Feb 2025)</a> first appeared on <a href="https://tokarchuk.ru">Токарчук Андрей Михайлович | TypeScript, AI, VueJS, PHP и другие интересные штуки. Блог Zend Framework разработчика. Программирование на PHP, вопросы использование memcached, mysql, nosql баз данных, jquery, apache, nginx,mongodb, php и т.д.</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>Вчера вечером, после работы, я был уже довольно уставшим, но в календаре висело приглашение на митап <em data-start="131" data-end="145">AI Tinkerers</em>. А как истинный <em data-start="162" data-end="172">tinkerer</em>, я просто не мог его пропустить. И, как оказалось, не зря.<br />
<span id="more-9036"></span></p>
<p><img loading="lazy" decoding="async" class="aligncenter size-large wp-image-9037" src="https://tokarchuk.ru/wp-content/uploads/2025/02/tinkerers_2025_02_22_1-1024x473.jpeg" alt="" width="1024" height="473" srcset="https://tokarchuk.ru/wp-content/uploads/2025/02/tinkerers_2025_02_22_1-1024x473.jpeg 1024w, https://tokarchuk.ru/wp-content/uploads/2025/02/tinkerers_2025_02_22_1-300x139.jpeg 300w, https://tokarchuk.ru/wp-content/uploads/2025/02/tinkerers_2025_02_22_1-768x355.jpeg 768w, https://tokarchuk.ru/wp-content/uploads/2025/02/tinkerers_2025_02_22_1.jpeg 1280w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></p>
<p>&nbsp;</p>
<p data-start="29" data-end="393">Вначале Mohammed Fazalullah, как обычно, обратился с приветственным словом и рассказал о нашем сообществе, встречах и основной идее, которая за ним стоит. У него очень интересная система отбора. Уже с первых встреч стало понятно, что количество желающих явно больше количества мест, и тогда он (как настоящий <em data-start="339" data-end="352">AI tinkerer</em>) подключил AI к решению этого вопроса.</p>
<p data-start="395" data-end="828">Итак, когда вы регистрируетесь на митап, вам нужно заполнить форму, в которой коротко рассказать о себе и дать ссылки на свои профили в соцсетях (<em data-start="541" data-end="568">LinkedIn, Twitter, GitHub</em>). Далее следует заполнить форму со своими интересами, технологиями, с которыми вы работаете, и т. д. Причём возле каждого поля расположена кнопка с волшебной палочкой — при клике на неё AI-модель генерирует текст на основе ваших профилей в социальных сетях.</p>
<p data-start="830" data-end="969">Я попробовал — и надо сказать, что генерирует она довольно качественно. В общем, я заполнил форму, отправил её и стал ждать приглашения.</p>
<h2>Интро</h2>
<p><img loading="lazy" decoding="async" class="aligncenter size-large wp-image-9038" src="https://tokarchuk.ru/wp-content/uploads/2025/02/tinkerers_2025_02_22_2-1024x769.jpeg" alt="" width="1024" height="769" srcset="https://tokarchuk.ru/wp-content/uploads/2025/02/tinkerers_2025_02_22_2-1024x769.jpeg 1024w, https://tokarchuk.ru/wp-content/uploads/2025/02/tinkerers_2025_02_22_2-300x225.jpeg 300w, https://tokarchuk.ru/wp-content/uploads/2025/02/tinkerers_2025_02_22_2-768x577.jpeg 768w, https://tokarchuk.ru/wp-content/uploads/2025/02/tinkerers_2025_02_22_2.jpeg 1280w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></p>
<p data-start="36" data-end="294">Потом пришло письмо о том, что мест мало, и если вы хотите попасть, то еще раз посмотрите вашу форму — может быть, вы что-то забыли добавить. А я забыл указать профиль на GitHub. После того как я его добавил, за пару часов до митапа мне пришло приглашение.</p>
<p data-start="296" data-end="606">Как сказал Mohammed Fazalullah, его AI-система в первую очередь анализирует профиль на GitHub, и если его нет, то никто не будет вас приглашать. Потому что, ну какой же вы <em data-start="468" data-end="481">AI tinkerer</em> без GitHub-профиля? <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /> И это правильно, я считаю. Это отличное решение, чтобы митап не превратился в тусовку маркетологов.</p>
<p data-start="608" data-end="1046">Далее он показал личный кабинет этой системы, где пользователи автоматически помечаются разными лейблами. Например, те, кто регистрируется на митап, но потом не приходит, отмечаются как <em data-start="794" data-end="803">&#8220;ghost&#8221;</em>, потому что человек занял чьё-то место, а сам не пришёл. Таких он больше не приглашает. Также там есть внутренняя система социального рейтинга. Я не знаю, как именно она формируется, но, видимо, как-то по социальной активности в сообществе.</p>
<p data-start="1048" data-end="1196">Там ещё много критериев, на основе которых система принимает решение — приглашать человека или нет. Мне такое решение показалось очень интересным.</p>
<p>&nbsp;</p>
<h2 class="p1">&#8220;Completely local RAG in low code with Deepseek-r1:7b and Flowise&#8221; by Mohamad Al Solh</h2>
<p>&nbsp;</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-large wp-image-9040" src="https://tokarchuk.ru/wp-content/uploads/2025/02/tinkerers_2025_02_22_4-1024x769.jpeg" alt="" width="1024" height="769" srcset="https://tokarchuk.ru/wp-content/uploads/2025/02/tinkerers_2025_02_22_4-1024x769.jpeg 1024w, https://tokarchuk.ru/wp-content/uploads/2025/02/tinkerers_2025_02_22_4-300x225.jpeg 300w, https://tokarchuk.ru/wp-content/uploads/2025/02/tinkerers_2025_02_22_4-768x577.jpeg 768w, https://tokarchuk.ru/wp-content/uploads/2025/02/tinkerers_2025_02_22_4.jpeg 1280w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></p>
<p data-start="36" data-end="246">В этом докладе Мохаммед рассказал о том, как он создаёт прототипы с помощью Flowise и локально установленной <em data-start="145" data-end="161">DeepSeek-R1 7B</em>. Он поделился опытом разработки генератора SQL-запросов для локальной базы данных.</p>
<p data-start="248" data-end="314">Вообще, есть два способа извлечения данных из корпоративных баз:</p>
<ol data-start="316" data-end="430">
<li data-start="316" data-end="370"><strong data-start="319" data-end="367">Similarity / Hybrid search in Vector Storage</strong>.</li>
<li data-start="371" data-end="430"><strong data-start="374" data-end="427">Query generation for relational / NoSQL databases</strong>.</li>
</ol>
<p data-start="432" data-end="813">В первом случае мы преобразуем данные в векторную форму на этапе <em data-start="497" data-end="505">ingest</em>, а на этапе <em data-start="518" data-end="526">search</em> выполняем поиск по <em data-start="546" data-end="574">similarity / hybrid search</em> в этом многомерном пространстве. Недостаток этого метода в том, что нужно выполнить корректное преобразование — а это само по себе сложная задача. И речь даже не столько о векторизации, сколько о правильном разбиении данных на <em data-start="802" data-end="810">chunks</em>.</p>
<p data-start="815" data-end="1138">При использовании второго метода мы подразумеваем, что все данные уже структурированы, хранятся в базе данных, и нам нужно составить корректный SQL-запрос. Основная проблема здесь — найти адекватную модель для генерации запроса, отсечь галлюцинации и провести валидацию запроса, чтобы в конце <em data-start="1108" data-end="1118">pipeline</em> всё не сломалось.</p>
<p data-start="1140" data-end="1515">Мохаммед пошёл по второму пути. Мне было интересно, почему он не использует специализированные модели для генерации SQL-запросов, поэтому я спросил его. Он ответил, что их качество оставляет желать лучшего и даже дистиллированный до 7B <em data-start="1376" data-end="1386">DeepSeek</em> выдаёт результаты гораздо лучше. Возьму это на заметку — если придётся решать такую задачу, скорее всего, выберу ту же модель.</p>
<p>&nbsp;</p>
<h2 class="p1">&#8220;Accepting Linkedin Invitation Automatically&#8221; by Reem Elmahdi</h2>
<p><img loading="lazy" decoding="async" class="aligncenter size-large wp-image-9039" src="https://tokarchuk.ru/wp-content/uploads/2025/02/tinkerers_2025_02_22_3-577x1024.jpeg" alt="" width="577" height="1024" srcset="https://tokarchuk.ru/wp-content/uploads/2025/02/tinkerers_2025_02_22_3-577x1024.jpeg 577w, https://tokarchuk.ru/wp-content/uploads/2025/02/tinkerers_2025_02_22_3-169x300.jpeg 169w, https://tokarchuk.ru/wp-content/uploads/2025/02/tinkerers_2025_02_22_3.jpeg 721w" sizes="auto, (max-width: 577px) 100vw, 577px" /></p>
<p data-pm-slice="1 1 []">Мы познакомились с Рим вчера, и эта девушка поразила меня своей целеустремлённостью. Она хотела попасть на митап, но мест уже не было, поэтому она решила выступить с презентацией. Рим продемонстрировала автоматический обработчик приглашений для LinkedIn, написанный на Python. Этот инструмент заходит в её профиль на LinkedIn, принимает приглашения и отправляет сообщения пользователям. Было забавно, что, пока она проводила презентацию, некоторые люди из зала нашли её профиль в LinkedIn и отправили ей приглашения. Когда она запустила бота, он начал принимать приглашения, которые были отправлены буквально только что. Бот написан на Python и использует Selenium для работы с LinkedIn. Конечно, он имеет свои ограничения, но наблюдать за тем, как всё это происходит прямо перед тобой, – это крайне интересно.</p>
<h2 class="p1">&#8220;Socia&#8221; by Adam Ahmed Ibrahim</h2>
<p><img loading="lazy" decoding="async" class="aligncenter size-large wp-image-9042" src="https://tokarchuk.ru/wp-content/uploads/2025/02/tinkerers_2025_02_22_6-577x1024.jpeg" alt="" width="577" height="1024" srcset="https://tokarchuk.ru/wp-content/uploads/2025/02/tinkerers_2025_02_22_6-577x1024.jpeg 577w, https://tokarchuk.ru/wp-content/uploads/2025/02/tinkerers_2025_02_22_6-169x300.jpeg 169w, https://tokarchuk.ru/wp-content/uploads/2025/02/tinkerers_2025_02_22_6.jpeg 721w" sizes="auto, (max-width: 577px) 100vw, 577px" /></p>
<p>&nbsp;</p>
<p data-pm-slice="1 1 []">Ребята представили свой стартап для тренировки разговорной речи. В нём предусмотрено несколько сценариев: подготовка к интервью, беседа с другом и многие другие. Они рассказали, как использовали API <a href="https://azure.microsoft.com/en-us/products/ai-services/ai-speech">Azure AI Speach</a> как для распознавания голоса, так и для его генерации. Преимущество данной технологии заключается в том, что используемая модель знает множество языков и их диалектов, поэтому AI-агент буквально может разговаривать на одном языке с пользователем.</p>
<h2 class="p1">AI-Native: Live Coding an Agentic RAG That Thinks and Adapts&#8221; by Amir Houieh</h2>
<p><img loading="lazy" decoding="async" class="aligncenter size-large wp-image-9043" src="https://tokarchuk.ru/wp-content/uploads/2025/02/tinkerers_2025_02_22_7-1024x769.jpeg" alt="" width="1024" height="769" srcset="https://tokarchuk.ru/wp-content/uploads/2025/02/tinkerers_2025_02_22_7-1024x769.jpeg 1024w, https://tokarchuk.ru/wp-content/uploads/2025/02/tinkerers_2025_02_22_7-300x225.jpeg 300w, https://tokarchuk.ru/wp-content/uploads/2025/02/tinkerers_2025_02_22_7-768x577.jpeg 768w, https://tokarchuk.ru/wp-content/uploads/2025/02/tinkerers_2025_02_22_7.jpeg 1280w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></p>
<p data-pm-slice="1 1 []">Амир — основной разработчик <a href="https://unbody.io/">UnBody</a>, платформы для создания AI-приложений. Я начал присматриваться к этой платформе, поскольку, по идее, там есть всё, что мне нужно: база знаний, гибридный поиск и фильтрация. Но самое интересное здесь — это подход к написанию приложений на этой платформе. Судя по примерам кода, которые Амир показал нам, это очень похоже на написание кода для ORM-систем. Те, кто давно следят за моими постами, знают, что я увлекаюсь ORM и всячески пропагандирую его использование в разработке. Да, я осведомлён об ограничениях, умею обходить проблемы с производительностью и перемещаться по слоям абстракции. Мне нравится сам подход, когда мы строим цепочку вызовов функций, таким образом формируя наш запрос. Это называется <a href="https://en.wikipedia.org/wiki/Method_chaining">Method Chaining</a>. Это очень удобно и повышает скорость разработки. Так вот, Амир предлагает использовать эту парадигму для написания AI-приложений. В общем, мне очень интересно попробовать эту платформу и посмотреть, что из этого выйдет. Если хотя бы половина того, что заявлено, правда, то это решение действительно революционно.</p>
<p>Мне было очень приятно посетить этот митап, так здорово быть в компании таких умных и энергичных людей!</p><p>The post <a href="https://tokarchuk.ru/2025/02/22/ai-tinkerers-meetup-3/">AI Tinkerers – Meetup #3 (Feb 2025)</a> first appeared on <a href="https://tokarchuk.ru">Токарчук Андрей Михайлович | TypeScript, AI, VueJS, PHP и другие интересные штуки. Блог Zend Framework разработчика. Программирование на PHP, вопросы использование memcached, mysql, nosql баз данных, jquery, apache, nginx,mongodb, php и т.д.</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://tokarchuk.ru/2025/02/22/ai-tinkerers-meetup-3/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Настройка SFTP расширения в VSCode</title>
		<link>https://tokarchuk.ru/2025/02/19/sftp-vscode-extension/</link>
					<comments>https://tokarchuk.ru/2025/02/19/sftp-vscode-extension/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Wed, 19 Feb 2025 06:54:14 +0000</pubDate>
				<category><![CDATA[Веб-разработка]]></category>
		<category><![CDATA[ssh]]></category>
		<category><![CDATA[vscode]]></category>
		<guid isPermaLink="false">https://tokarchuk.ru/?p=9031</guid>

					<description><![CDATA[<p>Сейчас пытался настроить синхронихзацию файлов десктопной среды разработки VSCode и удаленного сервера по ssh. Как обычно сразу не зараотало, поэтому делюсь солюшеном.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-large wp-image-9032" src="https://tokarchuk.ru/wp-content/uploads/2025/02/cursor_ai-1024x647.png" alt="" width="1024" height="647" srcset="https://tokarchuk.ru/wp-content/uploads/2025/02/cursor_ai-1024x647.png 1024w, https://tokarchuk.ru/wp-content/uploads/2025/02/cursor_ai-300x189.png 300w, https://tokarchuk.ru/wp-content/uploads/2025/02/cursor_ai-768x485.png 768w, https://tokarchuk.ru/wp-content/uploads/2025/02/cursor_ai-1536x970.png 1536w, https://tokarchuk.ru/wp-content/uploads/2025/02/cursor_ai-2048x1293.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></p>
<p>&#160;</p>
<p>Проблема</p>
<p>В консоле великолепно проходит ssh-авторизация по ключу, а вот в VSCode файлы через него не закачиваются. Оказалось, что проблема была в алгоритме шифрования.</p>
<p>Решение</p>
<p>Устанавливаем расширение &#8220;<a href="https://marketplace.visualstudio.com/items?itemName=Natizyskunk.sftp">SFTP</a>&#8221; от автора Natizyskunk. Сейчас оно второе в списке, будьте внимательны, иконки у них одинаковые,</p>
<p>The post <a href="https://tokarchuk.ru/2025/02/19/sftp-vscode-extension/">Настройка SFTP расширения в VSCode</a> first appeared on <a href="https://tokarchuk.ru">Токарчук Андрей Михайлович | TypeScript, AI, VueJS, PHP и другие интересные штуки. Блог Zend Framework разработчика. Программирование на PHP, вопросы использование memcached, mysql, nosql баз данных, jquery, apache, nginx,mongodb, php и т.д.</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>Сейчас пытался настроить синхронихзацию файлов десктопной среды разработки VSCode и удаленного сервера по ssh. Как обычно сразу не зараотало, поэтому делюсь солюшеном.<span id="more-9031"></span></p>
<p><img loading="lazy" decoding="async" class="aligncenter size-large wp-image-9032" src="https://tokarchuk.ru/wp-content/uploads/2025/02/cursor_ai-1024x647.png" alt="" width="1024" height="647" srcset="https://tokarchuk.ru/wp-content/uploads/2025/02/cursor_ai-1024x647.png 1024w, https://tokarchuk.ru/wp-content/uploads/2025/02/cursor_ai-300x189.png 300w, https://tokarchuk.ru/wp-content/uploads/2025/02/cursor_ai-768x485.png 768w, https://tokarchuk.ru/wp-content/uploads/2025/02/cursor_ai-1536x970.png 1536w, https://tokarchuk.ru/wp-content/uploads/2025/02/cursor_ai-2048x1293.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></p>
<p>&nbsp;</p>
<h2>Проблема</h2>
<p>В консоле великолепно проходит ssh-авторизация по ключу, а вот в VSCode файлы через него не закачиваются. Оказалось, что проблема была в алгоритме шифрования.</p>
<h2>Решение</h2>
<p>Устанавливаем расширение &#8220;<a href="https://marketplace.visualstudio.com/items?itemName=Natizyskunk.sftp">SFTP</a>&#8221; от автора <strong>Natizyskunk</strong>. Сейчас оно второе в списке, будьте внимательны, иконки у них одинаковые, но первое закачивает пустые файлы.</p>
<p>1. Генерируем пару ключей ed25519 на локальной машине.</p><pre class="urvanov-syntax-highlighter-plain-tag">ssh-keygen -t ed25519</pre><p>2. Закачиваем публичный ключ на целевую машину.</p>
<p>3. Правим конфиг SFTP расширения.</p>
<p>Cmd + Shift + P -&gt; &#8220;SFTP: Config&#8221;</p>
<p>Вводим вот такой конфиг:</p><pre class="urvanov-syntax-highlighter-plain-tag">{
    "name": "x.x.x.x",
    "host": "x.x.x.x",
    "protocol": "sftp",
    "port": 22,
    "secure": true,
    "username": "admin",
    "privateKeyPath": "/Users/andrey/.ssh/id_ed25519",
    "remotePath": "/home/admin/trmg-mplx/current", 
    "uploadOnSave": true,
    "ignore": [".vscode", ".git", ".DS_Store"]
}</pre><p>4. Тестируем</p>
<p>Нажимаем Cmd+S и проверяем что открытый измененный файл закачался на целевую машину.</p>
<h2>Материалы</h2>
<ul>
<li><a href="https://github.com/Natizyskunk/vscode-sftp/issues/319#issuecomment-1600768515">https://github.com/Natizyskunk/vscode-sftp/issues/319#issuecomment-1600768515</a></li>
<li><a href="https://github.com/Natizyskunk/vscode-sftp">https://github.com/Natizyskunk/vscode-sftp</a></li>
</ul><p>The post <a href="https://tokarchuk.ru/2025/02/19/sftp-vscode-extension/">Настройка SFTP расширения в VSCode</a> first appeared on <a href="https://tokarchuk.ru">Токарчук Андрей Михайлович | TypeScript, AI, VueJS, PHP и другие интересные штуки. Блог Zend Framework разработчика. Программирование на PHP, вопросы использование memcached, mysql, nosql баз данных, jquery, apache, nginx,mongodb, php и т.д.</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://tokarchuk.ru/2025/02/19/sftp-vscode-extension/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Особенности применения NetBird</title>
		<link>https://tokarchuk.ru/2025/02/17/features-of-netbird-application/</link>
					<comments>https://tokarchuk.ru/2025/02/17/features-of-netbird-application/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Mon, 17 Feb 2025 07:58:09 +0000</pubDate>
				<category><![CDATA[Системное администрирование]]></category>
		<category><![CDATA[netbird]]></category>
		<guid isPermaLink="false">https://tokarchuk.ru/?p=9025</guid>

					<description><![CDATA[<p data-pm-slice="1 1 []">Многие из вас знают, что такое оверлейные сети, а некоторые даже уже успели с ними столкнуться. В качестве связи между филиалами (branch office) или удаленными площадками (remote datacenters) мы пробуем использовать такое решение, как NetBird. Сейчас оно проходит тестирование в нашей инфраструктуре. Однако пока мы все еще не запустили его в продакшен.</p>
</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-large wp-image-9024" src="https://tokarchuk.ru/wp-content/uploads/2025/02/netbird-screenshot-1024x663.png" alt="" width="1024" height="663" srcset="https://tokarchuk.ru/wp-content/uploads/2025/02/netbird-screenshot-1024x663.png 1024w, https://tokarchuk.ru/wp-content/uploads/2025/02/netbird-screenshot-300x194.png 300w, https://tokarchuk.ru/wp-content/uploads/2025/02/netbird-screenshot-768x497.png 768w, https://tokarchuk.ru/wp-content/uploads/2025/02/netbird-screenshot-1536x995.png 1536w, https://tokarchuk.ru/wp-content/uploads/2025/02/netbird-screenshot-2048x1326.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></p>
<p data-pm-slice="1 1 []">NetBird представляет собой zero-trust оверлейную сеть, которая может развертываться поверх основной сети предприятия. Это может использоваться в нескольких случаях.</p>
<p>The post <a href="https://tokarchuk.ru/2025/02/17/features-of-netbird-application/">Особенности применения NetBird</a> first appeared on <a href="https://tokarchuk.ru">Токарчук Андрей Михайлович | TypeScript, AI, VueJS, PHP и другие интересные штуки. Блог Zend Framework разработчика. Программирование на PHP, вопросы использование memcached, mysql, nosql баз данных, jquery, apache, nginx,mongodb, php и т.д.</a>.</p>]]></description>
										<content:encoded><![CDATA[<p data-pm-slice="1 1 []">Многие из вас знают, что такое оверлейные сети, а некоторые даже уже успели с ними столкнуться. В качестве связи между филиалами (branch office) или удаленными площадками (remote datacenters) мы пробуем использовать такое решение, как NetBird. Сейчас оно проходит тестирование в нашей инфраструктуре. Однако пока мы все еще не запустили его в продакшен.</p>
<p><span id="more-9025"></span></p>
<p><img loading="lazy" decoding="async" class="aligncenter size-large wp-image-9024" src="https://tokarchuk.ru/wp-content/uploads/2025/02/netbird-screenshot-1024x663.png" alt="" width="1024" height="663" srcset="https://tokarchuk.ru/wp-content/uploads/2025/02/netbird-screenshot-1024x663.png 1024w, https://tokarchuk.ru/wp-content/uploads/2025/02/netbird-screenshot-300x194.png 300w, https://tokarchuk.ru/wp-content/uploads/2025/02/netbird-screenshot-768x497.png 768w, https://tokarchuk.ru/wp-content/uploads/2025/02/netbird-screenshot-1536x995.png 1536w, https://tokarchuk.ru/wp-content/uploads/2025/02/netbird-screenshot-2048x1326.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></p>
<p data-pm-slice="1 1 []">NetBird представляет собой zero-trust оверлейную сеть, которая может развертываться поверх основной сети предприятия. Это может использоваться в нескольких случаях. Например, можно развернуть систему мониторинга всех серверов и устройств в зоне ответственности, создать оверлейную менеджмент-сеть для гибкого управления серверами или дать доступ удаленным командам к внутренним ресурсам. В общем, разработка довольно перспективная.</p>
<p>Однако в процессе тестирования были выявлены несколько ошибок — как небольших, так и весьма критичных. Самая серьезная ошибка заключалась в том, что узлы сети периодически &#8220;залипали&#8221;. То есть не просто полностью выходили из строя (что было бы даже лучше), а именно &#8220;частично залипали&#8221; — например, node-1 могла не пинговаться с node-2, но при этом успешно пинговаться с node-3. Таким образом, оверлейная сеть частично разрушалась. Это создавало серьезную проблему, так как, например, в случае использования HA для маршрутизации между двумя нодами при падении первой можно было бы переключиться на вторую. Однако проблема заключалась в том, что с роутера упавшая нода продолжала пинговаться, и поэтому маршрутизация не переключалась, так как роутер считал, что основная нода работает. Хотя на самом деле она не маршрутизировала трафик дальше.</p>
<p>Ко всему прочему, баг этот был плавающим, проявлялся абсолютно случайно, примерно через неделю работы ноды. Около трех недель ушло у меня на воспроизведение этого бага, затем еще неделю мы совместно со специалистами из NetBird пытались воспроизвести его у них на площадке. Мы созванивались, тестировали экспериментальные билды, и, наконец, они смогли найти и исправить проблему. Баг исправлен в релизе 0.36.6. Все версии ниже этой подвержены данной ошибке, и ваши ноды могут просто перестать работать. Поэтому настоятельно рекомендую обновить NetBird на ваших устройствах.</p>
<p><span style="font-size: inherit;"> Выражаю большую благодарность </span><a style="font-size: inherit;" href="https://github.com/pappz">Zoltan Papp</a><span style="font-size: inherit;"> и </span><a style="font-size: inherit;" href="https://github.com/lixmal">Victor Liu</a><span style="font-size: inherit;"> за оперативный фикс этого бага и </span><a style="font-size: inherit;" href="https://github.com/braginini">Мише Брагину</a><span style="font-size: inherit;"> за замечательный проект. Мы с Мишей кстати оба учились в МИИТе. Мир тесен <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span></p>
<p>&nbsp;</p>
<p>Материалы</p>
<ul>
<li><a href="https://github.com/netbirdio/netbird/issues/3245">Pings disappear from some peers to others after one week</a></li>
<li><a href="https://github.com/netbirdio/netbird/releases/tag/v0.36.6">Netbird release 0.36.6</a></li>
</ul>
<p>&nbsp;</p><p>The post <a href="https://tokarchuk.ru/2025/02/17/features-of-netbird-application/">Особенности применения NetBird</a> first appeared on <a href="https://tokarchuk.ru">Токарчук Андрей Михайлович | TypeScript, AI, VueJS, PHP и другие интересные штуки. Блог Zend Framework разработчика. Программирование на PHP, вопросы использование memcached, mysql, nosql баз данных, jquery, apache, nginx,mongodb, php и т.д.</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://tokarchuk.ru/2025/02/17/features-of-netbird-application/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Если начал отваливаться ssh</title>
		<link>https://tokarchuk.ru/2024/08/19/ssh-problems/</link>
					<comments>https://tokarchuk.ru/2024/08/19/ssh-problems/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Mon, 19 Aug 2024 08:35:50 +0000</pubDate>
				<category><![CDATA[Веб-разработка]]></category>
		<category><![CDATA[Системное администрирование]]></category>
		<category><![CDATA[phpStorm]]></category>
		<category><![CDATA[ssh]]></category>
		<guid isPermaLink="false">https://tokarchuk.ru/?p=9013</guid>

					<description><![CDATA[<p>Недавное у меня ни с того ни с сего начали возникать проблемы с ssh. А так как, у меня для нескольких проектов в phpStorm настроен AutoDeploy через ssh-туннель, то проблемы начали появлятьс и там.</p>
<p>Примеры ошибок и странного поведения</p>
<p>При обычном ssh-коннекте из консоли постоянно вылетала ошибка:<br />
[crayon-6a19db6b3508c763045381/]<br />
При работе ssh-туннеля в phpStorm вылатела ошибка &#8220;Can&#8217;t connect to remote host&#8221;</p>
<p>&#160;</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-9014" src="https://tokarchuk.ru/wp-content/uploads/2024/08/Cant_connect_to_remote_host.png" alt="" width="364" height="128" srcset="https://tokarchuk.ru/wp-content/uploads/2024/08/Cant_connect_to_remote_host.png 926w, https://tokarchuk.ru/wp-content/uploads/2024/08/Cant_connect_to_remote_host-300x106.png 300w, https://tokarchuk.ru/wp-content/uploads/2024/08/Cant_connect_to_remote_host-768x270.png 768w" sizes="auto, (max-width: 364px) 100vw, 364px" /></p>
<p>&#160;</p>
<p>Включил отладку ssh-тоннелей в phpStorm,</p>
<p>The post <a href="https://tokarchuk.ru/2024/08/19/ssh-problems/">Если начал отваливаться ssh</a> first appeared on <a href="https://tokarchuk.ru">Токарчук Андрей Михайлович | TypeScript, AI, VueJS, PHP и другие интересные штуки. Блог Zend Framework разработчика. Программирование на PHP, вопросы использование memcached, mysql, nosql баз данных, jquery, apache, nginx,mongodb, php и т.д.</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>Недавное у меня ни с того ни с сего начали возникать проблемы с ssh. А так как, у меня для нескольких проектов в phpStorm настроен AutoDeploy через ssh-туннель, то проблемы начали появлятьс и там.<span id="more-9013"></span></p>
<h2>Примеры ошибок и странного поведения</h2>
<p>При обычном ssh-коннекте из консоли постоянно вылетала ошибка:</p><pre class="urvanov-syntax-highlighter-plain-tag">kex_exchange_identification: read: Connection reset by peer</pre><p>При работе ssh-туннеля в phpStorm вылатела ошибка &#8220;Can&#8217;t connect to remote host&#8221;</p>
<p>&nbsp;</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-9014" src="https://tokarchuk.ru/wp-content/uploads/2024/08/Cant_connect_to_remote_host.png" alt="" width="364" height="128" srcset="https://tokarchuk.ru/wp-content/uploads/2024/08/Cant_connect_to_remote_host.png 926w, https://tokarchuk.ru/wp-content/uploads/2024/08/Cant_connect_to_remote_host-300x106.png 300w, https://tokarchuk.ru/wp-content/uploads/2024/08/Cant_connect_to_remote_host-768x270.png 768w" sizes="auto, (max-width: 364px) 100vw, 364px" /></p>
<p>&nbsp;</p>
<p>Включил отладку ssh-тоннелей в phpStorm, чтобы посмотреть логи, а там такое:</p><pre class="urvanov-syntax-highlighter-plain-tag">2024-08-15 16:45:22,217 [  80872]   FINE - c.i.s.i.s.KeyCheckingSshClientConfig - Available cipher factories: [chacha20-poly1305@openssh.com, aes128-cbc, aes128-ctr, aes192-cbc, aes192-ctr, aes256-cbc, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com, blowfish-cbc, blowfish-ctr, cast128-cbc, cast128-ctr, idea-cbc, idea-ctr, serpent128-cbc, serpent128-ctr, serpent192-cbc, serpent192-ctr, serpent256-cbc, serpent256-ctr, 3des-cbc, 3des-ctr, twofish128-cbc, twofish128-ctr, twofish192-cbc, twofish192-ctr, twofish256-cbc, twofish256-ctr, twofish-cbc, arcfour, arcfour128, arcfour256]
2024-08-15 16:45:22,218 [  80873]   INFO - com.hierynomus.sshj.userauth.keyprovider.OpenSSHKeyV1KeyFile - Read key type: ssh-rsa
2024-08-15 16:45:22,219 [  80874]   FINE - c.i.s.i.s.KeyCheckingSshClientConfig - Available cipher factories: [chacha20-poly1305@openssh.com, aes128-cbc, aes128-ctr, aes192-cbc, aes192-ctr, aes256-cbc, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com, blowfish-cbc, blowfish-ctr, cast128-cbc, cast128-ctr, idea-cbc, idea-ctr, serpent128-cbc, serpent128-ctr, serpent192-cbc, serpent192-ctr, serpent256-cbc, serpent256-ctr, 3des-cbc, 3des-ctr, twofish128-cbc, twofish128-ctr, twofish192-cbc, twofish192-ctr, twofish256-cbc, twofish256-ctr, twofish-cbc, arcfour, arcfour128, arcfour256]
2024-08-15 16:45:22,219 [  80874]   INFO - com.hierynomus.sshj.userauth.keyprovider.OpenSSHKeyV1KeyFile - Read key type: ssh-rsa
2024-08-15 16:45:22,229 [  80884]   FINE - #c.i.s.c.SshConnectionConfig - Change after applying remote credentials for host 172.30.2.39:
  authMethods: PublicKey(privateKeys=[/Users/andrey/.ssh/id_rsa, /Users/andrey/.ssh/id_dsa, /Users/andrey/.ssh/id_ecdsa, /Users/andrey/.ssh/id_ed25519, /Users/andrey/.ssh/id_xmss], agent=ALL), Password, KeyboardInteractive
            -&gt; PublicKey(privateKeys=[/Users/andrey/.ssh/id_rsa, /Users/andrey/.ssh/id_dsa, /Users/andrey/.ssh/id_ecdsa, /Users/andrey/.ssh/id_ed25519, /Users/andrey/.ssh/id_xmss], agent=NO), Password, KeyboardInteractive
  user: andrey
     -&gt; admin
2024-08-15 16:45:22,231 [  80886]   FINE - #c.i.s.i.SshConnection - Checking that can authenticate admin@172.30.2.39:22
2024-08-15 16:45:22,233 [  80888]   INFO - net.schmizz.sshj.transport.random.JCERandom - Creating new SecureRandom.
2024-08-15 16:45:22,235 [  80890]   FINE - #c.i.s.i.s.sshj - Full connection config:
  authMethods: PublicKey(privateKeys=[/Users/andrey/.ssh/id_rsa, /Users/andrey/.ssh/id_dsa, /Users/andrey/.ssh/id_ecdsa, /Users/andrey/.ssh/id_ed25519, /Users/andrey/.ssh/id_xmss], agent=NO), Password, KeyboardInteractive
  ciphers: [aes128-cbc, aes128-ctr, aes192-cbc, aes192-ctr, aes256-cbc, aes256-ctr, blowfish-cbc, blowfish-ctr, cast128-cbc, cast128-ctr, idea-cbc, idea-ctr, serpent128-cbc, serpent128-ctr, serpent192-cbc, serpent192-ctr, serpent256-cbc, serpent256-ctr, 3des-cbc, 3des-ctr, twofish128-cbc, twofish128-ctr, twofish192-cbc, twofish192-ctr, twofish256-cbc, twofish256-ctr, twofish-cbc, arcfour, arcfour128, arcfour256]
  compression: false
  connectTimeout: PT10S
  forwardAgent: false
  host: 172.30.2.39
  hostKeyAlgorithms: [ecdsa-sha2-nistp256-cert-v01@openssh.com, ecdsa-sha2-nistp384-cert-v01@openssh.com, ecdsa-sha2-nistp521-cert-v01@openssh.com, sk-ecdsa-sha2-nistp256-cert-v01@openssh.com, ssh-ed25519-cert-v01@openssh.com, sk-ssh-ed25519-cert-v01@openssh.com, rsa-sha2-512-cert-v01@openssh.com, rsa-sha2-256-cert-v01@openssh.com, ssh-rsa-cert-v01@openssh.com, ecdsa-sha2-nistp256, ecdsa-sha2-nistp384, ecdsa-sha2-nistp521, sk-ecdsa-sha2-nistp256@openssh.com, ssh-ed25519, sk-ssh-ed25519@openssh.com, rsa-sha2-512, rsa-sha2-256, ssh-rsa]
  hostKeyVerifier: OpenSSH-like host key verifier (knownHostsFile=[/Users/andrey/.ssh/known_hosts], strictHostKeyChecking=ASK, hashKnownHosts=false)
  identityAgent: null
  initialLocalTcpForwardings: []
  initialRemoteTcpForwardings: []
  kexAlgorithms: [curve25519-sha256, curve25519-sha256@libssh.org, diffie-hellman-group-exchange-sha256, ecdh-sha2-nistp521, ecdh-sha2-nistp384, ecdh-sha2-nistp256, diffie-hellman-group-exchange-sha1, diffie-hellman-group1-sha1, diffie-hellman-group14-sha1, diffie-hellman-group14-sha256, diffie-hellman-group15-sha512, diffie-hellman-group16-sha512, diffie-hellman-group17-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256@ssh.com, diffie-hellman-group15-sha256, diffie-hellman-group15-sha256@ssh.com, diffie-hellman-group15-sha384@ssh.com, diffie-hellman-group16-sha256, diffie-hellman-group16-sha384@ssh.com, diffie-hellman-group16-sha512@ssh.com, diffie-hellman-group18-sha512@ssh.com]
  macs: [hmac-sha1, hmac-sha1-etm@openssh.com, hmac-sha1-96, hmac-sha1-96@openssh.com, hmac-md5, hmac-md5-etm@openssh.com, hmac-md5-96, hmac-md5-96-etm@openssh.com, hmac-sha2-256, hmac-sha2-256-etm@openssh.com, hmac-sha2-512, hmac-sha2-512-etm@openssh.com, hmac-ripemd160, hmac-ripemd160-etm@openssh.com, hmac-ripemd160-96, hmac-ripemd160@openssh.com]
  port: 22
  proxyConfig: null
  serverAlive: null
  user: admin
  x11Forwarding: null
2024-08-15 16:45:22,260 [  80915] SEVERE - #c.i.o.a.i.ApplicationImpl - RSA modulus has a small prime factor
java.lang.IllegalArgumentException: RSA modulus has a small prime factor
	at org.bouncycastle.crypto.params.RSAKeyParameters.validate(Unknown Source)
	at org.bouncycastle.crypto.params.RSAKeyParameters.(Unknown Source)
	at org.bouncycastle.crypto.params.RSAKeyParameters.(Unknown Source)
	at org.bouncycastle.jcajce.provider.asymmetric.rsa.BCRSAPublicKey.(Unknown Source)
	at org.bouncycastle.jcajce.provider.asymmetric.rsa.KeyFactorySpi.engineGeneratePublic(Unknown Source)
	at java.base/java.security.KeyFactory.generatePublic(KeyFactory.java:345)
	at net.schmizz.sshj.common.KeyType$1.readPubKeyFromBuffer(KeyType.java:62)
	at net.schmizz.sshj.common.Buffer.readPublicKey(Buffer.java:489)
	at net.schmizz.sshj.transport.verification.OpenSSHKnownHosts$EntryFactory.parseEntry(OpenSSHKnownHosts.java:278)
	at net.schmizz.sshj.transport.verification.OpenSSHKnownHosts.readEntries(OpenSSHKnownHosts.java:81)
	at net.schmizz.sshj.transport.verification.OpenSSHKnownHosts.(OpenSSHKnownHosts.java:62)
	at net.schmizz.sshj.transport.verification.OpenSSHKnownHosts.(OpenSSHKnownHosts.java:52)
	at com.intellij.ssh.SingleKnownHostsDelegate.(OpenSshLikeHostKeyVerifierImpl.kt:190)
	at com.intellij.ssh.OpenSshLikeHostKeyVerifierImpl.(OpenSshLikeHostKeyVerifierImpl.kt:42)
	at com.intellij.ssh.impl.sshj.SshjConnectionUtilKt.setUpSessionForSshJ(SshjConnectionUtil.kt:142)
	at com.intellij.ssh.impl.SshConnection.doSshjSshConnection(SshConnection.kt:211)
	at com.intellij.ssh.impl.SshConnection.access$doSshjSshConnection(SshConnection.kt:27)
	at com.intellij.ssh.impl.SshConnection$createSshSessionForSshj$1.invoke(SshConnection.kt:204)
	at com.intellij.ssh.impl.SshConnection$createSshSessionForSshj$1.invoke(SshConnection.kt:201)
	at com.intellij.ssh.Ssh.wrapBlockingSshCall(ssh.kt:394)
	at com.intellij.ssh.Ssh.wrapBlockingSshCall$default(ssh.kt:375)
	at com.intellij.ssh.impl.SshConnection.createSshSessionForSshj(SshConnection.kt:201)
	at com.intellij.ssh.impl.SshConnection.access$createSshSessionForSshj(SshConnection.kt:27)
	at com.intellij.ssh.impl.SshConnection$checkCanAuthenticate$1.invoke(SshConnection.kt:136)
	at com.intellij.ssh.impl.SshConnection$checkCanAuthenticate$1.invoke(SshConnection.kt:131)
	at com.intellij.ssh.Ssh.wrapBlockingSshCall(ssh.kt:394)
	at com.intellij.ssh.Ssh.wrapBlockingSshCall$default(ssh.kt:375)
	at com.intellij.ssh.impl.SshConnection.checkCanAuthenticate(SshConnection.kt:131)
	at com.intellij.ssh.SshConnectionService.checkCanAuthenticate(SshConnectionService.kt:210)
	at com.intellij.ssh.Ssh.checkCanAuthenticate(ssh.kt:263)
	at com.intellij.ssh.Ssh.access$checkCanAuthenticate(ssh.kt:1)
	at com.intellij.ssh.ConnectionBuilder.checkCanAuthenticate(ssh.kt:108)
	at com.intellij.ssh.ui.unified.SshCredentialsEditorEx$1.lambda$actionPerformed$0(SshCredentialsEditorEx.java:68)
	at com.intellij.openapi.application.impl.ApplicationImpl$2.run(ApplicationImpl.java:272)
	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
	at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1$1.run(Executors.java:702)
	at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1$1.run(Executors.java:699)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
	at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1.run(Executors.java:699)
	at java.base/java.lang.Thread.run(Thread.java:833)
2024-08-15 16:45:22,261 [  80916] SEVERE - #c.i.o.a.i.ApplicationImpl - PhpStorm 2023.2.2  Build #PS-232.9921.55
2024-08-15 16:45:22,261 [  80916] SEVERE - #c.i.o.a.i.ApplicationImpl - JDK: 17.0.8; VM: OpenJDK 64-Bit Server VM; Vendor: JetBrains s.r.o.
2024-08-15 16:45:22,261 [  80916] SEVERE - #c.i.o.a.i.ApplicationImpl - OS: Mac OS X
2024-08-15 16:45:38,446 [  97101]   INFO - #com.tabnineCommon.lifecycle.WorkspaceListenerService - All root paths collected: [/Users/andrey/sandbox/xxxxx/current]</pre><p>В общем очень все странно, в консоле то коннект устанавливается, то рвется, то вообще сразу не коннектит. А ssh-туннель работает через пень-колоду. Я перепробовал кучу всего, а решение оказалось очень простым.</p>
<h2>Решение</h2>
<p></p><pre class="urvanov-syntax-highlighter-plain-tag">rm -rf ~/.ssh/known_hosts</pre><p></p>
<h2>Материалы</h2>
<ul>
<li><a href="https://intellij-support.jetbrains.com/hc/en-us/articles/207241185-Enabling-SSH-FTP-debug-logging-to-report-problems-with-deployment-and-remote-SDK-configurationEnabling SSH/FTP debug logging to report problems with deployment and remote SDK configuration">Enabling SSH/FTP debug logging to report problems with deployment and remote SDK configuration</a></li>
<li><a href="https://intellij-support.jetbrains.com/hc/en-us/articles/207241085-Locating-IDE-log-files">Locating IDE log files</a></li>
</ul><p>The post <a href="https://tokarchuk.ru/2024/08/19/ssh-problems/">Если начал отваливаться ssh</a> first appeared on <a href="https://tokarchuk.ru">Токарчук Андрей Михайлович | TypeScript, AI, VueJS, PHP и другие интересные штуки. Блог Zend Framework разработчика. Программирование на PHP, вопросы использование memcached, mysql, nosql баз данных, jquery, apache, nginx,mongodb, php и т.д.</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://tokarchuk.ru/2024/08/19/ssh-problems/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
