<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Gluek&apos;s blog</title><description>Персональный сайт и блог gluek.info</description><link>https://gluek.info/</link><item><title>Сколько вешать в .gram-ах?</title><link>https://gluek.info/blog/skolko-veshat-v-gram-akh/</link><guid isPermaLink="true">https://gluek.info/blog/skolko-veshat-v-gram-akh/</guid><description>Дуров всё-таки сделал выводы после блокировки t.me и анонсировал, что Telegram подал заявку на доменную зону .gram. Обещают каждому пользователю до...</description><pubDate>Tue, 18 Aug 2026 20:11:48 GMT</pubDate><content:encoded>&lt;p&gt;Дуров всё-таки сделал выводы после блокировки t.me и анонсировал, что Telegram подал заявку на доменную зону .gram. Обещают каждому пользователю до домену вида gluek.gram и возможность быстро запустить там некий &quot;интерактивный сайт&quot;. А с другой стороны и заблокировать будет проще.&lt;/p&gt;
</content:encoded></item><item><title>Google Pixel Tag</title><link>https://gluek.info/blog/google-pixel-tag/</link><guid isPermaLink="true">https://gluek.info/blog/google-pixel-tag/</guid><description>Отдельно впечатление про их тег - и поздно, и дорого. Вроде есть поддежка Ultra-Wideband для точного поиска - но она была и у Moto-тегов за те же д...</description><pubDate>Wed, 12 Aug 2026 22:04:24 GMT</pubDate><content:encoded>&lt;p&gt;Отдельно впечатление про их тег - и поздно, и дорого. Вроде есть поддежка Ultra-Wideband для точного поиска - но она была и у Moto-тегов за те же деньги и пару лет назад, и они хоть по размеру совпадали с Air-тегами от Apple. А тут выходит и размер не такой, и по цене как 4 штуки от Ugreen, и офлайн этот весь поиск полностью не работоспособен становится.&lt;/p&gt;
&lt;p&gt;Как кто-то написал в комментариях - в ноябре они его выпустят, в декабре про него забудут.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://gluek.info/blog/google-pixel-tag/566751283e558e7fb818daeec7a30ec.webp&quot; alt=&quot;566751283e558e7fb818daeec7a30ec.webp&quot; /&gt;&lt;/p&gt;
</content:encoded></item><item><title>Google Pixel 11 &amp; Android 17</title><link>https://gluek.info/blog/google-pixel-11-android-17/</link><guid isPermaLink="true">https://gluek.info/blog/google-pixel-11-android-17/</guid><description>Мне кажется вообще ничего нового не появилось ни в самом телефоне, ни в новой версии андроида (которая уже пришла на мой Pixel 10 Pro XL - буквальн...</description><pubDate>Wed, 12 Aug 2026 21:31:29 GMT</pubDate><content:encoded>&lt;p&gt;Мне кажется вообще ничего нового не появилось ни в самом телефоне, ни в новой версии андроида (которая уже пришла на мой Pixel 10 Pro XL - буквально App Bubbles... и всё?), просто минимум смысла обновляться, хоть и сделали нормальный оффер:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Trade-in
Google Pixel 10 Pro XL (512GB)
£770.00 estimated value, applied instantly
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;P.S. С бонусом £150 за раннее бронирование вышло бы £479 за Pixel 11 Pro XL Obsidian (matte) 512GB (Unlocked)&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://gluek.info/blog/google-pixel-11-android-17/f1ccd85292433dc5f4c4e7e2b268721.webp&quot; alt=&quot;f1ccd85292433dc5f4c4e7e2b268721.webp&quot; /&gt;&lt;/p&gt;
</content:encoded></item><item><title>deltachat_publish</title><link>https://gluek.info/projects/deltachat-publish/</link><guid isPermaLink="true">https://gluek.info/projects/deltachat-publish/</guid><description>Бот Delta Chat для публикации заметок и медиафайлов в блог на Astro в один коммит</description><pubDate>Thu, 30 Jul 2026 00:30:00 GMT</pubDate><content:encoded>&lt;p&gt;Бот для децентрализованного мессенджера &lt;strong&gt;Delta Chat&lt;/strong&gt;, предназначенный для удобной мобильной публикации постов и изображений в статический блог на Astro (&lt;code&gt;gluek.info&lt;/code&gt; и другие шаблоны на Astro).&lt;/p&gt;
&lt;p&gt;Проект создан в соответствии с принципами &lt;strong&gt;IndieWeb / POSSE&lt;/strong&gt; (&lt;em&gt;Publish on Own Site, Syndicate Elsewhere&lt;/em&gt;): свой сайт и Git-репозиторий остаются единственным источником правды (Single Source of Truth), а мобильный ввод превращается в быстрый удобный пайплайн.&lt;/p&gt;
&lt;h2&gt;🛠️ Стек и Технологии&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Язык&lt;/strong&gt;: Python 3.11 (asyncio)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Мессенджер SDK&lt;/strong&gt;: &lt;code&gt;deltachat2&lt;/code&gt; RPC + &lt;code&gt;deltabot_cli&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Интеграция с Git&lt;/strong&gt;: Forgejo / Gitea REST API (&lt;code&gt;ChangeFilesOptions&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;База данных&lt;/strong&gt;: SQLite (авторизация владельца, логирование постов и статистика)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Контейнеризация&lt;/strong&gt;: Docker + docker-compose + Caddy&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CI/CD &amp;amp; Уведомления&lt;/strong&gt;: GitHub Actions + ntfy.gluek.info&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;✨ Ключевые Особенности&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Атомарный single-commit постинг&lt;/strong&gt;:
В отличие от поэтапной загрузки файлов, бот использует эндпоинт &lt;code&gt;ChangeFilesOptions&lt;/code&gt; REST API. Текст статьи &lt;code&gt;.md&lt;/code&gt; и все прикрепленные фотографии передаются в одном JSON-пейлоаде. В результате в Git создается &lt;strong&gt;ровно один коммит&lt;/strong&gt;, а пайплайн сборки сайта вызывается только один раз.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Автоматическая транслитерация и обработка&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Заголовок из первой строки автоматически очищается и транслитерируется из кириллицы в латинский URL-slug (например, &lt;code&gt;Про сервис One-Face&lt;/code&gt; → &lt;code&gt;pro-servis-one-face&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Автоматически генерируется описание (&lt;code&gt;description&lt;/code&gt;) из первых 150 символов поста.&lt;/li&gt;
&lt;li&gt;Изображения автоматически разворачиваются в теги &lt;code&gt;![filename](path)&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Поддержка гибких структур Astro&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;single_file&lt;/code&gt; (как в &lt;code&gt;gluek.info&lt;/code&gt;): посты сохраняются в &lt;code&gt;src/content/blog/&amp;lt;slug&amp;gt;.md&lt;/code&gt;, а медиа — в &lt;code&gt;public/images/&amp;lt;slug&amp;gt;/&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;folder&lt;/code&gt; (как в &lt;code&gt;Astro Nano&lt;/code&gt;): пост сохраняется в &lt;code&gt;src/content/blog/&amp;lt;slug&amp;gt;/index.md&lt;/code&gt;, а медиафайлы — рядом в ту же папку с относительными ссылками &lt;code&gt;./image.jpg&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Безопасность и сквозное шифрование&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Сквозное шифрование (E2EE)&lt;/strong&gt;: Передача сообщений между мессенджером и ботом защищена E2EE (OpenPGP/Autocrypt).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Строгая авторизация&lt;/strong&gt;: Бот принимает посты только от авторизованного администратора, проверяя совпадение адреса почты и криптографического OpenPGP fingerprint (&lt;code&gt;/initadmin&lt;/code&gt; или CLI-скрипт &lt;code&gt;set_admin.py&lt;/code&gt;). Все попытки сторонней публикации отвергаются (&lt;code&gt;⛔ Access Denied&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Защита токенов&lt;/strong&gt;: Токен доступа к Git API (&lt;code&gt;FORGEJO_TOKEN&lt;/code&gt;) хранится исключительно в переменном окружении &lt;code&gt;.env&lt;/code&gt; на сервере и не раскрывается клиентам.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
</content:encoded></item><item><title>Новый бот Delta Chat для мобильного постинга в блог</title><link>https://gluek.info/blog/novyy-bot-delta-chat-dlya-mobilnogo-postinga-v-blog/</link><guid isPermaLink="true">https://gluek.info/blog/novyy-bot-delta-chat-dlya-mobilnogo-postinga-v-blog/</guid><description>Решил упростить процесс публикации коротких заметок с телефона в мой новый блог на Astro. Раньше для каждого нового поста требовалось открывать ноу...</description><pubDate>Wed, 29 Jul 2026 21:45:00 GMT</pubDate><content:encoded>&lt;p&gt;Решил упростить процесс публикации коротких заметок с телефона в мой новый блог на Astro.&lt;/p&gt;
&lt;p&gt;Раньше для каждого нового поста требовалось открывать ноутбук или просить добавить коммит агента. Чтобы делать это удобнее, я написал специального бота &lt;a href=&quot;https://gluek.info/projects/deltachat-publish/&quot;&gt;Delta Chat Publish Bot&lt;/a&gt;, который работает поверх децентрализованного мессенджера &lt;a href=&quot;https://delta.chat&quot;&gt;Delta Chat&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Как это работает?&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Я отправляю боту обычное сообщение с телефона: первая строка — заголовок, ниже — текст в формате Markdown, и при необходимости прикрепляю фотографии.&lt;/li&gt;
&lt;li&gt;Бот транслитерирует заголовок в красивый URL slug, формирует YAML Frontmatter и заливает файл статьи вместе с картинками через Forgejo REST API.&lt;/li&gt;
&lt;li&gt;Все файлы передаются в &lt;strong&gt;одном HTTP-запросе&lt;/strong&gt;, создавая &lt;strong&gt;ровно один коммит&lt;/strong&gt; в репозитории.&lt;/li&gt;
&lt;li&gt;Автоматически запускается CI/CD пайплайн (Forgejo Actions), и через минуту пост уже на сайте.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Решение полностью соответствует философии &lt;strong&gt;IndieWeb / POSSE&lt;/strong&gt; (&lt;em&gt;Publish on Own Site, Syndicate Elsewhere&lt;/em&gt;): репозиторий остаётся единым источником правды, а публикация происходит буквально за минуту и не выходя из привычного мессенжера.&lt;/p&gt;
&lt;p&gt;Исходный код бота открыт на GitHub: &lt;a href=&quot;https://github.com/mrgluek/deltachat_publish&quot;&gt;mrgluek/deltachat_publish&lt;/a&gt; или как зеркало на  моём Forgejo: &lt;a href=&quot;https://git.gluek.info/gluek/deltachat_publish&quot;&gt;gluek/deltachat_publish&lt;/a&gt;.&lt;/p&gt;
</content:encoded></item><item><title>Автоматический кросспостинг в Telegram и Mastodon</title><link>https://gluek.info/blog/crossposting-to-telegram-and-mastodon/</link><guid isPermaLink="true">https://gluek.info/blog/crossposting-to-telegram-and-mastodon/</guid><description>Настроил автоматическую публикацию анонсов новых постов из блога прямо в Telegram-канал и Mastodon при коммите в репозиторий.</description><pubDate>Wed, 29 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;В блог добавлен автоматический кросспостинг! Теперь при публикации новой статьи через коммит в репозиторий CI-пайплайн автоматически отправляет анонс свежего поста:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;✈️ В Telegram-канал &lt;a href=&quot;https://t.me/gluekinfo&quot;&gt;@gluekinfo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;🐘 В Mastodon (&lt;a href=&quot;https://mastodon.social/@gluek&quot;&gt;@gluek@mastodon.social&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Анонсы содержат заголовок, краткое описание статьи и ссылку на новую публикацию.&lt;/p&gt;
&lt;p&gt;Исходный код сайта и скриптов кросспостинга открыт в публичном репозитории: &lt;a href=&quot;https://git.gluek.info/gluek/gluek.info&quot;&gt;git.gluek.info/gluek/gluek.info&lt;/a&gt;.&lt;/p&gt;
</content:encoded></item><item><title>ip.gluek.info</title><link>https://gluek.info/projects/ip-gluek-info/</link><guid isPermaLink="true">https://gluek.info/projects/ip-gluek-info/</guid><description>Простой сервис определения IP-адреса на Cloudflare Worker</description><pubDate>Fri, 24 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Простой сервис на базе Cloudflare Worker, который возвращает ваш публичный IP-адрес в формате plain text.&lt;/p&gt;
&lt;h3&gt;Пример использования&lt;/h3&gt;
&lt;p&gt;Вы можете легко получить свой IP-адрес через терминал с помощью &lt;code&gt;curl&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;curl ip.gluek.info
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Код Cloudflare Worker&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;export default {
  async fetch(request, env, ctx) {
    const ip = request.headers.get(&apos;CF-Connecting-IP&apos;) || &apos;Unknown&apos;;
    return new Response(ip, {
      headers: { &apos;content-type&apos;: &apos;text/plain;charset=UTF-8&apos; },
    });
  }
};
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>Добро пожаловать</title><link>https://gluek.info/blog/welcome/</link><guid isPermaLink="true">https://gluek.info/blog/welcome/</guid><description>Сайт gluek.info переехал с редиректа-в-Telegram на полноценный статический блог</description><pubDate>Sun, 12 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Привет! Сайт gluek.info теперь работает как полноценный статический блог на &lt;a href=&quot;https://astro.build/&quot;&gt;Astro&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Раньше здесь был просто редирект на мой Telegram-канал, а теперь — полноценный сайт с блогом и портфолио проектов.&lt;/p&gt;
&lt;h2&gt;Что здесь будет&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Технические заметки&lt;/strong&gt; — о selfhosting, Linux, DevOps и разработке&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Проекты&lt;/strong&gt; — описания моих проектов с ссылками&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Разное&lt;/strong&gt; — всё интересное, что не вошло в другие категории&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Telegram&lt;/h2&gt;
&lt;p&gt;Канал по-прежнему работает — &lt;a href=&quot;https://t.me/gluekinfo&quot;&gt;t.me/gluekinfo&lt;/a&gt;. Анонсы новых постов будут и там.&lt;/p&gt;
</content:encoded></item><item><title>gluek.info</title><link>https://gluek.info/projects/gluek-info/</link><guid isPermaLink="true">https://gluek.info/projects/gluek-info/</guid><description>Этот сайт — персональный блог и портфолио на Astro</description><pubDate>Sun, 12 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Персональный сайт и блог на &lt;a href=&quot;https://github.com/markhorn-dev/astro-nano&quot;&gt;Astro Nano&lt;/a&gt;. Статический сайт с автоматическим деплоем через Forgejo Actions.&lt;/p&gt;
&lt;h2&gt;Стек&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Astro&lt;/strong&gt; + TypeScript + Tailwind CSS&lt;/li&gt;
&lt;li&gt;CI/CD через &lt;strong&gt;Forgejo Actions&lt;/strong&gt; → деплой на собственный сервер&lt;/li&gt;
&lt;li&gt;Хостинг на VPS с &lt;strong&gt;Caddy&lt;/strong&gt; в роли веб-сервера&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Перенос архива блога&lt;/h2&gt;
&lt;p&gt;Все записи со старого WordPress-сайта gluek.info (2004–2013) были перенесены в Markdown-формат. Итого — &lt;strong&gt;~1300 постов&lt;/strong&gt; за почти десять лет.&lt;/p&gt;
&lt;p&gt;Старый блог давно недоступен, но его страницы сохранились в &lt;a href=&quot;https://web.archive.org/web/*/gluek.info&quot;&gt;Wayback Machine&lt;/a&gt;. Каждый пост был:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Скачан через API Wayback Machine&lt;/li&gt;
&lt;li&gt;Очищен от артефактов WordPress (шорткоды, счётчики, битые ссылки)&lt;/li&gt;
&lt;li&gt;Сконвертирован в Markdown с сохранением изображений&lt;/li&gt;
&lt;li&gt;Опубликован с оригинальными URL вида &lt;code&gt;/год/месяц/день/slug/&lt;/code&gt; с 301-редиректом на новый адрес&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;OG-изображения для всех постов генерируются через &lt;a href=&quot;https://github.com/vercel/satori&quot;&gt;satori&lt;/a&gt; + sharp и кэшируются между билдами, чтобы не пересоздавать ~1300 PNG при каждом деплое.&lt;/p&gt;
</content:encoded></item><item><title>Замена аккумулятора на Samsung Galaxy Nexus</title><link>https://gluek.info/blog/zamena-akkumulyatora-na-samsung-galaxy-nexus/</link><guid isPermaLink="true">https://gluek.info/blog/zamena-akkumulyatora-na-samsung-galaxy-nexus/</guid><description>_Этот блог ещё жив, ура!_</description><pubDate>Sat, 12 Oct 2013 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;em&gt;Этот блог ещё жив, ура!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Сегодня нашлось время испытать заказанные на eBay два аккумулятора для Samsung Galaxy Nexus (он же Nexus 3): один оригинальный Samsung, но расширенной до 2000 мАч ёмкости (родной стоял на 1750 мАч); и китайский на 3600 мАч (кстати, без поддержки NFC). При заказе я не обратил внимание, что даже 2000-ый требует отдельной, чуть более выпуклой крышки. Китайский же вообще уродливо выпирает на полсантиметра.&lt;/p&gt;
&lt;p&gt;Тестировал с помощью &lt;a href=&quot;https://play.google.com/store/apps/details?id=ru.NanoDinamics.NovaTester&amp;amp;hl=ru&quot;&gt;Nova Battery Tester&lt;/a&gt;, методика её работы простая — программа просит отключить радиомодуль, включает яркость экрана на максимум и нагружает процессор. Сам замер делается путём разрядки аккумулятора с 70 до 30 процентов и его ёмкость высчитывается по известной программе формуле в неких попугаях, по которым тем не менее можно сравнить аккумуляторы между собой.&lt;/p&gt;
&lt;p&gt;Результаты:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;родной аккумулятор Samsung 1750 мАч (в работе полтора года, выпуск 01.2012): 1180&lt;/li&gt;
&lt;li&gt;расширенный Samsung 2000 мАч (новый, выпуск 03.2013): 1810&lt;/li&gt;
&lt;li&gt;китайский Mbuynow 3600 мАч (новый, дата выпуска неизвестна): 2450&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Конечно никто уже не верит в китайские аккумуляторы, но я от него ожидал хотя бы что-то близкое к 3000. В итоге оставлю расширенный, попробую ещё раз его померять через неделю.&lt;/p&gt;
</content:encoded></item></channel></rss>