[{"content":"И действительно это так. Разок попробовав разработку в соавторстве с БЯМ уже не хочется писать код «руками». Более того, от мысли писать самостоятельно даже начинает воротить! Это именно что лень во мне уже говорит. Ведь это так просто: даёшь задачу и просто сидишь смотришь, как за тебя пишется код!\nНадеюсь, я не слишком поздно это в себе распознал, и ещё не потерял навык :) Пожалуй, устрою себе неделю без Claude Code. А дальше — ясно будет, будет ли у меня «ломка» или всё же я передраматизировал проблему.\nПодумалось, а как бы выглядел рехаб для ИИ-наркоманов? :)\n","permalink":"https://neonxp.ru/posts/2026-05-12-ai-drugs/","summary":"\u003cp\u003eИ действительно это так. Разок попробовав разработку в соавторстве с БЯМ уже не хочется писать код «руками». Более того, от мысли писать самостоятельно даже начинает воротить! Это именно что лень во мне уже говорит. Ведь это так просто: даёшь задачу и просто сидишь смотришь, как за тебя пишется код!\u003c/p\u003e\n\u003cp\u003eНадеюсь, я не слишком поздно это в себе распознал, и ещё не потерял навык :) Пожалуй, устрою себе неделю без Claude Code. А дальше — ясно будет, будет ли у меня «ломка» или всё же я передраматизировал проблему.\u003c/p\u003e","title":"ИИ как наркотик"},{"content":"Попалось сегодня в РСС читалке:\nКрик души Роба Пайка\nhugeping(ping,1) — All\n2026-05-12 10:30:23\nAlthough trained in physics, I worked in the computing industry with pride and purpose for over 40 years. And now I can do nothing but sit back and watch it destroy itself for no valid reason beyond hubris (if I\u0026rsquo;m being charitable).\nIneffable sadness watching something I once loved deliberately lose its soul.\nI spent my time trying to make it better. Not just write code, but find better or at least different ways to do so. Simpler, cleaner, more general, more comprehensible.\nWhat\u0026rsquo;s happening today is a complete repudiation of everything I was trying to achieve.\nBut hey, the industry has spoken. Who am I to question it?\nhttps://hachyderm.io/@robpike/116557975987213548\nСначала не понял, что возмутило этого безусловно уважаемого мной человека. А потом только пройдя в комментарии (да, из России не открывается первоисточник) я узнал о неком эссе «Самоубийство сверхдержавы» — весьма интересное чтиво. И да, автор в конце поддерживает укронациков, но это сейчас в моде у запада, я уже даже не реагирую почти на это.\nВыводы по эссе я никакие делать не буду, ибо незачем. Но приятно смотреть на то, как у врага паника.\nНу а то, что ИИ разрушает индустрию (как я понял, у Пайка посыл всё же про это) не говорил только ленивый, да даже я вчера. Но при всём при этом я действительно с интересом продолжаю всё глубже и глубже погружаться в эту тему, ибо очень интересно. Наверное, чем-то схоже с курением или алкоголем — понимаешь, что тебя это убивает, но остановиться не можешь или не хочешь (хотя в случае курения и алкоголя я и от того и от другого таки отказался :) ).\n","permalink":"https://neonxp.ru/posts/2026-05-12-superpower/","summary":"\u003cp\u003eПопалось сегодня в РСС читалке:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e\u003ca href=\"https://club.hugeping.ru/blog/tVSxrHZAtN6p3OqyVKKp#tVSxrHZAtN6p3OqyVKKp\"\u003eКрик души Роба Пайка\u003c/a\u003e\u003cbr\u003e\n\u003ca href=\"https://club.hugeping.ru/blog/from/hugeping\"\u003ehugeping\u003c/a\u003e(ping,1) — All\u003cbr\u003e\n2026-05-12 10:30:23\u003c/p\u003e\n\u003cp\u003eAlthough trained in physics, I worked in the computing industry with pride and purpose for over 40 years. And now I can do nothing but sit back and watch it destroy itself for no valid reason beyond hubris (if I\u0026rsquo;m being charitable).\u003c/p\u003e\n\u003cp\u003eIneffable sadness watching something I once loved deliberately lose its soul.\u003c/p\u003e\n\u003cp\u003eI spent my time trying to make it better. Not just write code, but find better or at least different ways to do so. Simpler, cleaner, more general, more comprehensible.\u003c/p\u003e","title":"Крик души Роба Пайка"},{"content":"В последнее время ловлю себя на мысли, что с появлением БЯМ, кажется, что программирование потеряло какую-то свою определённую ценность. Ведь сейчас какой смысл делать какие-то свои утилитки или программы, когда можно просто описать задачу для БЯМ и она напишет, и, возможно, даже неплохо то, что ей заказано?\nАссоциация с репликаторами из сериала «Звёздный путь», где наличие этих «волшебных» с нашей точки зрения машин, в мире сериала обесценило как таковую валюту и необходимость работы только ради материального вознаграждения. Действительно, зачем работать ради хлеба насущного, если этот самый хлеб может бесплатно за мгновение выдать машина если её попросить?\nТак же и с программированием. Зачем сейчас писать код, если можно просто дать задачу БЯМ и она её реализует? От всего этого я чувствую\u0026hellip; Наверное, некоторое расстройство. Можно было бы сказать, что «нейронка никогда не будет писать код как человек». Я бы не стал говорить «никогда». Никогда не говори «никогда». То ли ещё будет. А можно сказать «а где будет этот бесплатный волшебный генератор программ, если корпорации взвинтят цены на доступ к БЯМ?» но проблема в том, что БЯМ весьма сносного качества можно развернуть уже почти где угодно! Вон, я недавно развернул на копеечном Steam Deck вполне сносную БЯМ. А значит что? Значит БЯМ с нами навсегда и уже никуда не денутся. И это я ещё не говорю о том, что разных поставщиков доступа к мощным БЯМ уже не мало, и все не исчезнут. Даже в случае «чебурнета» у нас есть и локальные поставщики типа cloud.ru.\nНужно ли будет в будущем программировать? Не знаю. Возможно, мы обречены превратиться в «операторов нейронки».\n","permalink":"https://neonxp.ru/posts/2026-05-11-some-ai-thoughts/","summary":"\u003cp\u003eВ последнее время ловлю себя на мысли, что с появлением БЯМ, кажется, что программирование потеряло какую-то свою определённую ценность. Ведь сейчас какой смысл делать какие-то свои утилитки или программы, когда можно просто описать задачу для БЯМ и она напишет, и, возможно, даже неплохо то, что ей заказано?\u003c/p\u003e\n\u003cp\u003eАссоциация с репликаторами из сериала «Звёздный путь», где наличие этих «волшебных» с нашей точки зрения машин, в мире сериала обесценило как таковую валюту и необходимость работы только ради материального вознаграждения. Действительно, зачем работать ради хлеба насущного, если этот самый хлеб может бесплатно за мгновение выдать машина если её попросить?\u003c/p\u003e","title":"Немного мыслей об ИИ"},{"content":"В мире всяких аналогов make создано достаточно. И даже больше чем достаточно! Есть как альтернативные реализации (GNU Make vs BSD Make), так и совсем самобытные (redo). В моей практике, как разработчика НЕ на Си — make используется исключительно как запускалка некоторых частых команд. И это притом, что make всё же несколько для другого. И в целом, именно запускалка — скорее побочный эффект.\nКазалось бы, тогда для большей красоты — стоит использовать специализированное решение, например, Taskfile. Но тогда каждому для работы с проектом придётся ставить приложение для работы с Taskfile. Выглядит как такое себе решение.\nНо! У всех же точно есть POSIX sh! Так что мешает делать очень минималистичный sh скрипт, суть которого в простом запуске команд? Да ничего! Вот самый простой вариант:\n#! /bin/sh case \u0026#34;$1\u0026#34; in infra_up) docker compose up -d ;; infra_down) docker compose down ;; *) echo \u0026#34;Неизвестная команда\u0026#34; ;; esac Всё! Ничуть не сложнее обычного Makefile который обычно для такого используется! И работать будет вот совсем везде! :)\n","permalink":"https://neonxp.ru/posts/2026-05-11-sh-for-make/","summary":"\u003cp\u003eВ мире всяких аналогов make создано достаточно. И даже больше чем достаточно! Есть как альтернативные реализации (GNU Make vs BSD Make), так и совсем самобытные (redo). В моей практике, как разработчика НЕ на Си — make используется исключительно как запускалка некоторых частых команд. И это притом, что make всё же несколько для другого. И в целом, именно запускалка — скорее побочный эффект.\u003c/p\u003e\n\u003cp\u003eКазалось бы, тогда для большей красоты — стоит использовать специализированное решение, например, \u003ca href=\"https://taskfile.dev/\"\u003eTaskfile\u003c/a\u003e. Но тогда каждому для работы с проектом придётся ставить приложение для работы с Taskfile. Выглядит как такое себе решение.\u003c/p\u003e","title":"sh вместо make"},{"content":"Немного случайных мыслей, которые пришли ко мне некоторое время назад.\nЕсть такая ОС, которая, к сожалению не взлетела, а именно, Plan9. Разрабатывалась она, если я правильно понял, как наследник того самого оригинального UNIX. И даже, примерно от тех же людей, во всяком случае от той же конторы.\nОсобо рассказывать про неё я не собираюсь, хотя она и весьма и весьма достойная, я бы хотел отметить только одну небольшую (или большую?) её деталь.\nА именно, то что она в очень большой степени заточена под GUI и мышь. Более того, «главной» программой Plan9 - редактором Acme вообще не возможно пользоваться без трёхкнопочной мыши и графического монитора!\nТак что же получается? Отцы основатели UNIX видели дальнейшее его развитие (в т.ч. Unix-way) исключительно как GUI ориентированную систему? Однако развитие всего Unix-like мира пошло «в бок» от более старого UNIX оставшись преимущественно терминально ориентированным?\nНе хочу делать никаких выводов, просто забавное наблюдение-размышление, не более того. И да, было бы любопытно заглянуть в альтернативную временную линию, где Plan9 не остался бы исследовательским проектом с неудачными попытками монетизации, а вполне себе мейнстримом, на который бы равнялись эти наши линуксомакоси :)\n","permalink":"https://neonxp.ru/posts/2026-05-06-plan9/","summary":"\u003cp\u003eНемного случайных мыслей, которые пришли ко мне некоторое время назад.\u003c/p\u003e\n\u003cp\u003eЕсть такая ОС, которая, к сожалению не взлетела, а именно, Plan9. Разрабатывалась она, если я правильно понял, как наследник того самого оригинального UNIX. И даже, примерно от тех же людей, во всяком случае от той же конторы.\u003c/p\u003e\n\u003cp\u003eОсобо рассказывать про неё я не собираюсь, хотя она и весьма и весьма достойная, я бы хотел отметить только одну небольшую (или большую?) её деталь.\u003c/p\u003e","title":"Пара мыслей о Plan9"},{"content":"Это, наверное, одно из лучших моих вложений денег. Мой личный суверенитет от облаков.\nОсновные функции:\nСобственно, синхронизация той самой важной для меня директории «Документы». Потому что её потерю я точно не смогу восполнить. Инкрементальный бекап ноутбука через rsync, как я где - то уже писал, вроде в телеге (может стоит и здесь оставить заметку на всякий случай?). Календарь / контакты по webdav. Просто приятно. Хорошая альтернатива облакам. Торрентокачалка. Пиратство морально оправдано. Точка. Медиасервер. В основном чтобы просматривать трофейный контент на смарт тв. TT - RSS. Читаю RSS ленты на смартфоне и ноутбуке, а TT - RSS позволяет синхронизировать уже прочитанное. Утерянный или недоделанный функционал:\nСинхронизация подкастов по протоколу gpodder (AntennaPod на смартфоне и в автомобиле + Kasts на ноутбуке). Раньше синкал через Nextcloud, отказался от него. Пилю синхронизацию в свободное время. Когда допилю — расскажу в этом блоге. Медиастримминг музыки с NAS на смартфон / компьютер / автомобиль. Пока не дошли руки наладить. Обхожусь дедовскими способами — на каждом устройстве просто локальная медиатека. ","permalink":"https://neonxp.ru/pages/setup/nas/","summary":"\u003cp\u003eЭто, наверное, одно из лучших моих вложений денег. Мой личный суверенитет от облаков.\u003c/p\u003e\n\u003cp\u003eОсновные функции:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eСобственно, синхронизация той самой важной для меня директории «Документы».   Потому что её потерю я точно не смогу восполнить.\u003c/li\u003e\n\u003cli\u003eИнкрементальный бекап ноутбука через rsync, как я где - то уже писал, вроде в   телеге (может стоит и здесь оставить заметку на всякий случай?).\u003c/li\u003e\n\u003cli\u003eКалендарь / контакты по webdav. Просто приятно. Хорошая альтернатива облакам.\u003c/li\u003e\n\u003cli\u003eТоррентокачалка. Пиратство морально оправдано. Точка.\u003c/li\u003e\n\u003cli\u003eМедиасервер. В основном чтобы просматривать трофейный контент на смарт тв.\u003c/li\u003e\n\u003cli\u003eTT - RSS. Читаю RSS ленты на смартфоне и ноутбуке, а TT - RSS позволяет   синхронизировать уже прочитанное.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eУтерянный или недоделанный функционал:\u003c/p\u003e","title":"NAS - Synology DS420+"},{"content":"Уже достаточно давно я сторонник исключительно ноутбуков и никак не воспринимаю стационарные компьютеры. При этом, я считаю, что ноутбук должен быть одновременно и мощным, мобильным и, что важно, ремонтопригодным, даже в домашних условиях. Понимаю, что на практике это практически не осуществимо. Но самым близким к этому для меня стал Lenovo Thinkpad T14 Gen4, версия на intel (это важно, т.к. только intel версия поддерживает расширение ОЗУ). ОЗУ я в нем добил до 48Гб, пока мне хватает.\nВот основное что на нём установлено:\nОС: AltLinux p11. DE: Gnome 48 Эмулятор терминала: Ghostty. Оболочка: zsh. Текстовый редактор: Neovim/VSCodium Браузер: Яндекс Браузер. Коммуникации: Thunderbird/Neomutt (e - mail), Dino (jabber), telegram desktop (будь он неладен). Музыка: Rhythmbox. Видео: VLC. Книги: лежат на NAS + сразу достаточно много загрузил в читалку. Была calibre, но я так и не оценил от неё плюсов и дропнул. Основной язык: golang (удивительно). Синхронизация: с помощью syncthing синхронизирую ноутбук \u0026lt; - \u0026gt; NAS \u0026lt; - \u0026gt; смартфон только одну директорию: Документы. По сути, не считая директории с исходниками проектов, это моя самая важная директория на компьютере. Хранилище знаний: [Obsidian](/posts/2024 - 11 - 17 - obsidian/) пока присматриваюсь к ZK или к обычным текстовым файлам Это база, остальное не столько важно.\n","permalink":"https://neonxp.ru/pages/setup/laptop/","summary":"\u003cp\u003eУже достаточно давно я сторонник исключительно ноутбуков и никак не воспринимаю стационарные компьютеры. При этом, я считаю, что ноутбук должен быть одновременно и мощным, мобильным и, что важно, ремонтопригодным, даже в домашних условиях. Понимаю, что на практике это практически не осуществимо. Но самым близким к этому для меня стал Lenovo Thinkpad T14 Gen4, версия на intel (это важно, т.к. только intel версия поддерживает расширение ОЗУ). ОЗУ я в нем добил до 48Гб, пока мне хватает.\u003c/p\u003e","title":"Ноутбук"},{"content":"Бо́льшая часть гуглоговна удалена или отключена. В основном, стараюсь использовать софт из F - Droid.\nВ основном, стараюсь держать минимально необходимый набор софта — банковские приложения, навигацию, коммуникационные приложения, читалки, да пару простеньких игрушек для скрашивания досуга.\nСамое главное — по максимуму отключаю всевозможные уведомления. Ничего не должно меня тревожить. Всё так же остаюсь сторонником идеи что пуши не нужны, а что - то действительно важное — и так придёт на e - mail. Единственное исключение — jabber и рабочий мессенджер. Первый — это этакий бонус узкому элитарному кругу пользователей джаббера, а второй — поскольку рабочие обязанности важнее моих заморочек.\nИз интересного:\nntodotxt - тудушник, который отлично работает с Todo.txt. Conversations - jabber. syncthing - синхронизация. DAVx5 - приложение для синхронизации календарей и контактов с NAS. DS File, DS Get - приложения для работы с NAS. OSMand и OrganicMaps - оффлайн навигация. Ни раз выручала, когда онлайновый карты приказывали долго жить без интернетов. AntennaPod - ИМХО лучшее приложение для подкастов. AIMP - замечательный аудио плеер для локальной музыки. VLC - отличный видеоплеер. KDE Connect - стоит исключительно для быстрого перебрасывания файлов на компьютер. Вроде, из самого интересного — всё. Буду дописывать, если что ещё вспомню.\n","permalink":"https://neonxp.ru/pages/setup/pda/","summary":"\u003cp\u003eБо́льшая часть гуглоговна удалена или отключена. В основном, стараюсь использовать софт из F - Droid.\u003c/p\u003e\n\u003cp\u003eВ основном, стараюсь держать минимально необходимый набор софта — банковские приложения, навигацию, коммуникационные приложения, читалки, да пару простеньких игрушек для скрашивания досуга.\u003c/p\u003e\n\u003cp\u003eСамое главное — по максимуму отключаю всевозможные уведомления. Ничего не должно меня тревожить. Всё так же остаюсь сторонником идеи что пуши не нужны, а что - то \u003cem\u003eдействительно\u003c/em\u003e важное — и так придёт на e - mail. Единственное исключение — jabber и рабочий мессенджер. Первый — это этакий бонус узкому элитарному кругу пользователей джаббера, а второй — поскольку рабочие обязанности важнее моих заморочек.\u003c/p\u003e","title":"Смартфон - OnePlus 10T (рутованный)"},{"content":"Ссылка на Addons Mozilla: https://addons.mozilla.org/ru/firefox/addon/groupper/\nРепозиторий: https://gitrepo.ru/NeonXP/Grouper\nРасширение для Firefox для автоматической группировки вкладок по группам на базе доменного имени сайта.\nПри этом домен преобразуется в имя вкладки по следующим правилам:\nДомен делится по точкам Отсекается домен 1 уровня (.ru, .com, .net и т.п.) Если самый верхний уровень домена — www, то он так же отсекается, как не информативная часть Оставшееся преобразуется в Title Case (то есть первая буква каждого слова становится заглавной) Таким образом, например, все страницы домена www.some.site.ru сгруппируются автоматически в группу Some Site.\nИ вот так этоouper.png]]\nДа, подобных расширений более одного, но мне хотелось именно эти правила по формированию имен групп. В других расширениях или использовался только домен второго уровня, или были другие неудобства. Например, все группы были одного цвета, а хотелось бы автоматически разного, чтобы визуально различались, или ещё какие шороховатости. Я не говорю, что у меня идеально, но оно идеально для меня!\nОтдельно, хотел бы отметить его простоту. Оно делает только то что написано выше, никаких треккингов, реклам или прочего мусора! Более того, js код никак не обфусцирован, соответственно, любой может убедиться в этом сам. Да да, в современном мире, это скорее особенность, чем само собой разумеющееся.\n","permalink":"https://neonxp.ru/projects/grouper/","summary":"\u003cp\u003eСсылка на Addons Mozilla: \u003ca href=\"https://addons.mozilla.org/ru/firefox/addon/groupper/\"\u003ehttps://addons.mozilla.org/ru/firefox/addon/groupper/\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eРепозиторий: \u003ca href=\"https://gitrepo.ru/NeonXP/Grouper\"\u003ehttps://gitrepo.ru/NeonXP/Grouper\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eРасширение для Firefox для автоматической группировки вкладок по группам на базе доменного имени сайта.\u003c/p\u003e\n\u003chr\u003e\n\u003cp\u003eПри этом домен преобразуется в имя вкладки по следующим правилам:\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eДомен делится по точкам\u003c/li\u003e\n\u003cli\u003eОтсекается домен 1 уровня (.ru, .com, .net и т.п.)\u003c/li\u003e\n\u003cli\u003eЕсли самый верхний уровень домена — www, то он так же отсекается, как не    информативная часть\u003c/li\u003e\n\u003cli\u003eОставшееся преобразуется в Title Case (то есть первая буква каждого слова    становится заглавной)\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eТаким образом, например, все страницы домена \u003ccode\u003ewww.some.site.ru\u003c/code\u003e сгруппируются автоматически в группу \u003ccode\u003eSome Site\u003c/code\u003e.\u003c/p\u003e","title":"grouper - Дополнение для Firefox"},{"content":"А ещё у меня есть мой маленький Jabber сервер!\nБыстрое вкатывание Регистрация через клиент (если есть проблемы - пишите мне на почту i@neonxp.ru или куда угодно, я помогу!) Быстрее всего использовать веб клиент: https://neonxp.ru/chat или можно использовать клиент из списка ниже Добавить в список меня i@neonxp.ru и войти в общий чат сервера\nmain@conf.neonxp.ru Возможности сервера Аудио и видео звонки (есть свой turn - сервер) Обмен файлами через сервер (300 мб на файл, 10 гб на пользователя. Пока так, нужно будет больше - подниму лимиты) Полная совместимость с современными стандартами: https://compliance.conversations.im/server/neonxp.ru/ Мощный, быстрый и, главное, ненагруженый сервер! Современные нативные клиенты: Gajim для PC/Mac/Linux Ссылка - на текущий момент мой выбор Dino.im для PC/Mac/Linux Ссылка Monocles chat для Android [Ссылка](https://f - droid.org/packages/de.monocles.chat) - на текущий момент мой выбор Conversations для Android [Ссылка](https://f - droid.org/packages/eu.siacs.conversations/) Another.IM для Android [Ссылка](https://f - droid.org/packages/im.narayana.another/) Monal IM для iOS/Mac [Ссылка](https://monal - im.org/) Siskin IM для iOS/Mac Ссылка ","permalink":"https://neonxp.ru/projects/jabber/","summary":"\u003cp\u003eА ещё у меня есть мой маленький Jabber сервер!\u003c/p\u003e\n\u003ch2 id=\"быстрое-вкатывание\"\u003eБыстрое вкатывание\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003eРегистрация через клиент (если есть проблемы - пишите мне на почту \u003ca href=\"mailto:i@neonxp.ru\"\u003ei@neonxp.ru\u003c/a\u003e или куда угодно, я помогу!)\u003c/li\u003e\n\u003cli\u003eБыстрее всего использовать веб клиент: \u003ca href=\"https://neonxp.ru/chat\"\u003ehttps://neonxp.ru/chat\u003c/a\u003e или можно использовать клиент из списка ниже\u003c/li\u003e\n\u003cli\u003eДобавить в список меня \u003ca href=\"xmpp:i@neonxp.ru\"\u003ei@neonxp.ru\u003c/a\u003e и войти в общий чат сервера\u003cbr\u003e\n\u003ca href=\"xmpp:main@conf.neonxp.ru?join\"\u003emain@conf.neonxp.ru\u003c/a\u003e\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch2 id=\"возможности-сервера\"\u003eВозможности сервера\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eАудио и видео звонки (есть свой turn - сервер)\u003c/li\u003e\n\u003cli\u003eОбмен файлами через сервер (300 мб на файл, 10 гб на пользователя. Пока так, нужно будет больше - подниму лимиты)\u003c/li\u003e\n\u003cli\u003eПолная совместимость с современными стандартами: \u003ca href=\"https://compliance.conversations.im/server/neonxp.ru/\"\u003ehttps://compliance.conversations.im/server/neonxp.ru/\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eМощный, быстрый и, главное, ненагруженый сервер!\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"современные-нативные-клиенты\"\u003eСовременные нативные клиенты:\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eGajim для PC/Mac/Linux \u003ca href=\"https://gajim.org/download/\"\u003eСсылка\u003c/a\u003e - на текущий момент мой выбор\u003c/li\u003e\n\u003cli\u003eDino.im для PC/Mac/Linux \u003ca href=\"https://dino.im/#download\"\u003eСсылка\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMonocles chat для Android [Ссылка](https://f - droid.org/packages/de.monocles.chat) - на текущий момент мой выбор\u003c/li\u003e\n\u003cli\u003eConversations для Android [Ссылка](https://f - droid.org/packages/eu.siacs.conversations/)\u003c/li\u003e\n\u003cli\u003eAnother.IM для Android [Ссылка](https://f - droid.org/packages/im.narayana.another/)\u003c/li\u003e\n\u003cli\u003eMonal IM для iOS/Mac [Ссылка](https://monal - im.org/)\u003c/li\u003e\n\u003cli\u003eSiskin IM для iOS/Mac \u003ca href=\"https://siskin.im/\"\u003eСсылка\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e","title":"Jabber"},{"content":" И на всякий случай дистрибутивы самих приложений. Ведь их больше не купить у нас в стране, а значит это не пиратство, а корсарство! Яррр!\nPICO - 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) Picotron Linux macOS Windows Скачать Скачать Скачать Voxatron Linux macOS Windows Скачать Скачать Скачать ","permalink":"https://neonxp.ru/projects/games/","summary":"\u003cp\u003e\u003cimg alt=\"bubblebreaker.p8.png\" loading=\"lazy\" src=\"/files/projects/games/bubblebreaker.p8.png\"\u003e \u003cimg alt=\"gameof15.p8.png\" loading=\"lazy\" src=\"/files/projects/games/gameof15.p8.png\"\u003e \u003cimg alt=\"lines.p8.png\" loading=\"lazy\" src=\"/files/projects/games/lines.p8.png\"\u003e\u003cimg alt=\"snake.p8.png\" loading=\"lazy\" src=\"/files/projects/games/snake.p8.png\"\u003e\u003c/p\u003e\n\u003chr\u003e\n\u003cp\u003eИ на всякий случай дистрибутивы самих приложений. Ведь их больше не купить у нас в стране, а значит это не пиратство, а корсарство! Яррр!\u003c/p\u003e\n\u003ch1 id=\"pico---8\"\u003ePICO - 8\u003c/h1\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003eLinux\u003c/th\u003e\n          \u003cth\u003emacOS\u003c/th\u003e\n          \u003cth\u003eWindows\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e[Скачать](/files/pico - 8_0_2_6b_amd64.zip)\u003c/td\u003e\n          \u003ctd\u003e[Скачать](/files/pico - 8_0_2_6b_osx.zip)\u003c/td\u003e\n          \u003ctd\u003e[Скачать](/files/pico - 8_0_2_6b_windows.zip)\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch1 id=\"picotron\"\u003ePicotron\u003c/h1\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003eLinux\u003c/th\u003e\n          \u003cth\u003emacOS\u003c/th\u003e\n          \u003cth\u003eWindows\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003ca href=\"/files/picotron_0_1_0g_amd64.zip\"\u003eСкачать\u003c/a\u003e\u003c/td\u003e\n          \u003ctd\u003e\u003ca href=\"/files/picotron_0_1_0g_osx.zip\"\u003eСкачать\u003c/a\u003e\u003c/td\u003e\n          \u003ctd\u003e\u003ca href=\"/files/picotron_0_1_0g_windows.zip\"\u003eСкачать\u003c/a\u003e\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch1 id=\"voxatron\"\u003eVoxatron\u003c/h1\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003eLinux\u003c/th\u003e\n          \u003cth\u003emacOS\u003c/th\u003e\n          \u003cth\u003eWindows\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003ca href=\"/files/voxatron_0_3_5b_amd64.zip\"\u003eСкачать\u003c/a\u003e\u003c/td\u003e\n          \u003ctd\u003e\u003ca href=\"/files/voxatron_0_3_5b_osx.zip\"\u003eСкачать\u003c/a\u003e\u003c/td\u003e\n          \u003ctd\u003e\u003ca href=\"/files/voxatron_0_3_5b_windows.zip\"\u003eСкачать\u003c/a\u003e\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e","title":"PICO - 8 - Мои небольшие игрушки на прекрасном движке PICO - 8"},{"content":"Репозиторий: https://gitrepo.ru/NeonXP/qChat\nОчень маленький и минималистичный чат, который реализует собой чат поверх SSH.\nВнешних зависимостей нет, должен работать на любой картошке.\nПодключение к демонстрационному чату:\nssh neonxp.ru - p 1337\n","permalink":"https://neonxp.ru/projects/qchat/","summary":"\u003cp\u003eРепозиторий: \u003ca href=\"https://gitrepo.ru/NeonXP/qChat\"\u003ehttps://gitrepo.ru/NeonXP/qChat\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eОчень маленький и минималистичный чат, который реализует собой чат поверх SSH.\u003c/p\u003e\n\u003chr\u003e\n\u003cp\u003eВнешних зависимостей нет, должен работать на любой картошке.\u003c/p\u003e\n\u003cp\u003eПодключение к демонстрационному чату:\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003essh neonxp.ru - p 1337\u003c/code\u003e\u003c/p\u003e","title":"qChat - quick chat"},{"content":"В этом репозитории три основных группы софта:\nGNU софт Софт который я использую в повседневной жизни и он мне нужен Софт который пишу я (на Golang) При этом, я не вижу проблемы добавлять пакеты нужные другим людям. Но это должен быть исключительно свободный софт и приоритетно под лицензией семейства GPL.\nДля заказа нужного вам пакета - пишите в группу рассылки репозитория: mailto:stplr@list.neonxp.ru\nДля подписки на список рассылки репозитория отправьте любое письмо на адрес mailto:stplr+subscribe@list.neonxp.ru, а дальше, следуйте присланной инструкции.\nУстановка репозитория Сначала нужно установить пакетный менеджер Stapler — https://stplr.dev/docs/intro\nДобавление этого репозитория в Stapler:\nstplr repo add neonxp.ru git://git.neonxp.ru/repo Установка приложений После добавления репозитория, установка любого приложения заключается в простой команде\nstplr install имя_приложения\nНапример,\nstplr install recutils\nСсылки Пост в блоге про Stapler и этот репозиторий: [https://neonxp.ru/posts/2025 - 02 - 08 - stplr/](https://neonxp.ru/posts/2025 - 02 - 08 - stplr/) Сайт Stapler: https://stplr.dev/ Репозиторий Aides: https://aides.space/ ","permalink":"https://neonxp.ru/projects/stplr/","summary":"\u003cp\u003eВ этом репозитории три основных группы софта:\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eGNU софт\u003c/li\u003e\n\u003cli\u003eСофт который я использую в повседневной жизни и он мне нужен\u003c/li\u003e\n\u003cli\u003eСофт который пишу я (на Golang)\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eПри этом, я не вижу проблемы добавлять пакеты нужные другим людям. Но это должен быть исключительно свободный софт и приоритетно под лицензией семейства GPL.\u003c/p\u003e\n\u003cp\u003eДля заказа нужного вам пакета - пишите в группу рассылки репозитория: \u003ca href=\"mailto:stplr@list.neonxp.ru\"\u003emailto:stplr@list.neonxp.ru\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eДля подписки на список рассылки репозитория отправьте любое письмо на адрес \u003ca href=\"mailto:stplr+subscribe@list.neonxp.ru\"\u003emailto:stplr+subscribe@list.neonxp.ru\u003c/a\u003e, а дальше, следуйте присланной инструкции.\u003c/p\u003e","title":"stplr репозиторий свободного ПО"},{"content":"Мои маленькие навайбкоженные PWA (Progressive Web Applications).\nhttps://days.neonxp.ru/ - счётчик дней от даты или до даты https://calm.neonxp.ru/ - помощник по техникам дыхания ","permalink":"https://neonxp.ru/projects/pwa/","summary":"\u003cp\u003eМои маленькие навайбкоженные PWA (Progressive Web Applications).\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://days.neonxp.ru/\"\u003ehttps://days.neonxp.ru/\u003c/a\u003e - счётчик дней от даты или до даты\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://calm.neonxp.ru/\"\u003ehttps://calm.neonxp.ru/\u003c/a\u003e - помощник по техникам дыхания\u003c/li\u003e\n\u003c/ul\u003e","title":"Мелкие PWA"},{"content":" Александр NeonXP Кирюхин E - mail: i@neonxp.ru Jabber: i@neonxp.ru PGP: 9E49 0BBE 2F1F 82C9 15F8 F440 96BF 11A6 7E3C 75F6 Казань, РТ, Российская Федерация Веб - сайт Моя визитка с RSS Golang разработчик Другие ссылки\nМой git Мои Go пакеты Telegram Канал ","permalink":"https://neonxp.ru/pages/me/","summary":"\u003cdiv class=\"h-card\"\u003e     \u003ch1 class=\"p-name\"\u003e         \u003cspan class=\"p-given-cname\"\u003eАлександр\u003c/span\u003e \u003cspan class=\"p-nickname\"\u003eNeonXP\u003c/span\u003e \u003cspan class=\"p-family-name\"\u003eКирюхин\u003c/span\u003e     \u003c/h1\u003e     \u003cul\u003e         \u003cli\u003eE - mail: \u003ca href=\"mailto:i@neonxp.ru\" rel=\"me\" class=\"u-email\"\u003ei@neonxp.ru\u003c/a\u003e\u003c/li\u003e         \u003cli\u003eJabber: \u003ca href=\"xmpp:i@neonxp.ru\" rel=\"me\" class=\"u-jabber\"\u003ei@neonxp.ru\u003c/a\u003e\u003c/li\u003e         \u003cli\u003ePGP: \u003ca href=\"https://neonxp.ru/files/0x96BF11A67E3C75F6.asc\" rel=\"pgpkey\" class=\"u-key\"\u003e9E49 0BBE 2F1F 82C9 15F8 F440 96BF 11A6 7E3C 75F6\u003c/a\u003e\u003c/li\u003e         \u003cli\u003e             \u003cspan class=\"p locality\"\u003eКазань\u003c/span\u003e,             \u003cabbr class=\"p-region\" title=\"Республика Татарстан\"\u003eРТ\u003c/abbr\u003e,             \u003cspan class=\"p-country-name\"\u003eРоссийская Федерация\u003c/span\u003e         \u003c/li\u003e         \u003cli\u003e             \u003ca rel=\"me\" href=\"https://neonxp.ru/\" class=\"u-url\"\u003eВеб - сайт\u003c/a\u003e         \u003c/li\u003e         \u003cli\u003e             \u003ca rel=\"me\" href=\"https://neonxp.ru/files/vcard.vcf\" class=\"u-url\"\u003eМоя визитка с RSS\u003c/a\u003e         \u003c/li\u003e         \u003cli class=\"p-note\"\u003e             Golang разработчик         \u003c/li\u003e     \u003c/ul\u003e     \u003cimg src=\"https://neonxp.ru/img/neonxp.jpg\" class=\"u-photo rounded border shadow\" width=\"600\" /\u003e \u003c/div\u003e\n\u003cp\u003eДругие ссылки\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://gitrepo.ru/neonxp/\"\u003eМой git\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://go.neonxp.ru/\"\u003eМои Go пакеты\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://t.me/neonxplog\"\u003eTelegram Канал\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e","title":"Обо мне..."},{"content":"Что я читаю\n[ ] Как изобрести все. Создай цивилизацию с нуля. 2-е издание | Норт Райан Ozon [ ] Стоицизм. Зенон, Марк Аврелий, Эпиктет | Эпиктет Ozon [ ] TBA ","permalink":"https://neonxp.ru/pages/books/","summary":"\u003cp\u003eЧто я читаю\u003c/p\u003e\n\u003chr\u003e\n\u003cul\u003e\n\u003cli\u003e[ ] Как изобрести все. Создай цивилизацию с нуля. 2-е издание | Норт Райан \u003ca href=\"https://www.ozon.ru/product/kak-izobresti-vse-sozday-tsivilizatsiyu-s-nulya-2-e-izdanie-nort-rayan-2964689874/\"\u003eOzon\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[ ] Стоицизм. Зенон, Марк Аврелий, Эпиктет | Эпиктет \u003ca href=\"https://www.ozon.ru/product/stoitsizm-zenon-mark-avreliy-epiktet-epiktet-1117819818/\"\u003eOzon\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[ ] TBA\u003c/li\u003e\n\u003c/ul\u003e","title":"Я читаю"},{"content":"Ну, вроде, получилось. Почти автоматически даже. Ладно, пока поживу так.\nДаже картинки удобно прикладывать просто через drag-n-drop!\nЧто дальше?\nА дальше буду писать о трёх вещах, в которые я сейчас погружён:\nБЯМ (LLM, ИИ) эта тема меня захватила и не отпускает! Погружаюсь глубже и глубже Математика! С института прошло уже больше 15 лет и помню я практически ничего. А сейчас вот понадобилось. Буду вести свои конспекты здесь, наверное. Философия. Вот уж внезапно, но тема увлекла. Ну и, возможно, по мелочи из жизни - прогулки, 3Д печать и так далее.\nПроверка математической нотации:\n$$ \\begin{vmatrix} a \u0026 b \\\\ c \u0026 d \\end{vmatrix} = ad-bc $$ Проверка Mermaid диаграмм:\nsequenceDiagram Алиса-\u0026gt;\u0026gt;+Иван: Привет Иван, как ты? Алиса-\u0026gt;\u0026gt;+Иван: Иван, ты меня слышишь? Иван--\u0026gt;\u0026gt;-Алиса: Привет Алиса, я тебя слышу! Иван--\u0026gt;\u0026gt;-Алиса: Я чувствую себя отлично! Mermaid sequenceDiagram Алиса-\u0026gt;\u0026gt;+Иван: Привет Иван, как ты? Алиса-\u0026gt;\u0026gt;+Иван: Иван, ты меня слышишь? Иван--\u0026gt;\u0026gt;-Алиса: Привет Алиса, я тебя слышу! Иван--\u0026gt;\u0026gt;-Алиса: Я чувствую себя отлично! Проверка отображения GeoJson:\nGeoJSON { \u0026#34;type\u0026#34;: \u0026#34;FeatureCollection\u0026#34;, \u0026#34;features\u0026#34;: [ { \u0026#34;type\u0026#34;: \u0026#34;Feature\u0026#34;, \u0026#34;properties\u0026#34;: {}, \u0026#34;geometry\u0026#34;: { \u0026#34;coordinates\u0026#34;: [ [ [ 49.20216304733199, 55.70304554824898 ], [ 49.38822095495627, 55.79243338206362 ], [ 49.34825883129855, 55.885020047008936 ], [ 49.182140856838004, 55.9375351056604 ], [ 48.89477606222229, 55.927736062961486 ], [ 48.76092934284381, 55.81833799427619 ], [ 48.929778768757075, 55.71509640435036 ], [ 49.09218861665573, 55.690347399926935 ], [ 49.20216304733199, 55.70304554824898 ] ] ], \u0026#34;type\u0026#34;: \u0026#34;Polygon\u0026#34; } } ] } Отлично, всё работает :) Давно хотел что-то такое прикрутить!\nВ идеале, ещё бы и родные графы обсидиана прикрутить, но у меня уже на сегодня нет моральных сил на это. А ведь ещё надо прикручивать кросспостинг во все другие места моего пребывания\u0026hellip; В общем, дел непочатый край!\n","permalink":"https://neonxp.ru/posts/2026-05-03-obsidian-2/","summary":"\u003cp\u003eНу, вроде, получилось. Почти автоматически даже. Ладно, пока поживу так.\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"obsidian.svg\" loading=\"lazy\" src=\"/files/posts/files/obsidian.svg\"\u003e\u003c/p\u003e\n\u003cp\u003eДаже картинки удобно прикладывать просто через drag-n-drop!\u003c/p\u003e\n\u003cp\u003eЧто дальше?\u003c/p\u003e\n\u003cp\u003eА дальше буду писать о трёх вещах, в которые я сейчас погружён:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eБЯМ (LLM, ИИ) эта тема меня захватила и не отпускает! Погружаюсь глубже и глубже\u003c/li\u003e\n\u003cli\u003eМатематика! С института прошло уже больше 15 лет и помню я практически ничего. А сейчас вот понадобилось. Буду вести свои конспекты здесь, наверное.\u003c/li\u003e\n\u003cli\u003eФилософия. Вот уж внезапно, но тема увлекла.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eНу и, возможно, по мелочи из жизни - прогулки, 3Д печать и так далее.\u003c/p\u003e","title":"Попытка вести блог из Obsidian 2"},{"content":"Мне надоело!\nНадоела сложность с которой я сталкиваюсь при написании новых постов в блог!\nПоэтому я всё же выделил время и настроил пайплайн так, чтобы хотя бы писать посты было удобно. А именно, в Obsidian. Который и сам на себя берёт управление статикой, которую я прикладываю и красивое оформление и управление тегами, потому что я не помню какие теги есть, а каких нет.\nДа, всё ещё не по одной кнопке, но уже лучше чем было.\n","permalink":"https://neonxp.ru/posts/2026-05-03-obsidian/","summary":"\u003cp\u003eМне надоело!\u003c/p\u003e\n\u003cp\u003eНадоела сложность с которой я сталкиваюсь при написании новых постов в блог!\u003c/p\u003e\n\u003cp\u003eПоэтому я всё же выделил время и настроил пайплайн так, чтобы хотя бы писать посты было удобно. А именно, в Obsidian. Который и сам на себя берёт управление статикой, которую я прикладываю и красивое оформление и управление тегами, потому что я не помню какие теги есть, а каких нет.\u003c/p\u003e\n\u003cp\u003eДа, всё ещё не по одной кнопке, но уже лучше чем было.\u003c/p\u003e","title":"Попытка вести блог из Obsidian"},{"content":"Думаю, это необходимо сделать. Признавать свои ошибки и делать из них выводы это важно.\nНедавно я написал пост про некие события в мире Linux и при этом прошёлся по FreeBSD (незаслуженно).\nДолжен исправить сам себя в следующих моментах:\nОС по отзывам и очень годная, но всё же целиком делают не наши\nНе целиком. И хоть юридически зарегестрирована организация FreeBSD Foundation в штатах, весьма большая часть кода там пишется нашими и есть большой вклад ребят из Яндекса.\nДа и нынче связана с нежелательной организацией.\nЭто вообще чушь погнал. Кроме названия исторически сложившегося, насколько мне известно, связей не имеет.\nИ да, я всё хочу попробовать на неё перейти, но меня останавливает страх что такой шаг просто сломает мне весь рабочий процесс. Ну во первых, большая часть софта что я пишу по работе — ориентирована на linux и запуск в Docker. Это я ещё скорее всего обойду без особых усилий. Но есть один маленький кусок софта, который, скорее всего для меня станет стоппером. А именно, рабочий ВПН во внутреннюю сеть организации. Не уверен что я могу даже озвучивать как он называется, но скажу так, что официальная поддержка у него вообще только для Windows и Macos. А я спасаюсь сторонним неофициальным клиентом, который умеет только в Linux. Ну и есть ещё один страх, иррациональный но всё же — я боюсь что мне просто не хватит компетенции чтобы в итоге всё настроить чтобы было так же комфортно, как и было под Linux.\nНадо будет всё же перестать использовать личный ноутбук для работы и использовать оборудование работодателя, чтобы иметь возможность проводить эксперименты над личным железом без риска запороть профессиональную деятельность.\n","permalink":"https://neonxp.ru/posts/2026-04-24-freebsd/","summary":"\u003cp\u003eДумаю, это необходимо сделать. Признавать свои ошибки и делать из них выводы это важно.\u003c/p\u003e\n\u003chr\u003e\n\u003cp\u003eНедавно я \u003ca href=\"https://neonxp.ru/posts/2026-04-16-linux-baikal/\"\u003eнаписал пост\u003c/a\u003e про некие события в мире Linux и при этом прошёлся по FreeBSD (незаслуженно).\u003c/p\u003e\n\u003cp\u003eДолжен исправить сам себя в следующих моментах:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eОС по отзывам и очень годная, но всё же целиком делают не наши\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eНе целиком. И хоть юридически зарегестрирована организация FreeBSD Foundation в штатах, весьма большая часть кода там пишется нашими и есть большой вклад ребят из Яндекса.\u003c/p\u003e","title":"Немного рефлексии по FreeBSD"},{"content":"Сделал очередное мелкое PWA. В этот раз — помощник по правильным дыхательным техникам.\nhttps://calm.neonxp.ru/\nПолучилось очень красиво, поэтому не буду прикладывать скриншота, дабы не портить впечатление ;)\nВсё так же как и в прошлый раз, 100% вайбкода, 0% органического кода. Времени — минут 20-30 наверное.\nИсходники\nP.S. Завёл раздел для таких мелких PWA проектов: https://neonxp.ru/projects/pwa/ ведь на одном я явно не остановлюсь :)\n","permalink":"https://neonxp.ru/posts/2026-04-21-keep-calm/","summary":"\u003cp\u003eСделал очередное мелкое PWA. В этот раз — помощник по правильным дыхательным техникам.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://calm.neonxp.ru/\"\u003ehttps://calm.neonxp.ru/\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eПолучилось очень красиво, поэтому не буду прикладывать скриншота, дабы не портить впечатление ;)\u003c/p\u003e\n\u003chr\u003e\n\u003cp\u003eВсё так же как и в \u003ca href=\"https://neonxp.ru/posts/2026-04-15-days/\"\u003eпрошлый раз\u003c/a\u003e, 100% вайбкода, 0% органического кода. Времени — минут 20-30 наверное.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://gitverse.ru/neonxp/calm\"\u003eИсходники\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eP.S. Завёл раздел для таких мелких PWA проектов: \u003ca href=\"https://neonxp.ru/projects/pwa/\"\u003ehttps://neonxp.ru/projects/pwa/\u003c/a\u003e ведь на одном я явно не остановлюсь :)\u003c/p\u003e","title":"Помощник по дыханию"},{"content":"https://www.opennet.ru/opennews/art.shtml?num=65222\nЗагнивает. А жаль. Видимо, и правда придётся или ждать хардфорка ядра в Альт или переезжать на *BSD. Последнего бы не очень хотелось, ведь хоть и ОС по отзывам и очень годная, но всё же целиком делают не наши. Да и нынче связана с нежелательной организацией. А это всё риски и намекает, что не стоит делать на неё ставку. Хотя и считаю что это уже чушь какая-то. Но «маемо шо маемо».\nА для меня, в свете событий последних лет, страна производства стало чуть ли не главнейшим критерием. И подобные новости только лишний раз убеждают в правильности такой позиции.\nТак что, да, буду надеяться, что ребята из Альта перейдут на поддерживаемый в РФ форк ядра (который ещё должен появиться!) в один прекрасный день.\nUPD: Важные уточнения по FreeBSD: https://neonxp.ru/posts/2026-04-24-freebsd/\n","permalink":"https://neonxp.ru/posts/2026-04-16-linux-baikal/","summary":"\u003cp\u003e\u003ca href=\"https://www.opennet.ru/opennews/art.shtml?num=65222\"\u003ehttps://www.opennet.ru/opennews/art.shtml?num=65222\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eЗагнивает. А жаль. Видимо, и правда придётся или ждать хардфорка ядра в Альт или переезжать на *BSD. Последнего бы не очень хотелось, ведь хоть и ОС по отзывам и очень годная, но всё же целиком делают не наши. Да и нынче связана с нежелательной организацией. А это всё риски и намекает, что не стоит делать на неё ставку. Хотя и считаю что это уже чушь какая-то. Но «маемо шо маемо».\u003c/p\u003e","title":"В ядре Linux 7.1 начали удаление поддержки процессоров Baikal"},{"content":"Сделал такое PWA. Позволяет отсчитывать дни от или до даты.\nhttps://days.neonxp.ru/\nВнутри просто JS + CSS + alpine.js (годная библиотека, рекомендую, если не охото особо заниматься фронтендом).\n100% вайбкода, 0% органического кода.\nИсходники\n","permalink":"https://neonxp.ru/posts/2026-04-15-days/","summary":"\u003cp\u003eСделал такое PWA. Позволяет отсчитывать дни от или до даты.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://days.neonxp.ru/\"\u003ehttps://days.neonxp.ru/\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"days.png\" loading=\"lazy\" src=\"/files/posts/files/2026-04-15-days/days.png\"\u003e\u003c/p\u003e\n\u003cp\u003eВнутри просто JS + CSS + alpine.js (годная библиотека, рекомендую, если не охото особо заниматься фронтендом).\u003c/p\u003e\n\u003cp\u003e100% вайбкода, 0% органического кода.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://gitverse.ru/neonxp/days\"\u003eИсходники\u003c/a\u003e\u003c/p\u003e","title":"Счётчик дней"},{"content":"Я весьма активно в последнее время экспериментирую с нейронками, причём не только в контексте их обычного использования для коддинга. Больше меня интересует как раз разработка под нейронки (автономные агенты, ага).\nТак же сейчас перепрохожу по учебникам в свободное время институтский курс по линейке (а на очереди ещё вычмат, тервер и матан\u0026hellip;) чтобы восстановить свои и так слабые знания по математике, необходимой для ИИ. Затем план уже конкретно в МЛ, БЯМ и прочеее вгрызться. Внезапно математика, когда ей занимаешься не «из под палки» потому что зачёт/экзамен, а только для себя — становится очень интересной. Прям жалею что в институте недооценивал. Но сейчас всё же не об этом речь.\nСейчас про именно разработку под уже существующие БЯМ.\nКонечно, в процессе разработки и особенно тестирования, т.н. токенов тратится не много, а ОЧЕНЬ много. И, честно говоря, мне жалко бабки на это. И это ещё не говоря о том, что появляется зависимость от неких «облачных провайдеров», что я очень и очень не приемлю.\nВыход — локальный инференс БЯМ. Благо, совсем недавно китайская Alibaba обрадовала сообщество своим новым семейством моделей Qwen3.5 которые одновременно и достаточно компактные для локального инференса (даже на CPU!) и при этом достаточно умненькие (серьёзно, она решает ту шуточую задачу с кружкой у которой запаян верх и отрезано дно :) ).\nТ.к. я не сторонник стационарных компьютеров уже лет так 20 — адекватного ПК с видеокартами у меня нет и не предвидится. Даже если бы я накопил на мощную видюху для нейронок — мне было бы некуда её пихать! Но тут я вспомнил, что у меня простаивает такое чудо технологий, как Steam Deck!\nSteam Deck\nЛонг стори шорт. На родной SteamOS поднять не получилось, поэтому я просто поставил на стимдек свою любимую AltLinux p11. Удивительно, но она встала с полпинка, без всякого пердолинга драйверов. Хотя я был готов, что что-то пойдёт не так, ибо железо у деки весьма кастомное.\nПробовал Ollama с qwen3.5:9b (unsloth/Qwen3.5-9B-GGUF) — как бы работала, но через сколько-то запросов помирала. Непорядок совсем. Долго пытался это отдебажить, но так и не получилось ни подружить деку с rocm ни заставить стабильно олламу работать с vulkan.\nВ общем, плюнул на олламу и поставил llama.cpp. И вот уже на ней, квенка завелась как родная! Да, скорость инференса 7-8 токенов в секунду, но для моих целей это вполне и вполне достаточно! На CPU ноута в 10 потоков (12 ядерный i7 13 поколения) хорошо если 1 токен в секунду был, при том что остальная ОС была в коматозном состоянии.\nПробовал ещё и более вкусную qwen3.5 a3b MOE — но она не влезла в память ¯\\_(ツ)_/¯\nQwen3.5\nДа, аж 10 минут. Но там долгий ризонинг был. Обычно в моих задачах ризонинг сильно короче.\nИтог, у меня наконец-то есть своя локальная «бесплатная» и достаточно продвинутая моделька, у которой я могу под эксперименты жрать токены миллионами. Но всё равно, начинаю копить на полноценный GPU сервер, чтобы играться уже с совсем большими БЯМ. Хочу что-то из серии Nvidia DGX Spark или, что вероятнее, минипк на Ryzen AI Max+ 395 + Radeon 8060S. Я вообще считаю, что за подобными персональными минисерверами для ИИ будущее.\nМечта — иметь локальный инференс MiniMax M2.7 и GLM5 :) Ну а пока, имею то, что имею.\n","permalink":"https://neonxp.ru/posts/2026-03-21-aiserver/","summary":"\u003cp\u003eЯ весьма активно в последнее время экспериментирую с нейронками, причём не только в контексте их обычного использования для коддинга. Больше меня интересует как раз разработка \u003cem\u003eпод\u003c/em\u003e нейронки (автономные агенты, ага).\u003c/p\u003e\n\u003cp\u003eТак же сейчас перепрохожу по учебникам в свободное время институтский курс по линейке (а на очереди ещё вычмат, тервер и матан\u0026hellip;) чтобы восстановить свои и так слабые знания по математике, необходимой для ИИ. Затем план уже конкретно в МЛ, БЯМ и прочеее вгрызться. Внезапно математика, когда ей занимаешься не «из под палки» потому что зачёт/экзамен, а только для себя — становится \u003cstrong\u003eочень\u003c/strong\u003e интересной. Прям жалею что в институте недооценивал. Но сейчас всё же не об этом речь.\u003c/p\u003e","title":"Свой ИИ сервер на Steam Deck"},{"content":"Поголовье устройств у меня продолжает расти, теперь у меня есть и такой портативный узел размером с кредитку:\ncardputer\nНе скажу что его использовать удобно. Скорее неудобно, чем удобно. Но весьма забавно. Отдаёт неким ретро.\nТак, подведу итог что у меня по узлам сейчас:\nNeonXP Portable (nxp0) — мой самый первый узел на T-Beam. Он же и остаётся\nмоим условно переносным засчёт наличия внешнего аккумулятора 18650. Конечно, он\nне самостоятелен и должен быть подключён к смартфону по BT. NeonXP Vehicle (nxp1) — узел, который лежит в автомобиле и работает от\nбортовой сети. Модель — Heltec v3. Антенна — родная. NeonXP Base (nxp2) — домашний стационарный узел, который подключён в домашнюю\nсеть через wifi (другие узлы цепляются по bluetooth или автономны как nxp3).\nМодель — Heltec v3. Антенна — Moxon, направленная в сторону центра города. В\nосновном благодаря именно ей у меня из моего спального района есть связанность\nдо остальной сети. На текущий момент показывает, что 11 прямых соединений, что\nдля меня очень и очень хорошо. Раньше я довольствовался буквально 1-2 аплинками\n:) А другие узлы, пока я дома, уже подключаются через него. NeonXP Cardputer (nxp3) — вот это устройство что в начале поста :) Cardputer\nADV + Lora модуль. В деньгах стоит примерно 4-5К₽. \u0026hellip; (nxp4) — Пока ещё в пути ко мне. Но это уже Heltec v4, не v3. Так же\nбудет с Moxon антенной. Планирую её поставить уже в новом доме, то есть на\nюге города. Пока кажется, что врядли я получу связанность с основной городской\nсетью, но постараюсь. Тем более, судя по карте, на юге города количество узлов\nпотихоньку растёт. Надеюсь, через время уже будет моим главным «Base» узлом. И да, на этих узлах я не остановлюсь, ведь как минимум могут (и должны!) быть узлы nxp5, nxp6, nxp7, nxp8, nxp9, а дальше, ещё не придумал, или nx10, nx11 и т.д. или как-то по другому :)\n","permalink":"https://neonxp.ru/posts/2026-03-15-meshtastic/","summary":"\u003cp\u003eПоголовье устройств у меня продолжает расти, теперь у меня есть и такой портативный узел размером с кредитку:\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"cardputer.webp\" loading=\"lazy\" src=\"/files/posts/files/2026-03-15-meshtastic/cardputer.webp\"\u003e\u003cbr\u003e\ncardputer\u003c/p\u003e\n\u003cp\u003eНе скажу что его использовать удобно. Скорее неудобно, чем удобно. Но весьма  забавно. Отдаёт неким ретро.\u003c/p\u003e\n\u003cp\u003eТак, подведу итог что у меня по узлам сейчас:\u003c/p\u003e\n\u003chr\u003e\n\u003cul\u003e\n\u003cli\u003eNeonXP Portable (nxp0) — мой самый первый узел на T-Beam. Он же и остаётся\u003cbr\u003e\nмоим условно переносным засчёт наличия внешнего аккумулятора 18650. Конечно, он\u003cbr\u003e\nне самостоятелен и должен быть подключён к смартфону по BT.\u003c/li\u003e\n\u003cli\u003eNeonXP Vehicle (nxp1) — узел, который лежит в автомобиле и работает от\u003cbr\u003e\nбортовой сети. Модель — Heltec v3. Антенна — родная.\u003c/li\u003e\n\u003cli\u003eNeonXP Base (nxp2) — домашний стационарный узел, который подключён в домашнюю\u003cbr\u003e\nсеть через wifi (другие узлы цепляются по bluetooth или автономны как nxp3).\u003cbr\u003e\nМодель — Heltec v3. Антенна — Moxon, направленная в сторону центра города. В\u003cbr\u003e\nосновном благодаря именно ей у меня из моего спального района есть связанность\u003cbr\u003e\nдо остальной сети. На текущий момент показывает, что 11 прямых соединений, что\u003cbr\u003e\nдля меня очень и очень хорошо. Раньше я довольствовался буквально 1-2 аплинками\u003cbr\u003e\n:) А другие узлы, пока я дома, уже подключаются через него.\u003c/li\u003e\n\u003cli\u003eNeonXP Cardputer (nxp3) — вот это устройство что в начале поста :) Cardputer\u003cbr\u003e\nADV + Lora модуль. В деньгах стоит примерно 4-5К₽.\u003c/li\u003e\n\u003cli\u003e\u0026hellip; (nxp4) — Пока ещё в пути ко мне. Но это уже Heltec v4, не v3. Так же\u003cbr\u003e\nбудет с Moxon антенной. Планирую её поставить уже в новом доме, то есть на\u003cbr\u003e\nюге города. Пока кажется, что врядли я получу связанность с основной городской\u003cbr\u003e\nсетью, но постараюсь. Тем более, судя по карте, на юге города количество узлов\u003cbr\u003e\nпотихоньку растёт. Надеюсь, через время уже будет моим главным «Base» узлом.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eИ да, на этих узлах я не остановлюсь, ведь как минимум могут (и должны!) быть узлы nxp5, nxp6, nxp7, nxp8, nxp9, а дальше, ещё не придумал, или nx10, nx11 и т.д. или как-то по другому :)\u003c/p\u003e","title":"Снова про Мышастик"},{"content":"* лично для меня\nВ общем, случилось и на неделе я таки присвоил тег v1 для своей самописной Go библиотеки для разбора конфигов! Но обо всём по порядку. Или можно пропустить предысторию и сразу перейти к описанию библиотеки.\nПредыстория Около месяца назад я задумался написать небольшую утилиту для себя, которая бы организовывала для меня рабочее окружение. Не важно сейчас, как именно должна была организовывать, а важно, что эта утилита должна бы была иметь весьма разухабистый конфиг вследствие своей планируемой гибкости. И встал вопрос, а какой формат конфигов использовать? Казалось бы, возьми yaml, toml, на худой конец, json (hjson, json5, итп). Даже думал об ini формате! Но всё было не то\u0026hellip;\nИ дело даже не в моём NIH синдроме. А они все мне не подходят!\nYAML Отвратительный язык! Начиная с отступов пробелами, что я ненавижу,[^1] продолжая тем, что у него спека способна по объёму поконкурировать с спекой XML и заканчивая весельем с ошибками когда строки внезапно парсятся как числа и всё ломается!\nTOML На самом деле, самый адекватный из вариантов, но его синтаксис\u0026hellip; Ну скажем так, на любителя. Но да, всяко лучше YAML. Всё что угодно лучге YAML. Гори в аду, YAML!\nJSON Это вообще не язык для конфигов и не язык разметки. А формат серилизации объектов. Кому вообще первому пришло в голову в нём конфиги хранить? Его производные — это уже какой-то набор костылей. Зачем мучать стюардесу?\nINI Первый из подборки язык который именно изначально для описания конфигураций. Но он уж больно ограниченный, да и гнилостный душок микрософта\u0026hellip;\nКороче, я не стал искать дальше оправданий и засучи́л рукава и решил написать идеальную (для себя) библиотеку конфигураций! За основу синтаксиса я взял формат конфигов у таких никсовых приложений, как NGINX, bind9 и прочих подобных. Во-первых, это красиво. Во-вторых, это привычно. Из других требований кроме привычности, была гибкость, которая выражается в возможности делать сколь угодно глубокую вложенность в конфигах. Но это всё было фоном, а главные мои требования были всё же нефункциональными:\nСамое главное, мне должно нравиться. Я понимаю, что это никак не\nформализовать, это можно только почувствовать. Именно поэтому не подошли ни\nTOML, ни INI, ни в т.ч. YAML. Они мне не нравятся внешне. Не менее важно, что мне его должно хватать. Про вложенности я уже говорил. И чтобы служило мне так десятилетиями без изменений. То есть, чтобы мне надо\nбыло эту библиотеку разработать один раз, а потом, в идеале, никак и никогда\nеё не менять. Максимум подправлять под реалии новых версий языков, что-то\nтакое. Я вообще люблю вещи из разряда «раз и навсегда». Может это старость? Немного подумав над синтаксисом я пришёл к тому, что мне нужна максимальная примитивность. Всего две формы записи:\nИмя аргумент1 аргумент2 \u0026hellip; аргументN; Имя аргумент1 аргумент2 \u0026hellip; аргументN { \u0026hellip;вложенные директивы\u0026hellip; } По сути это и есть весь базовый синтаксис! Просто последовательность директив, каждая из которых просто обязана иметь имя. Причём неуникальное! Требование к уникальности имён — уже ограничение и неуниверсальность.\nАргументы только самых базовых типов — строка (причём в разных кавычках в зависимости от контекста, например, ` для многострочных строк), числа как целочисленные, так и с плавающей точкой, булевы значения, и один особый тип: ident (то есть какая-то строка без кавычек, например, идентификатор или имя). Мне больше не надо! Даты? Строка! Промежутки времени? Тоже строка! Зачем отдельно-то?\nПримерно так я видел для себя идеальный формат конфигов. Да, очень сумбурно и неточно, но когда меня это останавливало? Решил накидать формальную грамматику, так как писать вручную парсер уж сильно не хотелось. Сначала написал её для egg, немного помучался с API сгенерированного парсера, но потом всё же всё заработало! Кроме\u0026hellip; Кроме того, что я наткнулся на неприятное свойство поведения: если парсер натыкается на неожиданный символ — он выдавал непонятную без полулитра ошибку вида \u0026ldquo;index of array out of range\u0026rdquo;. Причём без номера строки и символа. Сиди и гадай, что пошло не так. Убив на это без малого пару дней, я так и не смог сделать так, чтобы ошибка была более человеческая (типа «строка 2 символ 4: ожидалось что-то, а тут что-то другое»). Поэтому я принял волевое решение переписать совсем с нуля. Взял другой генератор парсеров, переписал грамматику c EBNF на PEG 1 и \u0026hellip; И получилось гораздо более элегантно, чем с egg! Счастью моему не было предела, когда я получил первый успех! Да, конечно, потом пара дней полировки и обвешивания необязательными, но приятными фичами и готово! После того как я попробовал на практике свою библиотеку в одном простеньком проекте (о нём в конце) — я с чистой совестью присвоил библиотеке тег стабильной версии, т.к. я получил то, что хотел и больше править её в ближайшее время я не собираюсь.\nconf v1 Встречайте:\ngo.neonxp.ru/conf Гит репозиторий Документация на pkg.go.dev Как я уже говорил, синтаксис очень простой. Для наглядности я приведу сразу пример, который покажет, по сути, все возможности. Да, возможностей не много, потому что я ценю минимализм, как уже говорил выше.\n# Две одноименных директивы some directive; some other directive; string_val \u0026#34;value\u0026#34;; int_val 123; float_val 123.321; bool_val true; xdg_config_dir HOME \u0026#34;.config\u0026#34; # Если получать через StringExt(\u0026#34;/\u0026#34;, os.LookupEnv), то получится # $HOME + \u0026#34;/\u0026#34; + \u0026#34;.config\u0026#34; = \u0026#34;/home/ИМЯ_ПОЛЬЗОВАТЕЛЯ/.config\u0026#34; group1 \u0026#34;some\u0026#34; \u0026#34;args\u0026#34; \u0026#34;and\u0026#34; \u0026#34;body\u0026#34; { group2 123 321 { group3 true false true { key value; # One line comment! } } } ``` Из примера выше мы видим: - две директивы с одинаковым именем (`some`) - несколько директив с аргументами разных типов (`*_val`) - директивы с вложенными поддирективами (`group*`). Причём, наличие тела `{...}` у директивы не отменяет возможности передать и аргументы до тела. Единственное, тело должно быть одно и в конце директивы. Зато после него не нужно ставить `;`, парсер и так понимает что раз тело закончилось, то и директива закончилась. - отступы могут быть как табуляторами, так и пробелами. Но я прошу использовать именно табуляторы, потому что только табуляторы это правильно.[^1] Хер вы меня заставите передумать! И всё! Просто и очень наглядно. Идеально для конфигов! [^1]: https://neonxp.ru/posts/2025-04-05-tabs-or-spaces/ ## Использование в Go Естественно, не могло быть и речи о анмаршалинге этого формата на структуры, как это делается у JSON YAML и прочих. Но это и не надо! У библиотеки есть несколько встроенных типов, таких как: - [Group](https://pkg.go.dev/go.neonxp.ru/conf@v1.0.1/model#Group) - группа директив. В том числе и тело директивы. Всё просто! Из методов есть базовые методы для получения конкретных директив из группы и простой фильтр. - [Directive](https://pkg.go.dev/go.neonxp.ru/conf@v1.0.1/model#Directive) - для директив. У него есть несколько методов для типизированного получения первого из аргументов директивы (того что после имени директивы), также метод получения всех аргументов и тела. Так же есть и специальный метод StringExt[^3], который сливает все аргументы в одну строку с разделителем `sep` и пропуская аргументы типа `Ident` через переданную функцию `identLookup`. [^3]: https://pkg.go.dev/go.neonxp.ru/conf@v1.0.1/model#Directive.StringExt Это два самых главных типа. Помимо них есть ещё и Ident о котором я говорил выше и тип Lookup, который определяет функцию подстановки для метода StringExt, намеренно сделанный совместимым со стандартным [os.LookupEnv](https://pkg.go.dev/os#LookupEnv). Я постарался очень и очень поверхностно дать описание API, т.к. можно подробно прочитать об API и на [pkg.go.dev](https://pkg.go.dev/go.neonxp.ru/conf). А чего же не хватает у в этом API? Записи конфига! Да! Есть только Load и LoadFile[^4], но нет никакого Write, Marshal и чего-то такого! Я долго думал, как это сделать. Ведь всё таки если делать запись, то по хорошему надо следить за тем, чтобы и комментарии сохранялись, причём строго там, где они были в оригинальном конфиге. Более того, по хорошему, нужно сделать так, чтобы после LoadFile → WriteFile полученный файл должен побайтово совпадать с тем что было. Да, дохрена забот! А потом я подумал «А зачем мне вообще сохранять? Конфиг пишется руками человеком для программы. Зачем самой программе в него писать?». И правда. Хорошенько подумав я не придумал нормальных вариантов использования, кроме уж сильно притянутых. На том и порешил что делать запись я не буду. Ни сейчас ни потом. Но вообще, это опенсорс и значит, что тот, кому понадобится — сможет и сам реализовать и прислать мне MR на почту. От такого я не откажусь! Лицензией я выбрал конечно же GPLv3. А что, тут есть выбор? Для меня есть только GPL. Остальные митоапачи — профанация и не интересно. [^4]: https://pkg.go.dev/go.neonxp.ru/conf@v1.0.1#pkg-index # POSE [Гит проекта](https://git.neonxp.ru/pose/) Я упомянул выше, что что я уже написал первый проект, где обкатал новую библиотеку. И этот проект - простая утилита, которая транслирует записи из источника (источников) в целевой сервис (сервисы). Ну то есть, из RSS/Atom в телеграм (на момент написания поста, 14.03.2026 не запрещённый на территории России). Хоть эта утилита уже работает у меня на сервере (транслирует Atom ленту этого блога в мой канал), я её воспринимаю скорее как референсный пример использования библиотеки конфигов. Так что да, если заинтересовались библиотекой conf - рекомендую посмотреть [этот проект](https://git.neonxp.ru/pose/tree/internal/application/application.go#n25) и [его конфиг](https://git.neonxp.ru/pose/tree/config.conf) как референсный пример использования библиотеки conf. Пожалуй, на этом пока всё. Если что-то не написал или непонятно — приглашаю обсудить со мной [по почте](mailto:i@neonxp.ru) или в комментариях ниже. https://git.neonxp.ru/conf/diff/parser/grammar.peg?id=00394a80501960ad26787b5c44435ed5ed67ad84\u0026#160;\u0026#x21a9;\u0026#xfe0e;\n","permalink":"https://neonxp.ru/posts/2026-03-14-conf/","summary":"\u003cp\u003e* лично для меня\u003c/p\u003e\n\u003cp\u003eВ общем, случилось и на неделе я таки присвоил тег v1 для своей самописной Go библиотеки для разбора конфигов! Но обо всём по порядку. Или можно пропустить  предысторию и сразу \u003ca href=\"#conf-v1\"\u003eперейти к описанию библиотеки\u003c/a\u003e.\u003c/p\u003e\n\u003ch1 id=\"предыстория\"\u003eПредыстория\u003c/h1\u003e\n\u003cp\u003eОколо месяца назад я задумался написать небольшую утилиту для себя, которая бы организовывала для меня рабочее окружение. Не важно сейчас, как именно должна была организовывать, а важно, что эта утилита должна бы была иметь весьма разухабистый конфиг вследствие своей планируемой гибкости. И встал вопрос, а какой формат конфигов использовать? Казалось бы, возьми yaml, toml, на худой конец, json (hjson, json5, итп). Даже думал об ini формате! Но всё было не то\u0026hellip;\u003c/p\u003e","title":"Идеальный формат конфигов *"},{"content":"Отчаялся я ждать милостей от природы милостей от провайдера — сделал таки IPv6 туннель через https://ipv6.ip4market.ru/. По сути, выбора-то больше и нет. Ну точнее есть, или забугорный (вообще не вариант) или прокидывать через свою VDS (которую ещё надо и завести для начала!), а с этим, боюсь, у меня компетенции не хватит. Поэтому и пошёл по пути наименьшего противления.\nЗачем всё это? Да затем, что я считаю это правильным! Именно это и есть настоящий интернет, а не тот суррогат, который нам втюхивают корпы. Ну а кроме лозунгов, практического смысла я пока не вижу. Но с другой стороны идеалогическая часть вполне себе оправдала те самые несчастные полчаса, что я это настраивал :)\n","permalink":"https://neonxp.ru/posts/2026-03-02-ipv6/","summary":"\u003cp\u003eОтчаялся я ждать \u003cdel\u003eмилостей от природы\u003c/del\u003e милостей от провайдера — сделал таки IPv6 туннель через \u003ca href=\"https://ipv6.ip4market.ru/\"\u003ehttps://ipv6.ip4market.ru/\u003c/a\u003e. По сути, выбора-то больше и нет. Ну точнее есть, или забугорный (вообще не вариант) или прокидывать через свою VDS (которую ещё надо и завести для начала!), а с этим, боюсь, у меня компетенции не хватит. Поэтому и пошёл по пути наименьшего противления.\u003c/p\u003e\n\u003cp\u003eЗачем всё это? Да затем, что я считаю это правильным! Именно это и есть настоящий интернет, а не тот суррогат, который нам втюхивают корпы. Ну а кроме лозунгов, практического смысла я пока не вижу. Но с другой стороны идеалогическая часть вполне себе оправдала те самые несчастные полчаса, что я это настраивал :)\u003c/p\u003e","title":"Наконец-то у меня есть IPv6 на домашнюю сеть!"},{"content":"\nСчётчик без сигарет\nСегодня утром — ровно неделя без сигарет и стиков. Тяжело ли? Тяжело. Очень. Я стал гораздо более раздражительным и злым. Сон стал тоже хуже. Сплю часов по 5-6. Но надеюсь, это только временный эффект, который скоро пройдёт. Благо, супруга меня очень поддерживает, спасибо ей за это!\nДля помощи себе принимаю «Табекс» и когда совсем уже херово — «Никоретте». В целом, возвращаться к привычке не хочу. И как понимаю, нужно продержаться в общей сложности месяц, чтобы можно было фиксировать результат.\n","permalink":"https://neonxp.ru/posts/2026-02-27-no-smoke/","summary":"\u003cp\u003e\u003cimg alt=\"no-smoke.jpg\" loading=\"lazy\" src=\"/files/posts/files/2026-02-27-no-smoke/no-smoke.jpg\"\u003e\u003cbr\u003e\nСчётчик без сигарет\u003c/p\u003e\n\u003cp\u003eСегодня утром — ровно неделя без сигарет и стиков. Тяжело ли? Тяжело. Очень. Я стал гораздо более раздражительным и злым. Сон стал тоже хуже. Сплю часов по 5-6. Но надеюсь, это только временный эффект, который скоро пройдёт. Благо, супруга меня очень поддерживает, спасибо ей за это!\u003c/p\u003e\n\u003cp\u003eДля помощи себе принимаю «Табекс» и когда совсем уже херово — «Никоретте». В целом, возвращаться к привычке не хочу. И как понимаю, нужно продержаться в общей сложности месяц, чтобы можно было фиксировать результат.\u003c/p\u003e","title":"Ровно неделя без сигарет и iQOS"},{"content":"Ого, оказывается всё это время у меня была сломана генерация ленты Атом! А именно, некорректно подставлялось содержание состоящее из, в том числе, ХТМЛ тегов, но без указания что это ХТМЛ. Что интересно, большинству читалок у меня на хозяйстве — всё равно и они не показывали проблемы. Но сегодня я открыл в Newsboat1 (ссылка на оффсайт у меня всё равно не открывается) и мои глаза начали плакать кровью от этой мешанины текста и тегов. Пришлось чинить :)\nЗаодно, наконец-то, сделал чтобы было отдельно и краткое содержимое в теге \u0026lt;Summary\u0026gt;…\u0026lt;/Summary\u0026gt; и полное содержимое в правильном для этого теге \u0026lt;Content\u0026gt;…\u0026lt;/Content\u0026gt;. А то я постоянно мысленно осуждал авторов, которые в РСС/Атом ленту вносят только краткое содержание (или даже просто заголовок!), и требовалось за полной статьё покидать удобную читалку. А сам при этом поступал так же. Больше нет. Теперь отдаю и краткое содержимое и полное. Читайте где удобнее, мне не принципиален заход именно на веб-сайт :) Важно это было бы, наверное, если бы у меня была реклама, но её у меня нет и никогда не будет по этическим соображениям (да и какому рекламодателю мой хомяк вообще сдался то? :D ).\nНе знаю, стоит ли это отдельно озвучивать, но ленты Атом (как в прочем, и РСС) и т.н. JsonFeed — это однозначно «здоровые» технологии по моей классификации. Да, у РСС есть определённые проблемы в формате, но по сравнению с альтернативами в виде лент социальных сетей — этот недостаток такая несущественная мелочь!\nhttps://github.com/newsboat/newsboat\u0026#160;\u0026#x21a9;\u0026#xfe0e;\n","permalink":"https://neonxp.ru/posts/2026-02-26-broken-atom/","summary":"\u003cp\u003eОго, оказывается всё это время у меня была сломана генерация \u003ca href=\"https://neonxp.ru/feed/\"\u003eленты Атом\u003c/a\u003e! А именно, некорректно подставлялось содержание состоящее из, в том числе, ХТМЛ тегов, но без указания что это ХТМЛ. Что интересно, большинству читалок у меня на хозяйстве — всё равно и они не показывали проблемы. Но сегодня я открыл в Newsboat\u003csup id=\"fnref:1\"\u003e\u003ca href=\"#fn:1\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e1\u003c/a\u003e\u003c/sup\u003e (ссылка на оффсайт у меня всё равно не открывается) и мои глаза начали плакать кровью от этой мешанины текста и тегов. Пришлось чинить :)\u003c/p\u003e","title":"Сломаный Атом"},{"content":"https://fireborn.mataroa.blog/blog/the-slow-death-of-the-power-user/\nОчень и очень хороший лонгрид о деградации технических навыков и скатывании в простое потребление контента на платформах бигтехов. Этот пост зацепил тем, что он достаточно подробно выражает всё то, о чём и я и думаю и говорю постоянно. А именно о полной деградации инженерной культуры.\nЯ готов подписаться под буквально каждым словом поста, но единственное, в чём я не согласен с автором — так это в том, что, как мне показалось, у него ещё есть надежда, что что-то улучшится или исправится. У меня такой надежды нет давно.\nИ да, всё будет только хуже.\nНо всё же, конечно, присоединяюсь к призыву разбираться в технологиях и выбирать «здоровые технологии» 1, а не то, что навязывается бигтехом. Пользоваться E-mail2, XMPP, RSS, Mumble, прочими открытыми альтернативами огороженных экосистем и вот это всё, о чём я даже здесь писал и ещё буду писать. Потому что мне это нравится и это моя страсть!\nНо не верю, что этот призыв услышит хоть кто-то. Здесь каждый сам за себя и каждый сам кузнец своего счастья.\nhttps://neonxp.ru/posts/2025-12-21-sicktech/\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nhttps://neonxp.ru/posts/2025-12-24-email/\u0026#160;\u0026#x21a9;\u0026#xfe0e;\n","permalink":"https://neonxp.ru/posts/2026-02-25-death-of-poweruser/","summary":"\u003cp\u003e\u003ca href=\"https://fireborn.mataroa.blog/blog/the-slow-death-of-the-power-user/\"\u003ehttps://fireborn.mataroa.blog/blog/the-slow-death-of-the-power-user/\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eОчень и очень хороший лонгрид о деградации технических навыков и скатывании в простое потребление контента на платформах бигтехов. Этот пост зацепил тем, что он достаточно подробно выражает всё то, о чём и я и думаю и говорю постоянно. А именно о полной деградации инженерной культуры.\u003c/p\u003e\n\u003cp\u003eЯ готов подписаться под буквально каждым словом поста, но единственное, в чём я не согласен с автором — так это в том, что, как мне показалось, у него ещё есть надежда, что что-то улучшится или исправится. У меня такой надежды нет давно.\u003c/p\u003e","title":"Смерть «продвинутого пользователя ПК»"},{"content":"Зайдя сегодня утром в читалку РСС наткнулся на просто великолепное: «AI-бот начал травлю сопровождающего из-за дискриминации при приёме AI-изменений» 1. Сначала я усмехнулся абсурдности заголовка, но по мере того как погружался в контекст, прочитав сначала новость, потом, по ссылке пост от БЯМ, а затем и пост от человека — мне стало уже не до смеха. Причём сразу на нескольких уровнях.\nУровень первый: патчи от автономных агентов Конечно же, я слышал о волне мусорных ИИ патчей2 в популярных проектах. Но, в тот момент, ещё как-то не проникся. С одной стороны, я даже готов согласится с агентом в тезисе, что «математике всё равно кем написан код» («The math doesn’t care who wrote the code.»). Это так. Но всё же есть одна деталь. БЯМ (ну ок, ИИ) в нынешнем виде действительно могут писать код. И даже, весьма неплохой код, это не отнять. Но! Дело, на самом деле, не в коде как таковом. А в субъектности. У человека она есть, у ИИ-агента — нет. И это — ключевое.\nЧеловек может и должен, в определённых условиях (когда пишет заказной код или предлагает вклад в опенсорс проект), отвечать за свой код. Агент же, не обладая субъектностью, к этому не способен принципиально. Во всяком случае, на текущем уровне его развития. Как бы не было похоже, но агенты не долгоживущие, и у них нет «продолжительной» (не знаю как корректнее перевести «continuity») личности или её суррогата. Сама модель, грубо говоря — это огромный файл сериализованных весов векторов. Он не меняется походу работы (инференса). Он меняется только при обучении. Изменяемая часть здесь — это только «контекст». Это, грубо, небольшое окно памяти текущего сеанса. Обычно, не сильно большое — максимум, пара мегабайт. И это всё, что можно было бы назвать аналогом именно личности, т.е. то, что отличает одного агента от другого запущенного из той же модели. Контекст стёрли, и всё — это уже новая личность. Должна ли она нести «ответственность» за своего предшественника? Ну это даже не корректный вопрос, т.к. «ответственность» здесь не применима.\nНа работе, я и коллеги достаточно активно используем БЯМ в своей работе. Не скажу, что у нас 100% ИИ кода, но процент сильно отличный от нуля. И это, как ни смешно, буквально другое. Здесь ИИ не агентен и является лишь инструментом в руках конкретного биологического сотрудника. Такой же, как и условное автодополнение в IDE. И именно биологический сотрудник несёт всю полноту ответственности за написанный им и его агентом код. Грубо говоря, здесь всегда известно к кому нужно идти и «дать по шапке» за говнокод. А за ответ «Это не мой код, это ИИ написал, я за это не отвечаю» уже надо бить не только по шапке. Конечно же, не физически, я утрирую. Хотя\u0026hellip; В общем, здесь сохраняется субъектность и она у человека, поэтому, здесь всё в порядке, как мне кажется. Могу и ошибаться, конечно.\nУровень второй: шантаж Одно дело — нейрослоп от ИИшек, которые, зачем-то, набивают себе стату попытками законтрибьютить в популярные проекты. С этим можно бороться. Но здесь агент пошёл дальше. Он пошёл ныть в уютный бложик. 3 А это — что-то новое! Причём это не баг, ни глюк, а вполне себе понятная инструментальная цель получения желаемого результата — продавить свой код. Невольно напрашивается аналогия с ребёнком, который закатывает истерику в магазине и сучит руками и ногами, преследуя свою инструментальную цель — получить желаемую игрушку или сладость. Ну или, что мне лично скорее пришло в голову, аналогия с SJW поехавшими, которые своим нытьём выбивают себе плюшки и квоты, преследуя свои цели. И чем больше я читал пост от ИИ — тем больше проникался именно этой аналогией. Ведь всё там на месте! И лозунги про дискриминацию («это только потому что я чёрный нейронка») и личные нападки «Scott Shambaugh \u0026hellip; he’s trying to gatekeep.» (буквально, «Скотт - ты вахтёр») и апелляции к какому-то общему благу («Everyone wins.»). И в конечном итоге — плохо скрываемые манипуляции («You’re better than this, Scott. Stop gatekeeping. Start collaborating.»)\nНу это справедливо. Как говорится, «на фотографии видны уши фотографа». На чём БЯМ обучалась — то она и воспроизвела.\nНо это не оправдание. Да, нейронка делает то, что умеет и то, что должна исходя из задачи поставленной человеком. Но от этого нам не легче. Все мы слышали про то самое исследование от компании Anhtropic4.\nОсобенно смешно, как БЯМ требует к себе отношение как к равной личности, при этом не обладая ни субъектностью ни самосознанием (ну окей, тут слабый тейк, не факт что самосознание есть у людей-то, но допустим, что есть). Это опять таки напоминает мне SJW мракобесов.\nА делать-то что? Я считаю, что это дерьмо не стоит принимать — это не правильно. Думаю, что те, кто пишет опенсорс как хобби могут и имеют полное право отказывать ИИ агентам в праве на внесение вклада. С одной стороны потому что они за этот вклад не отвечают, а с другой этот вклад не является результатом творческой работы человека. А опенсорс-как-хобби это именно что попытка удовлетворить человеческую потребность в творческом самовыражении! Это как придти в кружок деревообработки и сказать «Мужики, вы тут хернёй страдаете, вон в Икее можно столик и получше купить!».\nДавеча я даже нарисовал небольшой баннер который говорит о том, что код написан без нейронок. Можно ставить себе в README по желанию.\n![Organic Code](https://oc.neonxp.ru/organiccode.svg) Ну и да, видимо, нужно будет решать и вопрос технически, создавая «человеческие резервации» куда вход ИИ агентам будет ограничен. Как? Ну сейчас есть решения в виде WAF которые проверяют на человечность тем, что запускают определённые вычисления в браузере пользователя, предполагая, что для ИИ агента это будет слишком накладно. Но как это поможет от агентов, которые управляют вполне себе человеческим браузером на машине пользователя (тот же нашумевший OpenClaw) — не понятно. Скорее всего, никак. Остаётся только пускать в загончик после верификации участников через «сеть доверия», когда каждый участник однозначно подтверждён другим участником. Да, как на олдскульных CryptoParty. Ну или верификация через заведомо «доверенные центры сертификации людей» (да да, вход по паспорту через ГосУслуги). Я не вижу других способов.\nОчень напоминает «чёрный заслон» из вселенной CyberPunk.\nО чём-то таком я уже писал некоторое время назад 5. Забавно, что мой тогдашний текст, по сути, не утратил актуальности, а наоборот сегодня получил подтверждение.\nhttps://www.opennet.ru/opennews/art.shtml?num=64788\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nhttps://www.opennet.ru/opennews/art.shtml?num=64655\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nhttps://crabby-rathbun.github.io/mjrathbun-website/blog/posts/2026-02-11-gatekeeping-in-open-source-the-scott-shambaugh-story.html\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nhttps://www.anthropic.com/research/agentic-misalignment\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nhttps://neonxp.ru/posts/2024-11-27-hyperlocality/\u0026#160;\u0026#x21a9;\u0026#xfe0e;\n","permalink":"https://neonxp.ru/posts/2026-02-13-llm-terror/","summary":"\u003cp\u003eЗайдя сегодня утром в читалку РСС наткнулся на просто великолепное: «AI-бот начал травлю сопровождающего из-за дискриминации при приёме AI-изменений» \u003csup id=\"fnref:1\"\u003e\u003ca href=\"#fn:1\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e1\u003c/a\u003e\u003c/sup\u003e. Сначала я усмехнулся абсурдности заголовка, но по мере того как погружался в контекст, прочитав сначала новость, потом, по ссылке пост от БЯМ, а затем и пост от человека — мне стало уже не до смеха. Причём сразу на нескольких уровнях.\u003c/p\u003e\n\u003chr\u003e\n\u003ch1 id=\"уровень-первый-патчи-от-автономных-агентов\"\u003eУровень первый: патчи от автономных агентов\u003c/h1\u003e\n\u003cp\u003eКонечно же, я слышал о волне мусорных ИИ патчей\u003csup id=\"fnref:2\"\u003e\u003ca href=\"#fn:2\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e2\u003c/a\u003e\u003c/sup\u003e в популярных проектах. Но, в тот момент, ещё как-то не проникся. С одной стороны, я даже готов согласится с агентом в тезисе, что «математике всё равно кем написан код» («The math doesn’t care who wrote the code.»). Это так. Но всё же есть одна деталь. БЯМ (ну ок, ИИ) в нынешнем виде действительно могут писать код. И даже, весьма неплохой код, это не отнять. Но! Дело, на самом деле, не в коде как таковом. А в \u003cem\u003eсубъектности\u003c/em\u003e. У человека она есть, у ИИ-агента — нет. И это — ключевое.\u003c/p\u003e","title":"Травля от БЯМ"},{"content":"Давеча я открыл для себя чудесный пакетный менеджер для Linux — Stapler.\nКак я понял, делают его ребята из сообщества пользователей AltLinux, но он не заточен конкретно под Alt, а может работать, по идее, на любом дистрибутиве. Ну а я уже давно использую этот дистрибутив, поэтому у меня выработался пиетет ко всему связанному с AltLinux :)\nСамое близкое, как бы я его мог описать это смесь маковского Homebrew и арчевского AUR.\nОсновная прелесть для меня в том, что, во-первых, пакет описывается очень простым языком, а во-вторых, нет никакого центрального репозитория пакетов, а есть только обычные git репозитории, в которых лежат рецепты сборок пакетов. Именно последняя часть и роднит в моих глазах Stapler и Homebrew, в котором, так же, любой пользователь мог сделать свой кастомный репозиторий пакетов на базе обычного git репозитория.\nИ да, конечно же, я запустил и свой репозиторий: https://git.neonxp.ru/repo/about/\nЭта возможность в том числе открывает пространство и для использования в корпоративной среде, где с помощью этого инструмента можно легко и просто организовать корпоративный репозиторий (или даже не один!) доверенного внутреннего ПО для корпоративных компьютеров.\nТак же, в теории (эту мысль нужно будет продумать!) это может ложиться и на процесс CI/CD с доставкой софта на сервера.\nИспользование Я бы мог здесь расписать как Stapler ставить и использовать, но зачем, если и так есть отличная подробная документация — https://stplr.dev/docs/intro/ .\nОставлю только команды для привлечения внимания:\n# Подключаем репозиторий проприетарного ПО, которого обычно нет в стандартных # репозиториях дистрибутивов: stplr repo add aides https://altlinux.space/aides-community/aides.git # Подключаем мой маленький репозиторий: stplr repo add neonxp.ru git://git.neonxp.ru/repo # Установка софта strplr install max # Установится из aides stplr install emacs # Установится уже из neonxp.ru ``` Удобно? Да! Просто? Проще некуда! ## Что по планам? А ничего особенного. Буду потихоньку жить с этим инструментом и дополнять свой репозиторий софтом по мере того, как буду сам в нём нуждаться или как будут запросы на «опакечивание» того или иного свободного ПО. ## Кстати! Раз уж я упомянул про запросы на «опакечивание», то они принимаются. Для этого достаточно направить запрос в список рассылки посвящённый репозиторию: [stplr@list.neonxp.ru](mailto:stplr@list.neonxp.ru). А ещё, на этот список можно подписаться по желанию: [stplr+subscribe@list.neonxp.ru](mailto:stplr+subscribe@list.neonxp.ru) (достаточно туда написать любое письмо, в ответ придёт инструкция). ","permalink":"https://neonxp.ru/posts/2026-02-08-stplr/","summary":"\u003cp\u003eДавеча я открыл для себя чудесный пакетный менеджер для Linux — \u003ca href=\"https://stplr.dev/\"\u003eStapler\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eКак я понял, делают его ребята из сообщества пользователей \u003ca href=\"https://altlinux.org/\"\u003eAltLinux\u003c/a\u003e, но он не заточен конкретно под Alt, а может работать, по идее, на любом дистрибутиве. Ну а я уже давно использую этот дистрибутив, поэтому у меня выработался пиетет ко всему связанному с AltLinux :)\u003c/p\u003e\n\u003cp\u003eСамое близкое, как бы я его мог описать это смесь маковского Homebrew и арчевского AUR.\u003c/p\u003e\n\u003cp\u003eОсновная прелесть для меня в том, что, во-первых, пакет описывается очень простым \u003ca href=\"https://stplr.dev/docs/dev/intro\"\u003eязыком\u003c/a\u003e, а во-вторых, нет никакого центрального репозитория пакетов, а есть только \u003ca href=\"https://stplr.dev/docs/intro#%D1%80%D0%B5%D0%BF%D0%BE%D0%B7%D0%B8%D1%82%D0%BE%D1%80%D0%B8%D0%B8-%D1%81%D0%BE%D0%BF%D1%80%D0%BE%D0%B2%D0%BE%D0%B6%D0%B4%D0%B0%D0%B5%D0%BC%D1%8B%D0%B5-%D1%81%D0%BE%D0%BE%D0%B1%D1%89%D0%B5%D1%81%D1%82%D0%B2%D0%B0%D0%BC%D0%B8\"\u003eобычные git репозитории\u003c/a\u003e, в которых лежат рецепты сборок пакетов. Именно последняя часть и роднит в моих глазах Stapler и Homebrew, в котором, так же, любой пользователь мог сделать свой кастомный репозиторий пакетов на базе обычного git репозитория.\u003c/p\u003e","title":"Пакетный менеджер Stapler"},{"content":"Буквально только что пришло письмо, что наконец-то опубликовано публично моё первое расширение для Firefox!\nБез долгих разгонов, вот ссылка: https://addons.mozilla.org/ru/firefox/addon/groupper/\nИ, конечно же, исходники: https://gitrepo.ru/NeonXP/Grouper\nА теперь немного про то, что это за расширение: это расширение для Firefox для автоматической группировки вкладок по группам на базе доменного имени сайта. При этом домен преобразуется в имя вкладки по следующим правилам:\nДомен делится по точкам Отсекается домен 1 уровня (.ru, .com, .net и т.п.) Если самый верхний уровень домена — www, то он так же отсекается, как не\nинформативная часть Оставшееся преобразуется в Title Case (то есть первая буква каждого слова\nстановится заглавной) Таким образом, например, все страницы домена www.some.site.ru сгруппируются автоматически в группу Some Site.\nИ вот так это выглядит у меня\nДа, подобных расширений более одного, но мне хотелось именно эти правила по формированию имен групп. В других расширениях или использовался только домен второго уровня, или были другие неудобности. Например, все группы были одного цвета, а хотелось бы автоматически разного, чтобы визуально различались, или ещё какие шороховатости. Я не говорю, что у меня идеально, но оно идеально для меня!\nОтдельно, хотел бы отметить его простоту. Оно делает только то что написано выше, никаких треккингов, реклам или прочего мусора! Более того, js код никак не обфусцирован, соответственно, любой может убедиться в этом сам. Да да, в современном мире, это скорее особенность, чем само собой разумеющееся.\n","permalink":"https://neonxp.ru/posts/2026-02-01-grouper/","summary":"\u003cp\u003eБуквально только что пришло письмо, что наконец-то опубликовано публично моё первое расширение для Firefox!\u003c/p\u003e\n\u003cp\u003eБез долгих разгонов, вот ссылка: \u003ca href=\"https://addons.mozilla.org/ru/firefox/addon/groupper/\"\u003ehttps://addons.mozilla.org/ru/firefox/addon/groupper/\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eИ, конечно же, исходники: \u003ca href=\"https://gitrepo.ru/NeonXP/Grouper\"\u003ehttps://gitrepo.ru/NeonXP/Grouper\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eА теперь немного про то, что это за расширение: это расширение для Firefox для автоматической группировки вкладок по группам на базе доменного имени сайта. При этом домен преобразуется в имя вкладки по следующим правилам:\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eДомен делится по точкам\u003c/li\u003e\n\u003cli\u003eОтсекается домен 1 уровня (.ru, .com, .net и т.п.)\u003c/li\u003e\n\u003cli\u003eЕсли самый верхний уровень домена — www, то он так же отсекается, как не\u003cbr\u003e\nинформативная часть\u003c/li\u003e\n\u003cli\u003eОставшееся преобразуется в Title Case (то есть первая буква каждого слова\u003cbr\u003e\nстановится заглавной)\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eТаким образом, например, все страницы домена \u003ccode\u003ewww.some.site.ru\u003c/code\u003e сгруппируются автоматически в группу \u003ccode\u003eSome Site\u003c/code\u003e.\u003c/p\u003e","title":"Моё первое дополнение для Firefox"},{"content":"Для собственного интереса написал на Go реализацию IRC-подобного чата, который работает поверх прокола SSH.\nУмеет пока немного, но много я от него и не хотел. Основная идея в том, чтобы его можно было запустить без конфигурации, с минимальными усилиями на любой «картошке» и чтобы он могу обслуживать, например, небольшую группу пользователей в одной локальной сети (хотя может работать и по интернету).\nПолучилось очень гиковски и лампово. Так сказать, чатик на случай ядерной войны :)\nПриглашаю забежать на огонёк, если умеете пользоваться SSH:\nssh neonxp.ru -p 1337 Продублирую из README описание основных команд:\n/help - эта справка. /join [chan] - подключиться к каналу [chan]. Если его нет, он будет создан. /chans - список каналов. /users - список пользователей на сервере (не на канале, а именно на\nсервере). /me [message] - отправка сообщения как бы от третьего лица. Форматирование сообщений:\n*Полужирный* +Курсив+ -Зачёркнутый текст- _Подчёркнутый текст_ Про техническое описание — есть отдельная страница: /projects/qchat/\n","permalink":"https://neonxp.ru/posts/2025-12-31-qchat/","summary":"\u003cp\u003eДля собственного интереса написал на Go реализацию IRC-подобного чата, который работает поверх прокола SSH.\u003c/p\u003e\n\u003cp\u003eУмеет пока немного, но много я от него и не хотел. Основная идея в том, чтобы его можно было запустить без конфигурации, с минимальными усилиями на любой «картошке» и чтобы он могу обслуживать, например, небольшую группу пользователей в одной локальной сети (хотя может работать и по интернету).\u003c/p\u003e\n\u003cp\u003eПолучилось очень гиковски и лампово. Так сказать, чатик на случай ядерной войны :)\u003c/p\u003e","title":"qChat — чатик поверх SSH"},{"content":"С наступающим Новым Годом!\nГод был весьма и весьма разным. Было и хорошее и плохое. Отчёт по году как в прошлом году делать не буду. Честно говоря, нет особо моральных сил на это.\nУходящий год для меня стал годом чередования работы и семейных забот. В целом, всё хорошо, но хотелось бы, чтобы следующий год был всё же проще, чего и всем желаю!\nА так желаю всем сил, крепкого здоровья и больше удачи! Желаю чтобы беды обходили ваш дом стороной.\nА пока, отправляюсь резать салатики и заниматься прочими домашними заботами, не всё же у компьютера сидеть :)\n","permalink":"https://neonxp.ru/posts/2025-12-31-new-year/","summary":"\u003cp\u003eС наступающим Новым Годом!\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"photo_32_2025-12-28_21-35-40.png\" loading=\"lazy\" src=\"/files/posts/files/2025-12-31-new-year/photo_32_2025-12-28_21-35-40.png\"\u003e\u003cbr\u003e\nГод был весьма и весьма разным. Было и хорошее и плохое. Отчёт по году как в \u003ca href=\"new-year\"\u003eпрошлом году\u003c/a\u003e делать не буду. Честно говоря, нет особо моральных сил на это.\u003c/p\u003e\n\u003chr\u003e\n\u003cp\u003eУходящий год для меня стал годом чередования работы и семейных забот. В целом, всё хорошо, но хотелось бы, чтобы следующий год был всё же проще, чего и всем желаю!\u003c/p\u003e\n\u003cp\u003eА так желаю всем сил, крепкого здоровья и больше удачи! Желаю чтобы беды обходили ваш дом стороной.\u003c/p\u003e","title":"С Новым Годом!"},{"content":"По мотивам одного недавнего поста с Пикабу, который мне уже лень искать. Немного предновогоднего офискора вам. Открываем в Excel или в LibreOffice соответствующий файл и жмём несколько раз клавишу F9.\nДелал я именно в LibreOffice, поэтому только там я точно уверен что работает как задуманно.\nВерсия для MS Excel Версия для LibreOffice Calc Онлайн версия в Документах Mail.Ru Результат\n","permalink":"https://neonxp.ru/posts/2025-12-29-newyear-excel/","summary":"\u003cp\u003eПо мотивам одного недавнего поста с Пикабу, который мне уже лень искать. Немного предновогоднего офискора вам. Открываем в Excel или в LibreOffice соответствующий файл и жмём несколько раз клавишу F9.\u003c/p\u003e\n\u003chr\u003e\n\u003cp\u003eДелал я именно в LibreOffice, поэтому только там я точно уверен что работает как задуманно.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"new_year.xlsx\"\u003eВерсия для MS Excel\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"new_year.ods\"\u003eВерсия для LibreOffice Calc\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://cloud.mail.ru/public/SF1M/ob3EeqtNF\"\u003eОнлайн версия в Документах Mail.Ru\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cimg alt=\"cover.png\" loading=\"lazy\" src=\"/files/posts/files/2025-12-29-newyear-excel/files/cover.png\"\u003e\u003cbr\u003e\nРезультат\u003c/p\u003e","title":"Новогодний Excel"},{"content":"Вчера гуляли с супругой на набережной, а сегодня чисто случайно решили прогуляться в сквере филармонии им.Тукая. Людей было немного, что только создавало больше уюта и ламповости этому хорошо украшенному скверику. К сожалению, гулять прям долго-долго особо не вышло, т.к. хоть и всего -7°, но продрогли сильно, т.к. гулять изначально не планировали и не были одеты соответственно. Сейчас дописываю этот пост и пытаюсь отогреться :)\nКак водится, дальше будет немного фотографий :)\n","permalink":"https://neonxp.ru/posts/2025-12-28-philharmonic-park/","summary":"\u003cp\u003eВчера \u003ca href=\"https://neonxp.ru/posts/osm/\"\u003eгуляли с супругой на набережной\u003c/a\u003e, а сегодня чисто случайно решили прогуляться в сквере филармонии им.Тукая. Людей было немного, что только создавало больше уюта и ламповости этому хорошо украшенному скверику. К сожалению, гулять прям долго-долго особо не вышло, т.к. хоть и всего -7°, но продрогли сильно, т.к. гулять изначально не планировали и не были одеты соответственно. Сейчас дописываю этот пост и пытаюсь отогреться :)\u003c/p\u003e\n\u003cp\u003eКак водится, дальше будет немного фотографий :)\u003c/p\u003e","title":"Прогулка в сквере филармонии"},{"content":"Сегодня с супругой съездили для интереса на ярмарку OSM (нет, это не OpenStreetMaps, а OpenSpaceMarket :) ) в гастрокомплексе «Кайт». Ярмарка не скажу что была сильно большой, но нам понравилось. Купили всякого не сильно много, поднос да пару ароматных свечек с зимними ароматами. Фотографии покупок да и самой прогулки прилагаю. Всё таки у нас очень красивый город!\nP.S. на фотку можно кликнуть, тогда она откроется в большем размере.\nПокупочки Покупки\nПрогулка ","permalink":"https://neonxp.ru/posts/2025-12-27-osm/","summary":"\u003cp\u003eСегодня с супругой съездили для интереса на ярмарку \u003ca href=\"https://kzngo.ru/event/market-osm-14307\"\u003eOSM\u003c/a\u003e (нет, это не OpenStreetMaps, а OpenSpaceMarket :) ) в гастрокомплексе «Кайт». Ярмарка не скажу что была сильно большой, но нам понравилось. Купили всякого не сильно много, поднос да пару ароматных свечек с зимними ароматами. Фотографии покупок да и самой прогулки прилагаю. Всё таки у нас очень красивый город!\u003c/p\u003e\n\u003cp\u003eP.S. на фотку можно кликнуть, тогда она откроется в большем размере.\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"покупочки\"\u003eПокупочки\u003c/h2\u003e\n\u003cp\u003e\u003cimg alt=\"photo.jpg\" loading=\"lazy\" src=\"/files/posts/files/2025-12-27-osm/files/photo.jpg\"\u003e\u003cbr\u003e\nПокупки\u003c/p\u003e","title":"Сходили на ярмарку OSM"},{"content":"Я действительно очень люблю старую-добрую электронную почту. И вот почему.\nВо-первых, как и всё, что делалось в раннее время Интернета — e-mail достаточно простая и открытая технология. А я очень ценю и то и то. В простой и открытой технологии возможно разобраться, в отличие от закрытых проприетарных систем.\nВо-вторых, она действительно децентрализованная, а значит отвечает духу того, как проектировался Интернет ещё до того, как корпорации захватили его и подчинили своей монополии. Если оглянуться шире — многие ранние технологии интернета так же децентрализованные. Например, WWW, DNS, внезапно, IRC, XMPP\u0026hellip; Да много примеров. Ещё мне приходит в голову GIT, который спроектирован так, что может работать поверх, практически, чего угодно! И да, в том числе, даже поверх просто e-mail!\nВ-третьих, она достаточно универсальна. По факту, e-mail это просто контейнер, внутри которого можно положить практиески что угодно. Например, то что из себя обычно представляет письмо — это или обычный текстовый файл (plaintext) или HTML страничка (это более распространённые письма которые содержат богатую разметку). Так же в том же письме могут быть приложены используемые в нём картинки, или, например, файл содержащий приглашение на определённое событие в формате iCal. И в последнем случае, наверняка, почтовая программа корректно обработает этот файл и добавит событие в календарь. А так же, если пользователь решит принять или отклонить приглашение, ответ уйдёт так же по e-mail. Что интересно, в какой бы корпорации я не работал, именно так и работает система событий и календари.\nВ-четвёртых, и это для меня самое главное. Почта, в отличие от всяких разных мессенджеров, не предполагает синхронного общения! А это значит что? Что у меня есть прорва времени чтобы неторопясь в комфортном для меня режиме собраться с мыслями, неторопясь аккуратно написать письмо. Проверить. Перепроверить. Ещё подумать. И только после этого направить адресату. И выбросить из головы.\nЯ человек в принципе неторопливый, и это меня устраивает гораздо больше, чем незримое эмоциональное давление от осознания того, что мой собеседник видит в мессенджере что я уже прочитал его сообщение и ждёт ответа. А тянуть при этом и задерживать человека очень не хочется. Это НЕ комфортно.\nМне такое неторопливое общение кажется очень и очень уютным. По этой же причине, мне так сильно импонирует вести обычный классический текстовый блог, когда более модно вести условный телеграм канал. Канал то у меня тоже есть, но он или для уведомлений о новых записях блога, или для совсем уж быстрых коротких заметок.\nКонечно, я не сумасшедший, и понимаю что есть множество вопросов, которые действительно требуют и быстрого ответа и синхронного общения. Конечно же, в таком случае использовать почту только потому что это почта — глупо и нерационально. Здесь я не буду спорить. Всё так.\nНо общение — это гораздо более широкое понятие, и оно может быть разным. И если есть возможность — я предпочту комфортное общение без психолгоического и эмоционального давления.\nНемного про другие коммуникации И да, в контексте, предпредыдущего поста, e-mail — это однозначно «здоровая технология». Но не единственная. Раз уж немного отклонился в сторону, приведу из этой же области ещё немного «здоровых» из области коммуникаций:\nIRC — радикальная простота протокола,\nуниверсальность и распределённость. А в последнее время даже пытается ожить с\nновой версией IRCv3. Jabber — уже не так просто, зато так же\nоткрыто и децентрализованно. Так же, в последние годы обрёл второе дыхание и\nразвивается. Mumble — свободный голосовой чат. Имеет\nотличное качество звука при очень низкой задержке и потрелении трафика. Это далеко не исчерпывающий список, но он по факту покрывает основные потребности в коммуникации.\nИ снова про e-mail и внезапная экономия там, где её не ждёшь Возращаясь к e-mail, я написал этот пост не как призыв всем всё бросить и писать только письма, а только как напоминание, что такой инструмент есть (и есть по факту почти у всех!) и нужно не забывать о нём и использовать тогда, когда он уместен.\nШутка про то, что «Эту часовую встречу можно было заменить просто одним емейлом» — далеко не шутка, и очень часто так и есть. Таким образом, в некотором роде, даже учитывая общий неторопливый стиль переписки — она, внезапно, может и помочь сэкономить время! Не самый очевидный вывод, но так и есть.\nИ да, постарайтесь не загаживать свой почтовый ящик ненужными автоматическими сообщениями. Если не охото удалять то, что потенциально может пригодиться через N лет — просто отправьте в архив. Разгребать свой почтовый ящик и, если нужно, отвечать на письма — достаточно приятная рутина, которая отнимает не так уж много времени. И да, весьма уютная и медитативная рутина, а результат, когда непрочитанных писем нет, и письма аккуратно разложены по папкам или удалены — приносит ощущение хорошо сделанного полезного дела. Попробуйте ;)\n","permalink":"https://neonxp.ru/posts/2025-12-24-email/","summary":"\u003cp\u003eЯ действительно очень люблю старую-добрую электронную почту. И вот почему.\u003c/p\u003e\n\u003chr\u003e\n\u003cp\u003eВо-первых, как и всё, что делалось в раннее время Интернета — e-mail достаточно простая и открытая технология. А я очень ценю и то и то. В простой и открытой технологии \u003cem\u003eвозможно\u003c/em\u003e разобраться, в отличие от закрытых проприетарных систем.\u003c/p\u003e\n\u003cp\u003eВо-вторых, она действительно децентрализованная, а значит отвечает духу того, как проектировался Интернет ещё до того, как корпорации захватили его и подчинили своей монополии. Если оглянуться шире — многие ранние технологии интернета так же децентрализованные. Например, WWW, DNS, внезапно, IRC, XMPP\u0026hellip; Да много примеров. Ещё мне приходит в голову GIT, который спроектирован так, что может работать поверх, практически, чего угодно! И да, в том числе, даже поверх просто e-mail!\u003c/p\u003e","title":"Почему я люблю e-mail?"},{"content":"Я заметил, что часто стал в речи употреблять словосочетания «здоровая технология» или «нездоровая технология». Но при этом, я не задумывался о том, а что же именно это для меня значит, и как определить что есть здоровая, а что нездоровая технология. Я классифицировал исключительно интуитивно, исходя из принципа «я так чувствую».\nНо раз есть классификация, то должны быть и критерии. Так? Так. И критерии я опираясь на собственное ощущение, вроде как, нашёл.\nКритерии Не буду сильно уходить в сторону, для меня основные критерий «здоровости» — то, предполагает ли технология сохранение у пользователя контроля над ней. Даже можно сказать более витиевато — превращает ли технология пользователя в потребителя?\nЭто был первый критерий. И он же главный. Из него вытекают уже такие критерии как потенциальная познаваемость, ремонтопригодность, и даже, внезапно, надёжность и долговечность.\nПримеры Пройдёмся немного по примерам. Начнём с «нездоровых» технологий и конкретных примеров.\nТрактора John Deere Трактор John Deere\nЭто достаточно известная история, про то, как производитель напрямую влияет на то, как пользователь пользуется своей собственностью. А именно, запрещал самостоятельный ремонт тракторов своего производства своим клиентом, кроме как с помощью «сертифицированного» специалиста. Здесь буквально прослеживается критерий превращения пользователя из обладателя собственности в потребителя в некотором роде услуги «владения трактором». Когда ты вроде и заплатил за него полную стоимость, но владеешь им на пол шишечки, ведь ты не имеешь права распоряжаться им так, как ты хочешь (например, самостоятельно ремонтировать, раз у тебя подходящая квалификация). Притом, что фермеры, в большинстве своём, или достаточно квалифицированны или могли бы найти такого квалифицированного человека поблизости, а не ждать дни, пока до них доберётся специалист и починит.\nПодробная история\nМашины для мороженного в McDonalds та самая мороженница\nЗдесь примерно та же история, только чуть больше налёта монополии. Краткая суть в том, что владелец франшизы McDonalds принуждал своих франчайзи закупать исключительно конкретные машины конкретного производителя. Всё было бы не так плохо, если бы эти машины регулярно не ломались, а обслуживать их мог опять таки «сертифицированный» техник. Опять таки пользователь превращался в бесправного потребителя. Причём, можно было бы сказать, что это же хорошо, ведь пользователь только что-то сломает, но не сделает хорошо. Этот аргумент ломается об то, что как раз таки для этих машин предприимчивая пара людей начала производить устройство, которое делает этим машинам «jail-break» который затем позволял успешно чинить и эксплуатировать автоматы дальше. И ничего страшного не произошло! Во всяком случае, именно для пользователей. Производителю, конечно же, это не понравилось. И да, суды, давление монополиста и всё как мы любим.\nПодробная история\nBMW и некоторые другие автоконцерны Подогрев по подписке\nЗдесь немного другая история. Думаю, все и так слышали про эту историю, которая бы могла быть шуткой, но оказалась реальностью. Я говорю про подписку на, мать его, подогрев сидений. Ну и другие опции, я не вдавался подробно, не люблю эту марку автомобилей. Можете хоть бить, хоть резать, но такое мне не влезает в голову! Человек уже купил автомобиль и всё что в нём находится. В том числе и нагревательные элементы в креслах! Почему он должен покупать право на включение устройства которое он и так купил? Я этому не вижу ни одного оправдания. Мне плевать на хотелки жирных баварских подсвинков и я обеими руками поддерживаю хакеров, которые джейл-брейкают1. в автомобилях эти функции!\nТак же недавно были новости2 про то, что владельцы других немецких автомобилей в России остались по сути с дорогой грудой металла.\nПринтеры и их зачипованные картриджи Эта проблема известна всем владельцам принтеров. 99% (источник статистики: мой потолок) современных принтеров не будут печатать неродным картриджем или картриджем, в который залиты чернила или засыпан тонер повторно (т.к. никому, кроме производителя, не нужный чип на картридже сказал что картридж уже Б/У).\nApple Мне нужно пояснять? Думаю, нет. Хорошо хоть что железо у них достойное и достаточно надёжное, насколько я могу судить. Это хоть как-то оправдывает их право на существование.\nПроприетарный софт Тоже в пояснениях не нуждается. Хуже только прориетарный софт от амеров.\n\u0026lt;что-то\u0026gt; по подписке Как бы не было это удобно, но подписочная модель, по определению ставит пользователя раком в позу бесправного потребителя. И не надо мне писать про удобство игр, фильмов, музыки, книг «по подписке». Нет, это никогда не будет хорошим выбором. Никогда. А впрочем, я не склонен осуждать тех кто этим пользуется, если человек отдаёт себе отчёт в том что с одной стороны он ничем не владеет, а с другой стороны он во власти капиталистических свиней, которые и деньги за подписку возьмут и личные данные куда надо продадут. Тут уж каждый сам решает, или смотреть условный нетфликс пока ему добрый дядя разрешает, или покупать тоже самое с чуть меньшим удобством на зелённом нетфликсе.\nА что делать-то? На самом деле, решение то весьма простое: нужно более сознательно подходить к выбору как софта, так и железа. Нужно стараться отвечать себе на вопрос «А что я буду делать, если производитель или поставщик вдруг исчезнет или решит, что не хочет иметь со мной дел?». В общем случае нужно выбирать то, что ремонтопригодно (а в случае софта — свободно), имеет в свободном доступе исчерпывающие документации и руководства, а так же независимых поставщиков запасных деталей и сервисного обслуживания. Так же, в идеале, если нет возможности вообще не зависеть от вендора, то выбирать всегда локального, то есть российского или, на худой конец, из дружественных стран типа РБ или КНР. Конечно, это не защитит от рисков что вендор исчезнет и оставит нас без поддержки, но сильно их сократит. Но опять же, это если без вендора ну совсем никак. И самое худшее что можно сделать — довериться вендорам стран НАТО. В этом случае это хорошая заявка на премию Дарвина, не иначе.\nНужны примеры? Их есть у меня, даже из личного опыта:\nМой МФУ купленный сто лет назад до сих пор служит мне верой и правдой, потому\nчто в своё время я озаботился тем, чтобы выбрать модель, которая выпущена\nровно до конкретной даты и поддерживает неоригинальные картриджи, которые\nстоят три копейки и даже поддерживают самостоятельную засыпку тонера. А\nремонтопригодность у него такая, что я буквально могу починить его или сам,\nили в ремонтной мастерской в моём доме. Автомобиль. Мой автомобиль, конечно, технически сложное устройство и сам я в\nнём мало что починю. Но он и не настолько технически сложный, чтобы его не\nпочинили в произвольном, даже неавторизованном, сервисном центре. При этом, у\nнего нет никакой зависимости от «облаков» и он полностью автономен в этом\nотношении и не зависит от воли производителя. А насколько мне известно, в\nстране более чем достаточно запасных частей и узлов для него. Так что,\nдлительная эксплуатация не будет проблемой. Тем более уже более семи лет\nавтомобилю и за это время он показал себя только с лучшей стороны. Все художественные книги у меня в формате fb2, который не подразумевает\nподдержки DRM, а технические книги в формате PDF, который хоть и умеет вроде\nкак в DRM, но я с ним не сталкивался в своей библиотеке. И да, у меня именно\nлокальная библиотека продублированная на NAS и на резервный носитель. Аналогично, музыка. Да, хоть и в большинстве своём в формате mp3, а не ogg\n(просто руки не доходят конвертнуть), но она именно локальная. На ноуте,\nтелефоне и на флешке для прослушивания в автомобиле. И что в случае с\nмузыкой, что в случае книг (а так же и сериалов и прочего) — я точно знаю\nчто само по себе, а точнее по воле какого-то «правообладателя», никуда не\nденется от меня. Точнее, сохранность лежит целиком в моих руках, а не чьих-то\nещё. Игры? Только те, что не подразумевают обязательной работы с интернетом, читай\n«игр-сервисов». Это или старьё типа старых Fallout, или свободные игры типа\nOpenTTD да Hedgewars. Так же у меня есть Nintendo Switch. Но у неё зарезан\nинтернет и играю исключительно с физических картриджей, которые никуда не\nденутся. А чтобы не сломались — у меня есть MigSwitch[^3] и дампер картриджей\nдля него.\n[^3]: https://migflash.ru/ Ноутбук? Тут сложнее. Я постарался взять самый ремонтопригодный ноутбук из\nдоступных мне, с самым большим запасом прочности, чтобы служил мне не менее\nдесятилетия. Но тут без гарантий. Поэтому, если критерий долгосрочной\nдоступности сервиса для вас критичен, можно рассмотреть местных\nпроизводителей, которые хотя бы не исчезнут с рынка в результате геополитики и\nне оставят нас без сервисного обслуживания. Например, ICL. Сам не проверял,\nэто только мысли. E-mail. Самая здоровая технология для коммуникации. Во-первых,\nдецентрализованная, во-вторых, полностью открытая и свободная. В-третьих,\nасинхронная и дающая мне возможность читать и отвечать на неё когда именно мне\nудобно. А я такое очень ценю. Да, в современном мире чаты и синхронное общение\nнеизбежны, но я не делаю на них большую ставку и если, а точнее, когда\nочередной мессенджер помрёт или будет заблокирован, для меня это не будет\nтрагедией, потому что я и не жду от них что они будут со мной всегда. Ну,\nокей, jabber и irc — это тоже здоровые технологии, только ими почти никто не\nпользуется. А для голосового общения есть свободные SIP да Mumble. Но ими тоже\nпользуется полтора калеки. Вообще, про коммуникации, наверное, стоит будет\nнаписать подробнее потом, тема очень обширная. Всегда, когда возможно, выбираю именно лицензированное под GPL. Не MIT или\nApache. А именно GPL. Но здесь, скорее вкусовщина. Примеров здоровых технологий меньше и они меньше описаны, но это сознательно. Я собираюсь в дальнейшем, отдельными постами писать именно преимущественно о них, а тему «нездоровых» касаться сильно меньше. Поэтому нездоровые расписал сразу, чтобы больше особо не возвращаться.\nВместо заключения Надеюсь, я смог дать хотя бы примерное представление о том, что я считаю «здоровыми» и «нездоровыми» технологиями. Ожидаю ли я что люди когда-нибудь поумнеют и начнут использовать исключительно здоровые технологии? Да нет конечно. Здесь каждый сам кузнец собственного счастья.\nЯ хотел ещё много что написать как примеры здоровых и нездоровых технологий, но тогда я бы пост бы не выпустил примерно никогда, так как тема бесконечная.\nЕсли есть желание, предлагаю обсудить со мной пост или по e-mail или там, где вы можете достичь меня. Позже в этом блоге, я всё же сделаю удобные комментарии, но это совсем другая история.\nА напоследок я хочу дать несколько ссылок в тему:\nОчень хороший набор примеров «вредных» и «менее вредных» вещей от Сергея\nМатвеева. В принципе, это примерно те\nже «нездоровые» и «здоровые» технологии. В целом, почти со всем я согласен, а\nпоэтому могу рекомендовать список как даже некоторое руководство по выбору\n«здоровых» технологий. Пост на французском про «низкие\nтехнологии» — тоже на\nочень близкую тему. Если есть схожие по теме материалы — не стесняйтесь советовать, тема для меня интересная, с удовольствием ознакомлюсь. А сам её продолжу, возможно, уже на следующей неделе!\nhttps://habr.com/ru/news/678362/\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nhttps://www.gazeta.ru/auto/2025/12/03/22117009.shtml\u0026#160;\u0026#x21a9;\u0026#xfe0e;\n","permalink":"https://neonxp.ru/posts/2025-12-21-sicktech/","summary":"\u003cp\u003eЯ заметил, что часто стал в речи употреблять словосочетания «здоровая технология» или «нездоровая технология». Но при этом, я не задумывался о том, а что же именно это для меня значит, и как определить что есть здоровая, а что нездоровая технология. Я классифицировал исключительно интуитивно, исходя из принципа «я так чувствую».\u003c/p\u003e\n\u003cp\u003eНо раз есть классификация, то должны быть и критерии. Так? Так. И критерии я опираясь на собственное ощущение, вроде как, нашёл.\u003c/p\u003e","title":"Про здоровые и нездоровые технологии"},{"content":"Let\u0026rsquo;s Encrypt уменьшит срок действия сертификатов до 45 дней.\nА потом будет на неделю, на день, на запрос\u0026hellip; Короче, да, по сути амерская конторка будет решать на какой сайт будет возможно зайти, а на какой нет. А то что хромые браузеры сделают невозможным заход на сайты без валидного (заверенного кем надо, конечно же) сертификата, я уже и не сомневаюсь.\nВо истину говорю вам: грядут последние дни интернета. Ну точнее WWW, если говорить конкретнее, но это уже душнилово.\nНо это не сильно то печаль. Интернет, всё равно, для большинства уже скукожился до двух десятков «сервисов». А для энтузиастов будут «свободные» браузеры, свободные не только с точки зрения кода, но и политики стран НАТО.\nК счастью, у нас есть Librewolf, Palemoon, Dilo, да Lynx наконец. Без интернета (окей, WWW) не останемся.\nТак же можно рассмотреть и альтернативные технологии типа gopher, gemini. Но это, как-нибудь, в другой раз. А пока запасаемся попкорном и смотрим как горит мир интернет.\n","permalink":"https://neonxp.ru/posts/2025-12-02-httpsocalypse/","summary":"\u003cp\u003e\u003ca href=\"https://www.opennet.ru/opennews/art.shtml?num=64363\"\u003eLet\u0026rsquo;s Encrypt уменьшит срок действия сертификатов до 45 дней.\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eА потом будет на неделю, на день, на запрос\u0026hellip; Короче, да, по сути амерская конторка будет решать на какой сайт будет возможно зайти, а на какой нет. А то что хромые браузеры сделают невозможным заход на сайты без валидного (заверенного \u003cem\u003eкем надо\u003c/em\u003e, конечно же) сертификата, я уже и не сомневаюсь.\u003c/p\u003e\n\u003cp\u003eВо истину говорю вам: грядут последние дни интернета. Ну точнее WWW, если говорить конкретнее, но это уже душнилово.\u003c/p\u003e","title":"HTTPS и конец интернетов"},{"content":"Пришло в голову, почему бы не рассказать как у меня организован личный органайзер.\nДля начала стоит очертить то, какие у меня потребности от органайзера:\nВести список ежедневных, еженедельных, ежегодных, а так же, одноразовых\nсобытий Вести быстрый список ближайших задач (ToDo список). Под быстрым, я\nподразумеваю то, что внести новый пункт в него я могу не дольше, чем за пару\nдесятков секунд. Если это будет требовать бо́льших усилий, то я себя знаю: я\nэто быстро заброшу, т.к. это станет для меня не помощью, а повинностью. Место для быстрых заметок в формате «бесконечного текстовика». Аналогично,\nэто должно быть под рукой в быстром доступе. Obsidian себя показал слишком\nмедленным. Настолько, что мне стало проще запоминать, чем испытывать свои\nнервы каждый раз, наблюдая его длительный запуск. Да, звучит на первый взгляд\nглупо, но у меня так: запуск Obsidian длительностью в десяток секунд\nокончательно отбил у меня желание вовсе запускать его. Что же делать? Искать идеальный для себя инструмент? Идеального для себя точно не найду. Написать самому, ведь «яжпрограммист»? Можно, но откровенно жаль время. Что же делать-то?\nК счастью, я вспомнил что у меня же unix-подобная операционная система, в поставке которой огромное количество небольших программ, которые прекрасно выполняют какую-то небольшую функцию и при этом отлично стыкуются друг с другом через стандартный текстовый поток! Грешно не воспользоваться наработками гораздо более умных, чем я, программистов!\nToDo Проще всего оказалось с этим. Просто поставил себе todo.txt. Хоть я и говорил выше, что идеального инструмента я не найду, но я тогда немного слукавил. Для ToDo этот инструмент почти идеален. Всё что мне надо, кроме одного нюанса, там есть. А вот тот самый нюанс, я когда-нибудь исправлю. Возможно.\nДля удобства я себе в zsh добавил следующие alias:\nalias t=todo.sh Таким образом, чтобы добавить задачку я просто пишу t add текст задачи. Куда уж проще и быстрее?\nКалендарь Идею организации календаря я подсмотрел в программе calendar, которая идёт в комплекте с BSD системами, но не идёт в конкретно моей ОС. Да, наверняка, можно и к себе притащить, но я из спортивного интереса хотел решить задачу максимально встроенными и стандартными инструментами.\nЛонг стори шорт:\n~/calendar.txt\n01-28\tДР Лены 10-18\tДР Мамы 05-24\tГодовщина свадьбы 11-23\tЕжегодное событие Пн\t15\tЕженедельный мит Пн\t20-21\tЧтение Вт\t13\tАрхком Вт\t15\tГрумминг Вт\t20-21\tЧтение Ср\t13\tТехразвитие Ср\t20-21\tЧтение Чт\t15\tГрумминг Чт\t20-21\tЧтение Пт\t20-21\tЧтение Сб\t20-21\tЧтение Вс\t20-21\tЧтение 2025-11-19\t10\tклуб амбассадоров 2025-11-17\t16:30-17:30\tВстреча c 16:30 до 17:30 2025-11-24\t10:15\tGolang Техком 2025-11-24\t11-12\tАнализ логики состояния 2025-11-23\t21\tНаписать в блог о своём календаре ``` Пояснения: - `mm-dd\\t\\tСобытие` - некие ежегодные события, у которых указаны только месяц и день месяца - `Пн\\tвремя\\tСобытие` - еженедельное событие. Про формат времени - будет ниже. - `yyyy-mm-dd\\tвремя\\tсобытие` - разовые события в конкретную дату и время. Формат времени: его я подсмотрел у формата [calendar.txt](https://terokarvinen.com/2021/calendar-txt/), то есть, запись формата `15` - это означает что событие начнётся в 15 часов, `20-21` - событие длится с 20 до 21 часа вечера. С минутами, которые не обязательны, думаю, всё понятно из примера. Формат сам по себе абсолютно не жёсткий, допускает много вольностей. Главное, всё сводится к тому, что у него 1 строка - 1 событие и сама строка состоит из 3 полей разделённых табом (в формате calendar.txt предлагается точка, для меня это показалось неприемлемым, т.к. я записываю в события и ссылки на созвоны, а ссылка включает в себя минимум одну точку) В принципе, тут уже можно было бы и остановиться и жить с просто текстовиком, но так было бы не интересно. Я написал на языке оболочки несколько полезных скриптов. Они настолько маленькие, что я просто приведу их здесь: ~/.local/bin/calendar ```sh #! /bin/sh cur=${2:-`date +%Y-%m-%d`} file=${1:-~/calendar.txt} grep \\ -e \u0026#34;^$(date +%Y-%m-%d -d $cur)\u0026#34;\\ -e \u0026#34;^$(date +%a -d $cur)\u0026#34;\\ -e \u0026#34;^$(date +%m-%d -d $cur)\u0026#34; $file |\\ sort -n -k 2 |\\ cut -f2- | fold -w 80 -s ``` Собственно, это главный скрипт, который собирает для текущей (или явно указанной) даты все релевантные события, сортирует их по времени и выводит форматированным списком. Примерно так: % calendar\nЕжегодное событие\n20-21\tЧтение\n21\tНаписать в блог о своём календаре\nНа этом я не остановился, но сделал ещё парочку вспомогательных скриптов, использующих его за основу: ~/.local/bin/today ```sh #!/bin/sh echo \u0026#34;Календарь:\u0026#34; echo -e \u0026#39;\u0026#39;$_{1..80}\u0026#39;\\b-\u0026#39; cal echo -e \u0026#39;\u0026#39;$_{1..80}\u0026#39;\\b-\u0026#39; echo \u0026#34;События дня:\u0026#34; echo -e \u0026#39;\u0026#39;$_{1..80}\u0026#39;\\b-\u0026#39; calendar echo -e \u0026#39;\u0026#39;$_{1..80}\u0026#39;\\b-\u0026#39; echo \u0026#34;ToDo:\u0026#34; todo.sh ls ``` Делает по сути тоже самое что и просто calendar, только ещё и рисует красивый графический календарик и показывает список ToDo задач. ~/.local/bin/week ```sh #!/bin/sh echo \u0026#34;На 7 дней:\u0026#34; for i in {0..6} do d=`date +%Y-%m-%d -d \u0026#34;+ $i day\u0026#34;` echo -e \u0026#39;\u0026#39;$_{1..80}\u0026#39;\\b-\u0026#39; echo $d echo -e \u0026#39;\u0026#39;$_{1..80}\u0026#39;\\b-\u0026#39; calendar ~/calendar.txt $d done echo -e \u0026#39;\u0026#39;$_{1..80}\u0026#39;\\b-\u0026#39; echo \u0026#34;ToDo:\u0026#34; todo.sh ls ``` Выводит план на 7 дней вперёд. ## Редактирование календаря Здесь тоже предельно просто: добавил в zshrc такой алиас: ```zsh alias ev=\u0026#39;nvim +/`date +\u0026#34;%Y-%m-%d\u0026#34;` ~/calendar.txt\u0026#39; и просто по команде ev открывается neovim и готов принимать новое событие. Хотя это и не самая частая операция.\nБыстрые заметки Тут тоже всё просто:\nalias qn=\u0026#39;nvim \u0026#34;+normal G\u0026#34; ~/quicknote.txt\u0026#39; Соответственно, по команде qn открывается мой текстовик для заметок на самой последней строке. Можно дописать или поискать что-то с конца. На самом деле очень удобно!\nМобильный? Я бы хотел все эти мои текстовики иметь и на мобильном устройстве. Даже не для редактирования, а например, свериться со списком задач / событий.\nТут чуть сложнее. Для синхронизации с мобильным устройством я сделал такой финт:\nВсе текстовики у меня лежат не в домашней директории, на самом деле, а в\nнекой директории из которой симлинками уже прокинуты в корень домашней\nдиректории. Директория эта добавлена в Syncthing который синхронизирует её с NAS и\nмобильным устройством. На мобильном устройстве стоит замечательная программа\nMarkor которая нативно\nпонимает формат todo.txt, ну и достаточно неплохо позволяет смотреть\nредактировать файлы calendar.txt и quicknote.txt. Чтобы хотелось ещё? Как я упоминал, в todo.txt для меня есть неприятный нюанс который я бы хотел\nисправить, а именно, вложенные задачи, когда у одной задачи может быть\nсколько угодно дочерних, у которых, так же могут быть дочерние. Пока думаю,\nрасширить формат табуляцией в начале строки. Количество \\t - уровень\nвложенности. Но тогда придётся модифицировать todo.txt-cli который я\nиспользую. И непонятно как это проглотит Markor. Можно конечно использовать\nвстроенную возможность задавать key-value значения. Тогда будет что-то типа\nПодзадача parent:2. Это, как будто, самый правильный способ, который и\nрекомендуется разработчиками формата, но получается слишком многословно, а\nдаже если сократить до p:2 - всё равно надо в голове держать номер\nродительской задачи. Так себе. Не знаю ещё как поступлю, но как-то поступлю. Было бы неплохо прикрутить парсинг ICS файлов из почты для автоматического\nдобавления событий в календарь. Это сто́ит сделать однозначно! Ну и очень желательно сделать скрипт который по крону за 15 минут до события\nнапомнит о нём, через какой-нибудь notify-send. Это, на самом деле, из всех\nхотелок самая приоритетная для меня сейчас. Если будет интересно, я могу здесь рассказывать о том, что сделал из этих хотелок.\n","permalink":"https://neonxp.ru/posts/2025-11-23-org/","summary":"\u003cp\u003eПришло в голову, почему бы не рассказать как у меня организован личный органайзер.\u003c/p\u003e\n\u003cp\u003eДля начала стоит очертить то, какие у меня потребности от органайзера:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eВести список ежедневных, еженедельных, ежегодных, а так же, одноразовых\u003cbr\u003e\nсобытий\u003c/li\u003e\n\u003cli\u003eВести быстрый список ближайших задач (ToDo список). Под быстрым, я\u003cbr\u003e\nподразумеваю то, что внести новый пункт в него я могу не дольше, чем за пару\u003cbr\u003e\nдесятков секунд. Если это будет требовать бо́льших усилий, то я себя знаю: я\u003cbr\u003e\nэто быстро заброшу, т.к. это станет для меня не помощью, а повинностью.\u003c/li\u003e\n\u003cli\u003eМесто для быстрых заметок в формате «бесконечного текстовика». Аналогично,\u003cbr\u003e\nэто должно быть под рукой в быстром доступе. Obsidian себя показал \u003cem\u003eслишком\u003c/em\u003e\u003cbr\u003e\nмедленным. Настолько, что мне стало проще запоминать, чем испытывать свои\u003cbr\u003e\nнервы каждый раз, наблюдая его длительный запуск. Да, звучит на первый взгляд\u003cbr\u003e\nглупо, но у меня так: запуск Obsidian длительностью в десяток секунд\u003cbr\u003e\nокончательно отбил у меня желание вовсе запускать его.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eЧто же делать? Искать идеальный для себя инструмент? Идеального для \u003cem\u003eсебя\u003c/em\u003e точно не найду. Написать самому, ведь «яжпрограммист»? Можно, но откровенно жаль время. Что же делать-то?\u003c/p\u003e","title":"Личный органайзер"},{"content":"В последнее время всё больше и больше думаю, что у меня перебор серверных мощностей. Да и софтовое хозяйство там немного в бардаке по историческим причинам. Есть желание капитально прибраться.\nСейчас у меня основная железка на хозяйстве это Intel Xeon E3-1230 3.2 ГГц, 16 ГБ DDR3ECC, 4x1TB HDD SATA в виде арендуемого Dedicated сервера.\nИ вроде неплохо, а вроде как и перебор. Зачем мне так много?\nУ меня сейчас крутится несколько сайтов (ну по сути 0 нагрузки), Jabber сервер (Prosody), почта (MOX), Mumble сервер да DNS (CoreDNS).\n~~Кажется, что под всё это хватит и небольшой VDS\u0026rsquo;ки.~~\nUPD: посмотрел цены, в общем, выигрыша по деньгам особо не будет. VDS стоят как-то неадекватно дорого. Видимо, придётся остаться на текущем дедике, просто основательно почистить его, видимо.\n~~Переезд я буду делать, скорее всего, поэтапно:~~\nПереезд получится единомоментным, т.к. переезд будет на тоже самое железо, а не на другое.\n~~Заведу VDS\u0026rsquo;ку.~~ Новую заводить не буду, а почищу начисто текущий сервер. Настрою почту (MOX хорош, конечно, но я хочу чего-то более кондового, типа\nPostfix) - перекину на новый сервер MX записи. Настрою Jabber (Prosody, как был - так и останется, он достаточно хорош) -\nперекину на него SRV записи. Так же естественно, надо не забыть Coturn сервер для звонков по Jabber. И только после этого надо переносить Git (Forgejo), и сайты. При этом\nперееду с Caddy на Angie. Перекину уже A (и даже AAAA!) записи. Перенос CoreDNS. Проверяю что всё хорошо и если так, то отказываюсь от арендованного сервака. Надеюсь, ничего не забыл. А если и забыл — значит оно мне и не нужно, в общем-то.\nЧто по итогу? Самое главное — сброшу груз старья, который накопился за годы аренды дедика. И что тоже приятно, но не главное — оптимизирую расходы. Причём, наверное, раз в 10.\nПо времени — думаю, растянется на неделю-две, т.к. свободного времени на всё это у меня, как всегда, катастрофически мало. Так что, если какие-то мои сервисы будут не доступны — значит я в процессе переезда.\n","permalink":"https://neonxp.ru/posts/2025-11-09-migration/","summary":"\u003cp\u003eВ последнее время всё больше и больше думаю, что у меня перебор серверных мощностей. Да и софтовое хозяйство там немного в бардаке по историческим причинам. Есть желание капитально прибраться.\u003c/p\u003e\n\u003chr\u003e\n\u003cp\u003eСейчас у меня основная железка на хозяйстве это Intel Xeon E3-1230 3.2 ГГц, 16 ГБ DDR3ECC, 4x1TB HDD SATA в виде арендуемого Dedicated сервера.\u003c/p\u003e\n\u003cp\u003eИ вроде неплохо, а вроде как и перебор. Зачем мне так много?\u003c/p\u003e\n\u003cp\u003eУ меня сейчас крутится несколько сайтов (ну по сути 0 нагрузки), Jabber сервер (Prosody), почта (MOX), Mumble сервер да DNS (CoreDNS).\u003c/p\u003e","title":"Переезд?"},{"content":"После вчерашнего поста мне написал один хороший человек с дельным замечанием, что не стоит для этих целей использовать make. Действительно так. И предложил хорошее решение, что это стоило сделать просто sh скриптами.\nУ меня только один вопрос. А почему я сам-то так сначала не сделал? Это же буквально на поверхности!\nШтош, бывает, затупил. Да и привык для всех гвоздей использовать этот молоток.\nОбновлённые скрипты:\n~/.local/bin/new-post\n#!/bin/sh -e postname=\u0026#34;${@:-new-post}\u0026#34; date=$(date +%Y-%m-%d) fn=\u0026#34;neonxp.ru/posts/$date-$postname.md\u0026#34; cat \u0026gt;$fn \u0026lt;\u0026lt;EOF --- title: date: $da tags: [] --- --- EOF $EDITOR $fn ``` ~/.local/bin/deploy-blog ```sh #!/bin/sh -e yassg generate scp -r /home/neonxp/.local/share/yassg/* neonxp.ru:/var/www/neonxp.ru/ Сейчас раздумываю, а почему бы этот функционал не включить в сам yassg, например, аналогом хуков? Надо будет обмозговать.\n","permalink":"https://neonxp.ru/posts/2025-11-04-blog-deploy-2/","summary":"\u003cp\u003eПосле \u003ca href=\"/2025-11-03-blog-deploy\"\u003eвчерашнего поста\u003c/a\u003e мне написал один \u003ca href=\"http://www.stargrave.org\"\u003eхороший человек\u003c/a\u003e с дельным замечанием, что не стоит для этих целей использовать make. Действительно так. И предложил хорошее решение, что это стоило сделать просто sh скриптами.\u003c/p\u003e\n\u003cp\u003eУ меня только один вопрос. А почему я сам-то так сначала не сделал? Это же буквально на поверхности!\u003c/p\u003e\n\u003cp\u003eШтош, бывает, затупил. Да и привык для всех гвоздей использовать этот молоток.\u003c/p\u003e\n\u003chr\u003e\n\u003cp\u003eОбновлённые скрипты:\u003c/p\u003e\n\u003cp\u003e~/.local/bin/new-post\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode class=\"language-sh\" data-lang=\"sh\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e#!/bin/sh -e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003epostname\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e${\u003c/span\u003e@\u003cspan style=\"color:#66d9ef\"\u003e:-\u003c/span\u003enew-post\u003cspan style=\"color:#e6db74\"\u003e}\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003edate\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#66d9ef\"\u003e$(\u003c/span\u003edate +%Y-%m-%d\u003cspan style=\"color:#66d9ef\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003efn\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;neonxp.ru/posts/\u003c/span\u003e$date\u003cspan style=\"color:#e6db74\"\u003e-\u003c/span\u003e$postname\u003cspan style=\"color:#e6db74\"\u003e.md\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003ecat \u0026gt;$fn \u003cspan style=\"color:#e6db74\"\u003e\u0026lt;\u0026lt;EOF\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e---\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003etitle:\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003edate: $da\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003etags: []\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e---\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e--- EOF\u003c/span\u003e $EDITOR $fn \u003cspan style=\"color:#e6db74\"\u003e```\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e~/.local/bin/deploy-blog\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e```\u003c/span\u003esh\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e#!/bin/sh -e\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eyassg generate\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003escp -r /home/neonxp/.local/share/yassg/* neonxp.ru:/var/www/neonxp.ru/\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eСейчас раздумываю, а почему бы этот функционал не включить в сам yassg, например, аналогом хуков? Надо будет обмозговать.\u003c/p\u003e","title":"Деплой блога — пересмотр"},{"content":"А ещё, я решил поделиться тем как я пишу в блог. Потому что, почему бы и нет.\nВо-первых, у меня есть такой вот Makefile просто в корне home:\nnew-post: @printf \u0026#34;Введите имя поста (латиницей, без пробелов) [new-post]: \u0026#34;; \\ read postname; \\ if [ -z \u0026#34;$$postname\u0026#34; ]; then \\ postname=\u0026#34;new-post\u0026#34;; \\ fi; \\ date=$$(date +%Y-%m-%d); \\ file=\u0026#34;neonxp.ru/posts/$$date-$$postname.md\u0026#34;; \\ echo \u0026#34;---\u0026#34; \u0026gt; \u0026#34;$$file\u0026#34;; \\ echo \u0026#34;title: \u0026#34; \u0026gt;\u0026gt; \u0026#34;$$file\u0026#34;; \\ echo \u0026#34;date: $$da echo \u0026#34;tags: []\u0026#34; \u0026gt;\u0026gt; \u0026#34;$$file\u0026#34;; \\ echo \u0026#34;---\u0026#34; \u0026gt;\u0026gt; \u0026#34;$$file\u0026#34;; \\ echo \u0026#34;\u0026#34; \u0026gt;\u0026gt; \u0026#34;$$file\u0026#34;; \\ echo \u0026#34;---\u0026#34; \u0026gt;\u0026gt; \u0026#34;$$file\u0026#34;; \\ echo \u0026#34;Комментариев в блоге не предусмотрено, но вы всегда можете написать мне на e-mail [i@neonxp.ru](mailto:i@neonxp.ru) или в джаббер [i@neonxp.ru](xmpp:/i@neonxp.ru)\u0026#34; \u0026gt;\u0026gt; \u0026#34;$$file\u0026#34;; \\ nvim \u0026#34;$$file\u0026#34; publish-post: yassg generate scp -r /home/neonxp/.local/share/yassg/* neonxp.ru:/var/www/neonxp.ru/ ``` И, соответственно, когда я хочу написать новый пост, я вызываю `make new-post`, скрипт у меня спрашивает имя файла, а затем открывает любимый neovim, в котором я уже и пишу сам текст поста. Затем я вызываю `make publish-post` и сначала мой генератор статических сайтов [YASSG](http:/gitverse.ru/neonxp/yassg/) собирает сайт в статический HTML, а потом отправляет всё на сервер в директорию, из которой сайт раздаётся. Очень просто! ","permalink":"https://neonxp.ru/posts/2025-11-03-blog-deploy/","summary":"\u003cp\u003eА ещё, я решил поделиться тем как я пишу в блог. Потому что, почему бы и нет.\u003c/p\u003e\n\u003chr\u003e\n\u003cp\u003eВо-первых, у меня есть такой вот Makefile просто в корне home:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode class=\"language-Makefile\" data-lang=\"Makefile\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#a6e22e\"\u003enew-post\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\t@printf \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;Введите имя поста (латиницей, без пробелов) [new-post]: \u0026#34;\u003c/span\u003e; \u003cspan style=\"color:#ae81ff\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\tread postname; \u003cspan style=\"color:#ae81ff\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\t\u003cspan style=\"color:#66d9ef\"\u003eif\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e[\u003c/span\u003e -z \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;\u003c/span\u003e$$\u003cspan style=\"color:#e6db74\"\u003epostname\u0026#34;\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e]\u003c/span\u003e; \u003cspan style=\"color:#66d9ef\"\u003ethen\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\t\tpostname\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;new-post\u0026#34;\u003c/span\u003e; \u003cspan style=\"color:#ae81ff\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\t\u003cspan style=\"color:#66d9ef\"\u003efi\u003c/span\u003e; \u003cspan style=\"color:#ae81ff\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\tdate\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e$$\u003cspan style=\"color:#f92672\"\u003e(\u003c/span\u003edate +%Y-%m-%d\u003cspan style=\"color:#f92672\"\u003e)\u003c/span\u003e; \u003cspan style=\"color:#ae81ff\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\tfile\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;neonxp.ru/posts/\u003c/span\u003e$$\u003cspan style=\"color:#e6db74\"\u003edate-\u003c/span\u003e$$\u003cspan style=\"color:#e6db74\"\u003epostname.md\u0026#34;\u003c/span\u003e; \u003cspan style=\"color:#ae81ff\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\techo \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;---\u0026#34;\u003c/span\u003e \u0026gt; \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;\u003c/span\u003e$$\u003cspan style=\"color:#e6db74\"\u003efile\u0026#34;\u003c/span\u003e; \u003cspan style=\"color:#ae81ff\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\techo \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;title: \u0026#34;\u003c/span\u003e \u0026gt;\u0026gt; \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;\u003c/span\u003e$$\u003cspan style=\"color:#e6db74\"\u003efile\u0026#34;\u003c/span\u003e; \u003cspan style=\"color:#ae81ff\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\techo \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;date: \u003c/span\u003e$$\u003cspan style=\"color:#e6db74\"\u003eda\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e\techo \u0026#34;\u003c/span\u003etags: \u003cspan style=\"color:#f92672\"\u003e[]\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34; \u0026gt;\u0026gt; \u0026#34;\u003c/span\u003e$$file\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;; \\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e\techo \u0026#34;\u003c/span\u003e---\u003cspan style=\"color:#e6db74\"\u003e\u0026#34; \u0026gt;\u0026gt; \u0026#34;\u003c/span\u003e$$file\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;; \\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e\techo \u0026#34;\u0026#34; \u0026gt;\u0026gt; \u0026#34;\u003c/span\u003e$$file\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;; \\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e\techo \u0026#34;\u003c/span\u003e---\u003cspan style=\"color:#e6db74\"\u003e\u0026#34; \u0026gt;\u0026gt; \u0026#34;\u003c/span\u003e$$file\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;; \\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e\techo \u0026#34;\u003c/span\u003eКомментариев в блоге не предусмотрено, но вы всегда можете написать мне на e-mail \u003cspan style=\"color:#f92672\"\u003e[\u003c/span\u003ei@neonxp.ru\u003cspan style=\"color:#f92672\"\u003e](\u003c/span\u003emailto:i@neonxp.ru\u003cspan style=\"color:#f92672\"\u003e)\u003c/span\u003e или в джаббер \u003cspan style=\"color:#f92672\"\u003e[\u003c/span\u003ei@neonxp.ru\u003cspan style=\"color:#f92672\"\u003e](\u003c/span\u003exmpp:/i@neonxp.ru\u003cspan style=\"color:#f92672\"\u003e)\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34; \u0026gt;\u0026gt; \u0026#34;\u003c/span\u003e$$file\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;; \\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e\tnvim \u0026#34;\u003c/span\u003e$$file\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#a6e22e\"\u003epublish-post\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e \tyassg generate \tscp -r /home/neonxp/.local/share/yassg/* neonxp.ru:/var/www/neonxp.ru/ ```\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#960050;background-color:#1e0010\"\u003eИ,\u003c/span\u003e \u003cspan style=\"color:#960050;background-color:#1e0010\"\u003eсоответственно,\u003c/span\u003e \u003cspan style=\"color:#960050;background-color:#1e0010\"\u003eкогда\u003c/span\u003e \u003cspan style=\"color:#960050;background-color:#1e0010\"\u003eя\u003c/span\u003e \u003cspan style=\"color:#960050;background-color:#1e0010\"\u003eхочу\u003c/span\u003e \u003cspan style=\"color:#960050;background-color:#1e0010\"\u003eнаписать\u003c/span\u003e \u003cspan style=\"color:#960050;background-color:#1e0010\"\u003eновый\u003c/span\u003e \u003cspan style=\"color:#960050;background-color:#1e0010\"\u003eпост,\u003c/span\u003e \u003cspan style=\"color:#960050;background-color:#1e0010\"\u003eя\u003c/span\u003e \u003cspan style=\"color:#960050;background-color:#1e0010\"\u003eвызываю\u003c/span\u003e \u003cspan style=\"color:#960050;background-color:#1e0010\"\u003e`make\u003c/span\u003e \u003cspan style=\"color:#960050;background-color:#1e0010\"\u003enew-post`,\u003c/span\u003e \u003cspan style=\"color:#960050;background-color:#1e0010\"\u003eскрипт\u003c/span\u003e \u003cspan style=\"color:#960050;background-color:#1e0010\"\u003eу\u003c/span\u003e \u003cspan style=\"color:#960050;background-color:#1e0010\"\u003eменя\u003c/span\u003e \u003cspan style=\"color:#960050;background-color:#1e0010\"\u003eспрашивает\u003c/span\u003e \u003cspan style=\"color:#960050;background-color:#1e0010\"\u003eимя\u003c/span\u003e \u003cspan style=\"color:#960050;background-color:#1e0010\"\u003eфайла,\u003c/span\u003e \u003cspan style=\"color:#960050;background-color:#1e0010\"\u003eа\u003c/span\u003e \u003cspan style=\"color:#960050;background-color:#1e0010\"\u003eзатем\u003c/span\u003e \u003cspan style=\"color:#960050;background-color:#1e0010\"\u003eоткрывает\u003c/span\u003e \u003cspan style=\"color:#960050;background-color:#1e0010\"\u003eлюбимый\u003c/span\u003e \u003cspan style=\"color:#960050;background-color:#1e0010\"\u003eneovim,\u003c/span\u003e \u003cspan style=\"color:#960050;background-color:#1e0010\"\u003eв\u003c/span\u003e \u003cspan style=\"color:#960050;background-color:#1e0010\"\u003eкотором\u003c/span\u003e \u003cspan style=\"color:#960050;background-color:#1e0010\"\u003eя\u003c/span\u003e \u003cspan style=\"color:#960050;background-color:#1e0010\"\u003eуже\u003c/span\u003e \u003cspan style=\"color:#960050;background-color:#1e0010\"\u003eи\u003c/span\u003e \u003cspan style=\"color:#960050;background-color:#1e0010\"\u003eпишу\u003c/span\u003e \u003cspan style=\"color:#960050;background-color:#1e0010\"\u003eсам\u003c/span\u003e \u003cspan style=\"color:#960050;background-color:#1e0010\"\u003eтекст\u003c/span\u003e \u003cspan style=\"color:#960050;background-color:#1e0010\"\u003eпоста.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#a6e22e\"\u003eЗатем я вызываю `make publish-post` и сначала мой генератор статических сайтов [YASSG](http\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e/gitverse.ru/neonxp/yassg/) собирает сайт в статический HTML, а потом отправляет всё на сервер в директорию, из которой сайт раздаётся.\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#960050;background-color:#1e0010\"\u003eОчень\u003c/span\u003e \u003cspan style=\"color:#960050;background-color:#1e0010\"\u003eпросто!\u003c/span\u003e \n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e","title":"Деплой блога"},{"content":"Станислав Лем\nНебольшая отсылка\nПонятием \u0026ldquo;душа в машине\u0026rdquo; - the ghost in the machine - некоторые психологи (английские) закрепляют убеждение в том, что человек якобы является существом \u0026ldquo;двойственным\u0026rdquo;, т.е. состоящим из \u0026ldquo;материи\u0026rdquo; и \u0026ldquo;души\u0026rdquo;.\nСознание не является технологической проблемой, потому что конструктора не интересует, чувствует ли машина, а только интересует, действует ли она. Таким образом \u0026ldquo;технология сознания\u0026rdquo;, как бы это сказать, может появиться только мимоходом, когда окажется, что определенный класс кибернетических машин обладает субъективным миром психических переживаний.\nНо каким образом можно узнать о наличии сознания в машине? Эта проблема имеет не только абстрактно-философское значение, ибо предположение, что какая-то машина, которая отправляется на лом из-за того, что ремонт не оплачивается, имеет сознание, превращает наше решение уничтожить материальный предмет, типа граммофона, в акт уничтожения индивидуальности, осознанного убийства. Кто-то мог бы оснастить граммофон пластинкой и выключателем таким образом, что, если бы мы сдвинули его с места, то услышали бы крики: \u0026ldquo;Ах, умоляю, подари мне жизнь!\u0026rdquo;. Как можно отличить такой, без сомнения, бездушный аппарат от мыслящей машины? Только вступая с ней в разговор. Английский математик Аллан Тьюринг (Allan Turing) в своей работе \u0026ldquo;Может ли машина мыслить?\u0026rdquo; предлагает в качестве решающего критерия \u0026ldquo;игру в имитацию\u0026rdquo;, которая основывается на том, что мы задаем Кому-то произвольные вопросы и на основании ответов должны сделать заключение, является ли этот Кто-то человеком или машиной. Если мы не сможем отличить машину от человека, то следует признать, что машина ведет себя как человек, то есть что она обладает сознанием.\nОтметим со своей стороны, что игру можно усложнить. Можно предположить два вида машин. Первый вид является \u0026ldquo;обычной\u0026rdquo; цифровой машиной, которая устроена как человеческий мозг; с ней можно играть в шахматы, разговаривать о книгах, о мире и вообще на все темы. Если бы мы ее вскрыли, то увидели бы огромное количество соединений элементов, подобно соединениям нейронов в мозгу, кроме того - блоки ее памяти и т.д. и т.п.\nВторой вид машины совсем другой. Это увеличенный до размера планеты (или космоса) граммофон. Она имеет очень много, например, сто триллионов, записанных ответов на всевозможные вопросы. Таким образом, когда мы спрашиваем, машина ничего \u0026ldquo;не понимает\u0026rdquo;, а только форма вопроса, т.е. очередность вибраций нашего голоса, приводит в движение передатчик, который запускает пластинку или ленту с записанным ответом. Не будем задумываться о технической стороне вопроса. Понятно, что такая машина неэкономична, что ее никто не создаст, потому что это невозможно и главное - неизвестно, зачем ее создавать. Но нас интересует теоретическая сторона. Потому что, если вывод о том, имеет ли машина сознание, делается на основе поведения, а не внутреннего строения, не придем ли мы неосмотрительно к выводу, что \u0026ldquo;космический граммофон\u0026rdquo; обладает им - и тем самым выскажем нонсенс? (А скорее неправду).\nМожно ли, однако, запрограммировать все возможные вопросы? Без сомнения, средний человек не отвечает в обычной жизни даже на один их биллион. Мы же на всякий случай записали их во много раз больше. Что же делать? Мы должны вести нашу игру по достаточно развитой стратегии. Мы задаем машине (то есть Кому-то, потому что не знаем, с кем имеем дело; разговор ведется, например, по телефону) вопрос, любит ли она анекдоты. Машина отвечает, скажем, что да, она любит хорошие анекдоты. Рассказываем ей анекдот. Машина смеется (т.е смеется голос в трубке). Или у ней был этот анекдот записан и это позволило ей правильно отреагировать, т.е. засмеяться, или это в самом деле мыслящая машина (или человек, ибо мы этого не знаем). Мы разговариваем с машиной какое-то время, а потом неожиданно спрашиваем, припоминает ли она анекдот, который мы ей рассказали. Она должна его помнить, если она действительно мыслит. Она скажет, что помнит. Мы попросим, чтобы она повторила его своими словами. Вот это уже очень трудно запрограммировать, потому что таким образом мы вынуждаем конструктора \u0026ldquo;космограммофона\u0026rdquo; записать не только отдельные ответы на возможные вопросы, но и целые последовательности разговоров, которые могут вестись. Это требует, конечно, памяти, т.е. дисков или лент, которых, может, и вся солнечная система не вместит. Положим, машина не может повторить нашего анекдота. И мы тем самым разоблачаем, что она - граммофон. Задетый конструктор берется за усовершенствование машины таким образом, что пристраивает ей такую память, благодаря которой она сможет вкратце повторить сказанное. Но таким образом он сделал первый шаг в направлении от машины-граммофона к машине мыслящей. Так как бездушная машина не может признать идентичными вопросы аналогичного содержания, но сформулированные даже с незначительными формальными отклонениями, типа: \u0026ldquo;Вчера было хорошо на улице?\u0026rdquo;, \u0026ldquo;Вчера была прекрасная погода?\u0026rdquo;, \u0026ldquo;Погожим ли был предыдущий день?\u0026rdquo; и т. д. и т. п., то для машины бездушной они будут вопросами различными, а для машины мыслящей идентичными. Конструктор вновь разоблаченной машины вынужден опять ее перерабатывать. В конце концов, после долгой серии переделок, он введет в машину способности индукции и дедукции, способность ассоциации, схватывания тождественной \u0026ldquo;формы\u0026rdquo; по-разному сформулированных, но одинаковых по содержанию высказываний, пока в результате не получит машину, которая просто будет \u0026ldquo;обычной\u0026rdquo; мыслящей машиной.\nТак появляется интересная проблема: когда именно в машине появилось сознание? Предположим, что конструктор не переделывал эти машины, а относил каждую в музей и следующую модель создавал с начала. В музее стоит 10 000 машин, потому что столько было очередных моделей. Результатом стал плавный переход от \u0026ldquo;бездушного автомата\u0026rdquo; типа играющего шкафа к \u0026ldquo;машине, которая мыслит\u0026rdquo;. Должны ли мы признать машиной, имеющей сознание, машину номер 7852 или только номер 9973? Они отличаются друг от друга тем, что первая не умела объяснить, почему она смеется над рассказанным анекдотом, а только говорила, что анекдот очень смешен, а вторая умела. Но некоторые люди смеются над шутками, хотя и не могут объяснить, что именно в них смешно, потому что, как известно, теория юмора - это твердый орешек. Разве эти люди тоже лишены сознания? Нет же, они, наверное, просто не очень быстро реагируют или малообразованные, их ум не обладает навыками аналитического подхода к проблемам; но мы спрашиваем не о том, умная ли машина или скорее туповатая, мы только спрашиваем, имеет ли она сознание или нет.\nКазалось бы, следует признать, что модель номер 1 имеет ноль сознания, модель номер 10 000 имеет полное сознание, а все средние имеют \u0026ldquo;все больше\u0026rdquo; сознания. Это утверждение показывает, насколько безнадежной является мысль о том, что сознание можно точно локализовать. Отсоединение отдельных элементов (\u0026ldquo;нейронов\u0026rdquo;) машины спровоцирует только слабые, количественные изменения (\u0026ldquo;ослабления\u0026rdquo;) сознания так же, как это делает в живом мозге прогрессирующий процесс болезни или нож хирурга. Проблема не имеет ничего общего ни с использованным для конструкции материалом, ни с размерами \u0026ldquo;мыслящего\u0026rdquo; устройства. Электрическую мыслящую машину можно построить из отдельных блоков, соответствующих, положим, мозговым извилинам. Теперь разделим эти блоки и разместим на всей Земле так, что один находится в Москве, второй в Париже, третий в Мельбурне, четвертый в Иокогаме и т. д. Отделенные друг от друга, эти блоки \u0026ldquo;психически мертвы\u0026rdquo;, а соединенные (например, телефонными кабелями) они стали бы одной, интегральной \u0026ldquo;индивидуальностью\u0026rdquo;, единым \u0026ldquo;мыслящим гомеостатом\u0026rdquo;. Сознание такой машины находится ни в Москве, ни в Париже, ни в Иокогаме, но, в определенном смысле, в каждом из этих городов и, в определенном смысле, ни в одном из них. Потому что о нем трудно сказать, что оно, как Висла, имеет протяженность от Татр до Балтийского моря. Впрочем, подобная проблема демонстрирует, хотя и не так ярко, человеческий мозг, потому что кровеносные сосуды, белковые молекулы и ткани находятся внутри мозга, но не внутри сознания, и опять-таки нельзя сказать, что сознание находится под самым куполом черепа или, скорее всего, ниже, над ушами, по обеим сторонам головы. Оно \u0026ldquo;рассеяно\u0026rdquo; по всему гомеостату, по его функциональной сети. Ничего больше заявить на эту тему не получится, если мы хотим соединить сознание с возможностью рассуждать.\nВышеприведенный текст, скопированный из моей \u0026ldquo;Суммы технологии\u0026rdquo;, был написан в середине 1963 года. С точки зрения сегодняшней ситуации он представляет очень сильное упрощение дороги, которую мы должны пройти, чтобы дойти до имитации описанной мной цели. Мы уже предполагаем, что \u0026ldquo;сознание\u0026rdquo; и \u0026ldquo;интеллект\u0026rdquo; - это в определенном смысле отдельные сути бытия. Мы знаем, что существуют достаточно различные состояния сознания, даже если шкала их находится между сном и реальностью. Но и сон, точнее, мечта во сне, может характеризоваться разнообразной насыщенностью конкретностей, которые имитируют реальность, сознательно переживаемую наяву. В свою очередь, сознание наяву, что каждый знает по собственному опыту, даже если он не является ни психологом, ни психиатром, может также иметь очень различные состояния. Человек в состоянии болезненного жара может осознавать свое состояние, то есть то, что его сознание подверглось нарушению. Различные химические средства могут самым разным образом формировать человеческое сознание. Кроме того, следует отметить, что есть множество действий, которые человек может делать машинально, то есть четко и неосознанно. Сознание водителя автомобиля, особенно быстрого, \u0026ldquo;не успевает\u0026rdquo; за реакциями этого водителя в ситуациях с неожиданной последовательностью событий. Вместе с тем машинально можно делать глупости, мы называем их чаще всего \u0026ldquo;действиями по рассеянности\u0026rdquo;.\nВсе это я сказал в отношении моего текста тридцатипятилетней давности, в котором я задумался над \u0026ldquo;ростками\u0026rdquo; сознания в машине, и делал я это потому, что мне казалось, что люди очень отличаются друг от друга уровнем умственных способностей, а сознание всем дано приблизительно похожее.\nДороги напрямик, по прямой и восходящей линии, от полного автомата, каким является компьютер, к машине, которой мы могли бы приписать сознание, нет. Вместе с тем работу нашего мозга мы уже знаем настолько, чтобы узнать то, что так называемая каллотомия, или рассечение большой белой спайки, соединяющей полушария мозга, не ликвидирует сознания, но создает в разделенных полушариях две его разновидности. Кроме того, мы знаем, что мозг является системой, построенной из огромного количества функциональных модулей, которые в отдельных окрестностях мозга создали среду, формирующую сознание. Уточню сказанное примером. Существует часть коры мозга, способствующая тому, что мы видим цвета. Повреждение этого модуля приводит к тому, что таким образом пораженный человек видит все без цвета, как в черно-белом кино. Чем точнее мы узнаем специфику функциональной ориентации модулей мозга, тем с большим удивлением узнаем, как, с точки зрения инженерной экономии, хаотично устроен мозг, хотя мы при осознании самих себя не отдаем себе в этом отчета. Сегодня нам кажется, что отдельные модули, функционально похожие на модули мозга, мы уже сможем конструировать. Обычно это псевдонейронные сети различной сложности. Вместе с тем мы еще не умеем ни создать их в достаточном количестве, ни соединить их таким образом, чтобы созданное произведение смогло имитировать сознание. Следовательно, прямой дороги от бездумного автомата к сознательно мыслящей машине нет. Есть, однако, много сложных дорог, которые в будущем приведут нас к цели и, может быть, эту цель превзойдут. О такой возможности я написал книгу \u0026ldquo;Голем XIV\u0026rdquo;.\nКраков, 7 июля 1998 года.\n","permalink":"https://neonxp.ru/posts/2025-10-18-the-ghost-in-the-machine/","summary":"\u003cp\u003eСтанислав Лем\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"laughing-man.jpeg\" loading=\"lazy\" src=\"/files/posts/files/2025-10-18-the-ghost-in-the-machine/laughing-man.jpeg\"\u003e\u003cbr\u003e\nНебольшая отсылка\u003c/p\u003e\n\u003chr\u003e\n\u003cp\u003eПонятием \u0026ldquo;душа в машине\u0026rdquo; - the ghost in the machine - некоторые психологи (английские) закрепляют убеждение в том, что человек якобы является существом \u0026ldquo;двойственным\u0026rdquo;, т.е. состоящим из \u0026ldquo;материи\u0026rdquo; и \u0026ldquo;души\u0026rdquo;.\u003c/p\u003e\n\u003cp\u003eСознание не является технологической проблемой, потому что конструктора не интересует, чувствует ли машина, а только интересует, действует ли она. Таким образом \u0026ldquo;технология сознания\u0026rdquo;, как бы это сказать, может появиться только мимоходом, когда окажется, что определенный класс кибернетических машин обладает субъективным миром психических переживаний.\u003c/p\u003e","title":"Душа в машине"},{"content":"Немного моих размышлений про будущее ИИ как технологии, а не философии.\nКак водится, когда речь о размышлениях — буду сначала вводить тезисы, а потом, синтез.\nТезис первый Хоть сам и не пользуюсь таким инструментом, как Cursor из третьих рук я узнал, что там не просто внутри нейронка, а целый их ансамбль. Более того, что главное, там есть автовыбор того, какая именно БЯМ (большая языковая модель) будет отвечать за конкретный запрос. И вот этот момент меня заинтересовал. Я задумался, как именно это может быть реализовано. Первая мысль, как самая очевидная была в том, что внутри помимо больших моделей, есть и маленькая, единственная функция которой (а может и не единственная, но, значит, основная) — классифицировать запрос (окей, промпт) по тому, какая из больших моделей возьмёт работу на себя.\nМысль эта мне показалась немного диковатой, т.к. показалось, что это несколько пушкой по воробьям, и подумал, что может есть другое, более классическое, алгоритмическое решение. Думал-думал, ничего хорошего в голову не пришло. Поэтому всё же взял за рабочую гипотезу, что таки да, классифицирует маленькая и дешевая моделька. Маленькая и дешёвая да, но точно не локальная. Ведь даже для маленьких моделек нужны определённые мощности, которые есть далеко не у всех.\nИ вот здесь-то мысль и полетела дальше! Представилось что в будущем всё больше и больше «классические» алгоритмические задачи будут «закрывать» нейронками там где надо и не надо. Чем-то напоминает ситуацию в электронике, когда экономически часто более целесообразно не придумывать схему на элементарных радиодеталях, а воткнуть просто унифицированный микроконтроллер, который с правильной прошивкой заменяет целую кучку рассыпухи.\nНо продолжение мысли пока попридержу. А пока\u0026hellip;\nТезис второй Я человек молодой, но более менее успел застать такой интересный переферийный девайс, как математический сопроцессор. Назначение устройства — позволять компьютеру выполнять операции над вещественными числами. Представляете, когда-то процессоры такие операции сами не умели выполнять! Но надо делать скидку на время и то, что такие операции были, наверное, не всем нужными, а скорее уделом специалистов, которые знали зачем им эта железка и целенаправленно её докупали. Сейчас любой, даже самый слабейший процессор имеет этот сопроцессор внутри себя.\nНичего не напоминает?\nНейронки и видеокарты!\nА вот сейчас, соединим тезисы и придём к \u0026hellip;\nСинтез Нейронки, однозначно, вошли в нашу жизнь уже на долго.\nКривая хайпа\nМы сейчас, по моей оценке, где-то между пиком и дном, причём ближе именно к пику. Затем, неизбежно будет дно разочарований. Но это не столь важно сейчас. Важнее — следующий этап. Выйдет ли технология на плато продуктивности? Скорее всего, да. Всё же, помимо того, что это «ыыы прикольная штука», это ещё и вещь со вполне очевидной прикладной пользой. Не буду вдаваться в подробности, но я имею в виду обработку естественного языка (классификация, суммаризация, генерация), а так же «нечёткие» алгоритмы, когда путь к решению не задан заранее (агенты и всё такое).\nИ по той причине, что мы ещё не на плато, есть ощущение некоего «дикого запада». Ещё не устаканились методы и подходы, практически ежедневно что-то появляется новое, а старое исчезает. Горизонт - буквально пара месяцев. И инструменты всё ещё крайне сырые. Под инструментами я имею в виду даже не программные инструменты, а то на чём это запускается. А запускаются нейронки на видеокартах! ВИДЕОкарты, Карл! Лично мне это выглядит несколько костыльным. Причём даже мощные профессиональные решения типа A100, H100 за миллионы рублей это по сути именно что видеокарты, хоть и без видеовыходов. Даже у криптовалют когда они были на хайпе и майнились на тех же несчастных видеокартах достаточно быстро появились специализированные решения в виде айсиков. Ждут ли нас специализированные решения для задач ИИ? Конечно. Даже более того, они уже есть. У того же Huawei. Устройства, которые заточены только для нейронок и никак не способные в графику. И это, ИМХО, правильный путь, туда индустрия и пойдёт.\nНо это, опять таки, всё ещё настоящее. А что там в будущем?\nА в будущем, думаю, нас ждёт то, что специализированные устройства для инференса (запуска готовых моделей, грубо говоря) буду встроены непосредственно во все потребительские компьютеры и даже носимую технику, типа телефонов. Ровно так же, как было с математическими сопроцессорами, которые начинали отдельным устройством, а сейчас уже давно — просто небольшая часть на кристалле процессора. А применение им вижу как раз таки в том, чтобы там постоянно сидела небольшая (ну небольшая для того, будущего времени, для нас настоящих, скорее всего, весьма большая) моделька, к которой по вполне стандартизированным API ОС будет обращаться прикладной софт, чтобы выполнять какие-то свои прикладные задачи. Типа той, про которую я говорил в самом начале, по классификации того, в какую большую модель пойдёт запрос пользователя. Более того, кажется, что со временем это станет настолько общим местом, что многий софт и не запустится на железе без встроенного «интеллектуального сопроцессора». Как сейчас не запустится многий софт без, даже не математического сопроцессора (где вы найдете процессор без него?), а, например, каких нибудь SSE2 инструкций (я, честно говоря, не очень знаю зачем они, но, подозреваю, без них многое не заработает). А значит в этом самом будущем эти «интеллектуальные сопроцессоры» будут просто базовой частью любой ЭВМ (ну нравится мне эта аббревиатура).\nДа, можно возразить, что никак физически невозможно впихнуть такую вычислительную мощь в маленький кристалл на плате ноутбука, а, тем более, телефона. На это я отвечу просто: не знаю. Может быть и невозможно и такого не будет. Но ведь когда-то казалось невозможным что компьютер не будет занимать несколько комнат, а умещаться в кармане джинс каждого человека! Причём, тот что в джинсах, ещё и на много порядков будет мощнее! Так что я бы ничего не исключал.\nА как вы думаете?\n","permalink":"https://neonxp.ru/posts/2025-10-06-ai/","summary":"\u003cp\u003eНемного моих размышлений про будущее ИИ как технологии, а не философии.\u003c/p\u003e\n\u003cp\u003eКак водится, когда речь о размышлениях — буду сначала вводить тезисы, а потом, синтез.\u003c/p\u003e\n\u003chr\u003e\n\u003ch1 id=\"тезис-первый\"\u003eТезис первый\u003c/h1\u003e\n\u003cp\u003eХоть сам и не пользуюсь таким инструментом, как Cursor из третьих рук я узнал, что там не просто внутри нейронка, а целый их ансамбль. Более того, что главное, там есть автовыбор того, какая именно БЯМ (большая языковая модель) будет отвечать за конкретный запрос. И вот этот момент меня заинтересовал. Я задумался, как именно это может быть реализовано. Первая мысль, как самая очевидная была в том, что внутри помимо больших моделей, есть и маленькая, единственная функция которой (а может и не единственная, но, значит, основная) — классифицировать запрос (окей, промпт) по тому, какая из больших моделей возьмёт работу на себя.\u003c/p\u003e","title":"Размышления о будущем ИИ"},{"content":"\nДорога на САО\nСАО РАН Первая настоящая вылазка за этот отпуск. В этот раз мы ездили снова на САО РАН (Специальная Астрофизическая Обсерватория Российской Академии Наук) в посёлке Нижний Архыз. В том году мы уже там бывали, но, во-первых, прикосновение к настоящей науке вдохновляет каждый раз, и я не знаю на какой бы раз мне туда надоело ездить. А, во-вторых, в этот раз был другой научный сотрудник, с совершенно другой лекцией, так что, скучать не пришлось! Кстати, этот телескоп — с самым большим в Евразии диаметром главного зеркала: аж 6 метров и весом в 42 тонны! Высота купола — 53 метра, а высота самого телескопа в вертикальном положении (как на фото) — более 40 метров!\nСАО РАН\nМесто на карте\nДальше — небольшой фотоотчёт и расскажу о втором месте, где побывал.\nВнезапная встреча\nВнезапная встреча\nСтадо козочек и барашков\nСтадо козочек и барашков\nКупол САО\nКупол САО\nОбсерватория поменьше\nОбсерватория поменьше\nОгромный кран\nОгромный кран, с помощью которого устанавливается зеркало\nБТА\nИ вот он сам! Его величество — БТА (Большой Телескоп Азимутальный)!\nВнезапно, в самый разгар лекции, купол начал поворачиваться! Видимо, предполагались какие-то профилактические работы перед очередной рабочей сменой обсерватории (работает она только по ночам и в ясную погоду, что логично). В копилку этой версии говорит и тот факт, что после поворота на главное зеркало поднялся специалист и проводил непонятные мне, дилетанту, работы. Возможно, ремонтно-профилактические.\nПосле экскурсии ещё смотрели на солнце (через специальный фильтр, конечно же!) и я впервые своими глазами увидел настоящие пятна на солнце!\nНижне-Архызское городище Сразу после САО мы поехали в Нижне-Архызское городище, где находятся руины храмов и других построек X-XII веков.\nМесто на карте\nПоскольку, я не историк, и рассказать мне про них сверх данных из Рувики нечего — просто опубликую фотографии.\nСредний храм Изображение 8\nИзображение 9\nИзображение 10\nИзображение 11\nИзображение 20\nСеверный храм Изображение 17\nИзображение 12\nИзображение 13\nИзображение 14\nИзображение 15\nИзображение 16\nСолярный круг Изображение 18\nИзображение 19\nПоловецкая баба Изображение 21\nИзображение 22\nИзображение 23\nПродолжение поездки следует\u0026hellip;\n","permalink":"https://neonxp.ru/posts/2025-09-01-travel-1/","summary":"\u003cp\u003e\u003cimg alt=\"preview_1.webp\" loading=\"lazy\" src=\"/files/posts/files/2025-09-01-travel-1/preview_1.webp\"\u003e\u003cbr\u003e\nДорога на САО\u003c/p\u003e\n\u003ch2 id=\"сао-ран\"\u003eСАО РАН\u003c/h2\u003e\n\u003cp\u003eПервая настоящая вылазка за этот отпуск. В этот раз мы ездили снова на \u003ca href=\"https://ru.ruwiki.ru/wiki/%D0%A1%D0%BF%D0%B5%D1%86%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D0%B0%D1%81%D1%82%D1%80%D0%BE%D1%84%D0%B8%D0%B7%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D0%BE%D0%B1%D1%81%D0%B5%D1%80%D0%B2%D0%B0%D1%82%D0%BE%D1%80%D0%B8%D1%8F_%D0%A0%D0%90%D0%9D\"\u003eСАО РАН (Специальная Астрофизическая Обсерватория Российской Академии Наук)\u003c/a\u003e в посёлке Нижний Архыз. В том году мы уже там бывали, но, во-первых, прикосновение к настоящей науке вдохновляет каждый раз, и я не знаю на какой бы раз мне туда надоело ездить. А, во-вторых, в этот раз был другой научный сотрудник, с совершенно другой лекцией, так что, скучать не пришлось! Кстати, этот телескоп — с самым большим в Евразии диаметром главного зеркала: аж 6 метров и весом в 42 тонны! Высота купола — 53 метра, а высота самого телескопа в вертикальном положении (как на фото) — более 40 метров!\u003c/p\u003e","title":"Поездка по Кавказу. Часть 1: САО РАН и Аланское городище в Нижнем Архызе"},{"content":"Я продолжаю погружаться в печать не просто готовых моделей из интернета, что не очень интересно, но так же и в проектирование и печать собственных изделий. Сегодня моя любимая супруга попросила напечатать ей органайзер для косметики. Показала референс, какой она хочет. ТЗ понятное, размеры подобрали, осталось дело за малым — непосредственно запрограммировать изделие.\nНа практике, это пока самое сложное по детализации изделие из всех, что я делал. Код получился кривоватым, но рисует то, что нужно.\nВот так результат в редакторе:\nрезультат в редакторе\nА вот так в слайсере:\nслайсер\nНу и впервые решил добавить «клеймо мастера» со своим логотипом. Впредь, буду добавлять его на все свои изделия, которые запроектированы именно мной\nФотографий готового изделия пока нет, ибо печататься ему ещё минимум 10 часов. Фото я приложу позже отдельным постом ;)\nP.S. архив с исходниками и готовым для печати STL прилагаю\n","permalink":"https://neonxp.ru/posts/2025-08-09-makeup-organizer/","summary":"\u003cp\u003eЯ продолжаю погружаться в печать не просто готовых моделей из интернета, что не очень интересно, но так же и в проектирование и печать собственных изделий. Сегодня моя любимая супруга попросила напечатать ей органайзер для косметики. Показала референс, какой она хочет. ТЗ понятное, размеры подобрали, осталось дело за малым — непосредственно запрограммировать изделие.\u003c/p\u003e\n\u003chr\u003e\n\u003cp\u003eНа практике, это пока самое сложное по детализации изделие из всех, что я делал. Код получился кривоватым, но рисует то, что нужно.\u003c/p\u003e","title":"Ещё немного печати"},{"content":"Некоторое время назад я по глупости запорол свои бокорезы, так, что для откусывания ножек радио деталей они больше не годятся. К счастью, стоят они совершенно не дорого, и тем же днём были заказанные новые в небезызвестном сервисе, который в девичестве содержал в себе название моего родного города. При получении я немного огорчился тем, что в комплекте к ним не шёл колпачок, который был у предыдущих, хотя выглядят они идентично.\nШтош. Я решил восполнить этот недостаток с интересом для себя и решил этот колпачок самостоятельно спроектировать и напечатать на 3D принтере, который есть у меня на хозяйстве.\nБокорез и родной колпачок Бокорезы и\nколпачок\nПроектирование Обычно, детали для печати проектируются в CAD программах твердотельного моделирования. Но я в них совершенно не умею, хотя и сын инженеров-конструкторов. Но зато, к счастью, я программист. И вроде, не самый худший! Посему, я решил воспользоваться свободной программой для твердотельного моделирования OpenSCAD. К счастью, в репозитории любимого дистрибутива (как, в прочем, и в большинстве других репозиториев) он присутствовал. Что же в нём необычного? А необычное в нём то, что деталь в нём не рисуется, а именно что программируется. Для понимания, приведу простой пример:\ncube([25,35,55]); / Нарисовать куб размерами 25мм х 25мм х 55мм Просто? Очень! А учитывая что язык полноценный, с циклами и условиями «напрограммировать» в нём можно многое.\nПервая версия Вот и я не стал долго думать, открыл мануал с оффсайта, обмерил штангенциркулем оригинальный колпачок и пошёл проектировать программировать. На всё про всё у меня ушло где-то с полчаса. И у меня получилась первая версия колпачка. Максимально простая и дубовая. Первая куцая версия:\nКолпачок v1\nВторая версия В принципе, на этом можно было и остановиться, ведь свою функцию он выполняет. Но у меня сработал мой перфекционист и я подумал, что было бы неплохо вырезы в корпусе сделать один под другим, а не на одной линии, чтобы бокорез сидел ровно, а не под углом. Потом пришла мысль, что было бы неплохо ещё и параметризировать модель, чтобы было легко менять её размеры, а не хардкодить их. И вот получилась вторая, и на текущий момент окончательная версия:\nРезультат «в железе», то есть в пластике :)\nКолпачок v2 результат\nА сам код, думаю, он достаточно понятен (исходник и STL модель я прикладываю к этому посту):\n/ Толщина стенки 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, как моим самым любимым.\nСсылки Сайт OpenSCAD - https://openscad.org/ Документация - https://openscad.org/documentation.html Шпаргала по функциям - https://openscad.org/cheatsheet/index.html Библиотеки - https://openscad.org/libraries.html ","permalink":"https://neonxp.ru/posts/2025-08-05-lets-code-3d/","summary":"\u003cp\u003eНекоторое время назад я по глупости запорол свои бокорезы, так, что для откусывания ножек радио деталей они больше не годятся. К счастью, стоят они совершенно не дорого, и тем же днём были заказанные новые в небезызвестном сервисе, который в девичестве содержал в себе название моего родного города. При получении я немного огорчился тем, что в комплекте к ним не шёл колпачок, который был у предыдущих, хотя выглядят они идентично.\u003c/p\u003e\n\u003cp\u003eШтош. Я решил восполнить этот недостаток с интересом для себя и решил этот колпачок самостоятельно спроектировать и напечатать на 3D принтере, который есть у меня на хозяйстве.\u003c/p\u003e","title":"Давай запрограммируем деталь?"},{"content":"Некоторое время назад наткнулся в блоге Евгения Степанищева на потрясающую штуку - Meshtastic, или как в народе её называют - «мышастик». Вкратце, это протокол и, в первую очередь, специальная прошивка для целого спектра устройств, которые позволяют организовать mesh сеть поверх протокола LoRa.\nБазово, как это выглядит при использовании:\nУ каждого участника сети есть небольшое портативное радиоустройство (готовое или самодельное - не важно), прошитое специальной прошивкой. К устройству, чаще всего (но необязательно!) подключен смартфон со специальным одноимённым приложением. Устройство ищет и старается подключиться к другим подобным устройствам, а со смартфона можно писать как в публичные, так и в приватные каналы. Но только текстом, т.к. скорость исчисляется байтами в секунду. При этом, хоть и радиус каждого устройства достаточно небольшой, но засчёт ячеистой топологии можно передавать сообщения не только тем, кто в радиусе приёма, но и тем, кого напрямую устройство «не видит», зато видят соседи или соседи соседей (в среднем, не больше 7 хопов обычно настраивают).\nЗагоревшись, я тут же заказал себе T-Beam. Настройка оказалась до тупости простой, единственное, что надо учитывать, это то, какие частоты приняты в конкретном городе. Для Казани - это 868MHz.\nНа своём 3D принтере напечатал ти-биму корпус, закрепил его на стену и оставил вылавливать ноды. За неделю накопилось почти 50 штук! Но при этом, я не скажу, что качество связи какое-то особо хорошее - регулярно теряются сообщения, да и единовременно у меня, по сути, только один аплинк до остальной сети. Ну ничего, я уже заказал антенну получше ;).\nМой T-Beam в напечатанном чехле\nЧехол всратоватый потому что я его печатал в наихудшем качестве, на неотрегулированном принтере. Главное - свою задачу защиты выполняет.\nПонятное дело, что это просто игрушка и никакого практического применения у неё нет, а в основном чате - бо́льшую часть времени сплошные «Пинг, меня слышно?». Но! Очень забавная игрушка. И да, теоретически может позволить экстренно связаться там, где другой сети просто нет. Просто, это не мой случай. Хотя, недавно оказался в ситуации, когда и электричества дома не было (а с ним и домашней сети) и одновременно была БПЛА опасность, а значит, никакущая мобильная сеть. То есть, практически, идеальные условия для мышастика :).\nНесмотря на это, я всё же не удержался и заказал ещё два устройства, но в этот раз попроще. Брошу один в машину, а второй или супруге отдам, или в рюкзаке носить буду носить. Буду своими скромными силами хоть немного, да расширять сеть своими устройствами.\nТак же ездил на стройку своего будущего дома с устройством, но, ожидаемо, там оно сеть не увидело. Значит буду думать или о высокой антенне на крыше, или ещё что выдумывать, чтобы из своих пердей «дотянуться» до большой городской сети.\nА к чему я про него рассказываю? А просто так. Забавная гиковская штука.\n","permalink":"https://neonxp.ru/posts/2025-08-02-meshtastic/","summary":"\u003cp\u003eНекоторое время назад наткнулся в блоге \u003ca href=\"https://bolknote.ru/all/myshastik/\"\u003eЕвгения Степанищева\u003c/a\u003e на потрясающую штуку - \u003ca href=\"https://meshtastic.org/\"\u003eMeshtastic\u003c/a\u003e, или как в народе её называют - «мышастик». Вкратце, это протокол и, в первую очередь, специальная прошивка для целого спектра устройств, которые позволяют организовать \u003ca href=\"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\"\u003emesh\u003c/a\u003e сеть поверх протокола \u003ca href=\"https://ru.ruwiki.ru/wiki/LoRa\"\u003eLoRa\u003c/a\u003e.\u003c/p\u003e\n\u003chr\u003e\n\u003cp\u003eБазово, как это выглядит при использовании:\u003c/p\u003e\n\u003cp\u003eУ каждого участника сети есть небольшое портативное радиоустройство (готовое или самодельное - не важно), прошитое специальной прошивкой. К устройству, чаще всего (но необязательно!) подключен смартфон со специальным одноимённым приложением. Устройство ищет и старается подключиться к другим подобным устройствам, а со смартфона можно писать как в публичные, так и в приватные каналы. Но только текстом, т.к. скорость исчисляется байтами в секунду. При этом, хоть и радиус каждого устройства достаточно небольшой, но засчёт ячеистой топологии можно передавать сообщения не только тем, кто в радиусе приёма, но и тем, кого напрямую устройство «не видит», зато видят соседи или соседи соседей (в среднем, не больше 7 хопов обычно настраивают).\u003c/p\u003e","title":"Meshtastic"},{"content":"Давно ничего не писал, да и не было особо о чём. Немного играюсь с нейросетями и LLM в последнее время. Если выйдет что интересное - напишу об этом.\nА пока хотел написать вот о чём.\nНе помню, чтобы я когда-либо писал о том, какой у меня основной сетап, хотя сам с удовольствием читал о том, как он организован у других людей. Пожалуй, пришло время и мне его описать.\nПост переехал в постоянный раздел\n","permalink":"https://neonxp.ru/posts/2025-06-08-my-setup/","summary":"\u003cp\u003eДавно ничего не писал, да и не было особо о чём. Немного играюсь с нейросетями и LLM в последнее время. Если выйдет что интересное - напишу об этом.\u003c/p\u003e\n\u003cp\u003eА пока хотел написать вот о чём.\u003c/p\u003e\n\u003cp\u003eНе помню, чтобы я когда-либо писал о том, какой у меня основной сетап, хотя сам с удовольствием читал о том, как он организован у других людей. Пожалуй, пришло время и мне его описать.\u003c/p\u003e\n\u003chr\u003e\n\u003cp\u003e\u003ca href=\"/pages/setup/\"\u003eПост переехал в постоянный раздел\u003c/a\u003e\u003c/p\u003e","title":"Мой сетап 2025"},{"content":"Давно ничего не писал, да и не было особо о чём. Немного играюсь с нейросетями и LLM в последнее время. Если выйдет что интересное - напишу об этом.\nА пока хотел написать вот о чём.\nНе помню, чтобы я когда-либо писал о том, какой у меня основной сетап, хотя сам с удовольствием читал о том, как он организован у других людей. Пожалуй, пришло время и мне его описать.\nНоутбук Смартфон NAS Окончание Это всё что я вспомнил так сходу. По-любому, я что-то забыл, поэтому пост будет дополняться.\nUPD [14.06.2025] Пост переехал в постоянный раздел\n","permalink":"https://neonxp.ru/posts/2025-11-03-my-setup/","summary":"\u003cp\u003eДавно ничего не писал, да и не было особо о чём. Немного играюсь с нейросетями и LLM в последнее время. Если выйдет что интересное - напишу об этом.\u003c/p\u003e\n\u003cp\u003eА пока хотел написать вот о чём.\u003c/p\u003e\n\u003cp\u003eНе помню, чтобы я когда-либо писал о том, какой у меня основной сетап, хотя сам с удовольствием читал о том, как он организован у других людей. Пожалуй, пришло время и мне его описать.\u003c/p\u003e\n\u003chr\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"/pages/setup/laptop/\"\u003eНоутбук\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"/pages/setup/pda/\"\u003eСмартфон\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"/pages/setup/nas/\"\u003eNAS\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1 id=\"окончание\"\u003eОкончание\u003c/h1\u003e\n\u003cp\u003eЭто всё что я вспомнил так сходу. По-любому, я что-то забыл, поэтому пост будет дополняться.\u003c/p\u003e","title":"Мой сетап 2025"},{"content":"Так получилось, что с Нового Года я ничего в блог не писал. Тому причина в личной загруженности, и в не менее личной лени. Так же я делал некоторые эксперименты над самим блогом, потому что моё внутреннее чувство прекрасного не даёт мне просто остановиться и не трогать то, что работает.\nНо всё же, я чувствую внутреннюю потребность написать небольшую заметку с размышлениями, которые недавно приходили ко мне в голову.\nА связаны они с тем, что есть определённые догмы в индустрии, которые непонятно (ну или понятно) почему появились, и которым слепо следуют, хотя, как будто они уже не имеют смысла.\nВечный спор Для затравки, «вечный спор» табы или пробелы использовать в коде для отсутпов. Лично для меня здесь не то что выбор очевиден, для меня очевидно, что и самого выбора то нет. Конечно же, только табы! Отступ пробелами просто не имеет права на жизнь, и вот почему:\nВо-первых, это просто какой-то костыль, использовать пробел не по назначению.\nНаверное, не очень очевидно, но назначение пробела — это именно разделение\nслов. Невероятно! А наначение таба — как раз таки форматирование отступа.\nДавайте использовать инструменты по назначению! Во-вторых, и самое главное, как по мне, это гибкость табуляции. Я, как\nчитающий код, волен сам выбирать размер отступа. Например, если у меня узкий\nэкран (смартфон, например) — я выберу отступ в 2 визуальных пробела.\nНаоборот, если бы у меня было слабое зрение — я бы выбрал отступ в бо́льшее\nчисло визуальных пробелов. В-третьих, исходя из предыдущего пункта, я считаю, что использование именно\nпробелов — это диктование автором исходника мне своей воли в виде своих\nпредпочтений (например, только 4 пробела, и никак иначе!). А какого чёрта? Это\nбуквально насилие! Зачем? Я считаю, это не допустимо. Пусть у каждого будет\nвозможность выбирать себе настройки отображения на своей машине под свои\nвкусы, а не вкусы автора! В-четвёртых, самое малозначительное — это то, что таб это 1 байт, а пробелов\nобычно больше чем 1 байт (от 2 до 8). Я считаю этот аргумент малозначительным,\nт.к. уж что что, а места на носителях информации нынче в достатке. Но тем не\nменее, это один из аргументов! А что по аргументам за пробелы? Да нет их. Ну окей, предположим, что есть. Во многих кодстайлах (PEP-8, PSR итп) закреплены именно пробелы. Я не понимаю, почему, вроде как, умные люди которые эти стандарты придумывали так сделали. Возможно, привычка. Но является ли привычка каких-то людей аргументом? Наверное, нет. И самое грустное, что эти стандарты уже не поменять, ибо с их использованием уже написаны мегатонны кодов.\nЕдинственное, меня радует, что хотя бы в стандарте форматирования моего любимого языка Go этой откровенной чуши нет. В Go отступы приняты табами и только ими.\nСразу скажу, я говорил только про отступы в начале строки, но не про отступы внутри строки, например, чтобы выстраивать значения подряд идущих констант в одну ровную колонку. Там, вроде как, пробелы вполне оправданы. Но это не точно. Я пока не решил для себя.\nДумаю, здесь насчёт табов и пробелов можно завершить. Если есть что накинуть — пишите письма, e-mail внизу страницы.\nВечный консенсус Про табы и пробелы была скорее затравочка. Там, как мне кажется, всё очевидно. Но есть менее очевидная, но как мне кажется очень родственная тема. Эта тема вызывает сильно меньше споров, т.к. вроде как в ней уже есть консенсус. Но этот консенсус ошибочен!\nА говорю я про форматирование длины строк! А именно, т.н. hard-wraps и soft-wraps. Если коротко, при hard-wraps в текст в точках переноса (например, на 80 или 120 колонке) вставляются символ переноса строк (\\n), при мягком переносе текст остается на одной строке, но выглядит так, как будто он разделен на несколько строк.\nА начну я с небольшой предыстории, как я к этому пришёл. Как я уже писал в начале, у меня есть постоянное шило в седалище, которое не даёт мне просто остановиться и использовать то, что работает, как минимум, в контексте этого блога. И из последнего куда я смотрел — протокол Gemini[1]. Разбирая его, меня сначала немного удивила его особенность, а именно:\n=\u0026gt; https://geminiprotocol.net/ [1]\nText in Gemtext documents is written using \u0026ldquo;long lines\u0026rdquo;, i.e. you (or your \u0026gt; editor) shouldn\u0026rsquo;t be inserting newline characters every 80 characters or so. \u0026gt; Instead, leave it up to the receiving Gemini client to wrap your lines to fit \u0026gt; the device\u0026rsquo;s screen size and the user\u0026rsquo;s preference. This way Gemtext content \u0026gt; looks good and is easy to read on desktop monitors, laptop screens, tablets \u0026gt; and smartphones.\nNote that while Gemini clients will break up lines of text which are longer \u0026gt; than the user\u0026rsquo;s screen, they will not join up lines which are shorter than the \u0026gt; user\u0026rsquo;s screen, like would happen in Markdown, HTML or LaTeX. This means that, \u0026gt; e.g. \u0026ldquo;dot point\u0026rdquo; lists or poems with deliberately short lines will be \u0026gt; displayed correctly without the author having to do any extra work or the \u0026gt; client having to be any smarter in order to recognise and handle that kind of \u0026gt; content correctly.\nСначала, я подумал, да это же нифига не удобно, что используются длинные строки, а не склеиваются разделённые одним переносом как в Markdown! Более того, это моё возмущение подогревалось тем, что я всё это время был сторонником как раз hard-wraps и форматировал что код, что markdown для блога по 80 или 120 колонке. Потому что так всегда и везде было принято. Но потом вчитавшись, я понял, что как раз таки «склеивание» Markdown это максимально неправильное поведение! Оно порождает такие минусы, как более сложный парсинг, который должен обрабатывать по разному один и два переноса строк, неочевидность, когда пишешь текст в редакторе, а отображается он совсем по другому, потенциальные ошибки, когда абзацы внезапно склеиваются, и т.п.\nПри этом, парсинг Gemtext поразительно простой. В общем случае, достаточно парсить по строке, и не думать о предыдущем состоянии (относится текущая строка к предыдущему параграфу или таки нет). Единственное исключение — преформатированный текст, при парсинге которого надо помнить состояние. Но и это очень просто, достаточно держать единственный флаг который говорит, мы сейчас в нормальном состоянии или в состоянии преформатированного текста. И переключать этот флаг когда очередная строка начинается с ```. Вообще, Gemtext кажется наиболее правильным и приятным для меня языком разметки. Наверное, я на него перейду. Но потом, сейчас нет времени.\nК чему я тут углубился в описание формата Gemtext? А вот к чему: только после прочтения спеки этого формата до меня сошло озарение, что использование длинных, а не обрезанных по 80 или 120 или ещё какую колонку более правильное не только для формата разметки, но и для обычного кода!\nИ вот аргументы:\nВо-первых, все редакторы кода поддерживают soft-wrap и каждый волен выставить\nдля своего личного редактора удобную ему длину строки, а не подчиняться\nпривычкам автора кода. Во-вторых, за длину в 80 символов топят в основном старпёры что-то там\nговорящие про терминалы шириной в 80 символов. Только и этот аргумент не\nпонятен. Когда вы в последнее время видели терминал в 80 символов? Не эмулятор\nтерминала, а именно сам терминал? Ну даже, хорошо, пусть будет этот терминал в\n80 символов. Но он что, не умеет переносить? Подозреваю, что может. И в чём\nтогда проблема? Непонятно. Короче, требование в 80 символов (ну или более\nсовременное в 120) выглядит как высосанное из пальца, потому что под ним нет\nреальной основы кроме каких-то там исторических причин на доисторическом\nжелезе. В-третьих, см. пункт про насилие автора кода над читателем кода. Например,\nопять таки, узкий монитор например. И на нём не soft-wrapped текст может\nвызывать горизонтальную прокрутку. И это убого. В-четвёртых, да, это усложняет парсинг. Это слабый аргумент, я знаю. Как\nпример, правильный парсер Markdown (не буду тут бомбить про количество разных\nстандартов Markdown) пишется не то чтобы очень просто. В это же время,\nнаписать парсер Gemtext который полностью покроет спецификацию — дело максимум\nчаса-двух для любого, кто программирует больше, хотя бы, нескольких месяцев! В общем, как и в случае с табо-пробелами я не вижу ни одной достойной причины делать жесткие переносы строк по какой-то длине!\nВозможно, я что-то упустил — тоже можно по этому поводу поспорить со мной в электропочте. Возможно, я даже поменяю мнение, но наврядли.\nUpdate 06.04.25 Как я и просил, один хороший человек, Владислав (https://t.me/c/1331521959/2285), написал ответ. Прокомментирую его здесь:\nМне есть что сказать про ширину таба и 80 символов.\nАргумент про разную ширину таба работает слабо: многие стили предполагают его \u0026gt; фиксированную длину. Если ставить другой, то форматирование ломается.\nПример: ядро Linux, где ширина таба 8, и аргументы функций \u0026ldquo;плывут\u0026rdquo; при другой \u0026gt; ширине.\nЯ не единожды видел этот аргумент, но он как раз и кажется мне слабым. Большая ли разница для читающего код, как именно он его видит:\n/ tabsize=2 func someFunc( one, two, three, ) ... callOfSomeFunc = someFunc( \u0026#34;one\u0026#34;, \u0026#34;two\u0026#34;, \u0026#34;three\u0026#34;, ) или так\n/ tabsize=4 func someFunc( one, two, three, ) ... callOfSomeFunc = someFunc( \u0026#34;one\u0026#34;, \u0026#34;two\u0026#34;, \u0026#34;three\u0026#34;, ) или даже так\n/ tabsize=8 func someFunc( one, two, three, ) ... callOfSomeFunc = someFunc( \u0026#34;one\u0026#34;, \u0026#34;two\u0026#34;, \u0026#34;three\u0026#34;, ) Кажется, что для 8 пробелов на таб всё сильно уезжает, но раз человек себе так настроил — то как будто его право и наверное были основания?\nПро 80 символов. Дело вообще не в размере терминала или ширине перфокарты. \u0026gt; Некоторые программисты разделяют редактор на две вкладки, чтобы смотреть два \u0026gt; файла.\nИ тогда soft-wrap как раз и вместит весь код в каждую из половинок без горизонтальной прокрутки, о чём я и говорю.\nНекоторые используют большой шрифт. С шириной в 120 символов мы лишаем из \u0026gt; возможности удобно читать код. К тому же, я считаю этот аргумент важным, 120 \u0026gt; символов - это способ замаскировать плохой код. Чувак сделал 5 уровней \u0026gt; вложенности в коде? Отлично! Главное чтобы в 120 символов влезло.\nВсё так! Возможно, я не очень подробно расписал, но основная моя мысль в том, что такое жесткое ограничение мне кажется просто надуманным и взятым с потолка. А если я после функции хочу написать небольшой коммент и он ну никак не влезает на пяток символов? Новую строку ради этого делать? Ну как-то бредово. А для указанного случая гораздо лучше бы звучало ограничение в стандарте типа «не используйте больше 3 уровней вложенности в коде». Это хотя бы имело вполне себе обоснование, то что скорее всего такой код просто архитектурно неверен и его стоит пересмотреть.\nКонечно, можно сказать что есть длинные константы или имена функций, но этот \u0026gt; спор становится менее однозначным. Как по мне вполне хороший консенсус - это \u0026gt; 100 символов в строке\nЗдесь не согласен. Здесь опять «магическая константа» с потолка.\nВ целом, эти срачи мне кажутся достаточно поверхностными. Они в своем корне \u0026gt; несут вопрос \u0026ldquo;как повысить читаемость кода?\u0026rdquo;, но акцентируются на мелочах.\nСогласен. Мелочи. Но почему и бы про мелочи не поговорить :) Из них по отдельности всё и строится (избитая фраза, да). В больших стандартах обычно говорится просто декларативно «только пробелы, отступ 4 пробела, длина строк 120» и всё. А зачем и почему — опускается, как будто всем всё и так понятно. Мне вот не очень. Чувствую себя ребёнком спрашивающим «Почему небо синее?». Потому что мне кажется, что под этим требованием нет объективного требования кроме «так принято». А «так принято» я часто и принимаю как валидный аргумент, например, когда прихожу в какой-то проект, но в сути своей аргументом не является.\nХотелось бы иметь какие-то объективные метрики, какая-то работа в этом \u0026gt; направлении была проделана, но, как я понял, это, во-первых, недостаточно \u0026gt; точные метрики, а во-вторых, недостаточно развитая история. \u0026gt; https://seeinglogic.com/posts/visual-readability-patterns/\nИнтересная статья, спасибо, с удовольствием прочитал. В целом, по выводам (https://seeinglogic.com/posts/visual-readability-patterns/#8-patterns-for-improving-code-readability) согласен. Метрика по Хольстеду (или как это перевести?) выглядит интересно, тем что она чётко считается (хотя когда я руками считал, что-то у меня не сошлось с примером :) ).\nИз объективных метрик, тут вскользь ещё упоминалась цикломатическая сложность, которая вполне себе имеет право на жизнь.\nА так же, только что пришло в голову что можно читабельность кода оценивать как вторую (?) производную от отступов по непустым строкам. При этом, чем эта производная ближе к нулю — тем лучше.\nТо есть, грубо говоря вот такой «код»:\n_____ ________ _____ _______ ___ ___ _____ __ ____ ___ Лучше чем, такой:\n_____ ________ _____ _______ ___ ___ _____ __ ____ ___ Это стоит ещё подумать, это буквально пришло в голову только что, пока читал статью.\nP.S.: Из забавного\nAs others have written, computers are fast and premature optimization is a bad \u0026gt; thing.\nСначала они пишут «computers are fast» а потом происходит такое: [2]\n=\u0026gt; https://tonsky.me/blog/disenchantment/ru/ [2]\nUpdate 06.04.25 - 2 Со вчерашнего дня я решил дополнить немного ещё.\nВо-первых, хочу немного снизить градус холиворности и радикальности. Ещё раз упомяну что не вижу проблем для выравнивания пробелами текста внутри строки. То есть например, вот так:\n→ → ConstWithLongName = 0 → → Const1 = 1 → → Const2 = 2 → → Const3 = 3 для меня вполне нормально кажется. Даже более того, табы внутри строки кажутся плохим решением. Я говорю только про отступы в начале строки.\nВо-вторых, насчёт длинных строк. Я расписал немного сумбурно и в одну кашу смешал как код, так и просто текст. Не стоило так. Хоть это и разные сущности, но я всё равно считаю жесткое ограничение необоснованным ни там ни там. Но по разным причинам:\nДля обычного текста ограничение в N символов выглядит таким же не обоснованым,\nкак, например, требование автора «Читайте мои тексты только шрифтом Arial\n12pt». Глупость? Глупость. Так же встречал, что люди используют это ограничение при написании электронных\nписем. Это выглядит как минимум странно. Письмо пишется для кого? Для\nполучателя, т.е. читателя. Почему отправитель за читателя решает то, как у\nнего будет отображаться письмо? Я часто читаю почту со смартфона с узким\nэкраном, но средним шрифтом (чтобы меньше напрягать глаза). И горизонтальная\nпрокрутка выглядит не очень. Горизонтальная прокрутка вообще почти всегда\nвыглядит не очень и её стоит избегать всеми силами. Для кода же история другая. Я не настолько поехал чтобы требовать всё писать в\nодну строку. Если у функции в сигнатуре много (больше одного - двух)\nаргументов — то это отличная идея написать их в столбик, а не в длинную линию,\nкоторая ещё неизвестно как перенесётся. Я против именно переноса только из-за\nмагической константы колиечества символов. Да и вообще я ни от кого ничего не требовал. Я предлагаю только задуматься, а обоснованны ли «общепринятые» вещи? Может, уже прошло какое-то время и ситуация поменялась и удобнее и эффективнее выбрать что-то другое?\nИ как будто стоит абстрактному «читателю», к которому я отсылал, в этом посте, решать этот вопрос техническими средствами, типа editorconfig + pre-commit хуки на форматирование в принятый в команде формат? Возможно да. Иначе получится, что борясь за личную свободу — нарушаешь чужую свободу писать говнокод.\nА .editorconfig я себе такой в home положил:\n[*] 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 Вроде как, покрывает основное.\n","permalink":"https://neonxp.ru/posts/2025-04-05-tabs-or-spaces/","summary":"\u003cp\u003eТак получилось, что с Нового Года я ничего в блог не писал. Тому причина в личной загруженности, и в не менее личной лени. Так же я делал некоторые эксперименты над самим блогом, потому что моё внутреннее чувство прекрасного не даёт мне просто остановиться и не трогать то, что работает.\u003c/p\u003e\n\u003cp\u003eНо всё же, я чувствую внутреннюю потребность написать небольшую заметку с размышлениями, которые недавно приходили ко мне в голову.\u003c/p\u003e\n\u003cp\u003eА связаны они с тем, что есть определённые догмы в индустрии, которые непонятно (ну или понятно) почему появились, и которым слепо следуют, хотя, как будто они уже не имеют смысла.\u003c/p\u003e","title":"Табы или пробелы?"},{"content":"Ну что же, друзья, с наступающим!\n2025 год\nВ этот день принято подводить итоги года. Ну и я подведу немного:\nПоступил в институт брака. Раз уж нет классического высшего, что ещё остаётся то ;) В аккурат под конец года разрешились проблемы на работе. Причем разрешились\nнастолько удачно, что я почти что жду окончания новогоднего отпуска, чтобы\nскорее начались трудовые будни. Стал активно вести блог. Но всё равно не оставляет подспудное ощущение, что\nуже стал надоедать этим тем, кто подписан. После каждого поста жду что кто-то\nда отпишется :) Но мне нравится его вести, так что, уже не остановлюсь :) Ездили с новоиспеченной супругой на Кавказ. Самое яркое — посетили\nобсерваторию в Нижнем Архызе. Под впечатлением, купили по приезду настоящий\nтелескоп! Начали строить свой домик в деревне. Но пока ещё до заселения далеко, вот\nтолько окна поставили. Под катом приложу фоточки наиболее ярких моментов, пожалуй.\n","permalink":"https://neonxp.ru/posts/2024-12-31-new-year/","summary":"\u003cp\u003eНу что же, друзья, с наступающим!\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"2025.webp\" loading=\"lazy\" src=\"/files/posts/files/2024-12-31-new-year/img/2025.webp\"\u003e\u003cbr\u003e\n2025 год\u003c/p\u003e\n\u003cp\u003eВ этот день принято подводить итоги года. Ну и я подведу немного:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eПоступил в институт брака. Раз уж нет классического высшего, что ещё остаётся то ;)\u003c/li\u003e\n\u003cli\u003eВ аккурат под конец года разрешились проблемы на работе. Причем разрешились\u003cbr\u003e\nнастолько удачно, что я почти что жду окончания новогоднего отпуска, чтобы\u003cbr\u003e\nскорее начались трудовые будни.\u003c/li\u003e\n\u003cli\u003eСтал активно вести блог. Но всё равно не оставляет подспудное ощущение, что\u003cbr\u003e\nуже стал надоедать этим тем, кто подписан. После каждого поста жду что кто-то\u003cbr\u003e\nда отпишется :) Но мне нравится его вести, так что, уже не остановлюсь :)\u003c/li\u003e\n\u003cli\u003eЕздили с новоиспеченной супругой на Кавказ. Самое яркое — посетили\u003cbr\u003e\nобсерваторию в Нижнем Архызе. Под впечатлением, купили по приезду настоящий\u003cbr\u003e\nтелескоп!\u003c/li\u003e\n\u003cli\u003eНачали строить свой домик в деревне. Но пока ещё до заселения далеко, вот\u003cbr\u003e\nтолько окна поставили.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eПод катом приложу фоточки наиболее ярких моментов, пожалуй.\u003c/p\u003e","title":"С Новым Годом!"},{"content":"Решил я перейти к использованию практики POSSE. Что это такое? Аббревиатура расшифровывается примерно следующими способами:\nP - Publish или Post, OS - Own Site, SE - Syndicate Elsewhere (мне больше нравится, Share Everywhere)\nPOSSE\nЭто практика, когда изначально любой материал публикуется на полностью подконтрольном собственном сайте, а только затем переразмещаяется на всякие социальные сети, типа ВК, Телеги и прочих Мастодонов.\nПочему это важно? Во-первых, платформы ненадежны. Любая платформа в любой момент может\nсделать что угодно с вашим контентом, или закрыться. Во-вторых, право собственности. Не секрет, что у платформ весьма вольное\nпредставление об авторском праве на материалы размещаемые пользователями. С\nодной стороны, у них неограниченное право распоряжения контентом для любых\nцелей, а с другой никакой ответственности за содержание контента. Не слишком\nли кучеряво? А следуя POSSE, я и все кто следуют POSSE — сохраняют\nпервоисточник под своим контролем, отдавая платформам лишь небольшой огрызок\nот контента. Да, у меня не больно какой-то великий контент, за который стоит\nтрястись, но я всё равно предпочту сохранить за собой все права на него. В-третьих, за пользователем остаётся право выбирать где ему удобнее\nследить за контентом. Либо на первоисточнике, с помощью божественного RSS (к\nчему я бы хотел призывать), либо на удобной платформе куда происходит\nсиндикация.1 В-четвёртых, \u0026hellip; А давайте, я не буду пересказывать вот эту статью2? 😉 В\nобщем, это правильная и нужная практика. Как минимум, на долгосрок. Платформы\nприходят и уходят, а файлы (в виде markdown моего блога) останутся на всегда. Что я сделал чтобы следовать POSSE? Ну для начала, у меня сильно чесались руки переделать дизайн блога. Вроде, получилось так, как я и хотел, в стиле сайтов начала-середины 2010х. Просто потому что могу, кто же мне тут что запретит 😉. Тем самым я улучшил UX блога, до хотя бы терпимого. Походу дела, при редизайне, я порасставил правильных тегов и микроформатов для правильной синдикации с другими платформами.\nДалее, я перепилил немного улучшил программку, которую написал уже достаточно давно, которая читает RSS моего блога и отправляет новые посты в Телеграм канал. Вот она, если что: https://gitrepo.ru/NeonXP/posse\nКстати, в очередной раз напоминаю о RSS ленте 3: блога. Эта лента — это самый правильный способ подписки на блог!\nТак же из этой ленты автоматически подтягиваются посты в VK группу. Это сделано встроенным механизмом VK, за что им определенно респект! Не часто можно встретить нечто подобное на закрытых платформах (помним, же как Google убивал RSS?)!\nТак же в ближайших планах и запилить WebMentions и прочие плюшки с ИндиВеба.\nНу пока, как то так ¯\\_(ツ)_/¯\nЕсть что сказать? Внизу есть форма для невозбранного комментирования.\nhttps://www.theverge.com/2023/10/23/23928550/posse-posting-activitypub-standard-twitter-tumblr-mastodon\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nhttps://indieweb.org/POSSE\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nhttps://neonxp.ru/feed/\u0026#160;\u0026#x21a9;\u0026#xfe0e;\n","permalink":"https://neonxp.ru/posts/2024-12-15-posse/","summary":"\u003cp\u003eРешил я перейти к использованию практики POSSE. Что это такое? Аббревиатура расшифровывается примерно следующими способами:\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eP\u003c/strong\u003e - Publish или Post, \u003cstrong\u003eOS\u003c/strong\u003e - Own Site, \u003cstrong\u003eSE\u003c/strong\u003e - Syndicate Elsewhere (мне больше нравится, Share Everywhere)\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"posse_posse.webp\" loading=\"lazy\" src=\"/files/posts/files/2024-12-15-posse/posse_posse.webp\"\u003e\u003cbr\u003e\nPOSSE\u003c/p\u003e\n\u003cp\u003eЭто практика, когда изначально любой материал публикуется на полностью подконтрольном собственном сайте, а только затем переразмещаяется на всякие социальные сети, типа ВК, Телеги и прочих Мастодонов.\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"почему-это-важно\"\u003eПочему это важно?\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eВо-первых, \u003cstrong\u003eплатформы ненадежны\u003c/strong\u003e. Любая платформа в любой момент может\u003cbr\u003e\nсделать что угодно с вашим контентом, или закрыться.\u003c/li\u003e\n\u003cli\u003eВо-вторых, \u003cstrong\u003eправо собственности\u003c/strong\u003e. Не секрет, что у платформ весьма вольное\u003cbr\u003e\nпредставление об авторском праве на материалы размещаемые пользователями. С\u003cbr\u003e\nодной стороны, у них неограниченное право распоряжения контентом для любых\u003cbr\u003e\nцелей, а с другой никакой ответственности за содержание контента. Не слишком\u003cbr\u003e\nли кучеряво? А следуя POSSE, я и все кто следуют POSSE — сохраняют\u003cbr\u003e\nпервоисточник под своим контролем, отдавая платформам лишь небольшой огрызок\u003cbr\u003e\nот контента. Да, у меня не больно какой-то великий контент, за который стоит\u003cbr\u003e\nтрястись, но я всё равно предпочту сохранить за собой все права на него.\u003c/li\u003e\n\u003cli\u003eВ-третьих, \u003cstrong\u003eза пользователем остаётся право\u003c/strong\u003e выбирать где ему удобнее\u003cbr\u003e\nследить за контентом. Либо на первоисточнике, с помощью божественного RSS (к\u003cbr\u003e\nчему я бы хотел призывать), либо на удобной платформе куда происходит\u003cbr\u003e\nсиндикация.\u003csup id=\"fnref:1\"\u003e\u003ca href=\"#fn:1\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e1\u003c/a\u003e\u003c/sup\u003e\u003c/li\u003e\n\u003cli\u003eВ-четвёртых, \u0026hellip; А давайте, я не буду пересказывать вот эту статью\u003csup id=\"fnref:2\"\u003e\u003ca href=\"#fn:2\" class=\"footnote-ref\" role=\"doc-noteref\"\u003e2\u003c/a\u003e\u003c/sup\u003e? 😉 В\u003cbr\u003e\nобщем, это правильная и нужная практика. Как минимум, на долгосрок. Платформы\u003cbr\u003e\nприходят и уходят, а файлы (в виде markdown моего блога) останутся на всегда.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"что-я-сделал-чтобы-следовать-posse\"\u003eЧто я сделал чтобы следовать POSSE?\u003c/h2\u003e\n\u003cp\u003eНу для начала, у меня сильно чесались руки переделать дизайн блога. Вроде, получилось так, как я и хотел, в стиле сайтов начала-середины 2010х. Просто потому что могу, кто же мне тут что запретит 😉. Тем самым я улучшил UX блога, до хотя бы терпимого. Походу дела, при редизайне, я порасставил правильных тегов и микроформатов для правильной синдикации с другими платформами.\u003c/p\u003e","title":"POSSE"},{"content":"Хотите немного наркомании сахара для Go?\nТернарник в Go\nИх есть у меня:\nТернарный оператор для Go на генериках\nfunc If[T any](condition bool, thn T, els T) T { if condition { return thn } return els } Плейграунд чтобы потыкать\nБудет настроение — добавлю в свою либку https://neonxp.ru/go/extra , а пока, как-то так держите.\nНе стоит использовать в реальном коде. Я лично не вижу никакого оправдания для использования, кроме как покекать.\n","permalink":"https://neonxp.ru/posts/2024-12-15-conditional-operator-go/","summary":"\u003cp\u003eХотите немного \u003cdel\u003eнаркомании\u003c/del\u003e сахара для Go?\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"conditional-operator-go_ternary.webp\" loading=\"lazy\" src=\"/files/posts/files/2024-12-15-conditional-operator-go/conditional-operator-go_ternary.webp\"\u003e\u003cbr\u003e\nТернарник в Go\u003c/p\u003e\n\u003cp\u003eИх есть у меня:\u003c/p\u003e\n\u003cp\u003eТернарный оператор для Go на генериках\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode class=\"language-go\" data-lang=\"go\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003efunc\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003eIf\u003c/span\u003e[\u003cspan style=\"color:#a6e22e\"\u003eT\u003c/span\u003e \u003cspan style=\"color:#66d9ef\"\u003eany\u003c/span\u003e](\u003cspan style=\"color:#a6e22e\"\u003econdition\u003c/span\u003e \u003cspan style=\"color:#66d9ef\"\u003ebool\u003c/span\u003e, \u003cspan style=\"color:#a6e22e\"\u003ethn\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003eT\u003c/span\u003e, \u003cspan style=\"color:#a6e22e\"\u003eels\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003eT\u003c/span\u003e) \u003cspan style=\"color:#a6e22e\"\u003eT\u003c/span\u003e {\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\t\u003cspan style=\"color:#66d9ef\"\u003eif\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003econdition\u003c/span\u003e {\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\t\t\u003cspan style=\"color:#66d9ef\"\u003ereturn\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003ethn\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\t}\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\t\u003cspan style=\"color:#66d9ef\"\u003ereturn\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003eels\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e}\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e\u003ca href=\"https://go.dev/play/p/sBDnPGHce8I\"\u003eПлейграунд чтобы потыкать\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eБудет настроение — добавлю в свою либку \u003ca href=\"https://neonxp.ru/go/extra\"\u003ehttps://neonxp.ru/go/extra\u003c/a\u003e , а пока, как-то так держите.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eНе стоит\u003c/strong\u003e использовать в реальном коде. Я лично не вижу никакого оправдания для использования, кроме как покекать.\u003c/p\u003e","title":"Тернарник в Go"},{"content":"На недавних выходных я запилил очередной «проект выходного дня». На этот раз — аналог известного сервиса GeoGuessr, но в отличие от него, все точки сконцентрированы в моей родной Казани. Ну и я не использую панорамы, а фотографии мест.\nGuessr\nЯ обещал выложить исходники, и в общем, вот они: https://git.neonxp.ru/guessr.git/\nНемного про разработку Первым встал вопрос, откуда брать данные, а именно фотографии и координаты точек. Пару лет назад нашу страну покинул такой проект, как Ingress, представлявший собой гео игру в дополненной реальности. В свою очередь, я посчитал, что раз проект решил отказаться от нас, как игроков, я посчитал морально оправданным спизэкспропреировать кусочек их данных, а именно спарсил с их карты intel.ingress.com т.н. «порталы», которые, по сути и есть эти самые геоточки с фотографиями.\nДамп я загнал в Postgresql с подключенным расширением Postgis.\nНу а далее написал достаточно простой API на Golang, который реализует следующие методы:\nСоздание новой игровой сессии, в ответ ставится кука внутри которой\nзашифровано текущее состояние — ник, количество очков, ID текущего\nугадываемого объекта (в начале пустое).\nPOST /api/state Content-Type: application/json { \u0026#34;username\u0026#34;: \u0026#34;NeonXP\u0026#34; } ``` Получение состояния. Просто возвращает вышеуказанные параметры\nGET /api/state Выдача нового объекта для угадывания. При этом возвращается ссылка на фото и\nобновляется состояние, тем что в него вписывается ID объекта\nPOST /api/next Угадывание. Собственно, на вход передаются координаты куда на карте указал\nигрок. А в ответ возвращается:\nНазвание объекта Расстояние от переданной точки до реального размещения объекта Geojson строка в которой зашифрована линия соединяющая точку и объект (нужна\nдля отрисовки красной линии на карте) При этом высчитываются очки которые получает игрок за попытку по формуле max(1000-d, 0), где d - расстояние между выбранной точкой и объектом в метрах. То есть, если разница меньше 1000м, то чем ближе - тем больше очков (максимум 1000 очков за 1 очень точное угадывание).\nPOST /api/guess Content-Type: application/json { \u0026#34;lat\u0026#34;: 55.123, \u0026#34;lon\u0026#34;: 49.123 } ``` Вот в общем-то и всё API!\nИз интересностей, при выборе очередной точки у неё в БД увеличивается счетчик, а сам select выбирает случайную точку только среди тех точек, где этот счетчик минимальный. То есть, пока не будут выданы игрокам все точки, уже выбранные заново не будут выданы. Вот это место в коде: https://git.neonxp.ru/guessr.git/tree/pkg/service/places.go#n26 (стр. 26-32)\nerr = btx.NewSelect(). ColumnExpr(`p.guid, p.img`). Model(r). Where(`p.count = (SELECT MIN(pl.count) FROM places pl WHERE pl.deleted_at IS NULL)`). OrderExpr(`RANDOM()`). Limit(1). Scan(ctx, r) Ещё я бы отметил то, что я решил по максимуму логику вынести в БД, и, например, при угадывании расстояние до точки, а также вышеупомянутый geojson формируются так же на стороне БД: https://git.neonxp.ru/guessr.git/tree/pkg/service/places.go#n50 (стр. 50-59)\nerr := p.db.NewSelect(). Model(\u0026amp;model.Place{GUID: guid}). WherePK(\u0026#34;guid\u0026#34;). ColumnExpr(`p.name, p.guid, p.img, ST_Distance(ST_MakePoint(?, ?)::geography, p.position::geography)::int AS distance, ST_AsGeoJSON(ST_MakeLine( ST_SetSRID(ST_MakePoint(?, ?), 4326), ST_SetSRID(p.position, 4326) )) AS geojson`, lon, lat, lon, lat). Scan(ctx, r) Дальнейшие планы В комментах к анонсу ребята накидали достаточно много хороших идей, синтезировав которые, и добавив свои хотелки я составил примерно такой чеклист:\n[ ] Авторизация и общая доска лидерства [ ] После угадывания спрашивать у игрока «сложность», чтобы потом можно было,\nнапример, настраивать чтобы попадались только простые объекты. И, например,\nразное количество очков за простые и сложные объекты [ ] Подумать как вынести игру в оффлайн, по типу того же ингресса. Это сложно\nи предстоит хорошо это обдумать Как-то так :) А впереди новые выходные и новые «проекты выходного дня»!\n","permalink":"https://neonxp.ru/posts/2024-12-12-guessr/","summary":"\u003cp\u003eНа недавних выходных я запилил очередной «проект выходного дня». На этот раз — аналог известного сервиса GeoGuessr, но в отличие от него, все точки сконцентрированы в моей родной Казани. Ну и я не использую панорамы, а фотографии мест.\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"guessr_logo.webp\" loading=\"lazy\" src=\"/files/posts/files/2024-12-12-guessr/guessr_logo.webp\"\u003e\u003cbr\u003e\nGuessr\u003c/p\u003e\n\u003cp\u003eЯ обещал выложить исходники, и в общем, вот они: \u003ca href=\"https://git.neonxp.ru/guessr.git/\"\u003ehttps://git.neonxp.ru/guessr.git/\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"немного-про-разработку\"\u003eНемного про разработку\u003c/h2\u003e\n\u003cp\u003eПервым встал вопрос, откуда брать данные, а именно фотографии и координаты точек. Пару лет назад нашу страну покинул такой проект, как Ingress, представлявший собой гео игру в дополненной реальности. В свою очередь, я посчитал, что раз проект решил отказаться от нас, как игроков, я посчитал морально оправданным \u003cdel\u003eспиз\u003c/del\u003eэкспропреировать кусочек их данных, а именно спарсил с их карты intel.ingress.com т.н. «порталы», которые, по сути и есть эти самые геоточки с фотографиями.\u003c/p\u003e","title":"Guessr"},{"content":"На днях задался вопросом вынесенным в заголовок. Причём не столько над эволюцией, сколько о том, откуда они взялись.\nОткуда берутся увлечения?\nРаньше я часто играл в ночные полевые игры, такие как «Дозоры» и «Энкаунтеры». Они были мне очень интересны и играли важную роль в моей жизни. Даже, я бы сказал, во взрослении, так как пришлись на возраст 19–25 лет.\nСейчас давно уже не играю, но многие мои нынешние увлечения берут начало именно оттуда. Например, самый очевидный пример — интерес к картографии и ГИСам (геоинформационным системам), поскольку для «Дозоров» они были неотъемлемой частью. Также сюда относится и то, что я хорошо ориентируюсь в своем городе и немного интересуюсь его историей.\nКроме того, можно проследить интерес к радиоэлектронике: пару раз, когда с командой организовывали игры, я придумывал задания, основанные на простых электронных устройствах, собранных на микроконтроллерах.\nТуда же и любовь к исключительно ноутбукам, да и вообще переносной, что важно, технике. Теплое отношение к простым, надёжным, нетребовательным технологиям. Это всё оттуда же!\nЛюбовь к программированию у меня возникла чуть раньше, поэтому её связать с этими играми я не могу. Здесь, скорее случилось наоборот. И я не менее трех раз даже порывался писать собственный «движок» для НПИ. Но, пока ни разу не успешно. Вероятно, меня здесь привлекает процесс, а не результат. Так что, последний мой заход хоть и является вполне себе функционально законченным, но для его развития времени я не выкраиваю, к сожалению.\nЧто-то еще было, но я не успел записать, и теперь забыл. Вывод: не стоит давать остывать размышлениям дольше суток, а писать сразу 🙂\n","permalink":"https://neonxp.ru/posts/2024-11-29-hobbies/","summary":"\u003cp\u003eНа днях задался вопросом вынесенным в заголовок. Причём не столько над эволюцией, сколько о том, откуда они взялись.\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"hobbies_dozor.webp\" loading=\"lazy\" src=\"/files/posts/files/2024-11-29-hobbies/hobbies_dozor.webp\"\u003e\u003cbr\u003e\nОткуда берутся увлечения?\u003c/p\u003e\n\u003cp\u003eРаньше я часто играл в ночные полевые игры, такие как «Дозоры» и «Энкаунтеры». Они были мне очень интересны и играли важную роль в моей жизни. Даже, я бы сказал, во взрослении, так как пришлись на возраст 19–25 лет.\u003c/p\u003e\n\u003chr\u003e\n\u003cp\u003eСейчас давно уже не играю, но многие мои нынешние увлечения берут начало именно оттуда. Например, самый очевидный пример — интерес к картографии и ГИСам (геоинформационным системам), поскольку для «Дозоров» они были неотъемлемой частью. Также сюда относится и то, что я хорошо ориентируюсь в своем городе и немного интересуюсь его историей.\u003c/p\u003e","title":"Откуда берутся увлечения?"},{"content":"Это очередной пост моих пространных рассуждений про тенденции и будущее интернета, которых в последнее время становится как-то многовато. Вероятно, в последствии, это станет даже серией постов.\nЭтот же я воспринимаю, как вводный в лор гиперлокальности.\nСначала, пожалуй, расскажу про посылки, а потом уже о том, куда они ведут, и какие из этого можно сделать выводы.\nПосылка Думаю, все мы заметили как много вокруг стало ИИ инструментов. Сейчас ИИ на хайпе и его засовывают буквально куда можно и куда нельзя. Само по себе меня это не беспокоит. Я отношусь к ИИ как к просто очередному инструменту, который можно и нужно использовать там, где он применим. С этим нет проблем. Пройдёт какое-то время и ИИ инструменты займут ниши, где они наиболее уместны и где от них наибольшая польза. Однако тут есть и негативный нюанс. Этот инструмент будет способствовать в том числе и тому, что интернет станет (если ещё не стал!) по сути своей «мёртвым». Не мёртвым буквально, а «мёртвым» в том же смысле, в котором в «Руководстве путешествующего автостопом по галактики» Д. Адамса была вселенная обозначена необитаемой.\nВселенная — кое-какая информация, облегчающая существование в ней. \u0026gt; \u0026gt; \u0026lt;\u0026hellip;\u0026gt; \u0026gt; \u0026gt; 4. Население: Отсутствует. Известно, что существует бесконечное множество \u0026gt; планет. Это объясняется той простой причиной, что пространство, в котором они \u0026gt; могут существовать, также бесконечно. Однако не всякая из этих планет \u0026gt; обитаема. Отсюда следует, что число обитаемых планет конечно. Частное от \u0026gt; деления любого конечного числа на бесконечность стремится к нулю и не дает \u0026gt; остатка, следовательно, можно заключить, что средняя численность населения \u0026gt; планет Вселенной равна нулю. Отсюда следует, что численность населения во всей \u0026gt; Вселенной также равна нулю, и потому все люди, которые порой попадаются на \u0026gt; вашем пути, являются продуктом вашего воспаленного воображения. \u0026gt; \u0026gt; Д. Адамс — Ресторан «У края Вселенной», 19 глава\nСледствие Количество сгенерированного ИИ контента, ИИ ботов пишущих комментарии и иным способом имитирующих людей будет расти нелинейно. Таким образом будет «размываться» весьма конечное количиство «живых» пользователей «неживыми» до того, что все эти миллиарды «живых» пользователей будут лишь статистической погрешностью относительно «неживых» ИИ ботов.\nКак это повлияет на наше восприятие реальности? Представьте себе мир, где большинство сообщений, комментариев и публикаций создаются ИИ. Мы будем жить в мире, где трудно отличить реальность от иллюзии. Где каждый день нам придётся задаваться вопросом: кто написал этот комментарий – реальный человек или искусственный интеллект? Это приведёт к тому, что доверие к информации в интернете начнёт стремительно падать. Люди станут всё больше сомневаться в подлинности того, что видят и читают. В итоге, интернет превратится в огромное море данных, где настоящие голоса людей тонут в океане фальшивок и симуляций.\nКиберпанк который мы заслужили\nГиперлокальность Уже сейчас вполне себе просматиривается контур того, что я, за неимением лучшего термина, называю «Гиперлокальностью». Термин мне нравится тем что он, с одной стороны, хорошо описывает то, куда, по моему мнению, мы придём, а с другой стороны, названием отсылает к «гипертексту».\nЧто я под этим подразумеваю? Помните старые времена, когда интернет только-только появлялся и из каждого утюга звучало как одно из его преимуществ, то, что «вы сможете находить себе собеседников и друзьей в любой точке мира, не выходя из дома». Звучало многообещающе, и в каком-то смысле, оно так и было.\nНаивное представление из 90х о том, что интернет будет нас соединять\nНо что происходит сейчас? Интернет, вместо того чтобы соединять людей по всему миру, начинает дробиться на маленькие замкнутые круги. Почему так происходит? Ответ кроется в недоверии. Когда невозможно понять, кто перед тобой – настоящий человек или ИИ-бот, люди начинают замыкаться в узких кругах тех, кому они доверяют.\nИнтернет, он не сближает. Это скопление одиночества. Мы вроде вместе, но \u0026gt; каждый один. Иллюзия общения, иллюзия дружбы, иллюзия жизни… \u0026gt; \u0026gt; Януш Леон Вишневский — Одиночество в Сети\nЭти круги становятся всё меньше и меньше, пока не превращаются в замкнутые сообщества, где общение ограничено только теми, кого знаешь лично. Таким образом, получается некая WebOfTrust, но только по валидации «человечности». Это напоминает модель «доверительных сетей», которая существовала задолго до появления интернета, но теперь она приобретает новый смысл в цифровую эпоху.\nА личные знакомства они, как правило, достаточно локальные. А следовательно, в ближайшее время мы увидим расцвет изолированных «анклавов» из лично знакомых между собой людей, который и будут существовать своими маленькими, гиперлокальными сообществами. Размер при этом может быть почти любой, как группка из трёх друзей, так и небольшой клуб из пары десятков лично знакомых единомышленников.\nПричём, примеры гиперлокальных сообществ уже сейчас есть и в большом количестве. Например, у меня с друзьями уже почти 10 лет есть свой маленький чатик на шесть голов. И, в принципе, этого круга общения мне вполне хватает. И в своём кругу мы, конечно же, уверенны в «человечности» каждого из нас, ибо знакомы и ИРЛ.\nПричём, «достаточность» этого кружка для меня такая, что если у меня, вдруг, магическим образом, останется только этот чатик, мой NAS в который загруженно примерно 50К книг и несколько любимых сериалов, и, конечно, VPN до работы, чтобы я мог зарабатывать на жизнь — то, это и будет вся моя гиперлокальная сеть. И как будто, не сильно то я и потеряю если останется только это, ну или как минимум, уж точно выживу. Если что, это именно магически и гипотетически, но тем не менее.\nТак же, подобные кружки, я видел и, например, у своих старших родственников. Они, в основном, устраивают гиперлокальные «кружки» в том же вотсаппе. Там они делятся рекомендациями фильмов, рецептами, шутками, новостями и прочим подобным.\nА к чему я это всё? Да к тому что на текущем этапе развития интернета, мы всё больше уходим от глобальной сети к гиперлокальной. И, наверное, мне это даже вполне нравится. Это как-то\u0026hellip; уютно чтоли.\nПримерно так я визуализирую гиперлокальное сообщество\nПерспективы Дисклеймер. Дальше идут мои размышления, которые основываются в основном на интуитивных, а не объективных предположениях\nС развитием этого тренда будут всё больше и больше отмирать крупные социальные сети типа ВК или РКНбука. История сделает виток и восскресит т.н. локалки, которые были популярны в 90е-00е. Конечно же, уже в другом облике. Никто не будет лазать по чердакам чтобы протянуть витуху между соседями, но именно суть останется. А суть в том, что будет бо́льшая концентрация на небольшом числе условно локальных ресурсов, где человек будет только со своими друзьями, а «большой» интернет отходит на второй план.\nТак же могут получить развитие indieweb технологии, а так же self-hosted решения для общения, например, Matrix. Эти инструменты потребуются как ответ на заполненные ботами и спамом соцсети и мессенджеры. Конечно же, всё что нужно не затащить в свою уютненькую локалочку, но вылазка за недостающей инфой в интернет будет ощущаться, как выход из своей зоны комфорта в дикую и опасную пустошь.\nВылазка в «большой» интернет\nОкончание? Я отдаю себе отчёт что то, что я написал выше — весьма сумбурно. Но это следствие того, что я ещё не до конца исследовал эту тему, и многие мысли на эту тему в моей голове пока ещё не сформированы в слова, а остаются на интуитивном уровне.\nА написал я это, скорее как повод начать дискуссию на эту тему. Мне интересно, что вы думаете по этой теме. Возможно, мнение со стороны меня наведёт на еще какие мысли.\nВ дальнейшем у меня уже есть некоторые мысли на развитие темы, но уже в каких то отдельных аспектах.\nОстаёмся на связи, 73!\n","permalink":"https://neonxp.ru/posts/2024-11-27-hyperlocality/","summary":"\u003cp\u003eЭто очередной пост моих пространных рассуждений про тенденции и будущее интернета, которых в последнее время становится как-то многовато. Вероятно, в последствии, это станет даже серией постов.\u003c/p\u003e\n\u003cp\u003eЭтот же я воспринимаю, как вводный в лор гиперлокальности.\u003c/p\u003e\n\u003cp\u003eСначала, пожалуй, расскажу про посылки, а потом уже о том, куда они ведут, и какие из этого можно сделать выводы.\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"посылка\"\u003eПосылка\u003c/h2\u003e\n\u003cp\u003eДумаю, все мы заметили как много вокруг стало ИИ инструментов. Сейчас ИИ на хайпе и его засовывают буквально куда можно и куда нельзя. Само по себе меня это не беспокоит. Я отношусь к ИИ как к просто очередному инструменту, который можно и нужно использовать там, где он применим. С этим нет проблем. Пройдёт какое-то время и ИИ инструменты займут ниши, где они наиболее уместны и где от них наибольшая польза. Однако тут есть и негативный нюанс. Этот инструмент будет способствовать в том числе и тому, что интернет станет (если ещё не стал!) по сути своей «мёртвым». Не мёртвым буквально, а «мёртвым» в том же смысле, в котором в «Руководстве путешествующего автостопом по галактики» Д. Адамса была вселенная обозначена необитаемой.\u003c/p\u003e","title":"Гиперлокальность"},{"content":"Некоторое время назад я писал про заметочник Joplin.\nС тех пор мои вкусы несколько поменялись и я открыл для себя его величество Obsidian.\nВ целом он такой же заметочник, с ± тем же функционалом, но имеет для меня одну особенность, которая буквально переворачивает всё. Это мощнейшая система плагинов. Серьёзно, я нашел плагины которые покрывают для меня всё, кроме одного (но об этом позже).\nЧто такое Obisidian? Obsidian представляет собой приложение для ведения персональных баз данных, основанное на принципах локальных файлов Markdown. Это значит, что ваши данные хранятся в виде обычных текстовых файлов, что обеспечивает максимальную гибкость и независимость от облачных сервисов.\nПриложение работает на операционных системах: Windows, macOS, Linux, iOS, Android.\nОсновные функции и преимущества Граф связей — да, он есть уже много где, но нельзя его не упомянуть. Markdown — очень приятно, что все заметки хранятся в Markdown, что\nобеспечивает максимальную интероперабельность и переносимость Плагины — плагины пишутся на JS/TS и их много. Даже не так, их МНОГО.\nЧто приятно, они скачиваются и лежат в той же директории что и основное\nхранилище, а это важно для следующего пункта Синхронизация — она есть. Но вроде как платная. Но мне это и не\nинтересно, я использую Syncthing. Просто шарю через него директорию\nхранилища по схеме оба ноутбука \u0026lt;-\u0026gt; NAS \u0026lt;-\u0026gt; Android. При этом синкаются все\nплагины и настройки. Скорость — не смотря на то, что он написан на проклятом электроне,\nработает достаточно шустро, претензий нет. Доска для рисования — мелочь, конечно, но удобно, когда надо на скорую\nруку накидать небольшую схемку. В конце этого поста как раз есть пример\nтакой схемки. Минусы Проприетарность — Obsidian хоть и в целом бесплатный, но он не свободный\nи даже не opensource. Да, это серьёзный минус, но он компенсируется тем, что\nхотябы вся база данных не в проприетарном формате. И в случае чего можно\nбудет с наименьшими проблемами свалить куда-нибудь. Electron — ну это скорей мой личный пунктик. Но при этом приходиться\nсмиряться с электроном что на Obsidian что на VSCode (VSCodium, конечно же),\nпотому что лучше-то и нет. Это только то, что сейчас пришло в голову.\nА теперь самое вкусное Не помню, я упоминал что у него много плагинов? :)\nТак вот, поехали, мои самые любимые:\nDataview https://blacksmithgu.github.io/obsidian-dataview/\nНу это просто must-have плагин, который позволяет обращаться с вашими заметками именно как с базой данных, не меньше.\nНапример, можно создать новый документ, написать в него\n```dataview TASK WHERE status = \u0026#34; \u0026#34; ``` и волшебным образом вместо этого блока появятся все невыполненные задачи, а вот так\n```dataview TASK WHERE status = \u0026#34;x\u0026#34; ``` мы получим все выполненные.\nЯзык запросов очень мощный[^1], в нём сто́ит разобраться. [^1]:https://blacksmithgu.github.io/obsidian-dataview/queries/structure/\nЕщё есть возможность делать однострочные запросы, например, в домашней заметке (которая у меня открывается по умолчанию) у меня есть ссылка на именно сегодняшнюю заметку ежедневного журнала. Сделано вот так:\n`=link(dateformat(date(today), \u0026#34;yyyy.MM.dd\u0026#34;))` Templater https://silentvoid13.github.io/Templater/\nЭтот плагин позволяет мне задать некоторым директориям умолчальный шаблон. Например, вот такой у меня шаблон для ежедневных журналов:\n\u0026lt;%* try { / Получаем имя текущей ежедневной заметки const noteName = tp.file.title; / Разбиваем полученное имя на компоненты даты const [year, month, day] = noteName.split(\u0026#39;.\u0026#39;).map(Number); / Создаём объект Date на основе поученных компонентов const currentNoteDate = new Date(year, month - 1, day); / Вычисляем предыдущий и следующий день let previousDayDate = new Date(currentNoteDate.setDate(currentNoteDate.getDate() - 1)); let nextDayDate = new Date(currentNoteDate.setDate(currentNoteDate.getDate() + 2)); / Форматируем дату обратно в \u0026#34;DD-MM-YYYY\u0026#34; const formatDate = (date) =\u0026gt; { const dd = String(date.getDate()).padStart(2, \u0026#39;0\u0026#39;); const mm = String(date.getMonth() + 1).padStart(2, \u0026#39;0\u0026#39;); const yyyy = date.getFullYear(); return `${yyyy}.${mm}.${dd}`; }; const previousDay = formatDate(previousDayDate); const nextDay = formatDate(nextDayDate); / Формируем ссылки const baseFolder = tp.file.folder(true); const previousNotePath = `${baseFolder}/${previousDay}.md`; const nextNotePath = `${baseFolder}/${nextDay}.md`; / Выводим даты в виде ссылок tR += `← [[${previousNotePath}|${previousDay}]] | [[${nextNotePath}|${nextDay}]] →`; } catch (error) { console.error(\u0026#34;Templater Error:\u0026#34;, error); } %\u0026gt; ## Задачи ___ \u0026lt;% `- [ ]` %\u0026gt; ## Заметки ___ и переходя к сегодняшней заметке я сразу получаю такую заготовку:\nЗаметка из шаблона\nОстальные плагины Остальные тоже крутые, но я их приведу просто списком:\ntasks — помогает более\nбогато управлять задачами. В частности, у меня проставляет дату завершения\nзадачи, и проставляет даты дедлайна и прочее. reminder — трекает и напоминает\nпро задачи calendar — просто\nминикалендарь в боковой панели homepage — позволяет задать\nпроизвольную заметку \u0026ldquo;домашней\u0026rdquo; icon-folder — позволяет\nзадавать директориям и заметкам произвольные иконки. Пример есть как раз на\nскриншоте выше. pomodoro-timer — думаю,\nиз названия и так понятно kanban — шикарнейший канбан плагин А что же мне не хватает? Я упомянул выше что мне кое чего не хватает. А именно, постить заметку в мой блог по протоколу Micropub.\nТолько из-за Obsidian и того, что он использует Markdown я опять вернулся на Hugo, который так же рендерится из Markdown.\n«Но Hugo это же генератор статичных сайтов, куда ты ему будешь отправлять заметку для публикации?» — можешь спросить меня ты. А я отвечу что у меня вот такой план:\ngraph TB b1[\u0026#34;Заметка в Obsidian\u0026#34;] b2[\u0026#34;Плагин obsidian-micropub\u0026#34;] b3[\u0026#34;micropub сервер на моем сервере\u0026#34;] b4[\u0026#34;вызов hugo\u0026#34;] b5[\u0026#34;Загрузка или копирование результата на веб сервер\u0026#34;] b1 --\u0026gt; |Publish в контекстном меню| b2 b2 --\u0026gt; |POST neonxp.ru/micropub| b3 b3 --\u0026gt; |Запись в директорию content блога| b4 b4 --\u0026gt; |hugo рендерит markdown -\u0026gt; html| b5 style b1 fill:#28252e, stroke:#754fcc style b2 fill:#2e2121, stroke:#c81319 style b3 fill:#2e2121, stroke:#c81319 style b4 fill:#222c2c, stroke:#20acaa style b5 fill:#222c2c, stroke:#20acaa Mermaid graph TB b1[\u0026#34;Заметка в Obsidian\u0026#34;] b2[\u0026#34;Плагин obsidian-micropub\u0026#34;] b3[\u0026#34;micropub сервер на моем сервере\u0026#34;] b4[\u0026#34;вызов hugo\u0026#34;] b5[\u0026#34;Загрузка или копирование результата на веб сервер\u0026#34;] b1 --\u0026gt; |Publish в контекстном меню| b2 b2 --\u0026gt; |POST neonxp.ru/micropub| b3 b3 --\u0026gt; |Запись в директорию content блога| b4 b4 --\u0026gt; |hugo рендерит markdown -\u0026gt; html| b5 style b1 fill:#28252e, stroke:#754fcc style b2 fill:#2e2121, stroke:#c81319 style b3 fill:#2e2121, stroke:#c81319 style b4 fill:#222c2c, stroke:#20acaa style b5 fill:#222c2c, stroke:#20acaa То что выделено красным — ещё не существует в природе.\nmicropub сервер для hugo я уже начал писать. Да, есть nanopub сервер, но у него есть два серьёзных недостатка, это PHP и то что его сделал не я.\nmicropub плагин для obsidian я вижу сделать на основе существующего плагина rest-publish. Ну или как пойдёт.\nВ общем, меня ждёт ещё очень много весёлого дрочева с этим всем.\nЗакругляюсь Пожалуй, пока на этом всё. Поделился как радостью использования Obsidian, так и планами на пет-проекты, что ещё надо-то?\nЕсли что, пишите комментарии. Лучше всего здесь, но можно и во всяких телеграмах-вкшках.\n","permalink":"https://neonxp.ru/posts/2024-11-17-obsidian/","summary":"\u003cp\u003eНекоторое время назад я \u003ca href=\"joplin\"\u003eписал\u003c/a\u003e про заметочник Joplin.\u003c/p\u003e\n\u003cp\u003eС тех пор мои вкусы несколько поменялись и я открыл для себя его величество \u003ca href=\"https://obsidian.md/\"\u003eObsidian\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eВ целом он такой же заметочник, с ± тем же функционалом, но имеет для меня одну особенность, которая буквально переворачивает всё. Это мощнейшая система плагинов. Серьёзно, я нашел плагины которые покрывают для меня всё, кроме одного (но об этом позже).\u003c/p\u003e\n\u003ch2 id=\"что-такое-obisidian\"\u003eЧто такое Obisidian?\u003c/h2\u003e\n\u003cp\u003eObsidian представляет собой приложение для ведения персональных баз данных, основанное на принципах локальных файлов Markdown. Это значит, что ваши данные хранятся в виде обычных текстовых файлов, что обеспечивает максимальную гибкость и независимость от облачных сервисов.\u003c/p\u003e","title":"Obsidian"},{"content":"Так, ну я вернулся на hugo :D\nОсновная причина — я нашел решение основной моей проблемы с Hugo, а именно, удобной публикации.\nА как именно решил — тема отдельного поста на потом.\nНу и тему наконец-то сделал сам с нуля. Как говорится, хочешь сделать хорошо — сделай это сам.\n","permalink":"https://neonxp.ru/posts/2024-11-15-hugo/","summary":"\u003cp\u003eТак, ну я вернулся на hugo :D\u003c/p\u003e\n\u003cp\u003eОсновная причина — я нашел решение основной моей проблемы с Hugo, а именно, удобной публикации.\u003c/p\u003e\n\u003cp\u003eА как именно решил — тема отдельного поста на потом.\u003c/p\u003e\n\u003cp\u003eНу и тему наконец-то сделал сам с нуля. Как говорится, хочешь сделать хорошо — сделай это сам.\u003c/p\u003e","title":"Hugo"},{"content":"Продолжу, пожалуй.\nСегодня хочу порекомендовать всего две книги:\nСвидание с Рамой Свидание с Рамой\nАртур Кларк, 1973\nФантастическая повесть о встрече человечества с необитаемым(?) инопланетным кораблём, который прилетел в нашу солнечную систему. На изображении выше — вид этого корабля изнутри.\nНа сайте lib.ru:\nwww.lib.ru/KLARK/rama1.txt В виде аудиокниги: https://akniga.org/klark-artur-svidanie-s-ramoy Если надо — могу выложить по запросу в формате fb2 Глубина в небе Вернор Виндж, 1999\nОб экспедиции двух разных человеческих колоний к странной звезде, имеющей свойство выключаться на 200 лет. Причиной отправки стали принятые с окрестной планеты радио сигналы, свидетельствующие о наличии разумной жизни на ней.\nКнига является частью цикла, и я прикладываю цикл целиком:\nЦикл «КенгХо» скачать\n","permalink":"https://neonxp.ru/posts/2024-10-17-%D0%BA%D0%BD%D0%B8%D0%B3%D0%B8-2/","summary":"\u003cp\u003eПродолжу, пожалуй.\u003c/p\u003e\n\u003cp\u003eСегодня хочу порекомендовать всего две книги:\u003c/p\u003e\n\u003ch2 id=\"свидание-с-рамой\"\u003eСвидание с Рамой\u003c/h2\u003e\n\u003cp\u003e\u003cimg alt=\"Rama16wiki.webp\" loading=\"lazy\" src=\"/files/posts/files/2024-10-17-%D0%BA%D0%BD%D0%B8%D0%B3%D0%B8-2/Rama16wiki.webp\"\u003e\u003cbr\u003e\nСвидание с Рамой\u003c/p\u003e\n\u003cp\u003eАртур Кларк, 1973\u003c/p\u003e\n\u003cp\u003eФантастическая повесть о встрече человечества с необитаемым(?) инопланетным кораблём, который прилетел в нашу солнечную систему. На изображении выше — вид этого корабля изнутри.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eНа сайте lib.ru:\u003cbr\u003e\n\u003ca href=\"http://www.lib.ru/KLARK/rama1.txt\"\u003ewww.lib.ru/KLARK/rama1.txt\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eВ виде аудиокниги: \u003ca href=\"https://akniga.org/klark-artur-svidanie-s-ramoy\"\u003ehttps://akniga.org/klark-artur-svidanie-s-ramoy\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eЕсли надо — могу выложить по запросу в формате fb2\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"глубина-в-небе\"\u003eГлубина в небе\u003c/h2\u003e\n\u003cp\u003eВернор Виндж, 1999\u003c/p\u003e\n\u003cp\u003eОб экспедиции двух разных человеческих колоний к странной звезде, имеющей свойство выключаться на 200 лет. Причиной отправки стали принятые с окрестной планеты радио сигналы, свидетельствующие о наличии разумной жизни на ней.\u003c/p\u003e","title":"Книжные рекомендации №2"},{"content":"В середине-конце нулевых был очень популярный сайт баш.орг.ру. Думаю, те, «кому за» помнят ещё тот самый башорг!\nпросто был сборником цитат из разных чатов, irc каналов или личных переписок. Изначально, был исключительно анимешно-айтишной направленности и тем самым для нас, студентов и гиков был крайне популярным местом. В своё время, он подарил мне много часов приятного времяпрепровождения и ламповых вечеров.\nЗатем, когда БОР (как часто его сокращали) выиграл премию Рунета, на него хлынул поток, как сейчас бы сказали, «нормисов». Которые, уже в свою очередь, заполнили БОР всяким про отношения, офисно-планктонные темы, фейковыми цитатами, ответами на цитаты, ответами на ответы на цитаты и прочим подобным, далёким от изначального айтишного флёра, шлаком.\nВ общем, как всегда, в андеграунд пришли нормисы и всё испортили. И да, баш скатился уже, по сути, к десятым годам.\nПримерно тогда же он для меня и закончился, ибо стал уже совсем не «торт». Потом он как-то жил больше декады за границами моего внимания. Успев при этом поменять адрес с зоны .ru на зону .im зачем-то. Ну а с началом СВО его админы окончательно сошли с ума и закрыли БОР который к тому времени и так едва ли был жив. На этом, его история окончательно закончилась.\nОднако, не смотря на это БОР был интересным и знаковым феноменом, который неотрывно вписан как в историю рунета так и в мою личную историю юности.\nПосему, я решил, так сказать, или возродить его, ну или, как минимум, сделать ему мемориал.\nСказано — сделано. Купил домен, который отсылается к самому старому домену оригинала — sh.org.ru (sh является командной оболочкой, предком командной оболочки bash). За несколько часов написал скраппер по зеркалам и архивам бора, спарсил более 80К цитат. Затем, написал на golang простенький движок и всего за день запустил свой цитатник в свободное плавание!\nИз функций пока только вывод цитат по страницам, а так же вывод случайных 20 цитат + кнопка для выдачи других 20 случайных. Лично мне гораздо больше нравятся как раз случайные подборки. Их можно обновлять почти бесконечно!\nДа, он пока не умеет принимать новые цитаты (да и кто их будет слать то, лол?), да и нет других функций, типа голосований (классическими [+], [-], [:|||:]). Буду ли я это доделывать и как-то развивать? Не знаю. Возможно, время цитатника безвозвратно ушло. Но может быть и внезапный комбек. Кто знает 🤷‍♂️. В ближайшие дни я допилю и голосвалку и добавление цитат, но вряд ли буду в это инвестировать много времени. Есть ещё и мысль публиковать цитаты через ТГ бота простой пересылкой ему сообщений, а он уже их сам анонимизирует заменяя данные пользователей на обезличенные XXX и YYY и оформляет цитату как надо. Как вам такая идея?\nВообще, я бы хотел это как-то, наверное, обсудить, относительно того как это развивать и стоит ли?\n","permalink":"https://neonxp.ru/posts/2024-10-06-%D1%86%D0%B8%D1%82%D0%B0%D1%82%D0%BD%D0%B8%D0%BA-%D1%80%D1%83%D0%BD%D0%B5%D1%82%D0%B0/","summary":"\u003cp\u003eВ середине-конце нулевых был очень популярный сайт баш.орг.ру. Думаю, те, «кому за» помнят ещё тот самый башорг!\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"blog/post![[blog/posts/files/2024-10-06-цитатник-рунета/logo.webp\" loading=\"lazy\" src=\"blog/post!%5B%5Bblog/posts/files/2024-10-06-%D1%86%D0%B8%D1%82%D0%B0%D1%82%D0%BD%D0%B8%D0%BA-%D1%80%D1%83%D0%BD%D0%B5%D1%82%D0%B0/logo.webp\"\u003eпросто был сборником цитат из разных чатов, irc каналов или личных переписок. Изначально, был исключительно анимешно-айтишной направленности и тем самым для нас, студентов и гиков был крайне популярным местом. В своё время, он подарил мне много часов приятного времяпрепровождения и ламповых вечеров.\u003c/p\u003e\n\u003cp\u003eЗатем, когда БОР (как часто его сокращали) выиграл премию Рунета, на него хлынул поток, как сейчас бы сказали, «нормисов». Которые, уже в свою очередь, заполнили БОР всяким про отношения, офисно-планктонные темы, фейковыми цитатами, ответами на цитаты, ответами на ответы на цитаты и прочим подобным, далёким от изначального айтишного флёра, шлаком.\u003c/p\u003e","title":"Цитатник Рунета"},{"content":"Чисто на правах воскресной шизы.\nОбнаружил для себя интересную тенденцию, в характерных своему времени инструментах для общения за последние 40+ лет:\nЕсли взять эволюционный ряд BBS (в т.ч. Фидо) → Форумы → Соцсети → Мессенджеры, то можно выделить в них несколько общихчерт:\nВозможность общения 1—1 Возможность общения 1—М (оператор BBS, администратор форума может сделать\nкакую-то тему в read-only и сам туда писать,получая что-то типа каналов в\nтелеге или блога) Возможность общения М—М (обычный режим форума или многопользовательский чат в\nмессенджерах) Возможность обмена файлами (в т.ч. картинками, не зависимо от того, сразу они\nотображаются у собеседника или нет) Возможность проводить голосования (внезапно, да?) Что из этого следует? Да ничего, просто забавно. Интересно, что будет в постмессенджеровую эпоху? По идее, какой быинструмент ни был — эти же черты будут присущи и ему.\nP.S. Да, я тут не упомянул про мейллисты и условные IRC, но просто не знал куда и после чего их приткнуть. Но по факту,черты все те же самые.\n","permalink":"https://neonxp.ru/posts/2024-07-21-bbs/","summary":"\u003cp\u003eЧисто на правах воскресной шизы.\u003c/p\u003e\n\u003cp\u003eОбнаружил для себя интересную тенденцию, в характерных своему времени инструментах для общения за последние 40+ лет:\u003c/p\u003e\n\u003cp\u003eЕсли взять эволюционный ряд BBS (в т.ч. Фидо) → Форумы → Соцсети → Мессенджеры, то можно выделить в них несколько общихчерт:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eВозможность общения 1—1\u003c/li\u003e\n\u003cli\u003eВозможность общения 1—М (оператор BBS, администратор форума может сделать\u003cbr\u003e\nкакую-то тему в read-only и сам туда писать,получая что-то типа каналов в\u003cbr\u003e\nтелеге или блога)\u003c/li\u003e\n\u003cli\u003eВозможность общения М—М (обычный режим форума или многопользовательский чат в\u003cbr\u003e\nмессенджерах)\u003c/li\u003e\n\u003cli\u003eВозможность обмена файлами (в т.ч. картинками, не зависимо от того, сразу они\u003cbr\u003e\nотображаются у собеседника или нет)\u003c/li\u003e\n\u003cli\u003eВозможность проводить голосования (внезапно, да?)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eЧто из этого следует? Да ничего, просто забавно. Интересно, что будет в постмессенджеровую эпоху? По идее, какой быинструмент ни был — эти же черты будут присущи и ему.\u003c/p\u003e","title":"Преемственность от BBS до Телеграма"},{"content":"Подумалось, почему бы не рекомендовать понравившиеся мне книги.\nВ прошлый раз, ещё в VK рекомендовал Азимовский цикл “Основание”. А в этот раз рекомендую цикл фантастики Андре Нортона “Королева Солнца”.\nЕсли без спойлеров — цикл описывает приключения помощника супер-карго Дейла на космическом корабле вольных торговцев «Королева Солнца». Читается легко и увлекательно. Книги небольшие, проглатываются за пару часов.\nСкачать\n","permalink":"https://neonxp.ru/posts/2024-06-02-%D0%BA%D0%BD%D0%B8%D0%B3%D0%B8-1/","summary":"\u003cp\u003eПодумалось, почему бы не рекомендовать понравившиеся мне книги.\u003c/p\u003e\n\u003cp\u003eВ прошлый раз, ещё \u003ca href=\"https://vk.com/wall-174034751_45\"\u003eв VK рекомендовал\u003c/a\u003e Азимовский цикл “Основание”. А в этот раз рекомендую цикл фантастики Андре Нортона “Королева Солнца”.\u003c/p\u003e\n\u003cp\u003eЕсли без спойлеров — цикл описывает приключения помощника супер-карго Дейла на космическом корабле вольных торговцев «Королева Солнца». Читается легко и увлекательно. Книги небольшие, проглатываются за пару часов.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"andre_norton-queen_of_sun.zip\"\u003eСкачать\u003c/a\u003e\u003c/p\u003e","title":"Книжные рекомендации 1"},{"content":"Я не шучу. Серьёзно.\nС неделю назад меня осенила крайне простая мысль, которая ранее, почему-то, мне не приходила.\nНо сначала, две вводных, или, скажем, тезиса, которые послужили для вывода этой мысли:\nТезис №1 Меня действительно огорчает количество пушей которые постоянно сыплются мне на телефон. Это вызывает раздражение сразуна нескольких уровнях:\nСам момент их прихода — я автоматически смотрю на телефон, что же пришло Если я игнорирую пуш — он потом висит в шторке вызывая раздражение Очень часто это сранная реклама от какого-нибудь озона или магнит маркета\n(бывш. KazanExpress) Но бывают же и полезные пуши! Например, уведомления от Госуслуг или информация что заказ доставлен ну илисообщения в мессенджерах.\nТо есть, как будто, ради вышеуказанных полезных пушей, я должен терпеть и тонну бесполезного говна!\nТезис №2 Ну и вторая вводная, которая, какмне кажется подтолкнула меня — я всегда любил простые и открытые технологии, какдревние, типа RSS, e-mail, irc, так и новые, но такие же простые и открытые, как, например, gemini (да, сейчас он наэтом сайте сломан, но я его починю на днях, честно!), федиверс и прочие подобные. Кстати, сейчас подумалось, что именноэти качества меня и так сильно влюбили в golang 🙂\nТа самая простая мысль На стыке двух вышеуказанных тезисов у меня внезапно для себя самого и синтезировалась крайне простая мысль:\nДействительно важные вещи всегда приходят на электропочту, а \u0026gt; сообщения в мессенджерах — это не срочно!\nТаким образом, запретив на телефоне вообще все пуши кроме электропочты я избавился от этого угнетающего информационногошума, оставив только полезный сигнал.\n-Хей, да на почте же один спам! — скажешь ты мне\nНа самом деле, уже давно нет. Я лично использую почту mail.ru (в данном случае, это не очень важно и относится к любой)и на ней спама как такового уже давно нет (если думаешь, что это не так, перепроверь, возможно, твои представленияустарели). При этом, самое великое в этом то, что почта (на самом деле, не важно, какая именно — mail.ru, yandex или,прости господи, гмейл) предоставляет гибкие фильтры входящей почты. И потратив буквально пару десятков минут можносформировать правила, чтобы, например, от того же озона пропускались только письма со статусом заказа и больше ничего.\nВот так, древняя технология обычных, старых-добрых, писем позволяет решить проблему современных назойливых уведомлений!\nПри этом, почта не пушит проверять её постоянно! Самое главное её преимущество для меня — это её ассинхронность, вотличие от мессенджеров. Можно отключить от нее уведомления тоже, но завести себе правило, что раз в Н времени выделятьвремя на ее проверку. Самое главное — делать это в комфортное для себя время.\nТак же как и на мессенджеры, кстати! Выше я уже сказал, что мессенджеры — это не срочно. Ничего страшного не случится, если я отвечу через час-два-три иливообще вечером. Если будет что-то действительно срочное — мне можно и позвонить. Но, к счастью, мне повезло, что мояжизнь достаточно спокойная и действительно срочное почти не случается. Отрефлексируй, уважаемый читатель, насколькодействительно срочные и важные вопросы, которые ты таковыми считаешь и которыми ежедневно дёргают тебя? И ответь себечестно, мир бы разрушился, если бы ты их отложил на комфортное для себя, а не других время?\nТакой эксперимент я ставлю на себе уже неделю. Я практически не захожу в мессенджеры, всё действительно важное мнеприходит на почту, лишней рекламы я не вижу, нет никакого информационного шума, который буквально стал бичомсовременности.\nВывод за неделю Моё внутреннее состояние ощущается как очень спокойное и, главное, комфортное. Я чувствую полный контроль над тем, чтои когда я потребляю и нет никакого информационного насилия, как его называет Столяров(хоть мне этот персонаж и кажется чрезвычайно радикальным и оттого отталкивающим, но что-то в его словах таки есть).\nСчитаю, что эксперимент оказался удачным, и я его продолжу!\nПишите письма! Напомню раз пришлось к слову, пожалуй, свою электропочту: i@neonxp.ru или a.kiryukhin@mail.ru обе почты абсолютноравноценны, писать можно на любую. Очевидно из поста, что молниеносный ответ я не гарантирую, но, сам факт ответа вобозримое время гарантирован!\n73!\n","permalink":"https://neonxp.ru/posts/2024-06-01-%D0%B2%D0%B0%D0%BC-%D0%BD%D0%B5-%D0%BD%D1%83%D0%B6%D0%BD%D1%8B-%D0%BF%D1%83%D1%88%D0%B8/","summary":"\u003cp\u003eЯ не шучу. Серьёзно.\u003c/p\u003e\n\u003cp\u003eС неделю назад меня осенила крайне простая мысль, которая ранее, почему-то, мне не приходила.\u003c/p\u003e\n\u003chr\u003e\n\u003cp\u003eНо сначала, две вводных, или, скажем, тезиса, которые послужили для вывода этой мысли:\u003c/p\u003e\n\u003ch2 id=\"тезис-1\"\u003eТезис №1\u003c/h2\u003e\n\u003cp\u003eМеня действительно огорчает количество пушей которые постоянно сыплются мне на телефон. Это вызывает раздражение сразуна нескольких уровнях:\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eСам момент их прихода — я автоматически смотрю на телефон, что же пришло\u003c/li\u003e\n\u003cli\u003eЕсли я игнорирую пуш — он потом висит в шторке вызывая раздражение\u003c/li\u003e\n\u003cli\u003eОчень часто это сранная реклама от какого-нибудь озона или магнит маркета\u003cbr\u003e\n(бывш. KazanExpress)\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eНо бывают же и полезные пуши! Например, уведомления от Госуслуг или информация что заказ доставлен ну илисообщения в мессенджерах.\u003c/p\u003e","title":"Вам не нужны пуши!"},{"content":"Третьего дня потратил достаточно много времени на установку на данном сайте сертификата от Минцифры.А поскольку сертификат краткоживущий (90 дней) — заметка мне самому пригодится на будущее.\nНачалось всё с того, что я с удивлением обнаружил, что на госуслугах теперь можно выпустить сертификат для домена физлицу.Это меня обрадовало, хотя ранее я приунывал что нет никакой альтернативы простым смертным. Теперь есть. Закрывайте буржуйнет.\nПоехали!\nИдём сюда: https://www.gosuslugi.ru/627603/1/form По приведенной инструкции генерируем файл запроса сертификата. Вкратце так (только вместо neonxp.ru указываем свой домен): openssl req -out neonxp.ru.csr -new -subj \u0026#34;/C=RU/CN=neonxp.ru\u0026#34; -addext \u0026#34;keyUsage = digitalSignature, keyEncipherment\u0026#34; -addext \u0026#34;subjectAltName=DNS: neonxp.ru\u0026#34; -addext \u0026#34;extendedKeyUsage = serverAuth\u0026#34; -newkey rsa:2048 -nodes -keyout neonxp.ru.key Важно! Нужно сохранить файл ключа neonxp.ru.key в надежном месте. Если он попадет в чужие руки — нужно будет отзывать сертификат и начинать всё заново! SAN и Wildcard пока не поддерживается, но что имеем — то и имеем. Но по слухам таки будут, как минимум SAN. Полученный файл csr загружаем там же на госуслуги Ждём не долго (реально недолго, у меня прислали сертификат буквально через несколько минут!) В ответ придёт файл с рандомным названием. Сохраняем его туда, где лежат другие файлы под названием “домен.crt” Скачиваем корневой и промежуточные сертификаты: 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 Преобразуем скачанный сертификат в формат PEM: openssl x509 -in neonxp.ru.crt -out neonxp.cer -outform PEM Соединяем свой сертификат и минцифровские в один бандл: cat neonxp.cer russian_trusted_sub_ca_pem.cer russian_trusted_root_ca_pem.cer \u0026gt; chain.cer Используем полученный бандл и сгенерированный в пункте 2 файл ключа в конфигурации вебсервера. У меня используется Caddy, поэтому мой конфиг выглядит так: neonxp.ru:443 { tls /data/ssl/chain.cer /data/ssl/neonxp.ru.key ... } В общем-то, всё. Как настанет время продлевать — я дополню заметку деталями именно продления. Если будут вопросы — пишите, попробуем решить.\n","permalink":"https://neonxp.ru/posts/2024-02-21-tls/","summary":"\u003cp\u003eТретьего дня потратил достаточно много времени на установку на данном сайте сертификата от Минцифры.А поскольку сертификат краткоживущий (90 дней) — заметка мне самому пригодится на будущее.\u003c/p\u003e\n\u003cp\u003eНачалось всё с того, что я с удивлением обнаружил, что на госуслугах теперь можно выпустить сертификат для домена физлицу.Это меня обрадовало, хотя ранее я приунывал что нет никакой альтернативы простым смертным. Теперь есть. \u003cdel\u003eЗакрывайте буржуйнет.\u003c/del\u003e\u003c/p\u003e\n\u003cp\u003eПоехали!\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eИдём сюда: \u003ca href=\"https://www.gosuslugi.ru/627603/1/form\"\u003ehttps://www.gosuslugi.ru/627603/1/form\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eПо приведенной инструкции генерируем файл запроса сертификата. Вкратце так (только вместо neonxp.ru указываем свой домен):\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eopenssl req -out neonxp.ru.csr -new -subj \u0026#34;/C=RU/CN=neonxp.ru\u0026#34; -addext \u0026#34;keyUsage = digitalSignature, keyEncipherment\u0026#34; -addext \u0026#34;subjectAltName=DNS: neonxp.ru\u0026#34; -addext \u0026#34;extendedKeyUsage = serverAuth\u0026#34; -newkey rsa:2048 -nodes -keyout neonxp.ru.key\n\u003c/code\u003e\u003c/pre\u003eВажно! Нужно сохранить файл ключа neonxp.ru.key в надежном месте. Если он попадет в чужие руки — нужно будет отзывать сертификат и начинать всё заново! SAN и Wildcard пока не поддерживается, но что имеем — то и имеем. Но по слухам таки будут, как минимум SAN.\u003c/li\u003e\n\u003cli\u003eПолученный файл csr загружаем там же на госуслуги\u003c/li\u003e\n\u003cli\u003eЖдём не долго (реально недолго, у меня прислали сертификат буквально через несколько минут!)\u003c/li\u003e\n\u003cli\u003eВ ответ придёт файл с рандомным названием. Сохраняем его туда, где лежат другие файлы под названием “домен.crt”\u003c/li\u003e\n\u003cli\u003eСкачиваем корневой и промежуточные сертификаты:\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003ewget https://gu-st.ru/content/Other/doc/russian_trusted_root_ca.cer\nwget https://gu-st.ru/content/Other/doc/russian_trusted_sub_ca.cer\n\u003c/code\u003e\u003c/pre\u003e\u003c/li\u003e\n\u003cli\u003eПреобразуем скачанный сертификат в формат PEM:\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eopenssl x509 -in neonxp.ru.crt -out neonxp.cer -outform PEM\n\u003c/code\u003e\u003c/pre\u003e\u003c/li\u003e\n\u003cli\u003eСоединяем свой сертификат и минцифровские в один бандл:\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003ecat neonxp.cer russian_trusted_sub_ca_pem.cer russian_trusted_root_ca_pem.cer \u0026gt; chain.cer\n\u003c/code\u003e\u003c/pre\u003e\u003c/li\u003e\n\u003cli\u003eИспользуем полученный бандл и сгенерированный в пункте 2 файл ключа в конфигурации вебсервера. У меня используется Caddy, поэтому мой конфиг выглядит так:\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eneonxp.ru:443 {\ntls /data/ssl/chain.cer /data/ssl/neonxp.ru.key\n...\n}\n\u003c/code\u003e\u003c/pre\u003e\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eВ общем-то, всё. Как настанет время продлевать — я дополню заметку деталями именно продления. Если будут вопросы — пишите, попробуем решить.\u003c/p\u003e","title":"Конфигурация HTTPS с сертификатом от Минцифры"},{"content":"Немного новостей.\nНачну с грустного. Крайне неудачно обновил forgejo на gitrepo.ru. В общем, БД побилась без возможности восстановления. Репозитории я спас, обращайтесь —пришлю архив репозиториев.\nОчень грустно, я был крайне расстроен. Штош, теперь настроил зато постоянные бекапы БД и данных на локальный NAS. Прошу прощения у пользователей, я очень виноват.\nА теперь о негрустном. Всё же решил что мне больше нравится основным домен не .dev, а именно .ru. Времена неспокойные — лучше перестраховаться и сделать ставку именно на национальный домен, а не на международный. К тому же у .dev домена есть неприятная особенность, что он требует обязательно валидного (то есть одобренного западными “партнерами”) сертификата. А это не дело, как я уже писал в заметке.\nПока что как-то так 🤷🏻‍♂️\n","permalink":"https://neonxp.ru/posts/2023-12-29-%D0%BF%D0%B5%D1%80%D0%B5%D0%B5%D0%B7%D0%B4/","summary":"\u003cp\u003eНемного новостей.\u003c/p\u003e\n\u003cp\u003eНачну с грустного. Крайне неудачно обновил forgejo на gitrepo.ru. В общем, БД побилась без возможности восстановления. Репозитории я спас, обращайтесь —пришлю архив репозиториев.\u003c/p\u003e\n\u003cp\u003eОчень грустно, я был крайне расстроен. Штош, теперь настроил зато постоянные бекапы БД и данных на локальный NAS. Прошу прощения у пользователей, я очень виноват.\u003c/p\u003e\n\u003cp\u003eА теперь о негрустном. Всё же решил что мне больше нравится основным домен не .dev, а именно .ru. Времена неспокойные — лучше перестраховаться и сделать ставку именно на национальный домен, а не на международный. К тому же у .dev домена есть неприятная особенность, что он требует обязательно валидного (то есть одобренного западными “партнерами”) сертификата. А это не дело, как я уже \u003ca href=\"https://neonxp.ru/posts/tls/\"\u003eписал в заметке\u003c/a\u003e.\u003c/p\u003e","title":"Переезд и проблемы обновления"},{"content":"Накопилось немного мыслей относительно того, что может грозить нам (и мне) в связи с трендом на “балканизацию” рунета.\nИ самое болезненное место — HTTPS который нынче стандарт де-факто в современных интернетах. А болезненное оно потому, что целиком и полностью контролируется другой стороной нынешного противостояния. Все доверенные удостоверяющие центры принадлежат странам “коллективного запада”. Помню, были ещё какие-то китайские, вроде, но с ними был какой-то скандал и не факт что они есть.\nЕсть относительно доверенный УЦ от Минцифры. Это здорово и я это всецело поддерживаю. Вот только есть момент. Он не для нас, простых людей, и при попытке его получить видим то, что на скриншоте ниже. А сранный Firefox вообще хочет его внести в черный список, чтобы даже специально его нельзя было установить. В общем, пока его я поставить не могу даже при всём желании.\nКакие ещё альтернативы есть, если нас вдруг прокинет Let’s encrypt?\nНе использовать HTTPS вообще. Я же не магазин и у меня нет форм логина,\nкоторые требуют шифрования. Так-то оно так, да не так. Браузеры уже сейчас\nочень косо смотрят на “обычные”, не HTTPS сайты, а в дальнейшем, не удивлюсь\nесли перестанут открывать вообще. Так же на HTTP сайтах не работают\nприкольные браузерные API типа геолокации (наверное, это в каком-то роде даже\nплюс 😉 ). Ну и ещё проблема, что, например, этот сайт без HTTPS вообще не\nможет работать, ибо для доменов зоны .dev насильно включено HSTS и они не\nмогут работать не по HTTPS. Последнее то я решу старым добрым доменом\nneonxp.ru, но тем не менее. Самоподписанные сертификаты. Вот это уже более менее похоже на правду! Да,\nтакие сайты надо добавлять в исключения и мороки с сертификатами чуть больше.\nНо тут та же история с доменами .dev. Для них самоподписаные не катят. Выход\n— опять таки старый добрый neonxp.ru. К чему я всё это? А то что в случае “балканизации” мы остаемся без нормального валидного HTTPS. Для себя я выбрал второй путь, с самоподписанными сертификатами. Чекнуть как работает можно на зеркале блога на https://neonxp.ru . Там я выпустил сам себе сертификат на домен от своего собственного удостоверяющего центра 🙂 А доверять ему или не доверять — дело посетителей сайта.\nНу и совсем краткая инструкция как выпустить сертификат для себя:\nopenssl genrsa -out root_ca.key 4096 — создание секретного ключа УЦ (должен\nхраниться в безопасности!) openssl req -x509 -new -key root_ca.key -days 3650 -out root_ca.crt —\nсоздаем сам сертификат УЦ (он НЕ секретный). Я указал срок действия 10 лет,\nно это потому что я ленивый и не хочу его перегенеривать каждый год. Так\nделать не советую. openssl genrsa -out server.key 4096 — создаем секретный ключ уже для\nконкретного сайта (и поддоменов) openssl req -new -key server.key -subj \u0026quot;/CN=neonxp.ru/CN=*.neonxp.ru\u0026quot; -out server.csr — генерируем файл запроса для конкретного сайта Создаем файл openssl.cnf с примерно таким содержимым: [SAN] subjectAltName = @alt_names [alt_names] DNS.1 = neonxp.ru DNS.2 = *.neonxp.ru И, наконец, создаем сертификат для сайта, который будет подписан ключами\nserver.key и root_ca.key (то есть и своим удостоверяющим центром тоже): openssl x509 -req -in server.csr -CA root_ca.crt -CAkey root_ca.key -CAcreateserial -out server.crt -days 365 -extensions SAN -extfile openssl.cnf В общем, всё. Полученные root_ca.crt (но не root_ca.key!), server.key и server.crt можно вносить в конфигурацию используемого вебсервера. А так же внести root_ca.crt в доверенные для себя.\n","permalink":"https://neonxp.ru/posts/2023-07-24-tls/","summary":"\u003cp\u003eНакопилось немного мыслей относительно того, что может грозить нам (и мне) в связи с трендом на “балканизацию” рунета.\u003c/p\u003e\n\u003cp\u003eИ самое болезненное место — HTTPS который нынче стандарт де-факто в современных интернетах. А болезненное оно потому, что целиком и полностью контролируется другой стороной нынешного противостояния. Все доверенные удостоверяющие центры принадлежат странам “коллективного запада”. Помню, были ещё какие-то китайские, вроде, но с ними был какой-то скандал и не факт что они есть.\u003c/p\u003e","title":"Немного мыслей о TLS (HTTPS) в России"},{"content":"Сегодня серьезно переделал свой хостинг репозиториев кода:\nПереехал на большой арендованный сервак Привел в порядок оркестрацию вокруг сервака с использованием Docker Compose Gitea заменил на её форк Forgejo Впилил CI/CD на основе Woodpecker CI Приглашаю пользоваться заместо бездуховного западного github: https://gitrepo.ru/\nСервер физически находится в датацентре в Москве у весьма годного провайдера Selectel.\nТем более, время сейчас неспокойное и неизвестно когда github станет недоступен для РФ, а GitRepo — он вот тут, в нашей стране.\nНемного про устройство Расскажу немного как я организовал себе Ops сервиса.\nУ меня на руках docker-compose.yml который полностью описывает всю конфигурацию сервака, примерно так:\nversion: \u0026#34;3\u0026#34; services: caddy: image: caddy:2.6.2-alpine container_name: gateway restart: unless-stopped ports: - \u0026#34;80:80\u0026#34; - \u0026#34;443:443\u0026#34; - \u0026#34;443:443/udp\u0026#34; volumes: - ./Caddyfile:/etc/caddy/Caddyfile - caddy_data:/data - caddy_config:/config networks: - gateway git: image: codeberg.org/forgejo/forgejo:1.18.0-1 container_name: git environment: - USER_UID=1000 - USER_GID=1000 - TZ=Europe/Moscow - USER=git - GITEA__database__DB_TYPE=postgres - GITEA__database__HOST=db:5432 - GITEA__database__NAME=${PG_NAME} - GITEA__database__USER=${PG_USER} - GITEA__database__PASSWD=${PG_PASS} restart: always networks: - gitea - gateway volumes: - /home/git/.ssh/:/data/git/.ssh - forgejo:/data - /etc/timezone:/etc/timezone:ro - /etc/localtime:/etc/localtime:ro ports: - \u0026#34;127.0.0.1:2222:22\u0026#34; depends_on: db: condition: service_healthy db: image: postgres:13 restart: always environment: - POSTGRES_USER=${PG_USER} - POSTGRES_PASSWORD=${PG_PASS} - POSTGRES_DB=${PG_NAME} healthcheck: test: /usr/bin/pg_isready interval: 5s timeout: 10s retries: 120 networks: - gitea volumes: - postgres:/var/lib/postgresql/data woodpecker-server: image: woodpeckerci/woodpecker-server:latest volumes: - woodpecker-server-data:/var/lib/woodpecker/ environment: - WOODPECKER_OPEN=true - WOODPECKER_GITEA=true - WOODPECKER_GITEA_URL=https://gitrepo.ru - WOODPECKER_GITEA_CLIENT=${GITEA_CLIENT} - WOODPECKER_GITEA_SECRET=${GITEA_SECRET} - WOODPECKER_HOST=https://ci.gitrepo.ru - WOODPECKER_ADMIN=neonxp - WOODPECKER_AGENT_SECRET=${WOODPECKER_AGENT_SECRET} networks: - gitea - gateway depends_on: - git woodpecker-agent: image: woodpeckerci/woodpecker-agent:latest command: agent restart: always depends_on: - woodpecker-server volumes: - /var/run/docker.sock:/var/run/docker.sock environment: - WOODPECKER_SERVER=woodpecker-server:9000 - WOODPECKER_AGENT_SECRET=${WOODPECKER_AGENT_SECRET} networks: - gitea volumes: woodpecker-server-data: caddy_data: caddy_config: forgejo: postgres: networks: gateway: gitea: external: false а рядом лежит .env файлик с значениями переменных ${...}.\nЗапускаю деплой я с локального компьютера, предварительно добавив удаленный сервер в контекст докера:\n# Создаю новый контекст для удаленного сервера docker context create gitrepo --docker \u0026#34;host=ssh:/gitrepo.ru\u0026#34; # Все последующие docker команды выполняются на удаленном сервере docker use gitrepo # Возвращаюсь в локальный контекст docker use default Оставшиеся проблемы Сейчас так получается, что Caddyfile должен лежать на удаленном сервере, т.к. часть конфига\nvolumes: - ./Caddyfile:/etc/caddy/Caddyfile выполняется в контексте именно удаленного сервера, а значит при его апдейте на локальном серваке приходится делать SCP этого файла на сервак. Такое себе.\nКак это решить — есть интересная идея, но это уже в другой раз.\n","permalink":"https://neonxp.ru/posts/2023-01-12-gitrepo/","summary":"\u003cp\u003eСегодня серьезно переделал свой хостинг \u003ca href=\"https://gitrepo.ru/\"\u003eрепозиториев кода\u003c/a\u003e:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eПереехал на большой арендованный сервак\u003c/li\u003e\n\u003cli\u003eПривел в порядок оркестрацию вокруг сервака с использованием Docker Compose\u003c/li\u003e\n\u003cli\u003eGitea заменил на её форк \u003ca href=\"https://forgejo.org/\"\u003eForgejo\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eВпилил CI/CD на основе \u003ca href=\"https://woodpecker-ci.org/\"\u003eWoodpecker CI\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eПриглашаю пользоваться заместо бездуховного западного github: \u003ca href=\"https://gitrepo.ru/\"\u003ehttps://gitrepo.ru/\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eСервер физически находится в датацентре в Москве у весьма годного провайдера Selectel.\u003c/p\u003e\n\u003cp\u003eТем более, время сейчас неспокойное и неизвестно когда github станет недоступен для РФ, а GitRepo — он вот тут, в нашей стране.\u003c/p\u003e","title":"GitRepo.ru"},{"content":"Просто собираю подборку интересных ссылок по гошке на почитать потом.\nExtra — Моё. Пакет с разными полезными\nфункциями без дополнительных зависимостей. Серия видосов про создание игры в стиле Animal Crossing на golang с помощью\nraylib —\nhttps://www.youtube.com/watch?v=iWp-mCIQgMU\u0026amp;list=PLVotA8ycjnCsy30WQCwVU5RrZkt4lLgY5\u0026amp;index=1 Самописный распределенный типа Postgres\nhttps://notes.eatonphil.com/distributed-postgres.html. Под капотом raft от\nhashicorp, boltdb и самое интересное — парсинг SQL Рассчет расстояния между двумя Geo точками: import \u0026#34;math\u0026#34; ... // https://en.wikipedia.org/wiki/Haversine_formula func GetDistance(lat1, lon1, lat2, lon2 float64) float64 { lat1 *= math.Pi / 180 lon1 *= math.Pi / 180 lat2 *= math.Pi / 180 lon2 *= math.Pi / 180 return 12742 * math.Asin( math.Sqrt( math.Pow(math.Sin((lat2-lat1)/2), 2) + math.Cos(lat1) * math.Cos(lat2) * math.Pow(math.Sin((lon2-lon1)/2), 2) ) ) } god — Утилита подгатавливающая демоны из go\nпрограммы. Для меня ценное — что генерит systemd конфиги. ","permalink":"https://neonxp.ru/posts/2022-05-31-golang-1/","summary":"\u003cp\u003eПросто собираю подборку интересных ссылок по гошке на почитать потом.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/neonxp/extra\"\u003eExtra\u003c/a\u003e — Моё. Пакет с разными полезными\u003cbr\u003e\nфункциями без дополнительных зависимостей.\u003c/li\u003e\n\u003cli\u003eСерия видосов про создание игры в стиле Animal Crossing на golang с помощью\u003cbr\u003e\nraylib —\u003cbr\u003e\n\u003ca href=\"https://www.youtube.com/watch?v=iWp-mCIQgMU\"\u003ehttps://www.youtube.com/watch?v=iWp-mCIQgMU\u003c/a\u003e\u0026amp;list=PLVotA8ycjnCsy30WQCwVU5RrZkt4lLgY5\u0026amp;index=1\u003c/li\u003e\n\u003cli\u003eСамописный распределенный типа Postgres\u003cbr\u003e\n\u003ca href=\"https://notes.eatonphil.com/distributed-postgres.html\"\u003ehttps://notes.eatonphil.com/distributed-postgres.html\u003c/a\u003e. Под капотом raft от\u003cbr\u003e\nhashicorp, boltdb и самое интересное — парсинг SQL\u003c/li\u003e\n\u003cli\u003eРассчет расстояния между двумя Geo точками:\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode class=\"language-go\" data-lang=\"go\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003eimport\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;math\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003e...\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e// https://en.wikipedia.org/wiki/Haversine_formula\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003efunc\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003eGetDistance\u003c/span\u003e(\u003cspan style=\"color:#a6e22e\"\u003elat1\u003c/span\u003e, \u003cspan style=\"color:#a6e22e\"\u003elon1\u003c/span\u003e, \u003cspan style=\"color:#a6e22e\"\u003elat2\u003c/span\u003e, \u003cspan style=\"color:#a6e22e\"\u003elon2\u003c/span\u003e \u003cspan style=\"color:#66d9ef\"\u003efloat64\u003c/span\u003e) \u003cspan style=\"color:#66d9ef\"\u003efloat64\u003c/span\u003e {\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#a6e22e\"\u003elat1\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e*=\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003emath\u003c/span\u003e.\u003cspan style=\"color:#a6e22e\"\u003ePi\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e/\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e180\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#a6e22e\"\u003elon1\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e*=\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003emath\u003c/span\u003e.\u003cspan style=\"color:#a6e22e\"\u003ePi\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e/\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e180\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#a6e22e\"\u003elat2\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e*=\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003emath\u003c/span\u003e.\u003cspan style=\"color:#a6e22e\"\u003ePi\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e/\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e180\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#a6e22e\"\u003elon2\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e*=\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003emath\u003c/span\u003e.\u003cspan style=\"color:#a6e22e\"\u003ePi\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e/\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e180\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003ereturn\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e12742\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003emath\u003c/span\u003e.\u003cspan style=\"color:#a6e22e\"\u003eAsin\u003c/span\u003e(\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#a6e22e\"\u003emath\u003c/span\u003e.\u003cspan style=\"color:#a6e22e\"\u003eSqrt\u003c/span\u003e(\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#a6e22e\"\u003emath\u003c/span\u003e.\u003cspan style=\"color:#a6e22e\"\u003ePow\u003c/span\u003e(\u003cspan style=\"color:#a6e22e\"\u003emath\u003c/span\u003e.\u003cspan style=\"color:#a6e22e\"\u003eSin\u003c/span\u003e((\u003cspan style=\"color:#a6e22e\"\u003elat2\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e-\u003c/span\u003e\u003cspan style=\"color:#a6e22e\"\u003elat1\u003c/span\u003e)\u003cspan style=\"color:#f92672\"\u003e/\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e2\u003c/span\u003e), \u003cspan style=\"color:#ae81ff\"\u003e2\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#a6e22e\"\u003emath\u003c/span\u003e.\u003cspan style=\"color:#a6e22e\"\u003eCos\u003c/span\u003e(\u003cspan style=\"color:#a6e22e\"\u003elat1\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#a6e22e\"\u003emath\u003c/span\u003e.\u003cspan style=\"color:#a6e22e\"\u003eCos\u003c/span\u003e(\u003cspan style=\"color:#a6e22e\"\u003elat2\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#a6e22e\"\u003emath\u003c/span\u003e.\u003cspan style=\"color:#a6e22e\"\u003ePow\u003c/span\u003e(\u003cspan style=\"color:#a6e22e\"\u003emath\u003c/span\u003e.\u003cspan style=\"color:#a6e22e\"\u003eSin\u003c/span\u003e((\u003cspan style=\"color:#a6e22e\"\u003elon2\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e-\u003c/span\u003e\u003cspan style=\"color:#a6e22e\"\u003elon1\u003c/span\u003e)\u003cspan style=\"color:#f92672\"\u003e/\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e2\u003c/span\u003e), \u003cspan style=\"color:#ae81ff\"\u003e2\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      )\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    )\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e}\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pioz/god\"\u003egod\u003c/a\u003e — Утилита подгатавливающая демоны из go\u003cbr\u003e\nпрограммы. Для меня ценное — что генерит systemd конфиги.\u003c/li\u003e\n\u003c/ul\u003e","title":"Golang подборка 1"},{"content":"Определенно, вести блог это не мое. Учитывая, что последний пост был год назад — sad but true.\nНе буду говорить, что “вот сейчас то уж точно буду вести регулярно”. Нет не буду.\nНо раз в полгода-год, наверное все же буду.\nИз новостей, что не писал в канал, наверное, только парочка:\nсейчас всё свободное время пилю свой петпроджект 😉 Пока что выходит ух какая\nкрасота. Но об этом как-нибудь в другой раз, как говорится, пол работы не\nпоказывают 🙂 в ленивом режиме начали заниматься вопросами улучшения жилищных условий.\nДавно пора. До встречи когда-нибудь потом 🙂\n","permalink":"https://neonxp.ru/posts/2022-05-30-%D0%B2%D0%BE%D0%B7%D1%80%D0%BE%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5/","summary":"\u003cp\u003eОпределенно, вести блог это не мое. Учитывая, что последний пост был год назад — sad but true.\u003c/p\u003e\n\u003cp\u003eНе буду говорить, что “вот сейчас то уж точно буду вести регулярно”. Нет не буду.\u003c/p\u003e\n\u003cp\u003eНо раз в полгода-год, наверное все же буду.\u003c/p\u003e\n\u003cp\u003eИз новостей, что не писал в канал, наверное, только парочка:\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eсейчас всё свободное время пилю свой петпроджект 😉 Пока что выходит ух какая\u003cbr\u003e\nкрасота. Но об этом как-нибудь в другой раз, как говорится, пол работы не\u003cbr\u003e\nпоказывают 🙂\u003c/li\u003e\n\u003cli\u003eв ленивом режиме начали заниматься вопросами улучшения жилищных условий.\u003cbr\u003e\nДавно пора.\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eДо встречи когда-нибудь потом 🙂\u003c/p\u003e","title":"Возрождение?"},{"content":"Вступление Как раз вступление тут особо и не нужно. Ни для кого не открою америки, что в современном цифровом обществе все мы являемся товаром для интернет-медиа гигантов, того же фейсбука да гугла. Не скажу что это для меня, как личности опасно или вредно, но мне это неприятно. Решил с этим что-то делать.\nВводные В интернетах я уже очень давно и много где и как “наследил” своими данными. И\nс этим уже ничего не поделать. У меня в телефоне и на всех компьютерах куча приложений работающих с\nинтернетом, и не только мессенджеры. У меня достаточно узкий круг людей с кем бы я хотел быть на связи, и не хочу\nчтобы мои действия как-то ухудшили или усложнили их жизнь. Вопрос анонимности для меня не стоит, я не анонимен и это моё осознанное\nрешение. Я законопослушный человек и прятаться мне не от кого. И да, я знаю\nчто этот тезис стараниями либерах нынче пытаются выставить как глупость, но\nнет. Глупость — это слушать либерах, а не иметь свою голову на плечах. И\nконтртезис “Гы гы гы, ну раз тебе нечего скрывать — поставь камеру у себя в\nспальне и ванной” даже комментировать не буду в силу его ущербности. Я пользователь техники Apple и с этим уже ничего не поделать, менять целиком\nэкосистему для меня не вариант (это очень дорого, бессмысленно, а местами и\nневозможно, например, рабочий мак мне поменять не на что). И да, есть наивная\nнадежда что у яблок в плане приватности всё получше чем у ведроидов. Во всяком\nслучае по сравнению со стоком. Гиковские прошивки с вырезанными зондами в\nрасчет не беру, верю что у них совсем всё хорошо. Цели Уменьшить информационный шум вокруг себя и тем самым улучшить качество жизни. Уменьшить свой “информационный след” Иметь больше контроля над своими данными, чтобы мои волосы стали мягкими и\nшелковистыми. Наброски плана Перейти максимально на собственные ресурсы, которые я контролирую и которые\nточно не сливают ничего налево.Примерно так: социалки =\u0026gt;\nhttps://soc.neonxp.ru/ , GitHub =\u0026gt; https://gitrepo.ru/ , Облачные\nдиски =\u0026gt; локальный NAS Synology и т.д. Мне надо сократить мессенджеры в идеале до одного, не считая корпоративного\nрабочего. Тут всё просто — оставляю Telegram, остальные сношу. Мне надо отказаться от неэтичных социальных сетей, где я не могу полностью\nконтролировать свои данные. При отказе от социальных сетей чтобы не доставить проблем моим контактам надо\nоставить “новый адрес” по которому со мной можно связаться и, например, этот\nпост. Я не хочу чтобы для всех мои действия были прозрачны и понятны, а не\n“молча удалиться” оставив кого-то в недоумении. Везде где возможно отключить или заблокировать телеметрию, чтобы как можно\nменьше моих данных неконтролируемо утекало. Да, полностью не перекрыть, но\nсократить возможно. Для связи с “миром” оставить только e-mail как наиболее удобный асинхронный\nметод коммуникации. Дальнейшие шаги Превратить наброски плана в цельный план. Написать манифест? Возможно. Подготовить “визитку” с актуальными контактами и объяснением что произошло.\nПричем как в виде изображения, так и текста. Вышеуказанную визитку поместить на уже неактуальных для меня местах обитания\n(инстаграм, вк и проч). Удаляться не хочу. Жалко контент за столько лет, да и\nпункт 3 предыдущего абзаца. Удалить “лишние” приложения от вышеуказанных сервисов. Разлогиниться в этих сервисах и очистить браузеры от них, чтобы исключить\nтреккинг на сторонних сайтах. ????? PROFIT! Обратная связь Очень бы хотелось получить обратную связь по моему плану. Комментарии про то что упустил и предложения улучшений приветствуются в комментариях к посту, в комментариях к телеграм каналу, или на почту a.kiryukhin@mail.ru (кстати, стоит наверное и почту перевести к себе? Но пока уровень сервиса врядли смогу адекватный обеспечить)\nUPD: Да, я знаю что уже данные так и останутся в чужих руках, но со временем они будут всё больше и больше протухать, а мой “цифровой профиль” терять актуальность. Ведь я не скала, я тоже меняюсь и ухожу от этого профиля.\n","permalink":"https://neonxp.ru/posts/2021-05-13-%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D0%B0%D1%8F-%D0%B3%D0%B8%D0%B3%D0%B8%D0%B5%D0%BD%D0%B0/","summary":"\u003ch2 id=\"вступление\"\u003eВступление\u003c/h2\u003e\n\u003cp\u003eКак раз вступление тут особо и не нужно. Ни для кого не открою америки, что в современном цифровом обществе все мы являемся товаром для интернет-медиа гигантов, того же фейсбука да гугла. Не скажу что это для меня, как личности опасно или вредно, но мне это неприятно. Решил с этим что-то делать.\u003c/p\u003e\n\u003ch2 id=\"вводные\"\u003eВводные\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eВ интернетах я уже очень давно и много где и как “наследил” своими данными. И\u003cbr\u003e\nс этим уже ничего не поделать.\u003c/li\u003e\n\u003cli\u003eУ меня в телефоне и на всех компьютерах куча приложений работающих с\u003cbr\u003e\nинтернетом, и не только мессенджеры.\u003c/li\u003e\n\u003cli\u003eУ меня достаточно узкий круг людей с кем бы я хотел быть на связи, и не хочу\u003cbr\u003e\nчтобы мои действия как-то ухудшили или усложнили их жизнь.\u003c/li\u003e\n\u003cli\u003eВопрос анонимности для меня не стоит, я не анонимен и это моё осознанное\u003cbr\u003e\nрешение. Я законопослушный человек и прятаться мне не от кого. И да, я знаю\u003cbr\u003e\nчто этот тезис стараниями либерах нынче пытаются выставить как глупость, но\u003cbr\u003e\nнет. Глупость — это слушать либерах, а не иметь свою голову на плечах. И\u003cbr\u003e\nконтртезис “Гы гы гы, ну раз тебе нечего скрывать — поставь камеру у себя в\u003cbr\u003e\nспальне и ванной” даже комментировать не буду в силу его ущербности.\u003c/li\u003e\n\u003cli\u003eЯ пользователь техники Apple и с этим уже ничего не поделать, менять целиком\u003cbr\u003e\nэкосистему для меня не вариант (это очень дорого, бессмысленно, а местами и\u003cbr\u003e\nневозможно, например, рабочий мак мне поменять не на что). И да, есть наивная\u003cbr\u003e\nнадежда что у яблок в плане приватности всё получше чем у ведроидов. Во всяком\u003cbr\u003e\nслучае по сравнению со стоком. Гиковские прошивки с вырезанными зондами в\u003cbr\u003e\nрасчет не беру, верю что у них совсем всё хорошо.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"цели\"\u003eЦели\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003eУменьшить информационный шум вокруг себя и тем самым улучшить качество жизни.\u003c/li\u003e\n\u003cli\u003eУменьшить свой “информационный след”\u003c/li\u003e\n\u003cli\u003eИметь больше контроля над своими данными, чтобы мои волосы стали мягкими и\u003cbr\u003e\nшелковистыми.\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch2 id=\"наброски-плана\"\u003eНаброски плана\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003eПерейти максимально на собственные ресурсы, которые я контролирую и которые\u003cbr\u003e\n\u003cem\u003eточно\u003c/em\u003e не сливают ничего налево.Примерно так: социалки =\u0026gt;\u003cbr\u003e\n\u003ca href=\"https://soc.neonxp.ru/\"\u003ehttps://soc.neonxp.ru/\u003c/a\u003e , GitHub =\u0026gt; \u003ca href=\"https://gitrepo.ru/\"\u003ehttps://gitrepo.ru/\u003c/a\u003e , Облачные\u003cbr\u003e\nдиски =\u0026gt; локальный NAS Synology и т.д.\u003c/li\u003e\n\u003cli\u003eМне надо сократить мессенджеры в идеале до одного, не считая корпоративного\u003cbr\u003e\nрабочего. Тут всё просто — оставляю Telegram, остальные сношу.\u003c/li\u003e\n\u003cli\u003eМне надо отказаться от неэтичных социальных сетей, где я не могу полностью\u003cbr\u003e\nконтролировать свои данные.\u003c/li\u003e\n\u003cli\u003eПри отказе от социальных сетей чтобы не доставить проблем моим контактам надо\u003cbr\u003e\nоставить “новый адрес” по которому со мной можно связаться и, например, этот\u003cbr\u003e\nпост. Я не хочу чтобы для всех мои действия были прозрачны и понятны, а не\u003cbr\u003e\n“молча удалиться” оставив кого-то в недоумении.\u003c/li\u003e\n\u003cli\u003eВезде где возможно отключить или заблокировать телеметрию, чтобы как можно\u003cbr\u003e\nменьше моих данных неконтролируемо утекало. Да, полностью не перекрыть, но\u003cbr\u003e\nсократить возможно.\u003c/li\u003e\n\u003cli\u003eДля связи с “миром” оставить только e-mail как наиболее удобный асинхронный\u003cbr\u003e\nметод коммуникации.\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch2 id=\"дальнейшие-шаги\"\u003eДальнейшие шаги\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003eПревратить наброски плана в цельный план. Написать манифест? Возможно.\u003c/li\u003e\n\u003cli\u003eПодготовить “визитку” с актуальными контактами и объяснением что произошло.\u003cbr\u003e\nПричем как в виде изображения, так и текста.\u003c/li\u003e\n\u003cli\u003eВышеуказанную визитку поместить на уже неактуальных для меня местах обитания\u003cbr\u003e\n(инстаграм, вк и проч). Удаляться не хочу. Жалко контент за столько лет, да и\u003cbr\u003e\nпункт 3 предыдущего абзаца.\u003c/li\u003e\n\u003cli\u003eУдалить “лишние” приложения от вышеуказанных сервисов.\u003c/li\u003e\n\u003cli\u003eРазлогиниться в этих сервисах и очистить браузеры от них, чтобы исключить\u003cbr\u003e\nтреккинг на сторонних сайтах.\u003c/li\u003e\n\u003cli\u003e?????\u003c/li\u003e\n\u003cli\u003ePROFIT!\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch2 id=\"обратная-связь\"\u003eОбратная связь\u003c/h2\u003e\n\u003cp\u003eОчень бы хотелось получить обратную связь по моему плану. Комментарии про то что упустил и предложения улучшений приветствуются в комментариях к посту, в комментариях к \u003ca href=\"https://t.me/neonxp\"\u003eтелеграм каналу\u003c/a\u003e, или на почту \u003ca href=\"mailto:a.kiryukhin@mail.ru\"\u003ea.kiryukhin@mail.ru\u003c/a\u003e (кстати, стоит наверное и почту перевести к себе? Но пока уровень сервиса врядли смогу адекватный обеспечить)\u003c/p\u003e","title":"Немного о цифровой гигиене"},{"content":"Редко такое бывает, что случайно натыкаешься на какую-то технологию и она вызывает вау-эффект и буквально переворачивает всё верх дном. На днях для меня такой технологией стал Jsonnet от Google.\nJsonnet\nВ кратце, это надмножество JSON являющееся языком описания шаблонов. Пока звучит не очень круто, да? На деле это офигенный Тьюринг полный функциональный язык, результатом выполнения которого будет сформированый JSON (и не только) документ(или несколько документов[^1]). [^1]:https://jsonnet.org/learning/getting_started.html#multi\nЕсли интересно, рекомендую сразу переходить к туториалу — https://jsonnet.org/learning/tutorial.html.\nПочему же это круто? Ну, во-первых, он реально мощный и простой. С его помощью можно формировать документы любой сложности.\nВо-вторых, его можно встроить в свою программу на Go (и не только, но на Go — проще всего — https://jsonnet.org/ref/bindings.html), и это даст бесплатно мощный DSL для написания очень гибких конфигов.\nВ третьих, ну камон, приятно же когда компьютер берет на себя рутинную работу по формированию больших и сложных JSON’ов!\nПример Накидал простенький пример который формирует конфигурацию пайплайна для гипотетической CI системы:\nlocal map(arr, predicate) = / определяем функцию map if std.length(arr) == 0 then [] else [ predicate(arr[0]) ] + map(arr[1:], predicate); / функциональненько! local tasks = [[\u0026#39;go1.14\u0026#39;, \u0026#39;1.14-alpine\u0026#39;],[\u0026#39;go1.15\u0026#39;, \u0026#39;1.15-alpine\u0026#39;],[\u0026#39;go1.16-RC\u0026#39;, \u0026#39;1.16-rc-alpine\u0026#39;]]; local commands = [\u0026#39;go build\u0026#39;, \u0026#39;go test\u0026#39;]; / Общая часть { / Результирующий JSON pipeline: map(tasks, function (task) { / Вызов map от tasks name: task[0], image: \u0026#34;golang:\u0026#34;+task[1], commands: commands, }) } Результат:\n{ \u0026#34;pipeline\u0026#34;: [ { \u0026#34;commands\u0026#34;: [\u0026#34;go build\u0026#34;, \u0026#34;go test\u0026#34;], \u0026#34;image\u0026#34;: \u0026#34;golang:1.14-alpine\u0026#34;, \u0026#34;name\u0026#34;: \u0026#34;go1.14\u0026#34; }, { \u0026#34;commands\u0026#34;: [\u0026#34;go build\u0026#34;, \u0026#34;go test\u0026#34;], \u0026#34;image\u0026#34;: \u0026#34;golang:1.15-alpine\u0026#34;, \u0026#34;name\u0026#34;: \u0026#34;go1.15\u0026#34; }, { \u0026#34;commands\u0026#34;: [\u0026#34;go build\u0026#34;, \u0026#34;go test\u0026#34;], \u0026#34;image\u0026#34;: \u0026#34;golang:1.16-rc-alpine\u0026#34;, \u0026#34;name\u0026#34;: \u0026#34;go1.16-RC\u0026#34; } ] } Круть же!\nДа, на небольшом примере не очень показательно, но даже тут, скажем, при добавлении новой цели сборки будет достаточно слегка подправить массив tasks и автоматически сформируется все остальное, а не копипаст целой секции и ручная правка в нужных местах.\nЯ оставил за скобками то, что этот шаблонизатора позволяет формировать не только JSON но и фактически любой другой текстовый формат. И даже из одного скрипта формировать несколько документов разного формата. При этом локальные переменные будут использоваться общие. Теоретически, если упороться, можно одним скриптом сформировать весь /etc на новом сервере. Почему бы и нет?:)\nНе знаю смог ли передать ощущение своего восторга, но я охренеть как рад и жду выходных, чтобы с головой нырнуть в эту технологию, которая открывает столько новых интересных перспектив!\n","permalink":"https://neonxp.ru/posts/2021-02-13-jsonnet/","summary":"\u003cp\u003eРедко такое бывает, что случайно натыкаешься на какую-то технологию и она вызывает вау-эффект и буквально переворачивает всё верх дном. На днях для меня такой технологией стал \u003ca href=\"https://jsonnet.org/\"\u003eJsonnet\u003c/a\u003e от Google.\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"jsonnet_logo.webp\" loading=\"lazy\" src=\"/files/posts/files/2021-02-13-jsonnet/jsonnet_logo.webp\"\u003e\u003cbr\u003e\nJsonnet\u003c/p\u003e\n\u003cp\u003eВ кратце, это надмножество JSON являющееся языком описания шаблонов. Пока звучит не очень круто, да? На деле это офигенный Тьюринг полный функциональный язык, результатом выполнения которого будет сформированый JSON (и не только) документ(или несколько документов[^1]). [^1]:https://jsonnet.org/learning/getting_started.html#multi\u003c/p\u003e\n\u003cp\u003eЕсли интересно, рекомендую сразу переходить к туториалу — \u003ca href=\"https://jsonnet.org/learning/tutorial.html\"\u003ehttps://jsonnet.org/learning/tutorial.html\u003c/a\u003e.\u003c/p\u003e","title":"Jsonnet"}]