diff --git a/archetypes/posts/hero.svg b/archetypes/posts/hero.svg new file mode 100644 index 0000000..116ede9 --- /dev/null +++ b/archetypes/posts/hero.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + Ansible Controller на Windows 10 + + + WSL2 · Debian · uv · VHDX + + + + + \ No newline at end of file diff --git a/archetypes/posts/index.md b/archetypes/posts/index.md new file mode 100644 index 0000000..849f6c6 --- /dev/null +++ b/archetypes/posts/index.md @@ -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 +--- \ No newline at end of file diff --git a/content/posts/20121013 ura-ya-na-koncerte-nazareth/13.10.12 - 1.jpg b/content/posts/20121013 ura-ya-na-koncerte-nazareth/13.10.12 - 1.jpg new file mode 100644 index 0000000..397496f Binary files /dev/null and b/content/posts/20121013 ura-ya-na-koncerte-nazareth/13.10.12 - 1.jpg differ diff --git a/content/posts/20121013 ura-ya-na-koncerte-nazareth/index.md b/content/posts/20121013 ura-ya-na-koncerte-nazareth/index.md new file mode 100644 index 0000000..6275b55 --- /dev/null +++ b/content/posts/20121013 ura-ya-na-koncerte-nazareth/index.md @@ -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) + diff --git a/content/posts/20140716 innovaciya-na-roi/index.md b/content/posts/20140716 innovaciya-na-roi/index.md new file mode 100644 index 0000000..385022f --- /dev/null +++ b/content/posts/20140716 innovaciya-na-roi/index.md @@ -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) +> +> Сейчас законы и решения принимаются думой и политическими партиями, которые легко купить за материальные ценности заинтересованными лицами или организациями. +> +> Поэтому очень часто принимаются решения и законы, в корне противоречащие жизни страны и народу России. +> +> Постоянное развитие населения требует адекватной реакции изменения существующих законов для дальнейшего развития страны, что существующая система обеспечить не может и не сможет. +> +> Народ не может самостоятельно законодательно создавать законы своей страны, отсюда недоверие народа к существующей власти, а также отсутствие веры народа в то, что любой человек страны может быть услышан в своей стране. +> +> +> **Практический результат** +> Невозможность подкупа и создания законов, противоречащих жизни людей России. +> +> Максимально эффективное и прямое принятие любого закона. +> +> Вера россиян в то, что они создают свою страну. +> +> Создание законодательной системы, как эталона для принятия на вооружение всему остальному миру. +> +> Данная система показывает максимальное доверие власти к народу, доверяя создание и развитие страны. +> +> Формирует фактическое, исполнительное, значение органов власти. +> +> Открывает новые возможности для создания открытой мировой системы, объединяющей большое количество стран в единую мировую систему саморегулирования. +> +> **Решение** +> Чтобы исключить такие невозможности, предлагаю создание вертикали принятия законодательных решений от народа России, когда изначально предложения, в том числе законодательные, выдвигаются любым гражданином России, и общим голосованием через интернет-ресурс "Российская общественная инициатива" положительные решения продвигаются по вертикали вверх. Чем больше положительных голосов - тем выше продвигается решение на законодательном уровне и принимается к обязательному исполнению государственными органами. Это позволит отказаться от всех существующих партий и того негативного влияния, которое они оказывают, продвигая проплаченные законы той или иной партией. +> +> Все поступающие инициативы не отклонять, а проводить их коррекцию, в минимальные сроки, включающие в себя грамматические ошибки и ненормативную лексику, не меняя основной смысл инициативы. \ No newline at end of file diff --git a/content/posts/20140729 razvyortyvanie-unifi-kontrollera-i-reshenie-soputstvuyushikh-oshibok/UniFi Screen.jpg b/content/posts/20140729 razvyortyvanie-unifi-kontrollera-i-reshenie-soputstvuyushikh-oshibok/UniFi Screen.jpg new file mode 100644 index 0000000..529cef6 Binary files /dev/null and b/content/posts/20140729 razvyortyvanie-unifi-kontrollera-i-reshenie-soputstvuyushikh-oshibok/UniFi Screen.jpg differ diff --git a/content/posts/20140729 razvyortyvanie-unifi-kontrollera-i-reshenie-soputstvuyushikh-oshibok/index.md b/content/posts/20140729 razvyortyvanie-unifi-kontrollera-i-reshenie-soputstvuyushikh-oshibok/index.md new file mode 100644 index 0000000..bc11f87 --- /dev/null +++ b/content/posts/20140729 razvyortyvanie-unifi-kontrollera-i-reshenie-soputstvuyushikh-oshibok/index.md @@ -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.???. После чего контроллер у меня заработал. \ No newline at end of file diff --git a/content/posts/20140809 yandeks-brauzer/index.md b/content/posts/20140809 yandeks-brauzer/index.md new file mode 100644 index 0000000..3a1a068 --- /dev/null +++ b/content/posts/20140809 yandeks-brauzer/index.md @@ -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/) \ No newline at end of file diff --git a/content/posts/20140910 Fixboot_and_Fixmbr/index (2).md b/content/posts/20140910 Fixboot_and_Fixmbr/index (2).md new file mode 100644 index 0000000..04742a3 --- /dev/null +++ b/content/posts/20140910 Fixboot_and_Fixmbr/index (2).md @@ -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 +''' +который выполняет ровно те же задачи, восстанавливая загрузочный сектор и +главную загрузочную запись, соответственно. diff --git a/content/posts/20140910 Fixboot_and_Fixmbr/index.md b/content/posts/20140910 Fixboot_and_Fixmbr/index.md new file mode 100644 index 0000000..6ea191c --- /dev/null +++ b/content/posts/20140910 Fixboot_and_Fixmbr/index.md @@ -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 +''' +который выполняет ровно те же задачи, восстанавливая загрузочный сектор и +главную загрузочную запись, соответственно. diff --git a/content/posts/20140924 corporate-boot-image/index.md b/content/posts/20140924 corporate-boot-image/index.md new file mode 100644 index 0000000..4172c2d --- /dev/null +++ b/content/posts/20140924 corporate-boot-image/index.md @@ -0,0 +1,24 @@ +--- +title: "Загрузочный образ" +date: "2014-09-24" +--- +В связи с тем, что на работе часто приходится рабочие станции приводить в +порядок после "настроки" пользователями я озаботился созданием инструмента +для быстрого развертывания операционной системы. + +Да-да, мы на работе всё еще используем ХР. Да, я в курсе, что её сняли с +поддержки. Нет, для работы мне не нужны ни DirectX11, ни IE9. + +Что же нужно мне для того, чтобы было удобно пользоваться "инструментом": + +1. Загрузчик с возможностью выбора устанавливаемой ОС - En, Ru, x86, x64, +WinPE, CloneZilla, и возможно её какие-то другие образы. +2. Возможность использования собственных установочных образов - +интегрировать обновления, драйвера, патчи, приложения. + +Почему не использовать готовые образы, типа Zver? Во-первых паранойя; +во-вторых это скучно; в-третьих все они меняют стандартный интерфейс, что +лично меня ужасно бесит. + +В дальнейшем, я создам серию публикаций с описанием, как того как получить +в своё пользование такой инструмент. diff --git a/content/posts/20140924 corporate-boot-image/markdown-img-paste-20210320192459699.png b/content/posts/20140924 corporate-boot-image/markdown-img-paste-20210320192459699.png new file mode 100644 index 0000000..2fa0f7f Binary files /dev/null and b/content/posts/20140924 corporate-boot-image/markdown-img-paste-20210320192459699.png differ diff --git a/content/posts/20140924 winxp-boot-drive.ru/index.md b/content/posts/20140924 winxp-boot-drive.ru/index.md new file mode 100644 index 0000000..43b50fc --- /dev/null +++ b/content/posts/20140924 winxp-boot-drive.ru/index.md @@ -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, что и будет отображаться в метках публикуемых сообщений. + diff --git a/content/posts/20141008 borba-za-zdorove-ili-puzo-no-pasaran/20141008_234710.jpg b/content/posts/20141008 borba-za-zdorove-ili-puzo-no-pasaran/20141008_234710.jpg new file mode 100644 index 0000000..250d746 Binary files /dev/null and b/content/posts/20141008 borba-za-zdorove-ili-puzo-no-pasaran/20141008_234710.jpg differ diff --git a/content/posts/20141008 borba-za-zdorove-ili-puzo-no-pasaran/20141008_234728.jpg b/content/posts/20141008 borba-za-zdorove-ili-puzo-no-pasaran/20141008_234728.jpg new file mode 100644 index 0000000..555450e Binary files /dev/null and b/content/posts/20141008 borba-za-zdorove-ili-puzo-no-pasaran/20141008_234728.jpg differ diff --git a/content/posts/20141008 borba-za-zdorove-ili-puzo-no-pasaran/gto-normy-2014-stup-07m.jpg b/content/posts/20141008 borba-za-zdorove-ili-puzo-no-pasaran/gto-normy-2014-stup-07m.jpg new file mode 100644 index 0000000..fdaa708 Binary files /dev/null and b/content/posts/20141008 borba-za-zdorove-ili-puzo-no-pasaran/gto-normy-2014-stup-07m.jpg differ diff --git a/content/posts/20141008 borba-za-zdorove-ili-puzo-no-pasaran/index.md b/content/posts/20141008 borba-za-zdorove-ili-puzo-no-pasaran/index.md new file mode 100644 index 0000000..90d20bd --- /dev/null +++ b/content/posts/20141008 borba-za-zdorove-ili-puzo-no-pasaran/index.md @@ -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) + + +Посмотрим что из меня выйдет через некоторое время. \ No newline at end of file diff --git a/content/posts/20141017 nacionalizaciyu-centrobanka-zapretili/iXCWMlaTYhQ.jpg b/content/posts/20141017 nacionalizaciyu-centrobanka-zapretili/iXCWMlaTYhQ.jpg new file mode 100644 index 0000000..384ff30 Binary files /dev/null and b/content/posts/20141017 nacionalizaciyu-centrobanka-zapretili/iXCWMlaTYhQ.jpg differ diff --git a/content/posts/20141017 nacionalizaciyu-centrobanka-zapretili/index.md b/content/posts/20141017 nacionalizaciyu-centrobanka-zapretili/index.md new file mode 100644 index 0000000..a3f5502 --- /dev/null +++ b/content/posts/20141017 nacionalizaciyu-centrobanka-zapretili/index.md @@ -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) \ No newline at end of file diff --git a/content/posts/20141018 obrazovanie-bylo-stalo/item.ru.md b/content/posts/20141018 obrazovanie-bylo-stalo/item.ru.md new file mode 100644 index 0000000..c99c7e4 --- /dev/null +++ b/content/posts/20141018 obrazovanie-bylo-stalo/item.ru.md @@ -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) \ No newline at end of file diff --git a/content/posts/20141022 265-solnechnykh-dnei-v-godu-a-v-ostalnye/index.md b/content/posts/20141022 265-solnechnykh-dnei-v-godu-a-v-ostalnye/index.md new file mode 100644 index 0000000..d218aa4 --- /dev/null +++ b/content/posts/20141022 265-solnechnykh-dnei-v-godu-a-v-ostalnye/index.md @@ -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/) + diff --git a/content/posts/20141022 265-solnechnykh-dnei-v-godu-a-v-ostalnye/led.jpg b/content/posts/20141022 265-solnechnykh-dnei-v-godu-a-v-ostalnye/led.jpg new file mode 100644 index 0000000..29e021c Binary files /dev/null and b/content/posts/20141022 265-solnechnykh-dnei-v-godu-a-v-ostalnye/led.jpg differ diff --git a/content/posts/20141126 captive-portal/index.md b/content/posts/20141126 captive-portal/index.md new file mode 100644 index 0000000..bb059ff --- /dev/null +++ b/content/posts/20141126 captive-portal/index.md @@ -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 +> +> $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 +> ?> +>

Welcome to

+> To access the Internet you must first enter your details:

+>
+> +> +> +> +>
Your full name:
Your email address:
+>
+> } 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() { +> +> ?> +> +> Welcome to <?php echo $site_name;?> +> +> +> +> +> +> } +> +> // Function to print page footer +> function print_footer() { +> echo ""; +> echo ""; +> +> } +> +> ?> +> +> Данная страница может быть любой, смысл лишь в том, чтобы получить мак пользователя и добавить его в 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 можем показывать пользователю релкаму, смешные видео, заставлять его оставлять свою почту и т.д. \ No newline at end of file diff --git a/content/posts/20141218 flag/IMG_20141122_090828-PANO.jpg b/content/posts/20141218 flag/IMG_20141122_090828-PANO.jpg new file mode 100644 index 0000000..aeb8093 Binary files /dev/null and b/content/posts/20141218 flag/IMG_20141122_090828-PANO.jpg differ diff --git a/content/posts/20141218 flag/Year in Photos 2014.m4v b/content/posts/20141218 flag/Year in Photos 2014.m4v new file mode 100644 index 0000000..c3441dd Binary files /dev/null and b/content/posts/20141218 flag/Year in Photos 2014.m4v differ diff --git a/content/posts/20141218 flag/index.md b/content/posts/20141218 flag/index.md new file mode 100644 index 0000000..c53c1dc --- /dev/null +++ b/content/posts/20141218 flag/index.md @@ -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) \ No newline at end of file diff --git a/content/posts/20151215 takhikardiya/index.ru.md b/content/posts/20151215 takhikardiya/index.ru.md new file mode 100644 index 0000000..e0f920a --- /dev/null +++ b/content/posts/20151215 takhikardiya/index.ru.md @@ -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 в покое. Перебор. \ No newline at end of file diff --git a/content/posts/20160314 pervyi-post/index.md b/content/posts/20160314 pervyi-post/index.md new file mode 100644 index 0000000..f6d88df --- /dev/null +++ b/content/posts/20160314 pervyi-post/index.md @@ -0,0 +1,15 @@ +--- +date: "2019-03-14 19:30:56" +taxonomy: + categories: + - blog + tags: + - blog + - gelonet.ru +title: "Первый пост" +--- + +# Наконец-то! + + Почти два года пробуя различные системы, подходы и в несколько подходов формил наконец-то что-то рабочее изготовил для блога. На основе [Grav CMS](https://getgrav.org/) + Будем продолжать. \ No newline at end of file diff --git a/content/posts/20160422 parad-v-krasnodare/image185613297.jpg b/content/posts/20160422 parad-v-krasnodare/image185613297.jpg new file mode 100644 index 0000000..112c6d3 Binary files /dev/null and b/content/posts/20160422 parad-v-krasnodare/image185613297.jpg differ diff --git a/content/posts/20160422 parad-v-krasnodare/index.md b/content/posts/20160422 parad-v-krasnodare/index.md new file mode 100644 index 0000000..366ea4d --- /dev/null +++ b/content/posts/20160422 parad-v-krasnodare/index.md @@ -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 после выступления атамана Кубанского войска Николая Долуды и почетных гостей начнется торжественное прохождение казачьих парадных расчетов и военнослужащих. +> +> Также в параде примут участие взвод барабанщиков, пешая и конная группы Почетного караула, представители Кубанского казачьего хора и казачьих кадетских корпусов. +> +> Как сообщили в мэрии Краснодара, во время подготовки и проведения казачьего парада в центре города ограничат движение. +> +> Пресс-служба администрации Краснодарского края \ No newline at end of file diff --git a/content/posts/20170122 otvet-stalingrada/deti.jpg b/content/posts/20170122 otvet-stalingrada/deti.jpg new file mode 100644 index 0000000..0c9fc19 Binary files /dev/null and b/content/posts/20170122 otvet-stalingrada/deti.jpg differ diff --git a/content/posts/20170122 otvet-stalingrada/index.md b/content/posts/20170122 otvet-stalingrada/index.md new file mode 100644 index 0000000..d2dcd88 --- /dev/null +++ b/content/posts/20170122 otvet-stalingrada/index.md @@ -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 года, по ночам я видела, как мимо нашего дома с тракторного завода шли танки, на борту каждого из них белой краской было написано: «Ответ Сталинграда». Заводской конвейер еще не был пущен. Эти танки специалисты собирали, снимая детали с разбитых танков. Эти слова «Ответ Сталинграда» мне хотелось написать мелом и на стене нашей восстановленной школы. Но я почему-то постеснялась это сделать, о чем до сих пор жалею. + +Специально для Столетия \ No newline at end of file diff --git a/content/posts/20190305 staticgenerator.ru/staticgenerator.ru.md b/content/posts/20190305 staticgenerator.ru/staticgenerator.ru.md new file mode 100644 index 0000000..a6b4cd7 --- /dev/null +++ b/content/posts/20190305 staticgenerator.ru/staticgenerator.ru.md @@ -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/) diff --git a/content/posts/20190310 quickstart pelican/index.md b/content/posts/20190310 quickstart pelican/index.md new file mode 100644 index 0000000..4aa06c7 --- /dev/null +++ b/content/posts/20190310 quickstart pelican/index.md @@ -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 diff --git a/content/posts/20190314 debian migration/index.md b/content/posts/20190314 debian migration/index.md new file mode 100644 index 0000000..6792d16 --- /dev/null +++ b/content/posts/20190314 debian migration/index.md @@ -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. Сбор информации об установленных пакетах diff --git a/content/posts/20190314 obo-mne/index.md b/content/posts/20190314 obo-mne/index.md new file mode 100644 index 0000000..b85eda4 --- /dev/null +++ b/content/posts/20190314 obo-mne/index.md @@ -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' + +Страница не закончена. + diff --git a/content/posts/20190323 yandeks-brauzer-dlya-linux/index.md b/content/posts/20190323 yandeks-brauzer-dlya-linux/index.md new file mode 100644 index 0000000..e8c5622 --- /dev/null +++ b/content/posts/20190323 yandeks-brauzer-dlya-linux/index.md @@ -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) \ No newline at end of file diff --git a/content/posts/20190404 pereezd-s-google-plus/img10.png b/content/posts/20190404 pereezd-s-google-plus/img10.png new file mode 100644 index 0000000..f06c762 Binary files /dev/null and b/content/posts/20190404 pereezd-s-google-plus/img10.png differ diff --git a/content/posts/20190404 pereezd-s-google-plus/item.ru.md b/content/posts/20190404 pereezd-s-google-plus/item.ru.md new file mode 100644 index 0000000..ab53639 --- /dev/null +++ b/content/posts/20190404 pereezd-s-google-plus/item.ru.md @@ -0,0 +1,11 @@ +--- +title: 'Переезд с Google+' +media_order: img10.png +published: true +date: '19:29 04.04.2019' +--- + +Сегодня завершил перевоз информации из Google+. Пришлось вручную перелопатить сообщения с 2012 года. Нудная и не интересная работа. +Зарёкся на сторонних ресурсах что-то выкладывать. Только ссылки. + +Конечно, там ничего очобо важного и неповторимого не было. Как сейчас модно говорить "эксклюзивный контент" не присутствует, но всё же это мои силы, мо время, мой след. =) \ No newline at end of file diff --git a/content/posts/20190411 zachem-pereopredelyat-temy-v-grav-cms/grav-logo.png b/content/posts/20190411 zachem-pereopredelyat-temy-v-grav-cms/grav-logo.png new file mode 100644 index 0000000..3f29dc2 Binary files /dev/null and b/content/posts/20190411 zachem-pereopredelyat-temy-v-grav-cms/grav-logo.png differ diff --git a/content/posts/20190411 zachem-pereopredelyat-temy-v-grav-cms/index.md b/content/posts/20190411 zachem-pereopredelyat-temy-v-grav-cms/index.md new file mode 100644 index 0000000..9dd625d --- /dev/null +++ b/content/posts/20190411 zachem-pereopredelyat-temy-v-grav-cms/index.md @@ -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 - это будет новый класс темы. + +> namespace Grav\Theme; +> class Mytheme extends Antimatter +> { +> // Some new methods, properties etc. +> } +> ?> + +mytheme - это ваша новая тема +Antimatter - это тема донор + +Теперь вы можете скопировать файл sidebar.html.twig из antimatter/templates/partials в mytheme/templates/partials и спокойной его изменять уже в вашей теме. \ No newline at end of file diff --git a/content/posts/20190428 icq-dlya-zameny-whatsapp-i-viber/2019-04-28_19-50-10.png b/content/posts/20190428 icq-dlya-zameny-whatsapp-i-viber/2019-04-28_19-50-10.png new file mode 100644 index 0000000..028678d Binary files /dev/null and b/content/posts/20190428 icq-dlya-zameny-whatsapp-i-viber/2019-04-28_19-50-10.png differ diff --git a/content/posts/20190428 icq-dlya-zameny-whatsapp-i-viber/Screenshot_2019-04-28-19-23-17-183_com.icq.mobile.client (2).png b/content/posts/20190428 icq-dlya-zameny-whatsapp-i-viber/Screenshot_2019-04-28-19-23-17-183_com.icq.mobile.client (2).png new file mode 100644 index 0000000..e58480c Binary files /dev/null and b/content/posts/20190428 icq-dlya-zameny-whatsapp-i-viber/Screenshot_2019-04-28-19-23-17-183_com.icq.mobile.client (2).png differ diff --git a/content/posts/20190428 icq-dlya-zameny-whatsapp-i-viber/Screenshot_2019-04-28-19-23-17-183_com.icq.mobile.client.png b/content/posts/20190428 icq-dlya-zameny-whatsapp-i-viber/Screenshot_2019-04-28-19-23-17-183_com.icq.mobile.client.png new file mode 100644 index 0000000..a594c81 Binary files /dev/null and b/content/posts/20190428 icq-dlya-zameny-whatsapp-i-viber/Screenshot_2019-04-28-19-23-17-183_com.icq.mobile.client.png differ diff --git a/content/posts/20190428 icq-dlya-zameny-whatsapp-i-viber/index.md b/content/posts/20190428 icq-dlya-zameny-whatsapp-i-viber/index.md new file mode 100644 index 0000000..5a414db --- /dev/null +++ b/content/posts/20190428 icq-dlya-zameny-whatsapp-i-viber/index.md @@ -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) + +Рассылку сообщения сразу нескольким адресатам сделать не получилось? только переслать полученное сообщение. Ограничения на количество получателей отсутствует. Так что поздравительные штормы сообщений создавать не очень удобно. Конечно, можно создать группу в которой будут все контакты и создать сообщение в ней. Но как-то это очень криво. + +**Вывод: Думаю можно переходить. Функцонал уже достаточен для повседневного использования. С учётом всяких непонятностей с блокировками. Хранением Персональных данных на территории РФ и прочими законодательными вывертами в виде автономного интернета, то лучше переходить на "отечественные" сервисы. Ностальгия при звуке "А-ау" - бесценно.** \ No newline at end of file diff --git a/content/posts/20190428 icq-dlya-zameny-whatsapp-i-viber/screenshot-icq.com-2019-04-28-18-02-52-634.png b/content/posts/20190428 icq-dlya-zameny-whatsapp-i-viber/screenshot-icq.com-2019-04-28-18-02-52-634.png new file mode 100644 index 0000000..82397a1 Binary files /dev/null and b/content/posts/20190428 icq-dlya-zameny-whatsapp-i-viber/screenshot-icq.com-2019-04-28-18-02-52-634.png differ diff --git a/content/posts/20190428 icq-dlya-zameny-whatsapp-i-viber/Замещающий текст (1).png b/content/posts/20190428 icq-dlya-zameny-whatsapp-i-viber/Замещающий текст (1).png new file mode 100644 index 0000000..ef20cf8 Binary files /dev/null and b/content/posts/20190428 icq-dlya-zameny-whatsapp-i-viber/Замещающий текст (1).png differ diff --git a/content/posts/20190505 python-novyi-angliiskii/index.md b/content/posts/20190505 python-novyi-angliiskii/index.md new file mode 100644 index 0000000..afc2da3 --- /dev/null +++ b/content/posts/20190505 python-novyi-angliiskii/index.md @@ -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) + diff --git a/content/posts/20190601 10-sposobov-uskorit-raboty-c-libreoffice/index.md b/content/posts/20190601 10-sposobov-uskorit-raboty-c-libreoffice/index.md new file mode 100644 index 0000000..696c563 --- /dev/null +++ b/content/posts/20190601 10-sposobov-uskorit-raboty-c-libreoffice/index.md @@ -0,0 +1,8 @@ +--- +title: '10 способов ускорить работы c LibreOffice' +date: '2019-06-01T17:05:45+03:00' +feed: + limit: 10 +draft: 'true' +--- + diff --git a/content/posts/20200309 proverka-ssd/crucial-storage-executive-ssd-utility.png b/content/posts/20200309 proverka-ssd/crucial-storage-executive-ssd-utility.png new file mode 100644 index 0000000..2034319 Binary files /dev/null and b/content/posts/20200309 proverka-ssd/crucial-storage-executive-ssd-utility.png differ diff --git a/content/posts/20200309 proverka-ssd/crystaldiskinfo-decimal-raw-values.png b/content/posts/20200309 proverka-ssd/crystaldiskinfo-decimal-raw-values.png new file mode 100644 index 0000000..d456a9a Binary files /dev/null and b/content/posts/20200309 proverka-ssd/crystaldiskinfo-decimal-raw-values.png differ diff --git a/content/posts/20200309 proverka-ssd/crystaldiskinfo-smart-main.png b/content/posts/20200309 proverka-ssd/crystaldiskinfo-smart-main.png new file mode 100644 index 0000000..79252f8 Binary files /dev/null and b/content/posts/20200309 proverka-ssd/crystaldiskinfo-smart-main.png differ diff --git a/content/posts/20200309 proverka-ssd/index.md b/content/posts/20200309 proverka-ssd/index.md new file mode 100644 index 0000000..fd14dfb --- /dev/null +++ b/content/posts/20200309 proverka-ssd/index.md @@ -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 для хранения важных данных, всегда имейте их резервную копию где-либо ещё — в облаке, на обычном жестком диске, оптических дисках. К сожалению, с твердотельными накопителями актуальна проблема внезапного полного выхода из строя без каких-либо предварительных симптомов, это нужно учитывать. \ No newline at end of file diff --git a/content/posts/20200309 proverka-ssd/wmic-diskdrive-get-status-ssd.png b/content/posts/20200309 proverka-ssd/wmic-diskdrive-get-status-ssd.png new file mode 100644 index 0000000..0725458 Binary files /dev/null and b/content/posts/20200309 proverka-ssd/wmic-diskdrive-get-status-ssd.png differ diff --git a/content/posts/20200503 atom-plus-markdown/index.md b/content/posts/20200503 atom-plus-markdown/index.md new file mode 100644 index 0000000..ee8fccf --- /dev/null +++ b/content/posts/20200503 atom-plus-markdown/index.md @@ -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" diff --git a/content/posts/20200503 atom-plus-markdown/screenshot-atom.io-2020.05.03-15_33_48.png b/content/posts/20200503 atom-plus-markdown/screenshot-atom.io-2020.05.03-15_33_48.png new file mode 100644 index 0000000..2a9c60c Binary files /dev/null and b/content/posts/20200503 atom-plus-markdown/screenshot-atom.io-2020.05.03-15_33_48.png differ diff --git a/content/posts/20200503 atom-plus-markdown/Снимок экрана_2020-05-03_15-47-43.png b/content/posts/20200503 atom-plus-markdown/Снимок экрана_2020-05-03_15-47-43.png new file mode 100644 index 0000000..3e70ba0 Binary files /dev/null and b/content/posts/20200503 atom-plus-markdown/Снимок экрана_2020-05-03_15-47-43.png differ diff --git a/content/posts/20200503 atom-plus-markdown/Снимок экрана_2020-05-03_16-06-03.png b/content/posts/20200503 atom-plus-markdown/Снимок экрана_2020-05-03_16-06-03.png new file mode 100644 index 0000000..1668ec3 Binary files /dev/null and b/content/posts/20200503 atom-plus-markdown/Снимок экрана_2020-05-03_16-06-03.png differ diff --git a/content/posts/20200503 atom-plus-markdown/Снимок экрана_2020-05-03_16-36-21.png b/content/posts/20200503 atom-plus-markdown/Снимок экрана_2020-05-03_16-36-21.png new file mode 100644 index 0000000..a823d80 Binary files /dev/null and b/content/posts/20200503 atom-plus-markdown/Снимок экрана_2020-05-03_16-36-21.png differ diff --git a/content/posts/20201216 otkryvayu-uzhe-otkrytuyu-korobku/170-1702669_18kib-623x623-openbox-logo-v2-by-skeletux.png b/content/posts/20201216 otkryvayu-uzhe-otkrytuyu-korobku/170-1702669_18kib-623x623-openbox-logo-v2-by-skeletux.png new file mode 100644 index 0000000..18813f8 Binary files /dev/null and b/content/posts/20201216 otkryvayu-uzhe-otkrytuyu-korobku/170-1702669_18kib-623x623-openbox-logo-v2-by-skeletux.png differ diff --git a/content/posts/20201216 otkryvayu-uzhe-otkrytuyu-korobku/arc-clone.jpg b/content/posts/20201216 otkryvayu-uzhe-otkrytuyu-korobku/arc-clone.jpg new file mode 100644 index 0000000..fc748a0 Binary files /dev/null and b/content/posts/20201216 otkryvayu-uzhe-otkrytuyu-korobku/arc-clone.jpg differ diff --git a/content/posts/20201216 otkryvayu-uzhe-otkrytuyu-korobku/blocks.jpg b/content/posts/20201216 otkryvayu-uzhe-otkrytuyu-korobku/blocks.jpg new file mode 100644 index 0000000..e8e37c2 Binary files /dev/null and b/content/posts/20201216 otkryvayu-uzhe-otkrytuyu-korobku/blocks.jpg differ diff --git a/content/posts/20201216 otkryvayu-uzhe-otkrytuyu-korobku/index.md b/content/posts/20201216 otkryvayu-uzhe-otkrytuyu-korobku/index.md new file mode 100644 index 0000000..57a2388 --- /dev/null +++ b/content/posts/20201216 otkryvayu-uzhe-otkrytuyu-korobku/index.md @@ -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 \ No newline at end of file diff --git a/content/posts/20201216 otkryvayu-uzhe-otkrytuyu-korobku/Снимок экрана_2020-12-18_00-59-08.png b/content/posts/20201216 otkryvayu-uzhe-otkrytuyu-korobku/Снимок экрана_2020-12-18_00-59-08.png new file mode 100644 index 0000000..5621e2e Binary files /dev/null and b/content/posts/20201216 otkryvayu-uzhe-otkrytuyu-korobku/Снимок экрана_2020-12-18_00-59-08.png differ diff --git a/content/posts/20201221 zozh/index.md b/content/posts/20201221 zozh/index.md new file mode 100644 index 0000000..ea01678 --- /dev/null +++ b/content/posts/20201221 zozh/index.md @@ -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,буду с него брать статистику по нагрузкам. Буду брать информацию по потребляемым продуктам и их калорийности из журнала в телефоне. Данные о сне, физических нагрузках, составе крови, потребления жидкости и прочее. То есть буду стараться полностью оцифровать свой процесс достижения цели. +Ах да,про какую цель я говорю? Получить пенсию! #КактебетакоеПФР На самом деле, такой важной вехой и целью станет получение золотого значка ГТО. Ну, скатертью дорожка,как говориться и ПОЕХАЛИ! + +Этот текст уйдет в Дзен и Телеграм. В ВК выложу позитивныйпост,когда достигну видимых результатов. diff --git a/content/posts/20201230 standart_krasoty/index.md b/content/posts/20201230 standart_krasoty/index.md new file mode 100644 index 0000000..d73c37c --- /dev/null +++ b/content/posts/20201230 standart_krasoty/index.md @@ -0,0 +1,15 @@ +--- +title: 'Стандарт красоты' +date: '2020-12-30T23:34:45+03:00' +draft: "true" +--- + +Для начала определим текущий статус: +Рост 178 +Вес 95,8 +Объем бедер +Объем талии +Объем пуза +Объем шеи +Количество подтягиваний +Количество отжиманий diff --git a/content/posts/20220927 aboutme/index.ru.md b/content/posts/20220927 aboutme/index.ru.md new file mode 100644 index 0000000..0812387 --- /dev/null +++ b/content/posts/20220927 aboutme/index.ru.md @@ -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 \ No newline at end of file diff --git a/content/posts/20221009 windows10-autologin/dall-e-autologin.jpg b/content/posts/20221009 windows10-autologin/dall-e-autologin.jpg new file mode 100644 index 0000000..5a9d184 Binary files /dev/null and b/content/posts/20221009 windows10-autologin/dall-e-autologin.jpg differ diff --git a/content/posts/20221009 windows10-autologin/index.md b/content/posts/20221009 windows10-autologin/index.md new file mode 100644 index 0000000..5bb1c6a --- /dev/null +++ b/content/posts/20221009 windows10-autologin/index.md @@ -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 + +# diff --git a/content/posts/20221026 cv-markdown/index.ru.md b/content/posts/20221026 cv-markdown/index.ru.md new file mode 100644 index 0000000..bac8921 --- /dev/null +++ b/content/posts/20221026 cv-markdown/index.ru.md @@ -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 +--- diff --git a/content/posts/20221026 firefox-news/0dd249ad-4d46-4cb3-bd21-695a386454c1.png b/content/posts/20221026 firefox-news/0dd249ad-4d46-4cb3-bd21-695a386454c1.png new file mode 100644 index 0000000..112ac34 Binary files /dev/null and b/content/posts/20221026 firefox-news/0dd249ad-4d46-4cb3-bd21-695a386454c1.png differ diff --git a/content/posts/20221026 firefox-news/13a9d452-d64b-495b-adbe-d4f60b23a1d9.png b/content/posts/20221026 firefox-news/13a9d452-d64b-495b-adbe-d4f60b23a1d9.png new file mode 100644 index 0000000..96c5e26 Binary files /dev/null and b/content/posts/20221026 firefox-news/13a9d452-d64b-495b-adbe-d4f60b23a1d9.png differ diff --git a/content/posts/20221026 firefox-news/2b7028b8-dadc-418b-99ff-e59b677333ce.jpg b/content/posts/20221026 firefox-news/2b7028b8-dadc-418b-99ff-e59b677333ce.jpg new file mode 100644 index 0000000..35ccabf Binary files /dev/null and b/content/posts/20221026 firefox-news/2b7028b8-dadc-418b-99ff-e59b677333ce.jpg differ diff --git a/content/posts/20221026 firefox-news/3d31b775-d856-46bf-960d-51aba092c8c3.png b/content/posts/20221026 firefox-news/3d31b775-d856-46bf-960d-51aba092c8c3.png new file mode 100644 index 0000000..ae0f407 Binary files /dev/null and b/content/posts/20221026 firefox-news/3d31b775-d856-46bf-960d-51aba092c8c3.png differ diff --git a/content/posts/20221026 firefox-news/index.ru.md b/content/posts/20221026 firefox-news/index.ru.md new file mode 100644 index 0000000..052718b --- /dev/null +++ b/content/posts/20221026 firefox-news/index.ru.md @@ -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 теперь распознает текст на изображениях и позволяет копировать, выделить и встевать его. Функция даже распознает заглавные буквы, так что скопированный текст даже не требуется дополнительно изменять. diff --git a/content/posts/20221026 policy-backup/index.ru.md b/content/posts/20221026 policy-backup/index.ru.md new file mode 100644 index 0000000..ca95741 --- /dev/null +++ b/content/posts/20221026 policy-backup/index.ru.md @@ -0,0 +1,19 @@ ++++ +title = "Разработка политики резервного копирования" +description = "Один из самых важных документов, которые обеспечивают функционирование ИТ-инфраструктуры и планирование бюджета на резервное копирование" +date = "2022-10-26T09:27:27.158Z" +tags = [ "документ", "itsm" ] +draft = true ++++ + +## Необходимость резервного копирования + +Для меня, резервное копирование настолько само-собой разумеющееся дело, что объяснить и обосновать его необходимость бизнесу оказалось сложно. Аргументы заранее не подготовил просто. Поэтому и родился этот документ. + +Резерв - это то, что обеспечивает в случае надобности возможность дальнейшей работы. В случаае ИТ - это резервная копия данных. Благодаря наличию резерва снижаются риски потери или повреждения данных. То есть, рабочие данные, в случае потери, можно восстановить максиамльно полно. Полнота восстановления зависит от методики резервирования. Конечно, безопасность данных подразумевает, что защищаемся мы от ПОТЕНЦИАЛЬНЫХ проблем и риски имеют различный вес. + +От каких потенциальные проблем может защитить резервное копирование? Например, сбои оборудования, атака вируса шифровальщика, повреждение данных в процессе работы ПО, стихиное бедствие и конечно же человеческие ошибки. + +Сейчас, когда приктически вся дейтельность так или иначе зависит от использования ИТ систем и в процессе формирует, обрбатывает и сохраняет данные, необходимость защиты данных и максимально быстрого восстановления работы в случае ИТ сбоев становятся как-никогда важны. Если у предприятия оптовой торговли в один момент пропадет информация о заказах, заказчиках, грузах и складских остатках, то продолжить работу будет практически невозможно. Слищком много информации и вся она храниться в ИТ системах. + +Виды рисков, типы данных, частота резервного копирования, методика создания, длительность хранения и другие параметры включаются в Политику резервного копирования. diff --git a/content/posts/20230822 prometheus_node_exporter/logo_product_prometheus.png b/content/posts/20230822 prometheus_node_exporter/logo_product_prometheus.png new file mode 100644 index 0000000..5797be3 Binary files /dev/null and b/content/posts/20230822 prometheus_node_exporter/logo_product_prometheus.png differ diff --git a/content/posts/20230822 prometheus_node_exporter/metrics.png b/content/posts/20230822 prometheus_node_exporter/metrics.png new file mode 100644 index 0000000..075af5c Binary files /dev/null and b/content/posts/20230822 prometheus_node_exporter/metrics.png differ diff --git a/content/posts/20230822 prometheus_node_exporter/page.png b/content/posts/20230822 prometheus_node_exporter/page.png new file mode 100644 index 0000000..9028a36 Binary files /dev/null and b/content/posts/20230822 prometheus_node_exporter/page.png differ diff --git a/content/posts/20230822 prometheus_node_exporter/prometheus_node_exporter.md b/content/posts/20230822 prometheus_node_exporter/prometheus_node_exporter.md new file mode 100644 index 0000000..14f7e01 --- /dev/null +++ b/content/posts/20230822 prometheus_node_exporter/prometheus_node_exporter.md @@ -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 < /etc/node_exporter +OPTIONS="" +EOF +``` + +Для работы node_exporter нужны права root. Поэтому запускать мы его будем как системную службу. Файлы системных служб находятся в таких каталогах: + +* /usr/lib/systemd/system + +* /lib/systemd/system +* /etc/systemd/system +Причём файлы сервисов, поставляемые с пакетами, как правило, располагаются в каталогах /lib и /usr/lib, а в /etc/ расположены модифицированные файлы юнитов переопределяющие стандартные настройки. + +```sudo cat < /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 < /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/) diff --git a/content/posts/20250612 obsidian-attachments/Pasted image 20250612205045.png b/content/posts/20250612 obsidian-attachments/Pasted image 20250612205045.png new file mode 100644 index 0000000..048b066 Binary files /dev/null and b/content/posts/20250612 obsidian-attachments/Pasted image 20250612205045.png differ diff --git a/content/posts/20250612 obsidian-attachments/obsidian-attachments.md b/content/posts/20250612 obsidian-attachments/obsidian-attachments.md new file mode 100644 index 0000000..3b7a8d6 --- /dev/null +++ b/content/posts/20250612 obsidian-attachments/obsidian-attachments.md @@ -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. + diff --git a/content/posts/20250612 obsidian-web-clipper/0f5c78d8ab30f1f6242a0e87dcd102d2_MD5.jpeg b/content/posts/20250612 obsidian-web-clipper/0f5c78d8ab30f1f6242a0e87dcd102d2_MD5.jpeg new file mode 100644 index 0000000..f57eea9 Binary files /dev/null and b/content/posts/20250612 obsidian-web-clipper/0f5c78d8ab30f1f6242a0e87dcd102d2_MD5.jpeg differ diff --git a/content/posts/20250612 obsidian-web-clipper/50ece689284db452903efbe8b80010f8_MD5.jpeg b/content/posts/20250612 obsidian-web-clipper/50ece689284db452903efbe8b80010f8_MD5.jpeg new file mode 100644 index 0000000..5c39b44 Binary files /dev/null and b/content/posts/20250612 obsidian-web-clipper/50ece689284db452903efbe8b80010f8_MD5.jpeg differ diff --git a/content/posts/20250612 obsidian-web-clipper/Pasted image 20250612202942.png b/content/posts/20250612 obsidian-web-clipper/Pasted image 20250612202942.png new file mode 100644 index 0000000..abc2cda Binary files /dev/null and b/content/posts/20250612 obsidian-web-clipper/Pasted image 20250612202942.png differ diff --git a/content/posts/20250612 obsidian-web-clipper/index.md.md b/content/posts/20250612 obsidian-web-clipper/index.md.md new file mode 100644 index 0000000..84926e5 --- /dev/null +++ b/content/posts/20250612 obsidian-web-clipper/index.md.md @@ -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 я даже записывать не буду. \ No newline at end of file diff --git a/content/posts/20251102 writefreely/index.md b/content/posts/20251102 writefreely/index.md new file mode 100644 index 0000000..5431082 --- /dev/null +++ b/content/posts/20251102 writefreely/index.md @@ -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 < + +Теперь вы полностью контролируете свой контент, без зависимости от сторонних платформ. diff --git a/content/posts/20260131 hugo-error-fix/index.md b/content/posts/20260131 hugo-error-fix/index.md new file mode 100644 index 0000000..5dcd7fd --- /dev/null +++ b/content/posts/20260131 hugo-error-fix/index.md @@ -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` и +доступен по адресу + +## Вывод + +При обновлении Hugo или тем важно следить за изменениями в API и устаревшими +функциями. Использование устаревших элементов может привести к ошибкам сборки сайта. diff --git a/content/posts/20260131 test-post/index.md b/content/posts/20260131 test-post/index.md new file mode 100644 index 0000000..333c574 --- /dev/null +++ b/content/posts/20260131 test-post/index.md @@ -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 позволяет удобно организовывать статьи и связанные с ними ресурсы в одной директории. diff --git a/content/posts/20260418 hugo-slugs-archetypes-bundles/hero.svg b/content/posts/20260418 hugo-slugs-archetypes-bundles/hero.svg new file mode 100644 index 0000000..7c7a3b8 --- /dev/null +++ b/content/posts/20260418 hugo-slugs-archetypes-bundles/hero.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + hugo new content posts/:slug/ + + + Leaf bundles · Archetypes · Permalinks · Slugs + + + + + \ No newline at end of file diff --git a/content/posts/20260418 hugo-slugs-archetypes-bundles/index.md b/content/posts/20260418 hugo-slugs-archetypes-bundles/index.md new file mode 100644 index 0000000..b8ab642 --- /dev/null +++ b/content/posts/20260418 hugo-slugs-archetypes-bundles/index.md @@ -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 . Обсудим. diff --git a/content/posts/20260418 ml-begin/index.md b/content/posts/20260418 ml-begin/index.md new file mode 100644 index 0000000..091ec29 --- /dev/null +++ b/content/posts/20260418 ml-begin/index.md @@ -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. \ No newline at end of file diff --git a/content/posts/20260501 cheburnet/hero.svg b/content/posts/20260501 cheburnet/hero.svg new file mode 100644 index 0000000..38d2bb1 --- /dev/null +++ b/content/posts/20260501 cheburnet/hero.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + Почему родился Чебурнет? + + + Исторический материаллизм · ТСПУ · Интернет · Свобода + + + + + \ No newline at end of file diff --git a/content/posts/20260501 cheburnet/index.md b/content/posts/20260501 cheburnet/index.md new file mode 100644 index 0000000..52c7246 --- /dev/null +++ b/content/posts/20260501 cheburnet/index.md @@ -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/ "Чебурнет — уже насущная реальность: технология глубокой фильтрации трафика" \ No newline at end of file diff --git a/content/posts/20260510 rd450x_not_boot_5060ti/hero.svg b/content/posts/20260510 rd450x_not_boot_5060ti/hero.svg new file mode 100644 index 0000000..45c0edb --- /dev/null +++ b/content/posts/20260510 rd450x_not_boot_5060ti/hero.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + Проблема загрузки Ubuntu на RD450X+5060ti + + + Grub · nomodeset · EFI stub · Ubuntu + + + + + \ No newline at end of file diff --git a/content/posts/20260510 rd450x_not_boot_5060ti/index.md b/content/posts/20260510 rd450x_not_boot_5060ti/index.md new file mode 100644 index 0000000..3ff606e --- /dev/null +++ b/content/posts/20260510 rd450x_not_boot_5060ti/index.md @@ -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) \ No newline at end of file diff --git a/content/posts/20260517 netbox start/index.md b/content/posts/20260517 netbox start/index.md new file mode 100644 index 0000000..50d80b8 --- /dev/null +++ b/content/posts/20260517 netbox start/index.md @@ -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 +--- \ No newline at end of file diff --git a/content/posts/20260621 - memory-os installation/index.md b/content/posts/20260621 - memory-os installation/index.md new file mode 100644 index 0000000..7ce93b7 --- /dev/null +++ b/content/posts/20260621 - memory-os installation/index.md @@ -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 "" >> /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 в репозитории.* \ No newline at end of file diff --git a/content/projects/1c-server/index.ru.md b/content/projects/1c-server/index.ru.md new file mode 100644 index 0000000..b9e46b4 --- /dev/null +++ b/content/projects/1c-server/index.ru.md @@ -0,0 +1,6 @@ ++++ +title = 'Сервер 1С на базе Debian' ++++ + +## Описание +Собираем сервер на базе Debian, Postgresql diff --git a/content/projects/_index.ru.md b/content/projects/_index.ru.md new file mode 100644 index 0000000..312e13e --- /dev/null +++ b/content/projects/_index.ru.md @@ -0,0 +1,6 @@ ++++ +title = "Проекты" +slug = "projects" ++++ + +Пока собираю в кучу информацию для этого раздела... \ No newline at end of file diff --git a/content/projects/case/index.ru.md b/content/projects/case/index.ru.md new file mode 100644 index 0000000..8776eb3 --- /dev/null +++ b/content/projects/case/index.ru.md @@ -0,0 +1,3 @@ ++++ +title = 'Ноутбук' ++++ diff --git a/content/projects/case/intelthermalsolutionhts1155lp.pdf b/content/projects/case/intelthermalsolutionhts1155lp.pdf new file mode 100644 index 0000000..8865309 Binary files /dev/null and b/content/projects/case/intelthermalsolutionhts1155lp.pdf differ diff --git a/content/projects/case/thin-mini-itx-based-pc-system-design-guide-rev-1-2.pdf b/content/projects/case/thin-mini-itx-based-pc-system-design-guide-rev-1-2.pdf new file mode 100644 index 0000000..2db1db2 Binary files /dev/null and b/content/projects/case/thin-mini-itx-based-pc-system-design-guide-rev-1-2.pdf differ diff --git a/content/projects/jorney2iac/index.ru.md b/content/projects/jorney2iac/index.ru.md new file mode 100644 index 0000000..0e88540 --- /dev/null +++ b/content/projects/jorney2iac/index.ru.md @@ -0,0 +1,5 @@ ++++ +title = "Путешествие к Инфраструктуре как коду" +date = "2014-09-24" +tags = [ "windows", "tools" ] ++++ diff --git a/content/projects/klava/088.jpg b/content/projects/klava/088.jpg new file mode 100644 index 0000000..f6ec140 Binary files /dev/null and b/content/projects/klava/088.jpg differ diff --git a/content/projects/klava/3950232856.jpg b/content/projects/klava/3950232856.jpg new file mode 100644 index 0000000..afc9e4e Binary files /dev/null and b/content/projects/klava/3950232856.jpg differ diff --git a/content/projects/klava/FR5WXV5CTyWSEn6m9Cca_NeyzdAEESZe6MOHjfjLW_1531927980,363A6985_Silver.jpg b/content/projects/klava/FR5WXV5CTyWSEn6m9Cca_NeyzdAEESZe6MOHjfjLW_1531927980,363A6985_Silver.jpg new file mode 100644 index 0000000..2751d3b Binary files /dev/null and b/content/projects/klava/FR5WXV5CTyWSEn6m9Cca_NeyzdAEESZe6MOHjfjLW_1531927980,363A6985_Silver.jpg differ diff --git a/content/projects/klava/GExAbeRSASRdruLEan9w_BNQuO5WTRe2RLgmx8vTx_Banner.jpg b/content/projects/klava/GExAbeRSASRdruLEan9w_BNQuO5WTRe2RLgmx8vTx_Banner.jpg new file mode 100644 index 0000000..2ce5e7e Binary files /dev/null and b/content/projects/klava/GExAbeRSASRdruLEan9w_BNQuO5WTRe2RLgmx8vTx_Banner.jpg differ diff --git a/content/projects/klava/KdxnuofRdOfd79zAw19Q_361A4797.jpg b/content/projects/klava/KdxnuofRdOfd79zAw19Q_361A4797.jpg new file mode 100644 index 0000000..e5b8e49 Binary files /dev/null and b/content/projects/klava/KdxnuofRdOfd79zAw19Q_361A4797.jpg differ diff --git a/content/projects/klava/ZX_Keyboard/KEY_ZX.rar b/content/projects/klava/ZX_Keyboard/KEY_ZX.rar new file mode 100644 index 0000000..9e8ccec Binary files /dev/null and b/content/projects/klava/ZX_Keyboard/KEY_ZX.rar differ diff --git a/content/projects/klava/ZX_Keyboard/KEY_ZX_2.rar b/content/projects/klava/ZX_Keyboard/KEY_ZX_2.rar new file mode 100644 index 0000000..102ccb7 Binary files /dev/null and b/content/projects/klava/ZX_Keyboard/KEY_ZX_2.rar differ diff --git a/content/projects/klava/ZX_Keyboard/KEY_ZX~3.rar b/content/projects/klava/ZX_Keyboard/KEY_ZX~3.rar new file mode 100644 index 0000000..a0505c5 Binary files /dev/null and b/content/projects/klava/ZX_Keyboard/KEY_ZX~3.rar differ diff --git a/content/projects/klava/ZX_Keyboard/ZX_keyboard.pdf b/content/projects/klava/ZX_Keyboard/ZX_keyboard.pdf new file mode 100644 index 0000000..c2f9cae Binary files /dev/null and b/content/projects/klava/ZX_Keyboard/ZX_keyboard.pdf differ diff --git a/content/projects/klava/index.ru.md b/content/projects/klava/index.ru.md new file mode 100644 index 0000000..b0a54f7 --- /dev/null +++ b/content/projects/klava/index.ru.md @@ -0,0 +1,4 @@ ++++ +title ='Клавиатура из отечественных комплектующих' ++++ + diff --git a/content/projects/klava/jE9mqy8IS3KLUexzTFx4_361A4791.jpg b/content/projects/klava/jE9mqy8IS3KLUexzTFx4_361A4791.jpg new file mode 100644 index 0000000..f405b72 Binary files /dev/null and b/content/projects/klava/jE9mqy8IS3KLUexzTFx4_361A4791.jpg differ diff --git a/content/projects/klava/nKucOarQuq7E0w5Oan6t_russian.jpg b/content/projects/klava/nKucOarQuq7E0w5Oan6t_russian.jpg new file mode 100644 index 0000000..3c7541e Binary files /dev/null and b/content/projects/klava/nKucOarQuq7E0w5Oan6t_russian.jpg differ diff --git a/content/projects/klava/xI7fpwiMRpe8zabCQHUO_8RdFThuoQgJlNcbt8dng_1531927451,363A6964.jpg b/content/projects/klava/xI7fpwiMRpe8zabCQHUO_8RdFThuoQgJlNcbt8dng_1531927451,363A6964.jpg new file mode 100644 index 0000000..6ce5f8d Binary files /dev/null and b/content/projects/klava/xI7fpwiMRpe8zabCQHUO_8RdFThuoQgJlNcbt8dng_1531927451,363A6964.jpg differ diff --git a/content/projects/klava/yyGGglzXSKqRnWIvdWUU_Banner.jpg b/content/projects/klava/yyGGglzXSKqRnWIvdWUU_Banner.jpg new file mode 100644 index 0000000..6e3ba6a Binary files /dev/null and b/content/projects/klava/yyGGglzXSKqRnWIvdWUU_Banner.jpg differ diff --git a/content/projects/old-ip-phone/index.ru.md b/content/projects/old-ip-phone/index.ru.md new file mode 100644 index 0000000..d87af85 --- /dev/null +++ b/content/projects/old-ip-phone/index.ru.md @@ -0,0 +1,5 @@ ++++ +title = "IP телефон в корпусе дискового аппарата" +description = "Проводной дисковый телефон с которого звонить можно через SIP. Круто? Кулхацкерно? Вот и я того же мнения!" +tags = [ "#железо" ] ++++ diff --git a/content/projects/old-ip-phone/xa-118 - Статья телефон для ретрограда.pdf b/content/projects/old-ip-phone/xa-118 - Статья телефон для ретрограда.pdf new file mode 100644 index 0000000..3b0985a Binary files /dev/null and b/content/projects/old-ip-phone/xa-118 - Статья телефон для ретрограда.pdf differ diff --git a/content/projects/russia/index.ru.md b/content/projects/russia/index.ru.md new file mode 100644 index 0000000..8606bc9 --- /dev/null +++ b/content/projects/russia/index.ru.md @@ -0,0 +1,28 @@ ++++ +title = "Проект Россия" +slug = "projectrussia" +date = "2022-10-27" +lastmod = "2022-10-20T11:27:29.713Z" +description = 'У каждого появляется,s как собственная морально-этическая картина мира, так и представление о "идеальном" мироустройстве. Ниже описан мой "идеальный" мир.' +tags = [ "политика" ] ++++ + +## Образование + +Политика в области образования соредоточена разделить на несколько крупных направлений: + +- Дошкольное образование +- Школьное образование +- Средне-специальное образование +- Высшее/профессиональное образование + +## Земля + +Единственным собственником земли может быть только государство. Земельным участкам определяется целевое назначение использования - индивидуальное желищное строительство, многоквартирное строительство, сельское хозйство, доронги, защитная зона, заповедник и т.д. и .т.п. + +Участки земли передаются в аренду на срок 50 лет. Продление аренды земельного участка возможно, еще на 50 лет, приоритет у арендатора, если он не своевременно не реализует это право, то объявляется конкурс. +Государство может прекратить договор аренды, если нарушено целевое назначение земли. + +### Иностранные резиденты + +Иностранные резиденты не могут арендовать землю и возводить на ней капитальные сооружения. Только арендовать и реконструировать существующие без увеличения пятна затсройки. diff --git a/content/projects/russia/Светлое будущее.jpg b/content/projects/russia/Светлое будущее.jpg new file mode 100644 index 0000000..6d521da Binary files /dev/null and b/content/projects/russia/Светлое будущее.jpg differ diff --git a/content/projects/sysops/index.ru.md b/content/projects/sysops/index.ru.md new file mode 100644 index 0000000..6c8ae56 --- /dev/null +++ b/content/projects/sysops/index.ru.md @@ -0,0 +1,14 @@ ++++ +title = "Дорожная карта по изучению профессии SysOps" +slug = "devopsroadmap" +date = "2022-09-27" +lastmod = "2022-10-09T18:26:39.021Z" ++++ + +На основе [дорожной карты](https://roadmap.sh/devops) DevOps инженера и SRE создаю расширенный список материалов для изучения. +В итоге, хочу получить учебный курс для сисадминов или по одному System Operation Engeenier. + +Для удобства представления вот диаграмма в [Mermaid](https://mermaid-js.github.io/mermaid/#/) + +Некие обобщенные требования от работодателей к младшим (Junior) специалистам, софрмированные на основании актуальных на конец 2022 года вакансий, размещены в файле +[требования](./requirements.ru.md) diff --git a/content/projects/sysops/mermaid.ru.md b/content/projects/sysops/mermaid.ru.md new file mode 100644 index 0000000..7dc0b86 --- /dev/null +++ b/content/projects/sysops/mermaid.ru.md @@ -0,0 +1,86 @@ ++++ +title = "Дорожная карта по изучению профессии SysOps" +date = "2022-10-10" +lastmod = "2022-10-09T18:26:39.021Z" +slug = "dorozhnaya-karta-po-izucheniyu-professii-sysops" ++++ +{{}} + graph TD + S1[Язык программирования] + S1 -.-> S101(Python) + S1 -.-> S102(Ruby) + S1 -.-> S103(JavaScript) + S1 ---> S104(Go) + S1 -.-> S105(Rust) + S1 -.-> S106(C++) + subgraph + S1 + direction TB + S101 + S102 + S103 + S104 + S105 + S106 + end + S104 ====> S2 + + %%click S104 "https://stepik.org/course/54403/syllabus" "Программирование на Golang" + + %%Второй шаг + S2(Основы Операционных Систем) + S2 --->S201(Управление устройствами ввода/вывода) + S2 --->S202(Виртуализация) + S2 --->S203(Память/Хранилища) + S2 --->S204(Файловые системы) + S2 --->S205(Настройки сети) + S2 --->S206(Сокеты) + S2 --->S207(Процессы) + S2 --->S208(POSIX) + S2 --->S209(systemd) + S2 --->S210(Потоки и параллелеризм) + subgraph + S2 + S201 + S202 + S203 + S204 + S205 + S206 + S207 + S208 + S209 + S210 + end + + S201 ===> S3 + S202 ===> S3 + S203 ===> S3 + S204 ===> S3 + S205 ===> S3 + S206 ===> S3 + S207 ===> S3 + S208 ===> S3 + S209 ===> S3 + S210 ===> S3 + + S3(Работа с GNU/Linux) + S3 ====> S4 + S4(Сети, безопаность и протоколы) + S4 ====> S5 + S5(Управление сервисами) + S501 ---> + S5 ====> S6 + + S6(Инфраструктура как код) + S6 ====> S7 + S7(CI/CD инструменты) + S7 ====> S8 + S8(Мониторинг инфраструктуры и ПО) + S8 ====> S9 + S9(Облачные провайдеры) + S9 ====> S10 + S10(Паттерны создания облаков) + S10 ====> S11 + S11(Проложаем учиться) +{{}} \ No newline at end of file diff --git a/content/projects/sysops/requirements.ru.md b/content/projects/sysops/requirements.ru.md new file mode 100644 index 0000000..0f5a7d1 --- /dev/null +++ b/content/projects/sysops/requirements.ru.md @@ -0,0 +1,74 @@ ++++ +title = "Требования к навыкам специалистов" +date = "2022-10-17" +lastmod = "2022-10-09T18:26:39.021Z" ++++ + +# Junior DevOps инженер под банковский проект + +Компания: Selecty (аккредитованная ИТ компания) +Локация: Москва +Формат работы: офис, после ИС возможен гибрид +Вилка: от 220 000 до 260 000 net + +📌 Чем предстоит заниматься: +• Обеспечивать работоспособность и доступность бизнес-систем +• Управлять конфигурациями и микросервисами +• Администрировать сервера приложений и СУБД +• Настраивать систему мониторинга +• Автоматизировать рутинные процессы + +📌 Требования: +• Профильное высшее образование +• Опыт администрирования Linux +• Навыки работы с Docker +• Практический опыт использования Ansible +• Уверенное владение SQL +• Понимание принципов DevOps +• Знание цикла разработки ПО +• Опыт внедрения и сопровождения ПО +• Понимание CI/CD процессов + +Будет плюсом: +• Опыт работы с оркестраторами +• Навыки создания дашбордов в Grafana с различными источниками +• Опыт работы с компонентами: Prometheus, Alertmanager, Zabbix +• Автоматизация на Python, bash +• Умение работать c git + +Компания: Selecty (KA); +Позиция: DevOps инженер; +Локация: РФ; +Формат работы: удаленка/гибрид; +Занятость: полная; +Вилка: от 200 тыс. до 260 тыс. на руки + +# DevOps инженер под банковский проект + +Обязанности: +- Автоматизация и поддержка автоматических процессов установки и конфигурирования системного и прикладного ПО; +- Создание, поддержка и развитие CI/CD пайплайнов; +- Работа в команде и участие в выработке/принятии решений; +- Умение подбирать необходимые инструменты/технологии и оценивать целесообразность их внедрения; +- Способность выявлять проблемы и предалагать решения для улучшения качества продукта; +- Поддержка базы знаний проекта в актуальном состоянии, формирование технической документации + +Требования: +- Высшее образование (экономическое, управление, математическое, техническое, ИТ); +- Опыт построения CI/CD pipelines (Jenkins, Ansible, Helm); +- Опыт работы с системами мониторинга (Zabbix, ELK, Prometheus или др.); +- Опыт использования оркестраторов контейнеров (k8s, OpenShift); +- Опыт разработки скриптов (bash, python, др.); +- Опыт работы с service mesh (istio); + +Мы предлагаем: +• Оформление в штат аккредитованной ИТ-компании по ТК РФ: полностью белая заработная плата, оплачиваемые отпускные и больничные; +• График работы: удаленно или в рамках гибридного графика в Москве; +• Компьютер и софт необходимые для комфортной работы; +• Реферальная программа для сотрудников (бонус за рекомендации); +• Индексацию заработной платы; +• Расширенная программа ДМС; +• Скидки на фитнес, кино и уроки английского; +• Регулярные performance review и HR координатор у каждого сотрудника. + + 📩 По всем вопросам можно обращаться сюда: @apoluosmak :) \ No newline at end of file diff --git a/content/projects/yateka/index.ru.md b/content/projects/yateka/index.ru.md new file mode 100644 index 0000000..1744d52 --- /dev/null +++ b/content/projects/yateka/index.ru.md @@ -0,0 +1,30 @@ ++++ +title = "Каталогизатор видеотеки/библиотеки" +slug = "yateka" +date = "2022-09-27" +lastmod = "2022-10-09T18:26:39.021Z" ++++ + +## Описание + +ВО первых ни один из имеющихся в доступности каталогизаторов меня не устраивает. Самое первое это то что они не понимают что такое сериал. У них есть перечень наименований к каждому прикреплены данные об одном видеофайле. этого малова-то. +Потом, они не возволяют создать онлай представительство. И нет рекомендаций. У сайтов же рекомендациq в большинстве своём неудобный инструментарий + +Мне нужно хранить данные о своих коллекциях фильмов. будь то аниме или азиатские фильмы. + +В итоге требуется Software as a Service, позволяющий заполнить свою теку. + +## Требования к каталогизатору + +1. Самостоятельный поиск видеофайлов в указанной папке. +2. Самостоятельное получение инфармации о файле (разрешение, размер, битрей, кодек и т.д.) +3. Самостоятельное получение снимков экрана +4. сохранение данных о носителе файла (Номер Жесткого дистка или номер ДВД диска и т.п.) +5. Возможность учёта сериалов (очень важно для аниме). чтобы несколько видеофайлов можно было привязать к одному наименованию, чтобы можно было разбивать по сезонам серии. хранить отдельно данные по каждой серии +6. Сохранение данных о нескольких звуковых дорожках +7. Сохранение данных о субтитрах +8. Получение данных о фильмах с kinopoisk.ru +9. Сохранение снимков обложки +10. указание наличия встроенных убираемых и неубираемых субтитров +11. ссылка на торрент-раздачу +12. Указание оценок. Общая, за режиссуру, за игру актеров, за сценарий. diff --git a/docs/favicon-logo-setup.md b/static/images/favicon/favicon-logo-setup.md similarity index 100% rename from docs/favicon-logo-setup.md rename to static/images/favicon/favicon-logo-setup.md diff --git a/static/images/profile_header_foggy.jpeg b/static/images/profile_header_foggy.jpeg new file mode 100644 index 0000000..b8e14cf Binary files /dev/null and b/static/images/profile_header_foggy.jpeg differ diff --git a/static/images/w1500_52257590.png b/static/images/w1500_52257590.png new file mode 100644 index 0000000..576c30f Binary files /dev/null and b/static/images/w1500_52257590.png differ diff --git a/static/Краткий справочник командв Linux.pdf b/static/Краткий справочник командв Linux.pdf new file mode 100644 index 0000000..535e069 Binary files /dev/null and b/static/Краткий справочник командв Linux.pdf differ diff --git a/themes/rDedInit/layouts/partials/hero.svg.html b/themes/rDedInit/layouts/partials/hero.svg.html new file mode 100644 index 0000000..2b47943 --- /dev/null +++ b/themes/rDedInit/layouts/partials/hero.svg.html @@ -0,0 +1,58 @@ +{{- /* + Partial для генерации hero.svg на основе данных поста + Использование: {{ partial "hero.svg.html" . }} +*/ -}} + +{{- $title := .Title -}} +{{- $tags := .Params.tags | default slice -}} +{{- /* Форматируем теги: объединяем через пробел с символом "·" */ -}} +{{- $tagsString := delimit $tags " · " -}} + +{{- /* Если тегов нет, показываем что-то по умолчанию */ -}} +{{- if eq $tagsString "" -}} + {{- $tagsString = "No tags" -}} +{{- end -}} + +{{- /* Экранируем спецсимволы для XML/SVG */ -}} +{{- $title = replace $title "&" "&" -}} +{{- $title = replace $title "<" "<" -}} +{{- $title = replace $title ">" ">" -}} +{{- $tagsString = replace $tagsString "&" "&" -}} +{{- $tagsString = replace $tagsString "<" "<" -}} +{{- $tagsString = replace $tagsString ">" ">" -}} + + + + + + + + + + + + + + + + + + + + + + + + + + {{- $title -}} + + + + + {{- $tagsString -}} + + + + + \ No newline at end of file diff --git a/themes/rDedInit/layouts/shortcodes/mermaid.html b/themes/rDedInit/layouts/shortcodes/mermaid.html new file mode 100644 index 0000000..d0e4370 --- /dev/null +++ b/themes/rDedInit/layouts/shortcodes/mermaid.html @@ -0,0 +1,3 @@ +
+ {{.Inner}} +