<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Tech on Georgiy Kuzora</title>
    <link>https://gkuzora.ru/categories/tech/</link>
    <description>Recent content in Tech on Georgiy Kuzora</description>
    <generator>Hugo</generator>
    <language>ru-ru</language>
    <copyright>© [Georgiy Kuzora](https://github.com/GeorgeKuzora/my_hugo_site)</copyright>
    <lastBuildDate>Sun, 16 Nov 2025 19:52:07 +0300</lastBuildDate>
    <atom:link href="https://gkuzora.ru/categories/tech/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Управление окружением через chezmoi и brew</title>
      <link>https://gkuzora.ru/posts/chezmoi/</link>
      <pubDate>Sun, 16 Nov 2025 19:52:07 +0300</pubDate>
      <guid>https://gkuzora.ru/posts/chezmoi/</guid>
      <description>&lt;h2 id=&#34;зачем-управлять-dotfiles&#34;&gt;Зачем управлять dotfiles&lt;/h2&gt;&#xA;&lt;p&gt;С тех пор как я начал использовать Git для управления моими dotfiles, прошло уже несколько лет. Но необходимость этого я осознал не сразу. Осознание пришло уже после моего первого опыта использования Linux. Первым дистрибутивом Linux, которым я пользовался достаточно долгое время, был &lt;code&gt;Pop!_OS&lt;/code&gt;. Я использовал его, пока изучал программирование. Я выполнил несколько личных проектов и уже создал некоторое подобие окружения разработчика с установленными &lt;code&gt;pyenv&lt;/code&gt;, &lt;code&gt;neovim&lt;/code&gt;, &lt;code&gt;VS Code&lt;/code&gt;. Соответственно, у меня в системе уже было определённое количество dotfiles, которые я редактировал для улучшения моего процесса работы в ОС.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Нужнен ли навык быстрой слепой печати в эпоху ИИ?</title>
      <link>https://gkuzora.ru/posts/typing/</link>
      <pubDate>Thu, 01 May 2025 16:41:36 +0300</pubDate>
      <guid>https://gkuzora.ru/posts/typing/</guid>
      <description>&lt;p&gt;Несмотря на то, что значимость навыка быстрой слепой печати снизилась благодаря развитию технологий искусственного интеллекта, я убежден, что этот навык продолжает оставаться важной составляющей карьеры программиста-разработчика.&lt;/p&gt;&#xA;&lt;p&gt;Да, важность данного умения несколько уменьшилась, однако вместе с этим существенно упали и трудности освоения слепого набора. Сегодня существует большое количество удобных инструментов вроде Keybr и MonkeyType, позволяющих легко осваивать технику быстрого набора текста практически любому человеку, даже новичкам.Более того, широкое распространение современных эргономичных клавиатур дополнительно усиливает потребность овладеть навыком слепой печати. Ведь именно эти устройства специально разработаны таким образом, чтобы значительно повысить комфорт и эффективность выполнения различных задач пользователями компьютеров и ноутбуков.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Конфигурация окружения разработчика при помощи Nix</title>
      <link>https://gkuzora.ru/posts/nix/</link>
      <pubDate>Sun, 19 Jan 2025 14:25:16 +0300</pubDate>
      <guid>https://gkuzora.ru/posts/nix/</guid>
      <description>&lt;h2 id=&#34;введение&#34;&gt;Введение&lt;/h2&gt;&#xA;&lt;p&gt;В последние годы я активно использую Nix package manager, Nix flakes и Nix Home Manager как в профессиональной деятельности, так и в домашних условиях. Эти инструменты стали для меня незаменимыми помощниками в управлении программным окружением, особенно при работе с различными дистрибутивами Linux, такими как WSL и Fedora.&lt;/p&gt;&#xA;&lt;p&gt;На работе, где я занимаюсь разработкой программного обеспечения, Nix package manager и Nix flakes позволяют мне быстро и эффективно создавать изолированные окружения для различных проектов. Это особенно полезно, когда необходимо переключаться между разными версиями библиотек или инструментов. Благодаря Nix, я могу быть уверен, что все зависимости проекта будут установлены корректно и не повлияют на другие рабочие окружения.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Веб-приложение - поиск автосервисов</title>
      <link>https://gkuzora.ru/projects/diploma-gb/</link>
      <pubDate>Tue, 16 Apr 2024 10:53:41 +0300</pubDate>
      <guid>https://gkuzora.ru/projects/diploma-gb/</guid>
      <description>&lt;h2 id=&#34;вступление&#34;&gt;Вступление&lt;/h2&gt;&#xA;&lt;p&gt;В современном мире, когда технологии развиваются с невероятной скоростью, многие сферы жизни человека претерпевают кардинальные изменения. Одной из таких сфер является автомобильный транспорт и обслуживание автомобилей. С ростом числа автомобилей на дорогах, увеличивается и потребность в качественных автосервисах, которые могут удовлетворить потребности автовладельцев в ремонте, обслуживании и диагностике.&lt;/p&gt;&#xA;&lt;p&gt;Актуальность темы данной дипломной работы заключается в том, что создание удобного и эффективного веб-приложения для поиска автосервисов может значительно упростить жизнь автовладельцам, предоставив им доступ к актуальной информации о ближайших автосервисах, их услугах, ценах и отзывах других клиентов. Кроме того, такое приложение может помочь автосервисам увеличить свою клиентскую базу, улучшить качество обслуживания и оптимизировать рабочие процессы.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Контейнер с dev-сервером Django</title>
      <link>https://gkuzora.ru/posts/local_django_dev_server/</link>
      <pubDate>Fri, 26 Jan 2024 23:03:27 +0300</pubDate>
      <guid>https://gkuzora.ru/posts/local_django_dev_server/</guid>
      <description>&lt;h1 id=&#34;локальный-docker-контейнер-для-тестирования-api-приложения&#34;&gt;Локальный docker контейнер для тестирования API приложения&lt;/h1&gt;&#xA;&lt;h2 id=&#34;описание&#34;&gt;Описание&lt;/h2&gt;&#xA;&lt;p&gt;Этот контейнер - это независимый сервер, который использует Werkzeug и Django для функционирования. На этом сервере работает версия приложения backend, которая размещена в локальной директории компьютера. Любые изменения в исходном коде непосредственно влияют на функционирование контейнера.&lt;/p&gt;&#xA;&lt;h2 id=&#34;подготовка-среды-для-запуска-контейнера&#34;&gt;Подготовка среды для запуска контейнера&lt;/h2&gt;&#xA;&lt;p&gt;Чтобы начать работу с контейнером необходимо:&lt;/p&gt;&#xA;&lt;h3 id=&#34;скачать-исходный-код&#34;&gt;Скачать исходный код&lt;/h3&gt;&#xA;&lt;p&gt;Клонировать репозиторий &lt;a href=&#34;https://github.com/car-service-with-geolocation/backend&#34;&gt;backend&lt;/a&gt; в локальную директорию:&lt;/p&gt;&#xA;&lt;p&gt;Используя https протокол:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git clone https://github.com/car-service-with-geolocation/backend.git&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Либо используя SSH протокол:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Fedora Post Install</title>
      <link>https://gkuzora.ru/posts/fedora-post-install/</link>
      <pubDate>Tue, 02 Jan 2024 15:31:19 +0300</pubDate>
      <guid>https://gkuzora.ru/posts/fedora-post-install/</guid>
      <description>&lt;h2 id=&#34;что-делать-после-установки-fedora&#34;&gt;Что делать после установки Fedora&lt;/h2&gt;&#xA;&lt;p&gt;После &lt;a href=&#34;https://georgiykuzora.ru/post/fedora-install/&#34;&gt;установки Fedora&lt;/a&gt; важно настроить систему в соответствии с личными предпочтениями и задачами.&lt;/p&gt;&#xA;&lt;h2 id=&#34;обязательные-действия&#34;&gt;Обязательные действия&lt;/h2&gt;&#xA;&lt;h3 id=&#34;настройка-swappiness&#34;&gt;Настройка swappiness&lt;/h3&gt;&#xA;&lt;p&gt;Современные компьютеры имеют большой объем оперативной памяти, поэтому обычно не возникает проблем с нехваткой памяти и необходимостью использовать своп-память.&lt;/p&gt;&#xA;&lt;p&gt;Fedora по умолчанию создает виртуальный своп-раздел в формате ZRAM. Поэтому при установке системы не нужно создавать отдельный своп-раздел на диске. Однако, даже если у нас есть ZRAM, мы не хотим, чтобы система использовала его, пока не будет исчерпана вся доступная память. Чтобы задать такое поведение, нужно:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Правильная установка Fedora Linux</title>
      <link>https://gkuzora.ru/posts/fedora-install/</link>
      <pubDate>Tue, 05 Dec 2023 10:03:27 +0300</pubDate>
      <guid>https://gkuzora.ru/posts/fedora-install/</guid>
      <description>&lt;h2 id=&#34;почему-fedora-linux&#34;&gt;Почему Fedora Linux&lt;/h2&gt;&#xA;&lt;p&gt;Я начал свое знакомство с Linux с &lt;a href=&#34;https://ubuntu.com/&#34;&gt;Ubuntu&lt;/a&gt;, затем попробовал &lt;a href=&#34;https://archlinux.org/&#34;&gt;Arch Linux&lt;/a&gt;, но идеальной для меня стала &lt;a href=&#34;https://fedoraproject.org/ru/&#34;&gt;Fedora&lt;/a&gt;. Fedora предлагает идеальный баланс между стабильностью и актуальностью, имеет хорошую документацию и поддерживает RPM-пакеты, что делает установку приложений простой, даже если их нет в официальном репозитории.&lt;/p&gt;&#xA;&lt;h2 id=&#34;преимущества-fedora-linux&#34;&gt;Преимущества Fedora Linux&lt;/h2&gt;&#xA;&lt;p&gt;Fedora Linux предлагает ряд преимуществ для пользователей, которые ищут стабильную, надежную и современную операционную систему. Вот некоторые из основных преимуществ использования Fedora:&lt;/p&gt;&#xA;&lt;h3 id=&#34;стабильность&#34;&gt;Стабильность&lt;/h3&gt;&#xA;&lt;p&gt;Fedora Linux известна своей стабильностью и надежностью. В отличие от Arch Linux, при использовании которого необходимо создавать резервные копии перед каждым обновлением, и &lt;a href=&#34;https://pop%22.system76.com/&#34;&gt;Pop!_OS&lt;/a&gt;, система которой дала сбой после первого мажорного обновления, Fedora не вызывает таких проблем. Обновления на этой системе проходят гладко и без вмешательства пользователя.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Динамическое программирование</title>
      <link>https://gkuzora.ru/posts/dynamic-programming/</link>
      <pubDate>Mon, 06 Nov 2023 10:16:01 +0300</pubDate>
      <guid>https://gkuzora.ru/posts/dynamic-programming/</guid>
      <description>&lt;h2 id=&#34;что-такое-динамическое-программирование&#34;&gt;Что такое динамическое программирование&lt;/h2&gt;&#xA;&lt;p&gt;Динамическое программирование – это методика разработки алгоритмов, которая предполагает разделение задачи на несколько этапов или шагов. После этого вычисляется решение для каждого шага по отдельности. Затем, используя результаты этих отдельных решений, мы определяем общее решение. Этот процесс близок к использованию рекурсии и принципу &amp;ldquo;разделяй и властвуй&amp;rdquo;.&lt;/p&gt;&#xA;&lt;p&gt;Однако, в отличие от обычной рекурсии, динамическое программирование подразумевает сохранение результатов решения подзадач. Это делается для того, чтобы избежать повторного вычисления уже известных результатов, если они потребуются на последующих этапах. Такая оптимизация позволяет снизить временную сложность задачи с экспоненциального уровня до полиномиального.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Работа с Docker Compose</title>
      <link>https://gkuzora.ru/posts/docker-compose/</link>
      <pubDate>Sat, 07 Oct 2023 16:56:23 +0300</pubDate>
      <guid>https://gkuzora.ru/posts/docker-compose/</guid>
      <description>&lt;h2 id=&#34;введение&#34;&gt;Введение&lt;/h2&gt;&#xA;&lt;p&gt;Рассмотрим процесс запуска и организации работы &lt;a href=&#34;https://www.docker.com/&#34;&gt;Docker&lt;/a&gt;  контейнеров при помощи &lt;a href=&#34;https://docs.docker.com/compose/&#34;&gt;Docker Compose&lt;/a&gt;. Выполним это на примере запуска сервиса &lt;a href=&#34;https://ru.wordpress.org/&#34;&gt;WordPress&lt;/a&gt; в связке с базой данных &lt;a href=&#34;https://www.mysql.com/&#34;&gt;MySQL&lt;/a&gt; и веб-сервером &lt;a href=&#34;https://nginx.org/ru/&#34;&gt;Nginx&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;настройка-конфигурации-веб-сервера&#34;&gt;Настройка конфигурации веб-сервера&lt;/h2&gt;&#xA;&lt;p&gt;Для начала создадим директорию в которой будут размещены файлы конфигурации проекта.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mkdir wordpress&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Перейдем в директорию проекта и создадим директорию для файла конфигруации веб-сервера.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cd wordpress&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mkdir nginx-conf&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Создадим файл конфигурации веб-сервера при помощи редактора Vim.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;vim nginx-conf/nginx.conf&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Внесем следующую конфигурацию в файл (далее рассмотрим ее более подробно).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Как использовать tail и grep для дебагинга</title>
      <link>https://gkuzora.ru/posts/tail-grep/</link>
      <pubDate>Fri, 08 Sep 2023 17:37:54 +0300</pubDate>
      <guid>https://gkuzora.ru/posts/tail-grep/</guid>
      <description>&lt;h2 id=&#34;какие-варианты-дебагинга-существуют&#34;&gt;Какие варианты дебагинга существуют&lt;/h2&gt;&#xA;&lt;p&gt;При отладке программы можно использовать различные стратегии для дебагинга:&lt;/p&gt;&#xA;&lt;h3 id=&#34;использовать-дебагер&#34;&gt;Использовать дебагер&lt;/h3&gt;&#xA;&lt;p&gt;Достоинства:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Возможность по шагам изучить работу программы.&lt;/li&gt;&#xA;&lt;li&gt;Видно состояние всех переменных в программе.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Недостатки:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Занимает значительное время.&lt;/li&gt;&#xA;&lt;li&gt;Сложно проводить анализ при увеличении сложности программы.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;добавлять-операции-для-вывода-в-терминал-в-код-программы&#34;&gt;Добавлять операции для вывода в терминал в код программы&lt;/h3&gt;&#xA;&lt;p&gt;Достоинства:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Простота добавления операции вывода.&lt;/li&gt;&#xA;&lt;li&gt;Возможность анализа после завершения программы.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Недостатки:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&amp;ldquo;Засорение&amp;rdquo; кода программы.&lt;/li&gt;&#xA;&lt;li&gt;Сложность анализа при тестировании и после запуска в продакшн.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;ипользовать-логи-для-записи-debug-сообщений&#34;&gt;Ипользовать логи для записи debug-сообщений&lt;/h3&gt;&#xA;&lt;p&gt;Достоинства:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Базовая работа с Nginx и Apache2</title>
      <link>https://gkuzora.ru/posts/nginx-basic-config/</link>
      <pubDate>Fri, 01 Sep 2023 22:05:11 +0300</pubDate>
      <guid>https://gkuzora.ru/posts/nginx-basic-config/</guid>
      <description>&lt;h2 id=&#34;установка-nginx-и-настройка-работы-с-php-fpm&#34;&gt;Установка Nginx и настройка работы с PHP-FPM&lt;/h2&gt;&#xA;&lt;p&gt;Для установки Nginx и php-fpm используем менеджер пакетов &lt;code&gt;apt&lt;/code&gt;:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo apt install nginx php8.1 php8.1-fpm&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Проверим что nginx и php-fpm запустились:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ps auxf&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Перейдем в папку &lt;code&gt;/etc/nginx/&lt;/code&gt;:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cd /etc/nginx/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Отредактируем файл конфигурации nginx нашего сайта &lt;code&gt;/etc/nginx/sites-enabled/default&lt;/code&gt;:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;vi /etc/nginx/sites-enabled/default&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Добавим конфигурацию в файл &lt;code&gt;/etc/nginx/sites-enabled/default&lt;/code&gt;:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-nginx&#34; data-lang=&#34;nginx&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;server&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;listen&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;80&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;default_server&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;listen&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;[::]:80&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;default_server&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;root&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;/var/www/html&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;index&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;index.html&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;index.htm&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;index.nginx-debian.html&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;server_name&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;_&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;location&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;/&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;try_files&lt;/span&gt; $uri $uri/ =&lt;span style=&#34;color:#ae81ff&#34;&gt;404&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Добавим также конфигурацию для работы сервера php-fpm в файл &lt;code&gt;/etc/nginx/sites-enabled/default&lt;/code&gt;:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Как создать статичный сайт используя Hugo</title>
      <link>https://gkuzora.ru/posts/hugo_basic/</link>
      <pubDate>Fri, 11 Aug 2023 20:40:37 +0300</pubDate>
      <guid>https://gkuzora.ru/posts/hugo_basic/</guid>
      <description>&lt;h2 id=&#34;что-такое-hugo&#34;&gt;Что такое Hugo&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://gohugo.io/&#34;&gt;Hugo&lt;/a&gt; - это фрейморк для создания статичных сайтов. Он написан на языке Go.&lt;/p&gt;&#xA;&lt;h2 id=&#34;установка-hugo&#34;&gt;Установка Hugo&lt;/h2&gt;&#xA;&lt;h3 id=&#34;зависимости&#34;&gt;Зависимости&lt;/h3&gt;&#xA;&lt;p&gt;Hugo имеет 3 необязательные зависимости&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://git-scm.com/book/en/v2/Getting-Started-Installing-Git&#34;&gt;Git&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://go.dev/doc/install&#34;&gt;Go&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://gohugo.io/hugo-pipes/transpile-sass-to-css/#dart-sass&#34;&gt;Dart Sass&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;варианты-установки-hugo&#34;&gt;Варианты установки Hugo&lt;/h3&gt;&#xA;&lt;p&gt;Существует две версии Hugo стандартная и расширенная. Расширенная версия обладает дополнительным функционалом (например поддерживает формат изображений WebP). Нет смысла устанавливать стандартную версию, даже сами разработчики рекомендуют расширенную.&lt;/p&gt;&#xA;&lt;p&gt;Существует несколько вариантов &lt;a href=&#34;https://gohugo.io/installation/linux/&#34;&gt;установки Hugo в Linux&lt;/a&gt;. Рассмотрим отдельные варианты установки уже скомпилированных файлов:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Протоколы Python и структурная типизация</title>
      <link>https://gkuzora.ru/posts/python-protocols/</link>
      <pubDate>Sat, 15 Jul 2023 09:37:40 +0300</pubDate>
      <guid>https://gkuzora.ru/posts/python-protocols/</guid>
      <description>&lt;p&gt;Система типов Python поддерживает два способа определения совместимости двух объектов как типов: номинальная типизация и структурная типизация.&lt;/p&gt;&#xA;&lt;h2 id=&#34;номинальная-типизация&#34;&gt;Номинальная типизация&lt;/h2&gt;&#xA;&lt;p&gt;Номинальная типизация основана на иерархии классов. Если класс &lt;code&gt;Dog&lt;/code&gt; наследует класс &lt;code&gt;Animal&lt;/code&gt;, он является подтипом &lt;code&gt;Animal&lt;/code&gt;. Экземпляры &lt;code&gt;Dog&lt;/code&gt; могут использоваться, когда ожидаются экземпляры &lt;code&gt;Animal&lt;/code&gt;. Система типов Python преимущественно использует эту форму типизации. Ее легко понять и она соответствует тому, как работает проверка &lt;code&gt;isinstance&lt;/code&gt; - на основе иерархии классов.&lt;/p&gt;&#xA;&lt;h2 id=&#34;структурная-типизация&#34;&gt;Структурная типизация&lt;/h2&gt;&#xA;&lt;p&gt;Структурная типизация основана на операциях, которые могут быть выполнены с объектом. Класс &lt;code&gt;Dog&lt;/code&gt; является структурным подтипом класса &lt;code&gt;Animal&lt;/code&gt;, если первый имеет все атрибуты и методы последнего, и других совместимых типов.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Сортировка Шелла</title>
      <link>https://gkuzora.ru/posts/shell-sort/</link>
      <pubDate>Fri, 02 Jun 2023 12:59:24 +0300</pubDate>
      <guid>https://gkuzora.ru/posts/shell-sort/</guid>
      <description>&lt;h2 id=&#34;что-такое-сортировка-шелла&#34;&gt;Что такое сортировка Шелла&lt;/h2&gt;&#xA;&lt;p&gt;Сортировка Шелла - один из самых известных алгоритмов сортировки. Этот алгоритм был разработан в 1959 году американским математиком Дональдом Шеллом. Сортировка Шелла является усовершенствованным вариантом сортировки вставками и является более эффективной для больших объемов данных.&#xA;Принцип работы сортировки Шелла заключается в разбиении массива на подмассивы и последующей сортировке каждого подмассива методом вставки. При этом размер подмассивов уменьшается на каждой итерации сортировки. На первой итерации размер подмассива равен &lt;code&gt;n/2&lt;/code&gt;, на второй - &lt;code&gt;n/4,&lt;/code&gt; на третьей - &lt;code&gt;n/8&lt;/code&gt; и т.д. После того, как размер подмассива становится равным единице, происходит окончательная сортировка всего массива методом вставки.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Сортировка слиянием</title>
      <link>https://gkuzora.ru/posts/merge-sort/</link>
      <pubDate>Sat, 27 May 2023 13:58:39 +0300</pubDate>
      <guid>https://gkuzora.ru/posts/merge-sort/</guid>
      <description>&lt;h2 id=&#34;что-такое-быстрая-сортировка&#34;&gt;Что такое быстрая сортировка&lt;/h2&gt;&#xA;&lt;p&gt;Пузырьковая сортировка, сортировка вставками или сортировка выбором - это медленные виды сортировок. Скорость их выполнения &lt;code&gt;O(N^2)&lt;/code&gt;.&#xA;Сортировка слиянием - это вид быстрой сортировки. Скорость ее выполнения равна &lt;code&gt;O(logN*N^2)&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;как-работает-сортировка-слиянием&#34;&gt;Как работает сортировка слиянием&lt;/h2&gt;&#xA;&lt;p&gt;&lt;img src=&#34;diagram.png&#34; alt=&#34;Принцип работы сортировки слиянием&#34;&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;деление-массива-на-части&#34;&gt;Деление массива на части&lt;/h3&gt;&#xA;&lt;p&gt;Сортировка слиянием использует принцип деления массива на секции. Деление происходит по индексу. В качестве точки деления берется индекс середины массива. Затем для каждой из получившихся секций также происходит разделение по срединному индексу.&#xA;Деление продолжается до тех пор, когда длина секций массива станет равна 1. Секция длины 1 - это отсортированный массив.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Пузырьковая сортировка</title>
      <link>https://gkuzora.ru/posts/bubble-sort/</link>
      <pubDate>Sun, 14 May 2023 14:23:50 +0300</pubDate>
      <guid>https://gkuzora.ru/posts/bubble-sort/</guid>
      <description>&lt;h2 id=&#34;описание&#34;&gt;Описание&lt;/h2&gt;&#xA;&lt;p&gt;Метод сортировки пузырьком основан на попарном сравнении соседних элементов в массиве.&#xA;При каждом из проходов каждый из элементов попарно сравниваются с следующим из ним элементом в массиве. При сравнении, если текущий элемент больше следующего, то эти элементы меняются местами.&#xA;Проходы выполняют для всех элементов в массиве, либо пока все элементы не будут отсортированы.&lt;/p&gt;&#xA;&lt;h2 id=&#34;временная-сложность-алгоритма&#34;&gt;Временная сложность алгоритма&lt;/h2&gt;&#xA;&lt;p&gt;В худшем случае выполняется &lt;code&gt;N&lt;/code&gt; проходов. В каждом проходе в худшем случае выполняется &lt;code&gt;N-1&lt;/code&gt; сравнений.&#xA;Возможно оптимизировать количество сравнений в каждом проходе. После каждого прохода, в конце неотсортированной части массива оказывается максимальное значение в неотсортированной части. Таким образом на каждом из следующих проходов можно сократить количество сравнений на один.&#xA;С учетом оптимизации временная сложность алгоритма будет равна &lt;code&gt;1/2*n^2&lt;/code&gt; - O(n^2).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Библиотека unittest mock</title>
      <link>https://gkuzora.ru/posts/unittest-mock-basic/</link>
      <pubDate>Fri, 05 May 2023 14:32:19 +0300</pubDate>
      <guid>https://gkuzora.ru/posts/unittest-mock-basic/</guid>
      <description>&lt;h2 id=&#34;варианты-использования&#34;&gt;Варианты использования&lt;/h2&gt;&#xA;&lt;p&gt;Модуль mock можно использовать в следующих случаях.&lt;/p&gt;&#xA;&lt;h3 id=&#34;проверить-вызывается-ли-метод-внутри-другого-метода&#34;&gt;Проверить вызывается ли метод внутри другого метода&lt;/h3&gt;&#xA;&lt;p&gt;Возникают ситуации, когда необходимо проверить был ли метод вызван при работе другого метода.&#xA;Mock объекты имеют несколько методов для того чтобы определить вызвался ли метод объекта. А также какие параметры он при этом использовал.&lt;/p&gt;&#xA;&lt;p&gt;Предположим что есть класс с двумя методами. При этом в первом методе вызывается второй метод с атрибутами 1, 2, 3.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Преимущества в работе с Vim</title>
      <link>https://gkuzora.ru/posts/vim_pros/</link>
      <pubDate>Sat, 29 Apr 2023 14:41:07 +0300</pubDate>
      <guid>https://gkuzora.ru/posts/vim_pros/</guid>
      <description>&lt;h2 id=&#34;введение&#34;&gt;Введение&lt;/h2&gt;&#xA;&lt;p&gt;Каждый год на сайте StackOverflow проходит опрос пользователей сайта на темы связанные с разработкой программного обеспечения. В 2022 году в нем приняло участие более 74 тысячи человек.&#xA;&lt;a href=&#34;https://survey.stackoverflow.co/2023/&#34;&gt;Stack Overflow survey&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;На вопрос какую среду разработки используют пользователи сайта были получены следующие результаты:&lt;/p&gt;&#xA;&lt;p&gt;Visual Studio Code с большим отрывом опережает другие редакторы кода. Но интересно что редактор Vim занял пятое место и обошел другие более современные IDE.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;sof_2023.png&#34; alt=&#34;Stack Overflow survey&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;В этой статье дан разбор преимуществ редактора Vim которые привлекают пользователей.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
