add some old posts

This commit is contained in:
2026-09-13 14:18:25 +03:00
parent d5ab80e7da
commit 358d56da30
132 changed files with 3595 additions and 0 deletions
+33
View File
@@ -0,0 +1,33 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 400" width="100%" height="auto">
<rect width="1200" height="400" fill="#0a0c10"/>
<!-- Hexagon pattern -->
<g stroke="#1a2332" stroke-width="1" fill="none" opacity="0.5">
<polygon points="100,100 130,80 160,100 160,140 130,160 100,140"/>
<polygon points="250,100 280,80 310,100 310,140 280,160 250,140"/>
<polygon points="400,100 430,80 460,100 460,140 430,160 400,140"/>
<polygon points="550,100 580,80 610,100 610,140 580,160 550,140"/>
<polygon points="700,100 730,80 760,100 760,140 730,160 700,140"/>
<polygon points="850,100 880,80 910,100 910,140 880,160 850,140"/>
<polygon points="1000,100 1030,80 1060,100 1060,140 1030,160 1000,140"/>
<polygon points="175,160 205,140 235,160 235,200 205,220 175,200"/>
<polygon points="325,160 355,140 385,160 385,200 355,220 325,200"/>
<polygon points="475,160 505,140 535,160 535,200 505,220 475,200"/>
<polygon points="625,160 655,140 685,160 685,200 655,220 625,200"/>
<polygon points="775,160 805,140 835,160 835,200 805,220 775,200"/>
<polygon points="925,160 955,140 985,160 985,200 955,220 925,200"/>
<polygon points="1075,160 1105,140 1135,160 1135,200 1105,220 1075,200"/>
</g>
<!-- Center text -->
<text x="600" y="175" font-family="monospace" font-size="36" fill="#58a6ff" text-anchor="middle" font-weight="bold">
Ansible Controller на Windows 10
</text>
<text x="600" y="215" font-family="monospace" font-size="20" fill="#8b949e" text-anchor="middle">
WSL2 · Debian · uv · VHDX
</text>
<!-- Decor line -->
<line x1="200" y1="250" x2="1000" y2="250" stroke="#30363d" stroke-width="1"/>
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

+23
View File
@@ -0,0 +1,23 @@
---
date: '{{ .Date }}'
lastmod: '{{ .Date }}'
draft: false
title: '{{ replace .File.ContentBaseName "-" " " | title }}'
slug: '{{ .File.ContentBaseName }}'
description: ''
categories:
- 'blog'
tags:
- 'linux'
keywords:
- 'hugo'
- 'blog'
cover:
image: "hero.svg"
alt: "Hero картинка в SVG"
relative: true
---
Binary file not shown.

After

Width:  |  Height:  |  Size: 246 KiB

@@ -0,0 +1,17 @@
---
title: 'Ура! Я на концерте Nazareth!!!'
media_order: '13.10.12 - 1.jpg'
date: '2012-10-13T18:03:45+03:00'
publish_date: '18:03 13-10-2012'
metadata:
Место: Краснодар
taxonomy:
category:
- Blog
tag:
- Жизнь
- gelonet.ru
---
[Фотка](13.10.12 - 1.jpg)
@@ -0,0 +1,46 @@
---
title: 'Инновация на ROI'
date: '2014-07-16T21:35:45+03:00'
publish_date: '2014-07-16T21:35:45+03:00'
taxonomy:
category:
- Blog
tag:
- Политика
- gelonet.ru
---
Какие утопичные мысли в голову людей приходят-то оказывается. Идея хорошая, но сложно мне представить работающий механизм. 
Интересно каков процент таких иннициатив?
>
> [Создать вертикаль принятия решений от народа России на законодательном уровне](https://www.roi.ru/13339/?_utl_t=gp)
>
> Сейчас законы и решения принимаются думой и политическими партиями, которые легко купить за материальные ценности заинтересованными лицами или организациями.
>
> Поэтому очень часто принимаются решения и законы, в корне противоречащие жизни страны и народу России.
>
> Постоянное развитие населения требует адекватной реакции изменения существующих законов для дальнейшего развития страны, что существующая система обеспечить не может и не сможет.
>
> Народ не может самостоятельно законодательно создавать законы своей страны, отсюда недоверие народа к существующей власти, а также отсутствие веры народа в то, что любой человек страны может быть услышан в своей стране.
>
>
> **Практический результат**
> Невозможность подкупа и создания законов, противоречащих жизни людей России.
>
> Максимально эффективное и прямое принятие любого закона.
>
> Вера россиян в то, что они создают свою страну.
>
> Создание законодательной системы, как эталона для принятия на вооружение всему остальному миру.
>
> Данная система показывает максимальное доверие власти к народу, доверяя создание и развитие страны.
>
> Формирует фактическое, исполнительное, значение органов власти.
>
> Открывает новые возможности для создания открытой мировой системы, объединяющей большое количество стран в единую мировую систему саморегулирования.
>
> **Решение**
> Чтобы исключить такие невозможности, предлагаю создание вертикали принятия законодательных решений от народа России, когда изначально предложения, в том числе законодательные, выдвигаются любым гражданином России, и общим голосованием через интернет-ресурс "Российская общественная инициатива" положительные решения продвигаются по вертикали вверх. Чем больше положительных голосов - тем выше продвигается решение на законодательном уровне и принимается к обязательному исполнению государственными органами. Это позволит отказаться от всех существующих партий и того негативного влияния, которое они оказывают, продвигая проплаченные законы той или иной партией.
>
> Все поступающие инициативы не отклонять, а проводить их коррекцию, в минимальные сроки, включающие в себя грамматические ошибки и ненормативную лексику, не меняя основной смысл инициативы.
Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

@@ -0,0 +1,64 @@
---
title: 'Развёртывание UniFi контроллера и решение сопутствующих ошибок'
media_order: 'UniFi Screen.jpg'
date: '2014-07-29T22:44:45+03:00'
publish_date: '2014-07-29T22:44:45+03:00'
taxonomy:
category:
- Blog
tag:
- Сети
- gelonet.ru
---
Для обеспечения гостей гостиницы в которой я работаю беспроодным доступом в сеть Интернет была изыскана возможность развернуть на территории хотспот на оборудовании Ubiquity UniFi. В состав этого решения входит программный контроллер который моно установить на операционные системы Windows. MacOS и Linux, поскольку он основан на Java. Кстати, это удинственная зависимость, просто поставьте последнюю jre перед установкой, или начните установку и инсталлятор сам перекинет Вас на страницу с последней версией.
Контроллер под Windows устанавливается очень просто, как и многие приложения для этой ОСи, и очень быыстро, чем многие ругие приложения позвастаться не могут. Но после успешного окончания установки у меня возникла ошибка при запуске. Программа упорно твердила мне, что сервер остановлен из-за слишком долго запуска:
![](UniFi%20Screen.jpg)
> Initializing UniFi Controller ... Starting UniFi Controller ... Server taking too long to start... Start-up failed.
На официальном сайте данное сообщение рассматривалось в связи с ситуайией, что порты используемые приложение уже кем-то заданы и рекомендовалось изменить порты на другие в конфигурационном файле. В соём же случае проблема была в том, что встроенная база на движке MongoDB не запускалась из-за отсутствия файлов БД и невозможности их содать самостоятельно. В логах БД ./logs/mongod.txt у меня были следующие сообщения об ошибке:
> Tue Jul 29 16:34:06 [conn1] Create/OpenFile failed C:/Users/Администратор/Ubiquiti UniFi/data/db/ace.ns errno:3
>
> Tue Jul 29 16:34:06 [conn1] error couldn't open file C:/Users/Администратор/Ubiquiti UniFi/data/db/ace.ns terminating
>
> Tue Jul 29 16:34:06 dbexit:
>
> Tue Jul 29 16:34:06 [conn1] shutdown: going to close listening sockets...
Как я это решил:
По-умолчанию контроллер устанавливается в директорию
> C:\Users\<Имя текущего пользователя>\Ubiquiti UniFi.
Откуда её впоследствии легко можно перенести просто остановив все процессы контроллера, если он запущен, скопировав папку в нужное место и поправив ярлык запуска. Относительно неё и будут указываться все пути.
Это корневая папка приложения, в ней размещена папки data, logs, bin и другие.
Как раз на невозможность создания файла ace.ns в папке data/db движок БД и ругается в логе.
Исполняемый файл лежит в папке bin.
Запускаем консоль. Переходим в папку ./bin.
Запускаем процесс СУБД с указанием порта на котором слушаем пользовательские соединения (27117 - порт по-умолчанию) и директории с файлами БД:
> mongod --port=27117 --dbpath=..\data\db
В другом окне консоли соединяемся с запущенным экземпляром с помощью клиента mongo.exe на указанный выше порт:
> mongo --port=27117
Указываем что будем работать с БД формате ace:
> use ace
Запускаем процесс починки файлов БД:
> db.repairDatabase()
В результате в директории ./data/db должны появиться несколько файлов вида ace.???. После чего контроллер у меня заработал.
@@ -0,0 +1,15 @@
---
title: Яндекс.Браузер
date: '2014-08-09T21:39:45+03:00'
publish_date: '2014-08-09T21:39:45+03:00'
taxonomy:
category:
- Blog
tag:
- Linux
- gelonet.ru
---
Всем хороший браузер, но вот под Linux его ещё нет.
[Яндекс.Браузер](http://browser.yandex.ru/)
@@ -0,0 +1,21 @@
---
date: "2014-09-10 15:16:56"
taxonomy:
categories:
- blog
tags:
- Windows
- Tune
title: "Fixboot и Fixmbr"
---
В XP при неполадка в процессе загрузки ОС я часто использовал команды из
заголовка сообщения. Но в консоли восстановления 7-ки их почему-то не
оказалось.
Зато появился пакет с параметрами:
'''
BOOTREC \FixBoot
BOOTREC \FixMBR
'''
который выполняет ровно те же задачи, восстанавливая загрузочный сектор и
главную загрузочную запись, соответственно.
@@ -0,0 +1,22 @@
---
date: "2014-09-10 15:16:56"
taxonomy:
categories:
- blog
tags:
- Windows
- Tune
title: "Fixboot и Fixmbr"
---
В XP при неполадка в процессе загрузки ОС я часто использовал команды из
заголовка сообщения. Но в консоли восстановления 7-ки их почему-то не
оказалось.
Зато появился пакет с параметрами:
'''shell
BOOTREC \FixBoot
BOOTREC \FixMBR
'''
который выполняет ровно те же задачи, восстанавливая загрузочный сектор и
главную загрузочную запись, соответственно.
@@ -0,0 +1,24 @@
---
title: "Загрузочный образ"
date: "2014-09-24"
---
В связи с тем, что на работе часто приходится рабочие станции приводить в
порядок после "настроки" пользователями я озаботился созданием инструмента
для быстрого развертывания операционной системы.
Да-да, мы на работе всё еще используем ХР. Да, я в курсе, что её сняли с
поддержки. Нет, для работы мне не нужны ни DirectX11, ни IE9.
Что же нужно мне для того, чтобы было удобно пользоваться "инструментом":
1. Загрузчик с возможностью выбора устанавливаемой ОС - En, Ru, x86, x64,
WinPE, CloneZilla, и возможно её какие-то другие образы.
2. Возможность использования собственных установочных образов -
интегрировать обновления, драйвера, патчи, приложения.
Почему не использовать готовые образы, типа Zver? Во-первых паранойя;
во-вторых это скучно; в-третьих все они меняют стандартный интерфейс, что
лично меня ужасно бесит.
В дальнейшем, я создам серию публикаций с описанием, как того как получить
в своё пользование такой инструмент.
Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

@@ -0,0 +1,50 @@
+++
title = "Загрузочная флэшка с WinXP"
date = "2014-09-24"
tags = [
"windows",
"tools",
]
+++
В связи с тем, что на работе часто приходится рабочие станции приводить в порядок после "настроки" пользователями я озаботился созданием инструмента для быстрого развертывания операционной системы.
Да-да, мы на работе всё еще используем ХР. Да, я в курсе, что её сняли с поддержки. Нет, для работы мне не нужны ни DirectX11, ни IE9.
Что же нужно мне для того, чтобы было удобно пользоваться "инструментом":
1. Загрузчик с возможностью выбора устанавливаемой ОС - En, Ru, x86, x64, WinPE, CloneZilla,  и возможно её какие-то другие образы.
2. Возможность использования собственных установочных образов - интегрировать обновления, драйвера, патчи, приложения.
Почему не использовать готовые образы, типа Zver? Во-первых паранойя; во-вторых это скучно; в-третьих все они меняют стандартный интерфейс, что лично меня ужасно бесит.
В дальнейшем, я создам серию публикаций с описанием, как того как получить в своё пользование такой инструмент.
Какие образы мне нужно(точнее я хочу, но может и не получиться) добавить на носитель:
1. Windows XP SP3 x32 Rus
2. Windows XP SP3 x64 Rus
3. Windows XP SP3 + Emmbended Updates x32 Rus
4. Windows XP SP3 + Emmbended Updates x64 Rus
5. Windows 7 SP2 x32 Rus
6. Windows 7 SP2 x64 Rus
7. Windows 8.1 x32Rus
8. Windows 8.1 x64 Rus
9. Windows 10 x64 Rus
10. Windows XP Live
11. Windows 2003 x64
12. Windows 2008 Std x64
13. Windows 2008 R2 Std x64
14. DrWeb Live CD
15. AntiSMS https://antisms.com/
16. GNU/Linux Debian Stable
17. GNU/Linux Ubuntu 14.04 Desktop LTS
18. GNU/Linux Ubuntu 14.04 Server LTS
19. GNU/Linux Tails
20. GNU/Linux CloneZilla
21. GNU/Linux Part Magic 
Надеюсь ничего не забыл и мне банально хватит места на флэшке для всего этого богатства.
Кстати, рабочим названием для этого инструмента будет BootFlashTool или BFT, что и будет отображаться в метках публикуемых сообщений.
Binary file not shown.

After

Width:  |  Height:  |  Size: 159 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 161 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 213 KiB

@@ -0,0 +1,45 @@
---
title: 'Борьба за здоровье или "Пузо no Pasaran!"'
media_order: 'gto-normy-2014-stup-07m.jpg,20141008_234728.jpg,20141008_234710.jpg'
date: '2014-10-08T22:27:45+03:00'
publish_date: '2014-10-08T22:27:45+03:00'
taxonomy:
category:
- Blog
tag:
- Жизнь
---
У меня сейчас заканчивается отпуск и больше половины его я проболел. Такая ситуация со здоровьем мне не то что не нравится, она повергает меня в ужас. Вместе с внешним видом (пузом, синяками под глазами, одышкой и всем прочим). Поэтому было решено ввязаться в бесконечную и безнадежную борьбу с ленью и внешними факторами за здоровье.
Недолго думая, за первую цель были приняты нормы ГТО, при том что в Краснодарский край, к моему огромному удивлению, не входит в перечень регионов где уже в этом году можно было бы их сдавать. Но ничего, как раз будет время подготовиться.
Нормы для моей возрастной группы следующие:
![](gto-normy-2014-stup-07m.jpg)
Источник - первый в выдаче Яндекса сайт по запросу "Нормы ГТО" - [http://www.gto-normy.ru/.](http://www.gto-normy.ru/)
Как говорили латиняне - Motus vita est! (Движение - жизнь!).
Мои текущие параметры:
Рост 180 см.
Вес 85,8 кг.
Подтягивания - 2 раза
Отжимания - 23 раза
Бег - 500 метров и запыхался
А вот что я представляю из себя на сегодняшний день (жалкое зрелище слабонервным лучше не смотреть):
![](20141008_234728.jpg)
![](20141008_234710.jpg)
Посмотрим что из меня выйдет через некоторое время.
Binary file not shown.

After

Width:  |  Height:  |  Size: 95 KiB

@@ -0,0 +1,18 @@
---
title: 'Национализацию Центробанка запретили'
media_order: iXCWMlaTYhQ.jpg
date: '2014-10-17T21:42:45+03:00'
publish_date: '2014-10-17T21:42:45+03:00'
taxonomy:
category:
- Blog
tag:
- Политика
- gelonet.ru
---
Кто-бы сомневался, что большая часть"элиты" у власти работает на интересы иностранных государств. Но то что "народные избранники" дуют в ту же дуду, для меня теперь безо всяких оговорок стало кристально ясно. Верхи не хотят... Что с низами?
[ВНИМАНИЕ !!! Госдума РФ разрешила Центробанку РФ и дальше работать против России.](https://fedorov-evgeni.livejournal.com/101055.html)
![](iXCWMlaTYhQ.jpg)
@@ -0,0 +1,15 @@
---
title: 'Образование: было/стало'
date: '2014-10-18T22:10:45+03:00'
publish_date: '2014-10-18T22:10:45+03:00'
taxonomy:
category:
- Blog
tag:
- Политика
- gelonet.ru
---
Еще один аргумент в пользу ипользования советских наработок в среднем и высшем образовании.
[Что запрещено знать о советском образовании](http://poznavatelnoe.tv/pomyalov_zapret_sovet_obrazovanie)
@@ -0,0 +1,19 @@
---
title: '265 солнечных дней в году, а в остальные...'
media_order: led.jpg
date: '22:00 22-10-2014'
publish_date: '22:00 22-10-2014'
taxonomy:
category:
- Blog
tag:
- Жизнь
- gelonet.ru
---
![](led.jpg)
Начинается... =) Опять ураганы и прочие радости. Теперь, как ни зима, так стихийное бедствие.
[На Геленджик движется обледенение](http://дом-геленджик.рф/2014/10/22/na-gelendzhik-dvizhetsya-obledenenie/)
Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

@@ -0,0 +1,223 @@
---
title: 'Captive portal'
date: '22:22 26-11-2014'
publish_date: '22:22 26-11-2014'
taxonomy:
category:
- Blog
tag:
- Linux
- gelonet.ru
---
Собираю инфу по реализации Captive порталов для WiFI сетей.
Вот, первая пташка.
[Captive portal собственными руками](https://habr.com/ru/sandbox/79059/)
> Каждый из нас подключался к беспроводной сети (аэропорты, кафе и тд) где необходимо согласится с некоторыми условиями или пройти авторизации прежде чем начинать пользоваться интернетом. Такая технология называется captive portal.
>
> В мою задачу входило создать captive portal где каждому пользователю раз в 30 минут будет показываться определенный сайт (реклама), и пока он не нажмет «кнопочку» «далее» интернета не будет.
>
> Для создания нам понадобится:
> Wifi-точка доступа любая (на практике можно использовать и проводной интернет)
> Маршрутизатор на любой *nix системе (в моем случае это debian wheezy)
>
>
> Краткое описание принципа работы
> Любой пакет пришедший на маршрутизатор маркируем
> Любой запрос на 80 порт (пакеты уж маркированны) перенаправляем на нужную нам страницу
> При «авторизации»(нажатии кнопки далее) пользователя добавляем его мак в исключения и разрешаем доступ в интернет
> Скрипт вычисляет у кого прошел лимит времени и удаляет данного клиента.
>
>
>
> У нас имеется маршрутизатор на базе debian, где eth0 — локальная сеть в моем случае (192.168.11.0/24), eth0:1 — интерфейс который смотрит в интернет.
>
> Настройку интерфейсов мы пропустим, это каждый выполнит сам. Сразу перейдем к настройке iptables, я обычно прописываю iptables в rc.local:
> /etc/rc.local
> IPTABLES="/sbin/iptables"
> EBTABLES="/sbin/ebtables"
> DHCP="67:68"
> SSH="22"
> WWW="80"
>
> $IPTABLES -t mangle -F
> $IPTABLES -F
>
> $IPTABLES -A INPUT -i lo -j ACCEPT
> #ssh
> $IPTABLES -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
> # разрешаем серверу и клиентам dns гугла
> $IPTABLES -A INPUT -s 8.8.8.8 -j ACCEPT
> $IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
>
> # создаем правило интернет
> $IPTABLES -N internet -t mangle
> $IPTABLES -t mangle -A PREROUTING -j internet
> #добавляем разрешенные маки в исключения путем добавления их в Return
> awk 'BEGIN { FS="\t"; } { system("$IPTABLES -t mangle -A internet -m mac --mac-source "$4" -j RETURN"); }' /var/lib/users
> #маркируем все пакеты
> $IPTABLES -t mangle -A internet -j MARK --set-mark 99
> # все маркированные пакеты которые идут на 80 порт отправляем на наш сервер
> $IPTABLES -t nat -A PREROUTING -m mark --mark 99 -p tcp --dport 80 -j DNAT --to-destination 192.168.11.38
> #дроппаем все маркированное
> #$IPTABLES -t filter -A FORWARD -m mark --mark 99 -j DROP
> #dns
> $IPTABLES -t filter -A INPUT -s 8.8.8.8 -j ACCEPT
> #http
> $IPTABLES -t filter -A INPUT -p tcp --dport 80 -j ACCEPT
> #port dns
> $IPTABLES -t filter -A INPUT -p udp --dport 53 -j ACCEPT
> #drop
> $IPTABLES -t filter -A INPUT -m mark --mark 99 -j DROP
> echo "1" > /proc/sys/net/ipv4/ip_forward
> #настройка нат
> $IPTABLES -A FORWARD -i eth0 -o eth0:1 -m state --state ESTABLISHED,RELATED -j ACCEPT
> $IPTABLES -A FORWARD -i eth0:1 -o eth0 -j ACCEPT
> $IPTABLES -t nat -A POSTROUTING -o eth0 -j MASQUERADE
>
> На этом конфигурация iptables заканчивается и переходим к странице которую получает пользователь: /var/lib/index.php
> <?php
>
> $server_name = "192";
> $domain_name = "168.11.38";
> $site_name = "Wireless Network";
>
> // arp
> $arp = "/usr/sbin/arp";
>
> // файл где хранятся текущие пользователи
> $users = "/var/lib/users";
>
> // Check if we've been redirected by firewall to here.
> // If so redirect to registration address
> if ($_SERVER['SERVER_NAME']!="$server_name.$domain_name") {
> header("location:http://$server_name.$domain_name/index.php?add="
> .urlencode($_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']));
> exit;
> }
>
> // получаем и добавляем мак пользователя
> $mac = shell_exec("$arp -a ".$_SERVER['REMOTE_ADDR']);
> preg_match('/..:..:..:..:..:../',$mac , $matches);
> @$mac = $matches[0];
> if (!isset($mac)) { exit; }
>
> if (!isset($_POST['email']) || !isset($_POST['name'])) {
> // Name or email address not entered therefore display form
> ?>
> <h1>Welcome to <?php echo $site_name;?></h1>
> To access the Internet you must first enter your details:<br><br>
> <form method='POST'>
> <table border=0 cellpadding=5 cellspacing=0>
> <tr><td>Your full name:</td><td><input type='text' name='name'></td></tr>
> <tr><td>Your email address:</td><td><input type='text' name='email'></td></tr>
> <tr><td></td><td><input type='submit' name='submit' value='Submit'></td></tr>
> </table>
> </form>
> <?php
> } else {
> enable_address();
> }
>
>
> function enable_address() {
>
> global $name;
> global $email;
> global $mac;
> global $users;
> // время добавления пользователя храним в unixtime
> file_put_contents($users,$_POST['name'].";".$_POST['email'].";"
> .$_SERVER['REMOTE_ADDR'].";$mac;".date("U")."\n",FILE_APPEND + LOCK_EX);
>
> // добавляем правило в iptables
> exec("sudo iptables -I internet 1 -t mangle -m mac --mac-source $mac -j RETURN");
> // The following line removes connection tracking for the PC
> // This clears any previous (incorrect) route info for the redirection
> exec("sudo rmtrack ".$_SERVER['REMOTE_ADDR']);
>
> sleep(1);
> header("location:http://".$_GET['add']);
> exit;
> }
>
> // Function to print page header
> function print_header() {
>
> ?>
> <html>
> <head><title>Welcome to <?php echo $site_name;?></title>
> <META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE">
> <LINK rel="stylesheet" type="text/css" href="./style.css">
> </head>
>
> <body bgcolor=#FFFFFF text=000000>
> <?php
> }
>
> // Function to print page footer
> function print_footer() {
> echo "</body>";
> echo "</html>";
>
> }
>
> ?>
>
> Данная страница может быть любой, смысл лишь в том, чтобы получить мак пользователя и добавить его в iptables.
>
> В текущий момент получилась следующая схема:
> Iptables автоматически редиректит любой запрос на 80 порт на нашу страницу
> пользователь вводит свое имя и почту, скрипт php получает мак пользователя и добавляет в iptables правило исключения для этого мака
> Php скрипт складывает все данные пользователей (имя, почта, время добавления) в файл /var/lib/users
>
> Осталось только сделать скрипт который будет:
> удалять правило из iptables для мака у которого вышло время
> удалять из файла данные по этому пользователю
>
>
> Так как мои знания в программировании довольно плачевны был написан простенький скрипт на перле:
> #!/usr/bin/perl
>
> $file = "/var/lib/users";
> $curtime = time();
> # время "бана" 30 минут время в секундах так как считаем потом в unixtime
> $bantime = 1800;
> $tmpfile = "out.tmp";
>
> open(my $data, '<', $file) or die "Could not open '$file' $!\n";
> while (my $line = <$data>) {
> chomp $line;
> (@field) = split(";", $line);
>
>
> #прибавляем время "бана" ко времени когда зашел пользователь (4 поле в нашем случае) получаем время когда нужно удалить пользователя
> if (defined($exptime)) { undef $exptime; }
> $result = $field[4];
> $exptime = $bantime + $result;
> # такая коснтрукция потому что перл не хотел прибавлять $field[4] + $bantime
>
> # если текущее время больше времени для удаления, удаляем мак и перезаписываем файл
> if ($curtime > $exptime) {
> #printf "BINGO\n";
> system "iptables -D internet -t mangle -m mac --mac-source $field[3] -j RETURN";
> # system "rm /var/lib/users";
>
> }
> else {
> printf "$field[3]; $exptime\n";
>
> open SF, ">>$tmpfile";
> printf SF "$field[0];$field[1];$field[2];$field[3];$field[4]\n";
> close SF;
> system "mv /root/out.tmp /var/lib/users";
> system "chown www-data. $file";
> }
>
> }
>
>
>
> > Все, задача выполенна, модифицируя файлик index.php можем показывать пользователю релкаму, смешные видео, заставлять его оставлять свою почту и т.д.
Binary file not shown.

After

Width:  |  Height:  |  Size: 835 KiB

Binary file not shown.
+16
View File
@@ -0,0 +1,16 @@
---
title: Флаг
media_order: 'IMG_20141122_090828-PANO.jpg,Year in Photos 2014.m4v'
date: '22:04 18-12-2014'
publish_date: '22:04 18-12-2014'
taxonomy:
category:
- Blog
tag:
- Жизнь
- gelonet.ru
---
Был на дне города в Сочи. Вот такой большой флаг развернули на площади перед зимним театром.
![](IMG_20141122_090828-PANO.jpg)
@@ -0,0 +1,13 @@
---
title: Тахикардия
date: '22:08 15-12-2015'
publish_date: '22:08 15-12-2015'
taxonomy:
category:
- Blog
tag:
- Жизнь
- gelonet.ru
---
Пульс 101 в покое. Перебор.
@@ -0,0 +1,15 @@
---
date: "2019-03-14 19:30:56"
taxonomy:
categories:
- blog
tags:
- blog
- gelonet.ru
title: "Первый пост"
---
# Наконец-то!
Почти два года пробуя различные системы, подходы и в несколько подходов формил наконец-то что-то рабочее изготовил для блога. На основе [Grav CMS](https://getgrav.org/)
Будем продолжать.
Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

@@ -0,0 +1,30 @@
---
title: 'Парад в Краснодаре'
media_order: image185613297.jpg
date: '22:13 22-04-2016'
publish_date: '22:13 22-04-2016'
taxonomy:
category:
- Blog
tag:
- Жизнь
- Казаки
---
![](image185613297.jpg)
Завтра и я там буду.
> [В Краснодаре состоится юбилейный парад Кубанского казачьего войска](http://krasnodar.bezformata.com/listnews/parad-kubanskogo-kazachego-vojska/46178949/)
>
> Парад, который пройдет в краевом центре в субботу 23 апреля, посвящен 25-летию со дня принятия Закона РФ «О реабилитации репрессированных народов и казачества». В мероприятии примут участие более 10 тысяч казаков, кадет и учащихся казачьих классов.
>
> Как сообщили в пресс-службе Кубанского казачьего войска, торжества в кубанской столице в 10.30 откроет молебен у войскового Собора Святого Благоверного князя Александра Невского.
>
> Затем казачьи парадные расчеты пройдут по улице Красной и построятся на Театральной площади. В 12.00 после выступления атамана Кубанского войска Николая Долуды и почетных гостей начнется торжественное прохождение казачьих парадных расчетов и военнослужащих.
>
> Также в параде примут участие взвод барабанщиков, пешая и конная группы Почетного караула, представители Кубанского казачьего хора и казачьих кадетских корпусов.
>
> Как сообщили в мэрии Краснодара, во время подготовки и проведения казачьего парада в центре города ограничат движение.
>
> Пресс-служба администрации Краснодарского края
Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

@@ -0,0 +1,127 @@
---
title: 'Ответ Сталинграда'
media_order: deti.jpg
date: '22:19 22-01-2017'
publish_date: '22:19 22-01-2017'
taxonomy:
category:
- Blog
tag:
- Политика
- gelonet.ru
---
![](deti.jpg)
[Столетие](http://www.stoletie.ru/territoriya_istorii/otvet_stalingrada_517.htm)
Возрождение города-героя начиналось… со школ
Людмила Овчинникова
11.03.2016
В газетах появляются пугающие цифры: в России 2 миллиона детей школьного возраста не ходят в школу. Они остаются неграмотными. Тысячи школ закрыты в сельской местности. В городах растет чисто беспризорников. Когда я читаю эти сообщения, то невольно вспоминаю, как мы учились в разрушенном Сталинграде. Возрождение города-героя началось именно со школ.
Деревянные улицы вокруг нашего дома сгорели, и, казалось, изрытый воронками Мамаев курган подвинулся к нам ещё ближе. Часами я бродила в поисках ящиков из-под снарядов. Из них мы сложили топчаны-кровати, соорудили стол и табуретки. Этими ящиками топили печурку.
Мы жили на огромном пепелище. От домов вокруг остались только обугленные печи. И чувство безысходной тоски, помню, не покидало меня: «Как мы будем жить?». Перед уходом из города бойцы полевой кухни оставили нам брикеты каши и полмешка муки. Но эти запасы таяли. Простуженные мама и 4-летняя сестренка лежали в углу, прижавшись друг к другу.
Я топила печь и готовила еду, сама себе напоминая пещерного человека: часами чиркая кремниевыми камешками, держа наготове паклю, старалась добыть огонь. Спичек не было. Собирала в ведерко снег и растапливала на печке.
Соседский мальчик сказал мне: под Мамаевым курганом в разрушенном цехе завода «Лазурь» выдают продукты. С мешком за плечами, в котором гремел немецкий котелок, я отправилась за продуктами. Нам не выдавали их с первых дней обороны Сталинграда, даже блокадных 100 граммов хлеба. Нас кормили бойцы.
Под Мамаевым курганом в руинах кирпичного здания я увидела женщину в потертом овчинном тулупе. Здесь выдавали продукты без денег и без продовольственных карточек. У нас их и не было. «У вас какая семья?» – только и спросила меня она. «Три человека», – честно ответила я. Могла бы сказать и десять – среди пепелищ это не проверишь. Но я была пионеркой. И меня учили – врать позорно. Я получила хлеб, муку, в котелок мне налили сгущенного молока. Выдали американскую тушенку.
Закинув мешок за плечи, я прошла несколько шагов, и вдруг на обугленном столбике увидела приклеенный листок, на котором было написано: «Дети с 1-го по 4-й класс приглашаются в школу». Был указан адрес: подвал завода «Лазурь». Я быстро нашла это место. Из-за деревянной двери подвала вырывались клубы пара. Пахло гороховым супом. «Может быть, здесь будут кормить?» – подумалось.
Вернувшись домой, сказала маме: «Пойду в школу!». Она удивилась: «Какая школа? Все школы сожжены и разбиты».
Перед началом осады города я собиралась пойти в 4-й класс. Радости не было предела.
Однако дойти до школы в подвале было не так просто: надо преодолеть глубокий овраг. Но поскольку в этом овраге мы играли и зимой и летом, я спокойно отправилась в дорогу. В овраг я привычно скатилась на полах пальто, а вот вылезти на противоположный крутой, заснеженный склон оказалось нелегко. Я хваталась за обрубленные ветки кустов, за пучки полыни, гребла густой снег руками. Когда вылезла на склон и огляделась – справа и слева от меня наверх карабкались дети. «Тоже идут в школу?» – подумала я. Так оно и вышло. Как потом узнала, некоторые жили еще дальше от школы, чем я. И на своем пути преодолевали даже два оврага.
Спустившись в подвал, над которым было написано: «Школа», я увидела сколоченные из досок длинные столы и скамейки. Как оказалось, каждый стол был закреплен за одним классом. На стене вместо доски была приколочена зеленая дверь. Между столами ходила учительница – Полина Тихоновна Бурова. Она успевала дать задание одному классу и вызвать к доске кого-то из другого. Разноголосица в подвале стала для нас привычной.
Вместо тетрадей нам выдали толстые конторские книги и так называемые «химические карандаши». Если смочить кончик стержня, то буквы выходили жирные, четкие. А если постругать ножом стержень, и залить водой – получались чернила.
Полина Тихоновна, старалась отвлечь нас от тяжелых мыслей, подбирала нам для диктантов далекие от темы войны тексты. Ее мягкий голос, помню, ассоциировался у меня с шумом ветра в лесу, терпким запахом степных трав, блеском песка на волжском островке.
В наш подвал постоянно доносились звуки взрывов. Это саперы очищали от мин железную дорогу, которая опоясывала Мамаев курган. «Скоро по этой дороге пойдут поезда, приедут строители восстанавливать наш город», – говорила учительница.
Никто из ребят, услышав взрывы, не отвлекался от занятий. Все дни войны в Сталинграде мы слышали взрывы и пострашнее, и поближе.
Даже сейчас, вспоминая нашу подвальную школу, не перестаю удивляться. На заводах еще не дымилась ни одна труба, не был пущен ни один станок, а мы, дети заводских рабочих, уже сидели в школе, выводили буквы и решали арифметические задачи.
Потом от Ирины, дочери Полины Тихоновны, мы узнали, как они добирались в город. В дни боев они эвакуировались в заволжское село. Когда услышали о победе под Сталинградом, то решили вернуться в город… Они шли в пургу, боясь заблудиться. Единственным ориентиром была Волга. В попутных хуторах их пускали к себе незнакомые люди. Давали еду и теплый угол. Полина Тихоновна и ее дочь прошли пятьдесят километров.
На правом берегу сквозь снежное марево они увидели руины домов, разбитые корпуса заводов. Это был Сталинград. По замерзшей Волге добрались в свой поселок. На месте родного дома остались только обугленные камни. До вечера бродили по тропкам. Вдруг из землянки вышла женщина. Она увидела и узнала Полину Тихоновну – учительницу своей дочери. Женщина позвала их в землянку. В углу, прижавшись друг к другу, сидели трое худых, затравленных войной детей. Женщина угостила гостей кипятком: такого понятия, как чай, не было в той жизни.
На другой день Полину Тихоновну потянуло к родной школе. Построенная перед войной белая, кирпичная, она была разрушена: здесь шли бои.
Мать и дочь пошли к центру поселка – к площади перед металлургическим заводом «Красный Октябрь», который был гордостью города. Здесь выпускали сталь для танков, самолетов, артиллерийских орудий. Теперь мощные мартеновские трубы были обрушены, разбиты бомбами корпуса цехов. На площади они увидели человека в стеганой фуфайке и тут же узнали его. Это был секретарь Краснооктябрьского райкома партии Кашинцев. Он поравнялся с Полиной Тихоновной и, улыбнувшись, сказал ей: «Вот и хорошо, что вы вернулись. Я ищу учителей. Надо открывать школу! Если вы согласитесь, есть хороший подвал на заводе «Лазурь». В землянках вместе с матерями остались дети. Надо постараться помочь им».
Полина Тихоновна отправилась на завод «Лазурь». Нашла подвал – единственный, сохранившийся здесь. У входа стояла солдатская кухня. Здесь можно будет варить детям кашу.
Бойцы МПВО вынесли из подвала разбитые пулеметы, гильзы. Полина Тихоновна написала объявление, которое поместила рядом с продуктовым ларьком. К подвалу потянулись дети. Так начиналась наша первая школа в разрушенном Сталинграде.
Потом уже мы узнали, что Полина Тихоновна вместе с дочерью жила в солдатском блиндаже на волжском откосе. Весь берег был изрыт такими солдатскими землянками. Их постепенно стали занимать вернувшиеся в город сталинградцы. Ирина рассказала нам, как они, помогая друг другу, с трудом выползали наверх по волжскому откосу - так Полина Тихоновна добиралась на урок. Ночью в блиндаже они стелили одно пальто на пол, а другим укрывались. Потом им подарили солдатские одеяла. Но к нам Полина Тихоновна всегда приходила подтянутая, со строгой прической. Меня больше всего поражал ее белый воротник на темном шерстяном платье.
Сталинградцы в ту пору жили в самых тяжелых условиях. Вот обычные картинки тех дней: пролом стены занавешен солдатскими одеялами – там люди. Свет коптилки пробивается из подвала. Под жилье занимали разбитые автобусы. Сохранились кинокадры: девушки-строители с полотенцами на плечах выходят из фюзеляжа сбитого немецкого самолета, стучат сапогами по немецкой свастике на крыле. Были и такие общежития в разрушенном городе… Жители варили еду на кострах. В каждом жилище стояли фронтовые лампы-«катюши». Патрон снаряда сдавливали с двух сторон. Внутрь щели просовывали полоску ткани, на дно наливали какую-нибудь жидкость, которая могла гореть. В этом чадящем круге света готовили еду, зашивали одежду, а дети готовились к урокам.
Полина Тихоновна сказала нам: «Дети, если найдете где-нибудь книги, приносите в школу. Пусть будут они даже – обгорелые, посеченные осколками». В нише стены подвала прибили полку, на которой появилась стопка книг. Зашедший к нам известный фотокорреспондент Георгий Зельма запечатлел эту картинку. Над нишей крупными буквами было выведено: «Библиотека».
…Вспоминая те дни, я больше всего удивляюсь тому, каким образом в детях теплилась тяга к учебе. Ничто – ни материнское наставление, ни строгие слова учителя не могли бы заставить нас перебираться через глубокие овраги, ползти по их склонам, идти по тропкам среди минных полей, чтобы занять свое место в школе-подвале за длинным столом.
Пережившие бомбежки и обстрелы, постоянно мечтавшие поесть досыта, одетые в залатанные обноски, мы хотели учиться.
Старшие дети – это был 4-й класс, помнили уроки еще в довоенной школе. А вот первоклассники, слюной смачивая кончики карандашей, выводили свои только первые буквы и цифры. Как и когда они-то успели получить эту благородную прививку – надо учиться! Непостижимо… Время, видно, было такое.
Когда в поселке появилось радио, репродуктор поместили на столбе над заводской площадью. И рано утром над разрушенным поселком раздавалось: «Вставай, страна огромная!». Может быть, это покажется странным, но детям военной поры казалось, что и к ним обращены слова этой великой песни.
Школы открывались и в других районах разрушенного Сталинграда. Спустя годы, я записала рассказ Антонины Федоровны Улановой, которая работала заведующей отделом народного образования Тракторозаводского района. Она вспоминала: «В феврале 1943 года в школу, где я работала после эвакуации, пришла телеграмма: «Выезжайте в Сталинград». Я отправилась в дорогу.
На окраине города в чудом сохранившемся деревянном доме нашла работников облоно. Получила такое задание: добраться в Тракторозаводский район и на месте определить – в каком здании можно собрать детей, чтобы начать уроки. В 30-е годы в нашем районе было построено четырнадцать прекрасных школ. Теперь я ходила среди руин – ни одной школы не осталось. По дороге встретила учительницу Валентину Григорьевну Скобцеву. Мы вместе стали искать помещение, хотя бы с крепкими стенами. Зашли в здание бывшей школы, которая была построена напротив тракторного завода. По ступеням разбитой лестницы поднялись на второй этаж. Ходили по коридору. Вокруг были куски штукатурки после бомбежки. Однако среди этого нагромождения камней и металла, нам удалось найти два помещения, где остались неразрушенные стены и потолки. Именно сюда, нам казалось, мы имеем право привести детей.
Учебный год начинали в марте. Повесили объявление об открытии школы на разбитых колоннах проходных тракторного завода. Я пришла на планерку, которую проводила дирекция завода. Выступила перед начальниками цехов: «Помогите школе»…
И каждый цех взялся сделать что-нибудь для детей. Помню, как через площадь рабочие несли металлические жбаны для питьевой воды. На одном из них было написано: «Детям от кузнецов».
Из прессового цеха в школу принесли отшлифованные до блеска металлические листы. Их поставили вместо классных досок. Они оказались очень удобными для письма. Бойцы МПВО побелили в классах стены и потолки. Вот только оконных стекол не нашли в районе. Открывали школу с разбитыми окнами».
Школьные классы в Тракторозаводском районе открыли в середине марта 1943 года. «У входа мы ждали своих учеников, – говорила А.Ф. Уланова. – Мне запомнился первоклассник Гена Хорьков. Он шел с большой холщовой сумкой. Мать, видимо, надела на мальчика самое теплое, что нашла – стеганную на вате фуфайку, которая доходила ему до пят. Фуфайку перевязали веревкой, чтобы она не упала с плеч. Но надо было видеть – какой радостью светились глаза мальчика. Он шел учиться».
Первый урок – был единый для всех, пришедших в школу. Учительница В.Г. Скобцева назвала его уроком надежды. Она говорила детям о том, что город возродится. Будут построены новые кварталы, Дворцы культуры, стадионы.
Окна класса были разбиты. Дети сидели в зимней одежде. В 1943 году кинооператор запечатлел эту картину.
Впоследствии эти кадры вошли в киноэпопею «Неизвестная война»: дети, закутанные в платки, озябшими руками выводят буквы в тетрадках. Ветер, врываясь в разбитые окна, теребит страницы.
Поражает выражение лиц детей и то, с каким сосредоточенным вниманием они слушают учителя.
Впоследствии, через годы мне удалось найти учащихся этой первой школы Тракторозаводского района. Л.П. Смирнова, кандидат сельскохозяйственных наук, рассказывала мне: «Мы знали, в каких трудных условиях живут наши учителя. Кто в палатке, кто в землянке. Одна из педагогов жила под лестничной клеткой школы, огородив себе угол досками. Но когда учителя приходили в класс, мы видели перед собой людей высокой культуры. Что значило тогда для нас учиться? Это все равно, что дышать. Потом я сама стала педагогом и осознала, что наши учителя умели поднять урок до духовного общения с детьми. Несмотря на все тяготы, они сумели внушить нам жажду познания. Дети не только изучали школьные предметы. Глядя на своих педагогов, мы учились трудолюбию, стойкости, оптимизму». Л.П. Смирнова рассказала также о том, как обучаясь среди руин, они увлеклись театром. По программе проходили «Горе от ума» А.С. Грибоедова. Дети под руководством учителей поставили это произведение в школе. Софья вышла на сцену в длинной юбке с кружевами, которая передала ей бабушка. Эту юбку, как и другие вещи, зарывали в землю, чтобы сберечь их во время пожара. Девочка, чувствуя себя в нарядной юбке до пят, произносила монологи Софьи. «Мы тянулись к творчеству, – говорила Л.П. Смирнова. – Писали стихи и поэмы».
В Сталинград, по призыву ЦК комсомола, приехали тысячи молодых добровольцев. На месте они учились строительному делу. А.Ф. Уланова рассказывала: «Наш завод был оборонным – выпускал танки. Надо было восстанавливать цеха. Но часть молодых строителей направили на ремонт школ. Около фундамента нашей школы появились груды кирпичей, доски и ручная бетономешалка. Так выглядели приметы возрождающейся жизни. Школы были в числе первых объектов, которые восстанавливали в Сталинграде».
1-го сентября 1943 года на площади перед тракторным заводом состоялся митинг. На него пришли молодые строители, рабочие завода и учащиеся. Митинг был посвящен открытию первой восстановленной в районе школы. Ее стены были еще в лесах, внутри работали штукатуры. Но учащиеся прямо с митинга отправились в классы и сели за парты.
В подвале на заводе «Лазурь» наша учительница Полина Тихоновна летом 1943 года предложила нам: «Дети! Давайте собирать кирпичи для восстановления нашей школы». Трудно передать, с какой радостью мы бросились выполнять эту ее просьбу. Неужели у нас будет школа?
Мы собирали в руинах пригодные кирпичи и складывали их в штабели около своей разбитой альма-матер. Ее построили перед войной, и она тогда казалась нам дворцом среди наших деревянных домиков. В июне 1943-го здесь появились каменщики, арматурщики. С барж рабочие сгружали кирпичи, мешки с цементом. Это были подарки разрушенному Сталинграду. Началось восстановление и нашей школы.
В октябре 1943 года мы пришли в первые, отремонтированные классы. Во время уроков слышали стук молотков – в других помещениях продолжались восстановительные работы.
Мы, как и наши соседи – дети Тракторозаводского района, тоже увлеклись театром. На классику не решились посягнуть. Сами придумали незамысловатую сценку, действие которой происходило в Париже. Почему нам среди руин взбрело это в голову, не знаю. Никто из нас не видел даже фотографии Парижа. Но мы упорно готовились к постановке. Сюжет был простой и наивный. В парижское кафе приходит немецкий офицер и официантка-подпольщица должна подать ему отравленный кофе. В кафе находится также группа подпольщиков. Они должны спасти официантку, поскольку за стеной слышны голоса немецких солдат. Наступил день нашей премьеры. На меня, игравшей роль официантки, вместо передника нацепили вафельное полотенце. Но где взять кофе? Мы взяли два кирпича и потерли их. Кирпичную крошку насыпали в стакан с водой.
«Офицер», едва прикоснувшись губами к стакану, падает на пол, изображая мгновенную смерть. «Официантку» быстро уводят.
Не могу передать, какие бурные аплодисменты были в зале: ведь еще шла война, а тут на сцене, на глазах у всех убили вражеского офицера! Этот незамысловатый сюжет пришелся по душе детям, измученным войной.
Прошли годы, и когда я впервые летела в командировку в Париж, где должна была встретиться с княгиней Шаховской, участницей французского Сопротивления, я вспоминала нашу наивную пьесу в разрушенном Сталинграде.
… А тогда, летом 1943 года, по ночам я видела, как мимо нашего дома с тракторного завода шли танки, на борту каждого из них белой краской было написано: «Ответ Сталинграда». Заводской конвейер еще не был пущен. Эти танки специалисты собирали, снимая детали с разбитых танков. Эти слова «Ответ Сталинграда» мне хотелось написать мелом и на стене нашей восстановленной школы. Но я почему-то постеснялась это сделать, о чем до сих пор жалею.
Специально для Столетия
@@ -0,0 +1,26 @@
+++
title = "Выбор статического генератора сайтов"
date = "2019-03-05"
description = "размышления на тему статических генераторов и их использоватния"
tags = [
"blog",
"мысли",
]
+++
# Выбор генератора статического сайта
Анализ того ресурса, что размещен на хостинге и называется моим сайтом, показал что я замечательно и без проблем живу на flat cms Grav (плоская CMS без базы данных). При этом я здорово сэкономил на хостинге. Мой месячная абонплата на [jino.ru](http://jino.ru) не дотягивала даже до 80 рублей. Поэтому мне показалочь логичным сделать следующий шаг и перейти на полностью статический сайт генерируемый из текстовых файлов (мне понравился язык разметки Markdown), хранимых в каком-либо облаке, например на GitHub.
Оказалось таких хитрецов как я полным-полно и в сети легко найти тонный инструментов для такой работы. Поскольку я неофит в Python и уже успел ознакомиться с шаблонизатором Jinja2, то и сформировал для себя следующий набор требований к генератору статического сайта:
1. Реализация на Python. Для работы и на ноутбуке с GNU\Linux и на домашнем компе с Windows 10. Опять же с исследовательскими целями полезно работать с инструментом написанном на Python.
2. Работа с данными в файлах Markdown. Это удобный язык разметки, позволяющий легко реализовывать все нужные мне средства орагнизации текста.
3. Работа с шаблонизатором Jinja2. Удобный и мощный шаболнизатор. Понравился мне он, да и папа мой называл меня в детстве Джинджя.
4. Возможность работы с плагинами.
5.
В итоге непродолжительных поисков нашёл в сети сайт [https://www.staticgen.com/](https://www.staticgen.com/) и на нем по указанным параметрам отобрал вот такое вот решение:
[https://blog.getpelican.com/](https://blog.getpelican.com/)
[https://github.com/getpelican/](https://github.com/getpelican/)
[http://www.pelicanthemes.com/](http://www.pelicanthemes.com/)
@@ -0,0 +1,62 @@
+++
title = "Быстрый старт работы с Pelican"
date = "2019-03-10"
description = "описание как быстро настроить и запустить статический генератор сайтов Pelican"
tags = [ "blog", "linux",
]
+++
# Быстрый старт
Настоятельно рекомендуем прочитать полную версию документации, но для особо нетерпеливых ниже представлен ряд шагов, чтобы быстро начать работу.
# Подготовка
В системе GNU/Linux Debian Buster по-умолчанию уже устанолен Python 3.7 Установим утилиту для создния виртуального окружения venv.
`$ sudo aptitude install python3-venv`
Он включает в свой состав утилиты pip для установки пакетов
Создаем каталог в котором будет работать Pelican:
`$ mkdir pelican && cd pelican`.
Создаем внутри каталога виртуальную среду Pytnon `$ python3 -m venv pelicanenv` и активируем её командой `$ source pelicanenv/bin/activate`
# Установка
Устанавливаем Pelican (и дополнительно Markdown) на Python 3.7+, выполнив следующую команду в терминале:
`(pelicanenv) $ pip install pelican[Markdown]`
# Создание проекта
Выбираем имя для проекта и создаем каталог с соответствующим именем для сайта и переходим в этот каталог:
`(pelicanenv) $ mkdir -p ./projects/yoursite.ru
(pelicanenv) $ cd ./projects/yoursite.ru`
Дальше создаем основу для проекта с помощью команды `pelican-quickstart`. Эта команда задаст несколько вопросов о создаваемом сайте. На вопрос о URL адресе сайта следует ответить в том же виде как будет отображено в примере http://yoursite.ru
# Создаем статью
Для того чтобы запустить Pelican потребуется создать хотя бы одну статью. Для этого в любом тектосовм редакторе создаем файл со следующим cодержимым:
`Title: Мой Первый Отзыв
Date: 2020-05-04 10:20
Category: Обзор
Ниже приведен обзор моей любимой механической клавиатуры.`
Поскольку эта статья для примера рассматривает работу с данными в формате Markdown, то сохранить его нужно как `./projects/yoursite.ru/content/keyboard-review.md`.
# Генерируем сайт
В корневом каталоге проекта `./projects/yoursite.ru/`выполните pelican-команду для создания сайта:
`(pelicanenv) $ pelican content`
В результате выполенния команды сайт был создан внутри каталога `./projects/yoursite.ru/output`. В процесе работы могут отобразиться предупреждения, относящееся к RSS лентам, но это нормально при локальном развертывании и можно пока не обращать на них внимание.
# Предварительный просмотр сайта
Открываем сеанс терминала, перейдим в корневой каталог проекта `./projects/yoursite.ru/`и выполняем команду для запуска веб-сервера Pelican:
`(pelicanenv) pelican --listen`
Теперь просмотреть сгенерированный сайт можно перейдя на http://localhost:8000/ в браузере.
Более подробная информация содержится вдокументации, продолжайте изучать её. Так же на странице [Tutorials](https://github.com/getpelican/pelican/wiki/Tutorials) wiki Pelican приведены ссылки на опубликованные сообществом руководства.
# Источники
https://python-scripts.com/virtualenv
https://docs.getpelican.com/en/stable/quickstart.html
@@ -0,0 +1,24 @@
+++
title = "Сохранение и перенос настроек на новую установку GNU/Debian Linux"
date = "2019-03-14"
draft = "true"
description = "Мне ни разу не удавалось перейти на новуюверсию Debian без усановки системы с нуля. Видимо как-то криво я ставил или удалял пакеты, что при смене версии ни разу зависимости у меня не разрешались. Поэтому приходиться разрабатывать схему покоторой я с минимальными затратами времени и сил смогу перейти на свежую версию"
tags = [
"gnu/linux",
"debian",
]
+++
# Переустановка Debian
Мне ни разу не удавалось перейти на новуюверсию Debian без усановки системы с нуля. Видимо как-то криво я ставил или удалял пакеты, что при смене версии ни разу зависимости у меня не разрешались. Поэтому приходиться разрабатывать схему покоторой я с минимальными затратами времени и сил смогу перейти на свежую версию.
Для себя определил следующие этапы:
1. Сбор инормации об установленных пакетах
2. Резервное копирование настроек установленных пакетов на github
3. Подготовка установочного носителя
4. Установка новой системы
5. Установка пакетов
6. Применение настроек
7. Разбор ошибок
#1. Сбор информации об установленных пакетах
+22
View File
@@ -0,0 +1,22 @@
---
title: 'Стороженко Евгений Владимирович'
date: '2019-03-14'
description: 'Сам о себе ничего сказать не могу'
---
## Мета ( с греческого, "О себе")
Я отец, муж, сын, казак в конце-концов. С раннего возаста интересовался электронно-вычислительной техникой и прикладными ИТ дисциплинами. Так получилось, что и работать стал именно в отрасли ИТ. Сначала системным администратором общего профиля ( на слэнге эникейщиком), потом специализировался на Windows инфраструктуре предприятия и наконец стал управленцем. Кстати именно эта позиция и соответствует профильному образоиванию, а работа техническим специалистом как раз была для души.
## Образование
С 1999 по 2005 студент Московского Государственого Технического Универсистета МГТУ им. Н.Э. Баумана. Сначала на факультетет РЛ-6 ,потом ИУ-1. В 2005 перевёлся в Геленджикский филал Сочинского Государственного Университета Туризма и Курортного дела, обучение закончено в 2008.
avatar: 'http://gelonet.ru/user/accounts/avatars/avatar-suite-square.jpg'
twitter: 'https://twitter.com/kpa39l'
instagram: 'https://www.instagram.com/kpa39l.umputun/'
facebook: 'https://www.facebook.com/kpa39l'
vk: 'https://vk.com/kpa39l'
Страница не закончена.
@@ -0,0 +1,18 @@
---
title: 'Яндекс.Браузер для Linux'
date: '22:02 31-10-2014'
publish_date: '22:02 23-03-2019'
taxonomy:
category:
- Blog
tag:
- Linux
- gelonet.ru
---
Наконец-то! Вышла первая Бета браузера Яндекса под Линукс.
Cейчас-cейчас попробуем. И на компе и на планшете.
Очень интересно что можно в облаке хранить.
[http://browser.yandex.ru/beta](http://browser.yandex.ru/beta)
Binary file not shown.

After

Width:  |  Height:  |  Size: 357 KiB

@@ -0,0 +1,11 @@
---
title: 'Переезд с Google+'
media_order: img10.png
published: true
date: '19:29 04.04.2019'
---
Сегодня завершил перевоз информации из Google+. Пришлось вручную перелопатить сообщения с 2012 года. Нудная и не интересная работа.
Зарёкся на сторонних ресурсах что-то выкладывать. Только ссылки.
Конечно, там ничего очобо важного и неповторимого не было. Как сейчас модно говорить "эксклюзивный контент" не присутствует, но всё же это мои силы, мо время, мой след. =)
Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

@@ -0,0 +1,67 @@
---
title: 'Зачем переопределять темы в Grav CMS'
media_order: grav-logo.png
date: '2019-04-11T19:27:00+03:00'
taxonomy:
category:
- Blog
tag:
- GravCMS
- gelonet.ru
---
Сегодня вышло обновление используемой мной темы оформления [Quark](https://getgrav.org/downloads/themes). В результате чего все изменения внесенные в файлы темы перезписались свежей версией. Чтобы опять не попадать в такую ситуацию ребя с проекта [gravcms.ru](http://gravcms.ru/) написали [короткую инструкцию](http://gravcms.ru/doc/theme) по переопредению стандартных тем. Пока петух не клюнул в это твопрос даже непытался погружаться в этот вопрос.
[Переопределение стандартного шаблона Grav](http://gravcms.ru/doc/theme)
Этот вам очень пригодится, если вы хотите сохранить обновляемость, оригинальной темы, но при этом что-то изменить. Допустим изменить сайтбар.
Создайте папку user/themes/mytheme - здесь будет храниться ваша тема.
Создайте файл /user/themes/mytheme/mytheme.yaml здесь сделаем взаимосвязь темы
> streams:
>
> schemes:
>
> theme:
>
> type: ReadOnlyStream
>
> prefixes:
>
> '':
>
> - user/themes/mytheme
>
> - user/themes/antimatter
>
_user/themes/mytheme_ - mytheme - это ваша тема
_user/themes/antimatter_ - antimatter - тема которую вы переопределяете
Создайте файл /user/themes/mytheme/blueprints.yaml - укажите основные элементы темы.
> name: MyTheme
> version: 1.0.0
> description: "Extending Antimatter"
> icon: crosshairs
> author:
> name: Team Grav
> email: devs@getgrav.org
> url: http://getgrav.org
Теперь можете пройти в админ панель и указать ваш новый шабон, как основной.
Создайте файл user/themes/mytheme/mytheme.php - это будет новый класс темы.
> <?php
> namespace Grav\Theme;
> class Mytheme extends Antimatter
> {
> // Some new methods, properties etc.
> }
> ?>
mytheme - это ваша новая тема
Antimatter - это тема донор
Теперь вы можете скопировать файл sidebar.html.twig из antimatter/templates/partials в mytheme/templates/partials и спокойной его изменять уже в вашей теме.
Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

@@ -0,0 +1,39 @@
---
title: 'ICQ для замены Whatsapp и Viber'
media_order: 'Замещающий текст (1).png,Screenshot_2019-04-28-19-23-17-183_com.icq.mobile.client (2).png,Screenshot_2019-04-28-19-23-17-183_com.icq.mobile.client.png,screenshot-icq.com-2019-04-28-18-02-52-634.png,2019-04-28_19-50-10.png'
date: '2019-04-28T21:28:00+03:00'
taxonomy:
category:
- Blog
tag:
- 'Мгновенные сообщения'
---
В очередной раз наткнувшись в сети на сообщения о том что Роскомнадзор обратил свой взор еще и не Whatsaap и Viber, помимо Telegram, я задумался над поиском программы которая сможет их заменить. К сожалению, заменить Телеграмм в настоящий момент нечем, ни одна программа из знакомых мне не обладает такой дичайшей функциональность.
Так вот, для меня было удивительным узнать что старая добрая тёплая и ламповая аська незаметно догнала их по общей функциональности. Есть версии для носимых и настольных вычислителей, с личными и групповыми чатами, бесплатными голосовыми и видеозвонками, каналами для подписчиков и стикерами. А также в видеозвонках поддерживаются анимированные 3D-мас. С 2010 года icq один из трёх программ обмена сообщениями принадлежащих Mailru Group. наравне с Mail.ru Agent и ТамТам. И ежедневная аудитория составляет больше 11 миллионов пользователей (не только русскоязычных). Давайте посмотрим поближе!
![Главный экран сайта icq.com](screenshot-icq.com-2019-04-28-18-02-52-634.png)
Как видно из скриншота главной страницы сайта клиентские программы есть под все основные платформы, как носимых, так и настольных вычислителей. Что для меня оказалось приятным сюрпризом, клиент под Linux распространяется по Apache Public License 2.0 и исходные коды лежат на Github. Что лично для меня является жирным плюсом, при том что сам протокол и сервера остаются проприетарными и недоступными для изучения.
Себе поставил сразу два клиента, на ноут с Windows 10, с которого и пишу этот текст, и на мобильник под Андройдом из магазина Google Play. Авторизация может проходить как через старый UIN и электронную почту, так и через номер мобильного телефона. Тут пригодился намертво вбитый в память 8-ми значный номер =) Всё работает, как и 20 лет назад, контакт лист подтянулся нормально, даже с группами (хотя для официального клиентского приложения это неактуально).
Восстановил пароль, он пришёл на привязанную почту. Кстати при восстановлении пароля принудительно привязывается номер телефона к аккаунту.
![Экран звонков](Screenshot_2019-04-28-19-23-17-183_com.icq.mobile.client%20%282%29.png)
В клиенте для носимого вычислителя под Андройдом есть кнопка Каналы, в настольном приложении нет. В результате, читать можно, а искать подписываться нельзя. Странное разделение функционала. Канылы, очень похожи на Телеграм. Нужно теперь узнавать, что там с ботами. Если они есть, то это же ого-го!
С передачей файлов все наоборот. На клиенте для носимых вычислителей я скрепочку для отправки файлов не обнаружил, только иконку камеры для отправки видео и фото. А вот на настольном клиенте, только скрепочка и есть в инструментах чата.
Чтобы отправить голосове сообщение нужно сначала выбрать метод ввода, а потом нажать и удерживать кнопку для записи сообщения. Зато сообщение можно распознать в текст. Что очень удобно и страшно бесила в Whatsup-е необходимость прослушивать голосовые сообщения, что не всегда удобно. Особенно когда их в чате много.
Стикеры есть разные. Можно загрузить стакеры из Телеграма. Или создавать свои. Для этого нужно Stikers боту отправить картинку, в том числе и gif. Опять же функционал есть только в клиенте для носимых вычислителей. Сам стикерами не пользуюсь, но многим это важно.
Безопасность. Есть возможность блокирования экрана. В состав клиента зачем-то входит OpenSSL уж не для шифрования соединений с сервером ли? Потому как функционала защищенных чатов я не нашёл.
![Экран чатов настольного приложения](2019-04-28_19-50-10.png)
Рассылку сообщения сразу нескольким адресатам сделать не получилось? только переслать полученное сообщение. Ограничения на количество получателей отсутствует. Так что поздравительные штормы сообщений создавать не очень удобно. Конечно, можно создать группу в которой будут все контакты и создать сообщение в ней. Но как-то это очень криво.
**Вывод: Думаю можно переходить. Функцонал уже достаточен для повседневного использования. С учётом всяких непонятностей с блокировками. Хранением Персональных данных на территории РФ и прочими законодательными вывертами в виде автономного интернета, то лучше переходить на "отечественные" сервисы. Ностальгия при звуке "А-ау" - бесценно.**
Binary file not shown.

After

Width:  |  Height:  |  Size: 150 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 117 KiB

@@ -0,0 +1,38 @@
---
title: 'Python - новый английский?'
date: '2019-05-05T17:26:00+03:00'
feed:
limit: 10
tags:
- python
- gelonet.ru
---
Я, как и многие другие, нахожусь в поиске так называемых "востребованных навыков". Для чего взрослым людям, давно выбравшим свой професиональный путь приходится опять следить за требованиями работодателей, сравнивать и выбирать новые навыки и наконец тратить свои весьма скромные ресурсы на изучение их изучение без особой надежды на то что эти затраты окупятся? И я имею ввиду не винансовую сторону, а тот единственный бесценый ресурс - личное время?
Ответ прост - конкуренция на рынке труда. Пройти первичный отбор на вакансию с каждым годом всё сложнее, часто в описании вакансий работодатели указывают совершенно не нужные, но модные или известные слова (подразумевая под ними технологии, но даже не понимая предпосылок их использования). И теперь каждому наемному работнику приходится постоянно актуализировать своё резюме, вставляя туда можные словечки или отсылки к проектам где они используются.
Лет 20 назад таким можным поветрием было требование в знании английского. Во всех вакансиях было указано, что имеющим занние иностраного языка дается предпочтение. И не важно что партнеров из-за рубежа у компании нет, амбиции были у всех. Все выходили на международный рынок. Ничего что собеседование проводили люди которые сами могли общаться на уровне "моя твоя понимай". Но выставлять вакансию без этого требования было уроном пристижа.
Теперь же, когда требования к личной эффективности сотруников достигают простозаоблачных высот, сотрудник перестает быть специалистом, а должен выступать в качестве этакого комбайна для решения проблем бизнеса (я сейчас про "менеджеров" среднего звена говорю), то на первое место выходят навыки позволяющие этого специалиста эксплуатировать максимально эффективно:
управление рабочим временем,
коммуникабельность,
проектная работа
отсутствие семьи,
крепкое здоровье,
навыки работы с вычислителями.
Про последний навык я как раз и пишу эту заметку. Сейчас сотрудник должен не просто выполнять задачи, а делать это быстро и красиво. Отчёт за квартал? Это должна быть презентация с данными и графиками из табличного процессора в корпоративных цветах и с данными обновляемыми в релаьном времени. Сроки исполнения? Два часа на всё про всё. Современный сотрудник в нерабочее время с телефона теперь должен иметь доступ к рабочим материалам чтобы готовить документы или собирать отчёты. Ведь личное время - святое нечего его в офисе проводить, будь с семьей но именно этот отчёт нужен прямо сейчас.
А что в массе своей составляет офисная рутина? Преславутая подготовка отчётности по выполненным работам, акуализация различных списков и справочников. Планы работы и бюджеты. Причем структура данных из периода в период меняются мало. Да иисходные данные чащевсего представлены ввидеатомарных пераций (например платежа по статье бюджета). Вот тут-то как раз и открывается пространство для повышения личной эффективности в автоматизации работы.
Конечно сущетсвует достаточно большое количество инструментов. Но свободная часть этих инструментов редко может похвалиться наличием всего необходимого функционала, а коммерческие стоятнегуманных денег для лисного использвоания.Вот тут как раз и проявляется тот навык который очень здорово повысить стоимость сотрудника или освободить для него рабочее вермя. Автоматизация своих задач с помощью скриптовых языков. Идеальным интрументом для меня оказался Python. Из-за своей "всеядности" и распространенности. Возможности работы различных операционных системах и большого сообщества пользователей.
З.Ы.
Ссылки с обучающими материалами с одной из встреч с разработчиками Python:
[5 лучших веб-сайтов для изучения Python](https://www.kverner.ru/5-luchshih-sajtov-dlya-izucheniya-python/)
[Шаблоны Python](https://github.com/faif/python-patterns)
[Пример структуры приложения](https://github.com/donnemartin/system-design-primer)
[Детальный план изучения Computer Sciense для желающих стать разработчиком ПО](https://github.com/jwasham/coding-interview-university)
@@ -0,0 +1,8 @@
---
title: '10 способов ускорить работы c LibreOffice'
date: '2019-06-01T17:05:45+03:00'
feed:
limit: 10
draft: 'true'
---
Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

@@ -0,0 +1,86 @@
---
title: 'Как проверить SSD на ошибки, состояние диска и атрибуты SMART'
media_order: 'wmic-diskdrive-get-status-ssd.png,crucial-storage-executive-ssd-utility.png,crystaldiskinfo-decimal-raw-values.png,crystaldiskinfo-smart-main.png'
date: '2020-03-09T16:10:45+03:00'
tags:
- windows
- gelonet.ru
feed:
limit: 10
---
Проверка SSD на ошибки — не то же самое, что аналогичные тесты обычных жестких дисков и многие привычные вам средства здесь по большей части не подойдут в связи с особенностями работы твердотельных накопителей.
В этой инструкции подробно о том, как проверить SSD на ошибки, узнать его состояние с помощью технологии самодиагностики S.M.A.R.T., а также о некоторых нюансах выхода диска из строя, которые могут быть полезны.
# Встроенные средства проверки дисков Windows 10, 8.1 и Windows 7
Для начала о тех средствах проверки и диагностики дисков Windows, которые применимы к SSD. В первую очередь речь пойдет о CHKDSK. Многие используют эту утилиту для проверки обычных жестких дисков, но насколько она применима к SSD?
В некоторых случаях, когда речь идет о возможных проблемах с работой файловой системы: странное поведение при действиях с папками и файлами, «файловая система» RAW вместо ранее рабочего раздела SSD, вполне можно использовать chkdsk и это может быть эффективным. Путь, для тех, кто не знаком с утилитой, будет следующим:
1. Запустите командную строку от имени администратора.
2. Введите команду chkdsk C: /f и нажмите Enter.
3. В команде выше букву диска (в примере — C) можно заменить на другую.
4. После проверки вы получите отчет о найденных и исправленных ошибках файловой системы.
В чем особенность проверки SSD по сравнению с HDD? В том, что поиск поврежденных секторов с помощью дополнительного параметра, как в команде chkdsk C: /f /r производить не нужно и бессмысленно: этим занимается контроллер SSD, он же переназначает сектора. Аналогично, не следует «искать и исправлять бэд-блоки на SSD» с помощью утилит наподобие Victoria HDD.
Также в Windows предусмотрен простой инструмент для проверки состояния диска (в том числе SSD) на основании данных самодиагностики SMART: запустите командную строку и введите команду wmic diskdrive get status
![](wmic-diskdrive-get-status-ssd.png)
В результате её выполнения вы получите сообщение о статусе всех подключенных дисков. Если по мнению Windows (которое она формирует на основании данных SMART) всё в порядке, для каждого диска будет указано «Ок».
# Программы проверки SSD дисков на ошибки и анализа их состояния
Проверка ошибок и состояния SSD накопителей производится на основании данных самодиагностики S.M.A.R.T. (Self-Monitoring, Analysis, and Reporting Technology, изначально технология появилась для HDD, где применяется и сейчас). Суть в том, что контроллер диска сам записывает данные о состоянии, произошедших ошибках и другую служебную информацию, которая может служить для проверки SSD.
Есть множество бесплатных программ для чтения атрибутов SMART, однако начинающий пользователь может столкнуться с некоторыми проблемами при попытке разобраться, что значит каждый из атрибутов, а также с некоторыми другими:
Разные производители могут использовать разные атрибуты SMART. Часть из которых попросту не определена для SSD других производителей.
Несмотря на то, что вы можете ознакомиться со списком и объяснениями «основных» атрибутов S.M.A.R.T. в различных источниках, например на Википедии: https://ru.wikipedia.org/wiki/S.M.A.R.T, однако и эти атрибуты по-разному записываются и по-разному интерпретируются различными производителями: для одного большое число ошибок в определенном разделе может означать проблемы с SSD, для другого — это просто особенность того, какие именно данные туда записываются.
Следствием предыдущего пункта является то, что некоторые «универсальные» программы для анализа состояния дисков, особенно давно не обновлявшиеся или предназначенные в первую очередь для HDD, могут неверно уведомлять вас о состоянии SSD. Например, очень легко получить предупреждения о несуществующих проблемах в таких программах как Acronis Drive Monitor или HDDScan.
Самостоятельное чтение атрибутов S.M.A.R.T. без знания спецификаций производителя редко может позволить обычному пользователю составить правильную картину о состоянии его SSD, а потому здесь используются сторонние программы, которые можно разделить на две простые категории:
**CrystalDiskInfo** — самая популярная универсальная утилита, постоянно обновляющаяся и адекватно интерпретирующая атрибуты SMART большинства популярных SSD с учетом информации производителей.
**Программы для SSD от производителей** — по определению знают все нюансы содержимого атрибутов SMART твердотельного накопителя конкретного производителя и умеют правильно сообщить о состоянии диска.
Если вы — рядовой пользователь, которому требуется просто получить сведения о том, какой ресурс SSD остался, в хорошем ли он состоянии, а при необходимости и автоматически произвести оптимизацию его работы — я рекомендую обратить внимание именно на утилиты производителей, которые всегда можно скачать бесплатно с их официальных сайтов (обычно — первый результат в поиске по запросу с названием утилиты).
**Samsung Magician** — для SSD Samsung, показывает состояние диска на основании данных SMART, количество записанных данных TBW, позволяет просмотреть атрибуты напрямую, выполнить настройки диска и системы, обновить его прошивку.
**Intel SSD Toolbox** — позволяет произвести диагностику SSD от Intel, просмотреть данные о состоянии и произвести оптимизацию. Отображение атрибутов SMART доступно и для дисков других производителей. Утилита Intel SSD Toolbox
**Kingston SSD Manager** — сведения о техническом состоянии SSD, оставшийся ресурс по разным параметрам в процентах. Kingston SSD Manager
**Crucial Storage Executive** — оценивает состояние как для SSD Crucial, так и других производителей. Дополнительные возможности доступны только для фирменных накопителей. Утилита для SSD Crucial Storage Executive
**Toshiba / OCZ SSD Utility** — проверка состояния, настройка и обслуживание. Отображает только фирменные накопители.
**ADATA SSD Toolbox** — отображает все диски, но точные данные о состоянии, в том числе оставшемся сроке службы, количестве записанных данных, проверить диск, выполнить оптимизацию системы для работы с SSD. Программа ADATA SSD Toolbox
**WD SSD Dashboard** — для дисков Western Digital.
**SanDisk SSD Dashboard** — аналогичная утилита для дисков
В большинстве случаев указанных утилит оказывается достаточно, однако, если ваш производитель не позаботился о создании утилиты проверки SSD или есть желание вручную разобраться с атрибутами SMART, ваш выбор — CrystalDiskInfo. Однако существуют и более простые утилиты, позволяющие, к примеру, получить информацию об ожидаемом сроке службы SSD диска, например, [SSDLife](https://ssd-life.ru/).
# Как пользоваться CrystalDiskInfo
Скачать CrystalDiskInfo можно с официального сайта разработчика https://crystalmark.info/en/software/crystaldiskinfo/ — несмотря на то, что установщик на английском (доступна и portable версия в ZIP-архиве), сама программа будет на русском языке (если он не включится сам, измените язык на русский в пункте меню Language). В этом же меню вы можете включить отображение названий атрибутов SMART на английском (как они указаны в большинстве источников), оставив интерфейс программы русскоязычным.
![](crystaldiskinfo-smart-main.png)
Информация SMART в CrystalDiskInfo
Что дальше? Дальше вы можете ознакомиться с тем, как программа оценивает состояние вашего SSD (если их несколько — переключение в верхней панели CrystalDiskInfo) и заняться чтением атрибутов SMART, каждый из которых, помимо названия, имеет три столбца с данными:
**Текущее (Current)** — текущее значение атрибута SMART на SSD, обычно указывается в процентах оставшегося ресурса, но не для всех параметров (например, температура указывается иначе, с атрибутами ошибок ECC та же ситуация — кстати, не паникуйте, если какой-то программе не понравится что-то связанное с ECC, часто дело в неверной интерпретации данных).
**Наихудшее (Worst)** — худшее зарегистрированное для выбранного SSD значение по текущему параметру. Обычно совпадает с текущим.
**Порог (Threshold)** — порог в десятичной системе счисления, при достижении которого состояние диска должно начать вызывать сомнения. Значение 0 обычно говорит об отсутствии такого порога.
**RAW-значения (RAW values)** — данные, накопившиеся по выбранному атрибуту, по умолчанию отображаются в шестнадцатеричной системе счисления, но можно включить десятичную в меню «Сервис» — «Дополнительно» — «RAW-значения». По ним и спецификациям производителя (каждый может по-разному записывать эти данные) вычисляются значения для столбцов «Текущее» и «Наихудшее». Включение десятичного отображения для RAW в CrystalDiskInfo
![](crystaldiskinfo-decimal-raw-values.png)
А вот интерпретация каждого из параметров может быть разной для разных SSD, среди основных, которые доступны на разных накопителях и легко читаются в процентах (но в RAW-значениях могут иметь разные данные) можно выделить:
**Reallocated Sector Count** — количество переназначенных блоков, тех самых «бэд-блоков», о которых шла речь в начале статьи.
**Power-on Hours** — время наработки SSD в часах (в RAW-значениях, приведенных к десятичному формату, обычно указываются именно часы, но не обязательно).
**Used Reserved Block Count** — количество использованных резервных блоков для переназначения.
**Wear Leveling Count** — процент износа ячеек памяти, обычно считается на основании количества циклов записи, но не у всех марок SSD.
**Total LBAs Written, Lifetime Writes** — количество записанных данных (в RAW значениях могут блоки LBA, байты, гигабайты).
**CRC Error Count** — выделю этот пункт среди прочих, потому как при нулях в других атрибутах подсчета разных типов ошибок, этот может содержать какие-либо значения. Обычно, всё в порядке: эти ошибки могут накапливаться при внезапных отключениях питания и сбоях ОС. Однако, если число растет само по себе, проверьте, чтобы ваш SSD был хорошо подключен (не окисленные контакты, плотное подключение, исправный кабель).
Если какой-то атрибут не ясен, отсутствует в Википедии (ссылку приводил выше), попробуйте просто выполнить поиск по его названию в Интернете: вероятнее всего, его описание будет найдено.
В заключение одна рекомендация: при использовании SSD для хранения важных данных, всегда имейте их резервную копию где-либо ещё — в облаке, на обычном жестком диске, оптических дисках. К сожалению, с твердотельными накопителями актуальна проблема внезапного полного выхода из строя без каких-либо предварительных симптомов, это нужно учитывать.
Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

@@ -0,0 +1,80 @@
+++
title = "Atom + markdown"
date = "2020-05-03"
description = "Описание как сделать из Atom удобный редактор Markdown файлов"
tags = [
"ide",
"markdown",
]
+++
# Настройка редактора Atom для работы с Markdown
Для работы над статическим сайтом нужно:
- Редактировать файлы Markdown
- Хранить файлы в "безопасном" месте. Чтобы случайно их не потерять
- Облегчить себе работу по формирофанию необходимой сужебной информации внутри файлов (Front Matter)
GitHub поможет решить вопрос хранения файлов со статьями и новостямии, а вот
удобного редактирования и наполнения файлов можно решить практически любым редактором
кода. Для себя я выбрал редактор от авторов GitHub - [Atom][75f0e641].
Это современные кросс платформенный редактор кода, с множеством удобным плагинов и, что самое важное, встроенной интеграцией с
Github. Что позволяет собрать функионально рабочее место для работы над блогом буквально
за 15 минут. И не беспокоиться о том, что с таким трудом созданные данные будут утеряны
из-за аппаратного или программного сбоя.
Поскольку работаю я на GNU/Linux Debian, то и процесс настройки буду описывать для этой операционной
системы.
1. Скачиваем пакет с сайта [Atom][75f0e641].
![Главная страница atom.io](images/2020/05/screenshot-atom.io-2020.05.03-15_33_48.png)
2. Устанавливаем зависимости:
`$ sudo aptitude install git, libgconf-2-4, libgtk-3-0, libgcrypt20, libnotify4, libxtst6, libnss3, python, gvfs-bin, xdg-utils, libx11-xcb1, libxss1, libasound2, libxkbfile1, libcurl4, policykit-1, lsb-release
`
Первое, что следует сделать после установки Git — указать своё имя и адрес электронной почты. Это важно, потому что каждый коммит в Git содержит эту информацию, и она включена в коммиты, передаваемые вами, и не может быть далее изменена:
`$ git config --global user.name "kpa39l"
$ git config --global user.email kpa39l@yandex.ru
`
Если указана опция --global, то эти настройки достаточно сделать только один раз, поскольку в этом случае Git будет использовать эти данные для всего, что вы делаете в этой системе. Если для каких-то отдельных проектов вы хотите указать другое имя или электронную почту, можно выполнить эту же команду без параметра --global в каталоге с нужным проектом.
Теперь устанавливаем сам редактор:
`$ sudo dpkg -i ~/Загрузки/atom-amd64.deb`
После установки ярлык для запуска добавиться в раздел "Разработка" системного меню.
![Расположения ярлыка в системном меню](images/2020/05/Снимок экрана_2020-05-03_15-47-43.png)
Или можно его запустить используя команду в консоли от текущего пользователя:
`$ atom`
3. Для хранения файлов можно использовать репозиторий GitHub. Ведь именно для этого как раз и выбирался редактор Atom,как имеющий встроенную
интеграцию c GitHub. Для этого нужно получить ссылку для клонирования репозитория
![Копируем ссылку для клонирования репозитория](images/2020/05/Снимок экрана_2020-05-03_16-06-03.png)
`https://github.com/kpa39l/gelonet.git`
Теперь при открытии панели с интеграцией с GitHUb (Ctrl + Shift + 8) и нажав кнопку "Clone existing repository" мы можем ввести в поле ввода эту ссылку. Чтобы не мучаться с авторизацией в ссылку можно добавить данные о логине и пароле, приведя её к виду:
`https://login:password@github.com/kpa39l/gelonet.git`
Эти действия настроят интеграцию локальной папки с репозиторием на GitHub без редактирования
файлов конфигурации.
4. Теперь для добства работы нужно добавить в Atom несколько плагинов для увеличения удобства работы со статическими блогами на Markdown. Для себя я определил следующий список:
- markdown-scroll-sync
- markdown-writer и зависящий от него
- tool-bar-markdown-writer
Чтобы не искать их в списке пакетов достаточно выполнить в консоли команду:
`$ apm install markdown-scroll-sync tool-bar markdown-writer tool-bar-markdown-writer`
В итоге при работе с Markdown файлами в интерфейсе редактора появится вот такая панель:
![](images/2020/05/Снимок экрана_2020-05-03_16-36-21.png)
Часто используемые инструменты Markdown-разметки отображаются в верхней части окна и при
необходимости можно их использовать.
[75f0e641]: https://atom.io "Atom"
Binary file not shown.

After

Width:  |  Height:  |  Size: 300 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 607 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 219 KiB

@@ -0,0 +1,57 @@
---
title: 'Открываю уже открытую коробку'
media_order: '170-1702669_18kib-623x623-openbox-logo-v2-by-skeletux.png,arc-clone.jpg,Снимок экрана_2020-12-18_00-59-08.png,blocks.jpg'
date: '2020-12-16T14:50:45+03:00'
taxonomy:
category:
- Blog
tag:
- Linux
- Openbox
- gelonet.ru
feed:
limit: 10
---
![OpenBoxLogo](170-1702669_18kib-623x623-openbox-logo-v2-by-skeletux.png)
Дано: Установленная сисема Debian 10 XFCE4.14.
Требуется: Установить и настроить более легковесный менеджер окон Openbox
Оставлю за скобками выбор OpenBox вкачестве WM. Оснований для выбора в общем-то каки-то нет. Ткнул пальцем в первый попавшийся, два часа порывшись в Сети.
За цель приму что-то вроде таких вариантов:
![](blocks.jpg)
![](arc-clone.jpg)
Начну с уточнения требований. Моя машина стоит дома и на ней нет ничего, что стоило бы защищать. Даже таким примитивным образом как пароль. Поэтому при включении машины должен происходить автологон в систему. Я использую графический менеджер LightDM, поэтому у меня всё свелось к изменению трёх строчек в его конфигураионном файле \etc\lightdm\lightdm.conf:
> autologin-user=kpa39l
> autologin-user-timeout=0
> user-session=openbox
Кстати, в документации из Сети имя сессии для OpenBox часто указывается как openbox-session, а вот Debian 10 есть тонкость. Если выполнить команду **ls /usr/share/xsessions/** то отобразятся все доступные сессии установленных DE и WM.
На этом этапе имеем,что привключении компьютера после процесса загрузки сразу попадаем на рабочий стол. Гденет ничего кроме курсора мыши. Щелчок правой кнопкой мыши вызывает меню. Все.
Самое время немного поиграться сустановленными obconf и obmenu.
Дальше ставим **tint2** - панель со списком запущенных программ, часами, трей-зоной и даже можно аналог quicklaunch из Windows организовать. Вот так это выглядит у меня:
![](%D0%A1%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA%20%D1%8D%D0%BA%D1%80%D0%B0%D0%BD%D0%B0_2020-12-18_00-59-08.png)
Для отключения графического входа в систему вводим команду:
> systemctl set-default multi-user.target
Для включения обратно:
> systemctl set-default graphical.target
посмотреть текущее состояние:
> systemctl get-default
Если в ответе будет **graphical.target**, то графическая оболочка включена и **multi-user.target**, если выключена.
Источники:
https://ru.wikipedia.org/wiki/Openbox
http://openbox.org/wiki/Help:Getting_started#Using_Openbox_without_a_desktop_environment_.28The_lightweight_approach.29
https://wiki.debian.org/ru/Openbox
http://itnotesblog.ru/note.php?id=208
https://losst.ru/luchshie-temy-dlya-openbox
https://github.com/addy-dclxvi/Openbox-Theme-Collections
https://qiwichupa.net/debian-10-buster-openbox-ustanovka-i-nastrojka
https://blackdiver.net/it/linux/4043
https://oposumo.livejournal.com/51878.html
Binary file not shown.

After

Width:  |  Height:  |  Size: 125 KiB

+14
View File
@@ -0,0 +1,14 @@
---
title: Здоровый образ жизни
date: '2020-12-21T20:20:45+03:00'
visible: true
---
20:20 21.12.2020
Итак, мне 38 лет. Я вешу больше 93 килограмм при росте 178 сантиметров. Что немного меньше, чем дохера. При этом я не занимаюсь спортом, не придерживаюсь здорового питания, имею проблемы с наличием в организме нужного количества витаминов и минералов. Работаю руководителем, что может быть весьма нервным занятием. В общем медленно и неуклонно превращаюсь в старую развалину. Просто идеальный гражданин с точки зрения Пенсионного фонда России.
Но под новый год все мы обычно планируем начать жизнь с чистого листа, не или хотя бы что-то в ней изменить. И это мой вариант такой попытки.
Начну с малого. С ежедневной фиксации состояния. У меня есть фитнес- трекер Xiaomi MiBand 4, который шёл в нагрузку к моему текущему телефону Xiaomi Note8T,буду с него брать статистику по нагрузкам. Буду брать информацию по потребляемым продуктам и их калорийности из журнала в телефоне. Данные о сне, физических нагрузках, составе крови, потребления жидкости и прочее. То есть буду стараться полностью оцифровать свой процесс достижения цели.
Ах да,про какую цель я говорю? Получить пенсию! #КактебетакоеПФР На самом деле, такой важной вехой и целью станет получение золотого значка ГТО. Ну, скатертью дорожка,как говориться и ПОЕХАЛИ!
Этот текст уйдет в Дзен и Телеграм. В ВК выложу позитивныйпост,когда достигну видимых результатов.
@@ -0,0 +1,15 @@
---
title: 'Стандарт красоты'
date: '2020-12-30T23:34:45+03:00'
draft: "true"
---
Для начала определим текущий статус:
Рост 178
Вес 95,8
Объем бедер
Объем талии
Объем пуза
Объем шеи
Количество подтягиваний
Количество отжиманий
@@ -0,0 +1,29 @@
+++
title = "Обо мне"
description = "Страница с информацией о себе"
date = "2022-09-27"
aliases = ["about-me", "bio", "contact"]
slug = "about"
+++
Как положено для всякого успешного мужчины иметь жену, машину, часы и костюм, так и для каждого ИТ-шника положено иметь свой сайт/блог/ЧСВмерку. C’est la vie, как говорят французы. Вот и я сподобился реализовать своё желание профессиоанльного эксгибисционизма и собрать коллекцию бесполезных, но показательных для работодателей статей. Собственно, перехожу к рассказу о себе в паре предложений.
У каждого своя работа мечты, моя в том чтобы организовать работу подразделения ИТ так, чтобы мне доставались только самые интересные и нетипичные задачи. А в текучку погружаться пришлось бы только на время отсутствия профильного специалиста.
И для достижения своей мечты я и развиваюсь.
Учусь как можно лучше направлять подчиненных и коллег. Эффективней планировать свой рабочий график и эффективней контролировать работу подчиненных. Изучаю и внедряю методики планирования деятельности подразделения и каждого сотрудника, конечно же включая себя. Стараясь сделать сотрудников максимально автономными.
Изучаю все инструменты и активы с которыми работает подразделение. В курсе трендовых подходов и лучших практик, технологических новинок и обновления предложений вендоров, методик снижения ROI и прогнозирования расходов бизнес-подразделений.
Так повелось, что я работал в индустриях где ИТ это поддерживающий процесс для бизнеса. Да, важный; да, обеспечивающий конкурентные преимущества; да, экономящий средства. Но поддерживающий! И задача руководителя обеспечить максимальную эффективность вложений тех небольших процентов общего бюджета что ему достаются. В том числе и занимая жесткую позицию по вопросу его увеличения, когда это необходимо :)
Работа для меня это цель развития как специалиста, так и как личности.
Но работа это не все. Любимые хобби добавляют вкус в рабочие будни. Радиоэлектроника, Linux, Golang - позволяют гордо причислять к себя сообществу geek-ов. Фланкировка, народный ансамбль казачьей песни и городское казачье общество - твердо стоять опираясь на традиции и обычаи на родной земле.
Но в итоге все свои усилия я направляю в такую сторону, чтобы мои любимые детки и красавица жена видели рядом своего мужа и отца в виде успешного руководителя, творческого человека, надежного мужчины и просто любимого.
Контакты:
+7 928 438-21-81
kpa39l@yandex.ru
Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

@@ -0,0 +1,16 @@
---
title: Автовход в Windows 10
date: 2022-10-03
description: Как настроить автовход в Windows 10
lastmod: 2022-10-09T13:45:20.976Z
draft: true
tags:
- windows
- полезности
categories:
- blog
---
# Автовход в Windows 10
#
@@ -0,0 +1,15 @@
---
title: Резюме на markdown
description: Markdown хорошо использовать для создания технических текстов. А вот для
работы с документами подходит не очень. Зато можно HTMLиспользовать для
разметки. Поробуем? Тем более что есть у меня пустой раздел на с резюме на
сайте.
date: 2022-10-26T06:16:04.592Z
preview: ""
draft: "false"
tags:
- markdown
- HTML
categories: ""
lastmod: 2022-10-26T06:19:54.367Z
---
Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 136 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

@@ -0,0 +1,22 @@
+++
title = "Новости Firefox на 26 октября 2022"
draft = false
date = "2022-10-26T08:27:28.661Z"
tags = [ "firefox" ]
+++
![firefox](3d31b775-d856-46bf-960d-51aba092c8c3.png)
## Приватный режим
![2b7028b8-dadc-418b-99ff-e59b677333ce.jpg](2b7028b8-dadc-418b-99ff-e59b677333ce.jpg)
В последней версии браузера реализовано автоматическое включение темного оформления браузера в ркнах приватного режима. Так что теперь сразу понятно, что поиск ведется в окне которое не сохраняет историю поиска. Кстати, если часто пользуются приватные она, то теперь можно закрепить приватное окно на панели задач Windows. Так что теперь их можно будет открывать в один клик. Главно не авторизоваться в поиске Yandex или Google в приватных окнах %) а то весь смысл приватности теряется. При этом трэкинг и фингерпринт никто не отменял и персональные рекомендации могут всё-таки приходить. Главное что на устройстве с которого серфинг происходит не смогут просмотреть историю.
## Firefox редактировать PDFs
![13a9d452-d64b-495b-adbe-d4f60b23a1d9.png](13a9d452-d64b-495b-adbe-d4f60b23a1d9.png)
Теперь не нужно искать программу которая поможет заполнить форму PDF. С новым обновлением в Firefox добавили возможность редактировать PDF файлы.
## Копирование текста с изображений
![c0dd249ad-4d46-4cb3-bd21-695a386454c1.png](0dd249ad-4d46-4cb3-bd21-695a386454c1.png)
Для пользователей версии на macOS добавили функцию позволяющую копировть текст прямо с изображений. Firefox теперь распознает текст на изображениях и позволяет копировать, выделить и встевать его. Функция даже распознает заглавные буквы, так что скопированный текст даже не требуется дополнительно изменять.
@@ -0,0 +1,19 @@
+++
title = "Разработка политики резервного копирования"
description = "Один из самых важных документов, которые обеспечивают функционирование ИТ-инфраструктуры и планирование бюджета на резервное копирование"
date = "2022-10-26T09:27:27.158Z"
tags = [ "документ", "itsm" ]
draft = true
+++
## Необходимость резервного копирования
Для меня, резервное копирование настолько само-собой разумеющееся дело, что объяснить и обосновать его необходимость бизнесу оказалось сложно. Аргументы заранее не подготовил просто. Поэтому и родился этот документ.
Резерв - это то, что обеспечивает в случае надобности возможность дальнейшей работы. В случаае ИТ - это резервная копия данных. Благодаря наличию резерва снижаются риски потери или повреждения данных. То есть, рабочие данные, в случае потери, можно восстановить максиамльно полно. Полнота восстановления зависит от методики резервирования. Конечно, безопасность данных подразумевает, что защищаемся мы от ПОТЕНЦИАЛЬНЫХ проблем и риски имеют различный вес.
От каких потенциальные проблем может защитить резервное копирование? Например, сбои оборудования, атака вируса шифровальщика, повреждение данных в процессе работы ПО, стихиное бедствие и конечно же человеческие ошибки.
Сейчас, когда приктически вся дейтельность так или иначе зависит от использования ИТ систем и в процессе формирует, обрбатывает и сохраняет данные, необходимость защиты данных и максимально быстрого восстановления работы в случае ИТ сбоев становятся как-никогда важны. Если у предприятия оптовой торговли в один момент пропадет информация о заказах, заказчиках, грузах и складских остатках, то продолжить работу будет практически невозможно. Слищком много информации и вся она храниться в ИТ системах.
Виды рисков, типы данных, частота резервного копирования, методика создания, длительность хранения и другие параметры включаются в Политику резервного копирования.
Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

@@ -0,0 +1,159 @@
# Устанавливаем и настравиваем node_exporter
## Описание
node-exporter написан на Golang и распространяется в виде исполняемого файла, включающего в себя все необходимы библиотеки.
## Установка
Поэтому установка состоит из того чтобы скачать и скопировать файл с github проекта в папку включенную в PATH (то есть ту, в которой командная оболочка ищет использняемые файлы).
```# Скачиваем последнюю версию node_exporter со страницы проекта
curl -s https://api.github.com/repos/prometheus/node_exporter/releases/latest| grep browser_download_url|grep linux-amd64|cut -d '"' -f 4|wget -qi -
# Разархивируем полученный архив
tar -xvf node_exporter*.tar.gz
# Переходим в папку с исполняемым файлом
cd node_exporter*/
# Копируем исполняемый файл в католог входящий в PATH для Debian это /usr/local/bin
sudo cp node_exporter /usr/local/bin
#Возвращаемся в домашний каталог
cd
```
Теперь, если выполнить в консоли сервера, на который мы скачали node_exporter, команду ``` node_exporter --version ```:
```$ node_exporter --version
node_exporter, version 1.6.1 (branch: HEAD, revision: 4a1b77600c1873a8233f3ffb55afcedbb63b8d84)
build user: root@586879db11e5
build date: 20230717-12:10:52
go version: go1.20.6
platform: linux/amd64
tags: netgo osusergo static_build
```
## Настройка запуска
Первичная настройка node_exporter заключается в добавлении юнита systemd, чтобы он автоматически запускался при запуске/перезагрузке операционной системы, и в создании конфигурационного файла с параметрами запуска, чтобы каждый раз не лезть в файл юнита с настройками сервиса и не перечитывать каждый настройки systemd после его изменения. Со второго и начнём.
У node_exporter нет конфигурационного файлаб все настройки передаются через ключи командной строки. Но мы их вынесем в отдельный конфигурационный файл. В Debian файлы конфигураций размещаются в каталоге /etc/. В нём и создадим файл с пока еще пустым списком ключей запуска node_exporter.
```sudo cat <<EOF > /etc/node_exporter
OPTIONS=""
EOF
```
Для работы node_exporter нужны права root. Поэтому запускать мы его будем как системную службу. Файлы системных служб находятся в таких каталогах:
* /usr/lib/systemd/system
* /lib/systemd/system
* /etc/systemd/system
Причём файлы сервисов, поставляемые с пакетами, как правило, располагаются в каталогах /lib и /usr/lib, а в /etc/ расположены модифицированные файлы юнитов переопределяющие стандартные настройки.
```sudo cat <<EOF > /usr/lib/systemd/system/node_exporter.service
[Unit]
Description=Prometheus Node exporter for machine metrics
Documentation=https://github.com/prometheus/node_exporter
[Service]
Restart=always
User=root
EnvironmentFile=/etc/node_exporter
ExecStart=/usr/local/bin/node_exporter $OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
TimeoutStopSec=20s
SendSIGKILL=no
[Install]
WantedBy=multi-user.target
EOF
```
С помощью директивы: EnvironmentFile все переменные из файла, указанного в этой директиве, добавляются в env, это позволяет нам передавать список ключей для Node Exporter через переменную $OPTIONS без изменения службы.
Обновляем список служб systemd, ведь он еще не знает о юните который мы создали раньше. Запускаем node_exporter и добавляем его в автозапуск.
```sudo systemctl daemon-reload
sudo systemctl start node_exporter
sudo systemctl enable node_exporter
```
Проверяем что node_exporter заработал.
```$ sudo systemctl status node_exporter
node_exporter.service - Prometheus Node exporter for machine metrics
Loaded: loaded (/etc/systemd/system/node_exporter.service; enabled; preset: enabled)
Active: active (running) since Tue 2023-08-22 11:41:37 MSK; 51min ago
Docs: https://github.com/prometheus/node_exporter
Main PID: 78053 (node_exporter)
Tasks: 6 (limit: 6951)
Memory: 13.3M
CPU: 317ms
CGroup: /system.slice/node_exporter.service
└─78053 /usr/local/bin/node_exporter
авг 22 11:41:37 srvr-backup node_exporter[78053]: ts=2023-08-22T08:41:37.040Z caller=node_exporter.go:117 level=info collector=thermal_zone
авг 22 11:41:37 srvr-backup node_exporter[78053]: ts=2023-08-22T08:41:37.040Z caller=node_exporter.go:117 level=info collector=time
авг 22 11:41:37 srvr-backup node_exporter[78053]: ts=2023-08-22T08:41:37.040Z caller=node_exporter.go:117 level=info collector=timex
авг 22 11:41:37 srvr-backup node_exporter[78053]: ts=2023-08-22T08:41:37.040Z caller=node_exporter.go:117 level=info collector=udp_queues
авг 22 11:41:37 srvr-backup node_exporter[78053]: ts=2023-08-22T08:41:37.040Z caller=node_exporter.go:117 level=info collector=uname
авг 22 11:41:37 srvr-backup node_exporter[78053]: ts=2023-08-22T08:41:37.040Z caller=node_exporter.go:117 level=info collector=vmstat
авг 22 11:41:37 srvr-backup node_exporter[78053]: ts=2023-08-22T08:41:37.040Z caller=node_exporter.go:117 level=info collector=xfs
авг 22 11:41:37 srvr-backup node_exporter[78053]: ts=2023-08-22T08:41:37.040Z caller=node_exporter.go:117 level=info collector=zfs
авг 22 11:41:37 srvr-backup node_exporter[78053]: ts=2023-08-22T08:41:37.040Z caller=tls_config.go:274 level=info msg="Listening on" address=[::]:9100
авг 22 11:41:37 srvr-backup node_exporter[78053]: ts=2023-08-22T08:41:37.040Z caller=tls_config.go:277 level=info msg="TLS is disabled." http2=false address=[::]:9100
```
Как видно из вывода по умолчанию node_exporter работает на порту 9100. Проверим что он нам на нём выдаст
```$ curl -I http://localhost:9100
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Date: Tue, 22 Aug 2023 09:35:08 GMT
Content-Length: 961
```
![Страница экспозиции](page.png)
![Страница со значениями метрик](metrics.png)
## Настройка метрик
Теперь чтобы изменить настройки node_exporter нужно в созданный нами файл конфигурации /etc/node-exporter внутрб кавычек добавить нужный ключ и перезапустить сервис node_exporter. Например, если мы хотим изменить порт на котором проводится экспозиция собранных метрик и добавить сбор метрик из отдельного файла, то приводим файл настроек к виду:
```$ cat /etc/node_exporter
OPTIONS="--web.listen-address ":9100 --collector.textfile.directory=/tmp/node_exporter"
```
Ключ --collector.textfile.directory добавляет коллектор, который загружает все файлы *.prom из указаннаго каталога. Это файлы с метриками, создадам такой в указанном каталоге:
```mkdir /tmp/node_exporter/
cat <<EOF > /tmp/node_exporter/node_exporter_custom_metric.prom
#TYPE slurm_demo_metric counter
slurm_demo_metric 100
EOF
```
Часто используемые ключи:
**--log.level** Данный ключ устанавливает уровень логирования. Возможные уровни логирования: debug, info, warn, error. По-умолчанию: info
**--log.format** Данный ключ устанавливает формат логов. Доступные форматы: logfmt и json. По-умолчанию: logfmt
**--web.listen-address** Данный ключ устанавливает адрес и порт, по которому будет доступен Node Exporter. По-умолчанию: ":9100"
**--web.telemetry-path** Данный ключ устанавливает адрес, по которому доступны результаты экспозиции. По-умолчанию: "/metrics"
**--web.disable-exporter-metrics** Данный ключ устанавливает список метрик, которые будут исключены из экспозиции. По-умолчанию: Пустой. Например, для исключения всех метрик, имя которых начинается с go_, значение ключа будет: go_*. Допускается использовать перечисление нескольких метрик, с запятой в качестве разделителя.
Полный список ключей можно просмотреть с помощью ключа --help.
```node_exporter --help```
node_exporter идёт в комплекте с ножеством коллекторов (сборщиков) метрик. Список их довольно велик и большая часть из них по-умолчанию отключена. получить их список можно с помощью ключа --help.
```node_exporter --help```
## Использованные материалы
[Где находятся файлы сервисов Systemd](https://losst.pro/gde-nahodyatsya-fajly-servisov-systemd?ysclid=lllzuud6gp286727760)
[Install Prometheus and node_exporter on Debian 11|10](https://computingforgeeks.com/how-to-install-prometheus-and-node-exporter-on-debian/)
[Monitoring Linux host metrics with the Node Exporter](https://prometheus.io/docs/guides/node-exporter/)
Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

@@ -0,0 +1,34 @@
![](Pasted%20image%2020250612205045.png)
В [Obsidian](https://obsidian.md) , по умолчанию, при вставке изображений через интерфейс (например, через «Перетащите файл сюда» или вставку из буфера обмена), они сохраняются в одну и ту же папку, указанную в настройках как "Место для вложенных файлов по-умолчанию" (Default attachment location). Но ты можешь изменить это поведение, чтобы **изображения автоматически копировались в ту же папку, где находится текущая заметка** . Мне это понадобилось когда я подключил web-clipper чтобы сохранять страницы из интернета к себе в хранилище. Начиная с версии Obsidian **v1.3.0+** (кстакти проверь, что у тебя актуальная версия) можно использовать встроенную функцию:
- Открой Настройки → "Файлы и ссылки" (Settings → Files and Links)
- Прокрутите вниз до пункта "Место для вложенных файлов по умолчанию"
- В выпадающем меню установи вариант "В той же папке, где расположен файл" (Save attachments in the same folder as the current note)
Теперь все изображения и вложения будут автоматически сохраняться в ту же папку, где находится открытая заметка — **без необходимости указывать общую папку `attachments`** .
## 📁 Структура проекта после настройки:
📁 MyVault/
├── 📁 FolderA/
│ ├── noteA.md
│ └── image.png ← будет здесь
├── 📁 FolderB/
│ ├── noteB.md
│ └── image.png ← будет здесь
---
Есть еще более гибкая альтернатива для похожей встроенной настройки реализованная с помощью плагина (например, использовать подпапки `assets/`, автоимена файлов и т.д.), можно использовать "Сторонние плагины" (Community Plugins) [Media Tools](https://github.com/denolehov/obsidian-media-tools)
- Автоматическое создание папок `assets/` для каждой заметки
- Настройка формата имени файла (например, `YYYYMMDD-HHmmss.png`)
- Поддержка переноса картинок при переименовании заметок
Сам его не пробовал, поэтому рекомендовать не смогу.
---
Ну и еще дополнительно по теме с картинками. Чтобы быстро вставить картинку в редактор: просто **перетащи файл в область редактирования** , и Obsidian сам добавит Markdown-ссылку.
А для быстрой вставки скриншота можно установить плагин Screenshot и использовать сочетание клавиш `Ctrl + Shift + I.
Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

@@ -0,0 +1,26 @@
#obsidian
Сохранял очередную закладку в браузере и меня озарило, что делаю я это не правильно. у меня же есть [Obsidian](https://obsidian.md) и логично сохранять найденные страницы именно в нём, а не в браузере... хотя в идеале нужен плагин для синхронизации. но идеал недостижим :)
А еще сохранять нужно не ссылку не страницу, а целиком её контент, потому как ссылки имеют свойство протухать по различным причинам. То сайт закрылся, то страну заблокировали, то движок у сайта сменился, да мало ли причин. Поэтому нужно не просто URL сохранить, а использовать Web Clipper. Команда Obsidian уже давно выпустила клиппер для популярных браузеров (https://help.obsidian.md/web-clipper) (Firefox, Chrome, Safari, Edge, Brave, Arc, Orion и Vivaldi). С его помощью можно сохранять веб-страницы в формате Markdown преобразуя HTML-код в обычный текст, включая таблицы, блоки кода, сноски и математические уравнения.
![](Pasted%20image%2020250612202942.png)
На скриншоте видно что при сохранении страницы (создании клиппинга) генерируется frontmatter и можно изменить метаданные странциы и по-умолчанию страницы сохраняются в каталог Clippings открытого хранилища. В настройках дополнения кстати можно указать хранилица в которых сохраняются страницы.
Есть в таком способе сохранения маленькая проблема. Ссылки на картинки остаются внешними и если со старницей что-то случиться, то мы опять потеряем информацию. Благо и тут сообщество помогло и для Obsidian создали плагин ["Local Images Plus"](obsidian://show-plugin?id=obsidian-local-images-plus)
![](Pasted%20image%2020250612203952.png)
Его задача как раз делать вставляемые в редактор ссылки на внешние объекты делать локальными. По-умолчанию как раз включен автоматический режим (можно поменять в настройках плагина) который сразу сохраняет ресурсы. Но так же через палитру команд можно запустить процесс сохранения как для текущей редактируемой заметки, так и для всех заметок в хранилище.
[Open: Pasted image 20250612205949.png](gelonet-ru/content/posts/obsidian-web-clipper/0f5c78d8ab30f1f6242a0e87dcd102d2_MD5.jpeg)
![](gelonet-ru/content/posts/obsidian-web-clipper/0f5c78d8ab30f1f6242a0e87dcd102d2_MD5.jpeg)
При автоматической замене вставляемый файл переименовывается и ссылка на него замещается новой. Происходит это не сразу а секунд через 10-15.
[Open: Pasted image 20250612210122.png](gelonet-ru/content/posts/obsidian-web-clipper/50ece689284db452903efbe8b80010f8_MD5.jpeg)
![](gelonet-ru/content/posts/obsidian-web-clipper/50ece689284db452903efbe8b80010f8_MD5.jpeg)
Вот теперь моя душенька довольна. А идею создания плагина синхронизации закладок между браузером и obsidian я даже записывать не буду.
+273
View File
@@ -0,0 +1,273 @@
---
title: "Полная инструкция: Установка WriteFreely на wf.gelonet.ru (Debian 13)е"
date: 2025-11-02T19:00:00+03:00
draft: false
tags: ["writefreely", "howto", "debian", "fediverse"]
categories: ["selfhosting"]
---
Предполагается, что у вас есть:
- VPS с Debian 13,
- Доступ к серверу через sudo,
- Доменное имя gelonet.ru, зарегистрированное у любого регистратора.
## 🔹 Шаг 0: Настройка DNS (в панели регистратора)
Зайдите в панель управления вашего регистратора домена (например, reg.ru, nic.ru, Beget и т.д.).
Найдите раздел «Управление DNS» или «Зоны DNS» для домена gelonet.ru.
Создайте A-запись для поддомена:
Имя (host): wf
Тип: A
Значение (IP): [ваш_публичный_IP_сервера]
TTL: 300 или по умолчанию
Пример:
wf.gelonet.ru → 5.129.217.146
Сохраните изменения.
⏱ DNS может обновиться от нескольких секунд до 10–30 минут. Проверить можно командой:
```bash
dig +short wf.gelonet.ru
# или
nslookup wf.gelonet.ru
```
Результат должен совпадать с IP вашего сервера.
## 🔹 Шаг 1: Подготовка сервера
Подключитесь к серверу по SSH и выполните:
```bash
# Обновление системы
sudo apt update && sudo apt upgrade -y
# Установка необходимых пакетов
sudo apt install -y nginx curl tar ufw
```
## 🔹 Шаг 2: Настройка фаервола (UFW)
Разрешите SSH, HTTP и HTTPS:
```bash
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full' # открывает 80/tcp и 443/tcp
sudo ufw enable
```
Проверка:
```bash
sudo ufw status verbose
```
💡 Порт 80 нужен для получения сертификата, порт 443 — для доступа к сайту по HTTPS.
## 🔹 Шаг 3: Установка WriteFreely
```bash
# Создаём директорию
sudo mkdir -p /var/www/writefreely
cd /var/www/writefreely
# Скачиваем последнюю версию (v0.16.0 на момент написания)
sudo curl -L https://github.com/writefreely/writefreely/releases/download/v0.16.0/writefreely_0.16.0_linux_amd64.tar.gz -o writefreely.tar.gz
# Распаковываем
sudo tar -xzf writefreely.tar.gz --strip-components=1
sudo rm writefreely.tar.gz
# Назначаем права
sudo chown -R www-data:www-data /var/www/writefreely
```
## 🔹 Шаг 4: Настройка WriteFreely
```bash
sudo -u www-data /var/www/writefreely/writefreely config start
```
Ответьте на вопросы:
```shell
Environment: Production, behind reverse proxy
Server address: localhost:8080 (оставьте по умолчанию)
Database: SQLite (проще для старта) или MySQL (если настроена БД)
Site name: например, Мой блог
Admin username: ваш email
Admin password: надёжный пароль
Остальное — по желанию
```
Сгенерируйте ключи шифрования:
```bash
sudo -u www-data /var/www/writefreely/writefreely keys generate
```
## 🔹 Шаг 5: Создание systemd-сервиса
```bash
sudo tee /etc/systemd/system/writefreely.service <<EOF
[Unit]
Description=WriteFreely Instance
After=network.target
[Service]
Type=simple
User=www-data
Group=www-data
WorkingDirectory=/var/www/writefreely
ExecStart=/var/www/writefreely/writefreely
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
EOF
```
Запустите сервис:
```bash
sudo systemctl daemon-reload
sudo systemctl enable --now writefreely
```
Проверка:
```bash
sudo systemctl status writefreely
```
## 🔹 Шаг 6: Настройка Nginx как обратного прокси
Создайте конфиг (замените wf.gelonet.ru на ваш поддомен):
```bash
sudo tee /etc/nginx/sites-available/writefreely <<EOF
server {
listen 80;
listen [::]:80;
server_name wf.gelonet.ru;
gzip on;
gzip_types
application/javascript
application/x-javascript
application/json
application/rss+xml
application/xml
image/svg+xml
image/x-icon
application/vnd.ms-fontobject
application/font-sfnt
text/css
text/plain;
gzip_min_length 256;
gzip_comp_level 5;
gzip_vary on;
location ~ ^/.well-known/(webfinger|nodeinfo|host-meta) {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host \$host;
proxy_set_header X-Real-IP \$remote_addr;
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
proxy_redirect off;
}
location ~ ^/(css|img|js|fonts)/ {
root /var/www/writefreely/static;
expires 12M;
}
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host \$host;
proxy_set_header X-Real-IP \$remote_addr;
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
proxy_redirect off;
}
}
EOF
```
Активируйте сайт:
```bash
sudo ln -s /etc/nginx/sites-available/writefreely /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
```
## 🔹 Шаг 7: Получение SSL-сертификата от Let’s Encrypt
Установите Certbot:
```bash
sudo apt install -y certbot python3-certbot-nginx
```
Получите сертификат:
```bash
sudo certbot --nginx -d wf.gelonet.ru
```
Ответьте N на вопрос о передаче email EFF (если не хотите).
Certbot автоматически:
запросит сертификат,
обновит конфиг Nginx для HTTPS,
настроит автоматическое обновление.
📌 Важно: порты 80 и 443 должны быть открыты в UFW и облачном фаерволе!
## 🔹 Шаг 8: Проверка работы
Откройте в браузере свой поддомен, у меня это:
[https://wf.gelonet.ru](https://wf.gelonet.ru)
Вы должны увидеть главную страницу WriteFreely.
Админка доступна по:
[https://wf.gelonet.ru/admin](https://wf.gelonet.ru/admin)
## 🔹 Шаг 9: Проверка автопродления сертификата
Certbot уже настроил таймер, но можно проверить вручную:
```bash
sudo certbot renew --dry-run
```
Если команда завершится без ошибок — всё в порядке.
## 🧰 Полезные команды
Логи WriteFreely:
```bash
sudo journalctl -u writefreely -f
```
Логи Nginx:
```bash
sudo tail -f /var/log/nginx/error.log
```
Обновление WriteFreely:
Остановите сервис: sudo systemctl stop writefreely
Замените бинарник (повторите Шаг 3)
Запустите: sudo systemctl start writefreely
✅ Готово!
Ваш персональный блог на WriteFreely работает по адресу:
👉 <https://wf.gelonet.ru>
Теперь вы полностью контролируете свой контент, без зависимости от сторонних платформ.
@@ -0,0 +1,60 @@
---
title: "Исправление ошибок в Hugo сайте"
date: 2026-01-31T22:45:00+03:00
draft: false
tags: ["hugo", "ошибки", "исправления", "google analytics", "deprecated"]
categories: ["Разработка", "Hugo"]
---
## Проблема
При запуске команды `hugo server` возникала ошибка:
```shell
ERROR html/template:_partials/head.html:153:13: no such template "_internal/google_analytics.html"
```
## Решение
### 1. Исправление ошибки с Google Analytics
В новых версиях Hugo внутренний шаблон `_internal/google_analytics.html` был удален.
Необходимо заменить его использование на частичный шаблон из темы PaperMod:
```html
<!-- Было -->
{{- template "_internal/google_analytics.html" . }}
<!-- Стало -->
{{- partial "google_analytics.html" . }}
```
### 2. Обновление шаблона Google Analytics
В шаблоне `themes/PaperMod/layouts/partials/google_analytics.html` также
потребовалось обновить способ получения ID Google Analytics, так как в новых
версиях Hugo поле `.Site.GoogleAnalytics` было заменено на
`.Site.Config.Services.GoogleAnalytics.ID`.
### 3. Исправление ошибок с устаревшим .Site.Social
В шаблонах `twitter_cards.html` и `opengraph.html` использовались устаревшие
обращения к `.Site.Social`, которые были заменены на `.Site.Params.Social`.
### 4. Исправление путей к частичным шаблонам
Также были исправлены неправильные пути к частичным шаблонам в нескольких файлах:
- `twitter_cards.html`
- `schema_json.html`
- `opengraph.html`
## Результат
После всех исправлений сайт успешно запускается командой `hugo server` и
доступен по адресу <http://localhost:1313/>
## Вывод
При обновлении Hugo или тем важно следить за изменениями в API и устаревшими
функциями. Использование устаревших элементов может привести к ошибкам сборки сайта.
+27
View File
@@ -0,0 +1,27 @@
---
title: "Тестовая статья"
date: 2026-01-31T22:45:00+03:00
draft: false
tags: ["hugo"]
---
## Тестовая статья
Это пример статьи в формате bundle. В этом формате все связанные файлы (изображения, код и т.д.) находятся в одной папке с основным файлом.
### Блок кода
```python
def hello_world():
print("Привет, мир!")
# Это важно для подсветки синтаксиса
```
### Изображения
![Alt текст](image.jpg)
## Заключение
Формат bundle позволяет удобно организовывать статьи и связанные с ними ресурсы в одной директории.
@@ -0,0 +1,33 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 400" width="100%" height="auto">
<rect width="1200" height="400" fill="#0a0c10"/>
<!-- Hexagon pattern -->
<g stroke="#1a2332" stroke-width="1" fill="none" opacity="0.5">
<polygon points="100,100 130,80 160,100 160,140 130,160 100,140"/>
<polygon points="250,100 280,80 310,100 310,140 280,160 250,140"/>
<polygon points="400,100 430,80 460,100 460,140 430,160 400,140"/>
<polygon points="550,100 580,80 610,100 610,140 580,160 550,140"/>
<polygon points="700,100 730,80 760,100 760,140 730,160 700,140"/>
<polygon points="850,100 880,80 910,100 910,140 880,160 850,140"/>
<polygon points="1000,100 1030,80 1060,100 1060,140 1030,160 1000,140"/>
<polygon points="175,160 205,140 235,160 235,200 205,220 175,200"/>
<polygon points="325,160 355,140 385,160 385,200 355,220 325,200"/>
<polygon points="475,160 505,140 535,160 535,200 505,220 475,200"/>
<polygon points="625,160 655,140 685,160 685,200 655,220 625,200"/>
<polygon points="775,160 805,140 835,160 835,200 805,220 775,200"/>
<polygon points="925,160 955,140 985,160 985,200 955,220 925,200"/>
<polygon points="1075,160 1105,140 1135,160 1135,200 1105,220 1075,200"/>
</g>
<!-- Center text -->
<text x="600" y="180" font-family="monospace" font-size="42" fill="#58a6ff" text-anchor="middle" font-weight="bold">
hugo new content posts/:slug/
</text>
<text x="600" y="225" font-family="monospace" font-size="20" fill="#8b949e" text-anchor="middle">
Leaf bundles · Archetypes · Permalinks · Slugs
</text>
<!-- Decor line -->
<line x1="200" y1="260" x2="1000" y2="260" stroke="#30363d" stroke-width="1"/>
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

@@ -0,0 +1,242 @@
---
date: '2026-04-18T09:44:39+03:00'
lastmod: '2026-04-18T09:44:39+03:00'
draft: false
title: 'Как автоматизировать создание постов в Hugo: slugs, архетипы и бандлы'
slug: 'hugo-slugs-archetypes-bundles'
description: 'Настраиваем Hugo так, чтобы не копировать index.md вручную, не мучиться с транслитерацией и получать красивые URL с датами'
categories:
- 'Hugo'
- 'DevOps'
tags:
- 'hugo'
- 'static-site-generator'
- 'automation'
- 'frontmatter'
keywords:
- 'hugo'
- 'blog'
cover:
image: "hero.svg"
alt: "Автоматизация Hugo"
relative: true
---
## Проблема: рутина при создании постов
Когда я только начинал вести блог на Hugo, каждый новый пост создавался через боль и страдания:
1. Создать папку вручную `content/posts/название-поста/`
2. Скопировать туда `index.md` из соседней папки
3. Отредактировать front matter (дату, заголовок, теги)
4. Придумать slug для красивого URL
5. ...и не забыть, что папку лучше назвать на латинице
На всё это уходило пара минут чисто механической работы. А когда постов 10–20, это начинает реально бесить.
В этой статье я расскажу, как я решил эту проблему с помощью штатных возможностей Hugo: **архетипов (archetypes)**, **пермалинков (permalinks)** и правильной организации **бандлов (bundles)**.
## Что такое бандл и зачем папка для каждого поста
Hugo поддерживает три типа контента:
Три способа хранения контента в Hugo
1. Простой файл .md (без папки)
Самый простой способ — просто положить файл мой-пост.md в папку content/posts/:
```text
content/
└── posts/
├── первый-пост.md
├── второй-пост.md
└── третий-пост.md
```
Плюсы:
- Максимально просто, ничего создавать не нужно
- Подходит для простых постов без изображений
Минусы:
- Все изображения нужно класть в общую папку static/images/
- Нельзя прикрепить к посту специфичные файлы (PDF, архивы и т.д.)
- Изображения нужно называть уникально, чтобы не пересекались с другими постами
2. Leaf bundle (папка + index.md)
```text
content/
└── posts/
└── мой-пост/
├── index.md
├── hero.jpg
└── code-example.py
```
Плюсы:
- Все ресурсы поста в одном месте
- Можно ссылаться на изображения относительно: ![герой](hero.jpg)
- Не нужно думать об уникальности имён файлов
Минусы:
- Нужно создавать папку (но мы это автоматизировали)
3. Branch bundle (папка + _index.md)
```text
content/
├── posts/
│ ├── _index.md <- описывает секцию /posts/
│ ├── первый-пост.md
│ └── мой-пост/
│ └── index.md
```
Плюсы:
- _index.md позволяет задать заголовок, описание для всей секции
- Можно настроить отдельный шаблон для списка постов
Структура моего блога:
```text
content/
├── posts/
│ ├── hugo-slugs-archetypes-bundles/
│ │ ├── index.md
│ │ ├── images/
│ │ │ └── diagram.png
│ │ └── code-example.txt
│ └── другой-пост/
│ └── index.md
```
Плюсы такого подхода:
- Все посты хранятся одинаково — папка + index.md. Не нужно думать, какой способ выбрать.
- Все файлы поста в одном месте
- Можно удобно ссылаться на изображения: `![схема](images/diagram.png)`
- Не нужно придумывать уникальные имена для картинок глобально
- Если я захочу экспортировать пост в другой блог, достаточно скопировать одну папку со всеми ресурсами.
## Почему папку бандла нужно называть на латинице
Здесь кроется важный момент. Hugo позволяет использовать любые символы в именах папок, включая кириллицу. Но есть **две причины использовать латиницу**:
1. **Чистые URL.** Если папка называется `мой-пост`, то URL будет `/%D0%BC%D0%BE%D0%B9-%D0%BF%D0%BE%D1%81%D1%82/`. Браузер это поймёт, но выглядит ужасно.
2. **Slug без транслитерации.** Имя папки удобно использовать как `slug` — последний сегмент URL. А латиница в URL — это стандарт и хороший тон.
**Правило:** папку называем на латинице (например, `my-awesome-post`), а заголовок внутри пишем по-русски.
## Как автоматизировать создание бандла через консоль
Команда для создания бандла с одной папкой:
```bash
hugo new content posts/название-папки/index.md
```
Hugo сам создаст папку, сгенерирует index.md с front matter из архетипа.
Важно: эта команда появилась в Hugo 0.112. В старых версиях нужно было сначала создать папку, потом файл.
## Настройка архетипа (archetype)
Архетип — это шаблон для новых файлов. Он лежит в archetypes/default.md (или в archetypes/post-bundle.md для конкретного типа).
Мой архетип выглядит так (TOML-формат):
```toml
---
date = '{{ .Date }}'
lastmod = '{{ .Date }}'
draft = true
title = '{{ replace .File.ContentBaseName "-" " " | title }}'
slug = '{{ .File.ContentBaseName }}'
description = ''
author = 'Кразя'
categories = [
'uncategorized'
]
tags = [
'draft'
]
---
```
Разберём ключевые моменты:
Поле Значение
title Берёт имя папки, заменяет дефисы на пробелы и делает заглавные буквы. my-awesome-post → My Awesome Post
slug Просто берёт имя папки как есть: my-awesome-post
.File.ContentBaseName Встроенная переменная Hugo — имя текущей папки без расширения и пути
После создания поста я вручную меняю title на русский и заполняю description, categories, tags.
## Настройка permalinks для красивых URL
Чтобы URL выглядел как 2025/03/my-awesome-post/, а не как posts/my-awesome-post/, добавляем в hugo.toml:
```toml
[permalinks]
posts = "/:year/:month/:slug/"
```
Теперь при сборке сайта Hugo сам построит нужную структуру. При этом внутри content/ всё остаётся по-прежнему — папка в posts/.
## Полный цикл создания поста (без лишних телодвижений)
Вот как теперь выглядит создание нового поста в моём блоге:
```bash
# 1. Создаём бандл с латинским именем папки
hugo new content posts/hugo-best-practices/index.md
# 2. Открываем файл и правим русский заголовок, описание, теги
vim content/posts/hugo-best-practices/index.md
# 3. Пишем пост в markdown
# 4. Смотрим локально
hugo server -D
# 5. Публикуем
make deploy
```
## Что ещё можно добавить в front matter
В процессе настройки я выяснил, что Hugo поддерживает много полезных полей:
| Поле | Назначение |
|----------------|---------------------------------------------------------------|
| `publishDate` | Отложенная публикация (не рендерится до указанной даты) |
| `expiryDate` | Автоматическое снятие с публикации |
| `lastmod` | Дата последнего изменения (для SEO) |
| `aliases` | Редиректы со старых URL |
| `weight` | Ручная сортировка в списке (меньше — выше) |
| `images` | Изображение для Open Graph и Twitter Cards |
| `params` | Кастомные параметры для темы |
## Итог
После всех настроек создание нового поста занимает ровно столько времени, сколько нужно на написание контента. Никакой ручной возни с папками и копированием index.md.
Ключевые выводы:
- Используйте leaf bundles (папка + index.md) для хранения всех ресурсов поста в одном месте
- Папки называйте на латинице — это даст чистые URL и автоматический slug
- Настройте архетип с переменной {{ .File.ContentBaseName }} для автоматической генерации title и slug
- Добавьте [permalinks] в конфиг для красивых URL с датами
Создавайте новый пост одной командой: ```bash hugo new content posts/имя-папки/index.md```
Теперь можно сосредоточиться на том, ради чего всё затевалось — на содержании.
Если у тебя есть свои лайфхаки по Hugo или ты знаешь, как сделать транслитерацию slug прямо из заголовка — пишите мне в Telegram <https://t.me/kpa39l>. Обсудим.
+29
View File
@@ -0,0 +1,29 @@
---
date: '2026-04-18T10:06:22+03:00'
lastmod: '2026-04-18T10:06:22+03:00'
draft: false
title: 'Что надо знать до того как начнёшь изучать машинное обучение'
slug: 'ml-begin'
description: 'Вступление к книге о машинном оубчении'
categories:
- 'ml'
tags:
- 'book'
- 'ml'
keywords:
- 'MachineLerning'
- 'Andriy Burkov'
---
Начнем с простой истины: машины не учатся. Типичное машинное обучение заключается в поиске математической формулы, которая при применении к набору входных данных (называемых обучающими данными) дает желаемые результаты. Эта математическая формула также генерирует правильные выходные данные для большинства других входных данных (отличных от обучающих) при условии, что эти входные данные поступают из того же или подобного статистического распределения, из которого были получены обучающие данные.
Почему это не является обучением? Потому что стоит слегка исказить входные данные, и результат, скорее всего, получится полностью неправильным. Обучение у животных — это нечто иное. Если вы научились играть в видеоигру при прямой ориентации экрана, вы все равно сможете играть в нее, даже если кто-то слегка повернет экран. Алгоритм машинного обучения, обучавшийся при прямой ориентации экрана и не обученный распознаванию поворота, не сможет играть в игру на повернутом экране.
Но почему тогда используется название «машинное обучение»? Причина, как это часто бывает, заключается в маркетинге: Артур Сэмюэл (Arthur Samuel), американский пионер в области компьютерных игр и искусственного интеллекта, придумал этот термин в 1959 году, когда работал в IBM. Подобно тому как в 2010-х годах IBM пыталась продвигать термин «когнитивные вычисления», чтобы выделиться среди конкурентов, в 1960-х годах IBM использовала новый крутой термин «машинное обучение», чтобы привлечь клиентов и талантливых сотрудников.
Как видите, подобно тому как искусственный интеллект не является интеллектом, машинное обучение тоже не является обучением. Тем не менее термин «машинное обучение» получил широкое распространение и под ним часто подразумевается теория и практика создания машин, способных выполнять различные полезные действия без явного программирования. Слово «обучение» в данном случае используется лишь как аналогия с обучением в животном мире, а не буквально.
Андрей Бурков, Машинное обучение без лишних слов, 2020.
+33
View File
@@ -0,0 +1,33 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 400" width="100%" height="auto">
<rect width="1200" height="400" fill="#0a0c10"/>
<!-- Hexagon pattern -->
<g stroke="#1a2332" stroke-width="1" fill="none" opacity="0.5">
<polygon points="100,100 130,80 160,100 160,140 130,160 100,140"/>
<polygon points="250,100 280,80 310,100 310,140 280,160 250,140"/>
<polygon points="400,100 430,80 460,100 460,140 430,160 400,140"/>
<polygon points="550,100 580,80 610,100 610,140 580,160 550,140"/>
<polygon points="700,100 730,80 760,100 760,140 730,160 700,140"/>
<polygon points="850,100 880,80 910,100 910,140 880,160 850,140"/>
<polygon points="1000,100 1030,80 1060,100 1060,140 1030,160 1000,140"/>
<polygon points="175,160 205,140 235,160 235,200 205,220 175,200"/>
<polygon points="325,160 355,140 385,160 385,200 355,220 325,200"/>
<polygon points="475,160 505,140 535,160 535,200 505,220 475,200"/>
<polygon points="625,160 655,140 685,160 685,200 655,220 625,200"/>
<polygon points="775,160 805,140 835,160 835,200 805,220 775,200"/>
<polygon points="925,160 955,140 985,160 985,200 955,220 925,200"/>
<polygon points="1075,160 1105,140 1135,160 1135,200 1105,220 1075,200"/>
</g>
<!-- Center text -->
<text x="600" y="175" font-family="monospace" font-size="36" fill="#58a6ff" text-anchor="middle" font-weight="bold">
Почему родился Чебурнет?
</text>
<text x="600" y="215" font-family="monospace" font-size="20" fill="#8b949e" text-anchor="middle">
Исторический материаллизм · ТСПУ · Интернет · Свобода
</text>
<!-- Decor line -->
<line x1="200" y1="250" x2="1000" y2="250" stroke="#30363d" stroke-width="1"/>
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

+190
View File
@@ -0,0 +1,190 @@
---
date: '2026-05-08T15:37:42+03:00'
lastmod: '2026-05-08T15:37:42+03:00'
draft: false
title: 'Почему родился Чебурнет?'
slug: 'chebernet'
description: 'Моя попытка разобрать тезис об ограничениях интернета, как инструмента снижения доступа к знаниям для широких народных масс, через призму исторического материализма.'
categories:
- 'Политика'
tags:
- 'марксизм'
- 'анализ'
- 'коммунизм'
- 'нод'
keywords:
- 'марксизм'
- 'анализ'
- 'коммунизм'
- 'нод'
cover:
image: "hero.svg"
alt: "Hero картинка в SVG"
relative: true
---
### 1. Базис и надстройка: техническая инфраструктура как инструмент классового господства
С марксистско-ленинской точки зрения, интернет — это часть производительных сил. Контроль над ним есть контроль над средством производства информации. Постановление №1667 от марта 2026 года, дающее Роскомнадзору, ФСБ и Минцифры право централизованно перенаправлять трафик и изолировать Рунет в реальном времени [1] [7], формализует переход от «защиты от внешних угроз» к **системному управлению идеологическим воспроизводством**.
Технические средства противодействия угрозам (ТСПУ) с функцией DPI (Deep Packet Inspection) — это не просто «фильтры». Это материальная база для селективного доступа к знаниям, коммуникациям и рынкам. Когда доступ к зарубежным ресурсам деградирует «незаметно» (таймауты, обрывы, замедление), это создаёт эффект естественного отбора: кто может и хочет — ищет обходные пути, кто не может — принимает новую норму.
### 2. «Метод лягушки» как диалектика постепенной нормализации
Для себя я процесс "регулирования" интернета чётко ассоциирую с правильным способом варки легушек - нужно медленно поднимать температуру (вводить ограничения), а не кидать лягушек в кипяток (резко всё блокировать). В диалектическом материализме количественные изменения переходят в качественные. Последовательное введение ограничений (блокировка платформ, ограничение VPN, требование русского языка в интерфейсах, хранение метаданных 3 года) — это не хаотичные шаги, а **системная стратегия формирования новой субъективности**.
Риторика «защиты населения» выполняет функцию идеологического прикрытия. В ленинской терминологии это — **буржуазный патернализм**: государство позиционирует себя как «защитника» от «вредного» внешнего влияния, маскируя классовый интерес — сохранение монополии на интерпретацию реальности и предотвращение стихийной самоорганизации вне контролируемых каналов.
### 3. Кто выигрывает? Классовый анализ последствий
| Группа | Интересы | Эффект изоляции |
|--------|----------|-----------------|
| Госаппарат и силовые структуры | Контроль, предсказуемость, подавление инакомыслия | Усиление инструментов мониторинга и точечного отключения [[7]] |
| Крупный национальный капитал (ИТ, медиа, финтех) | Защищённый рынок, лояльная аудитория | Конкурентное преимущество перед зарубежными сервисами, но риски технологического отставания |
| Малый бизнес и фрилансеры | Доступ к глобальным инструментам и рынкам | Рост издержек на обход ограничений, потеря клиентов и компетенций |
| Рабочий класс и интеллигенция | Доступ к знаниям, коммуникациям, культурному обмену | Цифровое неравенство: те, кто владеет техническими навыками, сохраняют доступ; остальные — маргинализируются |
### 4. Противоречия системы (диалектический взгляд)
Марксизм учит видеть внутренние противоречия как двигатель развития. В политике «суверенного интернета» их несколько:
- **Технологическая зависимость**: ТСПУ, системы фильтрации, оборудование для ЦМУ ССОП — часто импортного происхождения или на импортных компонентах. Изоляция усиливает уязвимость, а не снижает её.
- **Экономические издержки**: Ограничение доступа к глобальным сервисам снижает конкурентоспособность российской экономики, тормозит инновации, увеличивает стоимость цифровизации.
- **Социальное напряжение**: Постепенное сужение доступа к информации порождает не пассивность, а поиск альтернатив (зеркала, P2P-сети, офлайн-обмен). Это создаёт новые формы неформальной солидарности и знаний.
- **Идеологический кризис**: Чем жёстче контроль, тем выше ценность «запретного плода». Риторика защиты всё меньше убеждает, когда пользователи видят, что блокируются не только «экстремистские», но и образовательные, научные, культурные ресурсы.
### 5. Вывод: не изоляция, а перераспределение доступа
С марксистско-ленинской позиции, речь идёт не о «закрытии интернета», а о **перераспределении права на доступ к производительным силам информационного общества**. Государство не устраняет интернет — оно превращает его из всеобщего блага в привилегию, распределяемую по лояльности и полезности для воспроизводства существующих производственных отношений.
«Чебурнет» — это не технический проект, а **политическая технология управления сознанием через управление инфраструктурой**. И как любая такая технология, она несёт в себе семена собственного отрицания: чем сильнее давление, тем активнее ищутся пути обхода, тем острее становится противоречие между потребностями развития производительных сил и устаревающими производственными отношениями.
### 5. Формы классовой борьбы в цифровой сфере
С марксистской позиции, цифровое пространство — это арена классовой борьбы. Выделяются три уровня противостояния:
**А) Борьба за средства производства информации**
- ТСПУ и ЦМУ ССОП — это материализованная воля господствующего класса контролировать производительные силы [2] [3].
- Ответ пролетариата: децентрализованные сети (Tor, Ceno, P2P), где средство производства — вычислительные ресурсы самих пользователей. Это форма **кооперации вне государственного контроля**.
**Б) Борьба за рабочее время и отчуждение**
- Блокировка инструментов (GitHub, Stack Overflow, зарубежные SaaS) увеличивает время на выполнение задач. Это скрытая форма **увеличения необходимого рабочего времени** за счёт снижения производительности.
- Рост спроса на обходные пути создаёт новый сегмент «теневого цифрового труда»: настройка прокси, поддержка зеркал, обучение других. Это стихийная самоорганизация, но пока не переросшая в классовое сознание.
**В) Идеологическая борьба: самоцензура как форма отчуждения**
- Когда пользователь начинает фильтровать свои сообщения «на всякий случай», происходит **интернализация контроля**. Это высшая форма отчуждения: работник сам воспроизводит условия своего подчинения.
- Однако диалектика: чем шире блокировки, тем очевиднее их политический характер. Растёт понимание, что проблема не в «экстремизме», а в контроле.
### 6. Исторические параллели: СССР, Китай, Иран
**СССР: цензура как административный ресурс**
- Главлит контролировал содержание, но не инфраструктуру. Это создавало «лазейки»: самиздат, зарубежные радиостанции, личные контакты.
- Урок: контроль над содержанием без контроля над каналами передачи неэффективен в долгосрочной перспективе. Современная Россия пытается контролировать и то, и другое, но технические ограничения (децентрализация ТСПУ) создают аналогичные уязвимости [27].
**Китай: Великий файрвол как модель зрелого контроля**
- Ключевое отличие: Китай строил контроль 20+ лет, параллельно развивая полноценные внутренние аналоги (WeChat, Baidu, Douyin) [27].
- Россия копирует технические решения, но не создаёт привлекательных альтернатив. Результат: высокая проницаемость барьера (36–41% используют VPN против 10–15% в Китае) [27].
- Марксистский вывод: технологический контроль без экономического базиса (конкурентных внутренних сервисов) обречён на постоянное напряжение и высокие издержки.
**Иран: изоляция как кризисная модель**
- Иранский опыт показывает: полная изоляция возможна, но цена — технологическая стагнация, утечка мозгов, рост социального напряжения.
- Россия движется в этом направлении, но с поправкой на размер экономики и интеграцию в глобальные цепочки. Это создаёт дополнительное противоречие: бизнес требует доступа, государство — контроля.
### 7. Перспективы: диалектика развития
**Количественные изменения**:
- Рост числа блокировок (417 тыс. ресурсов в РФ против ~300 тыс. в Китае) [33].
- Увеличение бюджета на контроль ($780 млн на 2025–2027) [27].
- Расширение полномочий ФСБ и Роскомнадзора [2] [8].
**Качественный скачок** произойдёт, когда:
1. Техническая инфраструктура контроля станет достаточно точной, чтобы минимизировать «побочный ущерб» (как в Китае).
2. Внутренние сервисы достигнут паритета с зарубежными по качеству (маловероятно в среднесрочной перспективе).
3. Общественное сознание адаптируется к новой норме (пока сопротивление растёт).
**Вывод**: политика «суверенного интернета» — это попытка решить политические задачи техническими средствами. Но диалектика материализма учит: производительные силы (интернет как глобальная сеть) вступают в конфликт с производственными отношениями (национальный контроль). Это противоречие будет обостряться, создавая условия для новых форм социальной практики — от стихийного обхода блокировок до осознанной борьбы за цифровые права.
Дальше приложил анализ который мне помогли состявить БЯМ:
### Классовая структура российского ИТ-сектора в условиях изоляции
#### 1. Материальная база: кто владеет средствами фильтрации
| Класс | Материальный интерес | Положение в системе |
|-------|---------------------|-------------------|
| **Государственная буржуазия** (подрядчики ТСПУ, Ростелеком, СИТРОНИКС, структуры ФСБ/РКН) | Бюджеты на «защиту»: 2,27 млрд ₽ на модернизацию ТСПУ в 2026 [1], рост госзакупок VPN на 73% до 17,3 млрд ₽ [19] | Владеют инфраструктурой контроля, извлекают ренту из обязательной установки оборудования у операторов |
| **Национальный цифровой капитал** (владельцы «импортозамещённых» платформ) | Защищённый рынок без конкуренции, лояльная аудитория | Выигрывают от блокировок зарубежных сервисов, но зависят от государственных контрактов и регуляторных послаблений |
| **Мелкая буржуазия** (фрилансеры, малые студии, инди-разработчики) | Доступ к глобальным инструментам (GitHub, Figma, Stripe), стабильный доход | Проигрывают: рост издержек на обход блокировок, потеря зарубежных заказчиков, вынужденная миграция или уход в тень |
| **ИТ-пролетариат** (наёмные разработчики, сисадмины, техподдержка) | Стабильная зарплата, профессиональное развитие | Зарплаты стагнируют: медиана 183 тыс. ₽, рост ниже инфляции [20] [26]. Усиление эксплуатации: больше задач на поддержку обходных решений |
| **Цифровой прекариат** (вытесненные из формального сектора) | Выживание через неформальные практики | Маргинализация: работа через зеркала, крипто-оплата, риск блокировок и преследований |
#### 2. Диалектика рынка обхода: как сопротивление становится товаром
**А) Коммодификация доступа**
- VPN-приложения загружены 9,2 млн раз в марте 2026 — в 14 раз больше, чем год назад [15].
- Но надёжные сервисы становятся платными, требующими криптовалюты или зарубежных карт.
- **Вывод**: право на доступ к информации превращается в привилегию, распределяемую по платежеспособности.
**Б) Классовая дифференциация в методах обхода**
| Метод | Кто использует | Материальные требования | Политический потенциал |
|-------|---------------|------------------------|----------------------|
| Коммерческие VPN (Proton, Mullvad) | Мелкая буржуазия, квалифицированный пролетариат | 5–15$/мес, зарубежная карта | Низкий: централизованные сервисы уязвимы для блокировок и сбора метаданных |
| Self-hosted (VPS + VLESS/WireGuard) | ИТ-пролетариат с техническими навыками | Аренда зарубежного VPS, время на настройку | Средний: автономия, но индивидуализированное решение |
| Децентрализованные сети (Tor, Ceno, IPFS) | Активисты, техническая интеллигенция | Вычислительные ресурсы, знания | Высокий: воспроизводство средств коммуникации вне контроля |
| Офлайн-обмен (зеркала на флешках, локальные репозитории) | Прекариат, регионы с плохим интернетом | Физические носители, локальные сети | Потенциально высокий: создание параллельной инфраструктуры |
**В) Противоречие**: каждый технический ответ государства (блокировка протокола VLESS [19]) порождает новую адаптацию, но адаптация часто остаётся индивидуальной и не перерастает в коллективную практику. Это воспроизводит атомизацию, а не солидарность.
#### 3. Технические методы с марксистской точки зрения
**ТСПУ как овеществлённая классовая воля**
- Системы глубокой инспекции трафика (DPI) — это не нейтральные инструменты, а материализованная функция контроля над производительными силами.
- Их установка у операторов связи — форма **принудительного отчуждения**: провайдер вынужден содержать оборудование, которое работает против интересов его клиентов.
**Обход как присвоение средств производства**
- Когда пользователь настраивает собственный прокси, он фактически **присваивает средство производства коммуникации**.
- Но если это делается в одиночку, результат — временное облегчение, а не изменение отношений собственности.
**Коллективное присвоение как путь**
- Марксистский подход: технические решения должны быть направлены на **обобществление инфраструктуры**.
- Примеры: кооперативные хостинги, распределённые репозитории кода, локальные зеркала образовательных ресурсов.
- Ключевое условие: организация должна быть не технической, а социальной — через доверие, взаимопомощь, разделение труда.
#### 4. Вывод: изоляция как ускоритель классового расслоения
Политика «суверенного интернета» не устраняет неравенство — она **перекодирует его в цифровой форме**:
- Те, кто владеет ресурсами (деньги, знания, доступ к зарубежной инфраструктуре), сохраняют мобильность.
- Те, кто зависит от наёмного труда и государственных сервисов, оказываются в ловушке контролируемого сегмента.
Диалектический материаллизм подсказывает: противоречие между глобальным характером производительных сил (интернет) и национально-ограниченными производственными отношениями (контроль) будет обостряться. Вопрос не в том, *можно ли* технически обойти блокировку, а в том, *кто и на каких условиях* получает право на доступ к знаниям и коммуникациям.
Источники:
[1]: https://abit.ee/ru/kiberbezopasnost/sovereign-internet-runet-roskomnadzor-internet-isolation-censorship-russia-internet-law-blocking-ru "Суверенный интернет в России: с 1 марта 2026 года заработал"
[2]: https://pnz.ru/laws/s-1-marta-2026-goda-vstupayut-v-silu-novye-pravila-upravleniya-runetom-kak-teper-budet-rabotat-internet/ "С 1 марта 2026 года вступают в силу новые правила управления Рунетом"
[3]: https://www.ec-rs.ru/blog/novosti/suverennyy-internet-s-1-marta-2026-tsentralizovannoe-upravlenie-blokirovki-i-usilenie-antifroda/ "Суверенный интернет с 1 марта 2026: централизованное управление, блокировки и усиление антифрода"
[4]: https://www.rbc.ru/technology_and_media/09/11/2025/69107d8a9a79470274160bec "Власти уточнили правила вмешательства в работу Рунета — РБК"
[5]: https://www.fontanka.ru/2026/03/10/76302889/ "Российский интернет станет суверенным: отключат ли нас от глобальной сети"
[6]: https://www.instagram.com/reel/DQ7DqSiAaq-/ "Постановление №1667: с 1 марта 2026 года свободного интернета в России не будет"
[7]: https://habr.com/ru/articles/1006424/ "Суверенный интернет: что меняется с 1 марта 2026 года и как это работает"
[8]: https://habr.com/ru/news/771194/ "Суверенному Рунету исполнилось 4 года: история закона и практика"
[9]: https://www.zeluslugi.ru/info-czentr/stati/sut-zakona-o-suverennom-internete-v-rossii "Закон о суверенном интернете в России: суть и последствия"
[10]: https://www.quora.com/How-difficult-is-it-for-someone-in-Russia-to-access-foreign-websites-and-apps "How difficult is it for someone in Russia to access foreign websites and apps"
[11]: https://en.zona.media/article/2026/04/07/russian_internet_censorship_2026 "Russia's internet censorship in 2026: blackouts, broken payments, shrinking tools"
[12]: https://www.thedailystar.net/news/world/europe/news/internet-crackdown-russia-toughens-restrictions-vpns-4152536 "Internet crackdown: Russia toughens restrictions on VPNs"
[13]: https://habr.com/ru/news/1003760/ "СМИ: на конец февраля 2026 года Роскомнадзор ограничил доступ к 469 VPN-сервисам"
[14]: https://meduza.io/en/news/2026/04/16/russian-telecom-companies-agree-to-freeze-expansion-of-international-network-links-to-curb-vpn-use-rbc-reports "Russian telecom companies agree to freeze expansion of international links to curb VPN use"
[15]: https://www.fontanka.ru/2026/04/16/76370317/ "Ограничения VPN в России — последние инициативы и статистика"
[16]: https://korrespondent.net/world/russia/4660299-cheburnet-kak-v-rossyy-khotiat-yzolyrovat-ynternet "Чебурнет: как в России хотят изолировать интернет по китайскому образцу"
[17]: https://bb.lv/statja/v-mire/2024/03/12/ekspert-v-rf-vsyo-gotovo-dlya-izolyacii-ot-vsemirnogo-interneta-video "Эксперт: в РФ всё готово для изоляции от всемирного интернета"
[18]: https://www.tbank.ru/invest/social/profile/victorkoch/d3101a8f-eea6-4a61-9958-16ca5d6e0746/ "Как блокировки угрожают бизнесу и интернету: долгосрочные последствия изоляции"
[19]: https://prohoster.info/blog/administrirovanie/kogda-iz-interneta-budut-delat-cheburnet-obzor-proekta "Когда из интернета будут делать «чебурнет»: обзор проекта и технические условия"
[20]: https://goodlucker.ru/zakon/cheburnet.html "Чебурнет: закрытый интернет в России — главные особенности и сценарии работы"
[21]: https://club.dns-shop.ru/digest/157598-v-rossii-prinyali-pravila-pozvolyauschie-izolirovat-runet-i-filtr/ "В России приняли правила, позволяющие изолировать Рунет и фильтровать трафик через ТСПУ"
[22]: https://vpnblog.ru/russian-internet-control2024/ "Чебурнет наступает: как меняется интернет-ландшафт России в 2024"
[23]: https://vvvtv.ru/tehnologii/internet/cheburnet/ "Чебурнет — уже насущная реальность: технология глубокой фильтрации трафика"
@@ -0,0 +1,33 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 400" width="100%" height="auto">
<rect width="1200" height="400" fill="#0a0c10"/>
<!-- Hexagon pattern -->
<g stroke="#1a2332" stroke-width="1" fill="none" opacity="0.5">
<polygon points="100,100 130,80 160,100 160,140 130,160 100,140"/>
<polygon points="250,100 280,80 310,100 310,140 280,160 250,140"/>
<polygon points="400,100 430,80 460,100 460,140 430,160 400,140"/>
<polygon points="550,100 580,80 610,100 610,140 580,160 550,140"/>
<polygon points="700,100 730,80 760,100 760,140 730,160 700,140"/>
<polygon points="850,100 880,80 910,100 910,140 880,160 850,140"/>
<polygon points="1000,100 1030,80 1060,100 1060,140 1030,160 1000,140"/>
<polygon points="175,160 205,140 235,160 235,200 205,220 175,200"/>
<polygon points="325,160 355,140 385,160 385,200 355,220 325,200"/>
<polygon points="475,160 505,140 535,160 535,200 505,220 475,200"/>
<polygon points="625,160 655,140 685,160 685,200 655,220 625,200"/>
<polygon points="775,160 805,140 835,160 835,200 805,220 775,200"/>
<polygon points="925,160 955,140 985,160 985,200 955,220 925,200"/>
<polygon points="1075,160 1105,140 1135,160 1135,200 1105,220 1075,200"/>
</g>
<!-- Center text -->
<text x="600" y="175" font-family="monospace" font-size="36" fill="#58a6ff" text-anchor="middle" font-weight="bold">
Проблема загрузки Ubuntu на RD450X+5060ti
</text>
<text x="600" y="215" font-family="monospace" font-size="20" fill="#8b949e" text-anchor="middle">
Grub · nomodeset · EFI stub · Ubuntu
</text>
<!-- Decor line -->
<line x1="200" y1="250" x2="1000" y2="250" stroke="#30363d" stroke-width="1"/>
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

@@ -0,0 +1,112 @@
---
date: '2026-05-10T17:14:10+03:00'
lastmod: '2026-05-10T17:14:10+03:00'
draft: false
title: 'Проблема загрузки Ubuntu на RD450X+5060ti'
slug: 'rd450x_not_boot_5060ti'
description: 'После штатных выключения и включения сервера. Он перестал загружаться. Последнее сообщение на мониторе - EFI stub: Loaded initrd from LINUX_EFI_INITRD_MEDIA_GUID device path.'
categories:
- 'blog'
tags:
- 'linux'
- 'rd450x'
- 'grub'
- 'ошибки'
keywords:
- 'grub'
- 'rd450x'
- '5060ti'
- 'problem'
- 'LINUX_EFI_INITRD_MEDIA_GUID'
- 'EFI stub'
- 'ubuntu'
cover:
image: "hero.svg"
alt: "Hero картинка в SVG"
relative: true
---
## Проблема: зависание загрузки Ubuntu после обновления с сообщением EFI stub
### Симптомы
После выполнения `apt upgrade` (об этом я вспомнил уже после того как разобарлся с пробелмой) и перезагрузки система перестала загружаться. На экране последнее сообщение:
```
EFI stub: Loaded initrd from LINUX_EFI_INITRD_MEDIA_GUID device path
```
После этого — полное зависание. GRUB работает, выбор ядра доступен. Ошибок ядра (`kernel panic`, `Oops`) нет.
### Окружение
- ОС: Ubuntu (ядро 6.8.0-111-generic)
- Видеокарта: NVIDIA RTX 5060 Ti (архитектура Blackwell)
- Дисковая подсистема: программный RAID1 (mdadm)
### Диагностика
1. **Аппаратная часть исправна:** диски определяются в BIOS, SMART — PASSED, RAID-суперблоки на месте (`mdadm --examine` показал корректные UUID).
2. **RAID собирается:** `mdadm --assemble --scan` активен, `/proc/mdstat` — массив в состоянии `[UU]`. Проверял на соседней машине.
3. **LiveUSB с Ubuntu/Debian не загружается** — аналогичное зависание на той же строчке.
4. **UEFI Shell работает**, загрузчик GRUB физически присутствует на EFI-разделе.
### Решение
Загрузка с параметром ядра:
```
nomodeset
```
После добавления этого параметра в строку загрузки GRUB система стартует штатно. Механизм `nomodeset` отключает Kernel Mode Setting (KMS), предотвращая инициализацию DRM/драйвера видеокарты на раннем этапе загрузки.
### Причина
Ядро 6.8.0 не имеет полной поддержки видеокарт на базе архитектуры Blackwell (RTX 5060 Ti вышла позже релиза ядра). При попытке инициализации видеорежима через `nouveau` (или фолбэк-механизмы) происходит зависание на этапе настройки дисплейного контроллера.
`nomodeset` исключает этот этап, оставляя управление видеорежимом за прошивкой UEFI. Система загружается, но без ускорения графики — что для сервера в большинстве случаев некритично.
### Постоянное применение
```bash
echo 'GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nomodeset"' | sudo tee /etc/default/grub
sudo update-grub
```
### Корректное решение (убрать nomodeset)
1. Установить проприетарный драйвер NVIDIA версии 570 или новее.
2. Или обновить ядро до версии 6.12+, где поддержка Blackwell добавлена в `nouveau`.
### Вывод
Проблема не в дисках, не в RAID и не в памяти. Причина — отсутствие поддержки современной видеокарты в текущей версии ядра. Параметр `nomodeset` — рабочий временный обход, позволяющий сохранить функциональность системы до установки актуального драйвера или ядра.
### Дополнение
Я думал переустановить систему, залив Debian. Но после выбора параметра установки в загрузочном меню, я опять получал зависшую систему. Решилась пробелма что сложнее, одного параметра `nomodeset` не хватило, БЯМ подсказала расширенную версию:
Вот перечень параметров, которые вы должны добавить все вместе:
```
nomodeset acpi=off noapic nolapic pci=nomsi pci=nommconf console=tty0 console=ttyS0,115200
```
**Как это ввести**:
1. Загрузитесь с Ventoy, выберите Debian.
2. Нажмите `e` для редактирования.
3. Найдите строку с `linux`.
4. Удалите всё содержимое после `---` (или в конце строки) и вставьте туда эту строку.
5. Нажмите `Ctrl+X`.
**Что эти флаги делают**:
- `acpi=off noapic nolapic`: Отключают продвинутое управление питанием и прерываниями (часто выручает на серверном железе)[](https://otvet.mail.ru/question/242988552)[](https://lists.debian.org/debian-user/2010/12/msg00882.html).
- `pci=nomsi pci=nommconf`: Отключают альтернативные методы обработки прерываний PCIe[](https://lists.debian.org/debian-user/2010/12/msg00882.html).
- `console=tty0 console=ttyS0`: Говорят ядру дублировать вывод на обычный экран и на «виртуальный последовательный порт» — это часто сдвигает процесс с мертвой точки[](https://blog.gitcode.com/2ed11393511874d91bf536891afeff00.html)
@@ -0,0 +1,23 @@
---
date: '2026-05-17T10:03:50+03:00'
lastmod: '2026-05-17T10:03:50+03:00'
draft: true
title: '20260517 Netbox Start'
slug: '20260517 netbox start'
description: ''
categories:
- 'blog'
tags:
- 'linux'
keywords:
- 'hugo'
- 'blog'
cover:
image: "hero.svg"
alt: "Hero картинка в SVG"
relative: true
---
@@ -0,0 +1,495 @@
---
title: "Content Placeholder"
build:
render: never
list: never
publishResources: false
draft: true
---
# 📚 Полная инструкция по установке Memory OS + Hermes Agent
## Содержание
1. [Подготовка окружения](#1-подготовка-окружения)
2. [Настройка хранилищ](#2-настройка-хранилищ)
3. [Установка Memory OS](#3-установка-memory-os)
4. [Решение проблем](#4-решение-проблем)
5. [Проверка работы](#5-проверка-работы)
6. [Настройка автоматизации](#6-настройка-автоматизации)
---
## 1. Подготовка окружения
### 1.1. Системные требования
- Ubuntu 22.04/24.04 (или аналогичный Linux)
- Python 3.11+
- Docker 24.0+ и Docker Compose
- 16 GB RAM (рекомендуется)
### 1.2. Установка Docker и Docker Compose
```bash
# Установка Docker
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker $USER
# Установка Docker Compose
sudo apt install docker-compose-plugin
```
### 1.3. Установка Python и uv
```bash
# Установка Python
sudo apt install python3 python3-venv python3-pip
# Установка uv (быстрый менеджер пакетов)
curl -LsSf https://astral.sh/uv/install.sh | sh
source ~/.bashrc
```
### 1.4. Установка Ollama (для локальных эмбеддингов)
```bash
curl -fsSL https://ollama.com/install.sh | sh
ollama pull nomic-embed-text # или другую модель
```
---
## 2. Настройка хранилищ
### 2.1. Создание структуры каталогов
```bash
# Основная директория для всех данных
sudo mkdir -p /opt/hermes
sudo chown $USER:$USER /opt/hermes
# Структура данных
mkdir -p /opt/hermes/.hermes
mkdir -p /opt/hermes/vault/{wiki,raw,concepts,entities,comparisons,_meta,_archive}
mkdir -p /opt/hermes/vault/fabric
mkdir -p /opt/hermes/.hermes/logs
mkdir -p /opt/hermes/.hermes/cron/output
```
### 2.2. Монтирование Obsidian Vault (опционально)
**Если у вас Obsidian Vault в S3:**
```bash
# Установка s3fs
sudo apt install s3fs -y
# Создание файла с ключами
echo "ACCESS_KEY:SECRET_KEY" > ~/.passwd-s3fs
chmod 600 ~/.passwd-s3fs
# Монтирование
s3fs obsidian /opt/hermes/obsidian-vault \
-o passwd_file=/home/$USER/.passwd-s3fs \
-o allow_other \
-o use_cache=/tmp \
-o url=https://s3.nixg.ru \
-o endpoint=garage \
-o use_path_request_style \
-o sigv4
# Для автоматического монтирования (fstab)
echo "s3fs#obsidian /opt/hermes/obsidian-vault fuse _netdev,allow_other,passwd_file=/etc/passwd-s3fs,use_cache=/tmp,url=https://s3.nixg.ru,endpoint=garage,use_path_request_style,sigv4 0 0" | sudo tee -a /etc/fstab
```
### 2.3. Настройка переменных окружения
```bash
# Добавьте в ~/.bashrc
export HERMES_HOME=/opt/hermes/.hermes
export VAULT_PATH=/opt/hermes/vault
export WIKI_PATH=/opt/hermes/vault/wiki
export OBSIDIAN_VAULT_PATH=/opt/hermes/obsidian-vault
source ~/.bashrc
```
---
## 3. Установка Memory OS
### 3.1. Клонирование репозитория
```bash
cd /opt/hermes
git clone https://github.com/ClaudioDrews/memory-os.git
cd memory-os
```
### 3.2. Настройка виртуального окружения
```bash
# Через uv
uv venv --python 3.12
source .venv/bin/activate
uv pip install -r requirements.txt
# Или через venv
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
```
### 3.3. Настройка .env
```bash
cp .env.example .env
nano .env
```
**Пример `.env` для Polza.ai:**
```bash
# ── Required ──────────────────────────────────────────
REDIS_PASSWORD=26a7b9ccfc87717cf1e7b5e1ebf514a8
# ── Paths ─────────────────────────────────────────────
FABRIC_DIR=/opt/hermes/vault/fabric
VAULT_PATH=/opt/hermes/vault
WIKI_ROOT=/opt/hermes/vault/wiki
HERMES_HOME=/opt/hermes/.hermes
STATE_DB_PATH=/opt/hermes/.hermes/state.db
HERMES_LOGS_DIR=/opt/hermes/.hermes/logs
# ── Embedding Backend (Polza.ai) ─────────────────────
EMBEDDING_API_BASE=https://polza.ai/api/v1
EMBEDDING_MODEL=qwen/qwen3-embedding-8b
EMBEDDING_API_KEY=pza_ваш_ключ_здесь
EMBEDDING_DIMS=4096
# ── Icarus Extraction ─────────────────────────────────
ICARUS_ENDPOINT=https://polza.ai/api/v1/chat/completions
ICARUS_API_KEY_ENV=pza_ваш_ключ_здесь
ICARUS_EXTRACTION_MAX_TOKENS=4096
ICARUS_EXTRACTION_MODEL=qwen/qwen3-embedding-8b
# ── Strongly Recommended ──────────────────────────────
HERMES_AGENT_NAME=hermes
COLLECTION_NAME=knowledge_base
# ── Obsidian Integration ──────────────────────────────
ICARUS_OBSIDIAN=1
OBSIDIAN_VAULT_PATH=/opt/hermes/obsidian-vault
# ── Docker Compose volumes ────────────────────────────
MEMORY_OS_WIKI_PATH=/opt/hermes/vault/wiki
MEMORY_OS_HERMES_HOME=/opt/hermes/.hermes
MEMORY_OS_FABRIC_DIR=/opt/hermes/vault/fabric
```
### 3.4. Запуск Docker стека
```bash
cd /opt/hermes/memory-os/docker
cp ../.env .env
docker compose up -d
```
### 3.5. Установка плагина Icarus
```bash
cp -r /opt/hermes/memory-os/icarus /opt/hermes/.hermes/plugins/
```
### 3.6. Настройка контекстного усилителя
```bash
mkdir -p /opt/hermes/.hermes/scripts
ln -sf /opt/hermes/memory-os/scripts/context_enhancer.py /opt/hermes/.hermes/scripts/context_enhancer.py
```
### 3.7. Настройка базы данных
```bash
cd /opt/hermes/memory-os
python3 setup/setup_db.py
```
### 3.8. Применение протокола
```bash
if [ -f /opt/hermes/.hermes/SOUL.md ]; then
echo "" >> /opt/hermes/.hermes/SOUL.md
echo "<!-- Memory OS additions -->" >> /opt/hermes/.hermes/SOUL.md
cat /opt/hermes/memory-os/modifications/execution-agent-protocol.md >> /opt/hermes/.hermes/SOUL.md
fi
```
### 3.9. Настройка cron
```bash
(crontab -l 2>/dev/null; echo "0 * * * * cd /opt/hermes/memory-os && export REDIS_PASSWORD=26a7b9ccfc87717cf1e7b5e1ebf514a8 && source .venv/bin/activate && python3 scripts/wiki_continuous_ingest.py >> /opt/hermes/.hermes/logs/wiki-ingest.log 2>&1") | crontab -
```
### 3.10. Перезапуск Hermes
```bash
sudo /home/$USER/.local/bin/hermes gateway restart
```
---
## 4. Решение проблем
### 4.1. Ошибка: Permission denied при монтировании s3fs
**Проблема:** `s3fs: MOUNTPOINT: /opt/hermes/obsidian-vault permission denied`
**Решение:**
```bash
sudo chown $USER:$USER /opt/hermes/obsidian-vault
```
### 4.2. Ошибка: allow_other only allowed if 'user_allow_other' is set
**Проблема:** `fusermount: option allow_other only allowed if 'user_allow_other' is set in /etc/fuse.conf`
**Решение:**
```bash
sudo nano /etc/fuse.conf
# Раскомментируйте строку: user_allow_other
```
### 4.3. Ошибка: AuthorizationHeaderMalformed с S3
**Проблема:** `Authorization header malformed, unexpected scope: 20260619/us-east-1/s3/aws4_request`
**Решение:**
```bash
# Укажите правильный регион и используйте sigv4
s3fs obsidian /opt/hermes/obsidian-vault \
-o endpoint=garage \
-o sigv4 \
-o use_path_request_style
```
### 4.4. Ошибка: pip install --break-system-packages
**Проблема:** Ubuntu блокирует системную установку пакетов (PEP 668)
**Решение:**
```bash
# Используйте виртуальное окружение
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
# Или используйте uv
uv venv
source .venv/bin/activate
uv pip install -r requirements.txt
```
### 4.5. Ошибка: Vector dimension error (768 vs 4096)
**Проблема:** `Vector dimension error: expected dim: 4096, got 768`
**Причина:** `nomic-embed-text` выдаёт векторы размерности 768, а коллекция Qdrant настроена на 4096
**Решение:**
```bash
# Вариант 1: Использовать другую модель эмбеддингов (OpenRouter/Polza.ai)
# Вариант 2: Пересоздать коллекцию с размерностью 768
curl -X DELETE "http://localhost:6333/collections/knowledge_base"
curl -X PUT "http://localhost:6333/collections/knowledge_base" \
-H "Content-Type: application/json" \
-d '{"vectors": {"dense": {"size": 768, "distance": "Cosine"}}}'
```
### 4.6. Ошибка: Qdrant требует API ключ
**Проблема:** `401 Client Error: Unauthorized for url: http://localhost:6333`
**Решение:**
```bash
# В docker-compose.yml отключите аутентификацию
environment:
- QDRANT__SERVICE__API_KEY= # Оставляем пустым
```
### 4.7. Ошибка: Redis authentication required
**Проблема:** `⚠️ Redis indisponível: Authentication required.`
**Решение:**
```bash
# Убедитесь, что REDIS_PASSWORD экспортирован
export REDIS_PASSWORD=26a7b9ccfc87717cf1e7b5e1ebf514a8
python3 scripts/wiki_continuous_ingest.py
```
### 4.8. Ошибка: This model does not support embeddings
**Проблема:** `{"error":"this model does not support embeddings"}`
**Причина:** Не все модели Ollama поддерживают эмбеддинги
**Решение:** Используйте модели, явно предназначенные для эмбеддингов:
- `nomic-embed-text` (768 dims)
- `mxbai-embed-large` (1024 dims)
- Или облачные сервисы (OpenRouter, Polza.ai)
### 4.9. Ошибка: ModuleNotFoundError: No module named 'services'
**Проблема:** Python не находит модули Memory OS
**Решение:**
```bash
# Добавьте путь к PYTHONPATH
export PYTHONPATH=/opt/hermes/memory-os:$PYTHONPATH
python3 scripts/bulk_wiki_ingest_polza.py
```
---
## 5. Проверка работы
### 5.1. Проверка Docker стека
```bash
cd /opt/hermes/memory-os/docker
docker compose ps
# Все контейнеры должны быть в статусе Up и healthy
```
### 5.2. Проверка Qdrant
```bash
curl -s http://localhost:6333/ | python3 -m json.tool
curl -s -X GET "http://localhost:6333/collections/knowledge_base" | python3 -m json.tool
```
### 5.3. Проверка Redis
```bash
docker exec docker-redis-1 redis-cli -a 26a7b9ccfc87717cf1e7b5e1ebf514a8 ping
# Должен ответить: PONG
```
### 5.4. Индексация тестового документа
```bash
echo "# Test Document
This is a test document to verify indexing works.
## Content
Memory OS should index this document." > /opt/hermes/vault/wiki/test.md
cd /opt/hermes/memory-os
source .venv/bin/activate
export EMBEDDING_API_KEY=pza_ваш_ключ_здесь
python scripts/bulk_wiki_ingest_polza.py
```
### 5.5. Проверка поиска
```bash
cd /opt/hermes/memory-os
source .venv/bin/activate
python scripts/context_enhancer.py "test" --top-k 3
```
### 5.6. Проверка через Hermes
```bash
hermes chat
# В чате спросите: "What documents are in your knowledge base?"
```
---
## 6. Настройка автоматизации
### 6.1. Синхронизация Obsidian Vault
```bash
cat > /opt/hermes/sync_obsidian.sh << 'EOF'
#!/bin/bash
VAULT_SRC="/opt/hermes/obsidian-vault"
WIKI_DEST="/opt/hermes/vault/wiki/raw/obsidian"
mkdir -p "$WIKI_DEST"
rsync -av --include="*.md" --include="*/" --exclude="*" "$VAULT_SRC/" "$WIKI_DEST/"
cd /opt/hermes/memory-os
source .venv/bin/activate
export EMBEDDING_API_KEY=pza_ваш_ключ_здесь
python scripts/bulk_wiki_ingest_polza.py --wiki-root /opt/hermes/vault/wiki
EOF
chmod +x /opt/hermes/sync_obsidian.sh
# Добавление в cron (каждые 10 минут)
(crontab -l 2>/dev/null; echo "*/10 * * * * /opt/hermes/sync_obsidian.sh >> /opt/hermes/.hermes/logs/obsidian-sync.log 2>&1") | crontab -
```
### 6.2. Регулярная индексация (каждый час)
```bash
(crontab -l 2>/dev/null; echo "0 * * * * cd /opt/hermes/memory-os && export REDIS_PASSWORD=26a7b9ccfc87717cf1e7b5e1ebf514a8 && source .venv/bin/activate && python3 scripts/wiki_continuous_ingest.py >> /opt/hermes/.hermes/logs/wiki-ingest.log 2>&1") | crontab -
```
### 6.3. Резервное копирование
```bash
cat > /opt/hermes/backup.sh << 'EOF'
#!/bin/bash
BACKUP_DIR="/opt/hermes/backups"
mkdir -p "$BACKUP_DIR"
tar -czf "$BACKUP_DIR/hermes_backup_$(date +%Y%m%d_%H%M%S).tar.gz" \
/opt/hermes/.hermes \
/opt/hermes/vault \
/opt/hermes/memory-os/.env
EOF
chmod +x /opt/hermes/backup.sh
```
---
## 📌 Краткий чек-лист
- [ ] Docker и Docker Compose установлены
- [ ] Python 3.11+ установлен
- [ ] Hermes Agent установлен и работает
- [ ] Memory OS склонирован в `/opt/hermes/memory-os`
- [ ] Виртуальное окружение создано и активировано
- [ ] `.env` настроен с правильными ключами
- [ ] Docker стек запущен (redis, qdrant, worker)
- [ ] Плагин Icarus скопирован в `.hermes/plugins/`
- [ ] Коллекция Qdrant создана с правильной размерностью
- [ ] Тестовый документ проиндексирован
- [ ] Контекстный усилитель работает
- [ ] Cron задачи настроены
---
## 🔗 Полезные ссылки
- [Memory OS на GitHub](https://github.com/ClaudioDrews/memory-os)
- [Hermes Agent](https://github.com/ClaudioDrews/hermes-agent)
- [Qdrant Documentation](https://qdrant.tech/documentation/)
- [Ollama](https://ollama.ai/)
- [Polza.ai](https://polza.ai) (альтернатива OpenRouter)
---
## 📝 Примечания
1. **Размерность эмбеддингов** должна совпадать в `.env` и коллекции Qdrant
2. **API ключи** храните в `.env` и никогда не коммитьте в Git
3. **s3fs** может быть медленным — для больших объёмов рассмотрите rclone
4. **Контекстное окно** может переполняться при активном исследовании — используйте делегирование задач
---
*Инструкция составлена на основе реального опыта установки Memory OS на Ubuntu сервер. Если вы нашли ошибку или хотите дополнить инструкцию — создайте Issue или Pull Request в репозитории.*
+6
View File
@@ -0,0 +1,6 @@
+++
title = 'Сервер 1С на базе Debian'
+++
## Описание
Собираем сервер на базе Debian, Postgresql
+6
View File
@@ -0,0 +1,6 @@
+++
title = "Проекты"
slug = "projects"
+++
Пока собираю в кучу информацию для этого раздела...

Some files were not shown because too many files have changed in this diff Show More