summaryrefslogtreecommitdiff
path: root/content
diff options
context:
space:
mode:
author2026-04-03 15:40:30 +0300
committer2026-04-03 15:40:30 +0300
commitff79efd13b537d714dfacf74d72e84331eca39a3 (patch)
treef6bd2cac5a34eb5011282dc82d04fcd44e016ab5 /content
parentupd theme (diff)
downloadblog-ff79efd13b537d714dfacf74d72e84331eca39a3.tar.gz
blog-ff79efd13b537d714dfacf74d72e84331eca39a3.tar.bz2
blog-ff79efd13b537d714dfacf74d72e84331eca39a3.tar.xz
blog-ff79efd13b537d714dfacf74d72e84331eca39a3.zip
обновленияHEADmaster
Diffstat (limited to 'content')
-rw-r--r--content/posts/2021-02-13-jsonnet/index.md4
-rw-r--r--content/posts/2021-05-13-цифровая-гигиена/index.md3
-rw-r--r--content/posts/2022-05-30-возрождение/index.md2
-rw-r--r--content/posts/2022-05-31-golang-1/index.md5
-rw-r--r--content/posts/2023-01-12-gitrepo/index.md2
-rw-r--r--content/posts/2023-05-26-gist/index.md3
-rw-r--r--content/posts/2023-07-24-tls/index.md3
-rw-r--r--content/posts/2023-12-29-переезд/index.md2
-rw-r--r--content/posts/2024-01-03-архив/index.md4
-rw-r--r--content/posts/2024-02-21-tls/index.md3
-rw-r--r--content/posts/2024-06-01-вам-не-нужны-пуши/index.md6
-rw-r--r--content/posts/2024-07-13-joplin/index.md5
-rw-r--r--content/posts/2024-09-26-hugo-wordpress/index.md4
-rw-r--r--content/posts/2024-10-06-цитатник-рунета/index.md2
-rw-r--r--content/posts/2024-11-15-hugo/index.md2
-rw-r--r--content/posts/2024-11-17-obsidian/index.md8
-rw-r--r--content/posts/2024-12-15-conditional-operator-go/index.md2
-rw-r--r--content/posts/2024-12-17-infra/index.md2
-rw-r--r--content/posts/2024-12-30-irc/index.md2
-rw-r--r--content/posts/2024-12-31-new-year/index.md4
-rw-r--r--content/posts/2025-12-21-sicktech/index.md8
-rw-r--r--content/posts/2025-12-28-philharmonic-park/index.md1
-rw-r--r--content/posts/2025-12-29-newyear-excel/index.md4
-rw-r--r--content/posts/2025-12-31-new-year/index.md4
-rw-r--r--content/posts/2026-02-08-stplr/index.md (renamed from content/posts/2025-02-08-stplr/index.md)2
-rw-r--r--content/posts/2026-02-25-death-of-poweruser/index.md3
-rw-r--r--content/posts/2026-02-26-broken-atom/index.md34
-rw-r--r--content/posts/2026-02-27-no-smoke/index.md18
-rw-r--r--content/posts/2026-02-27-no-smoke/no-smoke.jpgbin0 -> 37465 bytes
-rw-r--r--content/posts/2026-03-02-ipv6/index.md19
-rw-r--r--content/posts/2026-03-14-conf/index.md220
-rw-r--r--content/posts/2026-03-15-meshtastic/cardputer.jpgbin0 -> 7144478 bytes
-rw-r--r--content/posts/2026-03-15-meshtastic/cardputer.webpbin0 -> 32708 bytes
-rw-r--r--content/posts/2026-03-15-meshtastic/index.md41
-rw-r--r--content/posts/2026-03-21-aiserver/index.md74
-rw-r--r--content/posts/2026-03-21-aiserver/qwen35.pngbin0 -> 308845 bytes
-rw-r--r--content/posts/2026-03-21-aiserver/qwen35_small.jpgbin0 -> 66325 bytes
-rw-r--r--content/posts/2026-03-21-aiserver/steamdeck.jpgbin0 -> 8593665 bytes
-rw-r--r--content/posts/2026-03-21-aiserver/steamdeck_small.jpgbin0 -> 58002 bytes
-rw-r--r--content/projects/jabber/index.md26
40 files changed, 474 insertions, 48 deletions
diff --git a/content/posts/2021-02-13-jsonnet/index.md b/content/posts/2021-02-13-jsonnet/index.md
index d5b51a6..1a5c02c 100644
--- a/content/posts/2021-02-13-jsonnet/index.md
+++ b/content/posts/2021-02-13-jsonnet/index.md
@@ -3,10 +3,10 @@ title: Jsonnet
date: "2021-02-13T22:08:19Z"
tags:
- go
- - it
- разное
categories:
- - Без рубрики
+ - IT
+ - Golang
---
Редко такое бывает, что случайно натыкаешься на какую-то технологию и она
diff --git a/content/posts/2021-05-13-цифровая-гигиена/index.md b/content/posts/2021-05-13-цифровая-гигиена/index.md
index 29dfe7c..844d31a 100644
--- a/content/posts/2021-05-13-цифровая-гигиена/index.md
+++ b/content/posts/2021-05-13-цифровая-гигиена/index.md
@@ -2,9 +2,8 @@
title: Немного о цифровой гигиене
date: "2021-05-13T15:37:01Z"
categories:
- - Без рубрики
+ - Размышления
tags:
- - it
- паранойя
- разное
---
diff --git a/content/posts/2022-05-30-возрождение/index.md b/content/posts/2022-05-30-возрождение/index.md
index ad0b936..70f3a12 100644
--- a/content/posts/2022-05-30-возрождение/index.md
+++ b/content/posts/2022-05-30-возрождение/index.md
@@ -2,7 +2,7 @@
title: Возрождение?
date: "2022-05-30T23:37:00Z"
categories:
- - Без рубрики
+ - Без категории
tags:
- блог
- моё
diff --git a/content/posts/2022-05-31-golang-1/index.md b/content/posts/2022-05-31-golang-1/index.md
index f1e464f..d4049e5 100644
--- a/content/posts/2022-05-31-golang-1/index.md
+++ b/content/posts/2022-05-31-golang-1/index.md
@@ -2,10 +2,9 @@
title: Golang подборка 1
date: "2022-05-31T01:00:00Z"
categories:
- - Без рубрики
+ - Golang
tags:
- - go
- - it
+ - Go
---
Просто собираю подборку интересных ссылок по гошке на почитать потом.
diff --git a/content/posts/2023-01-12-gitrepo/index.md b/content/posts/2023-01-12-gitrepo/index.md
index b483e09..90290e3 100644
--- a/content/posts/2023-01-12-gitrepo/index.md
+++ b/content/posts/2023-01-12-gitrepo/index.md
@@ -2,9 +2,9 @@
title: GitRepo.ru
date: "2023-01-12T20:22:00Z"
categories:
+ - IT
- Мои проекты
tags:
- - it
- моё
---
diff --git a/content/posts/2023-05-26-gist/index.md b/content/posts/2023-05-26-gist/index.md
index 4e36c69..5e81d26 100644
--- a/content/posts/2023-05-26-gist/index.md
+++ b/content/posts/2023-05-26-gist/index.md
@@ -2,9 +2,8 @@
title: Импортозамещение Gist
date: "2023-05-26T17:40:21Z"
categories:
- - Мои проекты
+ - IT
tags:
- - it
- моё
---
diff --git a/content/posts/2023-07-24-tls/index.md b/content/posts/2023-07-24-tls/index.md
index 7fe4890..83f0a2a 100644
--- a/content/posts/2023-07-24-tls/index.md
+++ b/content/posts/2023-07-24-tls/index.md
@@ -2,9 +2,8 @@
title: Немного мыслей о TLS (HTTPS) в России
date: "2023-07-24T20:04:17Z"
categories:
- - Без рубрики
+ - IT
tags:
- - it
- Россия
- TLS
---
diff --git a/content/posts/2023-12-29-переезд/index.md b/content/posts/2023-12-29-переезд/index.md
index 419a19f..ab40436 100644
--- a/content/posts/2023-12-29-переезд/index.md
+++ b/content/posts/2023-12-29-переезд/index.md
@@ -2,7 +2,7 @@
title: Переезд и проблемы обновления
date: "2023-12-29T00:15:44Z"
categories:
- - Без рубрики
+ - Без категории
tags:
- блог
- разное
diff --git a/content/posts/2024-01-03-архив/index.md b/content/posts/2024-01-03-архив/index.md
index 0e5c99e..658b3ca 100644
--- a/content/posts/2024-01-03-архив/index.md
+++ b/content/posts/2024-01-03-архив/index.md
@@ -2,7 +2,7 @@
title: Архив
date: "2024-01-03T17:28:40Z"
categories:
- - Без рубрики
+ - Жизнь
tags:
- блог
draft: true
@@ -12,4 +12,4 @@ draft: true
блогов. В основном, кринжовые, конечно, но это моя жизнь, как она была в то
время. Так что пусть будут.
-[Архив блога](https://neonxp.ru/archive/)
+[Архив блога](https://neonxp.ru/pages/archive/)
diff --git a/content/posts/2024-02-21-tls/index.md b/content/posts/2024-02-21-tls/index.md
index 31e55fc..b8f7886 100644
--- a/content/posts/2024-02-21-tls/index.md
+++ b/content/posts/2024-02-21-tls/index.md
@@ -2,9 +2,8 @@
title: Конфигурация HTTPS с сертификатом от Минцифры
date: "2024-02-21T21:51:29Z"
categories:
- - Без рубрики
+ - IT
tags:
- - it
- Россия
- TLS
---
diff --git a/content/posts/2024-06-01-вам-не-нужны-пуши/index.md b/content/posts/2024-06-01-вам-не-нужны-пуши/index.md
index 14e5a3c..6f2718e 100644
--- a/content/posts/2024-06-01-вам-не-нужны-пуши/index.md
+++ b/content/posts/2024-06-01-вам-не-нужны-пуши/index.md
@@ -2,10 +2,10 @@
title: Вам не нужны пуши!
date: "2024-06-01T21:05:55Z"
categories:
- - Без рубрики
+ - Жизнь
tags:
- - it
- - разное
+ - IT
+ - Разное
---
Я не шучу. Серьёзно.
diff --git a/content/posts/2024-07-13-joplin/index.md b/content/posts/2024-07-13-joplin/index.md
index 62e9e4f..3cc1882 100644
--- a/content/posts/2024-07-13-joplin/index.md
+++ b/content/posts/2024-07-13-joplin/index.md
@@ -2,10 +2,9 @@
title: Заметочник Joplin
date: "2024-07-13T20:49:12Z"
categories:
- - Без рубрики
+ - IT
tags:
- - it
- - joplin
+ - Joplin
---
Просто хочу поделиться отличным приложением для заметок, вместо популярного
diff --git a/content/posts/2024-09-26-hugo-wordpress/index.md b/content/posts/2024-09-26-hugo-wordpress/index.md
index 0fcef25..bb497da 100644
--- a/content/posts/2024-09-26-hugo-wordpress/index.md
+++ b/content/posts/2024-09-26-hugo-wordpress/index.md
@@ -2,9 +2,9 @@
title: Hugo → WordPress
date: "2024-09-26T19:05:00Z"
categories:
- - Без рубрики
+ - Блог
tags:
- - блог
+ - Блог
---
Поменял в блоге движок с модного Hugo на немодный бумерский WordPress. Почему?
diff --git a/content/posts/2024-10-06-цитатник-рунета/index.md b/content/posts/2024-10-06-цитатник-рунета/index.md
index 66e2468..f4f46a0 100644
--- a/content/posts/2024-10-06-цитатник-рунета/index.md
+++ b/content/posts/2024-10-06-цитатник-рунета/index.md
@@ -4,8 +4,6 @@ date: "2024-10-06T12:00:11Z"
categories:
- Мои проекты
tags:
- - go
- - it
- моё
---
diff --git a/content/posts/2024-11-15-hugo/index.md b/content/posts/2024-11-15-hugo/index.md
index 7c210d7..35e3cda 100644
--- a/content/posts/2024-11-15-hugo/index.md
+++ b/content/posts/2024-11-15-hugo/index.md
@@ -2,7 +2,7 @@
title: Hugo
date: "2024-11-15T01:11:49+03:00"
categories:
- - Без рубрики
+ - Блог
tags:
- разное
---
diff --git a/content/posts/2024-11-17-obsidian/index.md b/content/posts/2024-11-17-obsidian/index.md
index 8cc0aaf..f03780b 100644
--- a/content/posts/2024-11-17-obsidian/index.md
+++ b/content/posts/2024-11-17-obsidian/index.md
@@ -2,11 +2,11 @@
title: Obsidian
date: "2024-11-17T22:30:37+03:00"
categories:
- - Без рубрики
+ - Без категории
tags:
- - it
- - joplin
- - obsidian
+ - IT
+ - Joplin
+ - Obsidian
---
Некоторое время назад я [писал](/posts/joplin/) про заметочник
diff --git a/content/posts/2024-12-15-conditional-operator-go/index.md b/content/posts/2024-12-15-conditional-operator-go/index.md
index 08214f2..53f8a07 100644
--- a/content/posts/2024-12-15-conditional-operator-go/index.md
+++ b/content/posts/2024-12-15-conditional-operator-go/index.md
@@ -2,7 +2,7 @@
title: Тернарник в Go
date: "2024-12-15T23:47:08+03:00"
categories:
- - Без рубрики
+ - Golang
tags:
- IT
- Go
diff --git a/content/posts/2024-12-17-infra/index.md b/content/posts/2024-12-17-infra/index.md
index c10be71..0b8253f 100644
--- a/content/posts/2024-12-17-infra/index.md
+++ b/content/posts/2024-12-17-infra/index.md
@@ -1,6 +1,6 @@
---
categories:
- - Мета
+ - IT
date: "2024-12-17T21:07:53+03:00"
draft: true
tags:
diff --git a/content/posts/2024-12-30-irc/index.md b/content/posts/2024-12-30-irc/index.md
index 7071fa0..248a61c 100644
--- a/content/posts/2024-12-30-irc/index.md
+++ b/content/posts/2024-12-30-irc/index.md
@@ -1,6 +1,6 @@
---
categories:
- - Без рубрики
+ - IT
date: "2024-12-30T14:54:08+03:00"
draft: true
image: irc_logo.webp
diff --git a/content/posts/2024-12-31-new-year/index.md b/content/posts/2024-12-31-new-year/index.md
index 4d1f561..e4fc22d 100644
--- a/content/posts/2024-12-31-new-year/index.md
+++ b/content/posts/2024-12-31-new-year/index.md
@@ -2,9 +2,9 @@
title: С Новым Годом!
date: "2024-12-31T15:48:25+03:00"
categories:
- - Без рубрики
+ - Жизнь
tags:
- - разное
+ - Новый Год
---
Ну что же, друзья, с наступающим!
diff --git a/content/posts/2025-12-21-sicktech/index.md b/content/posts/2025-12-21-sicktech/index.md
index 45f6cd9..e09a79b 100644
--- a/content/posts/2025-12-21-sicktech/index.md
+++ b/content/posts/2025-12-21-sicktech/index.md
@@ -2,11 +2,11 @@
title: Про здоровые и нездоровые технологии
date: "2025-12-21T18:40:26+03:00"
tags:
- - it
- - sicktech
+ - IT
+ - Sicktech
categories:
- - размышления
- - лонгрид
+ - Размышления
+ - Лонгрид
---
Я заметил, что часто стал в речи употреблять словосочетания «здоровая
diff --git a/content/posts/2025-12-28-philharmonic-park/index.md b/content/posts/2025-12-28-philharmonic-park/index.md
index cf8046b..778733f 100644
--- a/content/posts/2025-12-28-philharmonic-park/index.md
+++ b/content/posts/2025-12-28-philharmonic-park/index.md
@@ -3,6 +3,7 @@ title: Прогулка в сквере филармонии
date: "2025-12-28T21:37:44+03:00"
categories:
- Прогулки
+ - Жизнь
---
Вчера [гуляли с супругой на
diff --git a/content/posts/2025-12-29-newyear-excel/index.md b/content/posts/2025-12-29-newyear-excel/index.md
index df0e523..345be7e 100644
--- a/content/posts/2025-12-29-newyear-excel/index.md
+++ b/content/posts/2025-12-29-newyear-excel/index.md
@@ -2,9 +2,9 @@
title: Новогодний Excel
date: "2025-12-29T11:47:14+03:00"
tags:
- - разное
+ - Новый Год
categories:
- - Без рубрики
+ - Без категории
---
По мотивам одного недавнего поста с Пикабу, который мне уже лень искать. Немного
diff --git a/content/posts/2025-12-31-new-year/index.md b/content/posts/2025-12-31-new-year/index.md
index 109c190..ed0bd37 100644
--- a/content/posts/2025-12-31-new-year/index.md
+++ b/content/posts/2025-12-31-new-year/index.md
@@ -2,9 +2,9 @@
title: С Новым Годом!
date: "2025-12-31T15:27:17+03:00"
tags:
- - разное
+ - Новый Год
categories:
- - Без рубрики
+ - Жизнь
---
С наступающим Новым Годом!
diff --git a/content/posts/2025-02-08-stplr/index.md b/content/posts/2026-02-08-stplr/index.md
index 31056c2..17e7ad8 100644
--- a/content/posts/2025-02-08-stplr/index.md
+++ b/content/posts/2026-02-08-stplr/index.md
@@ -2,7 +2,7 @@
title: Пакетный менеджер Stapler
date: "2026-02-08T15:02:12+03:00"
tags:
- - Разное
+ - Stplr
categories:
- IT
---
diff --git a/content/posts/2026-02-25-death-of-poweruser/index.md b/content/posts/2026-02-25-death-of-poweruser/index.md
index 435ee15..b6fcd54 100644
--- a/content/posts/2026-02-25-death-of-poweruser/index.md
+++ b/content/posts/2026-02-25-death-of-poweruser/index.md
@@ -2,7 +2,7 @@
title: Смерть «продвинутого пользователя ПК»
date: 2026-02-25T22:59:31+03:00
tags: ["IT", "Sicktech"]
-categories: ["Размышления"]
+categories: ["Размышления", "IT"]
---
https://fireborn.mataroa.blog/blog/the-slow-death-of-the-power-user/
@@ -28,4 +28,5 @@ https://fireborn.mataroa.blog/blog/the-slow-death-of-the-power-user/
каждый сам кузнец своего счастья.
[^1]: https://neonxp.ru/posts/2025-12-21-sicktech/
+
[^2]: https://neonxp.ru/posts/2025-12-24-email/
diff --git a/content/posts/2026-02-26-broken-atom/index.md b/content/posts/2026-02-26-broken-atom/index.md
new file mode 100644
index 0000000..7ab540e
--- /dev/null
+++ b/content/posts/2026-02-26-broken-atom/index.md
@@ -0,0 +1,34 @@
+---
+title: Сломаный Атом
+date: 2026-02-26T01:19:06+03:00
+tags: ["Блог"]
+categories:
+ - IT
+---
+
+Ого, оказывается всё это время у меня была сломана генерация [ленты
+Атом](https://neonxp.ru/feed/)! А именно, некорректно подставлялось содержание
+состоящее из, в том числе, ХТМЛ тегов, но без указания что это ХТМЛ. Что
+интересно, большинству читалок у меня на хозяйстве — всё равно и они не
+показывали проблемы. Но сегодня я открыл в Newsboat[^1] (ссылка на оффсайт у
+меня всё равно не открывается) и мои глаза начали плакать кровью от этой
+мешанины текста и тегов. Пришлось чинить :)
+
+[^1]: https://github.com/newsboat/newsboat
+
+Заодно, наконец-то, сделал чтобы было отдельно и краткое содержимое в теге
+<Summary>…</Summary> и полное содержимое в правильном для этого теге
+<Content>…</Content>. А то я постоянно мысленно осуждал авторов,
+которые в РСС/Атом ленту вносят только краткое содержание (или даже просто
+заголовок!), и требовалось за полной статьё покидать удобную читалку. А сам при
+этом поступал так же. Больше нет. Теперь отдаю и краткое содержимое и полное.
+Читайте где удобнее, мне не принципиален заход именно на веб-сайт :) Важно это
+было бы, наверное, если бы у меня была реклама, но её у меня нет и никогда не
+будет по этическим соображениям (да и какому рекламодателю мой хомяк вообще
+сдался то? :D ).
+
+Не знаю, стоит ли это отдельно озвучивать, но ленты Атом (как в прочем, и РСС)
+и т.н. JsonFeed — это однозначно «здоровые» технологии по моей классификации.
+Да, у РСС есть определённые проблемы в формате, но по сравнению с
+альтернативами в виде лент социальных сетей — этот недостаток такая
+несущественная мелочь!
diff --git a/content/posts/2026-02-27-no-smoke/index.md b/content/posts/2026-02-27-no-smoke/index.md
new file mode 100644
index 0000000..c4152db
--- /dev/null
+++ b/content/posts/2026-02-27-no-smoke/index.md
@@ -0,0 +1,18 @@
+---
+title: Ровно неделя без сигарет и iQOS
+date: 2026-02-27T10:10:53+03:00
+tags: ["Курение"]
+categories:
+ - Жизнь
+---
+
+![Счётчик без сигарет](/posts/2026-02-27-no-smoke/no-smoke.jpg)
+
+Сегодня утром — ровно неделя без сигарет и стиков. Тяжело ли? Тяжело. Очень. Я
+стал гораздо более раздражительным и злым. Сон стал тоже хуже. Сплю часов по
+5-6. Но надеюсь, это только временный эффект, который скоро пройдёт. Благо,
+супруга меня очень поддерживает, спасибо ей за это!
+
+Для помощи себе принимаю «Табекс» и когда совсем уже херово — «Никоретте». В
+целом, возвращаться к привычке не хочу. И как понимаю, нужно продержаться в
+общей сложности месяц, чтобы можно было фиксировать результат.
diff --git a/content/posts/2026-02-27-no-smoke/no-smoke.jpg b/content/posts/2026-02-27-no-smoke/no-smoke.jpg
new file mode 100644
index 0000000..3897fcc
--- /dev/null
+++ b/content/posts/2026-02-27-no-smoke/no-smoke.jpg
Binary files differ
diff --git a/content/posts/2026-03-02-ipv6/index.md b/content/posts/2026-03-02-ipv6/index.md
new file mode 100644
index 0000000..b5d56b4
--- /dev/null
+++ b/content/posts/2026-03-02-ipv6/index.md
@@ -0,0 +1,19 @@
+---
+title: Наконец-то у меня есть IPv6 на домашнюю сеть!
+date: 2026-03-02T21:10:07+03:00
+tags: ["ipv6"]
+categories:
+ - Без категории
+---
+
+Отчаялся я ждать ~~милостей от природы~~ милостей от провайдера — сделал таки
+IPv6 туннель через https://ipv6.ip4market.ru/. По сути, выбора-то больше и нет.
+Ну точнее есть, или забугорный (вообще не вариант) или прокидывать через свою
+VDS (которую ещё надо и завести для начала!), а с этим, боюсь, у меня
+компетенции не хватит. Поэтому и пошёл по пути наименьшего противления.
+
+Зачем всё это? Да затем, что я считаю это правильным! Именно это и есть
+настоящий интернет, а не тот суррогат, который нам втюхивают корпы. Ну а кроме
+лозунгов, практического смысла я пока не вижу. Но с другой стороны
+идеалогическая часть вполне себе оправдала те самые несчастные полчаса, что я
+это настраивал :)
diff --git a/content/posts/2026-03-14-conf/index.md b/content/posts/2026-03-14-conf/index.md
new file mode 100644
index 0000000..75236b8
--- /dev/null
+++ b/content/posts/2026-03-14-conf/index.md
@@ -0,0 +1,220 @@
+---
+title: Идеальный формат конфигов *
+date: 2026-03-14T17:21:59+03:00
+tags: ["go", "conf"]
+category:
+ - IT
+ - Мои проекты
+---
+
+\* лично для меня
+
+В общем, случилось и на неделе я таки присвоил тег v1 для своей самописной Go
+библиотеки для разбора конфигов! Но обо всём по порядку. Или можно пропустить
+предысторию и сразу [перейти к описанию библиотеки](#conf-v1).
+
+# Предыстория
+
+Около месяца назад я задумался написать небольшую утилиту для себя, которая бы
+организовывала для меня рабочее окружение. Не важно сейчас, как именно должна
+была организовывать, а важно, что эта утилита должна бы была иметь весьма
+разухабистый конфиг вследствие своей планируемой гибкости. И встал вопрос, а
+какой формат конфигов использовать? Казалось бы, возьми yaml, toml, на худой
+конец, json (hjson, json5, итп). Даже думал об ini формате! Но всё было не то...
+
+И дело даже не в моём <abbr title="Not Invented Here">NIH</abbr> синдроме.
+А они все мне не подходят!
+
+## YAML
+
+Отвратительный язык! Начиная с отступов пробелами, что я ненавижу,[^1] продолжая
+тем, что у него спека способна по объёму поконкурировать с спекой XML и
+заканчивая весельем с ошибками когда строки _внезапно_ парсятся как числа и всё
+ломается!
+
+## TOML
+
+На самом деле, самый адекватный из вариантов, но его синтаксис... Ну скажем
+так, на любителя. Но да, всяко лучше YAML. Всё что угодно лучге YAML. Гори в
+аду, YAML!
+
+## JSON
+
+Это вообще не язык для конфигов и не язык разметки. А формат серилизации
+объектов. Кому вообще первому пришло в голову в нём конфиги хранить? Его
+производные — это уже какой-то набор костылей. Зачем мучать стюардесу?
+
+## INI
+
+Первый из подборки язык который именно изначально для описания конфигураций. Но
+он уж больно ограниченный, да и гнилостный душок микрософта...
+
+Короче, я не стал искать дальше оправданий и засучи́л рукава и решил написать
+идеальную (для себя) библиотеку конфигураций! За основу синтаксиса я взял
+формат конфигов у таких никсовых приложений, как NGINX, bind9 и прочих
+подобных. Во-первых, это красиво. Во-вторых, это привычно. Из других требований
+кроме привычности, была гибкость, которая выражается в возможности делать сколь
+угодно глубокую вложенность в конфигах. Но это всё было фоном, а главные мои
+требования были всё же нефункциональными:
+
+1. Самое главное, мне должно _нравиться_. Я понимаю, что это никак не
+ формализовать, это можно только почувствовать. Именно поэтому не подошли ни
+TOML, ни INI, ни в т.ч. YAML. Они мне _не нравятся_ внешне.
+2. Не менее важно, что мне его должно хватать. Про вложенности я уже говорил.
+3. И чтобы служило мне так десятилетиями без изменений. То есть, чтобы мне надо
+ было эту библиотеку разработать один раз, а потом, в идеале, никак и никогда
+её не менять. Максимум подправлять под реалии новых версий языков, что-то
+такое. Я вообще люблю вещи из разряда «раз и навсегда». Может это старость?
+
+Немного подумав над синтаксисом я пришёл к тому, что мне нужна максимальная
+примитивность. Всего две формы записи:
+
+1. Имя аргумент1 аргумент2 ... аргументN;
+2. Имя аргумент1 аргумент2 ... аргументN { ...вложенные директивы... }
+
+По сути это и есть весь базовый синтаксис! Просто последовательность директив,
+каждая из которых просто обязана иметь имя. Причём неуникальное! Требование к
+уникальности имён — уже ограничение и неуниверсальность.
+
+Аргументы только самых базовых типов — строка (причём в разных кавычках в
+зависимости от контекста, например, \` для многострочных строк), числа как
+целочисленные, так и с плавающей точкой, булевы значения, и один особый тип:
+ident (то есть какая-то строка без кавычек, например, идентификатор или имя).
+Мне больше не надо! Даты? Строка! Промежутки времени? Тоже строка! Зачем
+отдельно-то?
+
+Примерно так я видел для себя идеальный формат конфигов. Да, очень сумбурно и
+неточно, но когда меня это останавливало? Решил накидать формальную грамматику,
+так как писать вручную парсер уж сильно не хотелось. Сначала написал её для
+[egg](https://gitlab.com/cznic/egg), немного помучался с API сгенерированного
+парсера, но потом всё же всё заработало! Кроме... Кроме того, что я наткнулся
+на неприятное свойство поведения: если парсер натыкается на неожиданный символ
+— он выдавал непонятную без полулитра ошибку вида "index of array out of
+range". Причём без номера строки и символа. Сиди и гадай, что пошло не так.
+Убив на это без малого пару дней, я так и не смог сделать так, чтобы ошибка
+была более человеческая (типа «строка 2 символ 4: ожидалось что-то, а тут
+что-то другое»). Поэтому я принял волевое решение переписать совсем с нуля.
+Взял другой [генератор парсеров](github.com/mna/pigeon), переписал грамматику c
+EBNF на PEG [^2] и ... И получилось **гораздо** более элегантно, чем с egg!
+Счастью моему не было предела, когда я получил первый успех! Да, конечно, потом
+пара дней полировки и обвешивания необязательными, но приятными фичами и
+готово! После того как я попробовал на практике свою библиотеку в одном
+простеньком проекте ([о нём в конце](#pose)) — я с чистой совестью присвоил
+библиотеке тег стабильной версии, т.к. я получил то, что хотел и больше править
+её в ближайшее время я не собираюсь.
+
+[^2]: https://git.neonxp.ru/conf/diff/parser/grammar.peg?id=00394a80501960ad26787b5c44435ed5ed67ad84
+
+# conf v1
+
+Встречайте:
+- [go.neonxp.ru/conf](https://go.neonxp.ru/conf)
+- [Гит репозиторий](https://git.neonxp.ru/conf)
+- [Документация на pkg.go.dev](https://pkg.go.dev/go.neonxp.ru/conf)
+
+Как я уже говорил, синтаксис очень простой. Для наглядности я приведу сразу
+пример, который покажет, по сути, все возможности. Да, возможностей не много,
+потому что я ценю минимализм, как уже говорил выше.
+
+```nginx
+# Две одноименных директивы
+some directive;
+some other directive;
+
+string_val "value";
+int_val 123;
+float_val 123.321;
+bool_val true;
+
+xdg_config_dir HOME ".config"
+# Если получать через StringExt("/", os.LookupEnv), то получится
+# $HOME + "/" + ".config" = "/home/ИМЯ_ПОЛЬЗОВАТЕЛЯ/.config"
+
+group1 "some" "args" "and" "body" {
+ group2 123 321 {
+ group3 true false true {
+ key value; # One line comment!
+ }
+ }
+}
+```
+
+Из примера выше мы видим:
+- две директивы с одинаковым именем (`some`)
+- несколько директив с аргументами разных типов (`*_val`)
+- директивы с вложенными поддирективами (`group*`). Причём, наличие тела `{...}`
+ у директивы не отменяет возможности передать и аргументы до тела.
+ Единственное, тело должно быть одно и в конце директивы. Зато после него не
+ нужно ставить `;`, парсер и так понимает что раз тело закончилось, то и
+ директива закончилась.
+- отступы могут быть как табуляторами, так и пробелами. Но я прошу использовать
+ именно табуляторы, потому что только табуляторы это правильно.[^1]
+ Хер вы меня заставите передумать!
+
+И всё! Просто и очень наглядно. Идеально для конфигов!
+
+[^1]: https://neonxp.ru/posts/2025-04-05-tabs-or-spaces/
+
+## Использование в Go
+
+Естественно, не могло быть и речи о анмаршалинге этого формата на структуры, как
+это делается у JSON YAML и прочих. Но это и не надо! У библиотеки есть несколько
+встроенных типов, таких как:
+
+- [Group](https://pkg.go.dev/go.neonxp.ru/conf@v1.0.1/model#Group) - группа
+директив. В том числе и тело директивы. Всё просто! Из методов есть базовые
+методы для получения конкретных директив из группы и простой фильтр.
+- [Directive](https://pkg.go.dev/go.neonxp.ru/conf@v1.0.1/model#Directive) -
+для директив. У него есть несколько методов для типизированного получения
+первого из аргументов директивы (того что после имени директивы), также метод
+получения всех аргументов и тела. Так же есть и специальный метод StringExt[^3],
+который сливает все аргументы в одну строку с разделителем `sep` и пропуская
+аргументы типа `Ident` через переданную функцию `identLookup`.
+
+[^3]: https://pkg.go.dev/go.neonxp.ru/conf@v1.0.1/model#Directive.StringExt
+
+Это два самых главных типа. Помимо них есть ещё и Ident о котором я говорил выше
+и тип Lookup, который определяет функцию подстановки для метода StringExt,
+намеренно сделанный совместимым со стандартным
+[os.LookupEnv](https://pkg.go.dev/os#LookupEnv).
+
+Я постарался очень и очень поверхностно дать описание API, т.к. можно подробно
+прочитать об API и на [pkg.go.dev](https://pkg.go.dev/go.neonxp.ru/conf).
+
+А чего же не хватает у в этом API? Записи конфига! Да! Есть только Load и
+LoadFile[^4], но нет никакого Write, Marshal и чего-то такого! Я долго думал,
+как это сделать. Ведь всё таки если делать запись, то по хорошему надо следить
+за тем, чтобы и комментарии сохранялись, причём строго там, где они были в
+оригинальном конфиге. Более того, по хорошему, нужно сделать так, чтобы после
+LoadFile → WriteFile полученный файл должен побайтово совпадать с тем что было.
+Да, дохрена забот! А потом я подумал «А зачем мне вообще сохранять? Конфиг
+пишется руками человеком для программы. Зачем самой программе в него писать?».
+И правда. Хорошенько подумав я не придумал нормальных вариантов использования,
+кроме уж сильно притянутых. На том и порешил что делать запись я не буду. Ни
+сейчас ни потом. Но вообще, это опенсорс и значит, что тот, кому понадобится —
+сможет и сам реализовать и прислать мне MR на почту. От такого я не откажусь!
+
+Лицензией я выбрал конечно же GPLv3. А что, тут есть выбор? Для меня есть только
+GPL. Остальные митоапачи — профанация и не интересно.
+
+[^4]: https://pkg.go.dev/go.neonxp.ru/conf@v1.0.1#pkg-index
+
+# POSE
+
+[Гит проекта](https://git.neonxp.ru/pose/)
+
+Я упомянул выше, что что я уже написал первый проект, где обкатал новую
+библиотеку. И этот проект - простая утилита, которая транслирует записи из
+источника (источников) в целевой сервис (сервисы). Ну то есть, из RSS/Atom в
+телеграм (на момент написания поста, 14.03.2026 не запрещённый на территории
+России). Хоть эта утилита уже работает у меня на сервере (транслирует Atom
+ленту этого блога в мой канал), я её воспринимаю скорее как референсный пример
+использования библиотеки конфигов.
+
+Так что да, если заинтересовались библиотекой conf - рекомендую посмотреть [этот
+проект](https://git.neonxp.ru/pose/tree/internal/application/application.go#n25)
+и [его конфиг](https://git.neonxp.ru/pose/tree/config.conf) как референсный
+пример использования библиотеки conf.
+
+Пожалуй, на этом пока всё. Если что-то не написал или непонятно — приглашаю
+обсудить со мной [по почте](mailto:i@neonxp.ru) или в комментариях ниже.
diff --git a/content/posts/2026-03-15-meshtastic/cardputer.jpg b/content/posts/2026-03-15-meshtastic/cardputer.jpg
new file mode 100644
index 0000000..530f2f6
--- /dev/null
+++ b/content/posts/2026-03-15-meshtastic/cardputer.jpg
Binary files differ
diff --git a/content/posts/2026-03-15-meshtastic/cardputer.webp b/content/posts/2026-03-15-meshtastic/cardputer.webp
new file mode 100644
index 0000000..304b3af
--- /dev/null
+++ b/content/posts/2026-03-15-meshtastic/cardputer.webp
Binary files differ
diff --git a/content/posts/2026-03-15-meshtastic/index.md b/content/posts/2026-03-15-meshtastic/index.md
new file mode 100644
index 0000000..0d3819d
--- /dev/null
+++ b/content/posts/2026-03-15-meshtastic/index.md
@@ -0,0 +1,41 @@
+---
+title: Снова про Мышастик
+date: 2026-03-15T13:43:49+03:00
+tags: ["meshtastic"]
+category:
+ - Без категории
+---
+
+Поголовье устройств у меня продолжает расти, теперь у меня есть и такой
+портативный узел размером с кредитку:
+
+![cardputer](/posts/2026-03-15-meshtastic/cardputer.webp)
+
+Не скажу что его использовать удобно. Скорее неудобно, чем удобно. Но весьма
+забавно. Отдаёт неким ретро.
+
+Так, подведу итог что у меня по узлам сейчас:
+
+- NeonXP Portable (nxp0) — мой самый первый узел на T-Beam. Он же и остаётся
+моим условно переносным засчёт наличия внешнего аккумулятора 18650. Конечно, он
+не самостоятелен и должен быть подключён к смартфону по BT.
+- NeonXP Vehicle (nxp1) — узел, который лежит в автомобиле и работает от
+бортовой сети. Модель — Heltec v3. Антенна — родная.
+- NeonXP Base (nxp2) — домашний стационарный узел, который подключён в домашнюю
+сеть через wifi (другие узлы цепляются по bluetooth или автономны как nxp3).
+Модель — Heltec v3. Антенна — Moxon, направленная в сторону центра города. В
+основном благодаря именно ей у меня из моего спального района есть связанность
+до остальной сети. На текущий момент показывает, что 11 прямых соединений, что
+для меня очень и очень хорошо. Раньше я довольствовался буквально 1-2 аплинками
+:) А другие узлы, пока я дома, уже подключаются через него.
+- NeonXP Cardputer (nxp3) — вот это устройство что в начале поста :) Cardputer
+ ADV + Lora модуль. В деньгах стоит примерно 4-5К₽.
+- ... (nxp4) — Пока ещё в пути ко мне. Но это уже Heltec v4, не v3. Так же
+ будет с Moxon антенной. Планирую её поставить уже в новом доме, то есть на
+юге города. Пока кажется, что врядли я получу связанность с основной городской
+сетью, но постараюсь. Тем более, судя по карте, на юге города количество узлов
+потихоньку растёт. Надеюсь, через время уже будет моим главным «Base» узлом.
+
+И да, на этих узлах я не остановлюсь, ведь как минимум могут (и должны!) быть
+узлы nxp5, nxp6, nxp7, nxp8, nxp9, а дальше, ещё не придумал, или nx10, nx11
+и т.д. или как-то по другому :)
diff --git a/content/posts/2026-03-21-aiserver/index.md b/content/posts/2026-03-21-aiserver/index.md
new file mode 100644
index 0000000..c7c8f7c
--- /dev/null
+++ b/content/posts/2026-03-21-aiserver/index.md
@@ -0,0 +1,74 @@
+---
+title: Свой ИИ сервер на Steam Deck
+date: 2026-03-21T13:06:20+03:00
+tags:
+ - ИИ
+category:
+ - ИИ
+---
+
+Я весьма активно в последнее время экспериментирую с нейронками, причём не
+только в контексте их обычного использования для коддинга. Больше меня
+интересует как раз разработка *под* нейронки (автономные агенты, ага).
+
+Так же сейчас перепрохожу по учебникам в свободное время институтский курс по
+линейке (а на очереди ещё вычмат, тервер и матан...) чтобы восстановить свои и
+так слабые знания по математике, необходимой для ИИ. Затем план уже конкретно в
+МЛ, БЯМ и прочеее вгрызться. Внезапно математика, когда ей занимаешься не «из
+под палки» потому что зачёт/экзамен, а только для себя — становится **очень**
+интересной. Прям жалею что в институте недооценивал. Но сейчас всё же не об
+этом речь.
+
+Сейчас про именно разработку под уже существующие БЯМ.
+
+Конечно, в процессе разработки и особенно тестирования, т.н. токенов тратится
+не много, а ОЧЕНЬ много. И, честно говоря, мне жалко бабки на это. И это ещё не
+говоря о том, что появляется зависимость от неких «облачных провайдеров», что я
+очень и очень не приемлю.
+
+Выход — локальный инференс БЯМ. Благо, совсем недавно китайская Alibaba
+обрадовала сообщество своим новым семейством моделей Qwen3.5 которые
+одновременно и достаточно компактные для локального инференса (даже на CPU!) и
+при этом достаточно умненькие (серьёзно, она решает ту шуточую задачу с кружкой
+у которой запаян верх и отрезано дно :) ).
+
+Т.к. я не сторонник стационарных компьютеров уже лет так 20 — адекватного ПК с
+видеокартами у меня нет и не предвидится. Даже если бы я накопил на мощную
+видюху для нейронок — мне было бы некуда её пихать! Но тут я вспомнил, что у
+меня простаивает такое чудо технологий, как Steam Deck!
+
+![Steam Deck](/posts/2026-03-21-aiserver/steamdeck_small.jpg)
+
+Лонг стори шорт. На родной SteamOS поднять не получилось, поэтому я просто
+поставил на стимдек свою любимую AltLinux p11. Удивительно, но она встала с
+полпинка, без всякого пердолинга драйверов. Хотя я был готов, что что-то пойдёт
+не так, ибо железо у деки весьма кастомное.
+
+Пробовал Ollama с qwen3.5:9b (unsloth/Qwen3.5-9B-GGUF) — как бы работала, но
+через сколько-то запросов помирала. Непорядок совсем. Долго пытался это
+отдебажить, но так и не получилось ни подружить деку с rocm ни заставить
+стабильно олламу работать с vulkan.
+
+В общем, плюнул на олламу и поставил
+llama.cpp. И вот уже на ней, квенка завелась как родная! Да, скорость инференса
+7-8 токенов в секунду, но для моих целей это вполне и вполне достаточно! На CPU
+ноута в 10 потоков (12 ядерный i7 13 поколения) хорошо если 1 токен в секунду
+был, при том что остальная ОС была в коматозном состоянии.
+
+Пробовал ещё и более вкусную qwen3.5 a3b MOE — но она не влезла в память
+¯\\\_(ツ)_/¯
+
+![Qwen3.5](/posts/2026-03-21-aiserver/qwen35_small.jpg)
+
+Да, аж 10 минут. Но там долгий ризонинг был. Обычно в моих задачах ризонинг
+сильно короче.
+
+Итог, у меня наконец-то есть своя локальная «бесплатная» и достаточно
+продвинутая моделька, у которой я могу под эксперименты жрать токены
+миллионами. Но всё равно, начинаю копить на полноценный GPU сервер, чтобы
+играться уже с совсем большими БЯМ. Хочу что-то из серии Nvidia DGX Spark или,
+что вероятнее, минипк на Ryzen AI Max+ 395 + Radeon 8060S. Я вообще считаю, что
+за подобными персональными минисерверами для ИИ будущее.
+
+Мечта — иметь локальный инференс MiniMax M2.7 и GLM5 :) Ну а пока, имею то, что
+имею.
diff --git a/content/posts/2026-03-21-aiserver/qwen35.png b/content/posts/2026-03-21-aiserver/qwen35.png
new file mode 100644
index 0000000..8af7a29
--- /dev/null
+++ b/content/posts/2026-03-21-aiserver/qwen35.png
Binary files differ
diff --git a/content/posts/2026-03-21-aiserver/qwen35_small.jpg b/content/posts/2026-03-21-aiserver/qwen35_small.jpg
new file mode 100644
index 0000000..3322391
--- /dev/null
+++ b/content/posts/2026-03-21-aiserver/qwen35_small.jpg
Binary files differ
diff --git a/content/posts/2026-03-21-aiserver/steamdeck.jpg b/content/posts/2026-03-21-aiserver/steamdeck.jpg
new file mode 100644
index 0000000..277aee2
--- /dev/null
+++ b/content/posts/2026-03-21-aiserver/steamdeck.jpg
Binary files differ
diff --git a/content/posts/2026-03-21-aiserver/steamdeck_small.jpg b/content/posts/2026-03-21-aiserver/steamdeck_small.jpg
new file mode 100644
index 0000000..109c60a
--- /dev/null
+++ b/content/posts/2026-03-21-aiserver/steamdeck_small.jpg
Binary files differ
diff --git a/content/projects/jabber/index.md b/content/projects/jabber/index.md
new file mode 100644
index 0000000..0ba1561
--- /dev/null
+++ b/content/projects/jabber/index.md
@@ -0,0 +1,26 @@
+# Jabber
+
+А ещё у меня есть мой маленький Jabber сервер!
+
+## Быстрое вкатывание
+
+1. Регистрация через клиент (если есть проблемы - пишите мне на почту i@neonxp.ru или куда угодно, я помогу!)
+2. Быстрее всего использовать веб клиент: https://neonxp.ru/chat или можно использовать клиент из списка ниже
+3. Добавить в список меня [i@neonxp.ru](xmpp:i@neonxp.ru) и войти в общий чат сервера
+ [main@conf.neonxp.ru](xmpp:main@conf.neonxp.ru?join)
+
+## Возможности сервера
+
+- Аудио и видео звонки (есть свой turn-сервер)
+- Обмен файлами через сервер (300 мб на файл, 10 гб на пользователя. Пока так, нужно будет больше - подниму лимиты)
+- Полная совместимость с современными стандартами: https://compliance.conversations.im/server/neonxp.ru/
+- Мощный, быстрый и, главное, ненагруженный сервер!
+
+## Современные нативные клиенты:
+
+- Gajim для PC/Mac/Linux [Ссылка](https://gajim.org/download/)
+- Dino.im для PC/Mac/Linux [Ссылка](https://dino.im/#download)
+- Conversations для Android [Ссылка](https://f-droid.org/packages/eu.siacs.conversations/)
+- Another.IM для Android [Ссылка](https://f-droid.org/packages/im.narayana.another/)
+- Monal IM для iOS/Mac [Ссылка](https://monal-im.org/)
+- Siskin IM для iOS/Mac [Ссылка](https://siskin.im/)