From bfdd73d7324a4f66a16f55d4fb064b0ff08d40e9 Mon Sep 17 00:00:00 2001
From: Alexander Neonxp Kiryukhin
Date: Mon, 2 Feb 2026 00:35:54 +0300
Subject: =?UTF-8?q?=D0=91=D0=BE=D0=BB=D1=8C=D1=88=D0=B0=D1=8F=20=D1=87?=
=?UTF-8?q?=D0=B8=D1=81=D1=82=D0=BA=D0=B0=20=D0=B1=D0=BB=D0=BE=D0=B3=D0=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
content/pages/_index.md | 1 -
content/posts/2021-02-13-jsonnet.md | 92 -----
content/posts/2021-02-13-jsonnet/index.md | 94 +++++
content/posts/2021-02-13-jsonnet/jsonnet_logo.webp | Bin 0 -> 47006 bytes
...270\320\263\320\270\320\265\320\275\320\260.md" | 91 -----
.../index.md" | 91 +++++
...266\320\264\320\265\320\275\320\270\320\265.md" | 27 --
.../index.md" | 27 ++
content/posts/2022-05-31-golang-1.md | 44 ---
content/posts/2022-05-31-golang-1/index.md | 44 +++
content/posts/2023-01-12-gitrepo.md | 167 ---------
content/posts/2023-01-12-gitrepo/index.md | 166 +++++++++
content/posts/2023-05-26-gist.md | 19 -
content/posts/2023-05-26-gist/index.md | 18 +
content/posts/2023-07-24-tls.md | 85 -----
content/posts/2023-07-24-tls/index.md | 79 ++++
...265\321\200\320\265\320\265\320\267\320\264.md" | 28 --
.../index.md" | 28 ++
...03-\320\260\321\200\321\205\320\270\320\262.md" | 14 -
.../index.md" | 14 +
content/posts/2024-02-21-tls.md | 54 ---
content/posts/2024-02-21-tls/index.md | 54 +++
...75\321\213-\320\277\321\203\321\210\320\270.md" | 110 ------
.../index.md" | 110 ++++++
...-\320\272\320\275\320\270\320\263\320\270-1.md" | 21 --
.../index.md" | 21 ++
content/posts/2024-07-13-joplin.md | 43 ---
content/posts/2024-07-13-joplin/index.md | 45 +++
content/posts/2024-07-13-joplin/joplin.webp | Bin 0 -> 111506 bytes
content/posts/2024-07-21-bbs.md | 33 --
content/posts/2024-07-21-bbs/index.md | 33 ++
content/posts/2024-09-26-hugo-wordpress.md | 16 -
content/posts/2024-09-26-hugo-wordpress/index.md | 16 +
...200\321\203\320\275\320\265\321\202\320\260.md" | 64 ----
.../index.md" | 64 ++++
...\320\275\320\265\321\202\320\260_bash_org.webp" | Bin 0 -> 20774 bytes
...-\320\272\320\275\320\270\320\263\320\270-2.md" | 39 --
.../Rama16wiki.webp" | Bin 0 -> 44726 bytes
.../index.md" | 39 ++
content/posts/2024-11-15-hugo.md | 19 -
content/posts/2024-11-15-hugo/index.md | 19 +
content/posts/2024-11-17-obsidian.md | 240 -------------
content/posts/2024-11-17-obsidian/index.md | 240 +++++++++++++
content/posts/2024-11-17-obsidian/logo.webp | Bin 0 -> 9244 bytes
content/posts/2024-11-17-obsidian/publish.webp | Bin 0 -> 23110 bytes
content/posts/2024-11-17-obsidian/templater.webp | Bin 0 -> 17140 bytes
content/posts/2024-11-27-hyperlocality.md | 182 ----------
content/posts/2024-11-27-hyperlocality/90e.webp | Bin 0 -> 71910 bytes
.../posts/2024-11-27-hyperlocality/braindance.webp | Bin 0 -> 92740 bytes
content/posts/2024-11-27-hyperlocality/camp.webp | Bin 0 -> 115704 bytes
.../2024-11-27-hyperlocality/in-internet.webp | Bin 0 -> 136578 bytes
content/posts/2024-11-27-hyperlocality/index.md | 184 ++++++++++
content/posts/2024-11-29-hobbies.md | 44 ---
.../posts/2024-11-29-hobbies/hobbies_dozor.webp | Bin 0 -> 101246 bytes
content/posts/2024-11-29-hobbies/index.md | 44 +++
content/posts/2024-12-12-guessr.md | 130 -------
content/posts/2024-12-12-guessr/guessr_logo.webp | Bin 0 -> 112508 bytes
content/posts/2024-12-12-guessr/index.md | 134 +++++++
.../posts/2024-12-15-conditional-operator-go.md | 35 --
.../conditional-operator-go_ternary.webp | Bin 0 -> 7408 bytes
.../2024-12-15-conditional-operator-go/index.md | 35 ++
content/posts/2024-12-15-posse.md | 81 -----
content/posts/2024-12-15-posse/index.md | 81 +++++
content/posts/2024-12-15-posse/posse_posse.webp | Bin 0 -> 60800 bytes
content/posts/2024-12-17-infra.md | 120 -------
content/posts/2024-12-17-infra/index.md | 119 ++++++
content/posts/2024-12-17-infra/infra_cover.webp | Bin 0 -> 532556 bytes
content/posts/2024-12-30-irc.md | 75 ----
content/posts/2024-12-30-irc/index.md | 75 ++++
content/posts/2024-12-30-irc/irc_logo.webp | Bin 0 -> 10130 bytes
content/posts/2024-12-31-new-year.md | 50 ---
content/posts/2024-12-31-new-year/img/1.webp | Bin 0 -> 141164 bytes
content/posts/2024-12-31-new-year/img/2.webp | Bin 0 -> 212740 bytes
content/posts/2024-12-31-new-year/img/2025.webp | Bin 0 -> 163920 bytes
content/posts/2024-12-31-new-year/img/3.webp | Bin 0 -> 446502 bytes
content/posts/2024-12-31-new-year/img/4.webp | Bin 0 -> 146032 bytes
content/posts/2024-12-31-new-year/img/5.webp | Bin 0 -> 190524 bytes
content/posts/2024-12-31-new-year/index.md | 52 +++
content/posts/2025-04-05-tabs-or-spaces.md | 400 ---------------------
content/posts/2025-04-05-tabs-or-spaces/index.md | 398 ++++++++++++++++++++
content/posts/2025-05-19-nxpcms-2.md | 19 -
content/posts/2025-05-19-nxpcms-2/index.md | 19 +
content/posts/2025-05-19-nxpcms.md | 77 ----
content/posts/2025-05-19-nxpcms/index.md | 84 +++++
content/posts/2025-06-08-my-setup.md | 31 --
content/posts/2025-06-08-my-setup/index.md | 20 ++
content/posts/2025-08-02-meshtastic.md | 66 ----
content/posts/2025-08-02-meshtastic/index.md | 66 ++++
content/posts/2025-08-02-meshtastic/tbeam.jpg | Bin 0 -> 269445 bytes
content/posts/2025-08-02-meshtastic/tbeam.webp | Bin 0 -> 116662 bytes
content/posts/2025-08-05-lets-code-3d.md | 154 --------
content/posts/2025-08-05-lets-code-3d/1.jpg | Bin 0 -> 86020 bytes
content/posts/2025-08-05-lets-code-3d/2.jpg | Bin 0 -> 58451 bytes
content/posts/2025-08-05-lets-code-3d/3.png | Bin 0 -> 108360 bytes
content/posts/2025-08-05-lets-code-3d/4.jpg | Bin 0 -> 75461 bytes
content/posts/2025-08-05-lets-code-3d/index.md | 154 ++++++++
.../lets-code-3d_result.stl | Bin 0 -> 3684 bytes
.../lets-code-3d_source.scad | 66 ++++
content/posts/2025-08-09-makeup-organizer.md | 38 --
content/posts/2025-08-09-makeup-organizer/1.png | Bin 0 -> 180919 bytes
content/posts/2025-08-09-makeup-organizer/2.png | Bin 0 -> 354046 bytes
content/posts/2025-08-09-makeup-organizer/3.png | Bin 0 -> 115406 bytes
content/posts/2025-08-09-makeup-organizer/index.md | 38 ++
.../makeup-organizer_organizer.tar.zst | Bin 0 -> 660078 bytes
content/posts/2025-09-01-travel-1.md | 142 --------
content/posts/2025-09-01-travel-1/1.webp | Bin 0 -> 1307382 bytes
content/posts/2025-09-01-travel-1/10.webp | Bin 0 -> 1024096 bytes
content/posts/2025-09-01-travel-1/11.webp | Bin 0 -> 1031876 bytes
content/posts/2025-09-01-travel-1/12.webp | Bin 0 -> 373748 bytes
content/posts/2025-09-01-travel-1/13.webp | Bin 0 -> 574476 bytes
content/posts/2025-09-01-travel-1/14.webp | Bin 0 -> 385098 bytes
content/posts/2025-09-01-travel-1/15.webp | Bin 0 -> 381654 bytes
content/posts/2025-09-01-travel-1/16.webp | Bin 0 -> 2601414 bytes
content/posts/2025-09-01-travel-1/17.webp | Bin 0 -> 3254752 bytes
content/posts/2025-09-01-travel-1/18.webp | Bin 0 -> 1640240 bytes
content/posts/2025-09-01-travel-1/19.webp | Bin 0 -> 2578076 bytes
content/posts/2025-09-01-travel-1/2.webp | Bin 0 -> 1660606 bytes
content/posts/2025-09-01-travel-1/20.webp | Bin 0 -> 3858586 bytes
content/posts/2025-09-01-travel-1/21.webp | Bin 0 -> 4400828 bytes
content/posts/2025-09-01-travel-1/22.webp | Bin 0 -> 2109710 bytes
content/posts/2025-09-01-travel-1/23.webp | Bin 0 -> 988944 bytes
content/posts/2025-09-01-travel-1/3.webp | Bin 0 -> 5237948 bytes
content/posts/2025-09-01-travel-1/4.webp | Bin 0 -> 1403370 bytes
content/posts/2025-09-01-travel-1/5.webp | Bin 0 -> 1424414 bytes
content/posts/2025-09-01-travel-1/6.webp | Bin 0 -> 1129282 bytes
content/posts/2025-09-01-travel-1/7.webp | Bin 0 -> 1178630 bytes
content/posts/2025-09-01-travel-1/8.webp | Bin 0 -> 4411964 bytes
content/posts/2025-09-01-travel-1/9.webp | Bin 0 -> 755094 bytes
content/posts/2025-09-01-travel-1/index.md | 142 ++++++++
content/posts/2025-09-01-travel-1/preview_1.webp | Bin 0 -> 68140 bytes
content/posts/2025-09-01-travel-1/preview_10.webp | Bin 0 -> 119806 bytes
content/posts/2025-09-01-travel-1/preview_11.webp | Bin 0 -> 114776 bytes
content/posts/2025-09-01-travel-1/preview_12.webp | Bin 0 -> 27904 bytes
content/posts/2025-09-01-travel-1/preview_13.webp | Bin 0 -> 36594 bytes
content/posts/2025-09-01-travel-1/preview_14.webp | Bin 0 -> 29198 bytes
content/posts/2025-09-01-travel-1/preview_15.webp | Bin 0 -> 30840 bytes
content/posts/2025-09-01-travel-1/preview_16.webp | Bin 0 -> 83166 bytes
content/posts/2025-09-01-travel-1/preview_17.webp | Bin 0 -> 154656 bytes
content/posts/2025-09-01-travel-1/preview_18.webp | Bin 0 -> 99452 bytes
content/posts/2025-09-01-travel-1/preview_19.webp | Bin 0 -> 94816 bytes
content/posts/2025-09-01-travel-1/preview_2.webp | Bin 0 -> 49558 bytes
content/posts/2025-09-01-travel-1/preview_20.webp | Bin 0 -> 144248 bytes
content/posts/2025-09-01-travel-1/preview_21.webp | Bin 0 -> 179974 bytes
content/posts/2025-09-01-travel-1/preview_22.webp | Bin 0 -> 56148 bytes
content/posts/2025-09-01-travel-1/preview_23.webp | Bin 0 -> 64300 bytes
content/posts/2025-09-01-travel-1/preview_3.webp | Bin 0 -> 162906 bytes
content/posts/2025-09-01-travel-1/preview_4.webp | Bin 0 -> 45526 bytes
content/posts/2025-09-01-travel-1/preview_5.webp | Bin 0 -> 48660 bytes
content/posts/2025-09-01-travel-1/preview_6.webp | Bin 0 -> 52192 bytes
content/posts/2025-09-01-travel-1/preview_7.webp | Bin 0 -> 44236 bytes
content/posts/2025-09-01-travel-1/preview_8.webp | Bin 0 -> 110076 bytes
content/posts/2025-09-01-travel-1/preview_9.webp | Bin 0 -> 83176 bytes
content/posts/2025-09-01-travel-1/saologo.png | Bin 0 -> 20791 bytes
content/posts/2025-10-06-ai.md | 124 -------
content/posts/2025-10-06-ai/hype_curve.png | Bin 0 -> 130810 bytes
content/posts/2025-10-06-ai/index.md | 124 +++++++
content/posts/2025-10-11-blog.md | 32 --
content/posts/2025-10-11-blog/index.md | 32 ++
.../posts/2025-10-18-the-ghost-in-the-machine.md | 184 ----------
.../2025-10-18-the-ghost-in-the-machine/index.md | 184 ++++++++++
.../laughing-man.jpeg | Bin 0 -> 234679 bytes
content/posts/2025-11-03-blog-deploy.md | 46 ---
content/posts/2025-11-03-blog-deploy/index.md | 46 +++
content/posts/2025-11-03-my-setup.md | 21 --
content/posts/2025-11-03-my-setup/index.md | 31 ++
content/posts/2025-11-04-blog-deploy-2.md | 50 ---
content/posts/2025-11-04-blog-deploy-2/index.md | 50 +++
content/posts/2025-11-09-migration.md | 55 ---
content/posts/2025-11-09-migration/index.md | 55 +++
content/posts/2025-11-23-org.md | 253 -------------
content/posts/2025-11-23-org/index.md | 253 +++++++++++++
content/posts/2025-12-02-httpsocalypse.md | 31 --
content/posts/2025-12-02-httpsocalypse/index.md | 31 ++
content/posts/2025-12-21-sicktech.md | 228 ------------
content/posts/2025-12-21-sicktech/files/img1.jpg | Bin 0 -> 162511 bytes
content/posts/2025-12-21-sicktech/files/img2.jpg | Bin 0 -> 88801 bytes
content/posts/2025-12-21-sicktech/files/img3.png | Bin 0 -> 340974 bytes
.../posts/2025-12-21-sicktech/files/sicktech.png | Bin 0 -> 263578 bytes
content/posts/2025-12-21-sicktech/index.md | 228 ++++++++++++
content/posts/2025-12-23-comments.md | 12 -
content/posts/2025-12-23-comments/index.md | 12 +
content/posts/2025-12-24-email.md | 99 -----
content/posts/2025-12-24-email/index.md | 99 +++++
content/posts/2025-12-27-osm.md | 40 ---
content/posts/2025-12-27-osm/files/photo.jpg | Bin 0 -> 11353 bytes
content/posts/2025-12-27-osm/files/photo_1.jpg | Bin 0 -> 14146 bytes
content/posts/2025-12-27-osm/files/photo_10.jpg | Bin 0 -> 9230 bytes
content/posts/2025-12-27-osm/files/photo_11.jpg | Bin 0 -> 10581 bytes
content/posts/2025-12-27-osm/files/photo_12.jpg | Bin 0 -> 13124 bytes
content/posts/2025-12-27-osm/files/photo_13.jpg | Bin 0 -> 14557 bytes
content/posts/2025-12-27-osm/files/photo_14.jpg | Bin 0 -> 15019 bytes
content/posts/2025-12-27-osm/files/photo_2.jpg | Bin 0 -> 15041 bytes
content/posts/2025-12-27-osm/files/photo_3.jpg | Bin 0 -> 15339 bytes
content/posts/2025-12-27-osm/files/photo_4.jpg | Bin 0 -> 14214 bytes
content/posts/2025-12-27-osm/files/photo_5.jpg | Bin 0 -> 12279 bytes
content/posts/2025-12-27-osm/files/photo_6.jpg | Bin 0 -> 10936 bytes
content/posts/2025-12-27-osm/files/photo_7.jpg | Bin 0 -> 15840 bytes
content/posts/2025-12-27-osm/files/photo_8.jpg | Bin 0 -> 11695 bytes
content/posts/2025-12-27-osm/files/photo_9.jpg | Bin 0 -> 15837 bytes
content/posts/2025-12-27-osm/index.md | 40 +++
content/posts/2025-12-28-philharmonic-park.md | 32 --
.../files/photo_19_2025-12-28_21-35-40.jpg | Bin 0 -> 18056 bytes
.../files/photo_1_2025-12-28_21-35-40.jpg | Bin 0 -> 12003 bytes
.../files/photo_20_2025-12-28_21-35-40.jpg | Bin 0 -> 17032 bytes
.../files/photo_25_2025-12-28_21-35-40.jpg | Bin 0 -> 17446 bytes
.../files/photo_27_2025-12-28_21-35-40.jpg | Bin 0 -> 16794 bytes
.../files/photo_2_2025-12-28_21-35-40.jpg | Bin 0 -> 29912 bytes
.../files/photo_2_2025-12-28_21-35-40.png | Bin 0 -> 1966164 bytes
.../files/photo_30_2025-12-28_21-35-40.jpg | Bin 0 -> 21623 bytes
.../files/photo_31_2025-12-28_21-35-40.jpg | Bin 0 -> 10522 bytes
.../files/photo_32_2025-12-28_21-35-40.jpg | Bin 0 -> 14036 bytes
.../files/photo_32_2025-12-28_21-35-40.png | Bin 0 -> 1423681 bytes
.../files/photo_3_2025-12-28_21-35-40.jpg | Bin 0 -> 25867 bytes
.../files/photo_3_2025-12-28_21-35-40.png | Bin 0 -> 1487705 bytes
.../files/photo_5_2025-12-28_21-35-40.jpg | Bin 0 -> 18394 bytes
.../files/photo_9_2025-12-28_21-35-40.jpg | Bin 0 -> 15546 bytes
.../posts/2025-12-28-philharmonic-park/index.md | 32 ++
content/posts/2025-12-29-newyear-excel.md | 22 --
.../posts/2025-12-29-newyear-excel/files/cover.png | Bin 0 -> 46582 bytes
.../2025-12-29-newyear-excel/files/cover1.png | Bin 0 -> 14651 bytes
.../2025-12-29-newyear-excel/files/new_year.ods | Bin 0 -> 28669 bytes
.../2025-12-29-newyear-excel/files/new_year.xlsx | Bin 0 -> 7859 bytes
content/posts/2025-12-29-newyear-excel/index.md | 22 ++
content/posts/2025-12-31-new-year.md | 28 --
content/posts/2025-12-31-new-year/index.md | 28 ++
content/posts/2025-12-31-qchat.md | 46 ---
content/posts/2025-12-31-qchat/index.md | 45 +++
content/posts/2026-02-01-grouper/grouper.png | Bin 0 -> 234092 bytes
content/posts/2026-02-01-grouper/index.md | 44 +++
content/posts/files/2021-02-13-jsonnet_logo.webp | Bin 47006 -> 0 bytes
content/posts/files/2024-07-13-joplin_joplin.webp | Bin 111506 -> 0 bytes
...\320\275\320\265\321\202\320\260_bash_org.webp" | Bin 20774 -> 0 bytes
...\275\320\270\320\263\320\270-2_Rama16wiki.webp" | Bin 44726 -> 0 bytes
.../posts/files/2024-11-17-obsidian_img/logo.webp | Bin 9244 -> 0 bytes
.../files/2024-11-17-obsidian_img/publish.webp | Bin 23110 -> 0 bytes
.../files/2024-11-17-obsidian_img/templater.webp | Bin 17140 -> 0 bytes
.../files/2024-11-27-hyperlocality_img/90e.webp | Bin 71910 -> 0 bytes
.../2024-11-27-hyperlocality_img/braindance.webp | Bin 92740 -> 0 bytes
.../files/2024-11-27-hyperlocality_img/camp.webp | Bin 115704 -> 0 bytes
.../2024-11-27-hyperlocality_img/in-internet.webp | Bin 136578 -> 0 bytes
content/posts/files/2024-11-29-hobbies_dozor.webp | Bin 101246 -> 0 bytes
content/posts/files/2024-12-12-guessr_logo.webp | Bin 112508 -> 0 bytes
...2024-12-15-conditional-operator-go_ternary.webp | Bin 7408 -> 0 bytes
content/posts/files/2024-12-15-posse_posse.webp | Bin 60800 -> 0 bytes
content/posts/files/2024-12-17-infra_cover.webp | Bin 532556 -> 0 bytes
content/posts/files/2024-12-30-irc_logo.webp | Bin 10130 -> 0 bytes
content/posts/files/2024-12-31-new-year_img/1.webp | Bin 141164 -> 0 bytes
content/posts/files/2024-12-31-new-year_img/2.webp | Bin 212740 -> 0 bytes
.../posts/files/2024-12-31-new-year_img/2025.webp | Bin 163920 -> 0 bytes
content/posts/files/2024-12-31-new-year_img/3.webp | Bin 446502 -> 0 bytes
content/posts/files/2024-12-31-new-year_img/4.webp | Bin 146032 -> 0 bytes
content/posts/files/2024-12-31-new-year_img/5.webp | Bin 190524 -> 0 bytes
content/posts/files/2025-12-21-img1.jpg | Bin 162511 -> 0 bytes
content/posts/files/2025-12-21-img2.jpg | Bin 88801 -> 0 bytes
content/posts/files/2025-12-21-img3.png | Bin 340974 -> 0 bytes
content/posts/files/2025-12-21-sicktech.png | Bin 263578 -> 0 bytes
content/posts/files/2025-12-27-osm_img/photo.jpg | Bin 227501 -> 0 bytes
content/posts/files/2025-12-27-osm_img/photo_1.jpg | Bin 221795 -> 0 bytes
.../posts/files/2025-12-27-osm_img/photo_10.jpg | Bin 127547 -> 0 bytes
.../posts/files/2025-12-27-osm_img/photo_11.jpg | Bin 151264 -> 0 bytes
.../posts/files/2025-12-27-osm_img/photo_12.jpg | Bin 121963 -> 0 bytes
.../posts/files/2025-12-27-osm_img/photo_13.jpg | Bin 126052 -> 0 bytes
.../posts/files/2025-12-27-osm_img/photo_14.jpg | Bin 225031 -> 0 bytes
content/posts/files/2025-12-27-osm_img/photo_2.jpg | Bin 226528 -> 0 bytes
content/posts/files/2025-12-27-osm_img/photo_3.jpg | Bin 234383 -> 0 bytes
content/posts/files/2025-12-27-osm_img/photo_4.jpg | Bin 214772 -> 0 bytes
content/posts/files/2025-12-27-osm_img/photo_5.jpg | Bin 179943 -> 0 bytes
content/posts/files/2025-12-27-osm_img/photo_6.jpg | Bin 168080 -> 0 bytes
content/posts/files/2025-12-27-osm_img/photo_7.jpg | Bin 161387 -> 0 bytes
content/posts/files/2025-12-27-osm_img/photo_8.jpg | Bin 127482 -> 0 bytes
content/posts/files/2025-12-27-osm_img/photo_9.jpg | Bin 213571 -> 0 bytes
.../files/2025-12-27-osm_img/thumbs/photo.jpg | Bin 11353 -> 0 bytes
.../files/2025-12-27-osm_img/thumbs/photo_1.jpg | Bin 14146 -> 0 bytes
.../files/2025-12-27-osm_img/thumbs/photo_10.jpg | Bin 9230 -> 0 bytes
.../files/2025-12-27-osm_img/thumbs/photo_11.jpg | Bin 10581 -> 0 bytes
.../files/2025-12-27-osm_img/thumbs/photo_12.jpg | Bin 13124 -> 0 bytes
.../files/2025-12-27-osm_img/thumbs/photo_13.jpg | Bin 14557 -> 0 bytes
.../files/2025-12-27-osm_img/thumbs/photo_14.jpg | Bin 15019 -> 0 bytes
.../files/2025-12-27-osm_img/thumbs/photo_2.jpg | Bin 15041 -> 0 bytes
.../files/2025-12-27-osm_img/thumbs/photo_3.jpg | Bin 15339 -> 0 bytes
.../files/2025-12-27-osm_img/thumbs/photo_4.jpg | Bin 14214 -> 0 bytes
.../files/2025-12-27-osm_img/thumbs/photo_5.jpg | Bin 12279 -> 0 bytes
.../files/2025-12-27-osm_img/thumbs/photo_6.jpg | Bin 10936 -> 0 bytes
.../files/2025-12-27-osm_img/thumbs/photo_7.jpg | Bin 15840 -> 0 bytes
.../files/2025-12-27-osm_img/thumbs/photo_8.jpg | Bin 11695 -> 0 bytes
.../files/2025-12-27-osm_img/thumbs/photo_9.jpg | Bin 15837 -> 0 bytes
.../photo_19_2025-12-28_21-35-40.jpg | Bin 307509 -> 0 bytes
.../photo_1_2025-12-28_21-35-40.jpg | Bin 284188 -> 0 bytes
.../photo_20_2025-12-28_21-35-40.jpg | Bin 253734 -> 0 bytes
.../photo_25_2025-12-28_21-35-40.jpg | Bin 242625 -> 0 bytes
.../photo_27_2025-12-28_21-35-40.jpg | Bin 331494 -> 0 bytes
.../photo_2_2025-12-28_21-35-40.png | Bin 1966164 -> 0 bytes
.../photo_30_2025-12-28_21-35-40.jpg | Bin 352290 -> 0 bytes
.../photo_31_2025-12-28_21-35-40.jpg | Bin 216175 -> 0 bytes
.../photo_32_2025-12-28_21-35-40.png | Bin 1423681 -> 0 bytes
.../photo_3_2025-12-28_21-35-40.png | Bin 1487705 -> 0 bytes
.../photo_5_2025-12-28_21-35-40.jpg | Bin 294826 -> 0 bytes
.../photo_9_2025-12-28_21-35-40.jpg | Bin 183104 -> 0 bytes
.../thumbs/photo_19_2025-12-28_21-35-40.jpg | Bin 18056 -> 0 bytes
.../thumbs/photo_1_2025-12-28_21-35-40.jpg | Bin 12003 -> 0 bytes
.../thumbs/photo_20_2025-12-28_21-35-40.jpg | Bin 17032 -> 0 bytes
.../thumbs/photo_25_2025-12-28_21-35-40.jpg | Bin 17446 -> 0 bytes
.../thumbs/photo_27_2025-12-28_21-35-40.jpg | Bin 16794 -> 0 bytes
.../thumbs/photo_2_2025-12-28_21-35-40.jpg | Bin 29912 -> 0 bytes
.../thumbs/photo_30_2025-12-28_21-35-40.jpg | Bin 21623 -> 0 bytes
.../thumbs/photo_31_2025-12-28_21-35-40.jpg | Bin 10522 -> 0 bytes
.../thumbs/photo_32_2025-12-28_21-35-40.jpg | Bin 14036 -> 0 bytes
.../thumbs/photo_3_2025-12-28_21-35-40.jpg | Bin 25867 -> 0 bytes
.../thumbs/photo_5_2025-12-28_21-35-40.jpg | Bin 18394 -> 0 bytes
.../thumbs/photo_9_2025-12-28_21-35-40.jpg | Bin 15546 -> 0 bytes
.../files/2025-12-29-newyear-excel_img/cover.png | Bin 46582 -> 0 bytes
.../files/2025-12-29-newyear-excel_img/cover1.png | Bin 14651 -> 0 bytes
.../2025-12-29-newyear-excel_img/new_year.ods | Bin 28669 -> 0 bytes
.../2025-12-29-newyear-excel_img/new_year.xlsx | Bin 7859 -> 0 bytes
content/posts/files/2025-travel-1_img/1.webp | Bin 1307382 -> 0 bytes
content/posts/files/2025-travel-1_img/10.webp | Bin 1024096 -> 0 bytes
content/posts/files/2025-travel-1_img/11.webp | Bin 1031876 -> 0 bytes
content/posts/files/2025-travel-1_img/12.webp | Bin 373748 -> 0 bytes
content/posts/files/2025-travel-1_img/13.webp | Bin 574476 -> 0 bytes
content/posts/files/2025-travel-1_img/14.webp | Bin 385098 -> 0 bytes
content/posts/files/2025-travel-1_img/15.webp | Bin 381654 -> 0 bytes
content/posts/files/2025-travel-1_img/16.webp | Bin 2601414 -> 0 bytes
content/posts/files/2025-travel-1_img/17.webp | Bin 3254752 -> 0 bytes
content/posts/files/2025-travel-1_img/18.webp | Bin 1640240 -> 0 bytes
content/posts/files/2025-travel-1_img/19.webp | Bin 2578076 -> 0 bytes
content/posts/files/2025-travel-1_img/2.webp | Bin 1660606 -> 0 bytes
content/posts/files/2025-travel-1_img/20.webp | Bin 3858586 -> 0 bytes
content/posts/files/2025-travel-1_img/21.webp | Bin 4400828 -> 0 bytes
content/posts/files/2025-travel-1_img/22.webp | Bin 2109710 -> 0 bytes
content/posts/files/2025-travel-1_img/23.webp | Bin 988944 -> 0 bytes
content/posts/files/2025-travel-1_img/3.webp | Bin 5237948 -> 0 bytes
content/posts/files/2025-travel-1_img/4.webp | Bin 1403370 -> 0 bytes
content/posts/files/2025-travel-1_img/5.webp | Bin 1424414 -> 0 bytes
content/posts/files/2025-travel-1_img/6.webp | Bin 1129282 -> 0 bytes
content/posts/files/2025-travel-1_img/7.webp | Bin 1178630 -> 0 bytes
content/posts/files/2025-travel-1_img/8.webp | Bin 4411964 -> 0 bytes
content/posts/files/2025-travel-1_img/9.webp | Bin 755094 -> 0 bytes
.../posts/files/2025-travel-1_img/preview_1.webp | Bin 68140 -> 0 bytes
.../posts/files/2025-travel-1_img/preview_10.webp | Bin 119806 -> 0 bytes
.../posts/files/2025-travel-1_img/preview_11.webp | Bin 114776 -> 0 bytes
.../posts/files/2025-travel-1_img/preview_12.webp | Bin 27904 -> 0 bytes
.../posts/files/2025-travel-1_img/preview_13.webp | Bin 36594 -> 0 bytes
.../posts/files/2025-travel-1_img/preview_14.webp | Bin 29198 -> 0 bytes
.../posts/files/2025-travel-1_img/preview_15.webp | Bin 30840 -> 0 bytes
.../posts/files/2025-travel-1_img/preview_16.webp | Bin 83166 -> 0 bytes
.../posts/files/2025-travel-1_img/preview_17.webp | Bin 154656 -> 0 bytes
.../posts/files/2025-travel-1_img/preview_18.webp | Bin 99452 -> 0 bytes
.../posts/files/2025-travel-1_img/preview_19.webp | Bin 94816 -> 0 bytes
.../posts/files/2025-travel-1_img/preview_2.webp | Bin 49558 -> 0 bytes
.../posts/files/2025-travel-1_img/preview_20.webp | Bin 144248 -> 0 bytes
.../posts/files/2025-travel-1_img/preview_21.webp | Bin 179974 -> 0 bytes
.../posts/files/2025-travel-1_img/preview_22.webp | Bin 56148 -> 0 bytes
.../posts/files/2025-travel-1_img/preview_23.webp | Bin 64300 -> 0 bytes
.../posts/files/2025-travel-1_img/preview_3.webp | Bin 162906 -> 0 bytes
.../posts/files/2025-travel-1_img/preview_4.webp | Bin 45526 -> 0 bytes
.../posts/files/2025-travel-1_img/preview_5.webp | Bin 48660 -> 0 bytes
.../posts/files/2025-travel-1_img/preview_6.webp | Bin 52192 -> 0 bytes
.../posts/files/2025-travel-1_img/preview_7.webp | Bin 44236 -> 0 bytes
.../posts/files/2025-travel-1_img/preview_8.webp | Bin 110076 -> 0 bytes
.../posts/files/2025-travel-1_img/preview_9.webp | Bin 83176 -> 0 bytes
content/posts/files/2025-travel-1_img/saologo.png | Bin 20791 -> 0 bytes
content/posts/files/hype_curve.png | Bin 130810 -> 0 bytes
content/posts/files/laughing-man.jpeg | Bin 234679 -> 0 bytes
content/posts/files/lets-code-3d_img/1.jpg | Bin 86020 -> 0 bytes
content/posts/files/lets-code-3d_img/2.jpg | Bin 58451 -> 0 bytes
content/posts/files/lets-code-3d_img/3.png | Bin 108360 -> 0 bytes
content/posts/files/lets-code-3d_img/4.jpg | Bin 75461 -> 0 bytes
content/posts/files/lets-code-3d_result.stl | Bin 3684 -> 0 bytes
content/posts/files/lets-code-3d_source.scad | 66 ----
content/posts/files/makeup-organizer_img/1.png | Bin 180919 -> 0 bytes
content/posts/files/makeup-organizer_img/2.png | Bin 354046 -> 0 bytes
content/posts/files/makeup-organizer_img/3.png | Bin 115406 -> 0 bytes
.../posts/files/makeup-organizer_organizer.tar.zst | Bin 660078 -> 0 bytes
content/posts/files/meshtastic_img/tbeam.jpg | Bin 269445 -> 0 bytes
content/posts/files/meshtastic_img/tbeam.webp | Bin 116662 -> 0 bytes
content/projects/games/index.md | 20 +-
content/projects/grouper/index.md | 40 +++
content/projects/qchat.md | 89 -----
content/projects/qchat/index.md | 91 +++++
hugo.yaml | 8 +
themes/neonxp/layouts/page.html | 2 +-
themes/neonxp/layouts/section.html | 2 +-
382 files changed, 4421 insertions(+), 4320 deletions(-)
delete mode 100644 content/posts/2021-02-13-jsonnet.md
create mode 100644 content/posts/2021-02-13-jsonnet/index.md
create mode 100644 content/posts/2021-02-13-jsonnet/jsonnet_logo.webp
delete mode 100644 "content/posts/2021-05-13-\321\206\320\270\321\204\321\200\320\276\320\262\320\260\321\217-\320\263\320\270\320\263\320\270\320\265\320\275\320\260.md"
create mode 100644 "content/posts/2021-05-13-\321\206\320\270\321\204\321\200\320\276\320\262\320\260\321\217-\320\263\320\270\320\263\320\270\320\265\320\275\320\260/index.md"
delete mode 100644 "content/posts/2022-05-30-\320\262\320\276\320\267\321\200\320\276\320\266\320\264\320\265\320\275\320\270\320\265.md"
create mode 100644 "content/posts/2022-05-30-\320\262\320\276\320\267\321\200\320\276\320\266\320\264\320\265\320\275\320\270\320\265/index.md"
delete mode 100644 content/posts/2022-05-31-golang-1.md
create mode 100644 content/posts/2022-05-31-golang-1/index.md
delete mode 100644 content/posts/2023-01-12-gitrepo.md
create mode 100644 content/posts/2023-01-12-gitrepo/index.md
delete mode 100644 content/posts/2023-05-26-gist.md
create mode 100644 content/posts/2023-05-26-gist/index.md
delete mode 100644 content/posts/2023-07-24-tls.md
create mode 100644 content/posts/2023-07-24-tls/index.md
delete mode 100644 "content/posts/2023-12-29-\320\277\320\265\321\200\320\265\320\265\320\267\320\264.md"
create mode 100644 "content/posts/2023-12-29-\320\277\320\265\321\200\320\265\320\265\320\267\320\264/index.md"
delete mode 100644 "content/posts/2024-01-03-\320\260\321\200\321\205\320\270\320\262.md"
create mode 100644 "content/posts/2024-01-03-\320\260\321\200\321\205\320\270\320\262/index.md"
delete mode 100644 content/posts/2024-02-21-tls.md
create mode 100644 content/posts/2024-02-21-tls/index.md
delete mode 100644 "content/posts/2024-06-01-\320\262\320\260\320\274-\320\275\320\265-\320\275\321\203\320\266\320\275\321\213-\320\277\321\203\321\210\320\270.md"
create mode 100644 "content/posts/2024-06-01-\320\262\320\260\320\274-\320\275\320\265-\320\275\321\203\320\266\320\275\321\213-\320\277\321\203\321\210\320\270/index.md"
delete mode 100644 "content/posts/2024-06-02-\320\272\320\275\320\270\320\263\320\270-1.md"
create mode 100644 "content/posts/2024-06-02-\320\272\320\275\320\270\320\263\320\270-1/index.md"
delete mode 100644 content/posts/2024-07-13-joplin.md
create mode 100644 content/posts/2024-07-13-joplin/index.md
create mode 100644 content/posts/2024-07-13-joplin/joplin.webp
delete mode 100644 content/posts/2024-07-21-bbs.md
create mode 100644 content/posts/2024-07-21-bbs/index.md
delete mode 100644 content/posts/2024-09-26-hugo-wordpress.md
create mode 100644 content/posts/2024-09-26-hugo-wordpress/index.md
delete mode 100644 "content/posts/2024-10-06-\321\206\320\270\321\202\320\260\321\202\320\275\320\270\320\272-\321\200\321\203\320\275\320\265\321\202\320\260.md"
create mode 100644 "content/posts/2024-10-06-\321\206\320\270\321\202\320\260\321\202\320\275\320\270\320\272-\321\200\321\203\320\275\320\265\321\202\320\260/index.md"
create mode 100644 "content/posts/2024-10-06-\321\206\320\270\321\202\320\260\321\202\320\275\320\270\320\272-\321\200\321\203\320\275\320\265\321\202\320\260/\321\206\320\270\321\202\320\260\321\202\320\275\320\270\320\272-\321\200\321\203\320\275\320\265\321\202\320\260_bash_org.webp"
delete mode 100644 "content/posts/2024-10-17-\320\272\320\275\320\270\320\263\320\270-2.md"
create mode 100644 "content/posts/2024-10-17-\320\272\320\275\320\270\320\263\320\270-2/Rama16wiki.webp"
create mode 100644 "content/posts/2024-10-17-\320\272\320\275\320\270\320\263\320\270-2/index.md"
delete mode 100644 content/posts/2024-11-15-hugo.md
create mode 100644 content/posts/2024-11-15-hugo/index.md
delete mode 100644 content/posts/2024-11-17-obsidian.md
create mode 100644 content/posts/2024-11-17-obsidian/index.md
create mode 100644 content/posts/2024-11-17-obsidian/logo.webp
create mode 100644 content/posts/2024-11-17-obsidian/publish.webp
create mode 100644 content/posts/2024-11-17-obsidian/templater.webp
delete mode 100644 content/posts/2024-11-27-hyperlocality.md
create mode 100644 content/posts/2024-11-27-hyperlocality/90e.webp
create mode 100644 content/posts/2024-11-27-hyperlocality/braindance.webp
create mode 100644 content/posts/2024-11-27-hyperlocality/camp.webp
create mode 100644 content/posts/2024-11-27-hyperlocality/in-internet.webp
create mode 100644 content/posts/2024-11-27-hyperlocality/index.md
delete mode 100644 content/posts/2024-11-29-hobbies.md
create mode 100644 content/posts/2024-11-29-hobbies/hobbies_dozor.webp
create mode 100644 content/posts/2024-11-29-hobbies/index.md
delete mode 100644 content/posts/2024-12-12-guessr.md
create mode 100644 content/posts/2024-12-12-guessr/guessr_logo.webp
create mode 100644 content/posts/2024-12-12-guessr/index.md
delete mode 100644 content/posts/2024-12-15-conditional-operator-go.md
create mode 100644 content/posts/2024-12-15-conditional-operator-go/conditional-operator-go_ternary.webp
create mode 100644 content/posts/2024-12-15-conditional-operator-go/index.md
delete mode 100644 content/posts/2024-12-15-posse.md
create mode 100644 content/posts/2024-12-15-posse/index.md
create mode 100644 content/posts/2024-12-15-posse/posse_posse.webp
delete mode 100644 content/posts/2024-12-17-infra.md
create mode 100644 content/posts/2024-12-17-infra/index.md
create mode 100644 content/posts/2024-12-17-infra/infra_cover.webp
delete mode 100644 content/posts/2024-12-30-irc.md
create mode 100644 content/posts/2024-12-30-irc/index.md
create mode 100644 content/posts/2024-12-30-irc/irc_logo.webp
delete mode 100644 content/posts/2024-12-31-new-year.md
create mode 100644 content/posts/2024-12-31-new-year/img/1.webp
create mode 100644 content/posts/2024-12-31-new-year/img/2.webp
create mode 100644 content/posts/2024-12-31-new-year/img/2025.webp
create mode 100644 content/posts/2024-12-31-new-year/img/3.webp
create mode 100644 content/posts/2024-12-31-new-year/img/4.webp
create mode 100644 content/posts/2024-12-31-new-year/img/5.webp
create mode 100644 content/posts/2024-12-31-new-year/index.md
delete mode 100644 content/posts/2025-04-05-tabs-or-spaces.md
create mode 100644 content/posts/2025-04-05-tabs-or-spaces/index.md
delete mode 100644 content/posts/2025-05-19-nxpcms-2.md
create mode 100644 content/posts/2025-05-19-nxpcms-2/index.md
delete mode 100644 content/posts/2025-05-19-nxpcms.md
create mode 100644 content/posts/2025-05-19-nxpcms/index.md
delete mode 100644 content/posts/2025-06-08-my-setup.md
create mode 100644 content/posts/2025-06-08-my-setup/index.md
delete mode 100644 content/posts/2025-08-02-meshtastic.md
create mode 100644 content/posts/2025-08-02-meshtastic/index.md
create mode 100644 content/posts/2025-08-02-meshtastic/tbeam.jpg
create mode 100644 content/posts/2025-08-02-meshtastic/tbeam.webp
delete mode 100644 content/posts/2025-08-05-lets-code-3d.md
create mode 100644 content/posts/2025-08-05-lets-code-3d/1.jpg
create mode 100644 content/posts/2025-08-05-lets-code-3d/2.jpg
create mode 100644 content/posts/2025-08-05-lets-code-3d/3.png
create mode 100644 content/posts/2025-08-05-lets-code-3d/4.jpg
create mode 100644 content/posts/2025-08-05-lets-code-3d/index.md
create mode 100644 content/posts/2025-08-05-lets-code-3d/lets-code-3d_result.stl
create mode 100644 content/posts/2025-08-05-lets-code-3d/lets-code-3d_source.scad
delete mode 100644 content/posts/2025-08-09-makeup-organizer.md
create mode 100644 content/posts/2025-08-09-makeup-organizer/1.png
create mode 100644 content/posts/2025-08-09-makeup-organizer/2.png
create mode 100644 content/posts/2025-08-09-makeup-organizer/3.png
create mode 100644 content/posts/2025-08-09-makeup-organizer/index.md
create mode 100644 content/posts/2025-08-09-makeup-organizer/makeup-organizer_organizer.tar.zst
delete mode 100644 content/posts/2025-09-01-travel-1.md
create mode 100644 content/posts/2025-09-01-travel-1/1.webp
create mode 100644 content/posts/2025-09-01-travel-1/10.webp
create mode 100644 content/posts/2025-09-01-travel-1/11.webp
create mode 100644 content/posts/2025-09-01-travel-1/12.webp
create mode 100644 content/posts/2025-09-01-travel-1/13.webp
create mode 100644 content/posts/2025-09-01-travel-1/14.webp
create mode 100644 content/posts/2025-09-01-travel-1/15.webp
create mode 100644 content/posts/2025-09-01-travel-1/16.webp
create mode 100644 content/posts/2025-09-01-travel-1/17.webp
create mode 100644 content/posts/2025-09-01-travel-1/18.webp
create mode 100644 content/posts/2025-09-01-travel-1/19.webp
create mode 100644 content/posts/2025-09-01-travel-1/2.webp
create mode 100644 content/posts/2025-09-01-travel-1/20.webp
create mode 100644 content/posts/2025-09-01-travel-1/21.webp
create mode 100644 content/posts/2025-09-01-travel-1/22.webp
create mode 100644 content/posts/2025-09-01-travel-1/23.webp
create mode 100644 content/posts/2025-09-01-travel-1/3.webp
create mode 100644 content/posts/2025-09-01-travel-1/4.webp
create mode 100644 content/posts/2025-09-01-travel-1/5.webp
create mode 100644 content/posts/2025-09-01-travel-1/6.webp
create mode 100644 content/posts/2025-09-01-travel-1/7.webp
create mode 100644 content/posts/2025-09-01-travel-1/8.webp
create mode 100644 content/posts/2025-09-01-travel-1/9.webp
create mode 100644 content/posts/2025-09-01-travel-1/index.md
create mode 100644 content/posts/2025-09-01-travel-1/preview_1.webp
create mode 100644 content/posts/2025-09-01-travel-1/preview_10.webp
create mode 100644 content/posts/2025-09-01-travel-1/preview_11.webp
create mode 100644 content/posts/2025-09-01-travel-1/preview_12.webp
create mode 100644 content/posts/2025-09-01-travel-1/preview_13.webp
create mode 100644 content/posts/2025-09-01-travel-1/preview_14.webp
create mode 100644 content/posts/2025-09-01-travel-1/preview_15.webp
create mode 100644 content/posts/2025-09-01-travel-1/preview_16.webp
create mode 100644 content/posts/2025-09-01-travel-1/preview_17.webp
create mode 100644 content/posts/2025-09-01-travel-1/preview_18.webp
create mode 100644 content/posts/2025-09-01-travel-1/preview_19.webp
create mode 100644 content/posts/2025-09-01-travel-1/preview_2.webp
create mode 100644 content/posts/2025-09-01-travel-1/preview_20.webp
create mode 100644 content/posts/2025-09-01-travel-1/preview_21.webp
create mode 100644 content/posts/2025-09-01-travel-1/preview_22.webp
create mode 100644 content/posts/2025-09-01-travel-1/preview_23.webp
create mode 100644 content/posts/2025-09-01-travel-1/preview_3.webp
create mode 100644 content/posts/2025-09-01-travel-1/preview_4.webp
create mode 100644 content/posts/2025-09-01-travel-1/preview_5.webp
create mode 100644 content/posts/2025-09-01-travel-1/preview_6.webp
create mode 100644 content/posts/2025-09-01-travel-1/preview_7.webp
create mode 100644 content/posts/2025-09-01-travel-1/preview_8.webp
create mode 100644 content/posts/2025-09-01-travel-1/preview_9.webp
create mode 100644 content/posts/2025-09-01-travel-1/saologo.png
delete mode 100644 content/posts/2025-10-06-ai.md
create mode 100644 content/posts/2025-10-06-ai/hype_curve.png
create mode 100644 content/posts/2025-10-06-ai/index.md
delete mode 100644 content/posts/2025-10-11-blog.md
create mode 100644 content/posts/2025-10-11-blog/index.md
delete mode 100644 content/posts/2025-10-18-the-ghost-in-the-machine.md
create mode 100644 content/posts/2025-10-18-the-ghost-in-the-machine/index.md
create mode 100644 content/posts/2025-10-18-the-ghost-in-the-machine/laughing-man.jpeg
delete mode 100644 content/posts/2025-11-03-blog-deploy.md
create mode 100644 content/posts/2025-11-03-blog-deploy/index.md
delete mode 100644 content/posts/2025-11-03-my-setup.md
create mode 100644 content/posts/2025-11-03-my-setup/index.md
delete mode 100644 content/posts/2025-11-04-blog-deploy-2.md
create mode 100644 content/posts/2025-11-04-blog-deploy-2/index.md
delete mode 100644 content/posts/2025-11-09-migration.md
create mode 100644 content/posts/2025-11-09-migration/index.md
delete mode 100644 content/posts/2025-11-23-org.md
create mode 100644 content/posts/2025-11-23-org/index.md
delete mode 100644 content/posts/2025-12-02-httpsocalypse.md
create mode 100644 content/posts/2025-12-02-httpsocalypse/index.md
delete mode 100644 content/posts/2025-12-21-sicktech.md
create mode 100644 content/posts/2025-12-21-sicktech/files/img1.jpg
create mode 100644 content/posts/2025-12-21-sicktech/files/img2.jpg
create mode 100644 content/posts/2025-12-21-sicktech/files/img3.png
create mode 100644 content/posts/2025-12-21-sicktech/files/sicktech.png
create mode 100644 content/posts/2025-12-21-sicktech/index.md
delete mode 100644 content/posts/2025-12-23-comments.md
create mode 100644 content/posts/2025-12-23-comments/index.md
delete mode 100644 content/posts/2025-12-24-email.md
create mode 100644 content/posts/2025-12-24-email/index.md
delete mode 100644 content/posts/2025-12-27-osm.md
create mode 100644 content/posts/2025-12-27-osm/files/photo.jpg
create mode 100644 content/posts/2025-12-27-osm/files/photo_1.jpg
create mode 100644 content/posts/2025-12-27-osm/files/photo_10.jpg
create mode 100644 content/posts/2025-12-27-osm/files/photo_11.jpg
create mode 100644 content/posts/2025-12-27-osm/files/photo_12.jpg
create mode 100644 content/posts/2025-12-27-osm/files/photo_13.jpg
create mode 100644 content/posts/2025-12-27-osm/files/photo_14.jpg
create mode 100644 content/posts/2025-12-27-osm/files/photo_2.jpg
create mode 100644 content/posts/2025-12-27-osm/files/photo_3.jpg
create mode 100644 content/posts/2025-12-27-osm/files/photo_4.jpg
create mode 100644 content/posts/2025-12-27-osm/files/photo_5.jpg
create mode 100644 content/posts/2025-12-27-osm/files/photo_6.jpg
create mode 100644 content/posts/2025-12-27-osm/files/photo_7.jpg
create mode 100644 content/posts/2025-12-27-osm/files/photo_8.jpg
create mode 100644 content/posts/2025-12-27-osm/files/photo_9.jpg
create mode 100644 content/posts/2025-12-27-osm/index.md
delete mode 100644 content/posts/2025-12-28-philharmonic-park.md
create mode 100644 content/posts/2025-12-28-philharmonic-park/files/photo_19_2025-12-28_21-35-40.jpg
create mode 100644 content/posts/2025-12-28-philharmonic-park/files/photo_1_2025-12-28_21-35-40.jpg
create mode 100644 content/posts/2025-12-28-philharmonic-park/files/photo_20_2025-12-28_21-35-40.jpg
create mode 100644 content/posts/2025-12-28-philharmonic-park/files/photo_25_2025-12-28_21-35-40.jpg
create mode 100644 content/posts/2025-12-28-philharmonic-park/files/photo_27_2025-12-28_21-35-40.jpg
create mode 100644 content/posts/2025-12-28-philharmonic-park/files/photo_2_2025-12-28_21-35-40.jpg
create mode 100644 content/posts/2025-12-28-philharmonic-park/files/photo_2_2025-12-28_21-35-40.png
create mode 100644 content/posts/2025-12-28-philharmonic-park/files/photo_30_2025-12-28_21-35-40.jpg
create mode 100644 content/posts/2025-12-28-philharmonic-park/files/photo_31_2025-12-28_21-35-40.jpg
create mode 100644 content/posts/2025-12-28-philharmonic-park/files/photo_32_2025-12-28_21-35-40.jpg
create mode 100644 content/posts/2025-12-28-philharmonic-park/files/photo_32_2025-12-28_21-35-40.png
create mode 100644 content/posts/2025-12-28-philharmonic-park/files/photo_3_2025-12-28_21-35-40.jpg
create mode 100644 content/posts/2025-12-28-philharmonic-park/files/photo_3_2025-12-28_21-35-40.png
create mode 100644 content/posts/2025-12-28-philharmonic-park/files/photo_5_2025-12-28_21-35-40.jpg
create mode 100644 content/posts/2025-12-28-philharmonic-park/files/photo_9_2025-12-28_21-35-40.jpg
create mode 100644 content/posts/2025-12-28-philharmonic-park/index.md
delete mode 100644 content/posts/2025-12-29-newyear-excel.md
create mode 100644 content/posts/2025-12-29-newyear-excel/files/cover.png
create mode 100644 content/posts/2025-12-29-newyear-excel/files/cover1.png
create mode 100644 content/posts/2025-12-29-newyear-excel/files/new_year.ods
create mode 100644 content/posts/2025-12-29-newyear-excel/files/new_year.xlsx
create mode 100644 content/posts/2025-12-29-newyear-excel/index.md
delete mode 100644 content/posts/2025-12-31-new-year.md
create mode 100644 content/posts/2025-12-31-new-year/index.md
delete mode 100644 content/posts/2025-12-31-qchat.md
create mode 100644 content/posts/2025-12-31-qchat/index.md
create mode 100644 content/posts/2026-02-01-grouper/grouper.png
create mode 100644 content/posts/2026-02-01-grouper/index.md
delete mode 100644 content/posts/files/2021-02-13-jsonnet_logo.webp
delete mode 100644 content/posts/files/2024-07-13-joplin_joplin.webp
delete mode 100644 "content/posts/files/2024-10-06-\321\206\320\270\321\202\320\260\321\202\320\275\320\270\320\272-\321\200\321\203\320\275\320\265\321\202\320\260_bash_org.webp"
delete mode 100644 "content/posts/files/2024-10-17-\320\272\320\275\320\270\320\263\320\270-2_Rama16wiki.webp"
delete mode 100644 content/posts/files/2024-11-17-obsidian_img/logo.webp
delete mode 100644 content/posts/files/2024-11-17-obsidian_img/publish.webp
delete mode 100644 content/posts/files/2024-11-17-obsidian_img/templater.webp
delete mode 100644 content/posts/files/2024-11-27-hyperlocality_img/90e.webp
delete mode 100644 content/posts/files/2024-11-27-hyperlocality_img/braindance.webp
delete mode 100644 content/posts/files/2024-11-27-hyperlocality_img/camp.webp
delete mode 100644 content/posts/files/2024-11-27-hyperlocality_img/in-internet.webp
delete mode 100644 content/posts/files/2024-11-29-hobbies_dozor.webp
delete mode 100644 content/posts/files/2024-12-12-guessr_logo.webp
delete mode 100644 content/posts/files/2024-12-15-conditional-operator-go_ternary.webp
delete mode 100644 content/posts/files/2024-12-15-posse_posse.webp
delete mode 100644 content/posts/files/2024-12-17-infra_cover.webp
delete mode 100644 content/posts/files/2024-12-30-irc_logo.webp
delete mode 100644 content/posts/files/2024-12-31-new-year_img/1.webp
delete mode 100644 content/posts/files/2024-12-31-new-year_img/2.webp
delete mode 100644 content/posts/files/2024-12-31-new-year_img/2025.webp
delete mode 100644 content/posts/files/2024-12-31-new-year_img/3.webp
delete mode 100644 content/posts/files/2024-12-31-new-year_img/4.webp
delete mode 100644 content/posts/files/2024-12-31-new-year_img/5.webp
delete mode 100644 content/posts/files/2025-12-21-img1.jpg
delete mode 100644 content/posts/files/2025-12-21-img2.jpg
delete mode 100644 content/posts/files/2025-12-21-img3.png
delete mode 100644 content/posts/files/2025-12-21-sicktech.png
delete mode 100644 content/posts/files/2025-12-27-osm_img/photo.jpg
delete mode 100644 content/posts/files/2025-12-27-osm_img/photo_1.jpg
delete mode 100644 content/posts/files/2025-12-27-osm_img/photo_10.jpg
delete mode 100644 content/posts/files/2025-12-27-osm_img/photo_11.jpg
delete mode 100644 content/posts/files/2025-12-27-osm_img/photo_12.jpg
delete mode 100644 content/posts/files/2025-12-27-osm_img/photo_13.jpg
delete mode 100644 content/posts/files/2025-12-27-osm_img/photo_14.jpg
delete mode 100644 content/posts/files/2025-12-27-osm_img/photo_2.jpg
delete mode 100644 content/posts/files/2025-12-27-osm_img/photo_3.jpg
delete mode 100644 content/posts/files/2025-12-27-osm_img/photo_4.jpg
delete mode 100644 content/posts/files/2025-12-27-osm_img/photo_5.jpg
delete mode 100644 content/posts/files/2025-12-27-osm_img/photo_6.jpg
delete mode 100644 content/posts/files/2025-12-27-osm_img/photo_7.jpg
delete mode 100644 content/posts/files/2025-12-27-osm_img/photo_8.jpg
delete mode 100644 content/posts/files/2025-12-27-osm_img/photo_9.jpg
delete mode 100644 content/posts/files/2025-12-27-osm_img/thumbs/photo.jpg
delete mode 100644 content/posts/files/2025-12-27-osm_img/thumbs/photo_1.jpg
delete mode 100644 content/posts/files/2025-12-27-osm_img/thumbs/photo_10.jpg
delete mode 100644 content/posts/files/2025-12-27-osm_img/thumbs/photo_11.jpg
delete mode 100644 content/posts/files/2025-12-27-osm_img/thumbs/photo_12.jpg
delete mode 100644 content/posts/files/2025-12-27-osm_img/thumbs/photo_13.jpg
delete mode 100644 content/posts/files/2025-12-27-osm_img/thumbs/photo_14.jpg
delete mode 100644 content/posts/files/2025-12-27-osm_img/thumbs/photo_2.jpg
delete mode 100644 content/posts/files/2025-12-27-osm_img/thumbs/photo_3.jpg
delete mode 100644 content/posts/files/2025-12-27-osm_img/thumbs/photo_4.jpg
delete mode 100644 content/posts/files/2025-12-27-osm_img/thumbs/photo_5.jpg
delete mode 100644 content/posts/files/2025-12-27-osm_img/thumbs/photo_6.jpg
delete mode 100644 content/posts/files/2025-12-27-osm_img/thumbs/photo_7.jpg
delete mode 100644 content/posts/files/2025-12-27-osm_img/thumbs/photo_8.jpg
delete mode 100644 content/posts/files/2025-12-27-osm_img/thumbs/photo_9.jpg
delete mode 100644 content/posts/files/2025-12-28-philharmonic-park_img/photo_19_2025-12-28_21-35-40.jpg
delete mode 100644 content/posts/files/2025-12-28-philharmonic-park_img/photo_1_2025-12-28_21-35-40.jpg
delete mode 100644 content/posts/files/2025-12-28-philharmonic-park_img/photo_20_2025-12-28_21-35-40.jpg
delete mode 100644 content/posts/files/2025-12-28-philharmonic-park_img/photo_25_2025-12-28_21-35-40.jpg
delete mode 100644 content/posts/files/2025-12-28-philharmonic-park_img/photo_27_2025-12-28_21-35-40.jpg
delete mode 100644 content/posts/files/2025-12-28-philharmonic-park_img/photo_2_2025-12-28_21-35-40.png
delete mode 100644 content/posts/files/2025-12-28-philharmonic-park_img/photo_30_2025-12-28_21-35-40.jpg
delete mode 100644 content/posts/files/2025-12-28-philharmonic-park_img/photo_31_2025-12-28_21-35-40.jpg
delete mode 100644 content/posts/files/2025-12-28-philharmonic-park_img/photo_32_2025-12-28_21-35-40.png
delete mode 100644 content/posts/files/2025-12-28-philharmonic-park_img/photo_3_2025-12-28_21-35-40.png
delete mode 100644 content/posts/files/2025-12-28-philharmonic-park_img/photo_5_2025-12-28_21-35-40.jpg
delete mode 100644 content/posts/files/2025-12-28-philharmonic-park_img/photo_9_2025-12-28_21-35-40.jpg
delete mode 100644 content/posts/files/2025-12-28-philharmonic-park_img/thumbs/photo_19_2025-12-28_21-35-40.jpg
delete mode 100644 content/posts/files/2025-12-28-philharmonic-park_img/thumbs/photo_1_2025-12-28_21-35-40.jpg
delete mode 100644 content/posts/files/2025-12-28-philharmonic-park_img/thumbs/photo_20_2025-12-28_21-35-40.jpg
delete mode 100644 content/posts/files/2025-12-28-philharmonic-park_img/thumbs/photo_25_2025-12-28_21-35-40.jpg
delete mode 100644 content/posts/files/2025-12-28-philharmonic-park_img/thumbs/photo_27_2025-12-28_21-35-40.jpg
delete mode 100644 content/posts/files/2025-12-28-philharmonic-park_img/thumbs/photo_2_2025-12-28_21-35-40.jpg
delete mode 100644 content/posts/files/2025-12-28-philharmonic-park_img/thumbs/photo_30_2025-12-28_21-35-40.jpg
delete mode 100644 content/posts/files/2025-12-28-philharmonic-park_img/thumbs/photo_31_2025-12-28_21-35-40.jpg
delete mode 100644 content/posts/files/2025-12-28-philharmonic-park_img/thumbs/photo_32_2025-12-28_21-35-40.jpg
delete mode 100644 content/posts/files/2025-12-28-philharmonic-park_img/thumbs/photo_3_2025-12-28_21-35-40.jpg
delete mode 100644 content/posts/files/2025-12-28-philharmonic-park_img/thumbs/photo_5_2025-12-28_21-35-40.jpg
delete mode 100644 content/posts/files/2025-12-28-philharmonic-park_img/thumbs/photo_9_2025-12-28_21-35-40.jpg
delete mode 100644 content/posts/files/2025-12-29-newyear-excel_img/cover.png
delete mode 100644 content/posts/files/2025-12-29-newyear-excel_img/cover1.png
delete mode 100644 content/posts/files/2025-12-29-newyear-excel_img/new_year.ods
delete mode 100644 content/posts/files/2025-12-29-newyear-excel_img/new_year.xlsx
delete mode 100644 content/posts/files/2025-travel-1_img/1.webp
delete mode 100644 content/posts/files/2025-travel-1_img/10.webp
delete mode 100644 content/posts/files/2025-travel-1_img/11.webp
delete mode 100644 content/posts/files/2025-travel-1_img/12.webp
delete mode 100644 content/posts/files/2025-travel-1_img/13.webp
delete mode 100644 content/posts/files/2025-travel-1_img/14.webp
delete mode 100644 content/posts/files/2025-travel-1_img/15.webp
delete mode 100644 content/posts/files/2025-travel-1_img/16.webp
delete mode 100644 content/posts/files/2025-travel-1_img/17.webp
delete mode 100644 content/posts/files/2025-travel-1_img/18.webp
delete mode 100644 content/posts/files/2025-travel-1_img/19.webp
delete mode 100644 content/posts/files/2025-travel-1_img/2.webp
delete mode 100644 content/posts/files/2025-travel-1_img/20.webp
delete mode 100644 content/posts/files/2025-travel-1_img/21.webp
delete mode 100644 content/posts/files/2025-travel-1_img/22.webp
delete mode 100644 content/posts/files/2025-travel-1_img/23.webp
delete mode 100644 content/posts/files/2025-travel-1_img/3.webp
delete mode 100644 content/posts/files/2025-travel-1_img/4.webp
delete mode 100644 content/posts/files/2025-travel-1_img/5.webp
delete mode 100644 content/posts/files/2025-travel-1_img/6.webp
delete mode 100644 content/posts/files/2025-travel-1_img/7.webp
delete mode 100644 content/posts/files/2025-travel-1_img/8.webp
delete mode 100644 content/posts/files/2025-travel-1_img/9.webp
delete mode 100644 content/posts/files/2025-travel-1_img/preview_1.webp
delete mode 100644 content/posts/files/2025-travel-1_img/preview_10.webp
delete mode 100644 content/posts/files/2025-travel-1_img/preview_11.webp
delete mode 100644 content/posts/files/2025-travel-1_img/preview_12.webp
delete mode 100644 content/posts/files/2025-travel-1_img/preview_13.webp
delete mode 100644 content/posts/files/2025-travel-1_img/preview_14.webp
delete mode 100644 content/posts/files/2025-travel-1_img/preview_15.webp
delete mode 100644 content/posts/files/2025-travel-1_img/preview_16.webp
delete mode 100644 content/posts/files/2025-travel-1_img/preview_17.webp
delete mode 100644 content/posts/files/2025-travel-1_img/preview_18.webp
delete mode 100644 content/posts/files/2025-travel-1_img/preview_19.webp
delete mode 100644 content/posts/files/2025-travel-1_img/preview_2.webp
delete mode 100644 content/posts/files/2025-travel-1_img/preview_20.webp
delete mode 100644 content/posts/files/2025-travel-1_img/preview_21.webp
delete mode 100644 content/posts/files/2025-travel-1_img/preview_22.webp
delete mode 100644 content/posts/files/2025-travel-1_img/preview_23.webp
delete mode 100644 content/posts/files/2025-travel-1_img/preview_3.webp
delete mode 100644 content/posts/files/2025-travel-1_img/preview_4.webp
delete mode 100644 content/posts/files/2025-travel-1_img/preview_5.webp
delete mode 100644 content/posts/files/2025-travel-1_img/preview_6.webp
delete mode 100644 content/posts/files/2025-travel-1_img/preview_7.webp
delete mode 100644 content/posts/files/2025-travel-1_img/preview_8.webp
delete mode 100644 content/posts/files/2025-travel-1_img/preview_9.webp
delete mode 100644 content/posts/files/2025-travel-1_img/saologo.png
delete mode 100644 content/posts/files/hype_curve.png
delete mode 100644 content/posts/files/laughing-man.jpeg
delete mode 100644 content/posts/files/lets-code-3d_img/1.jpg
delete mode 100644 content/posts/files/lets-code-3d_img/2.jpg
delete mode 100644 content/posts/files/lets-code-3d_img/3.png
delete mode 100644 content/posts/files/lets-code-3d_img/4.jpg
delete mode 100644 content/posts/files/lets-code-3d_result.stl
delete mode 100644 content/posts/files/lets-code-3d_source.scad
delete mode 100644 content/posts/files/makeup-organizer_img/1.png
delete mode 100644 content/posts/files/makeup-organizer_img/2.png
delete mode 100644 content/posts/files/makeup-organizer_img/3.png
delete mode 100644 content/posts/files/makeup-organizer_organizer.tar.zst
delete mode 100644 content/posts/files/meshtastic_img/tbeam.jpg
delete mode 100644 content/posts/files/meshtastic_img/tbeam.webp
create mode 100644 content/projects/grouper/index.md
delete mode 100644 content/projects/qchat.md
create mode 100644 content/projects/qchat/index.md
diff --git a/content/pages/_index.md b/content/pages/_index.md
index 3d813e3..b2a7532 100644
--- a/content/pages/_index.md
+++ b/content/pages/_index.md
@@ -1,4 +1,3 @@
---
-order: '20'
title: Разное
---
diff --git a/content/posts/2021-02-13-jsonnet.md b/content/posts/2021-02-13-jsonnet.md
deleted file mode 100644
index 9b03e5d..0000000
--- a/content/posts/2021-02-13-jsonnet.md
+++ /dev/null
@@ -1,92 +0,0 @@
----
-date: "2021-02-13T22:08:19Z"
-image: files/2021-02-13-jsonnet_logo.webp
-tags:
- - go
- - it
- - разное
-categories:
- - Без рубрики
-title: Jsonnet
----
-
-Редко такое бывает, что случайно натыкаешься на какую-то технологию и она
-вызывает вау-эффект и буквально переворачивает всё верх дном. На днях для меня
-такой технологией стал [Jsonnet](https://jsonnet.org/) от Google.
-
-В кратце, это надмножество JSON являющееся языком описания шаблонов. Пока звучит
-не очень круто, да? На деле это офигенный Тьюринг полный функциональный язык,
-результатом выполнения которого будет сформированый JSON (и не только)
-документ(или несколько документов[^1]).
-[^1]:https://jsonnet.org/learning/getting_started.html#multi
-
-Если интересно, рекомендую сразу переходить к туториалу —
-https://jsonnet.org/learning/tutorial.html.
-
-## Почему же это круто?
-
-Ну, во-первых, он реально мощный и простой. С его помощью можно формировать
-документы любой сложности.
-
-Во-вторых, его можно встроить в свою программу на Go (и не только, но на Go —
-проще всего — https://jsonnet.org/ref/bindings.html), и это даст бесплатно
-мощный DSL для написания очень гибких конфигов.
-
-В третьих, ну камон, приятно же когда компьютер берет на себя рутинную работу по
-формированию больших и сложных JSON’ов!
-
-## Пример
-
-Накидал простенький пример который формирует конфигурацию пайплайна для
-гипотетической CI системы:
-
-```jsonnet
-local map(arr, predicate) = // определяем функцию map
-if std.length(arr) == 0 then
- []
- else
- [
- predicate(arr[0])
- ] + map(arr[1:], predicate); // функциональненько!
-local tasks = [['go1.14', '1.14-alpine'],['go1.15', '1.15-alpine'],['go1.16-RC', '1.16-rc-alpine']];
-local commands = ['go build', 'go test']; // Общая часть
-{ // Результирующий JSON
- pipeline: map(tasks, function (task) { // Вызов map от tasks
- name: task[0],
- image: "golang:"+task[1],
- commands: commands,
- })
-}
-```
-
-Результат:
-
-```json
-{
- "pipeline": [
- {
- "commands": ["go build", "go test"],
- "image": "golang:1.14-alpine",
- "name": "go1.14"
- },
- {
- "commands": ["go build", "go test"],
- "image": "golang:1.15-alpine",
- "name": "go1.15"
- },
- {
- "commands": ["go build", "go test"],
- "image": "golang:1.16-rc-alpine",
- "name": "go1.16-RC"
- }
- ]
-}
-```
-
-Круть же!
-
-Да, на небольшом примере не очень показательно, но даже тут, скажем, при добавлении новой цели сборки будет достаточно слегка подправить массив tasks и автоматически сформируется все остальное, а не копипаст целой секции и ручная правка в нужных местах.
-
-Я оставил за скобками то, что этот шаблонизатора позволяет формировать не только JSON но и фактически любой другой текстовый формат. И даже из одного скрипта формировать несколько документов разного формата. При этом локальные переменные будут использоваться общие. Теоретически, если упороться, можно одним скриптом сформировать весь /etc на новом сервере. Почему бы и нет?:)
-
-Не знаю смог ли передать ощущение своего восторга, но я охренеть как рад и жду выходных, чтобы с головой нырнуть в эту технологию, которая открывает столько новых интересных перспектив!
diff --git a/content/posts/2021-02-13-jsonnet/index.md b/content/posts/2021-02-13-jsonnet/index.md
new file mode 100644
index 0000000..4018d46
--- /dev/null
+++ b/content/posts/2021-02-13-jsonnet/index.md
@@ -0,0 +1,94 @@
+---
+date: "2021-02-13T22:08:19Z"
+image: /posts/2021-02-13-jsonnet/jsonnet_logo.webp
+tags:
+ - go
+ - it
+ - разное
+categories:
+ - Без рубрики
+title: Jsonnet
+---
+
+Редко такое бывает, что случайно натыкаешься на какую-то технологию и она
+вызывает вау-эффект и буквально переворачивает всё верх дном. На днях для меня
+такой технологией стал [Jsonnet](https://jsonnet.org/) от Google.
+
+
+
+В кратце, это надмножество JSON являющееся языком описания шаблонов. Пока звучит
+не очень круто, да? На деле это офигенный Тьюринг полный функциональный язык,
+результатом выполнения которого будет сформированый JSON (и не только)
+документ(или несколько документов[^1]).
+[^1]:https://jsonnet.org/learning/getting_started.html#multi
+
+Если интересно, рекомендую сразу переходить к туториалу —
+https://jsonnet.org/learning/tutorial.html.
+
+## Почему же это круто?
+
+Ну, во-первых, он реально мощный и простой. С его помощью можно формировать
+документы любой сложности.
+
+Во-вторых, его можно встроить в свою программу на Go (и не только, но на Go —
+проще всего — https://jsonnet.org/ref/bindings.html), и это даст бесплатно
+мощный DSL для написания очень гибких конфигов.
+
+В третьих, ну камон, приятно же когда компьютер берет на себя рутинную работу по
+формированию больших и сложных JSON’ов!
+
+## Пример
+
+Накидал простенький пример который формирует конфигурацию пайплайна для
+гипотетической CI системы:
+
+```jsonnet
+local map(arr, predicate) = / определяем функцию map
+if std.length(arr) == 0 then
+ []
+ else
+ [
+ predicate(arr[0])
+ ] + map(arr[1:], predicate); / функциональненько!
+local tasks = [['go1.14', '1.14-alpine'],['go1.15', '1.15-alpine'],['go1.16-RC', '1.16-rc-alpine']];
+local commands = ['go build', 'go test']; / Общая часть
+{ / Результирующий JSON
+ pipeline: map(tasks, function (task) { / Вызов map от tasks
+ name: task[0],
+ image: "golang:"+task[1],
+ commands: commands,
+ })
+}
+```
+
+Результат:
+
+```json
+{
+ "pipeline": [
+ {
+ "commands": ["go build", "go test"],
+ "image": "golang:1.14-alpine",
+ "name": "go1.14"
+ },
+ {
+ "commands": ["go build", "go test"],
+ "image": "golang:1.15-alpine",
+ "name": "go1.15"
+ },
+ {
+ "commands": ["go build", "go test"],
+ "image": "golang:1.16-rc-alpine",
+ "name": "go1.16-RC"
+ }
+ ]
+}
+```
+
+Круть же!
+
+Да, на небольшом примере не очень показательно, но даже тут, скажем, при добавлении новой цели сборки будет достаточно слегка подправить массив tasks и автоматически сформируется все остальное, а не копипаст целой секции и ручная правка в нужных местах.
+
+Я оставил за скобками то, что этот шаблонизатора позволяет формировать не только JSON но и фактически любой другой текстовый формат. И даже из одного скрипта формировать несколько документов разного формата. При этом локальные переменные будут использоваться общие. Теоретически, если упороться, можно одним скриптом сформировать весь /etc на новом сервере. Почему бы и нет?:)
+
+Не знаю смог ли передать ощущение своего восторга, но я охренеть как рад и жду выходных, чтобы с головой нырнуть в эту технологию, которая открывает столько новых интересных перспектив!
diff --git a/content/posts/2021-02-13-jsonnet/jsonnet_logo.webp b/content/posts/2021-02-13-jsonnet/jsonnet_logo.webp
new file mode 100644
index 0000000..45c63a6
Binary files /dev/null and b/content/posts/2021-02-13-jsonnet/jsonnet_logo.webp differ
diff --git "a/content/posts/2021-05-13-\321\206\320\270\321\204\321\200\320\276\320\262\320\260\321\217-\320\263\320\270\320\263\320\270\320\265\320\275\320\260.md" "b/content/posts/2021-05-13-\321\206\320\270\321\204\321\200\320\276\320\262\320\260\321\217-\320\263\320\270\320\263\320\270\320\265\320\275\320\260.md"
deleted file mode 100644
index d9fcede..0000000
--- "a/content/posts/2021-05-13-\321\206\320\270\321\204\321\200\320\276\320\262\320\260\321\217-\320\263\320\270\320\263\320\270\320\265\320\275\320\260.md"
+++ /dev/null
@@ -1,91 +0,0 @@
----
-categories:
-- Без рубрики
-date: '2021-05-13T15:37:01Z'
-tags:
-- it
-- паранойя
-- разное
-title: Немного о цифровой гигиене
----
-
-## Вступление
-
-Как раз вступление тут особо и не нужно. Ни для кого не открою америки, что в
-современном цифровом обществе все мы являемся товаром для интернет-медиа
-гигантов, того же фейсбука да гугла. Не скажу что это для меня, как личности
-опасно или вредно, но мне это неприятно. Решил с этим что-то делать.
-
-## Вводные
-
-- В интернетах я уже очень давно и много где и как “наследил” своими данными. И
- с этим уже ничего не поделать.
-- У меня в телефоне и на всех компьютерах куча приложений работающих с
- интернетом, и не только мессенджеры.
-- У меня достаточно узкий круг людей с кем бы я хотел быть на связи, и не хочу
- чтобы мои действия как-то ухудшили или усложнили их жизнь.
-- Вопрос анонимности для меня не стоит, я не анонимен и это моё осознанное
- решение. Я законопослушный человек и прятаться мне не от кого. И да, я знаю
- что этот тезис стараниями либерах нынче пытаются выставить как глупость, но
- нет. Глупость — это слушать либерах, а не иметь свою голову на плечах. И
- контртезис “Гы гы гы, ну раз тебе нечего скрывать — поставь камеру у себя в
- спальне и ванной” даже комментировать не буду в силу его ущербности.
-- Я пользователь техники Apple и с этим уже ничего не поделать, менять целиком
- экосистему для меня не вариант (это очень дорого, бессмысленно, а местами и
- невозможно, например, рабочий мак мне поменять не на что). И да, есть наивная
- надежда что у яблок в плане приватности всё получше чем у ведроидов. Во всяком
- случае по сравнению со стоком. Гиковские прошивки с вырезанными зондами в
- расчет не беру, верю что у них совсем всё хорошо.
-
-## Цели
-
-1. Уменьшить информационный шум вокруг себя и тем самым улучшить качество жизни.
-2. Уменьшить свой “информационный след”
-3. Иметь больше контроля над своими данными, чтобы мои волосы стали мягкими и
- шелковистыми.
-
-## Наброски плана
-
-1. Перейти максимально на собственные ресурсы, которые я контролирую и которые
- *точно* не сливают ничего налево.Примерно так: социалки =>
- Закрывайте буржуйнет.
-
-Поехали!
-
-1. Идём сюда: https://www.gosuslugi.ru/627603/1/form
-2. По приведенной инструкции генерируем файл запроса сертификата. Вкратце так (только вместо neonxp.ru указываем свой домен):
- ```
- openssl req -out neonxp.ru.csr -new -subj "/C=RU/CN=neonxp.ru" -addext "keyUsage = digitalSignature, keyEncipherment" -addext "subjectAltName=DNS: neonxp.ru" -addext "extendedKeyUsage = serverAuth" -newkey rsa:2048 -nodes -keyout neonxp.ru.key
- ```
- Важно! Нужно сохранить файл ключа neonxp.ru.key в надежном месте. Если он попадет в чужие руки — нужно будет отзывать сертификат и начинать всё заново! SAN и Wildcard пока не поддерживается, но что имеем — то и имеем. Но по слухам таки будут, как минимум SAN.
-3. Полученный файл csr загружаем там же на госуслуги
-4. Ждём не долго (реально недолго, у меня прислали сертификат буквально через несколько минут!)
-5. В ответ придёт файл с рандомным названием. Сохраняем его туда, где лежат другие файлы под названием “домен.crt”
-6. Скачиваем корневой и промежуточные сертификаты:
- ```
- wget https://gu-st.ru/content/Other/doc/russian_trusted_root_ca.cer
- wget https://gu-st.ru/content/Other/doc/russian_trusted_sub_ca.cer
- ```
-7. Преобразуем скачанный сертификат в формат PEM:
- ```
- openssl x509 -in neonxp.ru.crt -out neonxp.cer -outform PEM
- ```
-8. Соединяем свой сертификат и минцифровские в один бандл:
- ```
- cat neonxp.cer russian_trusted_sub_ca_pem.cer russian_trusted_root_ca_pem.cer > chain.cer
- ```
-9. Используем полученный бандл и сгенерированный в пункте 2 файл ключа в конфигурации вебсервера. У меня используется Caddy, поэтому мой конфиг выглядит так:
- ```
- neonxp.ru:443 {
- tls /data/ssl/chain.cer /data/ssl/neonxp.ru.key
- ...
- }
- ```
-
-В общем-то, всё. Как настанет время продлевать — я дополню заметку деталями
-именно продления. Если будут вопросы — пишите, попробуем решить.
diff --git a/content/posts/2024-02-21-tls/index.md b/content/posts/2024-02-21-tls/index.md
new file mode 100644
index 0000000..4529bd9
--- /dev/null
+++ b/content/posts/2024-02-21-tls/index.md
@@ -0,0 +1,54 @@
+---
+categories:
+ - Без рубрики
+date: "2024-02-21T21:51:29Z"
+tags:
+ - it
+ - Россия
+ - TLS
+title: Конфигурация HTTPS с сертификатом от Минцифры
+---
+
+Третьего дня потратил достаточно много времени на установку на данном сайте
+сертификата от Минцифры.А поскольку сертификат краткоживущий (90 дней) — заметка
+мне самому пригодится на будущее.
+
+Началось всё с того, что я с удивлением обнаружил, что на госуслугах теперь
+можно выпустить сертификат для домена физлицу.Это меня обрадовало, хотя ранее я
+приунывал что нет никакой альтернативы простым смертным. Теперь есть.
+Закрывайте буржуйнет.
+
+Поехали!
+
+1. Идём сюда: https://www.gosuslugi.ru/627603/1/form
+2. По приведенной инструкции генерируем файл запроса сертификата. Вкратце так (только вместо neonxp.ru указываем свой домен):
+ ```
+ openssl req -out neonxp.ru.csr -new -subj "/C=RU/CN=neonxp.ru" -addext "keyUsage = digitalSignature, keyEncipherment" -addext "subjectAltName=DNS: neonxp.ru" -addext "extendedKeyUsage = serverAuth" -newkey rsa:2048 -nodes -keyout neonxp.ru.key
+ ```
+ Важно! Нужно сохранить файл ключа neonxp.ru.key в надежном месте. Если он попадет в чужие руки — нужно будет отзывать сертификат и начинать всё заново! SAN и Wildcard пока не поддерживается, но что имеем — то и имеем. Но по слухам таки будут, как минимум SAN.
+3. Полученный файл csr загружаем там же на госуслуги
+4. Ждём не долго (реально недолго, у меня прислали сертификат буквально через несколько минут!)
+5. В ответ придёт файл с рандомным названием. Сохраняем его туда, где лежат другие файлы под названием “домен.crt”
+6. Скачиваем корневой и промежуточные сертификаты:
+ ```
+ wget https://gu-st.ru/content/Other/doc/russian_trusted_root_ca.cer
+ wget https://gu-st.ru/content/Other/doc/russian_trusted_sub_ca.cer
+ ```
+7. Преобразуем скачанный сертификат в формат PEM:
+ ```
+ openssl x509 -in neonxp.ru.crt -out neonxp.cer -outform PEM
+ ```
+8. Соединяем свой сертификат и минцифровские в один бандл:
+ ```
+ cat neonxp.cer russian_trusted_sub_ca_pem.cer russian_trusted_root_ca_pem.cer > chain.cer
+ ```
+9. Используем полученный бандл и сгенерированный в пункте 2 файл ключа в конфигурации вебсервера. У меня используется Caddy, поэтому мой конфиг выглядит так:
+ ```
+ neonxp.ru:443 {
+ tls /data/ssl/chain.cer /data/ssl/neonxp.ru.key
+ ...
+ }
+ ```
+
+В общем-то, всё. Как настанет время продлевать — я дополню заметку деталями
+именно продления. Если будут вопросы — пишите, попробуем решить.
diff --git "a/content/posts/2024-06-01-\320\262\320\260\320\274-\320\275\320\265-\320\275\321\203\320\266\320\275\321\213-\320\277\321\203\321\210\320\270.md" "b/content/posts/2024-06-01-\320\262\320\260\320\274-\320\275\320\265-\320\275\321\203\320\266\320\275\321\213-\320\277\321\203\321\210\320\270.md"
deleted file mode 100644
index 4d5960f..0000000
--- "a/content/posts/2024-06-01-\320\262\320\260\320\274-\320\275\320\265-\320\275\321\203\320\266\320\275\321\213-\320\277\321\203\321\210\320\270.md"
+++ /dev/null
@@ -1,110 +0,0 @@
----
-categories:
-- Без рубрики
-date: '2024-06-01T21:05:55Z'
-tags:
-- it
-- разное
-title: Вам не нужны пуши!
----
-
-Я не шучу. Серьёзно.
-
-С неделю назад меня осенила крайне простая мысль, которая ранее, почему-то, мне
-не приходила.
-
-
-
-Но сначала, две вводных, или, скажем, тезиса, которые послужили для вывода этой
-мысли:
-
-## Тезис №1
-
-Меня действительно огорчает количество пушей которые постоянно сыплются мне на
-телефон. Это вызывает раздражение сразуна нескольких уровнях:
-
-1. Сам момент их прихода — я автоматически смотрю на телефон, что же пришло
-2. Если я игнорирую пуш — он потом висит в шторке вызывая раздражение
-3. Очень часто это сранная реклама от какого-нибудь озона или магнит маркета
- (бывш. KazanExpress)
-
-Но бывают же и полезные пуши! Например, уведомления от Госуслуг или информация
-что заказ доставлен ну илисообщения в мессенджерах.
-
-То есть, как будто, ради вышеуказанных полезных пушей, я должен терпеть и тонну
-бесполезного говна!
-
-## Тезис №2
-
-Ну и вторая вводная, которая, какмне кажется подтолкнула меня — я всегда любил
-_простые_ и открытые технологии, какдревние, типа RSS, e-mail, irc, так и новые,
-но такие же простые и открытые, как, например, gemini (да, сейчас он наэтом
-сайте сломан, но я его починю на днях, честно!), федиверс и прочие подобные.
-Кстати, сейчас подумалось, что именноэти качества меня и так сильно влюбили в
-golang 🙂
-
-## Та самая простая мысль
-
-На стыке двух вышеуказанных тезисов у меня внезапно для себя самого и
-синтезировалась крайне простая мысль:
-
-> **Действительно** важные вещи всегда приходят на электропочту, а
-> сообщения в мессенджерах — это не срочно!
-
-Таким образом, запретив на телефоне вообще все пуши кроме электропочты я
-избавился от этого угнетающего информационногошума, оставив только полезный
-сигнал.
-
--Хей, да на почте же один спам! — скажешь ты мне
-
-На самом деле, уже давно нет. Я лично использую почту mail.ru (в данном случае,
-это не очень важно и относится к любой)и на ней спама как такового уже давно нет
-(если думаешь, что это не так, перепроверь, возможно, твои
-представленияустарели). При этом, самое великое в этом то, что почта (на самом
-деле, не важно, какая именно — mail.ru, yandex или,прости господи, гмейл)
-предоставляет гибкие фильтры входящей почты. И потратив буквально пару десятков
-минут можносформировать правила, чтобы, например, от того же озона пропускались
-только письма со статусом заказа и больше ничего.
-
-Вот так, древняя технология обычных, старых-добрых, писем позволяет решить
-проблему современных назойливых уведомлений!
-
-При этом, почта не пушит проверять её постоянно! Самое главное её преимущество
-для меня — это её ассинхронность, вотличие от мессенджеров. Можно отключить от
-нее уведомления тоже, но завести себе правило, что раз в Н времени выделятьвремя
-на ее проверку. Самое главное — делать это в _комфортное для себя_ время.
-
-## Так же как и на мессенджеры, кстати!
-
-Выше я уже сказал, что мессенджеры — это не срочно. Ничего страшного не
-случится, если я отвечу через час-два-три иливообще вечером. Если будет что-то
-_действительно_ срочное — мне можно и позвонить. Но, к счастью, мне повезло, что
-мояжизнь достаточно спокойная и _действительно_ срочное почти не случается.
-Отрефлексируй, уважаемый читатель, насколько*действительно* срочные и важные
-вопросы, которые ты таковыми считаешь и которыми ежедневно дёргают тебя? И
-ответь себечестно, мир бы разрушился, если бы ты их отложил на комфортное для
-_себя_, а не других время?
-
-Такой эксперимент я ставлю на себе уже неделю. Я практически не захожу в
-мессенджеры, всё действительно важное мнеприходит на почту, лишней рекламы я не
-вижу, нет никакого информационного шума, который буквально стал
-бичомсовременности.
-
-## Вывод за неделю
-
-Моё внутреннее состояние ощущается как очень спокойное и, главное, комфортное. Я
-чувствую полный контроль над тем, чтои когда я потребляю и нет никакого
-информационного насилия, как его называет
-[Столяров](http://stolyarov.info/)(хоть мне этот персонаж и кажется чрезвычайно
-радикальным и оттого отталкивающим, но что-то в его словах таки есть).
-
-Считаю, что эксперимент оказался удачным, и я его продолжу!
-
-## Пишите письма!
-
-Напомню раз пришлось к слову, пожалуй, свою электропочту: или
-писать говнокод.
-
-А .editorconfig я себе такой в home положил:
-
-```.editorconfig
-[*]
-indent_style = tab
-tab_width = 4
-end_of_line = lf
-charset = utf-8
-trim_trailing_whitespace = true
-insert_final_newline = true
-soft_wrap = true
-
-[*.{yml,yaml}]
-indent_style = space
-indent_size = 2
-
-[*.json]
-indent_size = 2
-```
-
-Вроде как, покрывает основное.
diff --git a/content/posts/2025-04-05-tabs-or-spaces/index.md b/content/posts/2025-04-05-tabs-or-spaces/index.md
new file mode 100644
index 0000000..8122e06
--- /dev/null
+++ b/content/posts/2025-04-05-tabs-or-spaces/index.md
@@ -0,0 +1,398 @@
+---
+categories:
+ - Размышления
+date: "2025-04-05T16:53:27+03:00"
+description: null
+image: null
+location: Казань
+tags:
+ - размышления
+title: Табы или пробелы?
+---
+
+Так получилось, что с Нового Года я ничего в блог не писал. Тому причина в
+личной загруженности, и в не менее личной лени. Так же я делал некоторые
+эксперименты над самим блогом, потому что моё внутреннее чувство прекрасного не
+даёт мне просто остановиться и не трогать то, что работает.
+
+Но всё же, я чувствую внутреннюю потребность написать небольшую заметку с
+размышлениями, которые недавно приходили ко мне в голову.
+
+А связаны они с тем, что есть определённые догмы в индустрии, которые непонятно
+(ну или понятно) почему появились, и которым слепо следуют, хотя, как будто они
+уже не имеют смысла.
+
+
+
+## Вечный спор
+
+Для затравки, «вечный спор» табы или пробелы использовать в коде для отсутпов.
+Лично для меня здесь не то что выбор очевиден, для меня очевидно, что и самого
+выбора то нет. Конечно же, только табы! Отступ пробелами просто не имеет права
+на жизнь, и вот почему:
+
+- Во-первых, это просто какой-то костыль, использовать пробел не по назначению.
+ Наверное, не очень очевидно, но назначение пробела — это именно разделение
+ слов. Невероятно! А наначение таба — как раз таки форматирование отступа.
+ Давайте использовать инструменты по назначению!
+- Во-вторых, и самое главное, как по мне, это гибкость табуляции. Я, как
+ читающий код, волен сам выбирать размер отступа. Например, если у меня узкий
+ экран (смартфон, например) — я выберу отступ в 2 _визуальных_ пробела.
+ Наоборот, если бы у меня было слабое зрение — я бы выбрал отступ в бо́льшее
+ число _визуальных_ пробелов.
+- В-третьих, исходя из предыдущего пункта, я считаю, что использование именно
+ пробелов — это диктование автором исходника мне своей воли в виде своих
+ предпочтений (например, только 4 пробела, и никак иначе!). А какого чёрта? Это
+ буквально насилие! Зачем? Я считаю, это не допустимо. Пусть у каждого будет
+ возможность выбирать себе настройки отображения на _своей_ машине под _свои_
+ вкусы, а не вкусы автора!
+- В-четвёртых, самое малозначительное — это то, что таб это 1 байт, а пробелов
+ обычно больше чем 1 байт (от 2 до 8). Я считаю этот аргумент малозначительным,
+ т.к. уж что что, а места на носителях информации нынче в достатке. Но тем не
+ менее, это один из аргументов!
+
+А что по аргументам за пробелы? Да нет их. Ну окей, предположим, что есть. Во
+многих кодстайлах (PEP-8, PSR итп) закреплены именно пробелы. Я не понимаю,
+почему, вроде как, умные люди которые эти стандарты придумывали так сделали.
+Возможно, привычка. Но является ли привычка каких-то людей аргументом? Наверное,
+нет. И самое грустное, что эти стандарты уже не поменять, ибо с их
+использованием _уже_ написаны мегатонны кодов.
+
+Единственное, меня радует, что хотя бы в стандарте форматирования моего любимого
+языка Go этой откровенной чуши нет. В Go отступы приняты табами и только ими.
+
+Сразу скажу, я говорил только про отступы в начале строки, но не про отступы
+внутри строки, например, чтобы выстраивать значения подряд идущих констант в
+одну ровную колонку. Там, вроде как, пробелы вполне оправданы. Но это не точно.
+Я пока не решил для себя.
+
+Думаю, здесь насчёт табов и пробелов можно завершить. Если есть что накинуть —
+пишите письма, e-mail внизу страницы.
+
+## Вечный консенсус
+
+Про табы и пробелы была скорее затравочка. Там, как мне кажется, всё очевидно.
+Но есть менее очевидная, но как мне кажется очень родственная тема. Эта тема
+вызывает сильно меньше споров, т.к. вроде как в ней уже есть консенсус. Но этот
+консенсус ошибочен!
+
+А говорю я про форматирование длины строк! А именно, т.н. hard-wraps и
+soft-wraps. Если коротко, при hard-wraps в текст в точках переноса (например, на
+80 или 120 колонке) вставляются символ переноса строк (`\n`), при мягком
+переносе текст остается на одной строке, но выглядит так, как будто он разделен
+на несколько строк.
+
+А начну я с небольшой предыстории, как я к этому пришёл. Как я уже писал в
+начале, у меня есть постоянное шило в седалище, которое не даёт мне просто
+остановиться и использовать то, что работает, как минимум, в контексте этого
+блога. И из последнего куда я смотрел — протокол Gemini[1]. Разбирая его, меня
+сначала немного удивила его особенность, а именно:
+
+=> https://geminiprotocol.net/ [1]
+
+> Text in Gemtext documents is written using "long lines", i.e. you (or your
+> editor) shouldn't be inserting newline characters every 80 characters or so.
+> Instead, leave it up to the receiving Gemini client to wrap your lines to fit
+> the device's screen size and the user's preference. This way Gemtext content
+> looks good and is easy to read on desktop monitors, laptop screens, tablets
+> and smartphones.
+
+> Note that while Gemini clients will break up lines of text which are longer
+> than the user's screen, they will not join up lines which are shorter than the
+> user's screen, like would happen in Markdown, HTML or LaTeX. This means that,
+> e.g. "dot point" lists or poems with deliberately short lines will be
+> displayed correctly without the author having to do any extra work or the
+> client having to be any smarter in order to recognise and handle that kind of
+> content correctly.
+
+Сначала, я подумал, да это же нифига не удобно, что используются длинные строки,
+а не склеиваются разделённые одним переносом как в Markdown! Более того, это моё
+возмущение подогревалось тем, что я всё это время был сторонником как раз
+hard-wraps и форматировал что код, что markdown для блога по 80 или 120 колонке.
+Потому что так всегда и везде было принято. Но потом вчитавшись, я понял, что
+как раз таки «склеивание» Markdown это максимально неправильное поведение! Оно
+порождает такие минусы, как более сложный парсинг, который должен обрабатывать
+по разному один и два переноса строк, неочевидность, когда пишешь текст в
+редакторе, а отображается он совсем по другому, потенциальные ошибки, когда
+абзацы внезапно склеиваются, и т.п.
+
+При этом, парсинг Gemtext поразительно простой. В общем случае, достаточно
+парсить по строке, и не думать о предыдущем состоянии (относится текущая строка
+к предыдущему параграфу или таки нет). Единственное исключение —
+преформатированный текст, при парсинге которого надо помнить состояние. Но и это
+очень просто, достаточно держать единственный флаг который говорит, мы сейчас в
+нормальном состоянии или в состоянии преформатированного текста. И переключать
+этот флаг когда очередная строка начинается с _```_. Вообще, Gemtext кажется
+наиболее правильным и приятным для меня языком разметки. Наверное, я на него
+перейду. Но потом, сейчас нет времени.
+
+К чему я тут углубился в описание формата Gemtext? А вот к чему: только после
+прочтения спеки этого формата до меня сошло озарение, что использование длинных,
+а не обрезанных по 80 или 120 или ещё какую колонку более правильное не только
+для формата разметки, но и для обычного кода!
+
+И вот аргументы:
+
+- Во-первых, все редакторы кода поддерживают soft-wrap и каждый волен выставить
+ для своего личного редактора удобную ему длину строки, а не подчиняться
+ привычкам автора кода.
+- Во-вторых, за длину в 80 символов топят в основном старпёры что-то там
+ говорящие про терминалы шириной в 80 символов. Только и этот аргумент не
+ понятен. Когда вы в последнее время видели терминал в 80 символов? Не эмулятор
+ терминала, а именно сам терминал? Ну даже, хорошо, пусть будет этот терминал в
+ 80 символов. Но он что, не умеет переносить? Подозреваю, что может. И в чём
+ тогда проблема? Непонятно. Короче, требование в 80 символов (ну или более
+ современное в 120) выглядит как высосанное из пальца, потому что под ним нет
+ реальной основы кроме каких-то там исторических причин на доисторическом
+ железе.
+- В-третьих, см. пункт про насилие автора кода над читателем кода. Например,
+ опять таки, узкий монитор например. И на нём не soft-wrapped текст может
+ вызывать горизонтальную прокрутку. И это убого.
+- В-четвёртых, да, это усложняет парсинг. Это слабый аргумент, я знаю. Как
+ пример, правильный парсер Markdown (не буду тут бомбить про количество разных
+ стандартов Markdown) пишется не то чтобы очень просто. В это же время,
+ написать парсер Gemtext который полностью покроет спецификацию — дело максимум
+ часа-двух для любого, кто программирует больше, хотя бы, нескольких месяцев!
+
+В общем, как и в случае с табо-пробелами я не вижу ни одной достойной причины
+делать жесткие переносы строк по какой-то длине!
+
+Возможно, я что-то упустил — тоже можно по этому поводу поспорить со мной в
+электропочте. Возможно, я даже поменяю мнение, но наврядли.
+
+## Update 06.04.25
+
+Как я и просил, один хороший человек, Владислав
+(https://t.me/c/1331521959/2285), написал ответ. Прокомментирую его здесь:
+
+> Мне есть что сказать про ширину таба и 80 символов.
+
+> Аргумент про разную ширину таба работает слабо: многие стили предполагают его
+> фиксированную длину. Если ставить другой, то форматирование ломается.
+
+> Пример: ядро Linux, где ширина таба 8, и аргументы функций "плывут" при другой
+> ширине.
+
+Я не единожды видел этот аргумент, но он как раз и кажется мне слабым. Большая
+ли разница для читающего код, как именно он его видит:
+
+```
+/ tabsize=2
+ func someFunc(
+ one,
+ two,
+ three,
+ )
+...
+ callOfSomeFunc = someFunc(
+ "one",
+ "two",
+ "three",
+ )
+```
+
+или так
+
+```
+/ tabsize=4
+ func someFunc(
+ one,
+ two,
+ three,
+ )
+...
+ callOfSomeFunc = someFunc(
+ "one",
+ "two",
+ "three",
+ )
+```
+
+или даже так
+
+```
+/ tabsize=8
+ func someFunc(
+ one,
+ two,
+ three,
+ )
+...
+ callOfSomeFunc = someFunc(
+ "one",
+ "two",
+ "three",
+ )
+```
+
+Кажется, что для 8 пробелов на таб всё сильно уезжает, но раз человек себе так
+настроил — то как будто его право и наверное были основания?
+
+> Про 80 символов. Дело вообще не в размере терминала или ширине перфокарты.
+> Некоторые программисты разделяют редактор на две вкладки, чтобы смотреть два
+> файла.
+
+И тогда soft-wrap как раз и вместит весь код в каждую из половинок без
+горизонтальной прокрутки, о чём я и говорю.
+
+> Некоторые используют большой шрифт. С шириной в 120 символов мы лишаем из
+> возможности удобно читать код. К тому же, я считаю этот аргумент важным, 120
+> символов - это способ замаскировать плохой код. Чувак сделал 5 уровней
+> вложенности в коде? Отлично! Главное чтобы в 120 символов влезло.
+
+Всё так! Возможно, я не очень подробно расписал, но основная моя мысль в том,
+что такое жесткое ограничение мне кажется просто надуманным и взятым с потолка.
+А если я после функции хочу написать небольшой коммент и он ну никак не влезает
+на пяток символов? Новую строку ради этого делать? Ну как-то бредово. А для
+указанного случая гораздо лучше бы звучало ограничение в стандарте типа «не
+используйте больше 3 уровней вложенности в коде». Это хотя бы имело вполне себе
+обоснование, то что скорее всего такой код просто архитектурно неверен и его
+стоит пересмотреть.
+
+> Конечно, можно сказать что есть длинные константы или имена функций, но этот
+> спор становится менее однозначным. Как по мне вполне хороший консенсус - это
+> 100 символов в строке
+
+Здесь не согласен. Здесь опять «магическая константа» с потолка.
+
+> В целом, эти срачи мне кажутся достаточно поверхностными. Они в своем корне
+> несут вопрос "как повысить читаемость кода?", но акцентируются на мелочах.
+
+Согласен. Мелочи. Но почему и бы про мелочи не поговорить :) Из них по
+отдельности всё и строится (избитая фраза, да). В больших стандартах обычно
+говорится просто декларативно «только пробелы, отступ 4 пробела, длина строк
+120» и всё. А зачем и почему — опускается, как будто всем всё и так понятно. Мне
+вот не очень. Чувствую себя ребёнком спрашивающим «Почему небо синее?». Потому
+что мне кажется, что под этим требованием нет объективного требования кроме «так
+принято». А «так принято» я часто и принимаю как валидный аргумент, например,
+когда прихожу в какой-то проект, но в сути своей аргументом не является.
+
+> Хотелось бы иметь какие-то объективные метрики, какая-то работа в этом
+> направлении была проделана, но, как я понял, это, во-первых, недостаточно
+> точные метрики, а во-вторых, недостаточно развитая история.
+> https://seeinglogic.com/posts/visual-readability-patterns/
+
+Интересная статья, спасибо, с удовольствием прочитал. В целом, по выводам
+(https://seeinglogic.com/posts/visual-readability-patterns/#8-patterns-for-improving-code-readability)
+согласен. Метрика по Хольстеду (или как это перевести?) выглядит интересно, тем
+что она чётко считается (хотя когда я руками считал, что-то у меня не сошлось с
+примером :) ).
+
+Из объективных метрик, тут вскользь ещё упоминалась цикломатическая сложность,
+которая вполне себе имеет право на жизнь.
+
+А так же, только что пришло в голову что можно читабельность кода оценивать как
+вторую (?) производную от отступов по непустым строкам. При этом, чем эта
+производная ближе к нулю — тем лучше.
+
+То есть, грубо говоря вот такой «код»:
+
+```
+_____
+ ________
+ _____
+ _______
+ ___
+ ___
+ _____
+ __
+ ____
+___
+```
+
+Лучше чем, такой:
+
+```
+_____
+ ________
+ _____
+ _______
+ ___
+ ___
+ _____
+ __
+ ____
+ ___
+```
+
+Это стоит ещё подумать, это буквально пришло в голову только что, пока читал
+статью.
+
+P.S.: Из забавного
+
+> As others have written, computers are fast and premature optimization is a bad
+> thing.
+
+Сначала они пишут «computers are fast» а потом происходит такое: [2]
+
+=> https://tonsky.me/blog/disenchantment/ru/ [2]
+
+## Update 06.04.25 - 2
+
+Со вчерашнего дня я решил дополнить немного ещё.
+
+Во-первых, хочу немного снизить градус холиворности и радикальности. Ещё раз
+упомяну что не вижу проблем для выравнивания пробелами текста внутри строки. То
+есть например, вот так:
+
+```
+→ → ConstWithLongName = 0
+→ → Const1 = 1
+→ → Const2 = 2
+→ → Const3 = 3
+```
+
+для меня вполне нормально кажется. Даже более того, табы _внутри_ строки кажутся
+плохим решением. Я говорю только про отступы в начале строки.
+
+Во-вторых, насчёт длинных строк. Я расписал немного сумбурно и в одну кашу
+смешал как код, так и просто текст. Не стоило так. Хоть это и разные сущности,
+но я всё равно считаю жесткое ограничение необоснованным ни там ни там. Но по
+разным причинам:
+
+- Для обычного текста ограничение в N символов выглядит таким же не обоснованым,
+ как, например, требование автора «Читайте мои тексты только шрифтом Arial
+ 12pt». Глупость? Глупость.
+- Так же встречал, что люди используют это ограничение при написании электронных
+ писем. Это выглядит как минимум странно. Письмо пишется для кого? Для
+ получателя, т.е. читателя. Почему отправитель за читателя решает то, как у
+ него будет отображаться письмо? Я часто читаю почту со смартфона с узким
+ экраном, но средним шрифтом (чтобы меньше напрягать глаза). И горизонтальная
+ прокрутка выглядит не очень. Горизонтальная прокрутка вообще почти всегда
+ выглядит не очень и её стоит избегать всеми силами.
+- Для кода же история другая. Я не настолько поехал чтобы требовать всё писать в
+ одну строку. Если у функции в сигнатуре много (больше одного - двух)
+ аргументов — то это отличная идея написать их в столбик, а не в длинную линию,
+ которая ещё неизвестно как перенесётся. Я против именно переноса только из-за
+ магической константы колиечества символов.
+
+Да и вообще я ни от кого ничего не требовал. Я предлагаю только задуматься, а
+обоснованны ли «общепринятые» вещи? Может, уже прошло какое-то время и ситуация
+поменялась и удобнее и эффективнее выбрать что-то другое?
+
+И как будто стоит абстрактному «читателю», к которому я отсылал, в этом посте,
+решать этот вопрос техническими средствами, типа editorconfig + pre-commit хуки
+на форматирование в принятый в команде формат? Возможно да. Иначе получится, что
+борясь за личную свободу — нарушаешь чужую свободу писать говнокод.
+
+А .editorconfig я себе такой в home положил:
+
+```.editorconfig
+[*]
+indent_style = tab
+tab_width = 4
+end_of_line = lf
+charset = utf-8
+trim_trailing_whitespace = true
+insert_final_newline = true
+soft_wrap = true
+
+[*.{yml,yaml}]
+indent_style = space
+indent_size = 2
+
+[*.json]
+indent_size = 2
+```
+
+Вроде как, покрывает основное.
diff --git a/content/posts/2025-05-19-nxpcms-2.md b/content/posts/2025-05-19-nxpcms-2.md
deleted file mode 100644
index b92a308..0000000
--- a/content/posts/2025-05-19-nxpcms-2.md
+++ /dev/null
@@ -1,19 +0,0 @@
----
-date: '2025-05-19T01:00:00+03:00'
-title: NXPCMS — моя CMS'ка (ч.2)
----
-
-Всё же, не могу не поделиться, какое же это счастье, когда пользуешься своим же
-самописным софтом!
-
-С одной стороны, конечно, когда видишь косячки — понимаешь, что это именно ты
-продолбался, и тебе это решать. А с другой стороны, полный контроль и ты
-понимаешь, _что_ пошло не так и _как_ это чинить!
-
-В дополнение предыдущего поста, про принципы системы, хочу добавить то, что
-сознательно не буду внедрять ни теги, ни категории. Вместо этого — обычное
-дерево файлов + в ближайшем плане полнотекстовый поиск по материалам сайта.
-А теги мне так и так казались какой-то порочной фигнёй.
-
-Вот и поделился радостью. Своя CMS располагает к тому, чтобы писать сюда больше
-и чаще ;)
diff --git a/content/posts/2025-05-19-nxpcms-2/index.md b/content/posts/2025-05-19-nxpcms-2/index.md
new file mode 100644
index 0000000..cc44c59
--- /dev/null
+++ b/content/posts/2025-05-19-nxpcms-2/index.md
@@ -0,0 +1,19 @@
+---
+date: "2025-05-19T01:00:00+03:00"
+title: NXPCMS — моя CMS'ка (ч.2)
+---
+
+Всё же, не могу не поделиться, какое же это счастье, когда пользуешься своим же
+самописным софтом!
+
+С одной стороны, конечно, когда видишь косячки — понимаешь, что это именно ты
+продолбался, и тебе это решать. А с другой стороны, полный контроль и ты
+понимаешь, _что_ пошло не так и _как_ это чинить!
+
+В дополнение предыдущего поста, про принципы системы, хочу добавить то, что
+сознательно не буду внедрять ни теги, ни категории. Вместо этого — обычное
+дерево файлов + в ближайшем плане полнотекстовый поиск по материалам сайта.
+А теги мне так и так казались какой-то порочной фигнёй.
+
+Вот и поделился радостью. Своя CMS располагает к тому, чтобы писать сюда больше
+и чаще ;)
diff --git a/content/posts/2025-05-19-nxpcms.md b/content/posts/2025-05-19-nxpcms.md
deleted file mode 100644
index d1d30e6..0000000
--- a/content/posts/2025-05-19-nxpcms.md
+++ /dev/null
@@ -1,77 +0,0 @@
----
-date: '2025-05-19T00:00:00+03:00'
-title: NXPCMS — моя CMS'ка (ч.1)
----
-
-Долгое время я пользовался Hugo (а одно время, даже WordPress!). И в целом, всем
-он меня устраивал. Но недавно, произошло, казалось бы не связанное. Я снова
-воспылал интересом к треккерной музыке. При этом я немного полазал по сети,
-поспрашивал знакомых и собрал достаточно большую (>80Гб!) коллекцию. Но просто
-хранить на диске было скучно и я решил её выложить во внешку. Так появился
-shelter.neonxp.ru (сейчас не работает, почему - объясню ниже).
-
-Сначала список файлов сервил в веб просто Caddy, но у него был недостаток: он не
-мог дать послушать треккерный файл без скачивания. Тогда я накидал простенькую
-программку, которая так же просто отдаёт содержимое директории, но позволяла
-слушать треккерную музыку. Через некоторое время я подумал, а почему бы не
-прикрутить к ней и предпросмотр и других файлов? Сказано-сделано. Прикрутил
-сначала просмотрщик markdown и txt файлов. Дальше, мысль полетела уже по
-накатанной, и подумалось мне, что это же простенькая CMS. В эту сторону проектик
-я и стал развивать. И вот вчера я таки перевёл этот сайт на мою собственную CMS!
-
-Но пишу только сейчас, потому что вчера после переезда уже ничего не хотел
-писать, ибо переезд был непрост. И как я уже выше говорил, пока отключил shelter
-в пользу этого сайта. Позже заведу и shelter. Особенности моей CMS:
-* минимум конфигурации: один бинарник, который при запуске сервит сайт из
- текущей рабочей директории.
-* структура сайта ~= файловая структура, отсюда и листинг файлов на каждой
- странице
-* нет какого-то общего файла конфигурации (аля /etc/...), вместо этого для
- каждой директории можно создать свой файл .config.json (формат hjson, на самом
- деле), который распространяет своё действие на текущую директорию, и на все
- вложенные. Вложенные директории могут иметь свои конфиги, которые могут или
- частично или полностью переопределять родительский конфиг. Например:
-```
-/var/www/neonxp.ru/.config.json
-
-{
- "title": "NeonXP.log",
- "description": "Личный сайт Go-разработчика из Казани",
- "index": [ "index.gmi", "index.md", "index.txt"],
- "url": "https://neonxp.ru/",
-}
-```
-а для директории постов важно, чтобы сортировка была в обратном порядке, поэтому
-её конфиг выглядит следующим образом:
-```
-/var/www/neonxp.ru/posts/.config.json
-
-{
- "description": "Блог", # <- перезапись родительского конфига
- "desc": true,
-}
-```
-Немного напоминает дедушку Apache2 с его .htaccess :) Но мне это кажется весьма
-удачной идеей.
-* Основной формат разметки — gemtext. Просто потому что мне он нравится своим
- радикальным минимализмом. Минималистично настолько, что его парсер в html для
- этой CMS я написал примерно за час с нуля.
-
-На самом деле, написать свою CMSку — достаточно старая мечта, и в своём прошлом,
-я неоднократно это делал, ещё на PHP (ну тогда это было модно). Ну и кто мне
-запретит сделать это сейчас, с теми идеями что я указал выше?) По факту
-получилось что-то среднее между веб-сервером аля Apache2 и классическими CMS, и
-мне это нравится.
-
-## Что дальше?
-
-А дальше я буду развивать её в сторону тех фич, что нужны лично мне:
-* Доделать миграцию постов и материалов из старого блога. Сейчас всё
- импортировано в автоматическом режиме и выглядит откровенно плохо
-* Поддержка предпросмотра большего числа форматов файлов
-* Хотелось бы сделать Basic авторизацию + загрузку файлов по http
-* Раз уж используется gemtext — сделать и поддержку gemini протокола
-* Прикрутить cgi или скрипты на lua? А почему-бы и нет? :) Хотя бы сделаю
- какую-нибудь олдскульную гостевуху
-* Прикрутить все эти клёвые indieweb штуки, которые было весьма проблемно
- прикрутить к Hugo блогу в силу его статичности
diff --git a/content/posts/2025-05-19-nxpcms/index.md b/content/posts/2025-05-19-nxpcms/index.md
new file mode 100644
index 0000000..11b8d53
--- /dev/null
+++ b/content/posts/2025-05-19-nxpcms/index.md
@@ -0,0 +1,84 @@
+---
+date: "2025-05-19T00:00:00+03:00"
+title: NXPCMS — моя CMS'ка (ч.1)
+---
+
+Долгое время я пользовался Hugo (а одно время, даже WordPress!). И в целом, всем
+он меня устраивал. Но недавно, произошло, казалось бы не связанное. Я снова
+воспылал интересом к треккерной музыке. При этом я немного полазал по сети,
+поспрашивал знакомых и собрал достаточно большую (>80Гб!) коллекцию. Но просто
+хранить на диске было скучно и я решил её выложить во внешку. Так появился
+shelter.neonxp.ru (сейчас не работает, почему - объясню ниже).
+
+Сначала список файлов сервил в веб просто Caddy, но у него был недостаток: он не
+мог дать послушать треккерный файл без скачивания. Тогда я накидал простенькую
+программку, которая так же просто отдаёт содержимое директории, но позволяла
+слушать треккерную музыку. Через некоторое время я подумал, а почему бы не
+прикрутить к ней и предпросмотр и других файлов? Сказано-сделано. Прикрутил
+сначала просмотрщик markdown и txt файлов. Дальше, мысль полетела уже по
+накатанной, и подумалось мне, что это же простенькая CMS. В эту сторону проектик
+я и стал развивать. И вот вчера я таки перевёл этот сайт на мою собственную CMS!
+
+Но пишу только сейчас, потому что вчера после переезда уже ничего не хотел
+писать, ибо переезд был непрост. И как я уже выше говорил, пока отключил shelter
+в пользу этого сайта. Позже заведу и shelter. Особенности моей CMS:
+
+- минимум конфигурации: один бинарник, который при запуске сервит сайт из
+ текущей рабочей директории.
+- структура сайта ~= файловая структура, отсюда и листинг файлов на каждой
+ странице
+- нет какого-то общего файла конфигурации (аля /etc/...), вместо этого для
+ каждой директории можно создать свой файл .config.json (формат hjson, на самом
+ деле), который распространяет своё действие на текущую директорию, и на все
+ вложенные. Вложенные директории могут иметь свои конфиги, которые могут или
+ частично или полностью переопределять родительский конфиг. Например:
+
+```
+/var/www/neonxp.ru/.config.json
+
+{
+ "title": "NeonXP.log",
+ "description": "Личный сайт Go-разработчика из Казани",
+ "index": [ "index.gmi", "index.md", "index.txt"],
+ "url": "https://neonxp.ru/",
+}
+```
+
+а для директории постов важно, чтобы сортировка была в обратном порядке, поэтому
+её конфиг выглядит следующим образом:
+
+```
+/var/www/neonxp.ru/posts/.config.json
+
+{
+ "description": "Блог", # <- перезапись родительского конфига
+ "desc": true,
+}
+```
+
+Немного напоминает дедушку Apache2 с его .htaccess :) Но мне это кажется весьма
+удачной идеей.
+
+- Основной формат разметки — gemtext. Просто потому что мне он нравится своим
+ радикальным минимализмом. Минималистично настолько, что его парсер в html для
+ этой CMS я написал примерно за час с нуля.
+
+На самом деле, написать свою CMSку — достаточно старая мечта, и в своём прошлом,
+я неоднократно это делал, ещё на PHP (ну тогда это было модно). Ну и кто мне
+запретит сделать это сейчас, с теми идеями что я указал выше?) По факту
+получилось что-то среднее между веб-сервером аля Apache2 и классическими CMS, и
+мне это нравится.
+
+## Что дальше?
+
+А дальше я буду развивать её в сторону тех фич, что нужны лично мне:
+
+- Доделать миграцию постов и материалов из старого блога. Сейчас всё
+ импортировано в автоматическом режиме и выглядит откровенно плохо
+- Поддержка предпросмотра большего числа форматов файлов
+- Хотелось бы сделать Basic авторизацию + загрузку файлов по http
+- Раз уж используется gemtext — сделать и поддержку gemini протокола
+- Прикрутить cgi или скрипты на lua? А почему-бы и нет? :) Хотя бы сделаю
+ какую-нибудь олдскульную гостевуху
+- Прикрутить все эти клёвые indieweb штуки, которые было весьма проблемно
+ прикрутить к Hugo блогу в силу его статичности
diff --git a/content/posts/2025-06-08-my-setup.md b/content/posts/2025-06-08-my-setup.md
deleted file mode 100644
index a4b6dc7..0000000
--- a/content/posts/2025-06-08-my-setup.md
+++ /dev/null
@@ -1,31 +0,0 @@
----
-date: '2025-06-08T00:00:00+03:00'
-tags:
-- сетап
-- гиковское
-title: Мой сетап 2025
----
-
-Давно ничего не писал, да и не было особо о чём. Немного играюсь с нейросетями и
-LLM в последнее время. Если выйдет что интересное - напишу об этом.
-
-А пока хотел написать вот о чём.
-
-Не помню, чтобы я когда-либо писал о том, какой у меня основной сетап, хотя сам
-с удовольствием читал о том, как он организован у других людей. Пожалуй, пришло
-время и мне его описать.
-
-
-
-- [Ноутбук](/pages/setup/laptop/)
-- [Смартфон](/pages/setup/pda/)
-- [NAS](/pages/setup/nas/)
-
-# Окончание
-
-Это всё что я вспомнил так сходу. По-любому, я что-то забыл, поэтому пост будет
-дополняться.
-
-# UPD [14.06.2025]
-
-[Пост переехал в постоянный раздел](/pages/setup/)
diff --git a/content/posts/2025-06-08-my-setup/index.md b/content/posts/2025-06-08-my-setup/index.md
new file mode 100644
index 0000000..6d99346
--- /dev/null
+++ b/content/posts/2025-06-08-my-setup/index.md
@@ -0,0 +1,20 @@
+---
+date: "2025-06-08T00:00:00+03:00"
+tags:
+ - сетап
+ - гиковское
+title: Мой сетап 2025
+---
+
+Давно ничего не писал, да и не было особо о чём. Немного играюсь с нейросетями и
+LLM в последнее время. Если выйдет что интересное - напишу об этом.
+
+А пока хотел написать вот о чём.
+
+Не помню, чтобы я когда-либо писал о том, какой у меня основной сетап, хотя сам
+с удовольствием читал о том, как он организован у других людей. Пожалуй, пришло
+время и мне его описать.
+
+
+
+[Пост переехал в постоянный раздел](/pages/setup/)
diff --git a/content/posts/2025-08-02-meshtastic.md b/content/posts/2025-08-02-meshtastic.md
deleted file mode 100644
index fad4394..0000000
--- a/content/posts/2025-08-02-meshtastic.md
+++ /dev/null
@@ -1,66 +0,0 @@
----
-cover: /posts/files/meshtastic_img/tbeam.webp
-date: '2025-08-02T18:00:00+03:00'
-tags:
-- meshatastic
-- гиковское
-title: Meshtastic
----
-
-Некоторое время назад наткнулся в блоге [Евгения
-Степанищева](https://bolknote.ru/all/myshastik/) на потрясающую штуку -
-[Meshtastic](https://meshtastic.org/), или как в народе её называют -
-«мышастик». Вкратце, это протокол и, в первую очередь, специальная прошивка для
-целого спектра устройств, которые позволяют организовать
-[mesh](https://ru.ruwiki.ru/wiki/%D0%AF%D1%87%D0%B5%D0%B8%D1%81%D1%82%D0%B0%D1%8F_%D1%82%D0%BE%D0%BF%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%8F)
-сеть поверх протокола [LoRa](https://ru.ruwiki.ru/wiki/LoRa).
-
-
-
-Базово, как это выглядит при использовании:
-
-У каждого участника сети есть небольшое портативное радиоустройство (готовое или
-самодельное - не важно), прошитое специальной прошивкой. К устройству, чаще
-всего (но необязательно!) подключен смартфон со специальным одноимённым
-приложением. Устройство ищет и старается подключиться к другим подобным
-устройствам, а со смартфона можно писать как в публичные, так и в приватные
-каналы. Но только текстом, т.к. скорость исчисляется байтами в секунду. При
-этом, хоть и радиус каждого устройства достаточно небольшой, но засчёт ячеистой
-топологии можно передавать сообщения не только тем, кто в радиусе приёма, но и
-тем, кого напрямую устройство «не видит», зато видят соседи или соседи соседей
-(в среднем, не больше 7 хопов обычно настраивают).
-
-Загоревшись, я тут же заказал себе
-[T-Beam](https://meshtastic.org/docs/hardware/devices/lilygo/tbeam/). Настройка
-оказалась до тупости простой, единственное, что надо учитывать, это то, какие
-частоты приняты в конкретном городе. Для Казани - это 868MHz.
-
-На своём 3D принтере напечатал ти-биму корпус, закрепил его на стену и оставил
-вылавливать ноды. За неделю накопилось почти 50 штук! Но при этом, я не скажу,
-что качество связи какое-то особо хорошее - регулярно теряются сообщения, да и
-единовременно у меня, по сути, только один аплинк до остальной сети. Ну ничего,
-я уже заказал антенну получше ;).
-
-
-
-Чехол всратоватый потому что я его печатал в наихудшем качестве, на
-неотрегулированном принтере. Главное - свою задачу защиты выполняет.
-
-Понятное дело, что это просто игрушка и никакого практического применения у неё
-нет, а в основном чате - бо́льшую часть времени сплошные «Пинг, меня слышно?».
-Но! Очень забавная игрушка. И да, теоретически может позволить экстренно
-связаться там, где другой сети просто нет. Просто, это не мой случай. Хотя,
-недавно оказался в ситуации, когда и электричества дома не было (а с ним и
-домашней сети) и одновременно была БПЛА опасность, а значит, никакущая мобильная
-сеть. То есть, практически, идеальные условия для мышастика :).
-
-Несмотря на это, я всё же не удержался и заказал ещё два устройства, но в этот
-раз попроще. Брошу один в машину, а второй или супруге отдам, или в рюкзаке
-носить буду носить. Буду своими скромными силами хоть немного, да расширять сеть
-своими устройствами.
-
-Так же ездил на стройку своего будущего дома с устройством, но, ожидаемо, там
-оно сеть не увидело. Значит буду думать или о высокой антенне на крыше, или ещё
-что выдумывать, чтобы из своих пердей «дотянуться» до большой городской сети.
-
-А к чему я про него рассказываю? А просто так. Забавная гиковская штука.
diff --git a/content/posts/2025-08-02-meshtastic/index.md b/content/posts/2025-08-02-meshtastic/index.md
new file mode 100644
index 0000000..40ef5a6
--- /dev/null
+++ b/content/posts/2025-08-02-meshtastic/index.md
@@ -0,0 +1,66 @@
+---
+cover: /posts/2025-08-02-meshtastic/tbeam.webp
+date: "2025-08-02T18:00:00+03:00"
+tags:
+ - meshatastic
+ - гиковское
+title: Meshtastic
+---
+
+Некоторое время назад наткнулся в блоге [Евгения
+Степанищева](https://bolknote.ru/all/myshastik/) на потрясающую штуку -
+[Meshtastic](https://meshtastic.org/), или как в народе её называют -
+«мышастик». Вкратце, это протокол и, в первую очередь, специальная прошивка для
+целого спектра устройств, которые позволяют организовать
+[mesh](https://ru.ruwiki.ru/wiki/%D0%AF%D1%87%D0%B5%D0%B8%D1%81%D1%82%D0%B0%D1%8F_%D1%82%D0%BE%D0%BF%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%8F)
+сеть поверх протокола [LoRa](https://ru.ruwiki.ru/wiki/LoRa).
+
+
+
+Базово, как это выглядит при использовании:
+
+У каждого участника сети есть небольшое портативное радиоустройство (готовое или
+самодельное - не важно), прошитое специальной прошивкой. К устройству, чаще
+всего (но необязательно!) подключен смартфон со специальным одноимённым
+приложением. Устройство ищет и старается подключиться к другим подобным
+устройствам, а со смартфона можно писать как в публичные, так и в приватные
+каналы. Но только текстом, т.к. скорость исчисляется байтами в секунду. При
+этом, хоть и радиус каждого устройства достаточно небольшой, но засчёт ячеистой
+топологии можно передавать сообщения не только тем, кто в радиусе приёма, но и
+тем, кого напрямую устройство «не видит», зато видят соседи или соседи соседей
+(в среднем, не больше 7 хопов обычно настраивают).
+
+Загоревшись, я тут же заказал себе
+[T-Beam](https://meshtastic.org/docs/hardware/devices/lilygo/tbeam/). Настройка
+оказалась до тупости простой, единственное, что надо учитывать, это то, какие
+частоты приняты в конкретном городе. Для Казани - это 868MHz.
+
+На своём 3D принтере напечатал ти-биму корпус, закрепил его на стену и оставил
+вылавливать ноды. За неделю накопилось почти 50 штук! Но при этом, я не скажу,
+что качество связи какое-то особо хорошее - регулярно теряются сообщения, да и
+единовременно у меня, по сути, только один аплинк до остальной сети. Ну ничего,
+я уже заказал антенну получше ;).
+
+
+
+Чехол всратоватый потому что я его печатал в наихудшем качестве, на
+неотрегулированном принтере. Главное - свою задачу защиты выполняет.
+
+Понятное дело, что это просто игрушка и никакого практического применения у неё
+нет, а в основном чате - бо́льшую часть времени сплошные «Пинг, меня слышно?».
+Но! Очень забавная игрушка. И да, теоретически может позволить экстренно
+связаться там, где другой сети просто нет. Просто, это не мой случай. Хотя,
+недавно оказался в ситуации, когда и электричества дома не было (а с ним и
+домашней сети) и одновременно была БПЛА опасность, а значит, никакущая мобильная
+сеть. То есть, практически, идеальные условия для мышастика :).
+
+Несмотря на это, я всё же не удержался и заказал ещё два устройства, но в этот
+раз попроще. Брошу один в машину, а второй или супруге отдам, или в рюкзаке
+носить буду носить. Буду своими скромными силами хоть немного, да расширять сеть
+своими устройствами.
+
+Так же ездил на стройку своего будущего дома с устройством, но, ожидаемо, там
+оно сеть не увидело. Значит буду думать или о высокой антенне на крыше, или ещё
+что выдумывать, чтобы из своих пердей «дотянуться» до большой городской сети.
+
+А к чему я про него рассказываю? А просто так. Забавная гиковская штука.
diff --git a/content/posts/2025-08-02-meshtastic/tbeam.jpg b/content/posts/2025-08-02-meshtastic/tbeam.jpg
new file mode 100644
index 0000000..214dc21
Binary files /dev/null and b/content/posts/2025-08-02-meshtastic/tbeam.jpg differ
diff --git a/content/posts/2025-08-02-meshtastic/tbeam.webp b/content/posts/2025-08-02-meshtastic/tbeam.webp
new file mode 100644
index 0000000..7e89d94
Binary files /dev/null and b/content/posts/2025-08-02-meshtastic/tbeam.webp differ
diff --git a/content/posts/2025-08-05-lets-code-3d.md b/content/posts/2025-08-05-lets-code-3d.md
deleted file mode 100644
index 3809861..0000000
--- a/content/posts/2025-08-05-lets-code-3d.md
+++ /dev/null
@@ -1,154 +0,0 @@
----
-cover: /posts/files/lets-code-3d_img/4.jpg
-date: '2025-08-05T20:00:00+03:00'
-tags:
-- 3D печать
-- гиковское
-title: Давай запрограммируем деталь?
----
-
-Некоторое время назад я по глупости запорол свои бокорезы, так, что для
-откусывания ножек радио деталей они больше не годятся. К счастью, стоят они
-совершенно не дорого, и тем же днём были заказанные новые в небезызвестном
-сервисе, который в девичестве содержал в себе название моего родного города. При
-получении я немного огорчился тем, что в комплекте к ним не шёл колпачок,
-который был у предыдущих, хотя выглядят они идентично.
-
-Штош. Я решил восполнить этот недостаток с интересом для себя и решил этот
-колпачок самостоятельно спроектировать и напечатать на 3D принтере, который есть
-у меня на хозяйстве.
-
-
-
- Бокорезы и
-колпачок
-
-## Проектирование
-
-Обычно, детали для печати проектируются в CAD программах твердотельного
-моделирования. Но я в них совершенно не умею, хотя и сын
-инженеров-конструкторов. Но зато, к счастью, я программист. И вроде, не самый
-худший! Посему, я решил воспользоваться свободной программой для твердотельного
-моделирования [OpenSCAD](https://openscad.org/). К счастью, в репозитории
-любимого дистрибутива (как, в прочем, и в большинстве других репозиториев) он
-присутствовал. Что же в нём необычного? А необычное в нём то, что деталь в нём
-не _рисуется_, а именно что _программируется_. Для понимания, приведу простой
-пример:
-
-```openscad
-cube([25,35,55]); // Нарисовать куб размерами 25мм х 25мм х 55мм
-```
-
-Просто? Очень! А учитывая что язык полноценный, с циклами и условиями
-«напрограммировать» в нём можно многое.
-
-## Первая версия
-
-Вот и я не стал долго думать, открыл [мануал с
-оффсайта](https://openscad.org/documentation.html), обмерил штангенциркулем
-оригинальный колпачок и пошёл проектировать программировать. На всё
-про всё у меня ушло где-то с полчаса. И у меня получилась первая версия
-колпачка. Максимально простая и дубовая. Первая куцая версия:
-
-
-
-## Вторая версия
-
-В принципе, на этом можно было и остановиться, ведь свою функцию он выполняет.
-Но у меня сработал мой перфекционист и я подумал, что было бы неплохо вырезы в
-корпусе сделать один под другим, а не на одной линии, чтобы бокорез сидел ровно,
-а не под углом. Потом пришла мысль, что было бы неплохо ещё и параметризировать
-модель, чтобы было легко менять её размеры, а не хардкодить их. И вот получилась
-вторая, и на текущий момент окончательная версия:
-
-
-
-И результат «в железе», то есть в пластике :)
-
-
-
-А сам код, думаю, он достаточно понятен ([исходники](/posts/files/source.scad) и
-[STL модель](/posts/files/result.stl) я прикладываю к этому посту):
-
-```openscad
-// Толщина стенки
-wall = 2;
-
-// Высота внешняя
-height = 12;
-
-// Длина основной части (внутренняя)
-l1 = 15;
-
-// Длина носика (внутренняя)
-l2 = 20;
-
-// Ширина у основания (внутренняя)
-w = 15;
-
-// Толщина метала бокорезов
-toolWidth = 2.1;
-
-// Нижняя крышка
-cover(0);
-
-// Верхняя крышка
-cover(height - wall);
-
-// Корпус
-difference() {
- linear_extrude(height)
- polygon(
- [ // Полигон идёт против часовой стрелки
- [0, 0],
- [wall, 0],
- [wall, l1],
- [w / 2 + wall, l1 + l2], // Внутренний кончик носика
- [w + wall, l1],
- [w + wall, 0],
- [w + wall * 2, 0],
- [w + wall * 2, l1],
- [w / 2 + wall / 2 + wall, l1 + l2 + wall], // Внешний кончик носика
- [w / 2 - wall / 2 + wall, l1 + l2 + wall],
- [0, l1],
- ]
- );
-
- // Вырезы
- translate([w + wall, 0, height / 2 - toolWidth]) // Правый вырез чуть ниже середины
- cube([wall, l1 / 2, toolWidth]);
- translate([0, 0, height / 2]) // Левый вырез чуть выше середины
- cube([wall, l1 / 2, toolWidth]);
-}
-
-
-// Крышка
-module cover(z) {
- translate([0, 0, z])
- linear_extrude(wall)
- polygon(
- [ // Полигон идёт против часовой стрелки
- [0, 0],
- [w + wall * 2, 0],
- [w + wall * 2, l1],
- [w / 2 + wall / 2 + wall, l1 + l2 + wall],
- [w / 2 - wall / 2 + wall, l1 + l2 + wall],
- [0, l1],
- ]
- );
-}
-```
-
-Надеюсь, я кому-то показал что даже без специального конструкторского
-образования, но умея программировать - можно получать не только эфимерные
-программки, но и вполне себе физические предметы, которые пригождаются в быту.
-И если интересно, подбиваю экономику: напечатано 2 колпачка (1 и 2 версия),
-каждый весом по 4 грамма, то есть примерно по 4₽ за штуку. Печатал пластиком
-PLA, как моим самым любимым.
-
-## Ссылки
-
-- Сайт OpenSCAD - https://openscad.org/
-- Документация - https://openscad.org/documentation.html
-- Шпаргала по функциям - https://openscad.org/cheatsheet/index.html
-- Библиотеки - https://openscad.org/libraries.html
diff --git a/content/posts/2025-08-05-lets-code-3d/1.jpg b/content/posts/2025-08-05-lets-code-3d/1.jpg
new file mode 100644
index 0000000..87f41e7
Binary files /dev/null and b/content/posts/2025-08-05-lets-code-3d/1.jpg differ
diff --git a/content/posts/2025-08-05-lets-code-3d/2.jpg b/content/posts/2025-08-05-lets-code-3d/2.jpg
new file mode 100644
index 0000000..db14947
Binary files /dev/null and b/content/posts/2025-08-05-lets-code-3d/2.jpg differ
diff --git a/content/posts/2025-08-05-lets-code-3d/3.png b/content/posts/2025-08-05-lets-code-3d/3.png
new file mode 100644
index 0000000..9887043
Binary files /dev/null and b/content/posts/2025-08-05-lets-code-3d/3.png differ
diff --git a/content/posts/2025-08-05-lets-code-3d/4.jpg b/content/posts/2025-08-05-lets-code-3d/4.jpg
new file mode 100644
index 0000000..4e7ebc7
Binary files /dev/null and b/content/posts/2025-08-05-lets-code-3d/4.jpg differ
diff --git a/content/posts/2025-08-05-lets-code-3d/index.md b/content/posts/2025-08-05-lets-code-3d/index.md
new file mode 100644
index 0000000..700c666
--- /dev/null
+++ b/content/posts/2025-08-05-lets-code-3d/index.md
@@ -0,0 +1,154 @@
+---
+cover: /posts/2025-08-05-lets-code-3d/4.jpg
+date: "2025-08-05T20:00:00+03:00"
+tags:
+ - 3D печать
+ - гиковское
+title: Давай запрограммируем деталь?
+---
+
+Некоторое время назад я по глупости запорол свои бокорезы, так, что для
+откусывания ножек радио деталей они больше не годятся. К счастью, стоят они
+совершенно не дорого, и тем же днём были заказанные новые в небезызвестном
+сервисе, который в девичестве содержал в себе название моего родного города. При
+получении я немного огорчился тем, что в комплекте к ним не шёл колпачок,
+который был у предыдущих, хотя выглядят они идентично.
+
+Штош. Я решил восполнить этот недостаток с интересом для себя и решил этот
+колпачок самостоятельно спроектировать и напечатать на 3D принтере, который есть
+у меня на хозяйстве.
+
+
+
+ Бокорезы и
+колпачок
+
+## Проектирование
+
+Обычно, детали для печати проектируются в CAD программах твердотельного
+моделирования. Но я в них совершенно не умею, хотя и сын
+инженеров-конструкторов. Но зато, к счастью, я программист. И вроде, не самый
+худший! Посему, я решил воспользоваться свободной программой для твердотельного
+моделирования [OpenSCAD](https://openscad.org/). К счастью, в репозитории
+любимого дистрибутива (как, в прочем, и в большинстве других репозиториев) он
+присутствовал. Что же в нём необычного? А необычное в нём то, что деталь в нём
+не _рисуется_, а именно что _программируется_. Для понимания, приведу простой
+пример:
+
+```openscad
+cube([25,35,55]); / Нарисовать куб размерами 25мм х 25мм х 55мм
+```
+
+Просто? Очень! А учитывая что язык полноценный, с циклами и условиями
+«напрограммировать» в нём можно многое.
+
+## Первая версия
+
+Вот и я не стал долго думать, открыл [мануал с
+оффсайта](https://openscad.org/documentation.html), обмерил штангенциркулем
+оригинальный колпачок и пошёл проектировать программировать. На всё
+про всё у меня ушло где-то с полчаса. И у меня получилась первая версия
+колпачка. Максимально простая и дубовая. Первая куцая версия:
+
+
+
+## Вторая версия
+
+В принципе, на этом можно было и остановиться, ведь свою функцию он выполняет.
+Но у меня сработал мой перфекционист и я подумал, что было бы неплохо вырезы в
+корпусе сделать один под другим, а не на одной линии, чтобы бокорез сидел ровно,
+а не под углом. Потом пришла мысль, что было бы неплохо ещё и параметризировать
+модель, чтобы было легко менять её размеры, а не хардкодить их. И вот получилась
+вторая, и на текущий момент окончательная версия:
+
+
+
+И результат «в железе», то есть в пластике :)
+
+
+
+А сам код, думаю, он достаточно понятен ([исходники](/posts/2025-08-05-lets-code-3d/source.scad) и
+[STL модель](/posts/2025-08-05-lets-code-3d/result.stl) я прикладываю к этому посту):
+
+```openscad
+/ Толщина стенки
+wall = 2;
+
+/ Высота внешняя
+height = 12;
+
+/ Длина основной части (внутренняя)
+l1 = 15;
+
+/ Длина носика (внутренняя)
+l2 = 20;
+
+/ Ширина у основания (внутренняя)
+w = 15;
+
+/ Толщина метала бокорезов
+toolWidth = 2.1;
+
+/ Нижняя крышка
+cover(0);
+
+/ Верхняя крышка
+cover(height - wall);
+
+/ Корпус
+difference() {
+ linear_extrude(height)
+ polygon(
+ [ / Полигон идёт против часовой стрелки
+ [0, 0],
+ [wall, 0],
+ [wall, l1],
+ [w / 2 + wall, l1 + l2], / Внутренний кончик носика
+ [w + wall, l1],
+ [w + wall, 0],
+ [w + wall * 2, 0],
+ [w + wall * 2, l1],
+ [w / 2 + wall / 2 + wall, l1 + l2 + wall], / Внешний кончик носика
+ [w / 2 - wall / 2 + wall, l1 + l2 + wall],
+ [0, l1],
+ ]
+ );
+
+ / Вырезы
+ translate([w + wall, 0, height / 2 - toolWidth]) / Правый вырез чуть ниже середины
+ cube([wall, l1 / 2, toolWidth]);
+ translate([0, 0, height / 2]) / Левый вырез чуть выше середины
+ cube([wall, l1 / 2, toolWidth]);
+}
+
+
+/ Крышка
+module cover(z) {
+ translate([0, 0, z])
+ linear_extrude(wall)
+ polygon(
+ [ / Полигон идёт против часовой стрелки
+ [0, 0],
+ [w + wall * 2, 0],
+ [w + wall * 2, l1],
+ [w / 2 + wall / 2 + wall, l1 + l2 + wall],
+ [w / 2 - wall / 2 + wall, l1 + l2 + wall],
+ [0, l1],
+ ]
+ );
+}
+```
+
+Надеюсь, я кому-то показал что даже без специального конструкторского
+образования, но умея программировать - можно получать не только эфимерные
+программки, но и вполне себе физические предметы, которые пригождаются в быту.
+И если интересно, подбиваю экономику: напечатано 2 колпачка (1 и 2 версия),
+каждый весом по 4 грамма, то есть примерно по 4₽ за штуку. Печатал пластиком
+PLA, как моим самым любимым.
+
+## Ссылки
+
+- Сайт OpenSCAD - https://openscad.org/
+- Документация - https://openscad.org/documentation.html
+- Шпаргала по функциям - https://openscad.org/cheatsheet/index.html
+- Библиотеки - https://openscad.org/libraries.html
diff --git a/content/posts/2025-08-05-lets-code-3d/lets-code-3d_result.stl b/content/posts/2025-08-05-lets-code-3d/lets-code-3d_result.stl
new file mode 100644
index 0000000..fdd4d19
Binary files /dev/null and b/content/posts/2025-08-05-lets-code-3d/lets-code-3d_result.stl differ
diff --git a/content/posts/2025-08-05-lets-code-3d/lets-code-3d_source.scad b/content/posts/2025-08-05-lets-code-3d/lets-code-3d_source.scad
new file mode 100644
index 0000000..b651cb3
--- /dev/null
+++ b/content/posts/2025-08-05-lets-code-3d/lets-code-3d_source.scad
@@ -0,0 +1,66 @@
+// Толщина стенки
+wall = 2;
+
+// Высота внешняя
+height = 12;
+
+// Длина основной части (внутренняя)
+l1 = 15;
+
+// Длина носика (внутренняя)
+l2 = 20;
+
+// Ширина у основания (внутренняя)
+w = 15;
+
+// Толщина метала бокорезов
+toolWidth = 2.1;
+
+// Нижняя крышка
+cover(0);
+
+// Верхняя крышка
+cover(height - wall);
+
+// Корпус
+difference() {
+ linear_extrude(height)
+ polygon(
+ [ // Полигон идёт против часовой стрелки
+ [0, 0],
+ [wall, 0],
+ [wall, l1],
+ [w / 2 + wall, l1 + l2], // Внутренний кончик носика
+ [w + wall, l1],
+ [w + wall, 0],
+ [w + wall * 2, 0],
+ [w + wall * 2, l1],
+ [w / 2 + wall / 2 + wall, l1 + l2 + wall], // Внешний кончик носика
+ [w / 2 - wall / 2 + wall, l1 + l2 + wall],
+ [0, l1],
+ ]
+ );
+
+ // Вырезы
+ translate([w + wall, 0, height / 2 - toolWidth]) // Правый вырез чуть ниже середины
+ cube([wall, l1 / 2, toolWidth]);
+ translate([0, 0, height / 2]) // Левый вырез чуть выше середины
+ cube([wall, l1 / 2, toolWidth]);
+}
+
+
+// Крышка
+module cover(z) {
+ translate([0, 0, z])
+ linear_extrude(wall)
+ polygon(
+ [ // Полигон идёт против часовой стрелки
+ [0, 0],
+ [w + wall * 2, 0],
+ [w + wall * 2, l1],
+ [w / 2 + wall / 2 + wall, l1 + l2 + wall],
+ [w / 2 - wall / 2 + wall, l1 + l2 + wall],
+ [0, l1],
+ ]
+ );
+}
diff --git a/content/posts/2025-08-09-makeup-organizer.md b/content/posts/2025-08-09-makeup-organizer.md
deleted file mode 100644
index b6a3feb..0000000
--- a/content/posts/2025-08-09-makeup-organizer.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-cover: /posts/files/makeup-organizer_img/2.png
-date: '2025-08-09T16:00:00+03:00'
-tags:
-- 3D печать
-- гиковское
-title: Ещё немного печати
----
-
-Я продолжаю погружаться в печать не просто готовых моделей из интернета, что не
-очень интересно, но так же и в проектирование и печать собственных изделий.
-Сегодня моя любимая супруга попросила напечатать ей органайзер для косметики.
-Показала референс, какой она хочет. ТЗ понятное, размеры подобрали, осталось
-дело за малым — непосредственно запрограммировать изделие.
-
-
-
-На практике, это пока самое сложное по детализации изделие из всех, что я делал.
-Код получился кривоватым, но рисует то, что нужно.
-
-Вот так результат в редакторе:
-
-
-
-А вот так в слайсере:
-
-
-
-Ну и впервые решил добавить «клеймо мастера» со своим логотипом. Впредь, буду
-добавлять его на все свои изделия, которые запроектированы именно мной.
-
-
-
-Фотографий готового изделия пока нет, ибо печататься ему ещё минимум 10 часов.
-Фото я приложу позже отдельным постом ;)
-
-**P.S.** [архив с исходниками и готовым для печати STL
-прилагаю](/posts/files/organizer.tar.zst)
diff --git a/content/posts/2025-08-09-makeup-organizer/1.png b/content/posts/2025-08-09-makeup-organizer/1.png
new file mode 100644
index 0000000..8f26704
Binary files /dev/null and b/content/posts/2025-08-09-makeup-organizer/1.png differ
diff --git a/content/posts/2025-08-09-makeup-organizer/2.png b/content/posts/2025-08-09-makeup-organizer/2.png
new file mode 100644
index 0000000..6613744
Binary files /dev/null and b/content/posts/2025-08-09-makeup-organizer/2.png differ
diff --git a/content/posts/2025-08-09-makeup-organizer/3.png b/content/posts/2025-08-09-makeup-organizer/3.png
new file mode 100644
index 0000000..993135e
Binary files /dev/null and b/content/posts/2025-08-09-makeup-organizer/3.png differ
diff --git a/content/posts/2025-08-09-makeup-organizer/index.md b/content/posts/2025-08-09-makeup-organizer/index.md
new file mode 100644
index 0000000..271b37d
--- /dev/null
+++ b/content/posts/2025-08-09-makeup-organizer/index.md
@@ -0,0 +1,38 @@
+---
+cover: /posts/2025-08-09-makeup-organizer/2.png
+date: "2025-08-09T16:00:00+03:00"
+tags:
+ - 3D печать
+ - гиковское
+title: Ещё немного печати
+---
+
+Я продолжаю погружаться в печать не просто готовых моделей из интернета, что не
+очень интересно, но так же и в проектирование и печать собственных изделий.
+Сегодня моя любимая супруга попросила напечатать ей органайзер для косметики.
+Показала референс, какой она хочет. ТЗ понятное, размеры подобрали, осталось
+дело за малым — непосредственно запрограммировать изделие.
+
+
+
+На практике, это пока самое сложное по детализации изделие из всех, что я делал.
+Код получился кривоватым, но рисует то, что нужно.
+
+Вот так результат в редакторе:
+
+
+
+А вот так в слайсере:
+
+
+
+Ну и впервые решил добавить «клеймо мастера» со своим логотипом. Впредь, буду
+добавлять его на все свои изделия, которые запроектированы именно мной.
+
+
+
+Фотографий готового изделия пока нет, ибо печататься ему ещё минимум 10 часов.
+Фото я приложу позже отдельным постом ;)
+
+**P.S.** [архив с исходниками и готовым для печати STL
+прилагаю](/posts/2025-08-09-makeup-organizer/organizer.tar.zst)
diff --git a/content/posts/2025-08-09-makeup-organizer/makeup-organizer_organizer.tar.zst b/content/posts/2025-08-09-makeup-organizer/makeup-organizer_organizer.tar.zst
new file mode 100644
index 0000000..7e2e2bb
Binary files /dev/null and b/content/posts/2025-08-09-makeup-organizer/makeup-organizer_organizer.tar.zst differ
diff --git a/content/posts/2025-09-01-travel-1.md b/content/posts/2025-09-01-travel-1.md
deleted file mode 100644
index 7d86c1f..0000000
--- a/content/posts/2025-09-01-travel-1.md
+++ /dev/null
@@ -1,142 +0,0 @@
----
-cover: /posts/files/2025-travel-1_img/preview_1.webp
-date: '2025-09-01T20:00:00+03:00'
-tags:
-- тревелблог
-title: 'Поездка по Кавказу. Часть 1: САО РАН и Аланское городище в Нижнем Архызе'
----
-
-[](/posts/files/2025-travel-1_img/1.webp)
-
-## САО РАН
-
-Первая настоящая вылазка за этот отпуск. В этот раз мы ездили снова на [САО РАН
-(Специальная Астрофизическая Обсерватория Российской Академии
-Наук)](https://ru.ruwiki.ru/wiki/Специальная_астрофизическая_обсерватория_РАН) в
-посёлке Нижний Архыз. В том году мы уже там бывали, но, во-первых, прикосновение
-к настоящей науке вдохновляет каждый раз, и я не знаю на какой бы раз мне туда
-надоело ездить. А, во-вторых, в этот раз был другой научный сотрудник, с
-совершенно другой лекцией, так что, скучать не пришлось! Кстати, этот телескоп —
-с самым большим в Евразии диаметром главного зеркала: аж 6 метров и весом в 42
-тонны! Высота купола — 53 метра, а высота самого телескопа в вертикальном
-положении (как на фото) — более 40 метров!
-
-
-
-
-
-[Место на
-карте](https://yandex.ru/maps/?l=sat%2Cskl&ll=41.440447%2C43.646825&pt=41.4404472%2C43.6468250&z=14)
-
-Дальше — небольшой фотоотчёт и расскажу о втором месте, где побывал.
-
-[](/posts/files/2025-travel-1_img/2.webp)
-
-Внезапная встреча
-
-[](/posts/files/2025-travel-1_img/3.webp)
-
-Стадо козочек и барашков
-
-[](/posts/files/2025-travel-1_img/4.webp)
-
-Купол САО
-
-[](/posts/files/2025-travel-1_img/5.webp)
-
-Обсерватория поменьше
-
-[](/posts/files/2025-travel-1_img/6.webp)
-
-Огромный кран, с помощью которого устанавливается зеркало
-
-[](/posts/files/2025-travel-1_img/7.webp)
-
-И вот он сам! Его величество — [БТА (Большой Телескоп
-Азимутальный)](мир интернет.
diff --git a/content/posts/2025-12-02-httpsocalypse/index.md b/content/posts/2025-12-02-httpsocalypse/index.md
new file mode 100644
index 0000000..c90a16c
--- /dev/null
+++ b/content/posts/2025-12-02-httpsocalypse/index.md
@@ -0,0 +1,31 @@
+---
+comments: true
+date: "2025-12-02"
+tags:
+ - размышления
+title: HTTPS и конец интернетов
+---
+
+[Let's Encrypt уменьшит срок действия сертификатов до 45
+дней.](https://www.opennet.ru/opennews/art.shtml?num=64363)
+
+А потом будет на неделю, на день, на запрос... Короче, да, по сути амерская
+конторка будет решать на какой сайт будет возможно зайти, а на какой нет. А то
+что хромые браузеры сделают невозможным заход на сайты без валидного
+(заверенного _кем надо_, конечно же) сертификата, я уже и не сомневаюсь.
+
+Во истину говорю вам: грядут последние дни интернета. Ну точнее WWW, если
+говорить конкретнее, но это уже душнилово.
+
+
+
+Но это не сильно то печаль. Интернет, всё равно, для большинства уже скукожился
+до двух десятков «сервисов». А для энтузиастов будут «свободные» браузеры,
+свободные не только с точки зрения кода, но и политики стран НАТО.
+
+К счастью, у нас есть Librewolf, Palemoon, Dilo, да Lynx наконец. Без
+интернета (окей, WWW) не останемся.
+
+Так же можно рассмотреть и альтернативные технологии типа gopher, gemini. Но
+это, как-нибудь, в другой раз. А пока запасаемся попкорном и смотрим как горит
+мир интернет.
diff --git a/content/posts/2025-12-21-sicktech.md b/content/posts/2025-12-21-sicktech.md
deleted file mode 100644
index 6a7428c..0000000
--- a/content/posts/2025-12-21-sicktech.md
+++ /dev/null
@@ -1,228 +0,0 @@
----
-comments: true
-cover: /posts/files/2025-12-21-sicktech.png
-date: '2025-12-21T18:40:26+03:00'
-tags:
-- it
-- размышления
-- sicktech
-- лонгрид
-title: Про здоровые и нездоровые технологии
----
-
-Я заметил, что часто стал в речи употреблять словосочетания «здоровая
-технология» или «нездоровая технология». Но при этом, я не задумывался о том, а
-что же именно это для меня значит, и как определить что есть здоровая, а что
-нездоровая технология. Я классифицировал исключительно интуитивно, исходя из
-принципа «я так чувствую».
-
-Но раз есть классификация, то должны быть и критерии. Так? Так. И критерии я
-опираясь на собственное ощущение, вроде как, нашёл.
-
-
-
-# Критерии
-
-Не буду сильно уходить в сторону, для меня основные критерий «здоровости» — то,
-предполагает ли технология сохранение у пользователя контроля над ней. Даже
-можно сказать более витиевато — превращает ли технология пользователя в
-потребителя?
-
-Это был первый критерий. И он же главный. Из него вытекают уже такие критерии
-как потенциальная познаваемость, ремонтопригодность, и даже, внезапно,
-надёжность и долговечность.
-
-# Примеры
-
-Пройдёмся немного по примерам. Начнём с «нездоровых» технологий и конкретных
-примеров.
-
-## Трактора John Deere
-
-
-
-Это достаточно известная история, про то, как производитель напрямую влияет на
-то, как пользователь пользуется своей собственностью. А именно, запрещал
-самостоятельный ремонт тракторов своего производства своим клиентом, кроме как с
-помощью «сертифицированного» специалиста. Здесь буквально прослеживается
-критерий превращения пользователя из обладателя собственности в потребителя в
-некотором роде услуги «владения трактором». Когда ты вроде и заплатил за него
-полную стоимость, но владеешь им на пол шишечки, ведь ты не имеешь права
-распоряжаться им так, как ты хочешь (например, самостоятельно ремонтировать, раз
-у тебя подходящая квалификация). Притом, что фермеры, в большинстве своём, или
-достаточно квалифицированны или могли бы найти такого квалифицированного
-человека поблизости, а не ждать дни, пока до них доберётся специалист и починит.
-
-[Подробная история](https://habr.com/ru/companies/itelma/articles/477638/)
-
-## Машины для мороженного в McDonalds
-
-
-
-Здесь примерно та же история, только чуть больше налёта монополии. Краткая суть
-в том, что владелец франшизы McDonalds принуждал своих франчайзи закупать
-исключительно конкретные машины конкретного производителя. Всё было бы не так
-плохо, если бы эти машины регулярно не ломались, а обслуживать их мог опять таки
-«сертифицированный» техник. Опять таки пользователь превращался в бесправного
-потребителя. Причём, можно было бы сказать, что это же хорошо, ведь пользователь
-только что-то сломает, но не сделает хорошо. Этот аргумент ломается об то, что
-как раз таки для этих машин предприимчивая пара людей начала производить
-устройство, которое делает этим машинам «jail-break» который затем позволял
-успешно чинить и эксплуатировать автоматы дальше. И ничего страшного не
-произошло! Во всяком случае, именно для пользователей. Производителю, конечно
-же, это не понравилось. И да, суды, давление монополиста и всё как мы любим.
-
-[Подробная история](https://habr.com/ru/articles/557746/)
-
-## BMW и некоторые другие автоконцерны
-
-
-
-Здесь немного другая история. Думаю, все и так слышали про эту историю, которая
-бы могла быть шуткой, но оказалась реальностью. Я говорю про _подписку_ на, мать
-его, подогрев сидений. Ну и другие опции, я не вдавался подробно, не люблю эту
-марку автомобилей. Можете хоть бить, хоть резать, но такое мне не влезает в
-голову! Человек _уже_ купил автомобиль и всё что в нём находится. В том числе и
-нагревательные элементы в креслах! Почему он _должен_ покупать право на
-включение устройства которое он и так купил? Я этому не вижу ни одного
-оправдания. Мне плевать на хотелки жирных баварских подсвинков и я обеими руками
-поддерживаю хакеров, которые [джейл-брейкают](https://habr.com/ru/news/678362/)
-в автомобилях эти функции!
-
-Так же [недавно были
-новости](https://www.gazeta.ru/auto/2025/12/03/22117009.shtml?utm_auth=true) про
-то, что владельцы других немецких автомобилей в России остались по сути с
-дорогой грудой металла.
-
-## Принтеры и их зачипованные картриджи
-
-Эта проблема известна всем владельцам принтеров. 99% (источник статистики: мой
-потолок) современных принтеров не будут печатать неродным картриджем или
-картриджем, в который залиты чернила или засыпан тонер повторно (т.к. никому,
-кроме производителя, не нужный чип на картридже сказал что картридж уже Б/У).
-
-## Apple
-
-Мне нужно пояснять? Думаю, нет. Хорошо хоть что железо у них достойное и
-достаточно надёжное, насколько я могу судить. Это хоть как-то оправдывает их
-право на существование.
-
-## Проприетарный софт
-
-Тоже в пояснениях не нуждается. Хуже только прориетарный софт от амеров.
-
-## <что-то> по подписке
-
-Как бы не было это удобно, но подписочная модель, по определению ставит
-пользователя раком в позу бесправного потребителя. И не надо мне
-писать про удобство игр, фильмов, музыки, книг «по подписке». Нет, это никогда
-не будет хорошим выбором. Никогда. А впрочем, я не склонен осуждать тех кто этим
-пользуется, если человек отдаёт себе отчёт в том что с одной стороны он ничем не
-владеет, а с другой стороны он во власти капиталистических свиней, которые и
-деньги за подписку возьмут и личные данные куда надо продадут. Тут уж каждый сам
-решает, или смотреть условный нетфликс пока ему добрый дядя разрешает, или
-покупать тоже самое с чуть меньшим удобством на _зелённом нетфликсе_.
-
-# А что делать-то?
-
-На самом деле, решение то весьма простое: нужно более сознательно подходить к
-выбору как софта, так и железа. Нужно стараться отвечать себе на вопрос «А что я
-буду делать, если производитель или поставщик вдруг исчезнет или решит, что не
-хочет иметь со мной дел?». В общем случае нужно выбирать то, что ремонтопригодно
-(а в случае софта — свободно), имеет в свободном доступе исчерпывающие
-документации и руководства, а так же независимых поставщиков запасных деталей и
-сервисного обслуживания. Так же, в идеале, если нет возможности вообще не
-зависеть от вендора, то выбирать всегда локального, то есть российского или, на
-худой конец, из дружественных стран типа РБ или КНР. Конечно, это не защитит от
-рисков что вендор исчезнет и оставит нас без поддержки, но сильно их сократит.
-Но опять же, это если без вендора ну совсем никак. И самое худшее что можно
-сделать — довериться вендорам стран НАТО. В этом случае это хорошая заявка на
-премию Дарвина, не иначе.
-
-Нужны примеры? Их есть у меня, даже из личного опыта:
-
-- Мой МФУ купленный сто лет назад до сих пор служит мне верой и правдой, потому
- что в своё время я озаботился тем, чтобы выбрать модель, которая выпущена
- ровно до конкретной даты и поддерживает неоригинальные картриджи, которые
- стоят три копейки и даже поддерживают самостоятельную засыпку тонера. А
- ремонтопригодность у него такая, что я буквально могу починить его или сам,
- или в ремонтной мастерской в моём доме.
-- Автомобиль. Мой автомобиль, конечно, технически сложное устройство и сам я в
- нём мало что починю. Но он и не настолько технически сложный, чтобы его не
- починили в произвольном, даже неавторизованном, сервисном центре. При этом, у
- него нет никакой зависимости от «облаков» и он полностью автономен в этом
- отношении и не зависит от воли производителя. А насколько мне известно, в
- стране более чем достаточно запасных частей и узлов для него. Так что,
- длительная эксплуатация не будет проблемой. Тем более уже более семи лет
- автомобилю и за это время он показал себя только с лучшей стороны.
-- Все художественные книги у меня в формате fb2, который не подразумевает
- поддержки DRM, а технические книги в формате PDF, который хоть и умеет вроде
- как в DRM, но я с ним не сталкивался в своей библиотеке. И да, у меня именно
- локальная библиотека продублированная на NAS и на резервный носитель.
-- Аналогично, музыка. Да, хоть и в большинстве своём в формате mp3, а не ogg
- (просто руки не доходят конвертнуть), но она именно локальная. На ноуте,
- телефоне и на флешке для прослушивания в автомобиле. И что в случае с
- музыкой, что в случае книг (а так же и сериалов и прочего) — я _точно_ знаю
- что само по себе, а точнее по воле какого-то «правообладателя», никуда не
- денется от меня. Точнее, сохранность лежит целиком в моих руках, а не чьих-то
- ещё.
-- Игры? Только те, что не подразумевают обязательной работы с интернетом, читай
- «игр-сервисов». Это или старьё типа старых Fallout, или свободные игры типа
- OpenTTD да Hedgewars. Так же у меня есть Nintendo Switch. Но у неё зарезан
- интернет и играю исключительно с физических картриджей, которые никуда не
- денутся. А чтобы не сломались — у меня есть [MigSwitch](https://migflash.ru/)
- и дампер картриджей для него.
-- Ноутбук? Тут сложнее. Я постарался взять самый ремонтопригодный ноутбук из
- доступных мне, с самым большим запасом прочности, чтобы служил мне не менее
- десятилетия. Но тут без гарантий. Поэтому, если критерий долгосрочной
- доступности сервиса для вас критичен, можно рассмотреть местных
- производителей, которые хотя бы не исчезнут с рынка в результате геополитики и
- не оставят нас без сервисного обслуживания. Например, ICL. Сам не проверял,
- это только мысли.
-- E-mail. Самая здоровая технология для коммуникации. Во-первых,
- децентрализованная, во-вторых, полностью открытая и свободная. В-третьих,
- асинхронная и дающая мне возможность читать и отвечать на неё когда именно мне
- удобно. А я такое очень ценю. Да, в современном мире чаты и синхронное общение
- неизбежны, но я не делаю на них большую ставку и если, а точнее, когда
- очередной мессенджер помрёт или будет заблокирован, для меня это не будет
- трагедией, потому что я и не жду от них что они будут со мной всегда. Ну,
- окей, jabber и irc — это тоже здоровые технологии, только ими почти никто не
- пользуется. А для голосового общения есть свободные SIP да Mumble. Но ими тоже
- пользуется полтора калеки. Вообще, про коммуникации, наверное, стоит будет
- написать подробнее потом, тема очень обширная.
-- Всегда, когда возможно, выбираю именно лицензированное под GPL. Не MIT или
- Apache. А именно GPL. Но здесь, скорее вкусовщина.
-
-Примеров здоровых технологий меньше и они меньше описаны, но это сознательно. Я
-собираюсь в дальнейшем, отдельными постами писать именно преимущественно о них,
-а тему «нездоровых» касаться сильно меньше. Поэтому нездоровые расписал сразу,
-чтобы больше особо не возвращаться.
-
-# Вместо заключения
-
-Надеюсь, я смог дать хотя бы примерное представление о том, что я считаю
-«здоровыми» и «нездоровыми» технологиями. Ожидаю ли я что люди когда-нибудь
-поумнеют и начнут использовать исключительно здоровые технологии? Да нет
-конечно. Здесь каждый сам кузнец собственного счастья.
-
-Я хотел ещё много что написать как примеры здоровых и нездоровых технологий, но
-тогда я бы пост бы не выпустил примерно никогда, так как тема бесконечная.
-
-Если есть желание, предлагаю обсудить со мной пост или по
-[e-mail](mailto:i@neonxp.ru) или там, где вы можете достичь меня. Позже в этом
-блоге, я всё же сделаю удобные комментарии, но это совсем другая история.
-
-А напоследок я хочу дать несколько ссылок в тему:
-
-- [Очень хороший набор примеров «вредных» и «менее вредных» вещей от Сергея
- Матвеева](http://www.stargrave.org/Harmful.html). В принципе, это примерно те
- же «нездоровые» и «здоровые» технологии. В целом, почти со всем я согласен, а
- поэтому могу рекомендовать список как даже некоторое руководство по выбору
- «здоровых» технологий.
-- [Пост на французском про «низкие
- технологии»](https://ploum.net/2025-05-16-manifeste-lowtech.html) — тоже на
- очень близкую тему.
-
-Если есть схожие по теме материалы — не стесняйтесь советовать, тема для меня
-интересная, с удовольствием ознакомлюсь. А сам её продолжу, возможно, уже на
-следующей неделе!
diff --git a/content/posts/2025-12-21-sicktech/files/img1.jpg b/content/posts/2025-12-21-sicktech/files/img1.jpg
new file mode 100644
index 0000000..2dd29f9
Binary files /dev/null and b/content/posts/2025-12-21-sicktech/files/img1.jpg differ
diff --git a/content/posts/2025-12-21-sicktech/files/img2.jpg b/content/posts/2025-12-21-sicktech/files/img2.jpg
new file mode 100644
index 0000000..0ea8467
Binary files /dev/null and b/content/posts/2025-12-21-sicktech/files/img2.jpg differ
diff --git a/content/posts/2025-12-21-sicktech/files/img3.png b/content/posts/2025-12-21-sicktech/files/img3.png
new file mode 100644
index 0000000..3e41caf
Binary files /dev/null and b/content/posts/2025-12-21-sicktech/files/img3.png differ
diff --git a/content/posts/2025-12-21-sicktech/files/sicktech.png b/content/posts/2025-12-21-sicktech/files/sicktech.png
new file mode 100644
index 0000000..32c7b9f
Binary files /dev/null and b/content/posts/2025-12-21-sicktech/files/sicktech.png differ
diff --git a/content/posts/2025-12-21-sicktech/index.md b/content/posts/2025-12-21-sicktech/index.md
new file mode 100644
index 0000000..78ee618
--- /dev/null
+++ b/content/posts/2025-12-21-sicktech/index.md
@@ -0,0 +1,228 @@
+---
+comments: true
+cover: /posts/2025-12-21-sicktech/files/sicktech.png
+date: "2025-12-21T18:40:26+03:00"
+tags:
+ - it
+ - размышления
+ - sicktech
+ - лонгрид
+title: Про здоровые и нездоровые технологии
+---
+
+Я заметил, что часто стал в речи употреблять словосочетания «здоровая
+технология» или «нездоровая технология». Но при этом, я не задумывался о том, а
+что же именно это для меня значит, и как определить что есть здоровая, а что
+нездоровая технология. Я классифицировал исключительно интуитивно, исходя из
+принципа «я так чувствую».
+
+Но раз есть классификация, то должны быть и критерии. Так? Так. И критерии я
+опираясь на собственное ощущение, вроде как, нашёл.
+
+
+
+# Критерии
+
+Не буду сильно уходить в сторону, для меня основные критерий «здоровости» — то,
+предполагает ли технология сохранение у пользователя контроля над ней. Даже
+можно сказать более витиевато — превращает ли технология пользователя в
+потребителя?
+
+Это был первый критерий. И он же главный. Из него вытекают уже такие критерии
+как потенциальная познаваемость, ремонтопригодность, и даже, внезапно,
+надёжность и долговечность.
+
+# Примеры
+
+Пройдёмся немного по примерам. Начнём с «нездоровых» технологий и конкретных
+примеров.
+
+## Трактора John Deere
+
+
+
+Это достаточно известная история, про то, как производитель напрямую влияет на
+то, как пользователь пользуется своей собственностью. А именно, запрещал
+самостоятельный ремонт тракторов своего производства своим клиентом, кроме как с
+помощью «сертифицированного» специалиста. Здесь буквально прослеживается
+критерий превращения пользователя из обладателя собственности в потребителя в
+некотором роде услуги «владения трактором». Когда ты вроде и заплатил за него
+полную стоимость, но владеешь им на пол шишечки, ведь ты не имеешь права
+распоряжаться им так, как ты хочешь (например, самостоятельно ремонтировать, раз
+у тебя подходящая квалификация). Притом, что фермеры, в большинстве своём, или
+достаточно квалифицированны или могли бы найти такого квалифицированного
+человека поблизости, а не ждать дни, пока до них доберётся специалист и починит.
+
+[Подробная история](https://habr.com/ru/companies/itelma/articles/477638/)
+
+## Машины для мороженного в McDonalds
+
+
+
+Здесь примерно та же история, только чуть больше налёта монополии. Краткая суть
+в том, что владелец франшизы McDonalds принуждал своих франчайзи закупать
+исключительно конкретные машины конкретного производителя. Всё было бы не так
+плохо, если бы эти машины регулярно не ломались, а обслуживать их мог опять таки
+«сертифицированный» техник. Опять таки пользователь превращался в бесправного
+потребителя. Причём, можно было бы сказать, что это же хорошо, ведь пользователь
+только что-то сломает, но не сделает хорошо. Этот аргумент ломается об то, что
+как раз таки для этих машин предприимчивая пара людей начала производить
+устройство, которое делает этим машинам «jail-break» который затем позволял
+успешно чинить и эксплуатировать автоматы дальше. И ничего страшного не
+произошло! Во всяком случае, именно для пользователей. Производителю, конечно
+же, это не понравилось. И да, суды, давление монополиста и всё как мы любим.
+
+[Подробная история](https://habr.com/ru/articles/557746/)
+
+## BMW и некоторые другие автоконцерны
+
+
+
+Здесь немного другая история. Думаю, все и так слышали про эту историю, которая
+бы могла быть шуткой, но оказалась реальностью. Я говорю про _подписку_ на, мать
+его, подогрев сидений. Ну и другие опции, я не вдавался подробно, не люблю эту
+марку автомобилей. Можете хоть бить, хоть резать, но такое мне не влезает в
+голову! Человек _уже_ купил автомобиль и всё что в нём находится. В том числе и
+нагревательные элементы в креслах! Почему он _должен_ покупать право на
+включение устройства которое он и так купил? Я этому не вижу ни одного
+оправдания. Мне плевать на хотелки жирных баварских подсвинков и я обеими руками
+поддерживаю хакеров, которые [джейл-брейкают](https://habr.com/ru/news/678362/)
+в автомобилях эти функции!
+
+Так же [недавно были
+новости](https://www.gazeta.ru/auto/2025/12/03/22117009.shtml?utm_auth=true) про
+то, что владельцы других немецких автомобилей в России остались по сути с
+дорогой грудой металла.
+
+## Принтеры и их зачипованные картриджи
+
+Эта проблема известна всем владельцам принтеров. 99% (источник статистики: мой
+потолок) современных принтеров не будут печатать неродным картриджем или
+картриджем, в который залиты чернила или засыпан тонер повторно (т.к. никому,
+кроме производителя, не нужный чип на картридже сказал что картридж уже Б/У).
+
+## Apple
+
+Мне нужно пояснять? Думаю, нет. Хорошо хоть что железо у них достойное и
+достаточно надёжное, насколько я могу судить. Это хоть как-то оправдывает их
+право на существование.
+
+## Проприетарный софт
+
+Тоже в пояснениях не нуждается. Хуже только прориетарный софт от амеров.
+
+## <что-то> по подписке
+
+Как бы не было это удобно, но подписочная модель, по определению ставит
+пользователя раком в позу бесправного потребителя. И не надо мне
+писать про удобство игр, фильмов, музыки, книг «по подписке». Нет, это никогда
+не будет хорошим выбором. Никогда. А впрочем, я не склонен осуждать тех кто этим
+пользуется, если человек отдаёт себе отчёт в том что с одной стороны он ничем не
+владеет, а с другой стороны он во власти капиталистических свиней, которые и
+деньги за подписку возьмут и личные данные куда надо продадут. Тут уж каждый сам
+решает, или смотреть условный нетфликс пока ему добрый дядя разрешает, или
+покупать тоже самое с чуть меньшим удобством на _зелённом нетфликсе_.
+
+# А что делать-то?
+
+На самом деле, решение то весьма простое: нужно более сознательно подходить к
+выбору как софта, так и железа. Нужно стараться отвечать себе на вопрос «А что я
+буду делать, если производитель или поставщик вдруг исчезнет или решит, что не
+хочет иметь со мной дел?». В общем случае нужно выбирать то, что ремонтопригодно
+(а в случае софта — свободно), имеет в свободном доступе исчерпывающие
+документации и руководства, а так же независимых поставщиков запасных деталей и
+сервисного обслуживания. Так же, в идеале, если нет возможности вообще не
+зависеть от вендора, то выбирать всегда локального, то есть российского или, на
+худой конец, из дружественных стран типа РБ или КНР. Конечно, это не защитит от
+рисков что вендор исчезнет и оставит нас без поддержки, но сильно их сократит.
+Но опять же, это если без вендора ну совсем никак. И самое худшее что можно
+сделать — довериться вендорам стран НАТО. В этом случае это хорошая заявка на
+премию Дарвина, не иначе.
+
+Нужны примеры? Их есть у меня, даже из личного опыта:
+
+- Мой МФУ купленный сто лет назад до сих пор служит мне верой и правдой, потому
+ что в своё время я озаботился тем, чтобы выбрать модель, которая выпущена
+ ровно до конкретной даты и поддерживает неоригинальные картриджи, которые
+ стоят три копейки и даже поддерживают самостоятельную засыпку тонера. А
+ ремонтопригодность у него такая, что я буквально могу починить его или сам,
+ или в ремонтной мастерской в моём доме.
+- Автомобиль. Мой автомобиль, конечно, технически сложное устройство и сам я в
+ нём мало что починю. Но он и не настолько технически сложный, чтобы его не
+ починили в произвольном, даже неавторизованном, сервисном центре. При этом, у
+ него нет никакой зависимости от «облаков» и он полностью автономен в этом
+ отношении и не зависит от воли производителя. А насколько мне известно, в
+ стране более чем достаточно запасных частей и узлов для него. Так что,
+ длительная эксплуатация не будет проблемой. Тем более уже более семи лет
+ автомобилю и за это время он показал себя только с лучшей стороны.
+- Все художественные книги у меня в формате fb2, который не подразумевает
+ поддержки DRM, а технические книги в формате PDF, который хоть и умеет вроде
+ как в DRM, но я с ним не сталкивался в своей библиотеке. И да, у меня именно
+ локальная библиотека продублированная на NAS и на резервный носитель.
+- Аналогично, музыка. Да, хоть и в большинстве своём в формате mp3, а не ogg
+ (просто руки не доходят конвертнуть), но она именно локальная. На ноуте,
+ телефоне и на флешке для прослушивания в автомобиле. И что в случае с
+ музыкой, что в случае книг (а так же и сериалов и прочего) — я _точно_ знаю
+ что само по себе, а точнее по воле какого-то «правообладателя», никуда не
+ денется от меня. Точнее, сохранность лежит целиком в моих руках, а не чьих-то
+ ещё.
+- Игры? Только те, что не подразумевают обязательной работы с интернетом, читай
+ «игр-сервисов». Это или старьё типа старых Fallout, или свободные игры типа
+ OpenTTD да Hedgewars. Так же у меня есть Nintendo Switch. Но у неё зарезан
+ интернет и играю исключительно с физических картриджей, которые никуда не
+ денутся. А чтобы не сломались — у меня есть [MigSwitch](https://migflash.ru/)
+ и дампер картриджей для него.
+- Ноутбук? Тут сложнее. Я постарался взять самый ремонтопригодный ноутбук из
+ доступных мне, с самым большим запасом прочности, чтобы служил мне не менее
+ десятилетия. Но тут без гарантий. Поэтому, если критерий долгосрочной
+ доступности сервиса для вас критичен, можно рассмотреть местных
+ производителей, которые хотя бы не исчезнут с рынка в результате геополитики и
+ не оставят нас без сервисного обслуживания. Например, ICL. Сам не проверял,
+ это только мысли.
+- E-mail. Самая здоровая технология для коммуникации. Во-первых,
+ децентрализованная, во-вторых, полностью открытая и свободная. В-третьих,
+ асинхронная и дающая мне возможность читать и отвечать на неё когда именно мне
+ удобно. А я такое очень ценю. Да, в современном мире чаты и синхронное общение
+ неизбежны, но я не делаю на них большую ставку и если, а точнее, когда
+ очередной мессенджер помрёт или будет заблокирован, для меня это не будет
+ трагедией, потому что я и не жду от них что они будут со мной всегда. Ну,
+ окей, jabber и irc — это тоже здоровые технологии, только ими почти никто не
+ пользуется. А для голосового общения есть свободные SIP да Mumble. Но ими тоже
+ пользуется полтора калеки. Вообще, про коммуникации, наверное, стоит будет
+ написать подробнее потом, тема очень обширная.
+- Всегда, когда возможно, выбираю именно лицензированное под GPL. Не MIT или
+ Apache. А именно GPL. Но здесь, скорее вкусовщина.
+
+Примеров здоровых технологий меньше и они меньше описаны, но это сознательно. Я
+собираюсь в дальнейшем, отдельными постами писать именно преимущественно о них,
+а тему «нездоровых» касаться сильно меньше. Поэтому нездоровые расписал сразу,
+чтобы больше особо не возвращаться.
+
+# Вместо заключения
+
+Надеюсь, я смог дать хотя бы примерное представление о том, что я считаю
+«здоровыми» и «нездоровыми» технологиями. Ожидаю ли я что люди когда-нибудь
+поумнеют и начнут использовать исключительно здоровые технологии? Да нет
+конечно. Здесь каждый сам кузнец собственного счастья.
+
+Я хотел ещё много что написать как примеры здоровых и нездоровых технологий, но
+тогда я бы пост бы не выпустил примерно никогда, так как тема бесконечная.
+
+Если есть желание, предлагаю обсудить со мной пост или по
+[e-mail](mailto:i@neonxp.ru) или там, где вы можете достичь меня. Позже в этом
+блоге, я всё же сделаю удобные комментарии, но это совсем другая история.
+
+А напоследок я хочу дать несколько ссылок в тему:
+
+- [Очень хороший набор примеров «вредных» и «менее вредных» вещей от Сергея
+ Матвеева](http:/www.stargrave.org/Harmful.html). В принципе, это примерно те
+ же «нездоровые» и «здоровые» технологии. В целом, почти со всем я согласен, а
+ поэтому могу рекомендовать список как даже некоторое руководство по выбору
+ «здоровых» технологий.
+- [Пост на французском про «низкие
+ технологии»](https://ploum.net/2025-05-16-manifeste-lowtech.html) — тоже на
+ очень близкую тему.
+
+Если есть схожие по теме материалы — не стесняйтесь советовать, тема для меня
+интересная, с удовольствием ознакомлюсь. А сам её продолжу, возможно, уже на
+следующей неделе!
diff --git a/content/posts/2025-12-23-comments.md b/content/posts/2025-12-23-comments.md
deleted file mode 100644
index 9a82612..0000000
--- a/content/posts/2025-12-23-comments.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-comments: true
-date: '2025-12-23T21:22:57+03:00'
-tags:
-- блог
-title: Появились комментарии в блоге
----
-
-Наконец-то сделал комментарии в этом блоге. Да, максимально по гиковски. Просто
-через отправку e-mail на адрес специального бота. Потом, для удобства наверное
-придумаю и другим способом. А может и так оставлю, ведь e-mail самый лучший и
-самый универсальный способ связи, как ни крути.
diff --git a/content/posts/2025-12-23-comments/index.md b/content/posts/2025-12-23-comments/index.md
new file mode 100644
index 0000000..9a82612
--- /dev/null
+++ b/content/posts/2025-12-23-comments/index.md
@@ -0,0 +1,12 @@
+---
+comments: true
+date: '2025-12-23T21:22:57+03:00'
+tags:
+- блог
+title: Появились комментарии в блоге
+---
+
+Наконец-то сделал комментарии в этом блоге. Да, максимально по гиковски. Просто
+через отправку e-mail на адрес специального бота. Потом, для удобства наверное
+придумаю и другим способом. А может и так оставлю, ведь e-mail самый лучший и
+самый универсальный способ связи, как ни крути.
diff --git a/content/posts/2025-12-24-email.md b/content/posts/2025-12-24-email.md
deleted file mode 100644
index a4011d3..0000000
--- a/content/posts/2025-12-24-email.md
+++ /dev/null
@@ -1,99 +0,0 @@
----
-comments: true
-date: '2025-12-24T21:00:22+03:00'
-tags:
-- разное
-- sicktech
-title: Почему я люблю e-mail?
----
-
-Я действительно очень люблю старую-добрую электронную почту. И вот почему.
-
-
-
-Во-первых, как и всё, что делалось в раннее время Интернета — e-mail достаточно
-простая и открытая технология. А я очень ценю и то и то. В простой и открытой
-технологии _возможно_ разобраться, в отличие от закрытых проприетарных систем.
-
-Во-вторых, она действительно децентрализованная, а значит отвечает духу того,
-как проектировался Интернет ещё до того, как корпорации захватили его и
-подчинили своей монополии. Если оглянуться шире — многие ранние технологии
-интернета так же децентрализованные. Например, WWW, DNS, внезапно, IRC, XMPP...
-Да много примеров. Ещё мне приходит в голову GIT, который спроектирован так,
-что может работать поверх, практически, чего угодно! И да, в том числе, даже
-поверх просто e-mail!
-
-В-третьих, она достаточно универсальна. По факту, e-mail это просто контейнер,
-внутри которого можно положить практиески что угодно. Например, то что из себя
-обычно представляет письмо — это или обычный текстовый файл (plaintext) или HTML
-страничка (это более распространённые письма которые содержат богатую разметку).
-Так же в том же письме могут быть приложены используемые в нём картинки, или,
-например, файл содержащий приглашение на определённое событие в формате iCal.
-И в последнем случае, наверняка, почтовая программа корректно обработает этот
-файл и добавит событие в календарь. А так же, если пользователь решит принять
-или отклонить приглашение, ответ уйдёт так же по e-mail. Что интересно, в какой
-бы корпорации я не работал, именно так и работает система событий и календари.
-
-В-четвёртых, и это для меня самое главное. Почта, в отличие от всяких разных
-мессенджеров, не предполагает синхронного общения! А это значит что? Что у меня
-есть прорва времени чтобы _неторопясь_ в комфортном для меня режиме собраться с
-мыслями, неторопясь аккуратно написать письмо. Проверить. Перепроверить. Ещё
-подумать. И только после этого направить адресату. И выбросить из головы.
-
-Я человек в принципе неторопливый, и это меня устраивает гораздо больше, чем
-незримое эмоциональное давление от осознания того, что мой собеседник _видит_ в
-мессенджере что я уже прочитал его сообщение и ждёт ответа. А тянуть при этом и
-задерживать человека очень не хочется. Это НЕ комфортно.
-
-Мне такое неторопливое общение кажется очень и очень уютным. По этой же причине,
-мне так сильно импонирует вести обычный классический текстовый блог, когда более
-модно вести условный телеграм канал. Канал то у меня тоже есть, но он или для
-уведомлений о новых записях блога, или для совсем уж быстрых коротких заметок.
-
-Конечно, я не сумасшедший, и понимаю что есть множество вопросов, которые
-действительно требуют и быстрого ответа и синхронного общения. Конечно же, в
-таком случае использовать почту только потому что это почта — глупо и
-нерационально. Здесь я не буду спорить. Всё так.
-
-Но общение — это гораздо более широкое понятие, и оно может быть _разным_. И
-если есть возможность — я предпочту комфортное общение без психолгоического и
-эмоционального давления.
-
-# Немного про другие коммуникации
-
-И да, в контексте, [предпредыдущего поста](/posts/2025-12-21-sicktech/), e-mail
-— это однозначно «здоровая технология». Но не единственная. Раз уж немного
-отклонился в сторону, приведу из этой же области ещё немного «здоровых» из
-области коммуникаций:
-
-- [IRC](https://ru.ruwiki.ru/wiki/IRC) — радикальная простота протокола,
- универсальность и распределённость. А в последнее время даже пытается ожить с
- новой версией [IRCv3](https://ircv3.net/).
-- [Jabber](https://ru.ruwiki.ru/wiki/XMPP) — уже не так просто, зато так же
- открыто и децентрализованно. Так же, в последние годы обрёл второе дыхание и
- развивается.
-- [Mumble](https://ru.ruwiki.ru/wiki/Mumble) — свободный голосовой чат. Имеет
- отличное качество звука при очень низкой задержке и потрелении трафика.
-
-Это далеко не исчерпывающий список, но он по факту покрывает основные
-потребности в коммуникации.
-
-## И снова про e-mail и внезапная экономия там, где её не ждёшь
-
-Возращаясь к e-mail, я написал этот пост не как призыв всем всё бросить и писать
-только письма, а только как напоминание, что такой инструмент есть (и есть по
-факту почти у всех!) и нужно не забывать о нём и использовать тогда, когда он
-уместен.
-
-Шутка про то, что «Эту часовую встречу можно было заменить просто одним емейлом»
-— далеко не шутка, и очень часто так и есть. Таким образом, в некотором роде,
-даже учитывая общий неторопливый стиль переписки — она, внезапно, может и помочь
-сэкономить время! Не самый очевидный вывод, но так и есть.
-
-И да, постарайтесь не загаживать свой почтовый ящик ненужными автоматическими
-сообщениями. Если не охото удалять то, что потенциально может пригодиться через
-N лет — просто отправьте в архив. Разгребать свой почтовый ящик и, если нужно,
-отвечать на письма — достаточно приятная рутина, которая отнимает не так уж
-много времени. И да, весьма уютная и медитативная рутина, а результат, когда
-непрочитанных писем нет, и письма аккуратно разложены по папкам или удалены —
-приносит ощущение хорошо сделанного полезного дела. Попробуйте ;)
diff --git a/content/posts/2025-12-24-email/index.md b/content/posts/2025-12-24-email/index.md
new file mode 100644
index 0000000..174c268
--- /dev/null
+++ b/content/posts/2025-12-24-email/index.md
@@ -0,0 +1,99 @@
+---
+comments: true
+date: "2025-12-24T21:00:22+03:00"
+tags:
+ - разное
+ - sicktech
+title: Почему я люблю e-mail?
+---
+
+Я действительно очень люблю старую-добрую электронную почту. И вот почему.
+
+
+
+Во-первых, как и всё, что делалось в раннее время Интернета — e-mail достаточно
+простая и открытая технология. А я очень ценю и то и то. В простой и открытой
+технологии _возможно_ разобраться, в отличие от закрытых проприетарных систем.
+
+Во-вторых, она действительно децентрализованная, а значит отвечает духу того,
+как проектировался Интернет ещё до того, как корпорации захватили его и
+подчинили своей монополии. Если оглянуться шире — многие ранние технологии
+интернета так же децентрализованные. Например, WWW, DNS, внезапно, IRC, XMPP...
+Да много примеров. Ещё мне приходит в голову GIT, который спроектирован так,
+что может работать поверх, практически, чего угодно! И да, в том числе, даже
+поверх просто e-mail!
+
+В-третьих, она достаточно универсальна. По факту, e-mail это просто контейнер,
+внутри которого можно положить практиески что угодно. Например, то что из себя
+обычно представляет письмо — это или обычный текстовый файл (plaintext) или HTML
+страничка (это более распространённые письма которые содержат богатую разметку).
+Так же в том же письме могут быть приложены используемые в нём картинки, или,
+например, файл содержащий приглашение на определённое событие в формате iCal.
+И в последнем случае, наверняка, почтовая программа корректно обработает этот
+файл и добавит событие в календарь. А так же, если пользователь решит принять
+или отклонить приглашение, ответ уйдёт так же по e-mail. Что интересно, в какой
+бы корпорации я не работал, именно так и работает система событий и календари.
+
+В-четвёртых, и это для меня самое главное. Почта, в отличие от всяких разных
+мессенджеров, не предполагает синхронного общения! А это значит что? Что у меня
+есть прорва времени чтобы _неторопясь_ в комфортном для меня режиме собраться с
+мыслями, неторопясь аккуратно написать письмо. Проверить. Перепроверить. Ещё
+подумать. И только после этого направить адресату. И выбросить из головы.
+
+Я человек в принципе неторопливый, и это меня устраивает гораздо больше, чем
+незримое эмоциональное давление от осознания того, что мой собеседник _видит_ в
+мессенджере что я уже прочитал его сообщение и ждёт ответа. А тянуть при этом и
+задерживать человека очень не хочется. Это НЕ комфортно.
+
+Мне такое неторопливое общение кажется очень и очень уютным. По этой же причине,
+мне так сильно импонирует вести обычный классический текстовый блог, когда более
+модно вести условный телеграм канал. Канал то у меня тоже есть, но он или для
+уведомлений о новых записях блога, или для совсем уж быстрых коротких заметок.
+
+Конечно, я не сумасшедший, и понимаю что есть множество вопросов, которые
+действительно требуют и быстрого ответа и синхронного общения. Конечно же, в
+таком случае использовать почту только потому что это почта — глупо и
+нерационально. Здесь я не буду спорить. Всё так.
+
+Но общение — это гораздо более широкое понятие, и оно может быть _разным_. И
+если есть возможность — я предпочту комфортное общение без психолгоического и
+эмоционального давления.
+
+# Немного про другие коммуникации
+
+И да, в контексте, [предпредыдущего поста](/posts/sicktech/), e-mail
+— это однозначно «здоровая технология». Но не единственная. Раз уж немного
+отклонился в сторону, приведу из этой же области ещё немного «здоровых» из
+области коммуникаций:
+
+- [IRC](https://ru.ruwiki.ru/wiki/IRC) — радикальная простота протокола,
+ универсальность и распределённость. А в последнее время даже пытается ожить с
+ новой версией [IRCv3](https://ircv3.net/).
+- [Jabber](https://ru.ruwiki.ru/wiki/XMPP) — уже не так просто, зато так же
+ открыто и децентрализованно. Так же, в последние годы обрёл второе дыхание и
+ развивается.
+- [Mumble](https://ru.ruwiki.ru/wiki/Mumble) — свободный голосовой чат. Имеет
+ отличное качество звука при очень низкой задержке и потрелении трафика.
+
+Это далеко не исчерпывающий список, но он по факту покрывает основные
+потребности в коммуникации.
+
+## И снова про e-mail и внезапная экономия там, где её не ждёшь
+
+Возращаясь к e-mail, я написал этот пост не как призыв всем всё бросить и писать
+только письма, а только как напоминание, что такой инструмент есть (и есть по
+факту почти у всех!) и нужно не забывать о нём и использовать тогда, когда он
+уместен.
+
+Шутка про то, что «Эту часовую встречу можно было заменить просто одним емейлом»
+— далеко не шутка, и очень часто так и есть. Таким образом, в некотором роде,
+даже учитывая общий неторопливый стиль переписки — она, внезапно, может и помочь
+сэкономить время! Не самый очевидный вывод, но так и есть.
+
+И да, постарайтесь не загаживать свой почтовый ящик ненужными автоматическими
+сообщениями. Если не охото удалять то, что потенциально может пригодиться через
+N лет — просто отправьте в архив. Разгребать свой почтовый ящик и, если нужно,
+отвечать на письма — достаточно приятная рутина, которая отнимает не так уж
+много времени. И да, весьма уютная и медитативная рутина, а результат, когда
+непрочитанных писем нет, и письма аккуратно разложены по папкам или удалены —
+приносит ощущение хорошо сделанного полезного дела. Попробуйте ;)
diff --git a/content/posts/2025-12-27-osm.md b/content/posts/2025-12-27-osm.md
deleted file mode 100644
index 1c9881c..0000000
--- a/content/posts/2025-12-27-osm.md
+++ /dev/null
@@ -1,40 +0,0 @@
----
-comments: true
-cover: /posts/files/2025-12-27-osm_img/photo.jpg
-date: '2025-12-27T19:42:04+03:00'
-tags:
-- прогулки
-title: Сходили на ярмарку OSM
----
-
-Сегодня с супругой съездили для интереса на ярмарку
-[OSM](https://kzngo.ru/event/market-osm-14307) (нет, это не OpenStreetMaps, а
-OpenSpaceMarket :) ) в гастрокомплексе «Кайт». Ярмарка не скажу что была сильно
-большой, но нам понравилось. Купили всякого не сильно много, поднос да пару
-ароматных свечек с зимними ароматами. Фотографии покупок да и самой прогулки
-прилагаю. Всё таки у нас очень красивый город!
-
-P.S. на фотку можно кликнуть, тогда она откроется в большем размере.
-
-
-
-## Покупочки
-
-[](/posts/files/2025-12-27-osm_img/photo.jpg)
-
-## Прогулка
-
-[](/posts/files/2025-12-27-osm_img/photo_1.jpg)
-[](/posts/files/2025-12-27-osm_img/photo_2.jpg)
-[](/posts/files/2025-12-27-osm_img/photo_3.jpg)
-[](/posts/files/2025-12-27-osm_img/photo_4.jpg)
-[](/posts/files/2025-12-27-osm_img/photo_5.jpg)
-[](/posts/files/2025-12-27-osm_img/photo_6.jpg)
-[](/posts/files/2025-12-27-osm_img/photo_7.jpg)
-[](/posts/files/2025-12-27-osm_img/photo_8.jpg)
-[](/posts/files/2025-12-27-osm_img/photo_9.jpg)
-[](/posts/files/2025-12-27-osm_img/photo_10.jpg)
-[](/posts/files/2025-12-27-osm_img/photo_11.jpg)
-[](/posts/files/2025-12-27-osm_img/photo_12.jpg)
-[](/posts/files/2025-12-27-osm_img/photo_13.jpg)
-[](/posts/files/2025-12-27-osm_img/photo_14.jpg)
diff --git a/content/posts/2025-12-27-osm/files/photo.jpg b/content/posts/2025-12-27-osm/files/photo.jpg
new file mode 100644
index 0000000..ae1a7eb
Binary files /dev/null and b/content/posts/2025-12-27-osm/files/photo.jpg differ
diff --git a/content/posts/2025-12-27-osm/files/photo_1.jpg b/content/posts/2025-12-27-osm/files/photo_1.jpg
new file mode 100644
index 0000000..7d3df90
Binary files /dev/null and b/content/posts/2025-12-27-osm/files/photo_1.jpg differ
diff --git a/content/posts/2025-12-27-osm/files/photo_10.jpg b/content/posts/2025-12-27-osm/files/photo_10.jpg
new file mode 100644
index 0000000..ee69188
Binary files /dev/null and b/content/posts/2025-12-27-osm/files/photo_10.jpg differ
diff --git a/content/posts/2025-12-27-osm/files/photo_11.jpg b/content/posts/2025-12-27-osm/files/photo_11.jpg
new file mode 100644
index 0000000..72c288f
Binary files /dev/null and b/content/posts/2025-12-27-osm/files/photo_11.jpg differ
diff --git a/content/posts/2025-12-27-osm/files/photo_12.jpg b/content/posts/2025-12-27-osm/files/photo_12.jpg
new file mode 100644
index 0000000..8bbd32c
Binary files /dev/null and b/content/posts/2025-12-27-osm/files/photo_12.jpg differ
diff --git a/content/posts/2025-12-27-osm/files/photo_13.jpg b/content/posts/2025-12-27-osm/files/photo_13.jpg
new file mode 100644
index 0000000..1608d5b
Binary files /dev/null and b/content/posts/2025-12-27-osm/files/photo_13.jpg differ
diff --git a/content/posts/2025-12-27-osm/files/photo_14.jpg b/content/posts/2025-12-27-osm/files/photo_14.jpg
new file mode 100644
index 0000000..5cab91a
Binary files /dev/null and b/content/posts/2025-12-27-osm/files/photo_14.jpg differ
diff --git a/content/posts/2025-12-27-osm/files/photo_2.jpg b/content/posts/2025-12-27-osm/files/photo_2.jpg
new file mode 100644
index 0000000..870578b
Binary files /dev/null and b/content/posts/2025-12-27-osm/files/photo_2.jpg differ
diff --git a/content/posts/2025-12-27-osm/files/photo_3.jpg b/content/posts/2025-12-27-osm/files/photo_3.jpg
new file mode 100644
index 0000000..44b2637
Binary files /dev/null and b/content/posts/2025-12-27-osm/files/photo_3.jpg differ
diff --git a/content/posts/2025-12-27-osm/files/photo_4.jpg b/content/posts/2025-12-27-osm/files/photo_4.jpg
new file mode 100644
index 0000000..462b1bc
Binary files /dev/null and b/content/posts/2025-12-27-osm/files/photo_4.jpg differ
diff --git a/content/posts/2025-12-27-osm/files/photo_5.jpg b/content/posts/2025-12-27-osm/files/photo_5.jpg
new file mode 100644
index 0000000..4c9d1d6
Binary files /dev/null and b/content/posts/2025-12-27-osm/files/photo_5.jpg differ
diff --git a/content/posts/2025-12-27-osm/files/photo_6.jpg b/content/posts/2025-12-27-osm/files/photo_6.jpg
new file mode 100644
index 0000000..9ad1280
Binary files /dev/null and b/content/posts/2025-12-27-osm/files/photo_6.jpg differ
diff --git a/content/posts/2025-12-27-osm/files/photo_7.jpg b/content/posts/2025-12-27-osm/files/photo_7.jpg
new file mode 100644
index 0000000..7054792
Binary files /dev/null and b/content/posts/2025-12-27-osm/files/photo_7.jpg differ
diff --git a/content/posts/2025-12-27-osm/files/photo_8.jpg b/content/posts/2025-12-27-osm/files/photo_8.jpg
new file mode 100644
index 0000000..edd7f59
Binary files /dev/null and b/content/posts/2025-12-27-osm/files/photo_8.jpg differ
diff --git a/content/posts/2025-12-27-osm/files/photo_9.jpg b/content/posts/2025-12-27-osm/files/photo_9.jpg
new file mode 100644
index 0000000..859bade
Binary files /dev/null and b/content/posts/2025-12-27-osm/files/photo_9.jpg differ
diff --git a/content/posts/2025-12-27-osm/index.md b/content/posts/2025-12-27-osm/index.md
new file mode 100644
index 0000000..48955a8
--- /dev/null
+++ b/content/posts/2025-12-27-osm/index.md
@@ -0,0 +1,40 @@
+---
+comments: true
+cover: /posts/2025-12-27-osm/files/photo.jpg
+date: "2025-12-27T19:42:04+03:00"
+tags:
+ - прогулки
+title: Сходили на ярмарку OSM
+---
+
+Сегодня с супругой съездили для интереса на ярмарку
+[OSM](https://kzngo.ru/event/market-osm-14307) (нет, это не OpenStreetMaps, а
+OpenSpaceMarket :) ) в гастрокомплексе «Кайт». Ярмарка не скажу что была сильно
+большой, но нам понравилось. Купили всякого не сильно много, поднос да пару
+ароматных свечек с зимними ароматами. Фотографии покупок да и самой прогулки
+прилагаю. Всё таки у нас очень красивый город!
+
+P.S. на фотку можно кликнуть, тогда она откроется в большем размере.
+
+
+
+## Покупочки
+
+[](/posts/2025-12-27-osm/files/photo.jpg)
+
+## Прогулка
+
+[](/posts/2025-12-27-osm/files/photo_1.jpg)
+[](/posts/2025-12-27-osm/files/photo_2.jpg)
+[](/posts/2025-12-27-osm/files/photo_3.jpg)
+[](/posts/2025-12-27-osm/files/photo_4.jpg)
+[](/posts/2025-12-27-osm/files/photo_5.jpg)
+[](/posts/2025-12-27-osm/files/photo_6.jpg)
+[](/posts/2025-12-27-osm/files/photo_7.jpg)
+[](/posts/2025-12-27-osm/files/photo_8.jpg)
+[](/posts/2025-12-27-osm/files/photo_9.jpg)
+[](/posts/2025-12-27-osm/files/photo_10.jpg)
+[](/posts/2025-12-27-osm/files/photo_11.jpg)
+[](/posts/2025-12-27-osm/files/photo_12.jpg)
+[](/posts/2025-12-27-osm/files/photo_13.jpg)
+[](/posts/2025-12-27-osm/files/photo_14.jpg)
diff --git a/content/posts/2025-12-28-philharmonic-park.md b/content/posts/2025-12-28-philharmonic-park.md
deleted file mode 100644
index c692ecc..0000000
--- a/content/posts/2025-12-28-philharmonic-park.md
+++ /dev/null
@@ -1,32 +0,0 @@
----
-comments: true
-cover: /posts/files/2025-12-28-philharmonic-park_img/photo_1_2025-12-28_21-35-40.jpg
-date: '2025-12-28T21:37:44+03:00'
-tags:
-- прогулки
-title: Прогулка в сквере филармонии
----
-
-Вчера [гуляли с супругой на
-набережной](https://neonxp.ru/posts/2025-12-27-osm/), а сегодня чисто случайно
-решили прогуляться в сквере филармонии им.Тукая. Людей было немного, что только
-создавало больше уюта и ламповости этому хорошо украшенному скверику. К
-сожалению, гулять прям долго-долго особо не вышло, т.к. хоть и всего -7°, но
-продрогли сильно, т.к. гулять изначально не планировали и не были одеты
-соответственно. Сейчас дописываю этот пост и пытаюсь отогреться :)
-
-Как водится, дальше будет немного фотографий :)
-
-
-
-[](/posts/files/2025-12-28-philharmonic-park_img/photo_2_2025-12-28_21-35-40.png)
-[](/posts/files/2025-12-28-philharmonic-park_img/photo_3_2025-12-28_21-35-40.png)
-[](/posts/files/2025-12-28-philharmonic-park_img/photo_5_2025-12-28_21-35-40.jpg)
-[](/posts/files/2025-12-28-philharmonic-park_img/photo_9_2025-12-28_21-35-40.jpg)
-[](/posts/files/2025-12-28-philharmonic-park_img/photo_19_2025-12-28_21-35-40.jpg)
-[](/posts/files/2025-12-28-philharmonic-park_img/photo_20_2025-12-28_21-35-40.jpg)
-[](/posts/files/2025-12-28-philharmonic-park_img/photo_25_2025-12-28_21-35-40.jpg)
-[](/posts/files/2025-12-28-philharmonic-park_img/photo_27_2025-12-28_21-35-40.jpg)
-[](/posts/files/2025-12-28-philharmonic-park_img/photo_30_2025-12-28_21-35-40.jpg)
-[](/posts/files/2025-12-28-philharmonic-park_img/photo_31_2025-12-28_21-35-40.jpg)
-[](/posts/files/2025-12-28-philharmonic-park_img/photo_32_2025-12-28_21-35-40.png)
diff --git a/content/posts/2025-12-28-philharmonic-park/files/photo_19_2025-12-28_21-35-40.jpg b/content/posts/2025-12-28-philharmonic-park/files/photo_19_2025-12-28_21-35-40.jpg
new file mode 100644
index 0000000..7768b6e
Binary files /dev/null and b/content/posts/2025-12-28-philharmonic-park/files/photo_19_2025-12-28_21-35-40.jpg differ
diff --git a/content/posts/2025-12-28-philharmonic-park/files/photo_1_2025-12-28_21-35-40.jpg b/content/posts/2025-12-28-philharmonic-park/files/photo_1_2025-12-28_21-35-40.jpg
new file mode 100644
index 0000000..369d229
Binary files /dev/null and b/content/posts/2025-12-28-philharmonic-park/files/photo_1_2025-12-28_21-35-40.jpg differ
diff --git a/content/posts/2025-12-28-philharmonic-park/files/photo_20_2025-12-28_21-35-40.jpg b/content/posts/2025-12-28-philharmonic-park/files/photo_20_2025-12-28_21-35-40.jpg
new file mode 100644
index 0000000..35e1cd5
Binary files /dev/null and b/content/posts/2025-12-28-philharmonic-park/files/photo_20_2025-12-28_21-35-40.jpg differ
diff --git a/content/posts/2025-12-28-philharmonic-park/files/photo_25_2025-12-28_21-35-40.jpg b/content/posts/2025-12-28-philharmonic-park/files/photo_25_2025-12-28_21-35-40.jpg
new file mode 100644
index 0000000..ccb1005
Binary files /dev/null and b/content/posts/2025-12-28-philharmonic-park/files/photo_25_2025-12-28_21-35-40.jpg differ
diff --git a/content/posts/2025-12-28-philharmonic-park/files/photo_27_2025-12-28_21-35-40.jpg b/content/posts/2025-12-28-philharmonic-park/files/photo_27_2025-12-28_21-35-40.jpg
new file mode 100644
index 0000000..066be5c
Binary files /dev/null and b/content/posts/2025-12-28-philharmonic-park/files/photo_27_2025-12-28_21-35-40.jpg differ
diff --git a/content/posts/2025-12-28-philharmonic-park/files/photo_2_2025-12-28_21-35-40.jpg b/content/posts/2025-12-28-philharmonic-park/files/photo_2_2025-12-28_21-35-40.jpg
new file mode 100644
index 0000000..ccab7b5
Binary files /dev/null and b/content/posts/2025-12-28-philharmonic-park/files/photo_2_2025-12-28_21-35-40.jpg differ
diff --git a/content/posts/2025-12-28-philharmonic-park/files/photo_2_2025-12-28_21-35-40.png b/content/posts/2025-12-28-philharmonic-park/files/photo_2_2025-12-28_21-35-40.png
new file mode 100644
index 0000000..de29bfb
Binary files /dev/null and b/content/posts/2025-12-28-philharmonic-park/files/photo_2_2025-12-28_21-35-40.png differ
diff --git a/content/posts/2025-12-28-philharmonic-park/files/photo_30_2025-12-28_21-35-40.jpg b/content/posts/2025-12-28-philharmonic-park/files/photo_30_2025-12-28_21-35-40.jpg
new file mode 100644
index 0000000..71aebf0
Binary files /dev/null and b/content/posts/2025-12-28-philharmonic-park/files/photo_30_2025-12-28_21-35-40.jpg differ
diff --git a/content/posts/2025-12-28-philharmonic-park/files/photo_31_2025-12-28_21-35-40.jpg b/content/posts/2025-12-28-philharmonic-park/files/photo_31_2025-12-28_21-35-40.jpg
new file mode 100644
index 0000000..f9ef2da
Binary files /dev/null and b/content/posts/2025-12-28-philharmonic-park/files/photo_31_2025-12-28_21-35-40.jpg differ
diff --git a/content/posts/2025-12-28-philharmonic-park/files/photo_32_2025-12-28_21-35-40.jpg b/content/posts/2025-12-28-philharmonic-park/files/photo_32_2025-12-28_21-35-40.jpg
new file mode 100644
index 0000000..381faff
Binary files /dev/null and b/content/posts/2025-12-28-philharmonic-park/files/photo_32_2025-12-28_21-35-40.jpg differ
diff --git a/content/posts/2025-12-28-philharmonic-park/files/photo_32_2025-12-28_21-35-40.png b/content/posts/2025-12-28-philharmonic-park/files/photo_32_2025-12-28_21-35-40.png
new file mode 100644
index 0000000..00eddcc
Binary files /dev/null and b/content/posts/2025-12-28-philharmonic-park/files/photo_32_2025-12-28_21-35-40.png differ
diff --git a/content/posts/2025-12-28-philharmonic-park/files/photo_3_2025-12-28_21-35-40.jpg b/content/posts/2025-12-28-philharmonic-park/files/photo_3_2025-12-28_21-35-40.jpg
new file mode 100644
index 0000000..f9e8a43
Binary files /dev/null and b/content/posts/2025-12-28-philharmonic-park/files/photo_3_2025-12-28_21-35-40.jpg differ
diff --git a/content/posts/2025-12-28-philharmonic-park/files/photo_3_2025-12-28_21-35-40.png b/content/posts/2025-12-28-philharmonic-park/files/photo_3_2025-12-28_21-35-40.png
new file mode 100644
index 0000000..a01eae9
Binary files /dev/null and b/content/posts/2025-12-28-philharmonic-park/files/photo_3_2025-12-28_21-35-40.png differ
diff --git a/content/posts/2025-12-28-philharmonic-park/files/photo_5_2025-12-28_21-35-40.jpg b/content/posts/2025-12-28-philharmonic-park/files/photo_5_2025-12-28_21-35-40.jpg
new file mode 100644
index 0000000..302bb88
Binary files /dev/null and b/content/posts/2025-12-28-philharmonic-park/files/photo_5_2025-12-28_21-35-40.jpg differ
diff --git a/content/posts/2025-12-28-philharmonic-park/files/photo_9_2025-12-28_21-35-40.jpg b/content/posts/2025-12-28-philharmonic-park/files/photo_9_2025-12-28_21-35-40.jpg
new file mode 100644
index 0000000..3c6b8f1
Binary files /dev/null and b/content/posts/2025-12-28-philharmonic-park/files/photo_9_2025-12-28_21-35-40.jpg differ
diff --git a/content/posts/2025-12-28-philharmonic-park/index.md b/content/posts/2025-12-28-philharmonic-park/index.md
new file mode 100644
index 0000000..03b397d
--- /dev/null
+++ b/content/posts/2025-12-28-philharmonic-park/index.md
@@ -0,0 +1,32 @@
+---
+comments: true
+cover: /posts/2025-12-28-philharmonic-park/photo_1_2025-12-28_21-35-40.jpg
+date: "2025-12-28T21:37:44+03:00"
+tags:
+ - прогулки
+title: Прогулка в сквере филармонии
+---
+
+Вчера [гуляли с супругой на
+набережной](https://neonxp.ru/posts/osm/), а сегодня чисто случайно
+решили прогуляться в сквере филармонии им.Тукая. Людей было немного, что только
+создавало больше уюта и ламповости этому хорошо украшенному скверику. К
+сожалению, гулять прям долго-долго особо не вышло, т.к. хоть и всего -7°, но
+продрогли сильно, т.к. гулять изначально не планировали и не были одеты
+соответственно. Сейчас дописываю этот пост и пытаюсь отогреться :)
+
+Как водится, дальше будет немного фотографий :)
+
+
+
+[](/posts/2025-12-28-philharmonic-park/files/photo_2_2025-12-28_21-35-40.png)
+[](/posts/2025-12-28-philharmonic-park/files/photo_3_2025-12-28_21-35-40.png)
+[](/posts/2025-12-28-philharmonic-park/files/photo_5_2025-12-28_21-35-40.jpg)
+[](/posts/2025-12-28-philharmonic-park/files/photo_9_2025-12-28_21-35-40.jpg)
+[](/posts/2025-12-28-philharmonic-park/files/photo_19_2025-12-28_21-35-40.jpg)
+[](/posts/2025-12-28-philharmonic-park/files/photo_20_2025-12-28_21-35-40.jpg)
+[](/posts/2025-12-28-philharmonic-park/files/photo_25_2025-12-28_21-35-40.jpg)
+[](/posts/2025-12-28-philharmonic-park/files/photo_27_2025-12-28_21-35-40.jpg)
+[](/posts/2025-12-28-philharmonic-park/files/photo_30_2025-12-28_21-35-40.jpg)
+[](/posts/2025-12-28-philharmonic-park/files/photo_31_2025-12-28_21-35-40.jpg)
+[](/posts/2025-12-28-philharmonic-park/files/photo_32_2025-12-28_21-35-40.png)
diff --git a/content/posts/2025-12-29-newyear-excel.md b/content/posts/2025-12-29-newyear-excel.md
deleted file mode 100644
index 76916b2..0000000
--- a/content/posts/2025-12-29-newyear-excel.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-comments: true
-cover: /posts/files/2025-12-29-newyear-excel_img/cover1.png
-date: '2025-12-29T11:47:14+03:00'
-tags:
-- разное
-title: Новогодний Excel
----
-
-По мотивам одного недавнего поста с Пикабу, который мне уже лень искать. Немного
-предновогоднего офискора вам. Открываем в Excel или в LibreOffice
-соответствующий файл и жмём несколько раз клавишу F9.
-
-Делал я именно в LibreOffice, поэтому только там я точно уверен что работает как задуманно.
-
-- [Версия для MS Excel](/posts/files/2025-12-29-newyear-excel_img/new_year.xlsx)
-- [Версия для LibreOffice
- Calc](/posts/files/2025-12-29-newyear-excel_img/new_year.ods)
-- [Онлайн версия в Документах
- Mail.Ru](https://cloud.mail.ru/public/SF1M/ob3EeqtNF)
-
-
diff --git a/content/posts/2025-12-29-newyear-excel/files/cover.png b/content/posts/2025-12-29-newyear-excel/files/cover.png
new file mode 100644
index 0000000..ae331d5
Binary files /dev/null and b/content/posts/2025-12-29-newyear-excel/files/cover.png differ
diff --git a/content/posts/2025-12-29-newyear-excel/files/cover1.png b/content/posts/2025-12-29-newyear-excel/files/cover1.png
new file mode 100644
index 0000000..b252f6e
Binary files /dev/null and b/content/posts/2025-12-29-newyear-excel/files/cover1.png differ
diff --git a/content/posts/2025-12-29-newyear-excel/files/new_year.ods b/content/posts/2025-12-29-newyear-excel/files/new_year.ods
new file mode 100644
index 0000000..2d8aad2
Binary files /dev/null and b/content/posts/2025-12-29-newyear-excel/files/new_year.ods differ
diff --git a/content/posts/2025-12-29-newyear-excel/files/new_year.xlsx b/content/posts/2025-12-29-newyear-excel/files/new_year.xlsx
new file mode 100644
index 0000000..ca4469c
Binary files /dev/null and b/content/posts/2025-12-29-newyear-excel/files/new_year.xlsx differ
diff --git a/content/posts/2025-12-29-newyear-excel/index.md b/content/posts/2025-12-29-newyear-excel/index.md
new file mode 100644
index 0000000..31a9240
--- /dev/null
+++ b/content/posts/2025-12-29-newyear-excel/index.md
@@ -0,0 +1,22 @@
+---
+comments: true
+cover: /posts/2025-12-29-newyear-excel/cover1.png
+date: "2025-12-29T11:47:14+03:00"
+tags:
+ - разное
+title: Новогодний Excel
+---
+
+По мотивам одного недавнего поста с Пикабу, который мне уже лень искать. Немного
+предновогоднего офискора вам. Открываем в Excel или в LibreOffice
+соответствующий файл и жмём несколько раз клавишу F9.
+
+Делал я именно в LibreOffice, поэтому только там я точно уверен что работает как задуманно.
+
+- [Версия для MS Excel](/posts/2025-12-29-newyear-excel/files/new_year.xlsx)
+- [Версия для LibreOffice
+ Calc](/posts/2025-12-29-newyear-excel/files/new_year.ods)
+- [Онлайн версия в Документах
+ Mail.Ru](https://cloud.mail.ru/public/SF1M/ob3EeqtNF)
+
+
diff --git a/content/posts/2025-12-31-new-year.md b/content/posts/2025-12-31-new-year.md
deleted file mode 100644
index 7a3c3b0..0000000
--- a/content/posts/2025-12-31-new-year.md
+++ /dev/null
@@ -1,28 +0,0 @@
----
-comments: true
-cover: /posts/files/2025-12-28-philharmonic-park_img/thumbs/photo_31_2025-12-28_21-35-40.jpg
-date: '2025-12-31T15:27:17+03:00'
-tags:
-- разное
-title: С Новым Годом!
----
-
-С наступающим Новым Годом!
-
-
-
-Предыдущий год был весьма и весьма разным. Было и хорошее и плохое. Отчёт по
-году как в [прошлом году](/posts/2024-12-31-new-year/) делать не буду. Честно
-говоря, нет особо моральных сил на это.
-
-
-
-Уходящий год для меня стал годом чередования работы и семейных забот. В целом,
-всё хорошо, но хотелось бы, чтобы следующий год был всё же проще, чего и всем
-желаю!
-
-А так желаю всем сил, крепкого здоровья и больше удачи! Желаю чтобы беды
-обходили ваш дом стороной.
-
-А пока, отправляюсь резать салатики и заниматься прочими домашними заботами, не
-всё же у компьютера сидеть :)
diff --git a/content/posts/2025-12-31-new-year/index.md b/content/posts/2025-12-31-new-year/index.md
new file mode 100644
index 0000000..c1554a7
--- /dev/null
+++ b/content/posts/2025-12-31-new-year/index.md
@@ -0,0 +1,28 @@
+---
+comments: true
+cover: /posts/2025-12-31-new-year/photo_31_2025-12-28_21-35-40.jpg
+date: "2025-12-31T15:27:17+03:00"
+tags:
+ - разное
+title: С Новым Годом!
+---
+
+С наступающим Новым Годом!
+
+
+
+Предыдущий год был весьма и весьма разным. Было и хорошее и плохое. Отчёт по
+году как в [прошлом году](/posts/new-year/) делать не буду. Честно
+говоря, нет особо моральных сил на это.
+
+
+
+Уходящий год для меня стал годом чередования работы и семейных забот. В целом,
+всё хорошо, но хотелось бы, чтобы следующий год был всё же проще, чего и всем
+желаю!
+
+А так желаю всем сил, крепкого здоровья и больше удачи! Желаю чтобы беды
+обходили ваш дом стороной.
+
+А пока, отправляюсь резать салатики и заниматься прочими домашними заботами, не
+всё же у компьютера сидеть :)
diff --git a/content/posts/2025-12-31-qchat.md b/content/posts/2025-12-31-qchat.md
deleted file mode 100644
index 8344933..0000000
--- a/content/posts/2025-12-31-qchat.md
+++ /dev/null
@@ -1,46 +0,0 @@
----
-comments: true
-date: '2025-12-31T14:55:45+03:00'
-tags:
-- гиковское
-- IT
-title: qChat — чатик поверх SSH
----
-
-Для собственного интереса написал на Go реализацию IRC-подобного чата, который
-работает поверх прокола SSH.
-
-Умеет пока немного, но много я от него и не хотел. Основная идея в том, чтобы
-его можно было запустить без конфигурации, с минимальными усилиями на любой
-«картошке» и чтобы он могу обслуживать, например, небольшую группу пользователей
-в одной локальной сети (хотя может работать и по интернету).
-
-Получилось очень гиковски и лампово. Так сказать, чатик на случай ядерной войны
-:)
-
-
-
-Приглашаю забежать на огонёк, если умеете пользоваться SSH:
-
-```
-ssh neonxp.ru -p 1337
-```
-
-Продублирую из README описание основных команд:
-
-- `/help` - эта справка.
-- `/join [chan]` - подключиться к каналу [chan]. Если его нет, он будет создан.
-- `/chans` - список каналов.
-- `/users` - список пользователей на сервере (не на канале, а именно на
- сервере).
-- `/me [message]` - отправка сообщения как бы от третьего лица.
-
-Форматирование сообщений:
-
-- `*Полужирный*`
-- `+Курсив+`
-- `-Зачёркнутый текст-`
-- `_Подчёркнутый текст_`
-
-Про техническое описание — есть отдельная страница:
-[/projects/qchat/](/projects/qchat/)
diff --git a/content/posts/2025-12-31-qchat/index.md b/content/posts/2025-12-31-qchat/index.md
new file mode 100644
index 0000000..54486ac
--- /dev/null
+++ b/content/posts/2025-12-31-qchat/index.md
@@ -0,0 +1,45 @@
+---
+date: "2025-12-31T14:55:45+03:00"
+title: qChat — чатик поверх SSH
+tags:
+ - гиковское
+ - IT
+---
+
+Для собственного интереса написал на Go реализацию IRC-подобного чата, который
+работает поверх прокола SSH.
+
+Умеет пока немного, но много я от него и не хотел. Основная идея в том, чтобы
+его можно было запустить без конфигурации, с минимальными усилиями на любой
+«картошке» и чтобы он могу обслуживать, например, небольшую группу пользователей
+в одной локальной сети (хотя может работать и по интернету).
+
+Получилось очень гиковски и лампово. Так сказать, чатик на случай ядерной войны
+:)
+
+
+
+Приглашаю забежать на огонёк, если умеете пользоваться SSH:
+
+```
+ssh neonxp.ru -p 1337
+```
+
+Продублирую из README описание основных команд:
+
+- `/help` - эта справка.
+- `/join [chan]` - подключиться к каналу [chan]. Если его нет, он будет создан.
+- `/chans` - список каналов.
+- `/users` - список пользователей на сервере (не на канале, а именно на
+ сервере).
+- `/me [message]` - отправка сообщения как бы от третьего лица.
+
+Форматирование сообщений:
+
+- `*Полужирный*`
+- `+Курсив+`
+- `-Зачёркнутый текст-`
+- `_Подчёркнутый текст_`
+
+Про техническое описание — есть отдельная страница:
+[/projects/qchat/](/projects/qchat/)
diff --git a/content/posts/2026-02-01-grouper/grouper.png b/content/posts/2026-02-01-grouper/grouper.png
new file mode 100644
index 0000000..6f5053d
Binary files /dev/null and b/content/posts/2026-02-01-grouper/grouper.png differ
diff --git a/content/posts/2026-02-01-grouper/index.md b/content/posts/2026-02-01-grouper/index.md
new file mode 100644
index 0000000..519277f
--- /dev/null
+++ b/content/posts/2026-02-01-grouper/index.md
@@ -0,0 +1,44 @@
+---
+date: "2026-02-01T22:26:32+03:00"
+title: Моё первое дополнение для Firefox
+tags:
+ - гиковское
+ - IT
+---
+
+Буквально только что пришло письмо, что наконец-то опубликовано публично моё
+первое расширение для Firefox!
+
+Без долгих разгонов, вот ссылка:
+https://addons.mozilla.org/ru/firefox/addon/groupper/
+
+И, конечно же, исходники: https://gitrepo.ru/NeonXP/Grouper
+
+А теперь немного про то, что это за расширение: это расширение для Firefox для
+автоматической группировки вкладок по группам на базе доменного имени сайта. При
+этом домен преобразуется в имя вкладки по следующим правилам:
+
+1. Домен делится по точкам
+2. Отсекается домен 1 уровня (.ru, .com, .net и т.п.)
+3. Если самый верхний уровень домена — www, то он так же отсекается, как не
+ информативная часть
+4. Оставшееся преобразуется в Title Case (то есть первая буква каждого слова
+ становится заглавной)
+
+Таким образом, например, все страницы домена `www.some.site.ru` сгруппируются
+автоматически в группу `Some Site`.
+
+И вот так это выглядит у меня:
+
+
+
+Да, подобных расширений более одного, но мне хотелось именно эти правила по
+формированию имен групп. В других расширениях или использовался только домен
+второго уровня, или были другие неудобности. Например, все группы были одного
+цвета, а хотелось бы автоматически разного, чтобы визуально различались, или ещё
+какие шороховатости. Я не говорю, что у меня идеально, но оно идеально для _меня_!
+
+Отдельно, хотел бы отметить его простоту. Оно делает только то что написано
+выше, никаких треккингов, реклам или прочего мусора! Более того, js код никак не
+обфусцирован, соответственно, любой может убедиться в этом сам. Да да, в
+современном мире, это скорее особенность, чем само собой разумеющееся.
diff --git a/content/posts/files/2021-02-13-jsonnet_logo.webp b/content/posts/files/2021-02-13-jsonnet_logo.webp
deleted file mode 100644
index 45c63a6..0000000
Binary files a/content/posts/files/2021-02-13-jsonnet_logo.webp and /dev/null differ
diff --git a/content/posts/files/2024-07-13-joplin_joplin.webp b/content/posts/files/2024-07-13-joplin_joplin.webp
deleted file mode 100644
index 33326b7..0000000
Binary files a/content/posts/files/2024-07-13-joplin_joplin.webp and /dev/null differ
diff --git "a/content/posts/files/2024-10-06-\321\206\320\270\321\202\320\260\321\202\320\275\320\270\320\272-\321\200\321\203\320\275\320\265\321\202\320\260_bash_org.webp" "b/content/posts/files/2024-10-06-\321\206\320\270\321\202\320\260\321\202\320\275\320\270\320\272-\321\200\321\203\320\275\320\265\321\202\320\260_bash_org.webp"
deleted file mode 100644
index e142633..0000000
Binary files "a/content/posts/files/2024-10-06-\321\206\320\270\321\202\320\260\321\202\320\275\320\270\320\272-\321\200\321\203\320\275\320\265\321\202\320\260_bash_org.webp" and /dev/null differ
diff --git "a/content/posts/files/2024-10-17-\320\272\320\275\320\270\320\263\320\270-2_Rama16wiki.webp" "b/content/posts/files/2024-10-17-\320\272\320\275\320\270\320\263\320\270-2_Rama16wiki.webp"
deleted file mode 100644
index b4d9ce9..0000000
Binary files "a/content/posts/files/2024-10-17-\320\272\320\275\320\270\320\263\320\270-2_Rama16wiki.webp" and /dev/null differ
diff --git a/content/posts/files/2024-11-17-obsidian_img/logo.webp b/content/posts/files/2024-11-17-obsidian_img/logo.webp
deleted file mode 100644
index d5c747a..0000000
Binary files a/content/posts/files/2024-11-17-obsidian_img/logo.webp and /dev/null differ
diff --git a/content/posts/files/2024-11-17-obsidian_img/publish.webp b/content/posts/files/2024-11-17-obsidian_img/publish.webp
deleted file mode 100644
index f8add88..0000000
Binary files a/content/posts/files/2024-11-17-obsidian_img/publish.webp and /dev/null differ
diff --git a/content/posts/files/2024-11-17-obsidian_img/templater.webp b/content/posts/files/2024-11-17-obsidian_img/templater.webp
deleted file mode 100644
index facdd86..0000000
Binary files a/content/posts/files/2024-11-17-obsidian_img/templater.webp and /dev/null differ
diff --git a/content/posts/files/2024-11-27-hyperlocality_img/90e.webp b/content/posts/files/2024-11-27-hyperlocality_img/90e.webp
deleted file mode 100644
index 948d808..0000000
Binary files a/content/posts/files/2024-11-27-hyperlocality_img/90e.webp and /dev/null differ
diff --git a/content/posts/files/2024-11-27-hyperlocality_img/braindance.webp b/content/posts/files/2024-11-27-hyperlocality_img/braindance.webp
deleted file mode 100644
index 965e145..0000000
Binary files a/content/posts/files/2024-11-27-hyperlocality_img/braindance.webp and /dev/null differ
diff --git a/content/posts/files/2024-11-27-hyperlocality_img/camp.webp b/content/posts/files/2024-11-27-hyperlocality_img/camp.webp
deleted file mode 100644
index a07d8ed..0000000
Binary files a/content/posts/files/2024-11-27-hyperlocality_img/camp.webp and /dev/null differ
diff --git a/content/posts/files/2024-11-27-hyperlocality_img/in-internet.webp b/content/posts/files/2024-11-27-hyperlocality_img/in-internet.webp
deleted file mode 100644
index 56d8c50..0000000
Binary files a/content/posts/files/2024-11-27-hyperlocality_img/in-internet.webp and /dev/null differ
diff --git a/content/posts/files/2024-11-29-hobbies_dozor.webp b/content/posts/files/2024-11-29-hobbies_dozor.webp
deleted file mode 100644
index eab9913..0000000
Binary files a/content/posts/files/2024-11-29-hobbies_dozor.webp and /dev/null differ
diff --git a/content/posts/files/2024-12-12-guessr_logo.webp b/content/posts/files/2024-12-12-guessr_logo.webp
deleted file mode 100644
index 3a414cd..0000000
Binary files a/content/posts/files/2024-12-12-guessr_logo.webp and /dev/null differ
diff --git a/content/posts/files/2024-12-15-conditional-operator-go_ternary.webp b/content/posts/files/2024-12-15-conditional-operator-go_ternary.webp
deleted file mode 100644
index 5eeea58..0000000
Binary files a/content/posts/files/2024-12-15-conditional-operator-go_ternary.webp and /dev/null differ
diff --git a/content/posts/files/2024-12-15-posse_posse.webp b/content/posts/files/2024-12-15-posse_posse.webp
deleted file mode 100644
index aad6230..0000000
Binary files a/content/posts/files/2024-12-15-posse_posse.webp and /dev/null differ
diff --git a/content/posts/files/2024-12-17-infra_cover.webp b/content/posts/files/2024-12-17-infra_cover.webp
deleted file mode 100644
index c02c8be..0000000
Binary files a/content/posts/files/2024-12-17-infra_cover.webp and /dev/null differ
diff --git a/content/posts/files/2024-12-30-irc_logo.webp b/content/posts/files/2024-12-30-irc_logo.webp
deleted file mode 100644
index 26c4182..0000000
Binary files a/content/posts/files/2024-12-30-irc_logo.webp and /dev/null differ
diff --git a/content/posts/files/2024-12-31-new-year_img/1.webp b/content/posts/files/2024-12-31-new-year_img/1.webp
deleted file mode 100644
index f320b83..0000000
Binary files a/content/posts/files/2024-12-31-new-year_img/1.webp and /dev/null differ
diff --git a/content/posts/files/2024-12-31-new-year_img/2.webp b/content/posts/files/2024-12-31-new-year_img/2.webp
deleted file mode 100644
index 49a1ed1..0000000
Binary files a/content/posts/files/2024-12-31-new-year_img/2.webp and /dev/null differ
diff --git a/content/posts/files/2024-12-31-new-year_img/2025.webp b/content/posts/files/2024-12-31-new-year_img/2025.webp
deleted file mode 100644
index 9cc3c0b..0000000
Binary files a/content/posts/files/2024-12-31-new-year_img/2025.webp and /dev/null differ
diff --git a/content/posts/files/2024-12-31-new-year_img/3.webp b/content/posts/files/2024-12-31-new-year_img/3.webp
deleted file mode 100644
index 64dedc8..0000000
Binary files a/content/posts/files/2024-12-31-new-year_img/3.webp and /dev/null differ
diff --git a/content/posts/files/2024-12-31-new-year_img/4.webp b/content/posts/files/2024-12-31-new-year_img/4.webp
deleted file mode 100644
index b5af0b5..0000000
Binary files a/content/posts/files/2024-12-31-new-year_img/4.webp and /dev/null differ
diff --git a/content/posts/files/2024-12-31-new-year_img/5.webp b/content/posts/files/2024-12-31-new-year_img/5.webp
deleted file mode 100644
index 86a8c2d..0000000
Binary files a/content/posts/files/2024-12-31-new-year_img/5.webp and /dev/null differ
diff --git a/content/posts/files/2025-12-21-img1.jpg b/content/posts/files/2025-12-21-img1.jpg
deleted file mode 100644
index 2dd29f9..0000000
Binary files a/content/posts/files/2025-12-21-img1.jpg and /dev/null differ
diff --git a/content/posts/files/2025-12-21-img2.jpg b/content/posts/files/2025-12-21-img2.jpg
deleted file mode 100644
index 0ea8467..0000000
Binary files a/content/posts/files/2025-12-21-img2.jpg and /dev/null differ
diff --git a/content/posts/files/2025-12-21-img3.png b/content/posts/files/2025-12-21-img3.png
deleted file mode 100644
index 3e41caf..0000000
Binary files a/content/posts/files/2025-12-21-img3.png and /dev/null differ
diff --git a/content/posts/files/2025-12-21-sicktech.png b/content/posts/files/2025-12-21-sicktech.png
deleted file mode 100644
index 32c7b9f..0000000
Binary files a/content/posts/files/2025-12-21-sicktech.png and /dev/null differ
diff --git a/content/posts/files/2025-12-27-osm_img/photo.jpg b/content/posts/files/2025-12-27-osm_img/photo.jpg
deleted file mode 100644
index 4ea3f89..0000000
Binary files a/content/posts/files/2025-12-27-osm_img/photo.jpg and /dev/null differ
diff --git a/content/posts/files/2025-12-27-osm_img/photo_1.jpg b/content/posts/files/2025-12-27-osm_img/photo_1.jpg
deleted file mode 100644
index d14ed56..0000000
Binary files a/content/posts/files/2025-12-27-osm_img/photo_1.jpg and /dev/null differ
diff --git a/content/posts/files/2025-12-27-osm_img/photo_10.jpg b/content/posts/files/2025-12-27-osm_img/photo_10.jpg
deleted file mode 100644
index 66a5727..0000000
Binary files a/content/posts/files/2025-12-27-osm_img/photo_10.jpg and /dev/null differ
diff --git a/content/posts/files/2025-12-27-osm_img/photo_11.jpg b/content/posts/files/2025-12-27-osm_img/photo_11.jpg
deleted file mode 100644
index aed7c5b..0000000
Binary files a/content/posts/files/2025-12-27-osm_img/photo_11.jpg and /dev/null differ
diff --git a/content/posts/files/2025-12-27-osm_img/photo_12.jpg b/content/posts/files/2025-12-27-osm_img/photo_12.jpg
deleted file mode 100644
index b78b33b..0000000
Binary files a/content/posts/files/2025-12-27-osm_img/photo_12.jpg and /dev/null differ
diff --git a/content/posts/files/2025-12-27-osm_img/photo_13.jpg b/content/posts/files/2025-12-27-osm_img/photo_13.jpg
deleted file mode 100644
index 6bb6bd0..0000000
Binary files a/content/posts/files/2025-12-27-osm_img/photo_13.jpg and /dev/null differ
diff --git a/content/posts/files/2025-12-27-osm_img/photo_14.jpg b/content/posts/files/2025-12-27-osm_img/photo_14.jpg
deleted file mode 100644
index 806471f..0000000
Binary files a/content/posts/files/2025-12-27-osm_img/photo_14.jpg and /dev/null differ
diff --git a/content/posts/files/2025-12-27-osm_img/photo_2.jpg b/content/posts/files/2025-12-27-osm_img/photo_2.jpg
deleted file mode 100644
index d4f788a..0000000
Binary files a/content/posts/files/2025-12-27-osm_img/photo_2.jpg and /dev/null differ
diff --git a/content/posts/files/2025-12-27-osm_img/photo_3.jpg b/content/posts/files/2025-12-27-osm_img/photo_3.jpg
deleted file mode 100644
index 74ef585..0000000
Binary files a/content/posts/files/2025-12-27-osm_img/photo_3.jpg and /dev/null differ
diff --git a/content/posts/files/2025-12-27-osm_img/photo_4.jpg b/content/posts/files/2025-12-27-osm_img/photo_4.jpg
deleted file mode 100644
index ea5a5d0..0000000
Binary files a/content/posts/files/2025-12-27-osm_img/photo_4.jpg and /dev/null differ
diff --git a/content/posts/files/2025-12-27-osm_img/photo_5.jpg b/content/posts/files/2025-12-27-osm_img/photo_5.jpg
deleted file mode 100644
index 462b570..0000000
Binary files a/content/posts/files/2025-12-27-osm_img/photo_5.jpg and /dev/null differ
diff --git a/content/posts/files/2025-12-27-osm_img/photo_6.jpg b/content/posts/files/2025-12-27-osm_img/photo_6.jpg
deleted file mode 100644
index 253af73..0000000
Binary files a/content/posts/files/2025-12-27-osm_img/photo_6.jpg and /dev/null differ
diff --git a/content/posts/files/2025-12-27-osm_img/photo_7.jpg b/content/posts/files/2025-12-27-osm_img/photo_7.jpg
deleted file mode 100644
index cd92319..0000000
Binary files a/content/posts/files/2025-12-27-osm_img/photo_7.jpg and /dev/null differ
diff --git a/content/posts/files/2025-12-27-osm_img/photo_8.jpg b/content/posts/files/2025-12-27-osm_img/photo_8.jpg
deleted file mode 100644
index bebc4b3..0000000
Binary files a/content/posts/files/2025-12-27-osm_img/photo_8.jpg and /dev/null differ
diff --git a/content/posts/files/2025-12-27-osm_img/photo_9.jpg b/content/posts/files/2025-12-27-osm_img/photo_9.jpg
deleted file mode 100644
index 8e4358b..0000000
Binary files a/content/posts/files/2025-12-27-osm_img/photo_9.jpg and /dev/null differ
diff --git a/content/posts/files/2025-12-27-osm_img/thumbs/photo.jpg b/content/posts/files/2025-12-27-osm_img/thumbs/photo.jpg
deleted file mode 100644
index ae1a7eb..0000000
Binary files a/content/posts/files/2025-12-27-osm_img/thumbs/photo.jpg and /dev/null differ
diff --git a/content/posts/files/2025-12-27-osm_img/thumbs/photo_1.jpg b/content/posts/files/2025-12-27-osm_img/thumbs/photo_1.jpg
deleted file mode 100644
index 7d3df90..0000000
Binary files a/content/posts/files/2025-12-27-osm_img/thumbs/photo_1.jpg and /dev/null differ
diff --git a/content/posts/files/2025-12-27-osm_img/thumbs/photo_10.jpg b/content/posts/files/2025-12-27-osm_img/thumbs/photo_10.jpg
deleted file mode 100644
index ee69188..0000000
Binary files a/content/posts/files/2025-12-27-osm_img/thumbs/photo_10.jpg and /dev/null differ
diff --git a/content/posts/files/2025-12-27-osm_img/thumbs/photo_11.jpg b/content/posts/files/2025-12-27-osm_img/thumbs/photo_11.jpg
deleted file mode 100644
index 72c288f..0000000
Binary files a/content/posts/files/2025-12-27-osm_img/thumbs/photo_11.jpg and /dev/null differ
diff --git a/content/posts/files/2025-12-27-osm_img/thumbs/photo_12.jpg b/content/posts/files/2025-12-27-osm_img/thumbs/photo_12.jpg
deleted file mode 100644
index 8bbd32c..0000000
Binary files a/content/posts/files/2025-12-27-osm_img/thumbs/photo_12.jpg and /dev/null differ
diff --git a/content/posts/files/2025-12-27-osm_img/thumbs/photo_13.jpg b/content/posts/files/2025-12-27-osm_img/thumbs/photo_13.jpg
deleted file mode 100644
index 1608d5b..0000000
Binary files a/content/posts/files/2025-12-27-osm_img/thumbs/photo_13.jpg and /dev/null differ
diff --git a/content/posts/files/2025-12-27-osm_img/thumbs/photo_14.jpg b/content/posts/files/2025-12-27-osm_img/thumbs/photo_14.jpg
deleted file mode 100644
index 5cab91a..0000000
Binary files a/content/posts/files/2025-12-27-osm_img/thumbs/photo_14.jpg and /dev/null differ
diff --git a/content/posts/files/2025-12-27-osm_img/thumbs/photo_2.jpg b/content/posts/files/2025-12-27-osm_img/thumbs/photo_2.jpg
deleted file mode 100644
index 870578b..0000000
Binary files a/content/posts/files/2025-12-27-osm_img/thumbs/photo_2.jpg and /dev/null differ
diff --git a/content/posts/files/2025-12-27-osm_img/thumbs/photo_3.jpg b/content/posts/files/2025-12-27-osm_img/thumbs/photo_3.jpg
deleted file mode 100644
index 44b2637..0000000
Binary files a/content/posts/files/2025-12-27-osm_img/thumbs/photo_3.jpg and /dev/null differ
diff --git a/content/posts/files/2025-12-27-osm_img/thumbs/photo_4.jpg b/content/posts/files/2025-12-27-osm_img/thumbs/photo_4.jpg
deleted file mode 100644
index 462b1bc..0000000
Binary files a/content/posts/files/2025-12-27-osm_img/thumbs/photo_4.jpg and /dev/null differ
diff --git a/content/posts/files/2025-12-27-osm_img/thumbs/photo_5.jpg b/content/posts/files/2025-12-27-osm_img/thumbs/photo_5.jpg
deleted file mode 100644
index 4c9d1d6..0000000
Binary files a/content/posts/files/2025-12-27-osm_img/thumbs/photo_5.jpg and /dev/null differ
diff --git a/content/posts/files/2025-12-27-osm_img/thumbs/photo_6.jpg b/content/posts/files/2025-12-27-osm_img/thumbs/photo_6.jpg
deleted file mode 100644
index 9ad1280..0000000
Binary files a/content/posts/files/2025-12-27-osm_img/thumbs/photo_6.jpg and /dev/null differ
diff --git a/content/posts/files/2025-12-27-osm_img/thumbs/photo_7.jpg b/content/posts/files/2025-12-27-osm_img/thumbs/photo_7.jpg
deleted file mode 100644
index 7054792..0000000
Binary files a/content/posts/files/2025-12-27-osm_img/thumbs/photo_7.jpg and /dev/null differ
diff --git a/content/posts/files/2025-12-27-osm_img/thumbs/photo_8.jpg b/content/posts/files/2025-12-27-osm_img/thumbs/photo_8.jpg
deleted file mode 100644
index edd7f59..0000000
Binary files a/content/posts/files/2025-12-27-osm_img/thumbs/photo_8.jpg and /dev/null differ
diff --git a/content/posts/files/2025-12-27-osm_img/thumbs/photo_9.jpg b/content/posts/files/2025-12-27-osm_img/thumbs/photo_9.jpg
deleted file mode 100644
index 859bade..0000000
Binary files a/content/posts/files/2025-12-27-osm_img/thumbs/photo_9.jpg and /dev/null differ
diff --git a/content/posts/files/2025-12-28-philharmonic-park_img/photo_19_2025-12-28_21-35-40.jpg b/content/posts/files/2025-12-28-philharmonic-park_img/photo_19_2025-12-28_21-35-40.jpg
deleted file mode 100644
index a7602ed..0000000
Binary files a/content/posts/files/2025-12-28-philharmonic-park_img/photo_19_2025-12-28_21-35-40.jpg and /dev/null differ
diff --git a/content/posts/files/2025-12-28-philharmonic-park_img/photo_1_2025-12-28_21-35-40.jpg b/content/posts/files/2025-12-28-philharmonic-park_img/photo_1_2025-12-28_21-35-40.jpg
deleted file mode 100644
index d0ff6f2..0000000
Binary files a/content/posts/files/2025-12-28-philharmonic-park_img/photo_1_2025-12-28_21-35-40.jpg and /dev/null differ
diff --git a/content/posts/files/2025-12-28-philharmonic-park_img/photo_20_2025-12-28_21-35-40.jpg b/content/posts/files/2025-12-28-philharmonic-park_img/photo_20_2025-12-28_21-35-40.jpg
deleted file mode 100644
index 7007409..0000000
Binary files a/content/posts/files/2025-12-28-philharmonic-park_img/photo_20_2025-12-28_21-35-40.jpg and /dev/null differ
diff --git a/content/posts/files/2025-12-28-philharmonic-park_img/photo_25_2025-12-28_21-35-40.jpg b/content/posts/files/2025-12-28-philharmonic-park_img/photo_25_2025-12-28_21-35-40.jpg
deleted file mode 100644
index 17d8e06..0000000
Binary files a/content/posts/files/2025-12-28-philharmonic-park_img/photo_25_2025-12-28_21-35-40.jpg and /dev/null differ
diff --git a/content/posts/files/2025-12-28-philharmonic-park_img/photo_27_2025-12-28_21-35-40.jpg b/content/posts/files/2025-12-28-philharmonic-park_img/photo_27_2025-12-28_21-35-40.jpg
deleted file mode 100644
index 87658fc..0000000
Binary files a/content/posts/files/2025-12-28-philharmonic-park_img/photo_27_2025-12-28_21-35-40.jpg and /dev/null differ
diff --git a/content/posts/files/2025-12-28-philharmonic-park_img/photo_2_2025-12-28_21-35-40.png b/content/posts/files/2025-12-28-philharmonic-park_img/photo_2_2025-12-28_21-35-40.png
deleted file mode 100644
index de29bfb..0000000
Binary files a/content/posts/files/2025-12-28-philharmonic-park_img/photo_2_2025-12-28_21-35-40.png and /dev/null differ
diff --git a/content/posts/files/2025-12-28-philharmonic-park_img/photo_30_2025-12-28_21-35-40.jpg b/content/posts/files/2025-12-28-philharmonic-park_img/photo_30_2025-12-28_21-35-40.jpg
deleted file mode 100644
index e028728..0000000
Binary files a/content/posts/files/2025-12-28-philharmonic-park_img/photo_30_2025-12-28_21-35-40.jpg and /dev/null differ
diff --git a/content/posts/files/2025-12-28-philharmonic-park_img/photo_31_2025-12-28_21-35-40.jpg b/content/posts/files/2025-12-28-philharmonic-park_img/photo_31_2025-12-28_21-35-40.jpg
deleted file mode 100644
index 0c83ba7..0000000
Binary files a/content/posts/files/2025-12-28-philharmonic-park_img/photo_31_2025-12-28_21-35-40.jpg and /dev/null differ
diff --git a/content/posts/files/2025-12-28-philharmonic-park_img/photo_32_2025-12-28_21-35-40.png b/content/posts/files/2025-12-28-philharmonic-park_img/photo_32_2025-12-28_21-35-40.png
deleted file mode 100644
index 00eddcc..0000000
Binary files a/content/posts/files/2025-12-28-philharmonic-park_img/photo_32_2025-12-28_21-35-40.png and /dev/null differ
diff --git a/content/posts/files/2025-12-28-philharmonic-park_img/photo_3_2025-12-28_21-35-40.png b/content/posts/files/2025-12-28-philharmonic-park_img/photo_3_2025-12-28_21-35-40.png
deleted file mode 100644
index a01eae9..0000000
Binary files a/content/posts/files/2025-12-28-philharmonic-park_img/photo_3_2025-12-28_21-35-40.png and /dev/null differ
diff --git a/content/posts/files/2025-12-28-philharmonic-park_img/photo_5_2025-12-28_21-35-40.jpg b/content/posts/files/2025-12-28-philharmonic-park_img/photo_5_2025-12-28_21-35-40.jpg
deleted file mode 100644
index 615da4b..0000000
Binary files a/content/posts/files/2025-12-28-philharmonic-park_img/photo_5_2025-12-28_21-35-40.jpg and /dev/null differ
diff --git a/content/posts/files/2025-12-28-philharmonic-park_img/photo_9_2025-12-28_21-35-40.jpg b/content/posts/files/2025-12-28-philharmonic-park_img/photo_9_2025-12-28_21-35-40.jpg
deleted file mode 100644
index 69ad012..0000000
Binary files a/content/posts/files/2025-12-28-philharmonic-park_img/photo_9_2025-12-28_21-35-40.jpg and /dev/null differ
diff --git a/content/posts/files/2025-12-28-philharmonic-park_img/thumbs/photo_19_2025-12-28_21-35-40.jpg b/content/posts/files/2025-12-28-philharmonic-park_img/thumbs/photo_19_2025-12-28_21-35-40.jpg
deleted file mode 100644
index 7768b6e..0000000
Binary files a/content/posts/files/2025-12-28-philharmonic-park_img/thumbs/photo_19_2025-12-28_21-35-40.jpg and /dev/null differ
diff --git a/content/posts/files/2025-12-28-philharmonic-park_img/thumbs/photo_1_2025-12-28_21-35-40.jpg b/content/posts/files/2025-12-28-philharmonic-park_img/thumbs/photo_1_2025-12-28_21-35-40.jpg
deleted file mode 100644
index 369d229..0000000
Binary files a/content/posts/files/2025-12-28-philharmonic-park_img/thumbs/photo_1_2025-12-28_21-35-40.jpg and /dev/null differ
diff --git a/content/posts/files/2025-12-28-philharmonic-park_img/thumbs/photo_20_2025-12-28_21-35-40.jpg b/content/posts/files/2025-12-28-philharmonic-park_img/thumbs/photo_20_2025-12-28_21-35-40.jpg
deleted file mode 100644
index 35e1cd5..0000000
Binary files a/content/posts/files/2025-12-28-philharmonic-park_img/thumbs/photo_20_2025-12-28_21-35-40.jpg and /dev/null differ
diff --git a/content/posts/files/2025-12-28-philharmonic-park_img/thumbs/photo_25_2025-12-28_21-35-40.jpg b/content/posts/files/2025-12-28-philharmonic-park_img/thumbs/photo_25_2025-12-28_21-35-40.jpg
deleted file mode 100644
index ccb1005..0000000
Binary files a/content/posts/files/2025-12-28-philharmonic-park_img/thumbs/photo_25_2025-12-28_21-35-40.jpg and /dev/null differ
diff --git a/content/posts/files/2025-12-28-philharmonic-park_img/thumbs/photo_27_2025-12-28_21-35-40.jpg b/content/posts/files/2025-12-28-philharmonic-park_img/thumbs/photo_27_2025-12-28_21-35-40.jpg
deleted file mode 100644
index 066be5c..0000000
Binary files a/content/posts/files/2025-12-28-philharmonic-park_img/thumbs/photo_27_2025-12-28_21-35-40.jpg and /dev/null differ
diff --git a/content/posts/files/2025-12-28-philharmonic-park_img/thumbs/photo_2_2025-12-28_21-35-40.jpg b/content/posts/files/2025-12-28-philharmonic-park_img/thumbs/photo_2_2025-12-28_21-35-40.jpg
deleted file mode 100644
index ccab7b5..0000000
Binary files a/content/posts/files/2025-12-28-philharmonic-park_img/thumbs/photo_2_2025-12-28_21-35-40.jpg and /dev/null differ
diff --git a/content/posts/files/2025-12-28-philharmonic-park_img/thumbs/photo_30_2025-12-28_21-35-40.jpg b/content/posts/files/2025-12-28-philharmonic-park_img/thumbs/photo_30_2025-12-28_21-35-40.jpg
deleted file mode 100644
index 71aebf0..0000000
Binary files a/content/posts/files/2025-12-28-philharmonic-park_img/thumbs/photo_30_2025-12-28_21-35-40.jpg and /dev/null differ
diff --git a/content/posts/files/2025-12-28-philharmonic-park_img/thumbs/photo_31_2025-12-28_21-35-40.jpg b/content/posts/files/2025-12-28-philharmonic-park_img/thumbs/photo_31_2025-12-28_21-35-40.jpg
deleted file mode 100644
index f9ef2da..0000000
Binary files a/content/posts/files/2025-12-28-philharmonic-park_img/thumbs/photo_31_2025-12-28_21-35-40.jpg and /dev/null differ
diff --git a/content/posts/files/2025-12-28-philharmonic-park_img/thumbs/photo_32_2025-12-28_21-35-40.jpg b/content/posts/files/2025-12-28-philharmonic-park_img/thumbs/photo_32_2025-12-28_21-35-40.jpg
deleted file mode 100644
index 381faff..0000000
Binary files a/content/posts/files/2025-12-28-philharmonic-park_img/thumbs/photo_32_2025-12-28_21-35-40.jpg and /dev/null differ
diff --git a/content/posts/files/2025-12-28-philharmonic-park_img/thumbs/photo_3_2025-12-28_21-35-40.jpg b/content/posts/files/2025-12-28-philharmonic-park_img/thumbs/photo_3_2025-12-28_21-35-40.jpg
deleted file mode 100644
index f9e8a43..0000000
Binary files a/content/posts/files/2025-12-28-philharmonic-park_img/thumbs/photo_3_2025-12-28_21-35-40.jpg and /dev/null differ
diff --git a/content/posts/files/2025-12-28-philharmonic-park_img/thumbs/photo_5_2025-12-28_21-35-40.jpg b/content/posts/files/2025-12-28-philharmonic-park_img/thumbs/photo_5_2025-12-28_21-35-40.jpg
deleted file mode 100644
index 302bb88..0000000
Binary files a/content/posts/files/2025-12-28-philharmonic-park_img/thumbs/photo_5_2025-12-28_21-35-40.jpg and /dev/null differ
diff --git a/content/posts/files/2025-12-28-philharmonic-park_img/thumbs/photo_9_2025-12-28_21-35-40.jpg b/content/posts/files/2025-12-28-philharmonic-park_img/thumbs/photo_9_2025-12-28_21-35-40.jpg
deleted file mode 100644
index 3c6b8f1..0000000
Binary files a/content/posts/files/2025-12-28-philharmonic-park_img/thumbs/photo_9_2025-12-28_21-35-40.jpg and /dev/null differ
diff --git a/content/posts/files/2025-12-29-newyear-excel_img/cover.png b/content/posts/files/2025-12-29-newyear-excel_img/cover.png
deleted file mode 100644
index ae331d5..0000000
Binary files a/content/posts/files/2025-12-29-newyear-excel_img/cover.png and /dev/null differ
diff --git a/content/posts/files/2025-12-29-newyear-excel_img/cover1.png b/content/posts/files/2025-12-29-newyear-excel_img/cover1.png
deleted file mode 100644
index b252f6e..0000000
Binary files a/content/posts/files/2025-12-29-newyear-excel_img/cover1.png and /dev/null differ
diff --git a/content/posts/files/2025-12-29-newyear-excel_img/new_year.ods b/content/posts/files/2025-12-29-newyear-excel_img/new_year.ods
deleted file mode 100644
index 2d8aad2..0000000
Binary files a/content/posts/files/2025-12-29-newyear-excel_img/new_year.ods and /dev/null differ
diff --git a/content/posts/files/2025-12-29-newyear-excel_img/new_year.xlsx b/content/posts/files/2025-12-29-newyear-excel_img/new_year.xlsx
deleted file mode 100644
index ca4469c..0000000
Binary files a/content/posts/files/2025-12-29-newyear-excel_img/new_year.xlsx and /dev/null differ
diff --git a/content/posts/files/2025-travel-1_img/1.webp b/content/posts/files/2025-travel-1_img/1.webp
deleted file mode 100644
index bc037f2..0000000
Binary files a/content/posts/files/2025-travel-1_img/1.webp and /dev/null differ
diff --git a/content/posts/files/2025-travel-1_img/10.webp b/content/posts/files/2025-travel-1_img/10.webp
deleted file mode 100644
index 32bb46f..0000000
Binary files a/content/posts/files/2025-travel-1_img/10.webp and /dev/null differ
diff --git a/content/posts/files/2025-travel-1_img/11.webp b/content/posts/files/2025-travel-1_img/11.webp
deleted file mode 100644
index 12f0933..0000000
Binary files a/content/posts/files/2025-travel-1_img/11.webp and /dev/null differ
diff --git a/content/posts/files/2025-travel-1_img/12.webp b/content/posts/files/2025-travel-1_img/12.webp
deleted file mode 100644
index c797bf3..0000000
Binary files a/content/posts/files/2025-travel-1_img/12.webp and /dev/null differ
diff --git a/content/posts/files/2025-travel-1_img/13.webp b/content/posts/files/2025-travel-1_img/13.webp
deleted file mode 100644
index 96db2e5..0000000
Binary files a/content/posts/files/2025-travel-1_img/13.webp and /dev/null differ
diff --git a/content/posts/files/2025-travel-1_img/14.webp b/content/posts/files/2025-travel-1_img/14.webp
deleted file mode 100644
index 66a53d8..0000000
Binary files a/content/posts/files/2025-travel-1_img/14.webp and /dev/null differ
diff --git a/content/posts/files/2025-travel-1_img/15.webp b/content/posts/files/2025-travel-1_img/15.webp
deleted file mode 100644
index a71672b..0000000
Binary files a/content/posts/files/2025-travel-1_img/15.webp and /dev/null differ
diff --git a/content/posts/files/2025-travel-1_img/16.webp b/content/posts/files/2025-travel-1_img/16.webp
deleted file mode 100644
index e690ba3..0000000
Binary files a/content/posts/files/2025-travel-1_img/16.webp and /dev/null differ
diff --git a/content/posts/files/2025-travel-1_img/17.webp b/content/posts/files/2025-travel-1_img/17.webp
deleted file mode 100644
index 81fa05b..0000000
Binary files a/content/posts/files/2025-travel-1_img/17.webp and /dev/null differ
diff --git a/content/posts/files/2025-travel-1_img/18.webp b/content/posts/files/2025-travel-1_img/18.webp
deleted file mode 100644
index 5905999..0000000
Binary files a/content/posts/files/2025-travel-1_img/18.webp and /dev/null differ
diff --git a/content/posts/files/2025-travel-1_img/19.webp b/content/posts/files/2025-travel-1_img/19.webp
deleted file mode 100644
index ab80bd9..0000000
Binary files a/content/posts/files/2025-travel-1_img/19.webp and /dev/null differ
diff --git a/content/posts/files/2025-travel-1_img/2.webp b/content/posts/files/2025-travel-1_img/2.webp
deleted file mode 100644
index b9ecc86..0000000
Binary files a/content/posts/files/2025-travel-1_img/2.webp and /dev/null differ
diff --git a/content/posts/files/2025-travel-1_img/20.webp b/content/posts/files/2025-travel-1_img/20.webp
deleted file mode 100644
index 1cc4e35..0000000
Binary files a/content/posts/files/2025-travel-1_img/20.webp and /dev/null differ
diff --git a/content/posts/files/2025-travel-1_img/21.webp b/content/posts/files/2025-travel-1_img/21.webp
deleted file mode 100644
index 0f3cc2c..0000000
Binary files a/content/posts/files/2025-travel-1_img/21.webp and /dev/null differ
diff --git a/content/posts/files/2025-travel-1_img/22.webp b/content/posts/files/2025-travel-1_img/22.webp
deleted file mode 100644
index b2d032d..0000000
Binary files a/content/posts/files/2025-travel-1_img/22.webp and /dev/null differ
diff --git a/content/posts/files/2025-travel-1_img/23.webp b/content/posts/files/2025-travel-1_img/23.webp
deleted file mode 100644
index 00ad3f9..0000000
Binary files a/content/posts/files/2025-travel-1_img/23.webp and /dev/null differ
diff --git a/content/posts/files/2025-travel-1_img/3.webp b/content/posts/files/2025-travel-1_img/3.webp
deleted file mode 100644
index 37ec362..0000000
Binary files a/content/posts/files/2025-travel-1_img/3.webp and /dev/null differ
diff --git a/content/posts/files/2025-travel-1_img/4.webp b/content/posts/files/2025-travel-1_img/4.webp
deleted file mode 100644
index dfb29bd..0000000
Binary files a/content/posts/files/2025-travel-1_img/4.webp and /dev/null differ
diff --git a/content/posts/files/2025-travel-1_img/5.webp b/content/posts/files/2025-travel-1_img/5.webp
deleted file mode 100644
index b5e1a8f..0000000
Binary files a/content/posts/files/2025-travel-1_img/5.webp and /dev/null differ
diff --git a/content/posts/files/2025-travel-1_img/6.webp b/content/posts/files/2025-travel-1_img/6.webp
deleted file mode 100644
index 6b6bbca..0000000
Binary files a/content/posts/files/2025-travel-1_img/6.webp and /dev/null differ
diff --git a/content/posts/files/2025-travel-1_img/7.webp b/content/posts/files/2025-travel-1_img/7.webp
deleted file mode 100644
index fcce61f..0000000
Binary files a/content/posts/files/2025-travel-1_img/7.webp and /dev/null differ
diff --git a/content/posts/files/2025-travel-1_img/8.webp b/content/posts/files/2025-travel-1_img/8.webp
deleted file mode 100644
index b777d4c..0000000
Binary files a/content/posts/files/2025-travel-1_img/8.webp and /dev/null differ
diff --git a/content/posts/files/2025-travel-1_img/9.webp b/content/posts/files/2025-travel-1_img/9.webp
deleted file mode 100644
index f40de11..0000000
Binary files a/content/posts/files/2025-travel-1_img/9.webp and /dev/null differ
diff --git a/content/posts/files/2025-travel-1_img/preview_1.webp b/content/posts/files/2025-travel-1_img/preview_1.webp
deleted file mode 100644
index c18dc0c..0000000
Binary files a/content/posts/files/2025-travel-1_img/preview_1.webp and /dev/null differ
diff --git a/content/posts/files/2025-travel-1_img/preview_10.webp b/content/posts/files/2025-travel-1_img/preview_10.webp
deleted file mode 100644
index 4d23293..0000000
Binary files a/content/posts/files/2025-travel-1_img/preview_10.webp and /dev/null differ
diff --git a/content/posts/files/2025-travel-1_img/preview_11.webp b/content/posts/files/2025-travel-1_img/preview_11.webp
deleted file mode 100644
index 07e38b6..0000000
Binary files a/content/posts/files/2025-travel-1_img/preview_11.webp and /dev/null differ
diff --git a/content/posts/files/2025-travel-1_img/preview_12.webp b/content/posts/files/2025-travel-1_img/preview_12.webp
deleted file mode 100644
index 7a23c41..0000000
Binary files a/content/posts/files/2025-travel-1_img/preview_12.webp and /dev/null differ
diff --git a/content/posts/files/2025-travel-1_img/preview_13.webp b/content/posts/files/2025-travel-1_img/preview_13.webp
deleted file mode 100644
index 953fac9..0000000
Binary files a/content/posts/files/2025-travel-1_img/preview_13.webp and /dev/null differ
diff --git a/content/posts/files/2025-travel-1_img/preview_14.webp b/content/posts/files/2025-travel-1_img/preview_14.webp
deleted file mode 100644
index 08cb032..0000000
Binary files a/content/posts/files/2025-travel-1_img/preview_14.webp and /dev/null differ
diff --git a/content/posts/files/2025-travel-1_img/preview_15.webp b/content/posts/files/2025-travel-1_img/preview_15.webp
deleted file mode 100644
index 627702d..0000000
Binary files a/content/posts/files/2025-travel-1_img/preview_15.webp and /dev/null differ
diff --git a/content/posts/files/2025-travel-1_img/preview_16.webp b/content/posts/files/2025-travel-1_img/preview_16.webp
deleted file mode 100644
index 2bfa651..0000000
Binary files a/content/posts/files/2025-travel-1_img/preview_16.webp and /dev/null differ
diff --git a/content/posts/files/2025-travel-1_img/preview_17.webp b/content/posts/files/2025-travel-1_img/preview_17.webp
deleted file mode 100644
index 814ace2..0000000
Binary files a/content/posts/files/2025-travel-1_img/preview_17.webp and /dev/null differ
diff --git a/content/posts/files/2025-travel-1_img/preview_18.webp b/content/posts/files/2025-travel-1_img/preview_18.webp
deleted file mode 100644
index 82422a8..0000000
Binary files a/content/posts/files/2025-travel-1_img/preview_18.webp and /dev/null differ
diff --git a/content/posts/files/2025-travel-1_img/preview_19.webp b/content/posts/files/2025-travel-1_img/preview_19.webp
deleted file mode 100644
index b234b0c..0000000
Binary files a/content/posts/files/2025-travel-1_img/preview_19.webp and /dev/null differ
diff --git a/content/posts/files/2025-travel-1_img/preview_2.webp b/content/posts/files/2025-travel-1_img/preview_2.webp
deleted file mode 100644
index c730b03..0000000
Binary files a/content/posts/files/2025-travel-1_img/preview_2.webp and /dev/null differ
diff --git a/content/posts/files/2025-travel-1_img/preview_20.webp b/content/posts/files/2025-travel-1_img/preview_20.webp
deleted file mode 100644
index 266a83e..0000000
Binary files a/content/posts/files/2025-travel-1_img/preview_20.webp and /dev/null differ
diff --git a/content/posts/files/2025-travel-1_img/preview_21.webp b/content/posts/files/2025-travel-1_img/preview_21.webp
deleted file mode 100644
index 3cab02c..0000000
Binary files a/content/posts/files/2025-travel-1_img/preview_21.webp and /dev/null differ
diff --git a/content/posts/files/2025-travel-1_img/preview_22.webp b/content/posts/files/2025-travel-1_img/preview_22.webp
deleted file mode 100644
index 5530efa..0000000
Binary files a/content/posts/files/2025-travel-1_img/preview_22.webp and /dev/null differ
diff --git a/content/posts/files/2025-travel-1_img/preview_23.webp b/content/posts/files/2025-travel-1_img/preview_23.webp
deleted file mode 100644
index aca8d32..0000000
Binary files a/content/posts/files/2025-travel-1_img/preview_23.webp and /dev/null differ
diff --git a/content/posts/files/2025-travel-1_img/preview_3.webp b/content/posts/files/2025-travel-1_img/preview_3.webp
deleted file mode 100644
index 511e4c4..0000000
Binary files a/content/posts/files/2025-travel-1_img/preview_3.webp and /dev/null differ
diff --git a/content/posts/files/2025-travel-1_img/preview_4.webp b/content/posts/files/2025-travel-1_img/preview_4.webp
deleted file mode 100644
index bfbe20e..0000000
Binary files a/content/posts/files/2025-travel-1_img/preview_4.webp and /dev/null differ
diff --git a/content/posts/files/2025-travel-1_img/preview_5.webp b/content/posts/files/2025-travel-1_img/preview_5.webp
deleted file mode 100644
index 5d5811d..0000000
Binary files a/content/posts/files/2025-travel-1_img/preview_5.webp and /dev/null differ
diff --git a/content/posts/files/2025-travel-1_img/preview_6.webp b/content/posts/files/2025-travel-1_img/preview_6.webp
deleted file mode 100644
index 076e35b..0000000
Binary files a/content/posts/files/2025-travel-1_img/preview_6.webp and /dev/null differ
diff --git a/content/posts/files/2025-travel-1_img/preview_7.webp b/content/posts/files/2025-travel-1_img/preview_7.webp
deleted file mode 100644
index 02cd89a..0000000
Binary files a/content/posts/files/2025-travel-1_img/preview_7.webp and /dev/null differ
diff --git a/content/posts/files/2025-travel-1_img/preview_8.webp b/content/posts/files/2025-travel-1_img/preview_8.webp
deleted file mode 100644
index 4c87281..0000000
Binary files a/content/posts/files/2025-travel-1_img/preview_8.webp and /dev/null differ
diff --git a/content/posts/files/2025-travel-1_img/preview_9.webp b/content/posts/files/2025-travel-1_img/preview_9.webp
deleted file mode 100644
index 3791fbb..0000000
Binary files a/content/posts/files/2025-travel-1_img/preview_9.webp and /dev/null differ
diff --git a/content/posts/files/2025-travel-1_img/saologo.png b/content/posts/files/2025-travel-1_img/saologo.png
deleted file mode 100644
index 3fceeeb..0000000
Binary files a/content/posts/files/2025-travel-1_img/saologo.png and /dev/null differ
diff --git a/content/posts/files/hype_curve.png b/content/posts/files/hype_curve.png
deleted file mode 100644
index 9147d5e..0000000
Binary files a/content/posts/files/hype_curve.png and /dev/null differ
diff --git a/content/posts/files/laughing-man.jpeg b/content/posts/files/laughing-man.jpeg
deleted file mode 100644
index 652603c..0000000
Binary files a/content/posts/files/laughing-man.jpeg and /dev/null differ
diff --git a/content/posts/files/lets-code-3d_img/1.jpg b/content/posts/files/lets-code-3d_img/1.jpg
deleted file mode 100644
index 87f41e7..0000000
Binary files a/content/posts/files/lets-code-3d_img/1.jpg and /dev/null differ
diff --git a/content/posts/files/lets-code-3d_img/2.jpg b/content/posts/files/lets-code-3d_img/2.jpg
deleted file mode 100644
index db14947..0000000
Binary files a/content/posts/files/lets-code-3d_img/2.jpg and /dev/null differ
diff --git a/content/posts/files/lets-code-3d_img/3.png b/content/posts/files/lets-code-3d_img/3.png
deleted file mode 100644
index 9887043..0000000
Binary files a/content/posts/files/lets-code-3d_img/3.png and /dev/null differ
diff --git a/content/posts/files/lets-code-3d_img/4.jpg b/content/posts/files/lets-code-3d_img/4.jpg
deleted file mode 100644
index 4e7ebc7..0000000
Binary files a/content/posts/files/lets-code-3d_img/4.jpg and /dev/null differ
diff --git a/content/posts/files/lets-code-3d_result.stl b/content/posts/files/lets-code-3d_result.stl
deleted file mode 100644
index fdd4d19..0000000
Binary files a/content/posts/files/lets-code-3d_result.stl and /dev/null differ
diff --git a/content/posts/files/lets-code-3d_source.scad b/content/posts/files/lets-code-3d_source.scad
deleted file mode 100644
index b651cb3..0000000
--- a/content/posts/files/lets-code-3d_source.scad
+++ /dev/null
@@ -1,66 +0,0 @@
-// Толщина стенки
-wall = 2;
-
-// Высота внешняя
-height = 12;
-
-// Длина основной части (внутренняя)
-l1 = 15;
-
-// Длина носика (внутренняя)
-l2 = 20;
-
-// Ширина у основания (внутренняя)
-w = 15;
-
-// Толщина метала бокорезов
-toolWidth = 2.1;
-
-// Нижняя крышка
-cover(0);
-
-// Верхняя крышка
-cover(height - wall);
-
-// Корпус
-difference() {
- linear_extrude(height)
- polygon(
- [ // Полигон идёт против часовой стрелки
- [0, 0],
- [wall, 0],
- [wall, l1],
- [w / 2 + wall, l1 + l2], // Внутренний кончик носика
- [w + wall, l1],
- [w + wall, 0],
- [w + wall * 2, 0],
- [w + wall * 2, l1],
- [w / 2 + wall / 2 + wall, l1 + l2 + wall], // Внешний кончик носика
- [w / 2 - wall / 2 + wall, l1 + l2 + wall],
- [0, l1],
- ]
- );
-
- // Вырезы
- translate([w + wall, 0, height / 2 - toolWidth]) // Правый вырез чуть ниже середины
- cube([wall, l1 / 2, toolWidth]);
- translate([0, 0, height / 2]) // Левый вырез чуть выше середины
- cube([wall, l1 / 2, toolWidth]);
-}
-
-
-// Крышка
-module cover(z) {
- translate([0, 0, z])
- linear_extrude(wall)
- polygon(
- [ // Полигон идёт против часовой стрелки
- [0, 0],
- [w + wall * 2, 0],
- [w + wall * 2, l1],
- [w / 2 + wall / 2 + wall, l1 + l2 + wall],
- [w / 2 - wall / 2 + wall, l1 + l2 + wall],
- [0, l1],
- ]
- );
-}
diff --git a/content/posts/files/makeup-organizer_img/1.png b/content/posts/files/makeup-organizer_img/1.png
deleted file mode 100644
index 8f26704..0000000
Binary files a/content/posts/files/makeup-organizer_img/1.png and /dev/null differ
diff --git a/content/posts/files/makeup-organizer_img/2.png b/content/posts/files/makeup-organizer_img/2.png
deleted file mode 100644
index 6613744..0000000
Binary files a/content/posts/files/makeup-organizer_img/2.png and /dev/null differ
diff --git a/content/posts/files/makeup-organizer_img/3.png b/content/posts/files/makeup-organizer_img/3.png
deleted file mode 100644
index 993135e..0000000
Binary files a/content/posts/files/makeup-organizer_img/3.png and /dev/null differ
diff --git a/content/posts/files/makeup-organizer_organizer.tar.zst b/content/posts/files/makeup-organizer_organizer.tar.zst
deleted file mode 100644
index 7e2e2bb..0000000
Binary files a/content/posts/files/makeup-organizer_organizer.tar.zst and /dev/null differ
diff --git a/content/posts/files/meshtastic_img/tbeam.jpg b/content/posts/files/meshtastic_img/tbeam.jpg
deleted file mode 100644
index 214dc21..0000000
Binary files a/content/posts/files/meshtastic_img/tbeam.jpg and /dev/null differ
diff --git a/content/posts/files/meshtastic_img/tbeam.webp b/content/posts/files/meshtastic_img/tbeam.webp
deleted file mode 100644
index 7e89d94..0000000
Binary files a/content/posts/files/meshtastic_img/tbeam.webp and /dev/null differ
diff --git a/content/projects/games/index.md b/content/projects/games/index.md
index 4533a08..6a9cf4c 100644
--- a/content/projects/games/index.md
+++ b/content/projects/games/index.md
@@ -9,22 +9,24 @@ title: PICO-8
[](/projects/games/lines.p8.png)
[](/projects/games/snake.p8.png)
+
+
И на всякий случай дистрибутивы самих приложений. Ведь их больше не купить у нас в стране, а значит это не пиратство, а корсарство! Яррр!
# PICO-8
-| Linux | macOS | Windows |
-|-------|-------|---------|
-|[Скачать](/files/pico-8_0_2_6b_amd64.zip)|[Скачать](/files/pico-8_0_2_6b_osx.zip)|[Скачать](/files/pico-8_0_2_6b_windows.zip)|
+| Linux | macOS | Windows |
+| ----------------------------------------- | --------------------------------------- | ------------------------------------------- |
+| [Скачать](/files/pico-8_0_2_6b_amd64.zip) | [Скачать](/files/pico-8_0_2_6b_osx.zip) | [Скачать](/files/pico-8_0_2_6b_windows.zip) |
# Picotron
-| Linux | macOS | Windows |
-|-------|-------|---------|
-|[Скачать](/files/picotron_0_1_0g_amd64.zip)|[Скачать](/files/picotron_0_1_0g_osx.zip)|[Скачать](/files/picotron_0_1_0g_windows.zip)|
+| Linux | macOS | Windows |
+| ------------------------------------------- | ----------------------------------------- | --------------------------------------------- |
+| [Скачать](/files/picotron_0_1_0g_amd64.zip) | [Скачать](/files/picotron_0_1_0g_osx.zip) | [Скачать](/files/picotron_0_1_0g_windows.zip) |
# Voxatron
-| Linux | macOS | Windows |
-|-------|-------|---------|
-|[Скачать](/files/voxatron_0_3_5b_amd64.zip)|[Скачать](/files/voxatron_0_3_5b_osx.zip)|[Скачать](/files/voxatron_0_3_5b_windows.zip)|
+| Linux | macOS | Windows |
+| ------------------------------------------- | ----------------------------------------- | --------------------------------------------- |
+| [Скачать](/files/voxatron_0_3_5b_amd64.zip) | [Скачать](/files/voxatron_0_3_5b_osx.zip) | [Скачать](/files/voxatron_0_3_5b_windows.zip) |
diff --git a/content/projects/grouper/index.md b/content/projects/grouper/index.md
new file mode 100644
index 0000000..e7e79f3
--- /dev/null
+++ b/content/projects/grouper/index.md
@@ -0,0 +1,40 @@
+---
+title: "grouper - Дополнение для Firefox"
+---
+
+Ссылка на Addons Mozilla: https://addons.mozilla.org/ru/firefox/addon/groupper/
+
+Репозиторий: https://gitrepo.ru/NeonXP/Grouper
+
+Расширение для Firefox для автоматической группировки вкладок по группам на базе
+доменного имени сайта.
+
+
+
+При этом домен преобразуется в имя вкладки по следующим
+правилам:
+
+1. Домен делится по точкам
+2. Отсекается домен 1 уровня (.ru, .com, .net и т.п.)
+3. Если самый верхний уровень домена — www, то он так же отсекается, как не
+ информативная часть
+4. Оставшееся преобразуется в Title Case (то есть первая буква каждого слова
+ становится заглавной)
+
+Таким образом, например, все страницы домена `www.some.site.ru` сгруппируются
+автоматически в группу `Some Site`.
+
+И вот так это выглядит у меня:
+
+
+
+Да, подобных расширений более одного, но мне хотелось именно эти правила по
+формированию имен групп. В других расширениях или использовался только домен
+второго уровня, или были другие неудобности. Например, все группы были одного
+цвета, а хотелось бы автоматически разного, чтобы визуально различались, или ещё
+какие шороховатости. Я не говорю, что у меня идеально, но оно идеально для _меня_!
+
+Отдельно, хотел бы отметить его простоту. Оно делает только то что написано
+выше, никаких треккингов, реклам или прочего мусора! Более того, js код никак не
+обфусцирован, соответственно, любой может убедиться в этом сам. Да да, в
+современном мире, это скорее особенность, чем само собой разумеющееся.
diff --git a/content/projects/qchat.md b/content/projects/qchat.md
deleted file mode 100644
index ed3b9a0..0000000
--- a/content/projects/qchat.md
+++ /dev/null
@@ -1,89 +0,0 @@
----
-title: 'qChat - quick chat'
----
-
-Репозиторий: https://gitrepo.ru/NeonXP/qChat
-
-Очень маленький и минималистичный чат, который реализует собой чат поверх SSH.
-
-Внешних зависимостей нет, должен работать на любой картошке.
-
-Подключение к демонстрационному чату:
-
-```
-ssh neonxp.ru -p 1337
-```
-
-## Установка и запуск
-
-Просто скачайте и запустите бинарник для соответствующей платформы. При первом
-запуске в текущей рабочей директории будет создан конфиг файл с умолчальной
-конфигурацией. При последующих запусках — будет он использоваться и не
-пересоздаваться.
-
-В конфиге лежит приватный ключ! Его нужно хранить в секрете. Остальные параметры
-там — дефолтный список каналов и название сервера. Их можно менять.
-
-### Ссылки для скачивания
-
-#### v0.0.2 [Исходники](https://gitrepo.ru/NeonXP/qChat/archive/v0.0.2.tar.gz)
-
-Готовые бинарники:
-
-- [Linux amd64](/files/qchat/v0.0.2/qchat-linux-amd64.tar.gz)
-- [Linux arm64](/files/qchat/v0.0.2/qchat-linux-arm64.tar.gz)
-- [Linux x86](/files/qchat/v0.0.2/qchat-linux-386.tar.gz)
-- [Linux arm/v6](/files/qchat/v0.0.2/qchat-linux-arm-v6.tar.gz)
-- [Linux arm/v7](/files/qchat/v0.0.2/qchat-linux-arm-v7.tar.gz)
-- [macOS amd64](/files/qchat/v0.0.2/qchat-darwin-amd64.tar.gz)
-- [macOS arm64](/files/qchat/v0.0.2/qchat-darwin-arm64.tar.gz)
-- [Windows x32](/files/qchat/v0.0.2/qchat-windows-386.zip)
-- [Windows x64](/files/qchat/v0.0.2/qchat-windows-amd64.zip)
-- [dragonfly amd64](/files/qchat/v0.0.2/qchat-dragonfly-amd64.tar.gz)
-- [FreeBSD amd64](/files/qchat/v0.0.2/qchat-freebsd-amd64.tar.gz)
-- [FreeBSD arm64](/files/qchat/v0.0.2/qchat-freebsd-arm64.tar.gz)
-- [NetBSD amd64](/files/qchat/v0.0.2/qchat-netbsd-amd64.tar.gz)
-- [NetBSD arm64](/files/qchat/v0.0.2/qchat-netbsd-arm64.tar.gz)
-- [OpenBSD amd64](/files/qchat/v0.0.2/qchat-openbsd-amd64.tar.gz)
-- [OpenBSD arm64](/files/qchat/v0.0.2/qchat-openbsd-arm64.tar.gz)
-- [Solaris amd64](/files/qchat/v0.0.2/qchat-solaris-amd64.tar.gz)
-
-## Установка с помощью Docker
-
-```
-docker volume create qchat_conf
-docker run -d --name qchat -p 1337:1337 -v qchat_conf:/etc/qchat gitrepo.ru/neonxp/qchat /app/qchat -config /etc/qchat/config.json
-```
-
-## Подключение к чату
-
-Для подключения к чату достаточно стандартного клиента ssh. Во всех адекватных
-ОС он есть из коробки. Для Windows - можно использовать Putty.
-
-```
-ssh [имя_пользователя@]хост -p 1337
-```
-
-Например, при локально запущенном чате:
-
-```
-ssh localhost -p 1337
-```
-
-Подойдёт любой эмулятор терминала совместимый с VT100.
-
-## Команды сервера
-
-Полную справку так же можно получить с помощью команды `/help`.
-
-- `/join [chan]` - подключиться к каналу [chan]. Если его нет, он будет создан.
-- `/chans` - список каналов
-- `/users` - список пользователей на сервере (не на канале, а именно на сервере)
-- `/me [message]` - отправка сообщения как бы от третьего лица
-
-## Форматирование сообщений
-
-- `*Полужирный*`
-- `+Курсив+`
-- `-Зачёркнутый текст-`
-- `_Подчёркнутый текст_`
diff --git a/content/projects/qchat/index.md b/content/projects/qchat/index.md
new file mode 100644
index 0000000..0737a51
--- /dev/null
+++ b/content/projects/qchat/index.md
@@ -0,0 +1,91 @@
+---
+title: "qChat - quick chat"
+---
+
+Репозиторий: https://gitrepo.ru/NeonXP/qChat
+
+Очень маленький и минималистичный чат, который реализует собой чат поверх SSH.
+
+
+
+Внешних зависимостей нет, должен работать на любой картошке.
+
+Подключение к демонстрационному чату:
+
+```
+ssh neonxp.ru -p 1337
+```
+
+## Установка и запуск
+
+Просто скачайте и запустите бинарник для соответствующей платформы. При первом
+запуске в текущей рабочей директории будет создан конфиг файл с умолчальной
+конфигурацией. При последующих запусках — будет он использоваться и не
+пересоздаваться.
+
+В конфиге лежит приватный ключ! Его нужно хранить в секрете. Остальные параметры
+там — дефолтный список каналов и название сервера. Их можно менять.
+
+### Ссылки для скачивания
+
+#### v0.0.2 [Исходники](https://gitrepo.ru/NeonXP/qChat/archive/v0.0.2.tar.gz)
+
+Готовые бинарники:
+
+- [Linux amd64](/files/qchat/v0.0.2/qchat-linux-amd64.tar.gz)
+- [Linux arm64](/files/qchat/v0.0.2/qchat-linux-arm64.tar.gz)
+- [Linux x86](/files/qchat/v0.0.2/qchat-linux-386.tar.gz)
+- [Linux arm/v6](/files/qchat/v0.0.2/qchat-linux-arm-v6.tar.gz)
+- [Linux arm/v7](/files/qchat/v0.0.2/qchat-linux-arm-v7.tar.gz)
+- [macOS amd64](/files/qchat/v0.0.2/qchat-darwin-amd64.tar.gz)
+- [macOS arm64](/files/qchat/v0.0.2/qchat-darwin-arm64.tar.gz)
+- [Windows x32](/files/qchat/v0.0.2/qchat-windows-386.zip)
+- [Windows x64](/files/qchat/v0.0.2/qchat-windows-amd64.zip)
+- [dragonfly amd64](/files/qchat/v0.0.2/qchat-dragonfly-amd64.tar.gz)
+- [FreeBSD amd64](/files/qchat/v0.0.2/qchat-freebsd-amd64.tar.gz)
+- [FreeBSD arm64](/files/qchat/v0.0.2/qchat-freebsd-arm64.tar.gz)
+- [NetBSD amd64](/files/qchat/v0.0.2/qchat-netbsd-amd64.tar.gz)
+- [NetBSD arm64](/files/qchat/v0.0.2/qchat-netbsd-arm64.tar.gz)
+- [OpenBSD amd64](/files/qchat/v0.0.2/qchat-openbsd-amd64.tar.gz)
+- [OpenBSD arm64](/files/qchat/v0.0.2/qchat-openbsd-arm64.tar.gz)
+- [Solaris amd64](/files/qchat/v0.0.2/qchat-solaris-amd64.tar.gz)
+
+## Установка с помощью Docker
+
+```
+docker volume create qchat_conf
+docker run -d --name qchat -p 1337:1337 -v qchat_conf:/etc/qchat gitrepo.ru/neonxp/qchat /app/qchat -config /etc/qchat/config.json
+```
+
+## Подключение к чату
+
+Для подключения к чату достаточно стандартного клиента ssh. Во всех адекватных
+ОС он есть из коробки. Для Windows - можно использовать Putty.
+
+```
+ssh [имя_пользователя@]хост -p 1337
+```
+
+Например, при локально запущенном чате:
+
+```
+ssh localhost -p 1337
+```
+
+Подойдёт любой эмулятор терминала совместимый с VT100.
+
+## Команды сервера
+
+Полную справку так же можно получить с помощью команды `/help`.
+
+- `/join [chan]` - подключиться к каналу [chan]. Если его нет, он будет создан.
+- `/chans` - список каналов
+- `/users` - список пользователей на сервере (не на канале, а именно на сервере)
+- `/me [message]` - отправка сообщения как бы от третьего лица
+
+## Форматирование сообщений
+
+- `*Полужирный*`
+- `+Курсив+`
+- `-Зачёркнутый текст-`
+- `_Подчёркнутый текст_`
diff --git a/hugo.yaml b/hugo.yaml
index 411e52c..321093d 100644
--- a/hugo.yaml
+++ b/hugo.yaml
@@ -36,6 +36,14 @@ markup:
goldmark:
renderer:
unsafe: true
+ extensions:
+ definitionList: true
+ footnote: true
+ linkify: true
+ linkifyProtocol: https
+ strikethrough: true
+ table: true
+ taskList: true
pagination:
disableAliases: false
pagerSize: 10
diff --git a/themes/neonxp/layouts/page.html b/themes/neonxp/layouts/page.html
index 6bc6380..98ddec9 100644
--- a/themes/neonxp/layouts/page.html
+++ b/themes/neonxp/layouts/page.html
@@ -23,7 +23,7 @@
{{end}}
{{$comment.body | safeHTML}}
+ {{$comment.body | safeHTML}}
{{if $comment.body_signature}}