[
  { "title": "Политика конфиденциальности", "url": "/privacy/", "summary": "\u003ch2 class=\"relative group\"\u003eПолитика конфиденциальности\n    \u003cdiv id=\"политика-конфиденциальности\" class=\"anchor\"\u003e\u003c/div\u003e\n    \n    \u003cspan\n        class=\"absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none\"\u003e\n        \u003ca class=\"text-primary-300 dark:text-neutral-700 !no-underline\" href=\"#%d0%bf%d0%be%d0%bb%d0%b8%d1%82%d0%b8%d0%ba%d0%b0-%d0%ba%d0%be%d0%bd%d1%84%d0%b8%d0%b4%d0%b5%d0%bd%d1%86%d0%b8%d0%b0%d0%bb%d1%8c%d0%bd%d0%be%d1%81%d1%82%d0%b8\" aria-label=\"Якорь\"\u003e#\u003c/a\u003e\n    \u003c/span\u003e\n    \n\u003c/h2\u003e\n\u003cp\u003eСайт \u003cstrong\u003eInfo Guard Tech\u003c/strong\u003e (\u003ca href=\"https://infoguardtech.tail5e5d0b.ts.net\"  target=\"_blank\" rel=\"noreferrer\"\u003ehttps://infoguardtech.tail5e5d0b.ts.net\u003c/a\u003e) не собирает и не хранит персональные данные пользователей.\u003c/p\u003e\n\n\u003ch3 class=\"relative group\"\u003eЧто мы не делаем\n    \u003cdiv id=\"что-мы-не-делаем\" class=\"anchor\"\u003e\u003c/div\u003e\n    \n    \u003cspan\n        class=\"absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none\"\u003e\n        \u003ca class=\"text-primary-300 dark:text-neutral-700 !no-underline\" href=\"#%d1%87%d1%82%d0%be-%d0%bc%d1%8b-%d0%bd%d0%b5-%d0%b4%d0%b5%d0%bb%d0%b0%d0%b5%d0%bc\" aria-label=\"Якорь\"\u003e#\u003c/a\u003e\n    \u003c/span\u003e\n    \n\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eНе используем файлы cookie для отслеживания.\u003c/li\u003e\n\u003cli\u003eНе собираем адреса электронной почты, имена или другую личную информацию.\u003c/li\u003e\n\u003cli\u003eНе используем Google Analytics, Яндекс.Метрику или другие системы аналитики.\u003c/li\u003e\n\u003cli\u003eНе показываем рекламу и не используем рекламные трекеры.\u003c/li\u003e\n\u003cli\u003eНе передаём данные третьим лицам.\u003c/li\u003e\n\u003c/ul\u003e\n\n\u003ch3 class=\"relative group\"\u003eЛоги сервера\n    \u003cdiv id=\"логи-сервера\" class=\"anchor\"\u003e\u003c/div\u003e\n    \n    \u003cspan\n        class=\"absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none\"\u003e\n        \u003ca class=\"text-primary-300 dark:text-neutral-700 !no-underline\" href=\"#%d0%bb%d0%be%d0%b3%d0%b8-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80%d0%b0\" aria-label=\"Якорь\"\u003e#\u003c/a\u003e\n    \u003c/span\u003e\n    \n\u003c/h3\u003e\n\u003cp\u003eЛогирование доступа полностью отключено. IP-адреса посетителей, посещённые страницы и информация о браузере не записываются и не хранятся.\u003c/p\u003e", "content": " Политика конфиденциальности # Сайт Info Guard Tech (https://infoguardtech.tail5e5d0b.ts.net) не собирает и не хранит персональные данные пользователей.\nЧто мы не делаем # Не используем файлы cookie для отслеживания. Не собираем адреса электронной почты, имена или другую личную информацию. Не используем Google Analytics, Яндекс.Метрику или другие системы аналитики. Не показываем рекламу и не используем рекламные трекеры. Не передаём данные третьим лицам. Логи сервера # Логирование доступа полностью отключено. IP-адреса посетителей, посещённые страницы и информация о браузере не записываются и не хранятся.\nСервер фиксирует только технические ошибки (для обеспечения работоспособности и защиты от атак). Эти записи не содержат персональных данных и не позволяют идентифицировать посетителя.\nРазмещение сайта # Сайт размещён локально — на домашнем компьютере владельца, а не на облачном хостинге. Это означает, что данные посетителей не передаются сторонним хостинг-провайдерам. Доступ к сайту из интернета осуществляется через туннель Tailscale Funnel.\nТуннель доступа # Доступ к сайту осуществляется через Tailscale Funnel. Tailscale, как поставщик туннельных услуг, может видеть метаданные соединения (факт подключения, объём трафика), но не может расшифровать передаваемое содержимое. Мы не передаём Tailscale никаких дополнительных данных о посетителях.\nВаши права # Вы имеете право обратиться к владельцу сайта с вопросами о конфиденциальности. Контактный адрес электронной почты будет опубликован позже.\nОбновления # Эта политика может обновляться. Актуальная версия всегда доступна на этой странице.\nПоследнее обновление: 13 ноября 2026 г.\n" },
  { "title": "Создание публикаций", "url": "/blog/%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5/", "summary": "\u003cp\u003e\u003cfigure\u003e\u003cimg\n    class=\"my-0 rounded-md\"\n    loading=\"lazy\"\n    decoding=\"async\"\n    fetchpriority=\"low\"\n    alt=\"Описание\"\n    src=\"/img/site.jpg\"\n    \u003e\u003c/figure\u003e\n\u003c/p\u003e\n\u003cdiv class=\"post-box\"\u003e\n\u0026emsp;Картинка расположена сверху над текстом. Далее идёт рамка (текст бирюзового цвета). Потом следует команда для красной строки и сам текст, который вы читаете сейчас. В конце текста рамка закрывается.\n\u003cp\u003e Все основные действия по управлению сайтом происходят в терминале системы Linux Mint на моём ПК.\u003c/p\u003e\n\u003c/div\u003e", "content": " \u0026emsp;Картинка расположена сверху над текстом. Далее идёт рамка (текст бирюзового цвета). Потом следует команда для красной строки и сам текст, который вы читаете сейчас. В конце текста рамка закрывается. Все основные действия по управлению сайтом происходят в терминале системы Linux Mint на моём ПК.\n" },
  { "title": "Нейросети_1", "url": "/blog/nejroseti-1/", "summary": "\u003cdiv class=\"post-box\"\u003e\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;Мой первый существенный опыт использования нейросетей был связан с  онлайн-моделью Gemini. В вопросах изучения некоторых языков эта модель неплохо себя показала. В большей мере я пытался лучше познакомиться с японским языком при помощи этой модели. Об идеальной работе модели в этом плане я сказать не могу, потому что не так давно начал знакомиться с японским языком, но комментарии и объяснения мне понравились.\n\u003cp\u003e    Что ещё могу сказать по этому поводу? Нейросети не идеальны — в их работе не исключены ошибки. Человек может ошибаться, а нейросети тем более.\u003c/p\u003e", "content": " \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;Мой первый существенный опыт использования нейросетей был связан с онлайн-моделью Gemini. В вопросах изучения некоторых языков эта модель неплохо себя показала. В большей мере я пытался лучше познакомиться с японским языком при помощи этой модели. Об идеальной работе модели в этом плане я сказать не могу, потому что не так давно начал знакомиться с японским языком, но комментарии и объяснения мне понравились. Что ещё могу сказать по этому поводу? Нейросети не идеальны — в их работе не исключены ошибки. Человек может ошибаться, а нейросети тем более.\nКроме работы с языками, я также обращался к Gemini с вопросами, которые связаны с IT-технологиями. И наверное, тогда у меня появилась мысль, что IT-сфера — это та область, в которой нейросети могут быть наиболее полезны. Тоже, кстати, могу и ошибаться в этом. Однако, с помощью той же Gemini мне удалось перепрошить свой телефон. Это не было лёгким путём, но получилось. Eщё я использовал данную модель и в настройках сервера VPS какое-то время, и в других вопросах, связанных с IT.\nОднажды я утратил доступ к Gemini. Модель стала недоступна для меня, а танцев с бубном мне не хотелось. Пришлось искать альтернативу. С изучением японского языка я пока что приостановился. Много информации и вопросов накопилось общего характера. И что касается самой информации и её полезного использования, тоже не убавилось вопросов. Но, альтернативу Gemini я искал недолго.\nDeepSeek пришла на смену. Решение вопросов, связанных с терминалом Linux Mint, с сервером, с различными программами для ПК и смартфона — это те области, в которых онлайн-модель DeepSeek оказалась для меня полезной. Плюс, создание собственного статического сайта на VPS — также в большей мере заслуга DeepSeek.\n❗❗❗Думаю, что нейросети можно рассматривать как вспомогательный инструмент в процессе обучения, и как со всяким инструментом, в работе с нейросетью необходимо соблюдать меры безопасности.\nНапример:\nЖелательно ли знакомить нейросетьевую модель со своими персональными данными?\nНадо ли полагаться на нейросеть в вопросах физического и психологического здоровья?\nМогут быть и другие вопросы, на которые я бы ответил отрицательно.\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;Продолжение следует... " },
  { "title": "Первая мысль", "url": "/thoughts/pervaya-mysl/", "summary": "\u003cp\u003eЭто первая запись в разделе \u0026ldquo;Мысли\u0026rdquo;. Здесь будут размышления о жизни.\u003c/p\u003e", "content": "Это первая запись в разделе \u0026ldquo;Мысли\u0026rdquo;. Здесь будут размышления о жизни.\n" },
  { "title": "Работа с нейросетью", "url": "/blog/%D0%BD%D0%B0%D0%B7%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5-%D0%BF%D0%BE%D1%81%D1%82%D0%B0/", "summary": "\u003cdiv class=\"post-box\"\u003e\n## Как мы чинили поиск на сайте\n\u003cblockquote\u003e\u003cp\u003e\u003cstrong\u003eЯ:\u003c/strong\u003e Теперь переход на страницу поиска всегда со светлой темой. А сам поиск не работает.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eНейронка:\u003c/strong\u003e Страница поиска не работает, потому что скрипт был удалён из-за CSP. Давайте пересоздадим страницу поиска с внешним скриптом.\u003c/p\u003e\n\u003cp\u003eСоздаём внешний JS-файл:\u003c/p\u003e\n\u003cdiv class=\"highlight-wrapper\"\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode class=\"language-javascript\" data-lang=\"javascript\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e(\u003cspan style=\"color:#66d9ef\"\u003efunction\u003c/span\u003e() {\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#66d9ef\"\u003evar\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003etheme\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003elocalStorage\u003c/span\u003e.\u003cspan style=\"color:#a6e22e\"\u003egetItem\u003c/span\u003e(\u003cspan style=\"color:#e6db74\"\u003e\u0026#39;appearance\u0026#39;\u003c/span\u003e);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#66d9ef\"\u003eif\u003c/span\u003e (\u003cspan style=\"color:#a6e22e\"\u003etheme\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e===\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;light\u0026#39;\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e||\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003etheme\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e===\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;dark\u0026#39;\u003c/span\u003e) {\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    document.\u003cspan style=\"color:#a6e22e\"\u003ebody\u003c/span\u003e.\u003cspan style=\"color:#a6e22e\"\u003eclassName\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003etheme\u003c/span\u003e;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  } \u003cspan style=\"color:#66d9ef\"\u003eelse\u003c/span\u003e {\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    document.\u003cspan style=\"color:#a6e22e\"\u003ebody\u003c/span\u003e.\u003cspan style=\"color:#a6e22e\"\u003eclassName\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;dark\u0026#39;\u003c/span\u003e;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  }\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#a6e22e\"\u003efetch\u003c/span\u003e(\u003cspan style=\"color:#e6db74\"\u003e\u0026#39;/index.json\u0026#39;\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    .\u003cspan style=\"color:#a6e22e\"\u003ethen\u003c/span\u003e(\u003cspan style=\"color:#66d9ef\"\u003efunction\u003c/span\u003e(\u003cspan style=\"color:#a6e22e\"\u003er\u003c/span\u003e) { \u003cspan style=\"color:#66d9ef\"\u003ereturn\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003er\u003c/span\u003e.\u003cspan style=\"color:#a6e22e\"\u003ejson\u003c/span\u003e(); })\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    .\u003cspan style=\"color:#a6e22e\"\u003ethen\u003c/span\u003e(\u003cspan style=\"color:#66d9ef\"\u003efunction\u003c/span\u003e(\u003cspan style=\"color:#a6e22e\"\u003edata\u003c/span\u003e) {\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#66d9ef\"\u003evar\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003einput\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e document.\u003cspan style=\"color:#a6e22e\"\u003egetElementById\u003c/span\u003e(\u003cspan style=\"color:#e6db74\"\u003e\u0026#39;search-input\u0026#39;\u003c/span\u003e);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#66d9ef\"\u003evar\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003eresults\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e document.\u003cspan style=\"color:#a6e22e\"\u003egetElementById\u003c/span\u003e(\u003cspan style=\"color:#e6db74\"\u003e\u0026#39;search-results\u0026#39;\u003c/span\u003e);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#a6e22e\"\u003einput\u003c/span\u003e.\u003cspan style=\"color:#a6e22e\"\u003eaddEventListener\u003c/span\u003e(\u003cspan style=\"color:#e6db74\"\u003e\u0026#39;input\u0026#39;\u003c/span\u003e, \u003cspan style=\"color:#66d9ef\"\u003efunction\u003c/span\u003e() {\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#66d9ef\"\u003evar\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003eq\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#66d9ef\"\u003ethis\u003c/span\u003e.\u003cspan style=\"color:#a6e22e\"\u003evalue\u003c/span\u003e.\u003cspan style=\"color:#a6e22e\"\u003etrim\u003c/span\u003e().\u003cspan style=\"color:#a6e22e\"\u003etoLowerCase\u003c/span\u003e();\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#66d9ef\"\u003eif\u003c/span\u003e (\u003cspan style=\"color:#a6e22e\"\u003eq\u003c/span\u003e.\u003cspan style=\"color:#a6e22e\"\u003elength\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e\u0026lt;\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e2\u003c/span\u003e) { \u003cspan style=\"color:#a6e22e\"\u003eresults\u003c/span\u003e.\u003cspan style=\"color:#a6e22e\"\u003einnerHTML\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;\u0026#39;\u003c/span\u003e; \u003cspan style=\"color:#66d9ef\"\u003ereturn\u003c/span\u003e; }\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#66d9ef\"\u003evar\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003efound\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003edata\u003c/span\u003e.\u003cspan style=\"color:#a6e22e\"\u003efilter\u003c/span\u003e(\u003cspan style=\"color:#66d9ef\"\u003efunction\u003c/span\u003e(\u003cspan style=\"color:#a6e22e\"\u003eitem\u003c/span\u003e) {\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e          \u003cspan style=\"color:#66d9ef\"\u003ereturn\u003c/span\u003e (\u003cspan style=\"color:#a6e22e\"\u003eitem\u003c/span\u003e.\u003cspan style=\"color:#a6e22e\"\u003etitle\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e||\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;\u0026#39;\u003c/span\u003e).\u003cspan style=\"color:#a6e22e\"\u003etoLowerCase\u003c/span\u003e().\u003cspan style=\"color:#a6e22e\"\u003eindexOf\u003c/span\u003e(\u003cspan style=\"color:#a6e22e\"\u003eq\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e!==\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e-\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e||\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                 (\u003cspan style=\"color:#a6e22e\"\u003eitem\u003c/span\u003e.\u003cspan style=\"color:#a6e22e\"\u003econtent\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e||\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;\u0026#39;\u003c/span\u003e).\u003cspan style=\"color:#a6e22e\"\u003etoLowerCase\u003c/span\u003e().\u003cspan style=\"color:#a6e22e\"\u003eindexOf\u003c/span\u003e(\u003cspan style=\"color:#a6e22e\"\u003eq\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e!==\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e-\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e||\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                 (\u003cspan style=\"color:#a6e22e\"\u003eitem\u003c/span\u003e.\u003cspan style=\"color:#a6e22e\"\u003esummary\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e||\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;\u0026#39;\u003c/span\u003e).\u003cspan style=\"color:#a6e22e\"\u003etoLowerCase\u003c/span\u003e().\u003cspan style=\"color:#a6e22e\"\u003eindexOf\u003c/span\u003e(\u003cspan style=\"color:#a6e22e\"\u003eq\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e!==\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e-\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        });\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#66d9ef\"\u003eif\u003c/span\u003e (\u003cspan style=\"color:#a6e22e\"\u003efound\u003c/span\u003e.\u003cspan style=\"color:#a6e22e\"\u003elength\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e===\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e) { \u003cspan style=\"color:#a6e22e\"\u003eresults\u003c/span\u003e.\u003cspan style=\"color:#a6e22e\"\u003einnerHTML\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;\u0026lt;p\u0026gt;Ничего не найдено\u0026lt;/p\u0026gt;\u0026#39;\u003c/span\u003e; \u003cspan style=\"color:#66d9ef\"\u003ereturn\u003c/span\u003e; }\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#66d9ef\"\u003evar\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003ehtml\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;\u0026#39;\u003c/span\u003e;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#a6e22e\"\u003efound\u003c/span\u003e.\u003cspan style=\"color:#a6e22e\"\u003eforEach\u003c/span\u003e(\u003cspan style=\"color:#66d9ef\"\u003efunction\u003c/span\u003e(\u003cspan style=\"color:#a6e22e\"\u003eitem\u003c/span\u003e) {\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e          \u003cspan style=\"color:#a6e22e\"\u003ehtml\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+=\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;\u0026lt;div class=\u0026#34;result-item\u0026#34;\u0026gt;\u0026#39;\u003c/span\u003e;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e          \u003cspan style=\"color:#a6e22e\"\u003ehtml\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+=\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;\u0026lt;a href=\u0026#34;\u0026#39;\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003eitem\u003c/span\u003e.\u003cspan style=\"color:#a6e22e\"\u003eurl\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;\u0026#34;\u0026gt;\u0026#39;\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003eitem\u003c/span\u003e.\u003cspan style=\"color:#a6e22e\"\u003etitle\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;\u0026lt;/a\u0026gt;\u0026#39;\u003c/span\u003e;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e          \u003cspan style=\"color:#a6e22e\"\u003ehtml\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+=\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;\u0026lt;p\u0026gt;\u0026#39;\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e (\u003cspan style=\"color:#a6e22e\"\u003eitem\u003c/span\u003e.\u003cspan style=\"color:#a6e22e\"\u003esummary\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e||\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;\u0026#39;\u003c/span\u003e).\u003cspan style=\"color:#a6e22e\"\u003ereplace\u003c/span\u003e(\u003cspan style=\"color:#e6db74\"\u003e/\u0026lt;[^\u0026gt;]*\u0026gt;/g\u003c/span\u003e, \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;\u0026#39;\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;\u0026lt;/p\u0026gt;\u0026#39;\u003c/span\u003e;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e          \u003cspan style=\"color:#a6e22e\"\u003ehtml\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+=\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;\u0026lt;/div\u0026gt;\u0026#39;\u003c/span\u003e;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        });\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#a6e22e\"\u003eresults\u003c/span\u003e.\u003cspan style=\"color:#a6e22e\"\u003einnerHTML\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003ehtml\u003c/span\u003e;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      });\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    });\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e})();\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/div\u003e\n\u003cp\u003e\u003cstrong\u003eЯ:\u003c/strong\u003e Теперь поиск работает, но страница всегда в тёмной теме.\u003c/p\u003e", "content": " ## Как мы чинили поиск на сайте Я: Теперь переход на страницу поиска всегда со светлой темой. А сам поиск не работает.\nНейронка: Страница поиска не работает, потому что скрипт был удалён из-за CSP. Давайте пересоздадим страницу поиска с внешним скриптом.\nСоздаём внешний JS-файл:\n(function() { var theme = localStorage.getItem(\u0026#39;appearance\u0026#39;); if (theme === \u0026#39;light\u0026#39; || theme === \u0026#39;dark\u0026#39;) { document.body.className = theme; } else { document.body.className = \u0026#39;dark\u0026#39;; } fetch(\u0026#39;/index.json\u0026#39;) .then(function(r) { return r.json(); }) .then(function(data) { var input = document.getElementById(\u0026#39;search-input\u0026#39;); var results = document.getElementById(\u0026#39;search-results\u0026#39;); input.addEventListener(\u0026#39;input\u0026#39;, function() { var q = this.value.trim().toLowerCase(); if (q.length \u0026lt; 2) { results.innerHTML = \u0026#39;\u0026#39;; return; } var found = data.filter(function(item) { return (item.title || \u0026#39;\u0026#39;).toLowerCase().indexOf(q) !== -1 || (item.content || \u0026#39;\u0026#39;).toLowerCase().indexOf(q) !== -1 || (item.summary || \u0026#39;\u0026#39;).toLowerCase().indexOf(q) !== -1; }); if (found.length === 0) { results.innerHTML = \u0026#39;\u0026lt;p\u0026gt;Ничего не найдено\u0026lt;/p\u0026gt;\u0026#39;; return; } var html = \u0026#39;\u0026#39;; found.forEach(function(item) { html += \u0026#39;\u0026lt;div class=\u0026#34;result-item\u0026#34;\u0026gt;\u0026#39;; html += \u0026#39;\u0026lt;a href=\u0026#34;\u0026#39; + item.url + \u0026#39;\u0026#34;\u0026gt;\u0026#39; + item.title + \u0026#39;\u0026lt;/a\u0026gt;\u0026#39;; html += \u0026#39;\u0026lt;p\u0026gt;\u0026#39; + (item.summary || \u0026#39;\u0026#39;).replace(/\u0026lt;[^\u0026gt;]*\u0026gt;/g, \u0026#39;\u0026#39;) + \u0026#39;\u0026lt;/p\u0026gt;\u0026#39;; html += \u0026#39;\u0026lt;/div\u0026gt;\u0026#39;; }); results.innerHTML = html; }); }); })(); Я: Теперь поиск работает, но страница всегда в тёмной теме.\nНейронка: Проверим localStorage. Blowfish использует ключ appearance, а не pref-theme.\nИсправляем скрипт:\nsed -i \u0026#34;s|localStorage.getItem(\u0026#39;pref-theme\u0026#39;)|localStorage.getItem(\u0026#39;appearance\u0026#39;)|\u0026#34; static/js/search.js Собираем и загружаем:\ncd ~/Рабочий\\ стол/infoguardtech-blog \u0026amp;\u0026amp; /usr/local/bin/hugo \u0026amp;\u0026amp; \\ ssh myvps \u0026#34;sudo rm -rf /var/www/infoguardtech.ru/* \u0026amp;\u0026amp; sudo cp -r /tmp/new-site/* /var/www/infoguardtech.ru/\u0026#34; \u0026amp;\u0026amp; \\ echo \u0026#34;ГОТОВО\u0026#34; Я: Готово. Бекапимся.\nТеперь поиск работает в обеих темах. Потребовалось найти правильный ключ localStorage (appearance) и вынести скрипт во внешний файл, чтобы обойти ограничения Content Security Policy.\n" },
  { "title": "О проекте", "url": "/about/", "summary": "\u003cp\u003e\u003cstrong\u003eInfo Guard Tech\u003c/strong\u003e — сайт о технологиях и не только.\u003c/p\u003e\n\u003cp\u003eЗдесь я пишу о том, что мне интересно:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eБезопасность и серверы\u003c/strong\u003e — настройка VPS, защита от атак, VPN и анонимность в сети.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eLinux и open source\u003c/strong\u003e — работа с терминалом, обзоры программ, автоматизация.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eНейросети и OCR\u003c/strong\u003e — локальные модели, распознавание текста, работа с языками.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eМысли о жизни\u003c/strong\u003e — заметки, наблюдения, размышления.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eЛингвистика\u003c/strong\u003e — языки, переводы, работа с текстами.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eСайт статический, работает на Hugo и Nginx, размещён локально и доступен через Tailscale Funnel. Без рекламы, без сбора данных, без Google Analytics.\u003c/p\u003e", "content": "Info Guard Tech — сайт о технологиях и не только.\nЗдесь я пишу о том, что мне интересно:\nБезопасность и серверы — настройка VPS, защита от атак, VPN и анонимность в сети. Linux и open source — работа с терминалом, обзоры программ, автоматизация. Нейросети и OCR — локальные модели, распознавание текста, работа с языками. Мысли о жизни — заметки, наблюдения, размышления. Лингвистика — языки, переводы, работа с текстами. Сайт статический, работает на Hugo и Nginx, размещён локально и доступен через Tailscale Funnel. Без рекламы, без сбора данных, без Google Analytics.\nСвязь:\n" },
  { "title": "Контакты", "url": "/contact/", "summary": "\u003cp\u003eСвязаться с автором проекта:\u003c/p\u003e\n\u003cp\u003eEmail: sergik\u003c!-- --\u003e@\u003c!-- --\u003einfoguardtech.ru\u003c/p\u003e", "content": "Связаться с автором проекта:\nEmail: sergik@infoguardtech.ru\n" },
  { "title": "Настройки", "url": "/blog/%D0%BD%D0%B0%D0%B7%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5-%D0%BD%D0%BE%D0%B2%D0%BE%D1%81%D1%82%D0%B8/", "summary": "\u003cp\u003e\u003cfigure\u003e\u003cimg\n    class=\"my-0 rounded-md\"\n    loading=\"lazy\"\n    decoding=\"async\"\n    fetchpriority=\"low\"\n    alt=\"Огород\"\n    src=\"/img/rain.jpg\"\n    \u003e\u003c/figure\u003e\n\u003c/p\u003e\n\u003cdiv class=\"post-box\"\u003e\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;Сегодня пришлось заставить себя оторваться от кнопок и пойти продолжить выполнение огородной миссии.\nОднако, на огороде не получилось задержаться, потому что от туда меня прогнал дождь. В общем, вернулся к кнопкам и продолжил настраивать сайт.\n\u003c/div\u003e", "content": " \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;Сегодня пришлось заставить себя оторваться от кнопок и пойти продолжить выполнение огородной миссии. Однако, на огороде не получилось задержаться, потому что от туда меня прогнал дождь. В общем, вернулся к кнопкам и продолжил настраивать сайт. " },
  { "title": "Hello World", "url": "/blog/hello-world/", "summary": "\u003cp\u003eЭто первая новость в блоге InfoGuard Tech.\u003c/p\u003e\n\u003cp\u003eСайт запущен, блог работает. Впереди много интересного!\u003c/p\u003e", "content": "Это первая новость в блоге InfoGuard Tech.\nСайт запущен, блог работает. Впереди много интересного!\n" }
]
