<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Проекты on FeLexDev</title>
    <link>https://felexdev.ru/categories/%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D1%8B/</link>
    <description>Recent content in Проекты on FeLexDev</description>
    <generator>Hugo</generator>
    <language>ru</language>
    <lastBuildDate>Fri, 29 May 2026 21:32:19 +0500</lastBuildDate>
    <atom:link href="https://felexdev.ru/categories/%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D1%8B/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>1. Блог оптометриста</title>
      <link>https://felexdev.ru/projects/1-blog-optometrista/1-blog-optometrista/</link>
      <pubDate>Tue, 26 May 2026 23:53:26 +0500</pubDate>
      <guid>https://felexdev.ru/projects/1-blog-optometrista/1-blog-optometrista/</guid>
      <description>&lt;h1 id=&#34;описание&#34;&gt;&#xA;  Описание&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%d0%be%d0%bf%d0%b8%d1%81%d0%b0%d0%bd%d0%b8%d0%b5&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Ссылка на заголовок&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Ссылка на заголовок&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h1&gt;&#xA;&lt;p&gt;Профессиональный блог практикующего оптометриста с 20-тилетним стажем.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Тематика:&lt;/strong&gt; Разбор случаев из практики, обзор технологий и практик применяемых в оптометрии и медицинской оптике.&lt;/p&gt;&#xA;&lt;h1 id=&#34;прогресс&#34;&gt;&#xA;  Прогресс&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%d0%bf%d1%80%d0%be%d0%b3%d1%80%d0%b5%d1%81%d1%81&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Ссылка на заголовок&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Ссылка на заголовок&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h1&gt;&#xA;&lt;details&gt;&#xA;    &lt;summary&gt;Условные обозначения&lt;/summary&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;➤ — задача выполняется&lt;/li&gt;&#xA;&lt;li&gt;✅ — задача выполнена полностью&lt;/li&gt;&#xA;&lt;li&gt;⚠️ — задача отложена&lt;/li&gt;&#xA;&lt;li&gt;☐ — задача ожидает выполнения&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/details&gt;&#xA;&lt;p&gt;&lt;strong&gt;Общий прогресс:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th style=&#34;text-align: center&#34;&gt;Статус&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: left&#34;&gt;Задача&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: left&#34;&gt;Описание&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: center&#34;&gt;Дата начала&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: center&#34;&gt;Дата завершения&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;➤&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;strong&gt;UX-Исследование&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Исследование востребованности и тематики блога оптометриста&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;26.05.2026&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;☐&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;strong&gt;Выбор оформления&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Работа с заказчиком над оформлением сайта&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;☐&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;strong&gt;DNS&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Настройка A, MX, SPF/DKIM/DMARK&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;☐&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;strong&gt;Развёртывание&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Развёртывание сайта на хостинге&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;☐&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;strong&gt;Автодеплой&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Обеспечение механизва автоматического развёртывания при обновлении репозитория сайта&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;☐&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;strong&gt;Обучение&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Обучение заказчика работе в Visual Studio Code, Git/Gitea, Hugo, обучение синтаксису Markdown&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;details&gt;&#xA;    &lt;summary&gt;&lt;b&gt;Подробный проггресс&lt;/b&gt;&lt;/summary&gt;&#xA;&lt;h2 id=&#34;26052026&#34;&gt;&#xA;  26.05.2026&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#26052026&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Ссылка на заголовок&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Ссылка на заголовок&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th style=&#34;text-align: center&#34;&gt;Статус&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: left&#34;&gt;Задача&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: left&#34;&gt;Описание&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;✅&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;strong&gt;UX-Исследование&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Создана и опубликована форма на &lt;a href=&#34;https://forms.yandex.ru/u/6a15888502848f0a1d56772d&#34;  class=&#34;external-link&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;forms.yandex.ru&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;/details&gt;&#xA;&lt;h1 id=&#34;тз&#34;&gt;&#xA;  ТЗ&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%d1%82%d0%b7&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Ссылка на заголовок&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Ссылка на заголовок&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h1&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;Исследование:&lt;/strong&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;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Выбор лендинга:&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;определить технически оптимальные варианты исполнения блога.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Дизайн:&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;определить основной каркас блога&lt;/li&gt;&#xA;&lt;li&gt;проработать уникальные детали оформления&lt;/li&gt;&#xA;&lt;li&gt;разработка и внедрение фирменного лейбла&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;DNS:&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;обеспечить корректную настройку DNS зоны для выбранного домена&lt;/li&gt;&#xA;&lt;li&gt;обеспечить корректную настройку DNS зоны для работы электронной почты&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Развёртывание:&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;создать репозиторий сайта&lt;/li&gt;&#xA;&lt;li&gt;развернуть сайт на хостинге&lt;/li&gt;&#xA;&lt;li&gt;обеспечить автоматическое обновление сайта при изменении репозитория&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Обучение:&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;работа в VS Code&lt;/li&gt;&#xA;&lt;li&gt;основы git&lt;/li&gt;&#xA;&lt;li&gt;администрирование репозитория Gitea&lt;/li&gt;&#xA;&lt;li&gt;синтаксис Markdown&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;</description>
    </item>
    <item>
      <title>Работа над наполнением сайта проекта Neurox</title>
      <link>https://felexdev.ru/posts/2026-05-18_autodeploy/</link>
      <pubDate>Mon, 18 May 2026 23:53:26 +0500</pubDate>
      <guid>https://felexdev.ru/posts/2026-05-18_autodeploy/</guid>
      <description>&lt;p&gt;Всем доброго времени суток, извиняюсь за долгое отсутсвие, занят оптимизацией выходных файлов Doxygen.&lt;/p&gt;&#xA;&lt;h1 id=&#34;цель&#34;&gt;&#xA;  Цель&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%d1%86%d0%b5%d0%bb%d1%8c&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Ссылка на заголовок&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Ссылка на заголовок&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h1&gt;&#xA;&lt;p&gt;Оптимизировать сгенерированные &lt;strong&gt;Doxygen&lt;/strong&gt; файлы для работы с мобильными устройствами.&lt;/p&gt;&#xA;&lt;h1 id=&#34;средства-и-интсрументы&#34;&gt;&#xA;  Средства и интсрументы&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%d1%81%d1%80%d0%b5%d0%b4%d1%81%d1%82%d0%b2%d0%b0-%d0%b8-%d0%b8%d0%bd%d1%82%d1%81%d1%80%d1%83%d0%bc%d0%b5%d0%bd%d1%82%d1%8b&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Ссылка на заголовок&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Ссылка на заголовок&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h1&gt;&#xA;&lt;p&gt;Поскольку автодеплой идёт по &lt;strong&gt;Web-hook&lt;/strong&gt;-у &lt;strong&gt;Gitea&lt;/strong&gt;, то логично использование &lt;strong&gt;PHP&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;алгоритм&#34;&gt;&#xA;  Алгоритм&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%d0%b0%d0%bb%d0%b3%d0%be%d1%80%d0%b8%d1%82%d0%bc&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Ссылка на заголовок&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Ссылка на заголовок&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;Gitea:&lt;/strong&gt; получает обновление репозитория и запускает web-hook на локальный адрес.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;PHP:&lt;/strong&gt; сравнивает секретный код hook-а, запускает соответствующий скрипт.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;PHP:&lt;/strong&gt; вытягивает во временную папку изменения из репозитория.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;PHP:&lt;/strong&gt; запускает &lt;strong&gt;Doxygen&lt;/strong&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;PHP:&lt;/strong&gt; ищет все сгенерированные &lt;strong&gt;.html&lt;/strong&gt; файлы и вставляет в блок &lt;code&gt;&amp;lt;head&amp;gt;&amp;lt;/head&amp;gt;&lt;/code&gt; ссылку на скрипт.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;PHP:&lt;/strong&gt; в найденных файлах изменяет открывающий тег &lt;code&gt;&amp;lt;body&amp;gt;&lt;/code&gt; - добавляет к нему свойство &lt;code&gt;onload&lt;/code&gt; с вызовом функции инициализации вставленного&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;PHP:&lt;/strong&gt; непосредственно после открывающего тега &lt;code&gt;&amp;lt;body&amp;gt;&lt;/code&gt; вставляет нужный &lt;code&gt;&amp;lt;div style=&amp;quot;display:none;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;/code&gt; блок содержащий в себе необходимые для работы скрипта DOM-объекты(svg, img и прочие).&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;PHP:&lt;/strong&gt; завершает выполнение, делает отметку в логе и уведомляет &lt;strong&gt;Gitea&lt;/strong&gt; о результате.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h1 id=&#34;суть-оптимизации&#34;&gt;&#xA;  Суть оптимизации&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%d1%81%d1%83%d1%82%d1%8c-%d0%be%d0%bf%d1%82%d0%b8%d0%bc%d0%b8%d0%b7%d0%b0%d1%86%d0%b8%d0%b8&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Ссылка на заголовок&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Ссылка на заголовок&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Во все блоки кода сгенерированных файлов вставляется иконка для копирования содержания.&lt;/li&gt;&#xA;&lt;li&gt;Боковое меню на мобильных устройствах должно иметь 2 положения:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;скрыто:&lt;/strong&gt; полностью свёрнуто.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;открыто:&lt;/strong&gt; развёрнуто на весь экран.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h1 id=&#34;почему-именно-так&#34;&gt;&#xA;  Почему именно так&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%d0%bf%d0%be%d1%87%d0%b5%d0%bc%d1%83-%d0%b8%d0%bc%d0%b5%d0%bd%d0%bd%d0%be-%d1%82%d0%b0%d0%ba&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Ссылка на заголовок&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Ссылка на заголовок&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h1&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Как перфекционист - не хочу засорять код вставляя скрипты в тело документа.&lt;/li&gt;&#xA;&lt;li&gt;Лишний раз прокачаю навыки JS/CSS/PHP.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h1 id=&#34;нюансы&#34;&gt;&#xA;  Нюансы&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#%d0%bd%d1%8e%d0%b0%d0%bd%d1%81%d1%8b&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Ссылка на заголовок&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Ссылка на заголовок&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h1&gt;&#xA;&lt;p&gt;Придётся рефакторить весь &lt;strong&gt;JavaScript&lt;/strong&gt; код связанный с работой бокового меню.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
