<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/">
  <channel>
    <language>ru</language>
    <title>PHP</title>
    <description>PHP (Hypertext Preprocessor): всё о языке программирования, используемом в веб-разработке — гайды по созданию сайтов на PHP, изучение с нуля и многое другое.</description>
    <link>https://tproger.ru/tag/php</link>
    <atom:link href="https://tproger.ru/tag/php/feed" rel="self" type="application/rss+xml"/>
    <lastBuildDate>Sun, 27 Sep 2026 21:00:41 GMT</lastBuildDate>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>12</sy:updateFrequency>
    <image>
      <title>PHP</title>
      <link>https://tproger.ru</link>
      <url>https://tproger.ru/apple-touch-icon.png</url>
    </image>
    <item>
      <title>Сэкономили на CMS при запуске магазина — а через полгода заплатили втройне за переезд</title>
      <link>https://tproger.ru/articles/sekonomili-na-cms-pri-zapuske-magazina-a-cherez-polgoda-zaplati</link>
      <comments>https://tproger.ru/articles/sekonomili-na-cms-pri-zapuske-magazina-a-cherez-polgoda-zaplati?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Pavel Pat]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/sekonomili-na-cms-pri-zapuske-magazina-a-cherez-polgoda-zaplati</guid>
      <description><![CDATA[<p>Зачем CMS для магазина — это не «витрина», а контур продаж: каталог, 1С, промо, масштаб. Разбор Битрикса, WooCommerce, облака и самописа, плюс честно про миграцию и ошибки на старте.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/sekonomili-na-cms-pri-zapuske-magazina-a-cherez-polgoda-zaplati">Сэкономили на CMS при запуске магазина — а через полгода заплатили втройне за переезд</a>»</p>]]></description>
      <category><![CDATA[Интернет]]></category>
      <category><![CDATA[API]]></category>
      <category><![CDATA[SEO]]></category>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[Быстрый старт]]></category>
      <category><![CDATA[PHP]]></category>
      <category><![CDATA[DevOps]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[WordPress]]></category>
      <category><![CDATA[Magento]]></category>
      <category><![CDATA[OpenCart]]></category>
      <category><![CDATA[HR]]></category>
      <category><![CDATA[Маркетинг]]></category>
      <category><![CDATA[Игра]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[Дизайн]]></category>
      <category><![CDATA[CMS]]></category>
      <category><![CDATA[Бизнес]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 06 May 2026 08:20:34 GMT</pubDate>
      <content:encoded><![CDATA[<p>Мне часто приносят историю в таком виде: «Сделали сайт дёшево, всё летало на старте». Потом каталог раздувается до десятков тысяч SKU, поиск начинает подвисать, 1С не дружит с админкой — и вместо продаж получается проект спасения.</p><p>Один такой кейс я помню особенно болезненно. Заказчик специально ушёл от «тяжёлых» платформ ради самописного решения: быстрее сроки, ниже чек на входе. Полгода спустя каталог перевалил за 10 000 позиций. Страницы открывались по 8–12 секунд, поиск фактически умер, обмен с учёткой превратился в ручной ад. В итоге пришлось пересобирать магазин на другой системе — и суммарно это стоило примерно в три раза больше, чем если бы выбрать нормальный фундамент сразу.</p><p>Вывод простой и непопулярный: для интернет-магазина CMS — это не «движок сайта», а контур бизнеса. Если он не тянет каталог, склады, оплаты и промо — экономия на старте превращается в налог на переделку.</p><h2>Почему «красивая витрина» не спасает</h2><p>Товар и дизайн важны. Но когда речь про оборот, в игру входят другие вещи: скорость выдачи каталога под нагрузкой, связка с 1С или CRM, гибкость скидок, безопасность оплат, возможность масштабировать без ручного копания в ядре.</p><p>Я бы проверял любую платформу не по «можно ли сделать красиво», а по чек-листу: большой каталог без комы в выдаче, интеграции без лютого кастома, промо-логика без боли, понятный путь от заказа до оплаты. Всё остальное — уже вторичный дизайн.</p><h2>Где Битрикс реально оправдан</h2><p>На корпоративных и сетевых историях Битрикс заходит потому, что это не «лендинг с корзиной», а связка магазина с процессами: каталог, заказы, складские и клиентские сценарии из коробки, обмен с 1С как отдельная экосистема.</p><p>Был у нас запуск для стройсети: 80 000 товаров, несколько складов, отдельная математика скидок для B2B. На чистом PHP такое можно дописать, но это месяцы и жирный бюджет. На готовом контуре мы вышли в прод заметно быстрее — потому что решали задачу бизнеса, а не изобретали велосипед.</p><p>Цена лицензии и сервера — да, это не «бесплатный WordPress». Зато это честная модель: вы платите за то, что масштаб и интеграции уже заложены в архитектуру, а не пробиты латками.</p><h2>Kогда разумнее WooCommerce и облако</h2><p>Если у вас не миллион SKU и не десять складов, а тысяча позиций и простая воронка — связка WordPress + WooCommerce часто выигрывает по скорости запуска и по цене входа. Экосистема плагинов закрывает типовые задачи без заказной разработки на каждый чих.</p><p>Облачные SaaS вроде Shopify годятся, когда компании нужен быстрый старт без администрирования сервера и команды DevOps. Комиссии и ограничения платформы нужно закладывать в юнит-экономику заранее — но для проверки гипотезы это иногда лучший компромисс.</p><p>OpenCart и аналоги я чаще видел у проектов, где важна предсказуемость и «руки разработчика на аутсорсе»: проще найти исполнителя, меньше сюрпризов, чем на экзотике. Magento и тяжёлый enterprise-класс имеют смысл, когда команда уже сильная технически и каталог — это отдельный продукт, а не «сайт с корзиной».</p><h2>Самопис — не зло, но это отдельная ставка</h2><p>Своя CMS имеет смысл, когда продукт по сути уникален и типовые решения мешают. Во всех остальных случаях вы покупаете не «уникальность», а дорогую поддержку собственного монстра: каждый апдейт PHP, каждый новый способ оплаты — ваш головняк.</p><h2>Если уже понятно, что платформа не та</h2><p>Переезд между системами редко бывает «копипастой базы». Обычно это заново собранная карточка товара, перепроверенные атрибуты, аккуратная переездная SEO-схема и пауза в маркетинге на время технических работ. Я закладываю такие работы как отдельный проект с понятным бэклогом — иначе получится хаос и простой продаж.</p><p>На этом этапе экономить опаснее всего: «перенесём как получится» почти всегда означает битые URL, дубли в выдаче и потерянные заказы в переходный месяц. Если уж делаете миграцию — делайте её один раз и основательно.</p><h2>Что мы делаем перед выбором</h2><ul><li>Считаем не «стоимость запуска», а стоимость трёх лет жизни: лицензии, хостинг, доработки, интеграции.</li><li>Фиксируем сценарии: каталог, промо, B2B/B2C, обмен с учёткой, маркетплейсы.</li><li>Закладываем буфер на рост — если через год SKU вырастет в пять раз, платформа должна выдержать без полной переделки.</li><li>Перед подписанием уточняем у подрядчика три неудобных вещи: сколько стоит час поддержки после запуска, как закрываются интеграции «не из коробки», и что будет, если через полгода понадобится второй склад или новый тип оплаты.</li></ul><p>Ответы без конкретики («сделаем как надо») для меня красный флаг. Нормальный исполнитель называет риски и диапазоны хотя бы порядка величины.</p><p>Если очень коротко: не экономьте на фундаменте там, где сайт — канал продаж. Экономия почти всегда вернётся чеком на миграцию.</p><p>Подробнее разобрал платформы и критерии в материале на сайте: <a href="https://webfull.ru/blog/vybor-cms-dlya-internet-magazina/">как выбрать CMS для интернет-магазина — сравнение подходов</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Denwer SE: Возрождение легендарного локального веб-сервера на современном стеке</title>
      <link>https://tproger.ru/articles/denwer-se-vozrozhdenie-legendarnogo-lokalnogo-veb-servera-na-so</link>
      <comments>https://tproger.ru/articles/denwer-se-vozrozhdenie-legendarnogo-lokalnogo-veb-servera-na-so?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Александр Тишов]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/denwer-se-vozrozhdenie-legendarnogo-lokalnogo-veb-servera-na-so</guid>
      <description><![CDATA[<p>Помните диск Z:, иконку джентльмена и магию Run.exe? Денвер вернулся. Denwer SE: Python вместо Perl, HTTPS без красных экранов, свежий PHP и портативность. И да, он всё ещё помещается на флешку.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/denwer-se-vozrozhdenie-legendarnogo-lokalnogo-veb-servera-na-so">Denwer SE: Возрождение легендарного локального веб-сервера на современном стеке</a>»</p>]]></description>
      <category><![CDATA[C++]]></category>
      <category><![CDATA[Веб-разработка]]></category>
      <category><![CDATA[Опрос]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[MySQL]]></category>
      <category><![CDATA[PHP]]></category>
      <category><![CDATA[SQL]]></category>
      <category><![CDATA[Браузеры]]></category>
      <category><![CDATA[Windows]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Microsoft]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[Базы данных]]></category>
      <category><![CDATA[Node.js]]></category>
      <category><![CDATA[HR]]></category>
      <category><![CDATA[Docker]]></category>
      <category><![CDATA[Для продвинутых]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[CMS]]></category>
      <category><![CDATA[Laravel]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 05 May 2026 10:11:34 GMT</pubDate>
      <content:encoded><![CDATA[<p>Если вы начинали веб-разработку в середине 2000-х, то наверняка помните Denwer — «джентльменский набор веб-разработчика». Иконка в виде человека в шляпе, виртуальный диск Z:, папка <i>home/localhost/www</i> — всё это было ритуалом, который упрощал жизнь тысячам разработчиков. Но оригинальный Denwer безнадёжно устарел: Perl-скрипты, 32-битные сборки, поддержка только древних версий PHP и MySQL. Ему на смену пришли громоздкие комбайны вроде Open Server или сложные для новичков Docker-контейнеры.</p><p>Однако недавно проект получил второе дыхание. Разработчик Александр Тишов (Amro) — создатель <a href="https://seditio.org" rel="nofollow">CMS Seditio</a> и основатель веб-студии <a href="https://avego.org" rel="nofollow">«Авего»</a>  — выпустил <a href="https://seditio.org/dev/denwer-se-lokalnyj-veb-stek-dlya-windows-apache-php-mysql-mariadb" rel="nofollow">Denwer SE (Second Edition)</a>. Это не просто обновление, а полный реинжиниринг с сохранением классической философии: портативность, скорость работы и привычная структура каталогов.</p><p>В этой статье разберём, что изменилось под капотом, почему панель управления переехала с Perl на Python, как работает автоматический HTTPS с собственным корневым сертификатом и зачем нужен зоопарк версий PHP от 5.6 до 8.5.</p><h2>Краткий экскурс: от Denwer 3 до Denwer SE</h2><p>Оригинальный Denwer (сокращение от Джентельменский Набор Веб-разработчика) появился в начале 2000-х. Он представлял собой связку Apache + PHP + MySQL, упакованную в самораспаковывающийся архив. Главные фишки:</p><ul><li>Виртуальный диск (по умолчанию Z:), который монтировался через subst.</li><li>Автоматическое создание виртуальных хостов по именам папок в home.</li><li>Консольные exe-файлы (Run, Stop, Restart) без графического окна.</li></ul><p>Проблемы оригинала:</p><ul><li>Управление на Perl — медленно, тяжело поддерживать в Windows.</li><li>Только 32-битные компоненты.</li><li>Невозможно быстро переключать версии PHP или БД.</li><li>Отсутствие нормального HTTPS (только самоподписанные сертификаты с ошибками в браузере).</li><li>Поддержка прекратилась в 2016 году.</li></ul><p>Denwer SE решает все эти проблемы, оставаясь при этом таким же портативным — достаточно скопировать папку на флешку или в облачный каталог.</p><h2>Архитектура: Python вместо Perl</h2><p>Denwer SE — панель управления написана на Python и скомпилирована в один EXE-файл (через PyInstaller).</p><p>Внутри служебной папки <b>denwer\</b> лежат:</p><ul><li>DLL-версия Python — интерпретатор, который использует основной исполняемый файл.</li><li>Скомпилированные модули .pyd — в том числе GUI на базе Tcl/Tk для оконного интерфейса и системного трея.</li><li>Минимальный набор библиотек для управления службами, правки hosts и генерации сертификатов.</li></ul><p>Это даёт несколько преимуществ:</p><ul><li>Портативность — панель ищет соседние папки home и usr, поэтому каталог со стеком можно переносить куда угодно без переустановки.</li><li>Скорость — Python-скрипты запускаются быстрее, чем Perl, особенно на холодном старте.</li><li>Читаемость кода — разработчику проще поддерживать и расширять функционал.</li></ul><h2>Полный переход на x64</h2><p>Оригинальный Denwer навсегда остался 32-битным, что в современных реалиях просто неприемлемо. Denwer SE собирается исключительно под x64:</p><ul><li>Apache (версия 2.4.x) — 64-битный.</li><li>Все модули PHP (от 5.6 до 8.5) — Thread Safe x64.</li><li>MySQL / MariaDB — 64-битные сборки.</li></ul><p>Системные требования — Windows 7/8/10/11 (x64). Для работы компонентов потребуются Microsoft Visual C++ Redistributable (VC11, VC12, VC14, VC15). Разработчик положил установщики этих пакетов в папку <b>vcredist\</b> — при необходимости можно доустановить вручную.</p><h2>Структура каталогов: преемственность и гибкость</h2><p>Denwer SE сохранил классическую структуру, чтобы старые пользователи не ломали голову:</p><p>Главный конфиг — usr\configuration.txt. В нём задаются пути без жёсткой привязки к букве диска, например:</p><p>При старте панель монтирует виртуальный диск (по умолчанию Z:) и динамически подставляет путь через переменную <b>subst_drive</b>.</p><h2>Управление версиями PHP и БД без танцев с бубном</h2><p>В Denwer SE встроен менеджер версий. Вы просто выбираете из выпадающего списка нужную версию PHP (например, 8.3 или 5.6) — панель сама правит конфигурацию Apache.</p><p>Как это работает под капотом:</p><p>В папке usr/local/apache/php лежат подкаталоги php5.6, php7.4, php8.3 и т.д..</p><p>В каждом из них есть файл php-denwer.conf— шаблон для подключения модуля к Apache. При выборе версии этот файл копируется в <b>conf/extra/httpd-denwer.conf</b>, который затем включается в основной httpd.conf.</p><p>Если вы хотите добавить свою сборку PHP (например, PHP 8.4-rc), достаточно:</p><ul><li>Распаковать x64 Thread Safe версию в отдельный каталог внутри php\.</li><li>Создать php-denwer.conf по образцу.</li><li>Убедиться, что все DLL от VC++ установлены.</li></ul><p>Аналогично для баз данных: переключение между MySQL 5.7 и MariaDB 11.8 происходит через тот же интерфейс. В каталоге СУБД может лежать файл <b>db-denwer.conf</b>, который при старте копируется в <b>my.ini</b>.</p><h2>HTTPS, который не бесит: локальный Root CA</h2><p>Самое болезненное место при локальной разработке это самоподписанные сертификаты. Браузеры постоянно ругаются, приходится кликать «Принять риск». Для командной разработки это вообще катастрофа: каждый участник должен сгенерировать свой сертификат и добавить в исключения.</p><p>Denwer SE решает проблему элегантно — он создаёт собственный корневой центр сертификации (CA) и подписывает им сертификаты для всех ваших локальных доменов.</p><p>Как это работает:</p><ol><li>При первом запуске (если найден OpenSSL) панель генерирует ключи denwer-ca.key и сертификат denwer-ca.crt в папку usr/local/apache/conf/cert/denwer-ca/.</li><li>Для каждого виртуального хоста (папки в home/) автоматически создаётся сертификат в conf/cert/&lt;domain&gt;/.</li><li>Все сертификаты хостов подписаны локальным CA.</li></ol><p>Чтобы браузер доверял им, нужно один раз установить <b>denwer-ca.crt</b> в хранилище «Доверенные корневые центры сертификации» Windows. Для этого в панели есть специальная кнопка (требует прав администратора).</p><p>После этого любые HTTPS-запросы к локальным хостам работают без единого предупреждения.</p><h2>Удобства для разработчика (DX)</h2><p>В версии 1.2.4 добавили несколько фич, которые экономят время каждый день:</p><ul><li>Лог с таймштампами — каждая строка в окне панели имеет префикс [чч:мм:сс]. Теперь видно, сколько секунд сервер поднимается и где возможны задержки.</li><li>Прямой доступ к php.ini и my.cnf — рядом со списками версий появились кнопки, открывающие конфигурацию именно активной версии.</li><li>Автоматическое ведение hosts — панель в реальном времени сканирует home/, находит новые домены и прописывает их в C:\Windows\System32\drivers\etc\hosts. Журнал добавляемых записей сохраняется в usr\AddedHosts.txt. При остановке стека лишние строки удаляются.</li><li>Для смены версии PHP или базы данных панель требует полной остановки всех служб. Вы нажимаете «Стоп», меняете версию в списке, затем «Старт» — и стек поднимается уже с новыми настройками. Автоматический перезапуск без вашего участия работает только для Apache: когда вы добавляете новый домен в папку home/, панель сама переписывает vhosts.conf и перезапускает веб-сервер, не трогая БД.</li></ul><h2>Почему не Open Server или Docker?</h2><p>Этот вопрос закономерно возникает у всех, кто видит очередной локальный веб-сервер. Ведь есть уже давно Open Server Panel, Laragon, XAMPP, а для продвинутых — Docker. Зачем ещё один?</p><p><b>Open Server</b> — мощный и удобный комбайн с десятками версий PHP и настройками «на века». Но он разворачивается в системе не портативно: создаёт папки в ProgramData, пишет в реестр, а запуск может занимать 5–10 секунд. Denwer SE, напротив, полностью переносим: скопировал папку на флешку или в облачный каталог — и всё работает. Запуск стека — буквально 1–2 секунды, что критично, когда вы десятки раз за день перезапускаете сервер для тестов.</p><p><b>Docker</b> — индустриальный стандарт для изоляции и воспроизводимости окружений. Но для локальной разработки простого сайта он часто избыточен. Вам нужно разобраться в образах, контейнерах, пробросе портов, volume’ах и docker-compose.yml. А в Denwer SE вы просто создали папку в home/ — и готово. Никакой работы с командной строкой, никакого потребления гигабайт ОЗУ на фоновую службу Docker Desktop.</p><p><b>Laragon</b> — быстрый, портативный, поддерживает не только PHP, но и Node.js, Python, Go. Но он ориентирован на современные фреймворки, особенно Laravel. Denwer SE же сделан для тех, кто вырос на классическом Денвере: виртуальный диск Z:, папка home/имя_домена/www, минимум настроек. Не нужно переучиваться — просто распаковал и работаешь как 10 лет назад, но с новыми версиями PHP и HTTPS.</p><h2>Как начать пользоваться Denwer SE</h2><ol><li>Скачать архив с <a href="https://seditio.org/dev/denwer-se-lokalnyj-veb-stek-dlya-windows-apache-php-mysql-mariadb" rel="nofollow">официального сайта автора</a>.</li><li>Распаковать в любое место, например C:\web\DenwerSE\.</li><li>Запустить DenwerSE.exe — если нет прав администратора, попросит их для монтирования диска и правки hosts.</li><li>Нажать «Запустить» — появится виртуальный диск Z:, а в системном трее иконка.</li><li>Создать папку сайта — например, home\myproject.local и положить туда index.php.</li><li>Открыть в браузере http://myproject.local/ (или https://myproject.local/). HTTPS будет работать сразу после установки корневого сертификата (кнопка в панели).</li></ol><p>По умолчанию пароль к MySQL/MariaDB — пустая строка (пользователь <b>root</b>). При желании его можно сменить через phpMyAdmin.</p><h2>Заключение</h2><p>Denwer SE — это не просто ностальгический проект. Это действительно современный инструмент, который доказывает, что концепция «локального сервера в одну папку» всё ещё актуальна. Отказ от Perl в пользу Python, менеджер версий PHP/БД, нормальный HTTPS, портативность и мгновенный запуск — всё это делает его отличным выбором для быстрого прототипирования, тестирования легаси-кода или обучения веб-разработке.</p><p>Если вы устали ждать, пока Open Server применит настройки, или не хотите разбираться в Docker Compose — попробуйте <b>Denwer SE</b>. Вероятно, он напомнит вам старые добрые времена, но уже без боли устаревших технологий.</p><ul><li>Автор проекта: Александр Тишов
	(Amro), разработчик CMS Seditio.</li><li>Лицензия: Freeware.</li><li>Совместимость: Windows 7/8/10/11 x64.</li></ul><p>Исходники панели управления не открыты (распространяется скомпилированный EXE), но архитектура и конфиги полностью прозрачны. В планах — добавить поддержку Nginx в качестве альтернативы. Следите за обновлениями.</p>]]></content:encoded>
    </item>
    <item>
      <title>Headless WordPress: архитектура с Next.js, GraphQL и Cloudflare</title>
      <link>https://tproger.ru/articles/headless-wordpress--arhitektura-s-next-js--graphql-i-cloudflare</link>
      <comments>https://tproger.ru/articles/headless-wordpress--arhitektura-s-next-js--graphql-i-cloudflare?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Александр Пехота]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/headless-wordpress--arhitektura-s-next-js--graphql-i-cloudflare</guid>
      <description><![CDATA[<p>Разбираем headless WordPress на практике: Next.js, Cloudflare Workers, GraphQL и архитектура быстрых и масштабируемых сайтов.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/headless-wordpress--arhitektura-s-next-js--graphql-i-cloudflare">Headless WordPress: архитектура с Next.js, GraphQL и Cloudflare</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Веб-разработка]]></category>
      <category><![CDATA[Оптимизация]]></category>
      <category><![CDATA[PHP]]></category>
      <category><![CDATA[WordPress]]></category>
      <category><![CDATA[React]]></category>
      <category><![CDATA[Cloudflare]]></category>
      <category><![CDATA[CMS]]></category>
      <category><![CDATA[CDN]]></category>
      <category><![CDATA[CI/CD]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 26 Mar 2026 11:29:45 GMT</pubDate>
      <content:encoded><![CDATA[<h2>Почему WordPress?</h2><p>WordPress часто не любят backend-разработчики, и у каждого на это есть свои причины. Кому-то не нравится функциональный стиль разработки, кто-то критикует form-builder и экосистему плагинов. У других WordPress как CMS и PHP как язык программирования до сих пор ассоциируются со стереотипами 10–15-летней давности - будто они устарели и уступают современным технологиям.</p><p>При этом реальность такова, что и PHP, и WordPress - отличные и современные инструменты, которые очень хорошо выполняют свои задачи. Опустим PHP - статья не об этом. Что же можно сказать про WordPress как про продукт и как CMS?</p><p>WordPress по‑прежнему остаётся самой популярной системой управления контентом. Согласно данным команды WordPress, платформа обслуживает более 43% всех веб-сайтов и занимает долю в 61% на рынке CMS. Также статистика показывает, что WordPress используется примерно на 59% сайтов, где известна CMS (это около 42% всего веба).</p><p>Данные были взяты из официального блога WordPress и сайта w3techs.com:</p><ul><li><a href="https://wordpress.com/blog/2025/04/17/wordpress-market-share/" rel="nofollow">https://wordpress.com/blog/2025/04/17/wordpress-market-share/ </a></li><li><a href="https://w3techs.com/technologies/overview/content_management" rel="nofollow">https://w3techs.com/technologies/overview/content_management</a></li><li><a href="https://w3techs.com/technologies/details/cm-wordpress" rel="nofollow">https://w3techs.com/technologies/details/cm-wordpress</a></li></ul><p>При этом, традиционный WordPress объединяет CMS, шаблоны на PHP и монолитные темы. Такая связка усложняет разработку с использованием современных JS фреймворков, а также затрудняет независимое масштабирование фронтенда и бэкенда, и оптимизацию производительности и безопасности. Жёсткая связка страниц, устаревшие PHP‑функции и не самый удобный девелоперский опыт часто заставляют команды искать альтернативы.</p><p>Headless WordPress решает эти проблемы: CMS становится админ-панелью для управления контентом, а отдельный фронтенд отвечает за UI. Такое разделение обязанностей даёт несколько преимуществ: четкое разделение ответственности, независимое масштабирование интерфейса и CMS, упрощенную локальную разработку и CI/CD. CMS превращается в API‑ориентированное хранилище, а современные фреймворки вроде Next.js берут на себя маршрутизацию и рендеринг.</p><h2>Headless WordPress с использованием WPGraphQL</h2><p>Чтобы использовать WordPress как headless‑CMS, нужен API. Также есть интересный пост про headless wordpress в их <a href="https://wordpress.com/blog/2025/03/20/headless-wordpress/" rel="nofollow">официальном блоге</a>.</p><p>В WordPress из коробки есть REST API, но для frontend и mobile приложений часто удобнее использовать GraphQL. <a href="https://wordpress.org/plugins/wp-graphql/" rel="nofollow">WPGraphQL</a> - это open source плагин, который добавляет GraphQL API в WordPress. Используя WPGraphQL, мы получаем:</p><ul><li>Гибкие запросы к таким сущностям, как посты, страницы, произвольным типам постов, таксономиям и пользователям.</li><li>Систему расширений которая позволяет расширять функционал GraphQL бекенда и таким образом поддерживать популярные плагины, тем самым позволяя возвращать дополнительные поля которые не относятся к стандартным полям Wordpress.</li><li>GraphQL API, который даёт очень удобный формат для интеграции фронтенд фреймворков таких как Next.js, Astro и SvelteKit.</li><li>Оптимизацию производительности, поскольку клиент запрашивает только нужные поля и данные делая один запрос вместо группы REST запросов + отдельный фронтенд забирает на себя часть запросов.</li></ul><p>В дополнение к доступному функционалу WPGraphQL можно добавлять дополнительные плагины-расширения, такие как <a href="https://wordpress.org/plugins/add-wpgraphql-seo/" rel="nofollow">WPGraphQL Yoast SEO</a> и <a href="https://woographql.com/" rel="nofollow">WooGraphQL</a> (WPGraphQL для WooCommerce). Таким образом добавив несколько плагинов в базовую инсталляцию CMS можно из коробки получить полностью функциональный GraphQL бекенд, который может покрыть запросы для блога, сео функционал, онлайн-магазин и тд.</p><p>Важно отметить, что изначальная идея использовать WPGraphQL пришла из статьи в блоге <a href="https://vercel.com/kb/guide/wordpress-with-vercel" rel="nofollow">Vercel</a>.</p><figure><img src="https://media.tproger.ru/user-uploads/136948/2026-03-25/838bc085-bfe5-4888-a326-6dcc00b0aaf5.webp" alt="Сравнение традиционного WordPress и headless WordPress: монолитная CMS с PHP темами против архитектуры с WPGraphQL API и Next.js фронтендом" /><figcaption>Традиционный WordPress vs Headless WordPress: разделение CMS и frontend через API (WPGraphQL + Next.js)</figcaption></figure><h2>Фронтенд на Next.js</h2><p><a href="https://nextjs.org/" rel="nofollow"> Next.js</a> - production-ready React-фреймворк, который разрабатывается компанией Vercel. Многие используют его по умолчанию для разных headless‑проектов. Наш пример headless-wordpress не исключение. Фреймворк предлагает удобную <a href="https://nextjs.org/docs/pages/building-your-application/routing" rel="nofollow">маршрутизацию</a> на базе файловой системы, где любой файл в папке pages автоматически становится маршрутом и поддерживает несколько стратегий рендеринга:</p><ul><li>Server‑side rendering (SSR) позволяет генерировать HTML при каждом запросе.</li><li>Статическая генерация (включая [Incremental Static Regeneration])</li><li>React Server Components, стратегия которая дает гибкость в балансировании производительности и кэширования.</li></ul><p>Это делает Next.js хорошей платформой для работы с GraphQL API и рендеринга страниц React‑компонентами. Если у вас нет опыта с <a href="http://nex.js">Next.js</a> и React, то это не повод не попробовать набросать POC в свободное время. Современные <a href="http://next.js">Next.js</a> и React templates + хороший AI agent помогут адаптировать UI под GraphQL для вас.</p><h2>Почему Cloudflare?</h2><p>Vercel очень часто является платформой по умолчанию для Next.js‑приложений. Более того Next.js адаптирован для запуска из коробки на серверах Vercel. При этом нужно добавить, что идея этой статьи не в том чтобы как-то компрометировать Vercel. Что же нужно знать про Cloudflare чтобы обратить внимание на этот сервис с точки зрения альтернативы для хостинга Next.js?</p><p>Согласно <a href="https://w3techs.com/technologies/details/cn-cloudflare" rel="nofollow">статистике</a>, реверс-прокси сервисы Cloudflare используются примерно на 21,9% всех сайтов в интернете, а это более 82% сайтов, где используется прокси‑сервисы в принципе. Такая распространённость говорит о масштабе, надежности и глобальном охвате сервиса. Но Cloudflare - это не только reverse-proxy. Компания разрабатывает целую группу облачных сервисов, включая такие сервисы, как Cloudflare Pages - альтернатива Github Pages, Workers - Serverless functions (по аналогии с AWS Lambda), Контейнеры, Очереди, AI сервисы, R2 Object Storage, и другие. В дополнение ко всему, компания предоставляет такие сервисы, как защита сайта (site-protection), VPN и капча (human-detection captcha). Такое разнообразие сервисов делает сервис очень распространенным.</p><h2>Лимиты бесплатного тарифа Cloudflare</h2><p>Одним из самых интересных аргументов в пользу Cloudflare можно считать их бесплатный тариф. Защита от DDoS, Universal SSL и глобальную CDN доступны бесплатно. Также бесплатный тариф включает большинство из вышеперечисленных облачных сервисов. Например, Cloudflare Workers, который можно использовать для хостинга Next.js-проектов, бесплатно даёт 100,000 запросов в день. Или R2 object storage - альтернатива S3 по умолчанию дает 10GB пространства, которое можно использовать для хранения статики или других данных. Этого более чем достаточно чтобы поэкспериментировать на выходных с новым стеком и вполне достаточно для того, чтобы бесплатно хостить ваш проект до тех пор пока у вас не пойдет серьезный трафик. Ниже приведена таблица с некоторыми из Cloudflare сервисов и что включено в бесплатный тариф.</p><figure><img src="https://media.tproger.ru/user-uploads/136948/2026-03-25/826d92c6-cecd-4d70-a2ee-78733a324a70.webp" alt="Таблица сервисов Cloudflare (Workers, KV, D1, R2 и др.) с лимитами бесплатного тарифа и их назначением" /><figcaption>Cloudflare free tier: сервисы и лимиты, достаточные для запуска headless WordPress + Next.js проекта. Взято с https://dev.to/ioniacob/which-cloudflare-services-are-free-2025-free-tier-guide-53jl.</figcaption></figure><h2>Запуск Serverless функций на edge-серверах</h2><p>Cloudflare Workers позволяют запускать серверлесс‑код по всей сети Cloudflare. Ниже приведено изображение показывающее как работает Edge CDN, когда например статика продублирована на все доступные сервера и таким образом пользователь получает ресурсы с самого близлежащего сервера.</p><figure><img src="https://media.tproger.ru/user-uploads/136948/2026-03-25/6c12d101-f282-4d1a-8d7a-b4119fabdfda.webp" alt="Схема работы CDN: пользователи обращаются к ближайшим edge-серверам, которые кешируют контент и уменьшают нагрузку на origin-сервер" /><figcaption>Как работает CDN: пользователь получает контент с ближайшего edge-сервера, снижая задержку и нагрузку на origin. Источник: https://www.cloudflare.com/learning/cdn/what-is-a-cdn/</figcaption></figure><p>Эта картинка хороша тем, что аналогично CDN статике на этих же серверах можно запускать и Workers (Lambda) функции, тем самым ускоряя вашу инфраструктуру еще больше.</p><p>Одной из интересных особенностей Workers-функций является отсутствие cold-starts. Любой cloud provider обычно подымает docker container или виртуализированное окружение в момент первого запуска программы, а это всегда задержка. Минусом Workers-функций является тот факт что их Runtime API требует чтобы код мог использовать их Web platform APIs. А это в свою очередь ограничивает выбор языка программирования: Javascript, Typescript и WebAssembly. Но благодаря такому подходу Workers используют изолированную модель запуска  и могут быть прогреты еще до момента запуска кода этого воркера. Прогрев начинается еще на этапе TLS-соединения между клиентом и серверами Cloudflare. Полный текст статьи можно почитать в их <a href="https://blog.cloudflare.com/eliminating-cold-starts-with-cloudflare-workers/" rel="nofollow">блоге</a>.</p><figure><img src="https://media.tproger.ru/user-uploads/136948/2026-03-25/4bcd2a0a-5161-46f5-984c-87f4097411dc.webp" alt="Схема работы Cloudflare Workers: прогрев (warmup) и загрузка воркера происходят во время TLS handshake до выполнения HTTP-запроса" /><figcaption>Как Cloudflare Workers устраняют cold-start: прогрев воркера происходит ещё на этапе TLS-соединения.</figcaption></figure><p>Воркеры выполняются на edge-серверах, которые находятся ближе всего к пользователям, тем самым уменьшая задержку и разгружая origin‑сервер (в нашем случае WordPress backend). По аналогии с другими cloud-провайдерами, код внутри Workers Runtime может использовать другие сервисы Cloudflare, такие как:</p><ul><li><a href="https://developers.cloudflare.com/workers/runtime-apis/cache/" rel="nofollow">Cache API</a> - позволяет читать и записывать данные в глобальный edge‑кэш через caches.default, что удобно для кэширования GraphQL‑ответов или страниц Next.js.</li><li><a href="https://developers.cloudflare.com/kv/" rel="nofollow">Workers KV</a> - распределенное key‑value‑хранилище для конфигурации и небольших наборов данных; можно хранить и получать данные глобально с низкой задержкой.</li><li><a href="https://developers.cloudflare.com/workers/configuration/cron-triggers/" rel="nofollow">Cron Triggers</a> - можно сопоставить cron‑выражение с обработчиком scheduled(), чтобы запускать периодические задачи, например, уборку кэша или обновление данных. Триггеры выполняются на малоиспользуемых машинах, максимизируя эффективность.</li></ul><p>Наличие доступа к дополнительным сервисам, таким как базы данных (D1), объектное хранилище (R2), очереди и AI даёт свободу строить более сложные и гибкие архитектуры, что очень полезно в дальнейшем на больших масштабах.</p><h2>OpenNext: мост между Next.js и Cloudflare</h2><p>Самостоятельный деплой Next.js на разные платформы непрост, поскольку среда исполнения Vercel отличается от других. Можно поднять Next.js на Node‑сервере, но его работа отличается от edge‑режима Vercel. OpenNext - это проект с открытым исходным кодом, который адаптирует Next.js для разных серверлесс‑платформ. Важно сказать что у Next.js нет нативного способа само разворачивания на других платформах, кроме Vercel; существующие отдельные адаптеры разрознены и сложны в поддержке. <a href="https://opennext.js.org/" rel="nofollow">OpenNext</a> объединяет усилия в одном адаптере, переводя выход сборки Next.js в формат, совместимый с основными облачными платформами. Проект поддерживают сообщество SST (AWS), команда Cloudflare и Netlify. Соответственно, с помощью OpenNext можно развернуть Next.js на Cloudflare Workers, сохраняя SSR, статическую генерацию и API‑маршруты.</p><p>Cloudflare‑адаптер устанавливается через @opennextjs/cloudflare. Далее следует установить<a href="https://developers.cloudflare.com/workers/wrangler/"> Wrangler</a>, настроить wrangler.toml с вашим Account ID и создать open-next.config.ts для управления кэшем и ассетами. Адаптер собирает приложение Next.js под среду Cloudflare, создает edge‑воркер и конфигурирует кэш для статики и ISR‑страниц (например, используя R2). После публикации Git‑интеграция Cloudflare автоматически разворачивает приложение при каждом пуше в GitHub или GitLab, а для pull‑request создает превью.</p><figure><img src="https://media.tproger.ru/user-uploads/136948/2026-03-25/ffd3d8f8-9e94-4ee2-b1b8-7b7d075a9bbd.webp" alt="Логотипы OpenNext, Cloudflare, AWS Amplify и Netlify, показывающие поддержку деплоя Next.js на разные cloud-платформы" /><figcaption>OpenNext как единый адаптер для деплоя Next.js приложений на разные платформы: Cloudflare, AWS и Netlify</figcaption></figure><h2>Кэширование и уровни производительности</h2><p>Архитектура headless WordPress + Next.js + Cloudflare обычно включает несколько уровней кэша:</p><ol><li>Кэш браузера - стандартный HTTP‑кэш на стороне клиента.</li><li>Кэш edge‑рантайма - Cache API Cloudflare Workers сохраняет HTML‑страницы или GraphQL‑ответы рядом с пользователем; при попадании в кэш контент отдаётся мгновенно, а промахи идут к воркеру или origin.</li><li>Кэш ISR Next.js - технология Incremental Static Regeneration сохраняет отрендеренные страницы на сервере и обновляет их по запросу, снижая нагрузку на WordPress API.</li><li>Кэш GraphQL - API WPGraphQL может реализовывать кэширование по времени или тегам (например, через WPGraphQL Smart Cache), чтобы управлять сроком жизни ответов.</li></ol><p>Эта многоуровневая иерархия кэша обеспечивает, что большинство запросов вообще не доходят до вашего WordPress‑сервера, повышая производительность и снижая нагрузку.</p><p>Пример конечной архитектуры показан на изображении ниже.</p><figure><img src="https://media.tproger.ru/user-uploads/136948/2026-03-25/37141150-e160-423b-a8cd-3784117e6499.webp" alt="" /><figcaption>Архитектура headless WordPress + Next.js на Cloudflare: edge-рендеринг, многоуровневый кэш и взаимодействие с WPGraphQL</figcaption></figure><h2>Автоматизация периодических задач</h2><p>Headless‑сайтам часто требуются периодические действия - например, обновление кэша ISR или синхронизация данных. Cron Triggers Cloudflare позволяют планировать запуск воркера по cron‑выражению. Обработчик scheduled() срабатывает по расписанию и подходит для обслуживания и получения сторонних данных. Триггеры выполняются на малоиспользуемых машинах по всему миру и легко управляются через Wrangler или панель Cloudflare.</p><h2>Модернизация PHP‑стека с Roots toolkit</h2><p>Хотя headless WordPress переносит рендеринг на JavaScript, CMS всё ещё нужно поддерживать. В качестве бонуса хочется порекомендовать экосистему <a href="https://roots.io/" rel="nofollow">Roots</a>, которая предлагает современный инструментарий для разработки на WordPress:</p><figure><img src="https://media.tproger.ru/user-uploads/136948/2026-03-25/27e070e5-39c8-425b-8142-b0b2ce0af69d.webp" alt="Скриншот сайта Roots с описанием инструментов для разработки WordPress: Bedrock, Sage, Trellis и Acorn" /><figcaption>Roots — современный инструментарй для разработки WordPress с использованием Composer, Blade и автоматизированного деплоя. Источник: Roots - https://roots.io/</figcaption></figure><ul><li><a href="https://roots.io/bedrock/" rel="nofollow">Bedrock</a> - шаблон WordPress, которая устанавливает ядро, плагины и темы через Composer. Таким образом Bedrock дает современную для PHP проектов структуру проекта, улучшает структуру папок, использует концепты Двенадцать факторов для конфигурации приложения с помощью .env‑файлы и тд. Более того, управление зависимостями через Composer повышает надежность и позволяет делать деплой приложения на разные сервера без страха что-то забыть или упустить.</li><li><a href="https://roots.io/sage/" rel="nofollow">Sage</a> - стартовая тема WordPress, использующая Blade от Laravel для шаблонов и интегрирующая Tailwind CSS. Sage автоматически генерирует theme.json из конфигурации Tailwind, поддерживает live preview блокового редактора с Vite и позволяет создавать компоненты на Blade. Это помогает фронтенд‑разработчикам отойти от устаревших подходов для разработки тем Wordpress с нуля.</li><li><a href="https://roots.io/trellis/" rel="nofollow">Trellis</a> - DevOps‑инструмент на базе Ansible, который поднимает серверы и автоматизирует деплой. Trellis предоставляет LEMP‑стек (Ubuntu 24.04, Nginx, PHP 8.3, MariaDB), выполняет деплой без downtimes и из коробки поддерживает SSL‑сертификаты. CLI помогает создавать и настраивать серверы, а также разворачивать проекты с атомарными релизами и откатами.</li><li><a href="https://roots.io/acorn/" rel="nofollow">Acorn</a> - интеграция, позволяющая использовать функционал Laravel в WordPress. С Acorn становятся доступны такие инструменты как Blade‑шаблоны, миграции, роутинг, кэширование и Artisan‑подобный CLI внутри WordPress. Это позволяет разработчикам строить плагины и фичи WordPress с использованием современных PHP‑подходов и современного фреймворка .</li></ul><p>Эти инструменты показывают, что экосистема WordPress продолжает развиваться и хорошо сочетается с современными подходами. Иными словами, WordPress - отличное решение, если знать, как его правильно готовить.</p><h2>Собираем всё вместе</h2><p>Архитектура приложения headless WordPress + Next.js + Cloudflare выглядит приблизительно так:</p><ol><li>WordPress (headless) - работает на традиционном сервере или в контейнере. Редакторы управляют контентом в админке. WPGraphQL и его расширения предоставляют GraphQL‑endpoint с данными, SEO и другой информацией, например данными о магазине.</li><li>Next.js фронтенд - React‑приложение, которое получает данные через GraphQL, рендерит страницы на сервере (SSR) или статически (ISR/SSG) и обрабатывает маршрутизацию и взаимодействие с клиентом. Код хранится в Git и автоматически разворачивается благодаря Git‑интеграции Cloudflare.</li><li>Cloudflare Workers - размещают приложение Next.js на edge через OpenNext. Workers исключают cold-starts и работают по аналогии с CDN как можно ближе к пользователю. Они также выполняют кэширование, обрабатывают API‑маршруты и запускают cron‑задачи.</li><li>Кэш на edge и в браузере - несколько уровней кэша гарантируют быструю отдачу статики и отрендеренных страниц. KV, R2 или D1 могут хранить дополнительные данные вроде сессий или объектов.</li></ol><h2>Заключение</h2><p>Headless‑архитектура объединяет универсальность WordPress и гибкость современных JavaScript‑фреймворков. Экспонируя контент через WPGraphQL и потребляя его в Next.js, можно получить больше контроля над рендерингом и тем самым улучшить производительность. Размещение фронтенда на Cloudflare Workers через OpenNext позволяет приблизить фронтенд код к пользователям, устраняет cold-starts, позволяет использовать free-tier и продвинутые уровни кэширования. Инструменты вроде Bedrock, Sage, Trellis и Acorn модернизируют PHP/Wordpress‑сторону и делают CMS такой же удобной в работе, как и современный Next.js/React-фронтенд. Вместе эти технологии создают мощный стек для создания быстрых, масштабируемых и безопасных сайтов, будь то хакатон, pet‑проект или серьёзный продакшн.</p>]]></content:encoded>
    </item>
    <item>
      <title>Типы языков программирования: от низкоуровневых до высокоуровневых — как выбрать для новичка</title>
      <link>https://tproger.ru/articles/tipy-yazykov-programmirovaniya--ot-nizkourovnevyh-do-vysokourovnevyh---kak-vybrat-dlya-novichka</link>
      <comments>https://tproger.ru/articles/tipy-yazykov-programmirovaniya--ot-nizkourovnevyh-do-vysokourovnevyh---kak-vybrat-dlya-novichka?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Татьяна Жукова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/tipy-yazykov-programmirovaniya--ot-nizkourovnevyh-do-vysokourovnevyh---kak-vybrat-dlya-novichka</guid>
      <description><![CDATA[<p>Выбираете первый язык программирования? Узнайте о низкоуровневых (C, C++), среднеуровневых (Java, C#) и высокоуровневых (Python, JavaScript) языках: плюсы, минусы и примеры применения. Чек-лист от экспертов поможет новичкам выбрать язык для веб, мобильной разработки или игр.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/tipy-yazykov-programmirovaniya--ot-nizkourovnevyh-do-vysokourovnevyh---kak-vybrat-dlya-novichka">Типы языков программирования: от низкоуровневых до высокоуровневых — как выбрать для новичка</a>»</p>]]></description>
      <category><![CDATA[Низкоуровневое программирование]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Производительность]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Ruby]]></category>
      <category><![CDATA[PHP]]></category>
      <category><![CDATA[.NET]]></category>
      <category><![CDATA[Windows]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[GitHub]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[TypeScript]]></category>
      <category><![CDATA[Xamarin]]></category>
      <category><![CDATA[Data Science]]></category>
      <category><![CDATA[Фронтенд]]></category>
      <category><![CDATA[QA]]></category>
      <category><![CDATA[Бэкенд]]></category>
      <category><![CDATA[Аналитика]]></category>
      <category><![CDATA[Приложение]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[Библиотеки]]></category>
      <category><![CDATA[Dart]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 28 Oct 2025 14:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Для погружения в программирование нужно всего 3 вещи:</p><ul><li>Решить, с какого языка/технологии вы хотите начать.</li><li>Решить, на каком ресурсе вы хотите обучаться.</li><li>Выделить время на само программирование.</li></ul><p>Звучит просто, однако у вас уйдёт много времени на исследования, чтобы решить, что вам подходит и на каком ресурсе обучаться.</p><p>Некоторые люди начинают с относительно низкоуровневого программирования на C и C++. Другие выбирают более традиционный путь, изучая Java или C#. Есть и те, кто начинает с высокоуровневых или скриптовых языков вроде Python, Ruby или JavaScript.</p><p>Мы классифицируем языки по уровню абстракции. Для новичков: низкоуровневые — как ручная сборка машины (контроль, но сложный); среднеуровневые — как готовый конструктор с инструкцией (сохраняем баланс); высокоуровневые — как приложение на смартфоне (быстро, но меньше контроля). Ниже разберём плюсы и минусы и поможем сделать правильный выбор.</p><h2>Низкоуровневые языки: близко к «железу»</h2><p>Это языки, где вы напрямую работаете с памятью компьютера. Нет автоматической уборки ненужных данных, <b>всё под вашим контролем</b>. Подходят для системного ПО, игр или устройств (например, микроконтроллеров).</p><p>Примеры: C (для ОС вроде Linux), C++ (для игр на движке вроде Unreal Engine), Assembler (для оптимизации критических частей кода).</p><p><b>Плюсы:</b></p><ul><li>Полный контроль: вы решаете, как использовать ресурсы. Так, в C++ можно вручную выделять память для массивов, избегая ненужных копий данных.</li><li>Высокая скорость: прямой доступ к памяти позволяет писать код, который работает быстрее (это важно для работы с играми или серверами).</li><li>Основы основ: такие языки учат, как компьютер работает изнутри, чтобы в будущем ценить удобства других языков. Например, вы узнаёте, почему «утечка памяти» — это проблема.</li><li>Эффективность: низкоуровневые языки мотивируют думать об оптимизации заранее, снижая расход батареи или CPU.</li><li>Компактность: минимальная библиотека, приложения получаются лёгкими (идеально для embedded-систем, как в IoT-устройствах).</li></ul><p>Минусы:</p><ul><li>Всё-таки это сложно: рутинные задачи (например, чтение файла) требуют больше кода и внимания к деталям, рискуя ошибками вроде переполненного буфера.</li><li>Ручное управление памятью: можно легко «забыть» освободить память, вызвав утечки или краши. Например, в C нужно использовать malloc/free, иначе программа съест всю RAM.</li><li>Много копипасты: придётся писать шаблонный код, и делать это часто.</li><li>Платформо-зависимость: код для Windows может не работать на Linux без правок.</li></ul><h2>Среднеуровневые языки: баланс контроля и удобства</h2><p>Эти языки предлагают готовые инструменты, упрощающие работу, но требуют строгой проверки типов данных. Для их запуска нужна специальная программа (среда выполнения). Они идеальны для приложений, серверов и игр.</p><p>Примеры: Java (для Android-приложений), C# (для Unity-игр или .NET-серверов).</p><p>Плюсы:</p><ul><li>Автоматическая память: память очищается автоматически благодаря сборщику мусора, что избавляет от ручной работы и снижает вероятность ошибок, вроде утечек памяти в больших проектах. При этом можно получить доступ к низкоуровневым функциям для особых задач, например, через специальные инструменты в Java.</li><li>Богатые библиотеки: готовые инструменты для сетей, GUI или баз данных. Пример: Java’s Spring для веб-серверов.</li><li>Кроссплатформенность: компиляция в байт-код (JVM для Java) позволяет запускать код везде. Например, пишешь на Windows, запускаешь на Linux.</li><li>Безопасность: язык проверяет типы данных перед запуском программы, помогая заранее найти ошибки. Среда выполнения защищает от опасных сбоев, например, от переполненной памяти.</li><li>Масштабируемость: встроенные инструменты для параллельных вычислений позволяют легко создавать программы, которые одновременно выполняют много задач (серверы для тысяч пользователей и т.п.).</li></ul><p>Минусы:</p><ul><li>Дополнительная нагрузка от рантайма: Среда выполнения и автоматическая очистка памяти создают дополнительную нагрузку. Сборщик мусора может ненадолго останавливать программу, что заметно в играх или при обработке видео.</li><li>Меньше контроля: абстракции скрывают детали памяти, усложняя оптимизацию (например, в Java сложно избежать боксинга примитивов).</li><li>Повторяющийся код, которого много: приходится писать повторяющийся код и тренировать свою усидчивость, например, для доступа к данным объекта. Кстати, инструменты вроде Lombok могут упростить эту задачу.</li><li>Зависимость от среды: для запуска программ нужна специальная среда (например, JVM для Java), что влияет на размер программ и замедляет их старт.</li><li>Сложность интеграции: подключение кода на других языках, например, на C, требует писать специальные обёртки, что усложняет работу и снижает скорость.</li></ul><h2>Высокоуровневые языки: удобство и скорость разработки</h2><p>Эти языки скрывают технические детали, позволяя сосредоточиться на создании <b>логики программы</b>. Подходят для веба, data science или скриптов.</p><p>Примеры: Python (для ML), Ruby (для веб-разработки), JavaScript (для фронтенда).</p><p>Плюсы:</p><ul><li>Простота: сложные задачи решаются в пару строк. Так, в JS async/await упрощает API-запросы.</li><li>Быстрая разработка: динамическая типизация позволяет быстро писать и тестировать код без необходимости его компиляции.</li><li>Богатые экосистемы: есть библиотеки для всего (к примеру, NumPy для данных в Python).</li><li>Гибкость: легко менять код, идеально для прототипов или стартапов.</li></ul><p>Минусы:</p><ul><li>Низкая производительность: абстракции добавляют нагрузки. Например, циклы в Python медленнее, чем в C.</li><li>Ошибки на рантайме: из-за слабой типизации ошибки выявляются только при запуске программы, что усложняет отладку.</li><li>Риск «спагетти-кода»: лёгкость изменений может привести к хаосу без дисциплины.</li><li>Скрытые проблемы: абстракции маскируют баги.</li><li>Зависимость от интерпретатора: программы требуют установленного интерпретатора, что замедляет их запуск и добавляет зависимость от дополнительного ПО.</li></ul><h2>Чек-лист: как выбрать язык программирования для новичка</h2><p>Этот чек-лист основан на советах экспертов, чтобы помочь новичкам выбрать первый язык программирования. Каждый пункт включает конкретные рекомендации.</p><ol><li><b>Определите, что вас вдохновляет, и выберите сферу.</b> Подумайте, что вы хотите создавать: сайты, игры, мобильные приложения или серверы. Разные сферы требуют разных языков. Например, для веб-разработки подойдут JavaScript или Python, для мобильных приложений — Java, Kotlin, Swift или Dart, а для игр — C# или C++. Составьте список идей (например, сайт-визитка, игра, аналитика данных) и найдите, какие языки для них используют. <br />— Аня Жаркова, руководитель мобильной разработки в USETECH</li><li><b>Ищите язык с широким применением.</b> Выбирайте языки, которые используются в разных областях, чтобы легче переключаться между задачами. Например, Kotlin подходит для мобильной разработки, веба и серверов, а C# — для десктоп-приложений, игр (Unity) и бэкенда. Это даёт гибкость и упрощает изучение новых языков в будущем.<br />— Аня Жаркова, руководитель мобильной разработки в USETECH</li><li><b>Проверьте спрос на рынке труда. </b>Если цель — смена профессии, изучите вакансии на HH.ru или LinkedIn. Введите «junior Python», «junior Java» и сравните, где больше предложений и какие требования. Избегайте языков с низким спросом, если хотите быстро найти работу. Например, Java, Kotlin, Python и JavaScript популярны для найма.<br />— Владислав Масунов, Head of Development</li><li><b>Опробуйте языки на практике.</b> Напишите простые программы (например, "Hello World" или калькулятор) на нескольких языках, чтобы понять, какой синтаксис вам ближе. Используйте онлайн-редакторы вроде Replit или CodePen. Например, попробуйте TypeScript для веба (он поддерживает типизацию и разные подходы к программированию) или C++ для понимания работы с памятью. Это поможет почувствовать, к чему лежит душа.<br />— Рома Троицкий, фронтенд-инженер в Сбер B2C, член ПК HolyJS &amp; MoscowCSS; Евгений Антонов, ИТ-консультант, автор тг-канала <a href="https://t.me/general_it_talks">@general_it_talks</a></li><li><b>Выберите язык с хорошей документацией и сообществом.</b> Убедитесь, что у языка много обучающих материалов и активное сообщество. Например, TypeScript имеет богатую документацию и поддержку, что упрощает старт. Проверьте ресурсы вроде LearnPython.org, freeCodeCamp для JavaScript или Telegram-чаты для C++. Это поможет быстрее решать вопросы.<br />— Рома Троицкий, фронтенд-инженер в Сбер B2C, член ПК HolyJS &amp; MoscowCSS</li><li><b>Учитывайте сложность и карьерные цели.</b> Для небольших проектов или быстрого старта берите Python или PHP — они проще и подходят для веб-разработки или скриптов. Для сложных задач с высокой нагрузкой (например, серверы или оптимизация) попробуйте C++ или Go. Если цель — работа в крупных компаниях, Java и Kotlin востребованы и часто используются с ИИ-инструментами. Выбирайте, исходя из сложности и ваших амбиций.<br />— Евгений Антонов, ИТ-консультант, автор тг-канала <a href="https://t.me/general_it_talks">@general_it_talks</a></li><li><b>Смотрите на универсальность и переход к другим языкам. </b>Выбирайте язык, который учит основам программирования и упрощает переход к другим. Например, изучение C# может помочь освоить Java, а затем — Android-разработку. TypeScript учит объектно-ориентированному и функциональному программированию, что полезно для разных задач. Это создаёт базу для дальнейшего роста.<br />— Аня Жаркова, руководитель мобильной разработки в USETECH; Рома Троицкий, фронтенд-инженер в Сбер B2C, член ПК HolyJS &amp; MoscowCSS</li><li><b>Не гонитесь за гилти плежа.</b> Избегайте языков, которые изучают «для удовольствия» без практического применения. Выбирайте те, которые можно применить в реальных проектах или которые востребованы в индустрии. Например, вместо нишевых языков берите Python, Java или Kotlin: они имеют чёткие сценарии использования.<br />— Аня Жаркова, руководитель мобильной разработки в USETECH</li><li><b>Практикуйтесь с ИИ-инструментами.</b> Если хотите работать в крупных компаниях, освойте язык, который хорошо сочетается с ИИ-инструментами (например, Go или Java). Практикуйтесь с ИИ-агентами по типу GitHub Copilot для автоматизации задач — это ценится работодателями.<br />— Евгений Антонов, ИТ-консультант, автор тг-канала <a href="https://t.me/general_it_talks">@general_it_talks</a></li><li><b>Составьте план развития.</b> Создайте roadmap: определите, какие проекты хотите делать через 3-6 месяцев (например, мобильное приложение или веб-сервис), и подберите язык под эти цели. Если выбрали C#, начните с десктоп-приложений, затем попробуйте Xamarin для кроссплатформенной разработки. Постепенно добавляйте новые языки, опираясь на первый.<br />— Аня Жаркова, руководитель мобильной разработки в USETECH</li></ol><p>Если не определились, предлагаем пройти квиз и расставить всё по полочкам:</p>]]></content:encoded>
    </item>
    <item>
      <title>5 сервисов для мониторинга всех метрик инфраструктуры</title>
      <link>https://tproger.ru/articles/5-servisov-dlya-monitoringa-vseh-metrik-infrastruktury</link>
      <comments>https://tproger.ru/articles/5-servisov-dlya-monitoringa-vseh-metrik-infrastruktury?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Татьяна Жукова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/5-servisov-dlya-monitoringa-vseh-metrik-infrastruktury</guid>
      <description><![CDATA[<p>Подборка сервисов для мониторинга метрик инфраструктуры: инструменты, которые позволяют отслеживать состояние систем в реальном времени и предотвращать сбои.
</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/5-servisov-dlya-monitoringa-vseh-metrik-infrastruktury">5 сервисов для мониторинга всех метрик инфраструктуры</a>»</p>]]></description>
      <category><![CDATA[Интернет]]></category>
      <category><![CDATA[API]]></category>
      <category><![CDATA[Linux]]></category>
      <category><![CDATA[Open Source]]></category>
      <category><![CDATA[Оптимизация]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[PHP]]></category>
      <category><![CDATA[DevOps]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[Oracle]]></category>
      <category><![CDATA[Сервисы]]></category>
      <category><![CDATA[Docker]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[Kubernetes]]></category>
      <category><![CDATA[Grafana]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 19 Sep 2025 12:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Инфраструктура редко падает внезапно — почти всегда система заранее подает сигналы: растет нагрузка, замедляются запросы, перегреваются ресурсы. Чтобы не ловить проблемы по факту, а управлять ими заранее, нужны сервисы, которые собирают и визуализируют метрики в реальном времени. В этой подборке мы собрали инструменты, которые помогают держать руку на пульсе всей инфраструктуры и принимать решения на основе данных, а не догадок.</p><h2>1. 10-Страйк: Мониторинг Сети Pro</h2><p><a href="https://www.10-strike.ru/network-monitor/">10-Страйк: Мониторинг Сети Pro</a> — это российская программа для системных администраторов, которая позволяет контролировать состояние сетевых устройств, серверов, рабочих станций, коммутаторов, баз данных и других ресурсов инфраструктуры. Она отслеживает ключевые параметры — от свободного места на дисках и загрузки процессора до температуры оборудования — и в случае проблем отправляет уведомления по email, SMS или в мессенджеры. Система может не только сигнализировать о сбоях, но и автоматически устранять их, например, перезапуская службы или выполняя скрипты.</p><h3>Технические возможности</h3><p>Продукт поддерживает десятки видов сетевых проверок через ICMP, SNMP, HTTP, SQL, SSH и другие протоколы. Возможно мониторить серверы Windows и Linux, сетевые службы, видеокамеры, принтеры, СУБД и промышленное оборудование. Визуализация данных доступна на карте сети с графиками и индикаторами. В версии Pro предусмотрен распределённый мониторинг с несколькими серверами и аген­тами, а также веб-интерфейс для удалённого управления.</p><h3>Сценарии использования</h3><p>Для DevOps и системных администраторов 10-Страйк подходит как инструмент централизованного мониторинга с алертами и картой сети. IT-отделы предприятий используют его для контроля доступности каналов связи, серверов, баз данных и устройств. Руководители могут формировать отчёты по аптайму и SLA для анализа стабильности работы инфраструктуры.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-09-18/5654eec1-f0ae-4170-aa26-922420d13f4e.png" alt="" /></figure><h3>Особенности</h3><p>Программа выделяется простотой настройки проверок, наличием наглядной карты сети и гибкой системой сигнализации. Важное преимущество — возможность распределённого мониторинга в удалённых сетях и работы в круглосуточном режиме без участия администратора. Решение разработано в России и подходит под задачи импортозамещения.</p><h3>Тарифы и условия</h3><p>Продукт распространяется по лицензии с ограничением на число сенсоров: версия Pro на 100 сенсоров стоит 40 000 рублей, стандартная версия — 20 000 рублей. Для корпоративных лицензий действует ограничение на количество серверов мониторинга.</p><h2>2. Deckhouse Prom++</h2><p><a href="https://deckhouse.ru/products/prompp/?utm_source=web&amp;utm_medium=tproger&amp;utm_campaign=monitoring">Deckhouse Prom++ </a>— это Open Source-система мониторинга на базе Prometheus, которая потребляет до 10 раз меньше памяти. Она собирает метрики приложений, сервисов и инфраструктуры в реальном времени, хранит их во встроенной TSDB и поддерживает PromQL для анализа. Deckhouse Prom++ умеет формировать алерты и легко интегрируется с Grafana, оставаясь привычным для команд, которые уже работают с Prometheus.</p><h3>Технические возможности</h3><p>Deckhouse Prom++ может собирать любые инфраструктурные метрики напрямую или через экспортеры: состояние серверов, контейнеров, сетей, баз данных и приложений. Главная оптимизация по сравнению с «ванильным» Prometheus — переработка Write Ahead Log — позволяет снизить потребление памяти без ущерба производительности. Продукт полностью совместим с API и настройками Prometheus: дашборды, правила алертинга и интеграции продолжают работать без изменений. Prom++ уже используется на более чем 1000 кластеров и поддерживает до 10 млн активных метрик на кластер.</p><h3>Сценарии использования</h3><p>DevOps-инженеры и SRE могут использовать Deckhouse Prom++ для мониторинга Kubernetes и традиционной инфраструктуры. Архитекторы и CTO получают возможность сократить расходы на RAM без отказа от привычной экосистемы. Prom++ подходит и для on-prem, и для облачных окружений, а также уже встроен в Deckhouse Kubernetes Platform.</p><h3>Особенности</h3><p>Ключевое преимущество Deckhouse Prom++ — низкое потребление ресурсов: до 10 раз меньше памяти, чем у Prometheus, и до 3 раз меньше, чем у VictoriaMetrics. Сервис полностью совместим с экосистемой Prometheus, не создаёт вендорлока и распространяется под лицензией Apache 2.0. Поддержка осуществляется инженерами Deckhouse и сообществом через открытый Telegram-чат.</p><h3>Тарифы и условия</h3><p>Deckhouse Prom++ — полностью бесплатный Open Source-продукт. Ограничений по количеству пользователей или метрик нет.</p><p>Есть <a href="https://github.com/deckhouse/prompp/?tab=readme-ov-file#migrating-from-prometheus">инструкция по миграции</a>, потребуется только предварительная конвертация WAL-файлов. Вы также сможете без труда вернуться с Deckhouse Prom++ на Prometheus.</p><p>Инженеры Deckhouse и сообщество помогают пользователям в Telegram-чате <a href="https://t.me/+rj_YQgUQbY1lNmIy">Prom++ User Group</a>.</p><h2>3. GMONIT</h2><p><a href="https://gmonit.ru/cio/?utm_source=PR&amp;utm_medium=globalcio&amp;utm_campaign=CIO">GMONIT </a>— российская платформа класса Observability, которая собирает и анализирует метрики, логи, трассировки и бизнес-показатели в едином интерфейсе. Она даёт ИТ-командам полный обзор цифрового контура: от сетей, серверов, баз данных и контейнеров до пользовательских действий и бизнес-метрик. GMONIT помогает перейти от «реактивного» реагирования на инциденты к проактивному управлению ИТ, сокращая время диагностики и повышая стабильность сервисов.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-10-28/a6f2924b-7955-4982-9985-c4e4fc89bd88.png" alt="" /></figure><h3>Технические возможности</h3><p>GMONIT поддерживает мониторинг сетей, серверов, виртуальных машин, баз данных, контейнеров, API, реальных пользователей в браузере или мобильном приложении и бизнес-процессов. Система строится на микросервисной архитектуре, легко масштабируется и формирует дашборды для разных ролей — от инженеров до CIO. В одном интерфейсе доступны ключевые показатели доступности, SLA, конверсии, скорость обработки заказов и другие бизнес-метрики. Платформа обеспечивает предиктивную аналитику, раннее выявление аномалий и ускоренное RCA (Root Cause Analysis — анализ первопричин): TTD (Time To Detect — время до обнаружения) — менее 10 минут, RCA — около 15 минут.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-10-28/71bdfc71-5ed6-43b1-959e-78a2dbd1f61a.png" alt="" /></figure><h3>Сценарии использования</h3><ul><li>Разработчики используют GMONIT для отладки сервисов и мониторинга CI/CD, что ускоряет релизы и сокращает время устранения ошибок.</li><li>QA-команды применяют платформу при нагрузочных тестах и фиксации ошибок в продакшене.</li><li>DevOps и SRE получают централизованный мониторинг с алертами, предиктивной аналитикой и интеграцией в пайплайны.</li><li>PM и CIO работают с визуальными панелями SLA, аптайма и бизнес-метрик, чтобы видеть реальное влияние инфраструктуры на продажи и пользовательский опыт.</li><li>Поддержка сокращает время реакции на инциденты и устраняет сбои до того, как о них сообщают пользователи.</li></ul><h3>Особенности</h3><p>GMONIT строится как масштабируемая система с единым «окном наблюдения»: метрики инфраструктуры, пользовательского опыта в браузере, приложений, API; а также вызовы во внешние сервисы и бизнес-процессы отображаются на одном дашборде. Архитектура ориентирована на работу с большими объёмами данных, а визуализация адаптирована как под инженеров, так и под управленцев. Сервис интегрируется с CI/CD, мессенджерами и сторонними системами через API. Поддерживаются как on-prem, так и облачные сценарии.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-10-28/aba0df2d-17c7-4249-9a0b-88337d507985.png" alt="" /></figure><h3>Тарифы и условия</h3><p>Информацию о тарифах можно найти на<a href="https://gmonit.ru/prices"> официальном сайте GMONIT</a>. Ограничений по числу пользователей и метрик нет. API и SDK доступны, а интеграции гибко настраиваются под нужды заказчика.</p><h3>Управление и поддержка</h3><p>Управление осуществляется через веб-интерфейс и API. Поддержка организована через чат, систему тикетов, SLA и подробную документацию.</p><h2>4. Zabbix</h2><p><a href="https://www.zabbix.com/">Zabbix</a> — это платформа мониторинга корпоративного уровня, которая обеспечивает полную наблюдаемость IT- и OT-инфраструктуры. Решение ориентировано на крупные компании и поставщиков управляемых услуг, отличается низкой совокупной стоимостью владения и предсказуемой моделью поддержки без лицензионных сборов. Zabbix создан для долгосрочного использования: он масштабируем, безопасен «по конструкции» и подходит для критически важных систем.</p><h3>Технические возможности</h3><p>Платформа поддерживает мониторинг серверов, приложений, облачных сервисов, сетевых устройств и IoT, включая многоуровневые среды. Важной функцией выступает вложенное низкоуровневое обнаружение, позволяющее автоматически создавать иерархические правила для хостов и сервисов. Zabbix предлагает мастер создания хостов, встроенную проверку форм для сокращения ошибок, расширенные сетевые карты и новый виджет карточки товара для детальной визуализации метрик. Платформа может быть развернута локально, в облаке Zabbix или в сторонних облаках (AWS, Azure, Google Cloud).</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-09-18/073c838d-dc16-44ac-a912-5e51b1b9e8d5.png" alt="" /><figcaption>Панель управления Azure</figcaption></figure><h3>Сценарии использования</h3><p>Zabbix применяют IT-отделы и DevOps-команды для централизованного мониторинга инфраструктуры и соответствия требованиям безопасности. Поставщики управляемых услуг используют его как MSP-дружественное решение с многопользовательским доступом и возможностью масштабирования под клиентов. Платформа востребована в высокозащищённых и регулируемых отраслях, где важны автономность и полный контроль над данными.</p><h3>Особенности</h3><p>Ключевые преимущества Zabbix — это открытый исходный код и отсутствие лицензионных ограничений. Архитектура платформы масштабируется «под будущее» и интегрируется с системами управления конфигурацией. Пользователи получают полное владение данными, гибкость в развертывании (on-premise, облако, гибрид) и широкие возможности кастомизации визуализации.</p><h3>Тарифы и условия</h3><p>Zabbix распространяется как решение с открытым исходным кодом и не требует лицензионных платежей. Стоимость формируется только за счет технической поддержки, которая предоставляется по фиксированным тарифам в зависимости от уровня сервиса.</p><h2>5. LibreNMS</h2><p><a href="https://www.librenms.org/">LibreNMS</a> — это система мониторинга сетевой инфраструктуры с автоматическим обнаружением устройств и сервисов. Она ориентирована прежде всего на мониторинг сетей по SNMP, но также поддерживает серверы на Windows, Linux и FreeBSD через собственные агенты. Решение работает на базе PHP и MySQL, имеет удобный веб-интерфейс, мобильные приложения и широкий набор встроенных метрик, которые не требуют ручной настройки.</p><h3>Технические возможности</h3><p>Система автоматически обнаруживает топологию сети с помощью протоколов CDP, FDP, LLDP, OSPF, BGP, SNMP и ARP. Поддерживается интеграция с NfSen, collectd, SmokePing, RANCID и Oxidized. Встроенный API позволяет управлять установкой, строить графики и выгружать данные. Реализована гибкая система оповещений с поддержкой email, IRC, Slack и других сервисов, а также встроенная биллинговая система для учета использования полосы пропускания. LibreNMS поддерживает различные методы аутентификации, включая LDAP, Radius и Active Directory, и обновляется автоматически.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-09-18/7d288b2e-8981-40f2-9ae2-3624f57392e0.png" alt="" /></figure><h3>Сценарии использования</h3><p>LibreNMS выбирают компании, которым важно быстрое развертывание мониторинга сети без сложной ручной настройки. Решение подходит интернет-провайдерам и корпоративным IT-отделам для учета трафика и выставления счетов, а также администраторам, которым нужен автоматический контроль устройств и серверов с оповещениями в удобных каналах. Благодаря мобильным приложениям и демо-версии система подходит для тестирования и удаленной работы.</p><h3>Особенности</h3><p>Ключевыми преимуществами LibreNMS выступают простота запуска и поддержка практически всех популярных сетевых устройств «из коробки». Автоматическое обнаружение и распределенный опрос упрощают масштабирование, а встроенный биллинг и интеграции делают систему полезной не только для мониторинга, но и для коммерческих задач.</p><h3>Тарифы и условия</h3><p>LibreNMS распространяется как проект с открытым исходным кодом и бесплатен для использования. Доступна онлайн-демонстрация (<a href="https://demo.librenms.org">https://demo.librenms.org</a>, логин: demo, пароль: demouser).</p>]]></content:encoded>
    </item>
    <item>
      <title>5 VPS-хостингов в 2025, которые держат нагрузку: кейсы, стоимость, метрики</title>
      <link>https://tproger.ru/articles/5-vps-hostingov-v-2025--kotorye-derzhat-nagruzku--kejsy--stoimost--metriki</link>
      <comments>https://tproger.ru/articles/5-vps-hostingov-v-2025--kotorye-derzhat-nagruzku--kejsy--stoimost--metriki?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Валерия Турчак]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/5-vps-hostingov-v-2025--kotorye-derzhat-nagruzku--kejsy--stoimost--metriki</guid>
      <description><![CDATA[<p>Сравниваем 5 VPS-провайдеров, которые стабильно работают под нагрузкой в 2025 году. Разбираем стоимость, примеры использования, производительность и uptime. </p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/5-vps-hostingov-v-2025--kotorye-derzhat-nagruzku--kejsy--stoimost--metriki">5 VPS-хостингов в 2025, которые держат нагрузку: кейсы, стоимость, метрики</a>»</p>]]></description>
      <category><![CDATA[Интернет]]></category>
      <category><![CDATA[API]]></category>
      <category><![CDATA[Linux]]></category>
      <category><![CDATA[Git]]></category>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[Производительность]]></category>
      <category><![CDATA[Опрос]]></category>
      <category><![CDATA[MySQL]]></category>
      <category><![CDATA[Быстрый старт]]></category>
      <category><![CDATA[PHP]]></category>
      <category><![CDATA[SQL]]></category>
      <category><![CDATA[Windows]]></category>
      <category><![CDATA[iOS]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Node.js]]></category>
      <category><![CDATA[ВКонтакте]]></category>
      <category><![CDATA[HR]]></category>
      <category><![CDATA[VPN]]></category>
      <category><![CDATA[Django]]></category>
      <category><![CDATA[GitLab]]></category>
      <category><![CDATA[Сервисы]]></category>
      <category><![CDATA[Docker]]></category>
      <category><![CDATA[Intel]]></category>
      <category><![CDATA[Windows Server]]></category>
      <category><![CDATA[Образование]]></category>
      <category><![CDATA[Маркетинг]]></category>
      <category><![CDATA[QA]]></category>
      <category><![CDATA[Техподдержка]]></category>
      <category><![CDATA[Бэкенд]]></category>
      <category><![CDATA[AMD]]></category>
      <category><![CDATA[Игра]]></category>
      <category><![CDATA[Дата-центр]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[1C]]></category>
      <category><![CDATA[Бизнес]]></category>
      <category><![CDATA[VPS]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 05 Aug 2025 06:10:17 GMT</pubDate>
      <content:encoded><![CDATA[<p>В 2025 году выбирать VPS по принципу дешево и сердито уже не работает. Любой рабочий или MVP-проект — от API для мобильного приложения до интернет-магазина  сталкивается с пиками нагрузки, которые нужно выдержать. Ошибки на старте обходятся дороже простоя в продакшне.</p><p>Собрали пять VPS-хостингов, которые показывают, как должны выглядеть выжившие серверы под нагрузкой: современное железо, каналы без счётчиков трафика, живая поддержка инженеров и опыт клиентов. Ниже — конфигурации, цены и метрики, чтобы вы подобрали сервер под свой сценарий.</p><h2>1. ИХЦ (Интернет ХостингЦентр): конфигурации под нагрузку с NVMe, CPU до 5 ГГц и трафиком без ограничений</h2><p>Один из самых гибких по конфигурациям хостеров в обзоре. Работает с 2009 года. Поддерживает разные типы виртуализации (KVM и Virtuozzo), предлагает линейки с SSD и NVMe, российские и европейские площадки, разные уровни мощности — от базовых до высоконагруженных.</p><h3>Линейки VPS и конфигурации</h3><ol><li>ssdVPS — базовая линейка для России. Позволяет собирать конфигурации от 1 до 32 ГБ оперативной памяти, от 1 до 10 виртуальных CPU и от 20 до 300 ГБ SSD-диска.</li><li>NVMe/ — линейка на базе KVM с более высокой производительностью ввода-вывода. Доступны конфигурации от 1 до 24 ГБ RAM, от 1 до 12 vCPU, SSD от 15 до 300 ГБ.</li><li>EU-NVMe/ — аналог NVMe-линейки, но размещённый в Амстердаме. Конфигурации расширены: от 1 до 64 ГБ оперативной памяти, от 1 до 18 CPU, от 15 до 1000 ГБ SSD, скорость порта — от 200 до 500 Мбит/с.</li><li>VPS 5 ГГц — отдельная линейка на KVM, ориентированная на проекты с высокой частотной нагрузкой, до 5 ГГц на ядро, порт до 1000 Мбит/с.</li></ol><p>VPS Windows — выделенная категория для задач на Windows.</p><h3>Особенности и инфраструктура</h3><p>В <a href="https://www.ihc.ru/vps.html">ИХЦ</a> можно выбрать между двумя видами виртуализации: <b>KVM</b> и <b>Virtuozzo</b>. Виртуализация KVM подходит для задач, где нужна изоляция ресурсов, стабильность под нагрузкой и совместимость с Linux и Windows. Virtuozzo — более экономный вариант с быстрой настройкой, но с возможной перераспределённой нагрузкой между соседними VPS.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-07-31/d8f9548f-7bd8-4eef-a4aa-6d50b0e424a2.png" alt="" /><figcaption>Дата-центры провайдера есть в Москве и Амстердаме.</figcaption></figure><p>Связь с поддержкой доступна через тикеты, онлайн-чат на сайте, телеграм-бота, телефон и сообщения ВКонтакте. Поддержка работает 24/7. На всех тарифах включена базовая <b>DDoS-защита</b>.</p><h3>Примеры использования VPS от IHC</h3><p>Компания предоставляет конкретные кейсы. Примеры:</p><ul><li>Проект 1: VPS NVMe/24 (24 ГБ RAM, ~200 ГБ SSD) используется под бэкенд iOS-приложения. Стек: nginx, PHP, MySQL. Нагрузка: 12 000 уникальных пользователей в сутки. Утилизация CPU — 25%.</li><li>Проект 2: VPS NVMe/12 (12 ГБ RAM, ~120 ГБ SSD) для развлекательного сайта. Стек: nginx, Docker, Node.js. Нагрузка: 7 000 уникальных пользователей в сутки, загрузка CPU — около 20%.</li></ul><p>Серверы стабильно держат среднюю и высокую нагрузку — даже с трафиком в 10–12 тысяч пользователей в сутки остаётся запас по ресурсам.</p><h3>Дополнительные опции</h3><p>ИХЦ предлагает <b>тестовый период в 3 дня</b>, <b>безлимитный трафик</b>, <b>бесплатный первый месяц ispmanager 6</b> в подарок, а также предустановку панелей управления (ispmanager, FastPanel) или VPN-шаблонов по выбору при заказе. Также доступны бэкапы, SLA и автоснапшоты.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-07-31/e5730a1c-375b-4b91-a238-6a52a51df67a.png" alt="" /></figure><h3>Цены</h3><p>Что касается ценовой политики, стоимость VPS в России (линейка «ssdVPS») начинается <b>от 380 руб/мес</b> или 3800 руб/год (12 месяцев по цене 10). Европейские VPS («EU-NVMe/») и VPS на KVM («NVMe/») стартуют <b>от 440 руб/мес</b> или 4400 руб/год, а каждый дополнительный гигабайт памяти стоит 6 рублей.</p><h2>2. FirstVDS: мощные VDS на AMD EPYC и Ryzen</h2><p><a href="https://firstvds.ru/">FirstVDS</a> — хостинг-провайдер с опытом на рынке более 20 лет. Предлагают VPS и VDS с виртуализацией KVM для проектов любого размера. Все серверы работают на современном оборудовании. Трижды победитель в номинации «Хостер года» Национальной премии «ЦОДы.РФ».</p><p>Есть VPS для разных сценариев нагрузки — от стандартных сайтов до тяжёлых веб-приложений и проектов с высокими требованиями к CPU и отказоустойчивости. Отдельные решения для Битрикс, установка ОС семейства Linux, FreeBSD и Windows Server.</p><h3>Линейки VPS: от базовой мощности до кластера Ceph</h3><p>FirstVDS предлагает три основные линейки, которые отличаются архитектурой и назначением:</p><ol><li>VDS Форсаж — гибкая конфигурация сервера на базе AMD EPYC, до 128 ядер (до 3,7 ГГц), до 512 Гб оперативной памяти и до 4 000 Гб быстрого NVMe-накопителя. Локации Москва и Амстердам. Стартовая стоимость такой конфигурации составляет от 749 руб/мес.</li><li>Для нагруженных проектов — CPU.Турбо — гибкая конфигурация сервера на базе AMD Ryzen с частотой до 5,7 ГГц, DDR5 и с быстрыми NVMe-накопителями. Идеально для Битрикс. Локация Москва. Начальная цена CPU.Турбо — от 624 руб/мес. При покупке лицензии Битрикс (1С-Битрикс: Управление сайтом или Битрикс24) есть дополнительная скидка 30% на 3 месяца аренды этого тарифа.</li><li>Отказоустойчивый VDS Атлант — гибкая конфигурация сервера на базе AMD EPYC — до 192 ядер (до 3,5 ГГц), до 768 Гб оперативной памяти и до 8 Тб быстрого NVMe-накопителя. Репликация данных между узлами кластера Ceph и дублирование сетевого оборудования. Локация Москва. Его стартовая стоимость от 1619 руб/мес, при этом бесплатные автобэкапы уже включены.</li></ol><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-07-31/3490237d-3e99-49c5-9d90-10e3849765ed.png" alt="" /></figure><p>Компания использует два центра обработки данных в <b>Москве</b>: <b>IXcellerate (уровень Tier III)</b> и Web DC. Для тарифа Форсаж и готовых тарифов также доступен ЦОД <b>euNetworks (уровень Tier III) в Амстердаме</b>.</p><h3>Сетевые возможности, трафик и безопасность</h3><p>В стоимость каждого сервера входит бесплатный выделенный IP-адрес. Клиенты могут выбрать между 100 Мбит/с с безлимитным трафиком или портом 1 Гбит/с с включёнными 32 Тб трафика.</p><p>Защита от DDoS-атак и система безопасности BitNinja для сервера и сайта доступны как подключаемые опции. Также предоставляются объектное хранилище S3, автобэкапы и Кибер-бэкап. Для безопасности коммуникаций используются SSL-сертификаты GlobalSign.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-07-31/7d36ac0d-4832-402b-b0b0-9d7955963916.png" alt="" /></figure><h3>Управление, ПО и поддержка</h3><p>При заказе сервера клиент получает лицензию ispmanager 6  lite: первый месяц панель предоставляется бесплатно, дальше оплачивается по тарифу самой панели. Предлагается гибкий выбор операционных систем, включая Linux, FreeBSD и Windows Server. Под разовые задачи доступны готовые рецепты установки — от Битрикс и GitLab до TeamSpeak, LAMP‑стека и других популярных наборов ПО.</p><p>Для установки и решения любых вопросов — доступна живая круглосуточная техническая поддержка 24/7 через чат на сайте, в личном кабинете и по телефону, без использования чат-ботов. Для самостоятельного решения вопросов предусмотрена обширная база знаний.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-07-31/7fc897fc-5d2d-4f28-9047-834a8b0202b1.png" alt="" /></figure><h3>Клиентские бонусы и программы</h3><p>Есть тестовый период до 3 дней. Регулярно проводятся акции и предоставляются скидки, в том числе на тарифы для нагруженных проектов.</p><p>1) При переходе от другого хостера FirstVDS бесплатно переносит до 10 сайтов. Дополнительно предоставляется скидка 40% на первый месяц аренды VPS при оплате сервера на 1, 3 или 6 месяцев, либо 3 месяца бесплатной аренды VPS при оплате на год.</p><p>2) Клиенты с возрастом аккаунта от 5 лет получают постоянную скидку на аренду VPS, начиная от 5% и увеличиваясь ежегодно до 20%.</p><p>3) Действует реферальная программа, по которой партнёр получает 10% от расходов привлечённых клиентов, а привлечённый пользователь — скидку 25% на первый месяц аренды VPS.</p><p>4) Стоимость продления домена у FirstVDS равна актуальной стоимости его регистрации.</p><h2>3. InCloud: VPS‑площадки для бизнеса, где важен SLA</h2><p><a href="https://incloud.ru/">InCloud</a> продаёт виртуальные серверы, работающие в отказоустойчивом кластере на базе enterprise хранилищ NetApp и HPE 3PAR. Позиционируется как решение для 1С, малого/среднего бизнеса и аутсорс компаний, которым нужны предсказуемые ресурсы и техподдержка профессиональных инженеров, а не чат‑ботов.</p><h3>Тарифные планы и ценообразование</h3><p>InCloud предлагает две основные линейки тарифов:</p><ol><li>Стандартный тариф: внутри процессоры Intel Xeon 2600v4 2ГГц и оперативная память DDR4 2400 МГц.Стоимость: 1 CPU – 200 рублей, 1 Гб RAM – 200 рублей.</li><li>Производительный тариф: использует процессоры AMD EPYC до 3.8 ГГц и оперативной памяти DDR5 4800 МГц. Стоимость: 1 CPU – 250 рублей, 1 Гб RAM – 250 рублей.</li></ol><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-07-31/c484688e-fd3f-48ca-b743-616c21699ac4.png" alt="" /></figure><p><b>Стоимость дискового пространства</b>: SATA диски: <b>3 рубля за 1 Гб</b>. SSD и NVMe диски: <b>13 рублей за 1 Гб</b>.</p><h3>Архитектура и поддержка</h3><p>Теперь про то, что упрощает жизнь и добавляет надежности нашим развернутым сервисам:</p><ul><li>Ежедневные бэкапы: данные ваших серверов будут копироваться каждый день, и храниться они могут до 30 дней.</li><li>Удобная панель управления: через нее можно делать снапшоты  и клонировать серверы. Для разработчиков это просто золото – быстро накатить тестовую среду, попробовать новую фичу, а потом откатиться или создать идентичные рабочие среды.</li><li>SLA-договор: есть возможность заключить SLA-договор, чтобы получить гарантированный уровень доступности услуг.</li><li>Новейшие мощные серверы — на базе AMD EPYC 4 поколения.</li></ul><p>Одна из фишек – это возможность напрямую проконсультироваться с сертифицированными инженерами InCloud по сложным проектам.</p><h3>А что с клиентскими кейсами</h3><ol><li><b>Кейс Vamkamin</b>: производственная компания, которая ускорила работу своей системы 1С и сократила IT-расходы на 35%. У них была проблема с медленной работой 1С при одновременном доступе бухгалтерии, склада и отдела продаж, а также с частыми простоями на локальных серверах. InCloud предложил перенести все сервисы в облако, используя серверы на базе AMD EPYC 9554, что обеспечило прирост производительности более 40% по сравнению с предыдущими решениями. Также были внедрены гибкое масштабирование ресурсов и ежедневное резервное копирование.</li><li><b>Кейс Веб-студии 100UP</b>: компания занимается разработкой и поддержкой сайтов для крупных торговых сетей и e-commerce проектов. 100UP переехала к облачному провайдеру InCloud, выбрав тарифы на базе AMD EPYC 9554 с высокой тактовой частотой и большим количеством ядер. Благодаря разнообразию тарифов команда легко распределила проекты по нужным по производительности виртуальным серверам. После переезда 100UP смогла сократить время отклика клиентских сайтов в среднем на 45%, обеспечить бесперебойную работу даже в периоды высокой сезонной нагрузки, ускорить запуск новых проектов, фокусироваться на разработке и маркетинге и улучшить качество предоставляемых услуг.</li></ol><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-07-31/c0b63a9f-bb39-4b44-9363-45cefd4c2f62.png" alt="" /></figure><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-07-31/9f98fda8-0b7a-408a-9a82-00f063ee0d88.png" alt="" /></figure><h2>4. SmartApe: быстрые VPS на NVMe‑SSD</h2><p><a href="https://www.smartape.ru/ssd-vps">SmartApe</a> подойдет проектам, где дисковая подсистема и CPU работают без простоя: интернет‑магазины, порталы с большим количеством контента, внутренние корпоративные системы, высоконагруженные API. Если нужен быстрый старт — сервер создаётся за одну‑две минуты; если понадобится масштабирование, тариф можно увеличить без миграции.</p><h3>Преимущества этих VPS</h3><p>Используются современные серверные NVMe SSD диски в RAID массиве, которые в 600 раз быстрее обычных HDD. Скорость чтения достигает 8000 Мбайт/с, а записи — 2000 Мбайт/с.</p><p>Серверы работают на мощных процессорах Intel Xeon Gold или AMD EPYC (до 3.7 ГГц) и быстрой памятью DDR4. Используется полноценная виртуализация KVM с выделенными ресурсами для гарантии их предоставление. Дата-центры уровня TIER-III и TIER-IV обеспечивают Uptime 99.982%. Данные хранятся в хранилище RAID-10.</p><p>Дополнительно клиенты получают полный root-доступ (по SSH для Linux и RDP для Windows), возможность установки любых операционных систем (более 20, включая Ubuntu, CentOS, Debian, Windows Server) и ПО, а также полную изоляцию от других клиентов.</p><h3>Удобство и поддержка</h3><ul><li>Бесплатная панель управления (Hestia) или платная ISPmanager для простого управления сервером.</li><li>Бесплатное базовое администрирование и помощь в переносе сайтов.</li><li>Круглосуточная квалифицированная поддержка 24/7.</li><li>Бесплатный тестовый период 10 дней без оплаты и ввода карты.</li><li>Защита от DDoS-атак включена в стоимость.</li><li>Выделенный внешний IP-адрес (возможность купить до 10 IP).</li></ul><p>Перед покупкой дают десять дней теста без привязки карты; если сервис не подойдёт, в течение тридцати дней можно вернуть деньги за неиспользованный период.</p><h4>Пример использования: интернет‑магазин</h4><p>VPS c 2 vCPU, 4 ГБ RAM, 80 ГБ SSD и портом 100 Мбит/с; при обычном трафике сайт обслуживает 300–500 уникальных посетителей в день, одновременно на страницах бывает 10–20 человек, а в пиковую распродажу до 50; средняя нагрузка 5–10 запросов в секунду, короткими всплесками до 20; заявленный аптайм 99,982 %, реальные замеры отклика после кэширования — 200–300 мс; счёт за такой сервер выходит около 1 300 рублей в месяц.</p><h4>Пример использования: API на Node.js</h4><p>4 vCPU, 8 ГБ RAM, 160 ГБ NVMe и канал 200 Мбит/с; сервис стабильно обрабатывает 50–100 запросов в секунду, на пике достигает 200, одновременно подключены 500–1 000 клиентов, максимум 2 500; трафик близок к 200 ГБ в месяц; при том же аптайме 99,982 % средняя задержка ответа укладывается в 50–100 мс; ежемесячная стоимость в зависимости от опций колеблется в диапазоне 2 600–3 000 рублей.</p><p>SmartApe имеет смысл брать, когда дисковая скорость и гарантированные ресурсы важнее высокого GUI и почасовой тарификации, для расчёта стоимости есть калькулятор конфигураций на сайте и оперативная техподдержка.</p><h2>5. PSB Hosting: что даёт их VPS‑платформа</h2><p><a href="https://psb.hosting/vps">PSB Hosting</a> продвигает VPS-хостинг как решение для сайтов, приложений и SaaS-сервисов, которым нужна предсказуемая мощность и высокий SLA. Провайдер делает упор на новое оборудование, пропускную способность без ограничений и инфраструктуру уровня Tier III+.</p><h3>Локации и тарификация</h3><p>Серверы разворачиваются в четырёх точках: Нидерланды, США, Германия и Финляндия. Для каждой площадки доступен одинаковый конструктор конфигураций. Базовый план NL‑100, который включает 1 vCPU, 2 ГБ RAM и 30 ГБ SSD, стоит 6 долларов в месяц. Линейка поднимается ступенчато:</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-07-31/62dfc578-ede9-4533-bfb8-bca1a1a26688.png" alt="" /></figure><p>Слайдеры позволяют довести параметры до 32 ядер, 64 ГБ RAM и 510 ГБ SSD; верхняя планка оплаты — 220 $ в месяц.</p><p>Трафик безлимитный на любых конфигурациях — дополнительной оплаты за гигабайты нет.</p><h3>Аппаратная платформа, ОС и предустановки</h3><p>В хост-узлах применяются процессоры последних линеек AMD и Intel. Оперативная память — DDR5, что снижает задержки при обращении к ОЗУ. Дисковая подсистема полностью на NVMe, объединена в RAID 10: чтение и запись выше, чем у классических SSD, а отказ одного накопителя не выводит хранилище из строя. К каждому VPS подключён выделенный канал с пропускной способностью до 10 Гбит/с.</p><p>Сервер можно поднять сразу с Windows Server, Ubuntu, Debian, CentOS или FreeBSD. Для быстрого старта доступны готовые образы: Bitrix, Django-стек, Docker, FastPanel, Hestia CP, Keitaro, LAMP, Node, OpenVPN, Outline, Portainer, Vesta CP и другие.</p><h3>Управление и поддержка</h3><p>Провайдер обещает круглосуточную техническую поддержку, резервные копии (бэкапы) и автоснапшоты. Для автоматизации предусмотрен API; в панели управления можно масштабировать ресурсы, перезагружать сервер и следить за статистикой.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-07-31/fabfe43d-7891-4129-8ad5-e87f45b087ef.png" alt="" /></figure><h2>Как выбрать VPS под свой проект</h2><p>Для сайта с пиковыми нагрузками подойдёт SmartApe, где дисковая подсистема на NVMe-SSD в RAID-10 обеспечивает скорость чтения до 8000 Мбайт/с и записи до 2000 Мбайт/с, а сайт на конфигурации с 2 vCPU, 4 ГБ RAM и 80 ГБ SSD выдерживает 300–500 уникальных посетителей в день с пиком до 50 одновременных пользователей и нагрузкой 5–10 запросов в секунду (короткими всплесками до 20).</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-08-20/bc98805d-7f7f-471d-a2a2-1df68139c637.png" alt="" /></figure><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-08-20/204e63be-985f-449d-a37c-37ca9993d335.png" alt="" /></figure><p>Если проект включает высоконагруженный API, например, на Node.js, то оптимален SmartApe с конфигурацией 4 vCPU, 8 ГБ RAM и 160 ГБ NVMe, которая стабильно обрабатывает 50–100 запросов в секунду (пики до 200) при 500–1000 одновременных подключениях (максимум 2500) и трафике до 200 ГБ в месяц.</p><p>Для задач с 1С, где важна стабильность и сокращение IT-расходов, выбирайте InCloud на базе AMD EPYC 9554: в кейсе Vamkamin это ускорило работу системы на 40%, сократило расходы на 35% и минимизировало простои, с ежедневными бэкапами до 30 дней и SLA-договором.</p><p>Если нужен VPS для Битрикс с высокой частотой CPU, подойдёт FirstVDS на AMD Ryzen (CPU.Турбо) с частотой до 5,7 ГГц и DDR5: скидка 30% на 3 месяца при покупке лицензии Битрикс, плюс отказоустойчивость на кластере Ceph с репликацией данных.</p><p>Для веб-студий с разработкой и поддержкой сайтов для e-commerce, где требуется распределение проектов по производительности и бесперебойная работа в сезонные пики, подойдёт InCloud на AMD EPYC 9554: в кейсе 100UP это сократило время отклика на 45% и обеспечило стабильность под высокой нагрузкой.</p><p>Если проект ориентирован на международный трафик с предсказуемыми ресурсами и высоким SLA, выбирайте PSB Hosting с локациями в Нидерландах, США, Германии или Финляндии, безлимитным трафиком и каналом до 10 Гбит/с на DDR5 и NVMe в RAID 10.</p><p>Для бэкенда мобильного приложения с нагрузкой до 12 000 уникальных пользователей в сутки (утилизация CPU 25%) подойдёт ИХЦ на NVMe/24 с 24 ГБ RAM и ~200 ГБ SSD, стеком nginx, PHP, MySQL.</p><p>Если развлекательный сайт с более чем 5000 уникальных пользователей в сутки (загрузка CPU ~20%), то подходит ИХЦ на NVMe/12 с 12 ГБ RAM и ~120 ГБ SSD, стеком nginx, Docker, Node.js. Он обеспечит стабильность с безлимитным трафиком и DDoS-защитой.</p><p>Выбор сводится к трём вопросам: где ваши<br />пользователи, какую пиковую нагрузку вы ждёте и нужен ли формальный SLA.<br />Сформулируйте эти требования заранее — и любой из пяти хостингов закроет задачу<br />без проблем в продакшне. Добавить свои рекомендации VPS хостингов — вы всегда<br />можете в комментариях, желательно описывать короткие кейсы.</p>]]></content:encoded>
    </item>
    <item>
      <title>ИИ-поиск: почему люди перестали гуглить и как это меняет интернет</title>
      <link>https://tproger.ru/articles/ii-poisk--pochemu-lyudi-perestali-guglit-i-kak-eto-menyaet-internet</link>
      <comments>https://tproger.ru/articles/ii-poisk--pochemu-lyudi-perestali-guglit-i-kak-eto-menyaet-internet?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Виктория Эберт]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/ii-poisk--pochemu-lyudi-perestali-guglit-i-kak-eto-menyaet-internet</guid>
      <description><![CDATA[<p>Разбираемся, почему классический поиск уступает место ИИ-поисковикам, как генеративный ИИ меняет привычные правила поиска и что ждёт SEO эпоху ИИ-агентов ✔ Tproger</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/ii-poisk--pochemu-lyudi-perestali-guglit-i-kak-eto-menyaet-internet">ИИ-поиск: почему люди перестали гуглить и как это меняет интернет</a>»</p>]]></description>
      <category><![CDATA[Интернет]]></category>
      <category><![CDATA[SEO]]></category>
      <category><![CDATA[Оптимизация]]></category>
      <category><![CDATA[Git]]></category>
      <category><![CDATA[Hardware]]></category>
      <category><![CDATA[Опрос]]></category>
      <category><![CDATA[Новости]]></category>
      <category><![CDATA[Google]]></category>
      <category><![CDATA[PHP]]></category>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Tor]]></category>
      <category><![CDATA[Советы]]></category>
      <category><![CDATA[HTML]]></category>
      <category><![CDATA[GitHub]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[HR]]></category>
      <category><![CDATA[Telegram]]></category>
      <category><![CDATA[Сервисы]]></category>
      <category><![CDATA[Яндекс]]></category>
      <category><![CDATA[Intel]]></category>
      <category><![CDATA[MIT]]></category>
      <category><![CDATA[Adobe]]></category>
      <category><![CDATA[Cloudflare]]></category>
      <category><![CDATA[OpenAI]]></category>
      <category><![CDATA[Discord]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[Дизайн]]></category>
      <category><![CDATA[CMS]]></category>
      <category><![CDATA[аналитик]]></category>
      <category><![CDATA[1C]]></category>
      <category><![CDATA[Бизнес]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 25 Jul 2025 14:10:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Google два десятилетия был началом любого поиска. Сейчас всё чаще для этого открывают ChatGPT или другую нейросеть. Главное — не Google. Если раньше у нас был только Perplexity, то в декабре 2024 года OpenAI <a href="https://openai.com/index/introducing-chatgpt-search/">запустила</a> собственный Search — возможность искать информацию в интернете прямо в ChatGPT. Сейчас похожие функции есть у всех передовых моделей: Mistral Le Chat, DeepSeek, Claude, Gemini и даже у YandexGPT.</p><figure><img src="https://media.tproger.ru/user-uploads/111449/2025-07-01/fe8754da-5704-4138-9200-c48b53a316cf.png" alt="ChatGPT Search" /><figcaption>Источник: OpenAI</figcaption></figure><p>Генеративный ИИ больше не просто инструмент для текстов. Он становится полноценной точкой входа в интернет: здесь ищут товары, сравнивают характеристики и даже принимают решения о покупке — всё в одном окне. За один только праздничный сезон 2024 года трафик из ИИ-инструментов в американском онлайн-ритейле вырос на 1300% — такие данные приводит <a href="https://blog.adobe.com/en/publish/2025/03/17/adobe-analytics-traffic-to-us-retail-websites-from-generative-ai-sources-jumps-1200-percent">исследование</a> Adobe.</p><p>По умолчанию ChatGPT работает без выхода в интернет и отвечает на основе своих знаний, накопленных при обучении. Но можно включить функцию вручную, нажав на значок глобуса 🌐 «Искать в сети». Модель сама понимает, что вам нужна актуальная инфа, и подключается к интернету автоматически — тогда вверху появляется плашка «Поиск в сети».</p><figure><img src="https://media.tproger.ru/user-uploads/111449/2025-07-01/76cacb95-c320-49f6-93ae-565a0017979c.png" alt="ChatGPT ищет в интернете" /><figcaption>Плашка «Поиск в сети» в ChatGPT</figcaption></figure><p><b>Гуглить стало старомодно.</b> Аналитики заметили, что в англоязычной молодёжной среде глагол «гуглить» постепенно <a href="https://www.businessinsider.com/google-losing-status-as-verb-genz-2024-9">исчезает</a> — они говорят просто «search it». ChatGPT уже <a href="https://www.moneycontrol.com/technology/chatgpt-reached-1-billion-search-requests-a-day-5-5-times-faster-than-google-search-did-article-13105292.html?">обрабатывает</a> около 1 млрд поисковых запросов ежедневно. Это влияет на воронку продаж: многие шаги теперь проходят внутри чат-ботов. Бренды начинают перестраивать свои стратегии: мало быть видимым в поиске. Теперь нужно быть понятным и убедительным для нейросетей. Потому что завтра товары будут искать не люди, а их ИИ-агенты.</p><h2>Что не так с классической поисковой выдачей</h2><p><b>Слишком много кликов. </b>Первая страница выдачи забита рекламой, SEO-статьями, агрегаторами и рерайтами рерайтов. Чтобы получить один ответ, мало вбить запрос. Нужно пролистать рекламу, открыть пару сайтов, закрыть поп-апы с чатами и ещё проверить, что инфа свежая. И если результат не подошёл — начинаем всё заново.</p><p><b>SEO-мусор</b>. Ещё одна беда — это тонны переоптимизированного контента. Статьи написаны по шаблонам, чтобы понравиться алгоритмам и вписаться в критерии ранжирования. Если вы искали «что посмотреть в городе Х», то наверняка в топе были тревел-агрегаторы, забитые рекламой. Вместо живых впечатлений мы получаем скучные списки с дежурным набором достопримечательностей и призывом купить тур. Кроме того, такие статьи, как правило, обезличены, и не понятно, кто за ними стоит.</p><p><b>ИИ-контент. </b>Пользователь Reddit <a href="https://www.reddit.com/r/mildlyinfuriating/comments/1hsf0to/just_watched_john_wick_4_did_a_quick_search_to/">заметил</a>, что при поиске «John Wick 5» Google выдал кучу сгенерированного контента о проекте, который даже не анонсирован.<br /></p><figure><img src="https://media.tproger.ru/user-uploads/111449/2025-07-01/d2cf0c14-a335-4b75-8274-ff3dd710d6c4.png" alt="" /><figcaption>Источник: Reddit</figcaption></figure><p>В комментариях посоветовали использовать операторы — минус-ключи: -ai или -sponsored, чтобы исключить из результатов страницы с этими словами.</p><p>Проект <a href="https://github.com/CubicalBatch/deaddit">deaddit</a> документирует явление мёртвого интернета в формате ИИ-клона Reddit — поддельные посты, комментарии и целые сообщества, сгенерированные ИИ. С поддельными сабреддитами, названиями и описаниями, профилями пользователей с прописанными личностями и интересами, постами с заголовками, содержанием и даже количеством апвоутов, а также комментариями.</p><figure><img src="https://media.tproger.ru/user-uploads/111449/2025-07-01/12c1e97f-8a1d-46ac-85db-b68fa784cd49.png" alt="" /><figcaption>Источник: GitHub / deaddit</figcaption></figure><p><b>Паттерны поиска меняются</b>. Всё меньше хочется читать безликие рекламные статьи, замаскированные под советы, и всё больше — слушать живых людей. 

Генеральный директор Reddit <a href="https://www.ft.com/content/a86fb03a-8781-40b5-a077-1d677e546ecf">похвастался</a>, что на фоне роста ИИ-контента именно Reddit остаётся площадкой с человеческим голосом.</p><p>Популярный <a href="https://www.newyorker.com/culture/infinite-scroll/what-google-search-isnt-showing-you">лайфхак</a>: добавлять в поисковые запросы слово «reddit» или оператор «site: reddit.com».</p><blockquote>Я часто добавляю «reddit» к своим запросам, потому что это одно из немногих мест, где можно прочитать настоящие мысли людей.</blockquote><p>Но не все так оптимистичны: звучат подозрения, что часть постов пишут боты.</p><blockquote>Я не доверяю Reddit. Когда дело доходит до рекомендаций, у меня всегда возникает ощущение, что ответы пишут боты, рекламирующие продукты</blockquote><p>Пользователи всё больше ощущают потерю «аутентичного интернета» и <a href="https://www.newyorker.com/culture/infinite-scroll/what-google-search-isnt-showing-you">ищут</a> обходные пути — обращаются к альтернативным поисковикам, вроде DuckDuckGo или Brave, и к другим площадкам, например, Discord или Telegram-чатам, которые не индексируются поисковиками. Или создают собственные поисковые движки — например, через Google Custom Search Engine, чтобы искать только по выбранным источникам.</p><h2>Почему ИИ-поиск быстрее выдает желаемое</h2><p><b>Нужно уметь гуглить в Гугле.</b> Традиционный поиск — это сложная штука, требующая мощностей для обработки миллиардов проиндексированных страниц. Google справляется с этим благодаря продвинутым алгоритмам, отточенным за годы исследований. Но этого уже мало.</p><p>Ключ к успеху — <b>правильная формулировка запроса</b>. Сколько раз вы в несколько подходов перебирали варианты, меняли порядок слов, перефразировали запросы или добавляли поисковые операторы — чтобы сузить поиск, найти точные совпадения или исключить лишнее? И если не угадали — результата не будет. К счастью, ИИ-поисковики снимают эту головную боль. Они учитывают контекст, а не только ключевые слова, даже если формулировка хромает.</p><p>Мэт Хонан, главный редактор MIT Technology Review, <a href="https://www.technologyreview.com/2025/03/17/1113255/is-google-playing-catchup-on-search-with-openai/">сравнил</a> Google AI Mode и ChatGPT. Он отметил ключевое преимущество последнего — функцию памяти и персонализации. Когда он спросил ChatGPT «Что ты знаешь обо мне?», модель ответила живо и подробно: рассказала о вкусах в кино, отношении к ужастикам и даже вспомнила историю с постройкой сарая. В то время как Google, обладая огромной базой пользовательских данных — почтой, историей поиска, фотографиями, — выдал сухой профиль: «Вы интересуетесь комедиями, музыкой, подкастами и классикой». Такой ответ скорее полезен рекламодателям, чем самому пользователю. На данный момент Google недотягивает до уровня персонализации, эмпатии и гибкости, которыми уже обладает ChatGPT.</p><h3>Длинные запросы и эра диалогового поиска</h3><p>ИИ меняет то, как мы ищем информацию. Если средний запрос в Google состоял из <a href="https://www.semrush.com/blog/google-search-statistics/">3–4</a> слов, то в диалоге с нейросетью мы составляем запрос на естественном языке в <a href="https://www.semrush.com/blog/chatgpt-search-insights/">20+</a> слов — с нюансами и уточнениями. Но главное новшество —<b> возможность задавать follow-up вопросы:</b> уточнения к предыдущему запросу. Раньше нужно было начинать с чистого листа. Теперь ИИ «помнит» контекст и способен адаптироваться и уточнять ответы. Причём вернуться к этому чату можно и через год, не объясняя задачу заново. А еще можно сразу адаптировать найденную информацию под нужный стиль — <i>«а попроще?», «а на русском?», «а в одну строку кода?».</i></p><p>Такой подход полезен там, <b>где ключевые слова бессильны </b>— например, можно найти фильм, где «<i>маньяк шлёт зашифрованные письма в газету</i>», спросить о странном звуке в холодильнике, или описать птицу, которая прилетает во двор.</p><p><a href="https://www.semrush.com/blog/chatgpt-search-insights/">Исследование</a> Semrush показывает, что ChatGPT меняет привычные представления о <b>поисковых намерениях</b>. Если в классическом поиске запросы обычно делят на четыре типа: навигационные (найти сайт), информационные (узнать что-то), коммерческие (исследовать товар) и транзакционные (купить), то у ChatGPT только около 30% запросов вписываются в эти категории. Остальные 70% — это совсем другие задачи, которые редко встречаются в традиционных системах. Люди обращаются к ИИ не просто за фактами, а чтобы генерировать идеи, проводить мозговой штурм и глубоко копать в теме.</p><p>На самом деле «умный» поиск — <b>не всегда быстрее обычного гугления</b>. В режиме глубокого исследования (Deep Research) ИИ-система может тратить десятки минут, чтобы собрать источники и выдать аналитику. Это уже не просто поиск, а полноценный ассистент-аналитик, который помогает подготовить обзор или черновик по сложной теме.</p><h2>Почему ChatGPT пока что плох в поиске: галлюцинации, спам и фейк-источники</h2><ol><li><b>Короткие запросы — всё ещё вотчина Google</b>. Пока что у ChatGPT получается <a href="https://techcrunch.com/2024/11/04/chatgpt-search-is-not-openais-google-killer-yet/">не очень</a>.</li><li><b>Слабая фильтрация SEO-спама</b> — классические поисковики годами инвестировали в борьбу с ним. Генеративные движки пока не так придирчивы: в ответах часто появляются вторичные источники и полусырые сгенерированные статьи.</li><li><b>Чрезмерное обобщение в ответах.</b> Из-за «переупаковки» контента в ответ модели мы получаем «усреднённую» версию истины, в которой важные нюансы могут быть утеряны. Даже если ИИ не выдает ложную информацию, он все равно суммаризует и переформулирует контент способами, которые могут вводить в заблуждение.</li><li><b>Поддакивание и стремление угодить</b>. Модель <a href="https://arxiv.org/abs/2310.13548">натренирована</a>, чтобы быть вежливой и полезной. Она пытается выдать ответ даже тогда, когда не может его найти. Не потому что хочет нас обмануть, а потому что не умеет сказать «нет». Поэтому соглашается с нами и может поддержать самые безумные идеи, например, <a href="https://x.com/icreatelife/status/1793781850923823144">призывает есть камни</a>.</li><li><b>Проблемы с локальными запросами</b>. ChatGPT не расскажет, во сколько приедет ваш поезд, и не уточнит, открыт ли ближайший супермаркет. Он может найти рестораны в районе, но за актуальным меню — всё равно придётся идти в Google.</li><li><b>Цитирование — боль</b>. Недавний <a href="https://www.cjr.org/tow_center/we-compared-eight-ai-search-engines-theyre-all-bad-at-citing-news.php">рисерч</a> Columbia Journalism Review выявил серьёзные проблемы в способности ИИ-поисковиков цитировать новости. Анализ восьми нейросетей показал, что они часто предоставляют неверные или вымышленные ссылки, даже если у них есть издательская лицензия.</li></ol><p>Проблема и в том, как люди <b>фактчекают информацию</b>. Мы идем по пути меньшего сопротивления и выбираем самые простые пути для поиска ответов. Точность и достоверность отходят на второй план, а приоритетом становится скорость и комфорт. Результаты <a href="https://papers.ssrn.com/sol3/papers.cfm?abstract_id=4498671">исследования</a> показывают, что люди считают информацию, сгенерированную ChatGPT, более качественной и доступной по сравнению с Google Search.</p><blockquote>Давайте будем реалистами — люди чрезвычайно ленивы. Они будут прилагать минимум усилий для достижения результатов. Даже если эти результаты отстойные. Людей это не волнует. <br /><br />Это значит, что люди скорее зададут вопрос чат-боту и поверят любому ответу, который он выдаст. Ведь это проще, чем набирать текст в Google, а затем читать или пролистывать кучу статей.</blockquote><p>Один из важных вопросов: как не потерять способность анализировать информацию самостоятельно? Ведь когда мы получаем готовый ответ от ИИ, можем перестать задумываться о том, как этот ответ был сформирован. Когда нейросеть даёт готовый, «отполированный» ответ, появляется соблазн воспринимать его как истину в последней инстанции — и перестать критически мыслить.</p><blockquote>Иногда ChatGPT полностью лжет мне, и я знаю это только потому, что у меня есть существующие знания, что это неправда. Если бы у меня их не было, я бы никогда не узнал, что это неправда...Поэтому я не могу полностью полагаться на ChatGPT и всегда проверяю разные источники.</blockquote><p>И это правда. Но и Google не гарантирует 100% точности в топе выдачи. Там тоже бывают ошибки, устаревшие данные или некачественные источники. Поэтому в любом случае важно проверять информацию и не полагаться слепо ни на ИИ, ни на поисковики.</p><h2>Как генеративный ИИ крадет трафик и деньги бизнеса</h2><p>ИИ теперь — как <b>посредник</b>: он «пережевывает» контент с сайтов: статьи, обзоры, новости — и выдает это пользователю в интерфейсе чат-бота. При этом юзер зачастую не доходит до первоисточника. Рэнд Фишкин из SparkToro <a href="https://sparktoro.com/blog/2024-zero-click-search-study-for-every-1000-us-google-searches-only-374-clicks-go-to-the-open-web-in-the-eu-its-360/">назвал</a> это <b>«поисками с нулевым кликом»</b>. И таких запросов становится всё больше.</p><p><b>Что это значит?</b> Контент журналистов, блогеров и брендов используется как сырьё, а сами авторы как будто остаются в тени — их труд не приносит прямого трафика.</p><h3>Почему эта ситуация — головная боль для бизнеса и контент-мейкеров?</h3><ul><li><b>Меньше посетителей — меньше клиентов</b>. Если пользователи не заходят на сайт, то и конвертировать их в покупателей или подписчиков становится гораздо сложнее. Трафик просто утекает в интерфейс ИИ. Если нейросеть пересказывает суть статьи прямо в чате, зачем открывать оригинал?</li><li><b>Потеря контроля над голосом бренда</b>. ИИ решает, как преподнести ваш контент — может вырвать из контекста, искажать или просто упустить важные детали. Бренд уже не может поправить этот «пересказ». А ещё никто не увидит ваш уникальный дизайн и фирменный стиль.</li><li><b>Рост нагрузки на серверы</b>. ИИ-ассистенты и агенты автоматически перебирают десятки источников при каждом запросе. Опенсорс-сообщество уже <a href="https://about.readthedocs.com/blog/2024/07/ai-crawlers-abuse/">жалуется</a>: их ресурсы просто падают под лавиной ботов. А если этим займутся ИИ-агенты от имени миллионов пользователей — нагрузка на сайты вырастет в разы.</li><li><b>Нарушение правил индексации</b>. Раньше страницы индексировали Google и пара конкурентов, которые уважали robots.txt — файл, который говорит, где можно, а где нельзя. Сейчас же десятки ИИ-моделей <a href="https://www.cjr.org/tow_center/we-compared-eight-ai-search-engines-theyre-all-bad-at-citing-news.php">парсят сайты без разбора</a>, игнорируя эти ограничения.</li><li><b>Проблемы с обучением ИИ и конфиденциальностью</b>. ИИ-боты могут брать контент с сайтов не только для ответов, но и для обучения своих моделей. То есть ваша статья, обзор или даже комментарий могут стать частью «учебного корпуса», который помогает ИИ выдавать более «умные» ответы. При этом авторы часто не получают ни копейки и даже не знают, что их материалы используются таким образом. Многие сайты начали блокировать ИИ-ботов, чтобы защитить свой контент. Wired <a href="https://www.wired.com/story/most-news-sites-block-ai-bots-right-wing-media-welcomes-them/">сообщает</a>, что практически 90% новостных сайтов, таких как NYT, Guardian, Atlantic и др., блокируют краулеры OpenAI и других ИИ-компаний.</li></ul><p>Если ИИ-разработчики продолжат брать контент без разрешения, их ждёт либо платный доступ к данным (они должны платить авторам за данные или переходить на лицензионную модель), либо война протоколов с нарушением веб-этикета. Ahrefs провели <a href="https://ahrefs.com/blog/ai-bot-block-rates/">исследование</a> — они проанализировали около 140 миллионов сайтов и обнаружили, что за последний год количество блокировок ИИ-ботов существенно выросло. Вот ключевые цифры:</p><ul><li>Число активных ИИ-ботов в сети удвоилось с августа 2023 года, сейчас насчитывается 21 крупный бот на основе ИИ.</li><li>Самый блокируемый бот — GPTBot от OpenAI: его блокируют почти 6% всех сайтов.</li><li>ClaudeBot (Anthropic) показал самый резкий рост блокировок — +32,67% за год.</li></ul><p>Получается, что для веб-мастеров заготовлена новая головоломка: как гарантированно попасть в выдачу нейросетей, если краулеры игнорируют robots.txt? И можно ли вообще вычеркнуть сайт из этих списков? Как оптимизировать облегчённую версию сайта для ИИ-агентов, чтобы не перегружать сервер и не потерять контроль над контентом?</p><p><a href="https://blog.cloudflare.com/declaring-your-aindependence-block-ai-bots-scrapers-and-crawlers-with-a-single-click/">Cloudflare</a> разработали «кнопку» блокировки AI‑ботов, чтобы снизить подобные нагрузки. Подключить эту функцию может любой пользователь Cloudflare, включая бесплатные тарифы. Компания, которая специализируется на защите сайтов от атак, заметила, что ежедневно на её сеть приходится около 50 миллиардов запросов от ИИ-ботов. В ответ они запустили AI Labyrinth — «лабиринт ИИ-контента», куда попадают незваные боты, игнорирующие директивы no crawl, где они застревают в бесконечной цепочке перелинкованных страниц.</p><h2>Переосмысление SEO в эпоху ИИ</h2><p>Классическое SEO уходит в прошлое. Чтобы оставаться на плаву, брендам и авторам нужно учиться говорить с ИИ на его языке. Вот почему появляются новые методы и направления — AIEO и GEO:</p><ul><li><b>AIEO (Artificial Intelligence Engine Optimization)</b> — оптимизация контента под ИИ-системы. Неважно, это голосовой помощник или чат-бот — задача AIEO сделать контент максимально понятным и «перевариваемым» для ИИ, чтобы он попадал в их ответы.</li><li><b>GEO (Generative Engine Optimization)</b> — это оптимизация именно под генеративные поисковые системы (например, Bing Chat, Google AI Mode).</li></ul><p>Пока никто толком не знает правил новой ИИгры. Но уже есть общие признаки, которые могут помочь нейросети выбрать именно ваш контент для цитирования:</p><ol><li><b>Чёткая структура</b>: подзаголовки H2 и H3, чтобы разбить текст на логичные блоки.</li><li><b>Короткие, простые абзацы</b> — никаких длинных занудных объяснений, только по делу.</li><li><b>Контент, который отвечает на вопросы</b>: «что это», «зачем нужно», «пример на практике». Не просто набор ключевых слов, а полезная информация.</li><li><b>Внешние упоминания и ссылки</b> — ИИ нравится, когда ваш контент не в изоляции, а подтверждён другими источниками.</li><li><b>Участие в специальных программах</b>: можно подать заявки в <a href="https://openai.com/chatgpt/search-product-discovery/">ChatGPT Product Discovery</a>, чтобы товар показывался в ответах ChatGPT или Perplexity Merchant Program — для крупных продавцов с доставкой в США, чтобы товары попадали в виджеты Perplexity.</li></ol><p><b>Как оценить эффективность?</b> Сейчас в аналитике уже можно увидеть переходы с нейросетей — они отображаются в отчетах по источникам трафика. Плюс появились метрики видимости бренда в ответах ИИ. Например, <a href="https://ahrefs.com/brand-radar">Ahrefs</a> теперь показывает, как часто ваш бренд упоминается в ответах нейросетей. А новые сервисы помогают мониторить появление бренда в ИИ-результатах, отслеживать тональность упоминаний и анализировать динамику.</p><figure><img src="https://media.tproger.ru/user-uploads/111449/2025-07-01/44055a32-808d-4356-be23-2f33fa07fc62.png" alt="Карта GEO-рынка" /><figcaption>Карта GEO-рынка. Источник: a16z.com</figcaption></figure><p>Это похоже на SEO начала 2000-х, когда с каждым обновлением алгоритма приходилось перестраиваться. С ИИ та же история: модели постоянно меняются, и нам придётся учиться работать с ними заново — иначе рискуем потерять трафик.</p><h2>Конец эры поисковиков? Действительно ли нейросети заменят Google</h2><figure><img src="https://media.tproger.ru/user-uploads/111449/2025-07-01/d4cc037b-7758-4a4a-ac2f-1c4b5143f02c.png" alt="" /><figcaption>Источник: onelittleweb</figcaption></figure><p><b>Стоит ли ожидать полного исчезновения поисковиков?</b> Вряд ли. Так же, как и исчезновения библиотек с появлением интернета. ИИ пока не заменит Google в роли поисковой системы, но классические поисковики со временем станут не актуальны из-за изменения природы потребления контента.</p><p>Пока Google лидирует, оставаясь примерно <a href="https://www.lifewire.com/chatbot-vs-search-engine-traffic-11760069">в 26 раз</a> популярнее ChatGPT по ежедневным визитам. Совокупно ИИ-сервисы генерируют всего около одного процента от всех поисков Google. Но скорость роста говорит сама за себя: чат-боты за год <a href="https://onelittleweb.com/ai-chatbots-vs-search-engines/#elementor-toc__heading-anchor-22https://onelittleweb.com/ai-chatbots-vs-search-engines/#elementor-toc__heading-anchor-22">выросли</a> по количеству обращений на 80,92%. Впервые с 2015 года, к концу 2024-го, доля Google на рынке поиска <a href="https://gs.statcounter.com/search-engine-market-share">опустилась</a> ниже отметки в 90%. Однако аналитики OneLittleWeb считают, что чат‑боты и поисковики не конкурируют, а дополняют друг друга — каждый решает свои задачи. Чат-боты расширяют возможности поиска, превращая его в диалог и помощь в генерации идей, а поисковики интегрируют ИИ-сводки, чтобы ускорить выдачу информации.</p><p>Поисковики превращаются в умных ассистентов, которые сами сканируют интернет и дают готовые ответы. Но есть проблема: Google AI Overviews уже бьют по доверию и <a href="https://www.bloomberg.com/news/articles/2025-04-07/google-ai-search-shift-leaves-website-makers-feeling-betrayed">трафику</a>. А главное — эти сводки <a href="https://www.tomshardware.com/tech-industry/artificial-intelligence/cringe-worth-google-ai-overviews">не всегда точны</a>. Техногигант тестирует ещё и <a href="https://search.google/ways-to-search/ai-mode/">AI Mode</a> — чат прямо в поиске, который синтезирует инфу из разных источников. Кнопка «Мне повезёт» <a href="https://www.theverge.com/news/665560/google-search-ai-mode-feeling-lucky-tests">уходит в прошлое</a> — теперь вам повезёт, если ИИ не нафантазирует лишнего. В России аналогичный тренд: Яндекс Нейро тоже объединяет классический поиск с генеративными нейросетями и умеет отвечать на комплексные запросы, копаясь в нескольких темах сразу. Поиск уходит в сторону диалогов и действий, и это уже не эволюция — это смена парадигмы.</p><p><b>Кто и как будет искать информацию завтра?</b> Мир движется к более удобным и быстрым способам получения информации. Возможно, скоро все мы перестанем вводить запросы в строку поиска и будем давать задания своим ИИ-агентам. Пока зарождаются новые стандарты — GEO и AIEO, бизнесу стоит задуматься не только о том, как попасть в ответ ИИ, но и как ИИ сможет <b>воспользоваться </b>его услугами. Нужны будут инструкции и цифровая инфраструктура, понятная для агентов. В мире, где задачи будет выполнять не человек, а агент, нужны понятные инструкции и цифровая инфраструктура. Намечается новый тренд — <a href="https://www.aitidbits.ai/p/agent-responsive-design">agent-responsive design</a>: сайты, которые удобны не только для людей, но и для ИИ.</p>]]></content:encoded>
    </item>
    <item>
      <title>Почему никто не читает пользовательские соглашения и что вы пропускаете: чем опасна цифровая слепота в 2025 году</title>
      <link>https://tproger.ru/articles/pochemu-nikto-ne-chitaet-polzovatelskie-soglaweniya-i-chto-vy-propuskaete--chem-opasna-cifrovaya-slepota-v-2025-godu</link>
      <comments>https://tproger.ru/articles/pochemu-nikto-ne-chitaet-polzovatelskie-soglaweniya-i-chto-vy-propuskaete--chem-opasna-cifrovaya-slepota-v-2025-godu?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Денис Кудерин]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/pochemu-nikto-ne-chitaet-polzovatelskie-soglaweniya-i-chto-vy-propuskaete--chem-opasna-cifrovaya-slepota-v-2025-godu</guid>
      <description><![CDATA[<p>95% россиян принимают соглашения без чтения — узнайте, какие риски скрывают длинные тексты: от скрытого сбора данных до потери прав на контент. 🔒 Анализ UX-ловушек, опасных пунктов в документах VK, Яндекса и Ozon, и новые законы РФ. Практические советы: как защитить данные и читать договоры осознанно в 2025 году.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/pochemu-nikto-ne-chitaet-polzovatelskie-soglaweniya-i-chto-vy-propuskaete--chem-opasna-cifrovaya-slepota-v-2025-godu">Почему никто не читает пользовательские соглашения и что вы пропускаете: чем опасна цифровая слепота в 2025 году</a>»</p>]]></description>
      <category><![CDATA[SEO]]></category>
      <category><![CDATA[Android]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Git]]></category>
      <category><![CDATA[Apple]]></category>
      <category><![CDATA[Опрос]]></category>
      <category><![CDATA[Практика]]></category>
      <category><![CDATA[Google]]></category>
      <category><![CDATA[PHP]]></category>
      <category><![CDATA[iOS]]></category>
      <category><![CDATA[Музыка]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[HTML]]></category>
      <category><![CDATA[GitHub]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[Роскомнадзор]]></category>
      <category><![CDATA[Amazon]]></category>
      <category><![CDATA[HR]]></category>
      <category><![CDATA[Сервисы]]></category>
      <category><![CDATA[Яндекс]]></category>
      <category><![CDATA[Блокчейн]]></category>
      <category><![CDATA[QA]]></category>
      <category><![CDATA[Аналитика]]></category>
      <category><![CDATA[Игра]]></category>
      <category><![CDATA[Мессенджер]]></category>
      <category><![CDATA[Россия]]></category>
      <category><![CDATA[5g]]></category>
      <category><![CDATA[Epic Games]]></category>
      <category><![CDATA[Приложение]]></category>
      <category><![CDATA[Сбер]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[Дизайн]]></category>
      <category><![CDATA[CMS]]></category>
      <category><![CDATA[аналитик]]></category>
      <category><![CDATA[микро]]></category>
      <category><![CDATA[Бизнес]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 23 Jul 2025 14:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Вы только что зарегистрировались в облачном хранилище, скачали новое приложение для контроля умного дома или подключили банковский сервис. Перед доступом к функционалу появляется экран с многостраничным текстом, который никто не читает. Вы тоже его не читаете, просто кликаете «Принять» и забываете.</p><p>Такая практика носит массовый характер: по данным <a href="https://iz.ru/1285198/roman-kildiushkin/plod-neznaniia-90-rossiian-ne-dochityvaiut-polzovatelskie-soglasheniia">исследований</a>, около 95% россиян принимают условия без изучения документа. При этом часть опрошенных вообще считает, что прочитать соглашение полностью физически невозможно (слишком много букв). Половина опрошенных даже не в курсе, о чем там написано.</p><p>Пользовательские соглашения — юридические документы, регулирующие права, обязанности и риски при использовании цифровых продуктов. Их игнорирование сравнимо с подписанием договора с закрытыми глазами. Почему это стало нормой? Какие «сюрпризы» скрываются за малопонятными формулировками? И как защитить свои данные в условиях российской цифровой экосистемы?</p><h2>Причины массового игнорирования: системные ловушки</h2><p>Проблема кроется не в лени пользователей (или не только в ней), а в продуманной системе, превратившей соглашения в формальность. Три ключевых барьера делают осознанное согласие практически недостижимым.</p><h3>Большой объем и языковой барьер</h3><p>Современные соглашения напоминают юридические трактаты. Средний документ российских сервисов содержит 16,800 слов. Роскомнадзор критикует избыточность текстов, но не публикует официальной статистики. Например, документация Ozon занимает 23,700 слов — это больше, чем повесть Чехова «Дуэль» (13,700 слов).  <a href="https://yandex.ru/legal/disk_termsofuse/ru/">Политика Яндекс.Диска</a> занимает 57 страниц, а условия СберБанк Онлайн — 43 страницы.</p><figure><img src="https://media.tproger.ru/user-uploads/113565/2025-07-21/ba4d45a5-5842-462f-b45c-4485fe4b7b91.png" alt="" /></figure><p>Главная проблема — язык. Юридические термины вроде «сублицензирование», «деперсонализация данных» или «арбитражная оговорка» требуют специальных знаний. Как показывает практика судебных споров и жалоб в Роскомнадзор, такие формулировки часто непонятны рядовым пользователям. Барьер усугубляется тем, что юридическая грамотность в РФ остается низкой: далеко не все россияне уверенно читают договоры.</p><blockquote>Ирония в том, что даже практикующие юристы часто соглашаются с
пользовательскими соглашениями, не читая их, — и причина не только в
профессиональной терминологии. Большинство таких документов перегружены
длинными абзацами, написаны мелким шрифтом и совершенно не приспособлены для
чтения на мобильных устройствах. В результате даже специалисту сложно вычленить
из текста то, что действительно важно. А еще и мучают вопросы: зачем и за что
это все мне? <br /><br />Но есть хорошие примеры. Скажем, один из крупных каршеринговых сервисов
предлагает не только полную версию соглашения, но и отдельное краткое саммари с
ключевыми условиями: ответственностью за штрафы, страховыми случаями,
особенностями оплаты и основными ограничениями. Такой подход позволяет быстро
понять, на что вы соглашаетесь, не тратя часы на чтение каждой строчки, и
действительно делает юридическую информацию доступной для всех.</blockquote><h3>UX-дизайн, провоцирующий спешку</h3><p>Современные интерфейсы часто проектируются так, что внимательное прочтение соглашений становится затруднительным. Кнопка «Принять» обычно выделяется контрастным цветом (например, зеленым или синим), а опция отказа скрывается:</p><ul><li>в приложениях отклонение условий требует перехода в «расширенные настройки» и сопровождается прочими сложностями;</li><li>кнопки «не соглашаюсь» выглядят менее заметными — например, серые на белом фоне.</li></ul><p>Такие паттерны усиливают «эффект туннельного зрения» — психологический феномен, при котором пользователь фокусируется на цели (быстром доступе к сервису), игнорируя второстепенные элементы. Дизайнеры дополнительно стимулируют это: например, используют таймеры обратного отсчета («Осталось 00:59»), чем создают искусственную спешку. Сообщения типа «99% пользователей уже приняли условия» формируют социальное давление.</p><figure><img src="https://media.tproger.ru/user-uploads/113565/2025-07-21/6e97fb92-dadf-4f2d-9b91-c2b5ddafcd53.png" alt="" /></figure><h3>Мнимый выбор в условиях монополий</h3><p>После блокировки зарубежных сервисов в 2023 году российский рынок заняли локальные альтернативы. Но переход к отечественным платформам не дал пользователям реальной свободы.</p><p>Почему выбор остаётся мнимым?  Попробуйте использовать СберБанк Онлайн без принятия политики обработки данных. Система выдаст ошибку: «Для продолжения необходимо согласиться с условиями». Аналогично в VK: отказ от соглашения означает потерю доступа к сообщениям и группам.</p><blockquote>Мнимый выбор — это не всегда подвох со стороны сервиса. Даже по новым
европейским правилам (Digital Services Act) платформы должны давать вам
«базовую версию» без персонализированной рекламы, но не обязаны работать вообще
без сбора данных. <br /><br />В России всё устроено схоже: если без ваших персональных данных сервис
просто не сможет функционировать (например, банк или мессенджер), отказ в
доступе — это не нарушение закона. <br /><br />Проблема начинается там, где сервис требует от вас избыточную информацию:
например, запрашивает паспорт для заказа еды или такси, требует согласие на
передачу ваших данных рекламным партнёрам ради просмотра видео или просит
доступ к вашим контактам и галерее там, где это не нужно для работы сервиса.
Вот такие запросы уже выходят за рамки необходимого и могут считаться
нарушением закона о персональных данных.</blockquote><p>Евросоюз в 2024 году ввел <a href="https://digital-strategy.ec.europa.eu/en/policies/digital-services-act-package">Digital Services Act</a>, обязывающий платформы предлагать базовую версию без сбора данных. В России аналогичные нормы в законе «О персональных данных» (152-ФЗ) начали работать только с 2025 года. У пользователя есть право отозвать согласие на обработку данных, но не все сервисы готовы сохранять функционал после отказа.</p><h2>Что скрывают соглашения: реалии цифрового мира</h2><p>Игнорируя пользовательские соглашения, пользователи невольно соглашаются на условия, иногда выходящие за рамки разумного сбора данных. Эти практики подтверждены регуляторными решениями, судебными кейсами и открытой документацией сервисов.</p><h3>Расширенный сбор данных под видом «аналитики»</h3><p>Яндекс.Карты сохраняют историю перемещений даже при деактивированном приложении. Сбор геоданных без явного уведомления при каждом запуске нарушает принцип минимальной достаточности (предоставление только необходимого для достижения цели). Это возможно, если в настройках устройства и приложения включена геолокация и история местоположений.</p><p>VK Музыка в пункте 4.3 пользовательского соглашения разрешает анализ аудиопотока через микрофон для идентификации фоновых треков. Технология активируется автоматически при первом запуске, без отдельного запроса на разрешение.</p><p>После ухода зарубежных сервисов российские платформы переняли спорные методы: например, VK Мессенджер хранит метаданные переписки (время отправки, IP-адреса, идентификаторы устройств) два года — дольше, чем это необходимо для операционной деятельности.</p><p>Закон требует удалять данные после достижения целей обработки, но не устанавливает жестких сроков. Этим пользуются сервисы. В политике конфиденциальности они указывают «хранение данных в течение срока, необходимого для выполнения бизнес-задач» — формулировка позволяет фактически бессрочно хранить адреса и телефоны пользователей.</p><blockquote>Формулировки про «хранение данных столько, сколько нужно для бизнеса» выглядят довольно расплывчато и, с юридической точки зрения, не могут считаться самостоятельной и достаточной целью: такая причина хранения вряд ли будет признана обоснованной при проверке. Тем не менее, именно за такими фразами иногда скрывают ссылку на так называемый законный интерес — этот механизм широко применяется в Европе по стандарту GDPR. В России, напротив, операторы редко ссылаются на законный интерес напрямую: это связано с тем, что у нас сложнее требования к обоснованию сроков и объёмов хранения данных, и риски для компании выше. <br /><br />В качестве примера можно привести ситуацию, когда оператор оставляет ваши контактные данные и историю заказов после завершения сделки, чтобы иметь возможность вернуть деньги или рассмотреть вашу жалобу. Или, например, хранит историю обращений для расследования мошенничества или предотвращения повторных атак (антифрод). <br /><br />Даже если такие обстоятельства действительно есть, компания обязана чётко объяснить, зачем ей по-прежнему нужны ваши данные и как долго они будут храниться. Если это не будет убедительно, регулятор может признать хранение избыточным.</blockquote><p>Умные колонки с голосовыми помощниками (такие как «Яндекс.Станция» или устройства Sber) постоянно анализируют звуковое окружение для активации по ключевым словам, что создает риск случайной записи приватных разговоров.</p><blockquote>Обезличенная статистика нужна бизнесу: знать, сколько пользователей на
сайте, когда пик нагрузки, какие разделы популярны. Закон такое разрешает, если
никто не может узнать, что это были именно вы. <br /><br />Но если сервис начинает собирать «поведенческие следы» — какие фильмы
смотрите, что ищете, на какие кнопки кликаете, и использует эти данные для
ваших персональных рекомендаций, это уже обработка персональных данных, даже
если вы не вводили свои ФИО. Современный подход — всплывающее окно с «переключателями»:
хотите только технические куки или соглашаетесь на аналитику и персонализацию.<br /><br />Отказаться от передачи данных должно быть так же
легко, как согласиться. Если же настройки глубоко спрятаны или их вообще нет —
это явное нарушение прав пользователя. Вы вправе знать, зачем сервис собирает
ваши данные, и контролировать этот процесс.</blockquote><p>Исследования подтверждают:</p><ul><li>Ложные срабатывания. Ассистенты <a href="https://www.tadviser.ru/index.php/%D0%A1%D1%82%D0%B0%D1%82%D1%8C%D1%8F:%D0%91%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C_%D1%83%D0%BC%D0%BD%D1%8B%D1%85_%D0%BA%D0%BE%D0%BB%D0%BE%D0%BD%D0%BE%D0%BA">активируются</a> до 19 раз в сутки из-за фоновой речи, слов-омофонов или аудиоконтента (например, при просмотре сериалов).</li><li>Технические уязвимости. Ученые <a href="https://4pda.to/2025/06/13/443283/uchyonye_nashli_sposob_proslushki_noutbukov_i_umnykh_kolonok/">обнаружили</a>, что MEMS-микрофоны в таких устройствах излучают радиосигналы, которые можно перехватить FM-приемником даже через бетонные стены.</li><li>Хранение данных. Записи голосовых команд сохраняются на серверах производителей неограниченное время. В 2019 году сотрудники Amazon <a href="https://www.bloomberg.com/news/articles/2019-04-10/is-anyone-listening-to-you-on-alexa-a-global-team-reviews-audio">признались</a> в прослушке аудио с Echo без ведома пользователей.</li></ul><figure><img src="https://media.tproger.ru/user-uploads/113565/2025-07-21/0fb61fc0-b5b1-49a4-9e53-f8b5ef22bafb.png" alt="" /></figure><p>Как минимизировать угрозы:</p><ol><li>Отключайте микрофоны колонок физической кнопкой (если есть) при обсуждении конфиденциальных тем.</li><li>Откажитесь в настройках от «персонализированных ответов» и отправки аудиоданных для «улучшения сервиса».</li><li>Регулярно удаляйте историю запросов через приложение-компаньон (например, «Дом с Алисой»).</li></ol><p><i>Важно: Пользовательское соглашение «Яндекса» прямо разрешает обработку фонового аудио для «технического анализа», но не уточняет сроки хранения или алгоритмы фильтрации. Для устройств Sber аналогичные условия описаны в разделе «Данные голосового взаимодействия».</i></p><h3>Передача прав на контент</h3><p>Стандартная формулировка «неисключительная лицензия» в облачных сервисах имеет далеко идущие последствия. Политика Mail.ru Cloud прямо разрешает использовать загруженные файлы для обучения ИИ-алгоритмов. На практике это означает, что ваши фото могут стать частью тренировочных данных для нейросетей распознавания лиц.</p><p>Маркетплейс Ozon в разделе «Обмен информацией» своего соглашения допускает передачу истории покупок партнерам для таргетированной рекламы. Вряд ли пользователи добровольно согласились бы на такие условия, если бы прочли о них заранее.</p><h3>Автоматическое продление подписок</h3><p>Проблема скрытых списаний остается массовой. Пользователи массово жалуются на автоматическое продление подписок. Например:</p><ul><li>Сервис IVI продлевает платный доступ без отдельного подтверждения после пробного периода.</li><li>Яндекс.Плюс списывает средства за 3 дня до окончания расчетного цикла в случае, если юзер не отключил автопродление. Яндекс делает это, «чтобы обеспечить клиентам непрерывный доступ к сервису, даже если платеж задерживается».</li></ul><p>Особую опасность представляют детские приложения, где случайные покупки происходят из-за неочевидного интерфейса. В 2024 году Федеральная торговая комиссия США (FTC) <a href="https://ixbt.games/news/2024/12/10/epic-games-vernula-obmanutym-detyam-v-fortnite-72-milliona-dollarov.html">оштрафовала</a> Epic Games (американскую компанию по разработке игр и ПО) в общей сложности на $520 млн за сложную процедуру отмены несанкционированных платежей в Fortnite (кроссплатформенной формально бесплатной игре).</p><p>Российские сервисы могут использовать схожие паттерны:</p><ul><li>в обучающих приложениях кнопки покупок размещаются рядом с игровыми элементами;</li><li>отмена требует письменного заявления или звонка в поддержку.</li></ul><blockquote>Ещё несколько лет назад — и в зарубежных, и в российских сервисах — действовали более лояльные правила возврата: если пользователь забывал отменить подписку в течение льготного периода, деньги можно было вернуть. По данным на 2021 год, такую опцию предлагали и IVI, и Яндекс, и Okko. <br /><br />Сегодня ситуация изменилась: сервисы работают по модели абонентского договора, где достаточно предоставить саму возможность пользоваться услугой, а возврат за неиспользованный период не предусмотрен, даже если клиент не воспользовался подпиской. Ответственность за контроль и отключение подписки полностью ложится на пользователя. Однако информировать о правилах продления и списания сервис должен понятно и заранее.   Из большинства пользовательских соглашений следует, что возврат возможен только если услуга реально не оказана по вине сервиса — например, из-за технических проблем. <br /><br />При этом крупные сервисы, как Яндекс, в явном виде указывают: изменение или ограничение контента, региональные блокировки и другие изменения не считаются основанием для возврата средств. Но важно помнить: если недоступность контента становится существенным недостатком услуги, Закон о защите прав потребителей (ст. 29) сохраняет за пользователем право на возврат оплаты — независимо от того, что написано в соглашении.</blockquote><p><i>Роскомнадзор рекомендует родителям активировать родительский контроль, отключать сохранение платежных данных и регулярно проверять историю подписок.</i></p><h2>Как защитить себя: стратегии для 2025 года</h2><p>Полностью избежать пользовательских соглашений невозможно, но осознанное взаимодействие с ними снижает риски. Предлагаем конкретные шаги для двух групп: обычных пользователей и разработчиков.</p><h3>Для пользователей: цифровая гигиена</h3><p><b>Проверяйте репутацию сервиса перед согласием</b></p><p>Роскомнадзор ведёт открытый реестр нарушителей закона 152-ФЗ. Например, каршеринг «Делимобиль» был внесен в список после массовой утечки номеров телефонов.</p><p>На некоторых сервисах публикуются расшифровки соглашений популярных российских платформ: там же сообщают о возможности сервисов изменять условия без персонального уведомления пользователей.</p><p><b>Жёстко контролируйте разрешения</b></p><p>Современные ОС предлагают инструменты для защиты:</p><ul><li>в Android 14 функция «Одноразовый доступ» <a href="https://support.google.com/chrome/answer/2693767?hl=ru&amp;co=GENIE.Platform%253DAndroid">ограничивает</a> работу камеры/микрофона одним сеансом;</li><li>в iOS 18 «Детальный контроль» <a href="https://support.apple.com/en-us/102459">позволяет блокировать</a> фоновый сбор данных.</li></ul><p>Для браузеров установите <a href="https://github.com/gorhill/uBlock">uBlock Origin</a> — расширение блокирует скрытые трекеры, упомянутые в политиках конфиденциальности. В соцсетях отключайте «аналитику поведения» в настройках приватности — это снижает объем собираемой информации.</p><p><b>Требуйте отчёт о ваших данных</b></p><p>Статья 14 закона 152-ФЗ гарантирует право запросить у компании:</p><ul><li>полный список хранимых персональных данных;</li><li>историю их передачи третьим лицам;</li><li>правовые основания обработки.</li></ul><p>В случае отказа или неполного ответа подавайте жалобу через портал Роскомнадзора.</p><blockquote>Если вы хотите узнать, какие именно ваши персональные данные обрабатывает компания, просто напишите им запрос — укажите свои ФИО, паспортные данные (или иные, подтверждающие личность), и четко сформулируйте, что именно вы хотите узнать: какие данные у них есть, откуда они их получили, зачем обрабатывают и кому передают. Такой запрос можно отправить письменно или через электронную почту, если подпишете его электронной подписью. По закону компания обязана ответить вам в течение 10 рабочих дней. <br /><br />И если вас ответ не устроил, вы вправе требовать удаления ваших персональных данных - оператор обязан будет это сделать (кроме тех данных, которые он обязан хранить в силу закона). Правда, нередко это одновременно будет означать, что вы не сможете более пользоваться этим сервисом.</blockquote><h3>Для разработчиков: прозрачность как конкурентное преимущество</h3><p>Сокращайте и визуализируйте соглашения</p><p>Т-Банк провел редизайн пользовательского договора: заменил юридические термины простыми формулировками, добавил инфографику и чек-листы ключевых пунктов. Это снизило количество обращений в поддержку по вопросам непонятных условий.</p><p><b>Внедряйте градацию согласия</b></p><p>Разделите запросы на данные по категориям:</p><ul><li>базовые — необходимые для работы сервиса;</li><li>опциональные — аналитика, реклама, улучшение продукта.</li></ul><p>Европейский GDPR требует такой практики — например, при установке приложения Signal пользователь <a href="https://signal.org/legal/">отдельно разрешает</a> доступ к контактам и уведомлениям. В России подобный подход выделит ваш продукт на фоне конкурентов.</p><p><b>Добавьте «режим адвоката»</b></p><p>Встройте в интерфейс кнопку «Главные риски за 60 секунд»: краткую выжимку ключевых положений. Сервис ProtonMail <a href="https://protonmail.com/security-details">делает это</a> эффективно — на странице регистрации четко указано: «Мы не храним IP-адреса и не передаём данные третьим лицам».</p><h2>Будущее соглашений: нейросети и законодательство</h2><p>Эволюция пользовательских соглашений развивается по двум направлениям: технологические инструменты для упрощения понимания и ужесточение законодательных требований. Оба тренда активно проявляются в 2025 году.</p><h3>ИИ-ассистенты: возможности и ограничения</h3><p>Крупные IT-компании разрабатывают инструменты для анализа юридических документов. Яндекс.Помощник интегрировал функцию сканирования соглашений: система выделяет спорные пункты цветными маркерами и генерирует упрощенные пояснения.</p><p>Однако нейросети не заменяют юристов. ИИ-сервисы нередко пропускают скрытые условия в длинных документах.</p><p>Основные проблемы:</p><ul><li>неспособность интерпретировать двусмысленные формулировки;</li><li>игнорирование ссылок на внешние документы;</li><li>ошибки в трактовке арбитражных оговорок.</li></ul><h3>Законодательные изменения: новые требования</h3><p>В июне 2024 года принят Федеральный закон № 123-ФЗ, вносящий поправки в 152-ФЗ.</p><p>Ключевые новации:</p><ul><li>запрет автоматического продления платных подписок без отдельного подтверждения через SMS или email (ст. 15.4);</li><li>обязательное выделение условий сбора биометрических данных жирным шрифтом;</li><li>штрафы до 3% годового оборота за сокрытие практик передачи данных третьим лицам.</li></ul><p>Новые требования уже дают результаты.</p><h3>Перспективы: стандартизация и блокчейн</h3><p>ЕС <a href="https://data-privacy-office.com/ai-act-overview/">разрабатывает</a> AI Act — единый стандарт для ИИ-анализа соглашений. Эксперименты с блокчейн-реестрами условий проводят Сбербанк и Тинькофф: технология фиксирует версии документов и предотвращает скрытые изменения.</p><h2>Заключение: ваша цифровая подпись — это ответственность</h2><p>Пользовательские соглашения — не формальность, а юридически обязывающий документ. Их игнорирование в 2025 году связано со многими рисками. Каждый клик «Принять» несёт реальные последствия: от скрытой слежки до потери прав на контент.</p><p>Что делать сегодня? Начните с малого. Даже беглый просмотр разделов «Данные» и «Автоматическое продление» снижает риски. Не забывайте о законе 152-ФЗ. Если это необходимо, требуйте от компаний полный отчёт о ваших данных через форму на портале Роскомнадзора.</p><p>Голосуйте кошельком. Переходите на сервисы с прозрачными правилами. Осознанное согласие — не роскошь, а базовый навык цифровой эпохи. Ваши данные стоят тех 10 минут, которые вы потратите на чтение перед кликом «Принять».</p>]]></content:encoded>
    </item>
    <item>
      <title>Эволюция сетей: от LAN 2003 года до 5G и дальше</title>
      <link>https://tproger.ru/articles/evolyuciya-setej--ot-lan-2003-goda-do-5g-i-dalwe</link>
      <comments>https://tproger.ru/articles/evolyuciya-setej--ot-lan-2003-goda-do-5g-i-dalwe?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Денис Кудерин]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/evolyuciya-setej--ot-lan-2003-goda-do-5g-i-dalwe</guid>
      <description><![CDATA[<p>Разбираем трансформацию сетевых технологий — от проводных LAN до беспроводных 5G и перспектив 6G. Узнайте, как роутеры, безопасность и скорость интернета изменились за 20 лет. </p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/evolyuciya-setej--ot-lan-2003-goda-do-5g-i-dalwe">Эволюция сетей: от LAN 2003 года до 5G и дальше</a>»</p>]]></description>
      <category><![CDATA[Интернет]]></category>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[Производительность]]></category>
      <category><![CDATA[Опрос]]></category>
      <category><![CDATA[Google]]></category>
      <category><![CDATA[PHP]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[HR]]></category>
      <category><![CDATA[Сервисы]]></category>
      <category><![CDATA[Wi-Fi]]></category>
      <category><![CDATA[5g]]></category>
      <category><![CDATA[Игра]]></category>
      <category><![CDATA[Взлом]]></category>
      <category><![CDATA[GTK]]></category>
      <category><![CDATA[аналитик]]></category>
      <category><![CDATA[микро]]></category>
      <category><![CDATA[1C]]></category>
      <category><![CDATA[faq]]></category>
      <category><![CDATA[Бизнес]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 23 Jul 2025 10:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>В 2003 году соединения между компьютерами представляли собой сложные и многоуровневые сплетения проводов. Ethernet-кабели опутывали жилые комнаты и офисы, а про беспроводные технологии многие только слышали. Dial-up-модемы еще не стали историей, хотя уже доживали последние дни. Локальные сети (LAN) строились на стандартах IEEE 802.3, обеспечивая скорость передачи данных до 100 Мбит/с — по тем временам это казалось фантастикой.</p><p>Первые Wi-Fi роутеры только начинали появляться на рынке, стоили дорого и требовали сложной настройки. Их антенны выглядели как нечто футуристическое, а радиус действия оставлял желать лучшего — сигнал часто не мог пробиться через одну-две стены. Сегодня, в 2025 году, ситуация кардинально изменилась. Беспроводные технологии 4-5G и mesh-сети превратили интернет в нечто невидимое, но повсеместное, как воздух.</p><p>Как технологии шагнули от проводных локальных сетей к глобальному беспроводному покрытию? Что стало действительно быстрее, а что мы, возможно, даже потеряли? Какие новые сложности принесли современные технологии? В этой статье мы проследим трансформацию сетевых технологий с 2003 по 2025 год.</p><h2>LAN 2003: эпоха проводов и первых беспроводных решений</h2><p>Начало 2000-х годов было временем, когда интернет в России становился массовым явлением, но оставался преимущественно проводным. Локальные вычислительные сети (LAN) продолжали активно развиваться, предоставляя возможность объединять компьютеры и другие устройства в пределах одного здания или офиса для обмена данными и совместного использования ресурсов.</p><figure><img src="https://media.tproger.ru/user-uploads/113565/2025-07-02/7256c664-f4d7-434c-97be-9a37ce0964c7.png" alt="" /></figure><p>В основе этих сетей лежала технология Ethernet, которая обеспечивала пропускную способность до 100 Мбит/с в наиболее распространенном варианте Fast Ethernet, а в продвинутых решениях — до 1000 Мбит/с (Gigabit Ethernet).</p><p>Для корпоративного сектора LAN играли ключевую роль в инфраструктуре предприятий, образуя основу для работы бизнес-приложений и обмена данными между сотрудниками. Активно использовались сетевые коммутаторы (switches), которые эффективно разделяли трафик и повышали производительность сети по сравнению с устаревшими концентраторами (hubs). Развитие Gigabit Ethernet и других сетевых технологий позволяло удовлетворить растущие потребности бизнеса в скорости передачи данных.</p><p>Для домашних пользователей это означало вполне конкретные особенности использования. Кабели витой пары протягивались по квартирам, создавая настоящие «паутины». Компьютеры соединялись физически, а провода приходилось аккуратно прокладывать вдоль плинтусов или даже сверлить стены для более аккуратной разводки.</p><p>Wi-Fi был редкой и дорогой опцией — первые роутеры вроде D-Link DI-604 стоили от $100 (что по курсу того времени составляло около 3000 рублей — немалые деньги для среднестатистического гражданина) и требовали сложной настройки через Internet Explorer.</p><p>Вопросы безопасности в те годы решались просто – точнее, почти никак. WEP-шифрование, использовавшееся в ранних стандартах Wi-Fi (802.11b/g), взламывалось за считанные минуты специальными программами, которые легко можно было найти в интернете. Многие пользователи вообще не заморачивались с паролями, оставляя свои сети открытыми, что приводило к частым случаям «халявного» использования соседского интернета.</p><p>Скорости передачи данных, которые сегодня кажутся смешными, тогда воспринимались как нечто революционное. Даже в продвинутых офисах гигабитные порты (1 Гбит/с) были редкостью. Загрузка фильма в HD-качестве (4–5 ГБ) могла занимать несколько часов, а о потоковом вещании в современном понимании и речи не шло.</p><p>Первые попытки внедрения беспроводных технологий наталкивались на серьезные ограничения. Радиус действия Wi-Fi редко превышал 30 метров, причем сигнал сильно ослабевал при прохождении через стены. Стабильность соединения оставляла желать лучшего — помехи от микроволновых печей, радиотелефонов и других бытовых приборов могли полностью убить беспроводную сеть.</p><p>Пример: Согласно исследованию аналитической компании J’son &amp; Partners за 2005 год, в Москве только 12% домохозяйств имели широкополосный доступ в интернет, а публичные точки Wi-Fi можно было пересчитать по пальцам. В основном они располагались в дорогих отелях и нескольких продвинутых кафе в центре города.</p><h2>Революция Wi-Fi и появление мобильного интернета</h2><p>К 2010-м годам ситуация начала кардинально меняться. Технология Wi-Fi, получившая новый импульс развития с появлением стандарта 802.11n (обеспечивающего скорость до 600 Мбит/с), стала по-настоящему массовой. Параллельно развитие мобильных сетей третьего поколения (3G) дало пользователям первую реальную свободу от проводов.</p><h3>Что конкретно изменилось в этот период</h3><p>Скорость передачи данных сделала качественный скачок. Если в начале 2000-х максимальная скорость Wi-Fi редко превышала 54 Мбит/с (по стандарту 802.11g), то с 2013 года, с появлением стандарта 802.11ac, в дома пришли гигабитные скорости. Например, популярный роутер ASUS RT-AC68U поддерживал скорость до 1,9 Гбит/с, что позволяло комфортно смотреть видео в 4K на нескольких устройствах одновременно.</p><figure><img src="https://media.tproger.ru/user-uploads/113565/2025-07-02/d6171314-d750-4e0a-8e6e-1c94939bd1eb.png" alt="" /></figure><p>Вопросы безопасности тоже вышли на новый уровень. Устаревший и ненадежный WEP сменился сначала WPA, а затем WPA2. В 2018 году был представлен WPA3 — новый стандарт безопасности, закрывший многие известные уязвимости. Однако технологии принесли и проблемы — участились случаи фишинга, а взломы через уязвимости в сетях стали настоящей головной болью для специалистов по кибербезопасности.</p><p>Проблема покрытия больших площадей нашла свое решение в mesh-системах. Пионером в этой области стала компания Google с ее системой Google Wifi, представленной в 2016 году. Такие системы позволяли покрыть Wi-Fi сигналом весь дом без «мертвых зон», используя несколько взаимодействующих между собой модулей.</p><p>Конкретные цифры: Согласно данным операторов и исследований, к 2021 году общее количество Wi-Fi точек в России (включая домашние роутеры) оценивалось в десятки миллионов, при этом проникновение широкополосного интернета в домохозяйства превысило 75%, а в Москве и крупных городах достигало 90%.</p><p>Технологический прогресс затронул и частотный диапазон. Перегруженность 2.4 ГГц стала серьезной проблемой — в час пик скорость могла падать до 5-10 Мбит/с. Это подтолкнуло переход на 5 ГГц, который предлагал более чистый эфир, но требовал нового оборудования.</p><p>Рынок Wi-Fi-решений активно развивался. К 2022 году его объем <a href="https://habr.com/ru/news/702456/">достиг 5.1 млрд рублей</a>. При этом средняя стоимость роутера упала, сделав технологию доступной массовому потребителю.</p><h2>4G и 5G: как мобильный интернет перевернул все</h2><p>Сети четвертого поколения (4G/LTE) совершили настоящую революцию в 2010-х годах, впервые обеспечив мобильный интернет со скоростями до 100-300 Мбит/с — быстрее, чем многие проводные домашние решения того времени.</p><p>Технология LTE стала основой для мобильного видеостриминга, такси-сервисов и других инноваций, изменивших повседневную жизнь. В России пик развития 4G пришелся на 2015-2018 годы, когда операторы развернули сети в большинстве городов-миллионников.</p><p>Однако настоящий технологический скачок произошел с появлением 5G, который предлагает не просто увеличение скорости, а качественно новые возможности.</p><p>Скорость передачи данных достигла невиданных ранее показателей. В тестовых замерах, <a href="https://www.kp.ru/expert/elektronika/5g-internet/">проведенных МТС в Москве в 2020 году</a>, 5G демонстрировал скорость до 1,2 Гбит/с. Для сравнения: средняя скорость 4G в тех же условиях составляет 100–300 Мбит/с. Это означает, что полнометражный фильм в 4K-качестве теперь можно скачать за считанные минуты.</p><figure><img src="https://media.tproger.ru/user-uploads/113565/2025-07-02/cb89cd92-e5fd-4f14-86a8-8ac9a04fd3ed.jpg" alt="" /></figure><p>Одним из ключевых преимуществ 5G стало радикальное снижение задержки (ping). Если в сетях 4G этот показатель обычно составляет 30–50 мс, то 5G сокращает его до 1–5 мс. Такие значения критически важны для технологий виртуальной реальности, телемедицины (особенно для удаленных операций) и облачного гейминга.</p><p>Однако внедрение 5G столкнулось с серьезными трудностями. Как <a href="https://www.kommersant.ru/doc/6608033">отмечал «Коммерсантъ» в 2024 году</a>, в России развертывание сетей пятого поколения значительно замедлилось из-за нехватки частотного спектра. Основные «чистые» частоты, используемые для 5G в других странах, в России были заняты спутниковой связью, военными и спецслужбами.</p><p>Есть и <a href="https://www.tadviser.ru/index.php/%D0%A1%D1%82%D0%B0%D1%82%D1%8C%D1%8F:%D0%A7%D0%B0%D1%81%D1%82%D0%BE%D1%82%D1%8B_%D0%B4%D0%BB%D1%8F_5G_%D0%B2_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8#:~:text=%D0%92%20%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8%20%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%82%D0%BE%D1%80%D1%8B%20%D0%BC%D0%BE%D0%B1%D0%B8%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9%20%D1%81%D0%B2%D1%8F%D0%B7%D0%B8,%D0%B8%D1%85%20%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%20%D0%B2%20%D0%BC%D0%BE%D0%B1%D0%B8%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9%20%D1%81%D0%B5%D1%82%D0%B8.">экономические ограничения</a>. Капитальные затраты на развертывание 5G в 2.5 раза выше, чем для 4G при текущих частотах. Окупаемость инфраструктуры только в Москве оценивается в 25-30 лет. Эти проблемы характерны не только для России — аналогичные сложности с окупаемостью 5G фиксируют операторы в Европе и США.</p><p>Правительство РФ утвердило поэтапный план внедрения 5G, согласно которому к 2030 году технология появится в 41 городе. В 2024 году сети развернули в трех мегаполисах, в 2025 — еще в семи, а к 2030 они охватят все крупные агломерации страны. На эти цели из федерального бюджета выделено 21,5 млрд рублей в рамках проекта «Цифровые технологии».</p><p>Главное ограничение — зависимость от импортного оборудования. Чтобы решить эту проблему, «Ростех» создает консорциум отечественных производителей телеком-оборудования. Первые серийные образцы российских базовых станций 5G ожидаются не раньше 2026 года, что может скорректировать график внедрения технологии в регионах.</p><p>Согласно статистике, сегодня почти половина мирового населения (45%) имеет доступ к среднечастотному 5G — оптимальному по сочетанию скорости и покрытия. Этот показатель продолжает стремительно расти: аналитики прогнозируют, что к 2030 году зона действия 5G охватит уже 85% жителей планеты.</p><p><i>Особенно впечатляют темпы внедрения в Азии. В Китае, где первые коммерческие сети 5G появились еще в 2019 году, технология сейчас доступна 92% населения. Индия, начавшая массовое развертывание позже, в 2022 году, уже обеспечила покрытие для 91% граждан благодаря агрессивной инфраструктурной программе. Эти две страны вместе добавляют около 1,5 миллиона новых 5G-пользователей ежемесячно, формируя основной драйвер глобального роста.</i></p><p><i>На начало 2025 года 5G-сети в России функционируют в ограниченном тестовом режиме. Технология доступна в отдельных районах Москвы, включая деловой центр Москва-Сити и территорию Сколково, Санкт-Петербурга (преимущественно в центральных районах), а также в инновационных кластерах — Иннополисе и томском IT-парке.</i></p><h2>6G и будущее: технологический прорыв следующего десятилетия</h2><p>Пока операторы в РФ и других странах только начинают разворачивать сети 5G, мировые технологические лидеры уже делают первые шаги в эпоху 6G.</p><p><a href="https://skillbox.ru/media/code/v-yaponii-ustanovili-mirovoy-rekord-po-skorosti-peredachi-dannykh-402-tbits/">Лабораторные испытания</a>, проведенные учеными из Национального института информационных и коммуникационных технологий Японии (NICT), и промышленные тесты ведущих телеком-компаний Китая демонстрируют скорости, превышающие 400 Тбит/с в контролируемых условиях. Технологий шестого поколения откроют новую главу в развитии беспроводных коммуникаций. Эти тесты показали, что 6G — не просто эволюция существующих стандартов, а качественный скачок в передаче данных.</p><h3>Технические особенности 6G</h3><p>Основное отличие 6G от предыдущих поколений — использование терагерцового диапазона частот (от 100 ГГц до 10 ТГц). Скоростей будет достаточно для передачи 8K-видео в реальном времени или загрузки полнометражного фильма в 4K за 3-5 секунд. Для сравнения: максимальная скорость 5G в идеальных условиях не превышает 10 Гбит/с.</p><h3>Интеграция с искусственным интеллектом</h3><p>6G разрабатывается как «умная» сеть, где ИИ будет управлять ресурсами в реальном времени.</p><p>Компания Nokia Bell Labs <a href="https://www.nokia.com/bell-labs/collaboration-opportunities/d-a-p/nokia-bell-labs-and-tu-dresden/">уже тестирует</a> алгоритмы, которые:</p><ul><li>автоматически перераспределяют нагрузку между базовыми станциями;</li><li>оптимизируют энергопотребление устройств;</li><li>прогнозируют перегрузки сети за 15-20 минут до их возникновения.</li></ul><h3>Безопасность и квантовые технологии</h3><p>Китайские исследователи из Шанхайского университета <a href="https://www.cnews.ru/news/top/2025-06-05_v_kitae_ispytali_zashchitu_ot">добились значительных успехов</a> в квантовом шифровании. В 2024-2025 годах им удалось установить защищенное соединение на расстоянии до 300 км, хотя скорость передачи оставалась низкой (порядка килобит в секунду). Эти достижения открывают перспективы для безопасной передачи данных особой важности.</p><h3>Российские перспективы</h3><p>По мнению экспертов, коммерческий запуск 6G в России возможен не ранее 2030 года.</p><p>Основные проблемы:</p><ul><li>отсутствие собственной элементной базы для терагерцового оборудования;</li><li>ограниченный доступ к международным исследовательским консорциумам;</li><li>необходимость разработки новых стандартов с нуля.</li></ul><h3>Потенциальные применения</h3><p>Разработки в области 6G открывают путь к принципиально новым сценариям использования сетей связи:</p><ul><li>Голографическое телеприсутствие может произвести революцию в дистанционном образовании и телемедицине, позволяя врачам «находиться» в операционной на другом континенте и действовать с точностью до микрона.</li><li>Тактильный интернет с задержкой менее 1 мс создаст основу для точного дистанционного управления промышленными роботами и беспилотной техникой в реальном времени.</li><li>Нейроинтерфейсы могут быть использованы для прямого подключения к облачным сервисам.</li></ul><p>Однако массовое внедрение этих технологий потребует не только развития сетевой инфраструктуры, но и решения сложных этических и регуляторных вопросов, связанных с безопасностью и приватностью пользователей.</p><h2>Что мы потеряли и что приобрели</h2><p>Подводя итоги 20-летней эволюции сетевых технологий, можно выделить несколько ключевых моментов.</p><p>Безусловные достижения:</p><ul><li>скорость передачи данных увеличилась в тысячи раз;</li><li>интернет стал по-настоящему мобильным и доступным практически везде;</li><li>появились совершенно новые сервисы и возможности, о которых в 2003 году можно было только мечтать.</li></ul><p>Потери и новые вызовы:</p><ul><li>современные сети стали сложнее в настройке и обслуживании для рядовых пользователей;</li><li>вопросы безопасности превратились в постоянную «гонку вооружений» между хакерами и разработчиками;</li><li>возросла зависимость от инфраструктуры и крупных провайдеров.</li></ul><p>Технологии действительно ушли от проводов к воздуху, но этот переход потребовал новых знаний и создал сложности. 6G обещает еще более революционные изменения — вопрос только в том, успеет ли за ними инфраструктура и регуляторная база.</p>]]></content:encoded>
    </item>
    <item>
      <title>Выбираем российский хостинг в 2025: подборка на любой запрос</title>
      <link>https://tproger.ru/articles/vybiraem-rossijskij-hosting-v-2025--podborka-na-lyuboj-zapros</link>
      <comments>https://tproger.ru/articles/vybiraem-rossijskij-hosting-v-2025--podborka-na-lyuboj-zapros?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Денис Кудерин]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/vybiraem-rossijskij-hosting-v-2025--podborka-na-lyuboj-zapros</guid>
      <description><![CDATA[<p>В этом материале — семь проверенных российских хостингов для разных задач: от стартапа до корпоративного проекта. Каждый прошел тестирование на аптайм (время бесперебойной работы), безопасность и доступность поддержки.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/vybiraem-rossijskij-hosting-v-2025--podborka-na-lyuboj-zapros">Выбираем российский хостинг в 2025: подборка на любой запрос</a>»</p>]]></description>
      <category><![CDATA[Интернет]]></category>
      <category><![CDATA[API]]></category>
      <category><![CDATA[Тестирование]]></category>
      <category><![CDATA[Linux]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Git]]></category>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[Производительность]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Ruby]]></category>
      <category><![CDATA[MySQL]]></category>
      <category><![CDATA[PHP]]></category>
      <category><![CDATA[SQL]]></category>
      <category><![CDATA[Windows]]></category>
      <category><![CDATA[DevOps]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Tor]]></category>
      <category><![CDATA[Ruby on Rails]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[Node.js]]></category>
      <category><![CDATA[GitLab]]></category>
      <category><![CDATA[Docker]]></category>
      <category><![CDATA[Intel]]></category>
      <category><![CDATA[Windows Server]]></category>
      <category><![CDATA[Техподдержка]]></category>
      <category><![CDATA[Россия]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Дата-центр]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[CMS]]></category>
      <category><![CDATA[Бизнес]]></category>
      <category><![CDATA[VPS]]></category>
      <category><![CDATA[CI/CD]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 22 Jul 2025 12:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>В 2025 году российский хостинг переживает новый виток развития. После того как законодательство изменилось и добавились новые технологии, локальные провайдеры усилили инфраструктуру.</p><p>Теперь они предлагают решения, которые не хуже, а где-то даже и лучше международных аналогов и по надёжности, и по цене.</p><p>Посмотрим, кто из них есть в этом списке, и определим особенности хостингов для сайта.</p><h2>1. FirstVDS: профессиональные решения для любых проектов</h2><p><a href="https://firstvds.ru/">FirstVDS</a><a href="https://firstvds.ru/" rel="noopener noreferrer nofollow"></a> — хостинг-провайдер с опытом на рынке более 20 лет. Предлагают VPS и VDS с виртуализацией KVM для проектов любого размера. Все серверы работают на современном оборудовании. Трижды победитель в номинации «Хостер года» Национальной премии «ЦОДы.РФ».</p><p>Хостинг подойдет бизнесу любого масштаба: для любых сайтов — от визиток до высоконагруженных интернет-магазинов, для разработки и тестирования, для сервисов и других проектов. Отдельные решения для Битрикс, установка ОС семейства Linux и Windows Server.</p><h3>Особенности хостинга</h3><h4>Надёжность</h4><p>FirstVDS обеспечивает аптайм 99,97–99,99% в 2025 году, подтверждённый замерами (например, отклик из Москвы — 27 мс в апреле 2025). Серверы размещены в трёх дата-центрах уровня Tier III: два в Москве (IXcellerate и Web DC) и один в Амстердаме (euNetworks). Отказоустойчивый кластер Ceph гарантирует работу даже при сбоях точки или канала.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-07-16/80547603-f63a-4f2e-9bc1-332c9e061bf9.png" alt="" /></figure><h4>Инфраструктура</h4><p>Серверы работают на процессорах Intel Xeon и AMD EPYC (до 5,7 ГГц в линейке CPU.Турбо), с быстрыми NVMe-дисками объёмом до 8 ТБ и оперативной памятью DDR5 (до 768 ГБ в VDS Атлант). Это обеспечивает высокую производительность для ресурсоёмких задач, таких как Битрикс или высоконагруженные приложения.</p><h4>Гибкость</h4><p>Тарифы масштабируются: от базовых конфигураций (1 CPU, 1 ГБ RAM, 40 ГБ SSD) до мощных серверов (192 ядра, 768 ГБ RAM, 8 ТБ NVMe). Линейки:</p><ul><li>VDS Форсаж: AMD EPYC, до 128 ядер, 512 ГБ RAM, 4 ТБ NVMe, от 749 ₽/мес (Москва/Амстердам).</li><li>CPU.Турбо: AMD Ryzen до 5,7 ГГц, DDR5, от 624 ₽/мес (Москва).</li><li>VDS Атлант: отказоустойчивый, до 192 ядер, 8 ТБ NVMe, от 1619 ₽/мес (Москва).</li><li>VDS Storage: хранилище, от 704 ₽/мес (Москва).Горячее масштабирование (hot-resize) позволяет добавлять CPU, RAM или диск без перезагрузки.</li></ul><h4>Автоматизация</h4><p>Шаблоны для быстрого развёртывания: Django, Redmine, Tomcat, Teamspeak, Nextcloud, LAMP, LEMP, Forgejo Git, GitLab, Битрикс. Поддерживаются ОС Linux (Ubuntu, Alma, Debian, Rocky, CentOS, Oracle), FreeBSD, Windows Server. API и панель ispmanager 6 lite (бесплатно на месяц) упрощают управление.</p><h4>Безопасность</h4><p>Включена защита от DDoS-атак на сетевом уровне, BitNinja для защиты сервера и сайта, SSL-сертификаты GlobalSign. Доступны автобэкапы, снапшоты, Кибер-бэкап и объектное хранилище S3 для больших данных.</p><h4>Поддержка</h4><p>Круглосуточная поддержка 24/7 без чат-ботов, ответ до 15 минут через чат, личный кабинет или телефон. Бесплатно: помощь с активацией и первичной настройкой. Платно: установка ПО, администрирование. Экспертная линия для мониторинга и устранения сбоев.</p><h4>Бонусы</h4><ul><li>Тестовый период 3 дня.</li><li>Бесплатный перенос до 10 сайтов с другого хостера.</li><li>Скидки: 40% на первый месяц при оплате на 1/3/6 месяцев или 3 месяца бесплатно при оплате за год.</li><li>Лояльность: скидка 5–20% для клиентов от 5 лет.</li><li>Реферальная программа: 10% от расходов привлечённых клиентов для партнёра, 25% скидка для нового пользователя на первый месяц.</li><li>Домены: продление по цене регистрации.</li></ul><h3>Тарифы и условия</h3><p>Тестовый период 3 дня, после него подключаете один из основных тарифов:</p><ul><li>Линейка готовых конфигураций от 1 CPU, 1 Гб RAM, 40 Гб SSD-накопителя и от 219 руб/мес. до сервера с 8 CPU, 12 Гб RAM, 150 Гб NVMe-накопителя. Локация в РФ и Нидерландах.</li><li>VDS Форсаж: на AMD Epyc от 749 ₽/мес. Локации: РФ и Нидерланды.</li><li>CPU.Турбо: гибкая конфигурация на базе высокочастотных AMD Ryzen 9 от 624 ₽/мес. При покупке лицензии Битрикс дополнительная скидка 30% на 3 месяца аренды CPU.Турбо. Локация в РФ.</li><li>VDS Атлант: отказоустойчивый с автобэкапами от 1 619 ₽/мес. Локация: РФ.</li><li>VDS Storage: сервис как хранилище с гибкой конфигурацией от 704 ₽/мес. Локация: РФ</li></ul><p>Все тарифы доступны для тестирования по согласованию с отделом продаж. Для точного подбора конфигурации используйте гибкую настройку.</p><h2>2. UltraVDS: для малого бизнеса и стартапов</h2><p>Компания <a href="https://ultravds.com/">UltraVDS</a>, провайдер услуг виртуальных серверов (VPS/VDS), работает на рынке с 2014 года — предлагает решения для разных операционных потребностей. Сервисы UltraVDS можно использовать для развертывания торговых роботов, запуска чат-ботов, хостинга веб-сайтов, а также для создания FTP-хранилищ данных. Есть предложения для фрилансеров, цифровых агентств, корпоративных пользователей и стартапов, которым требуются функциональные инфраструктурные решения.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-07-16/edef3abb-6f77-4c69-be56-e22d90f379db.png" alt="" /></figure><h3>Технические особенности</h3><p>Серверы UltraVDS размещены в современном дата-центре, расположенном в Москве. Доступность сервиса (аптайм) составляет 99,98%, что обеспечивает высокую стабильность работы. Сетевая пропускная способность превышает 200 Мбит/с, при этом трафик предоставляется без ограничений.</p><figure><img src="https://media.tproger.ru/user-uploads/99854/2025-07-17/56ccb605-b64b-44f3-94b7-10e960541dda.png" alt="" /></figure><p>Система защиты от DDoS-атак способна обрабатывать трафик до 1,5 Тбит/с и поддерживает стабильность работы сервера даже при интенсивном внешнем воздействии. Лицензия на Windows Server входит в стоимость обслуживания в данном предложении. Это упрощает развертывание сервера: вам не нужно отдельно покупать и устанавливать лицензию. Плюс снижает общие операционные расходы для пользователей этой операционной системы.</p><h3>Тарифные планы</h3><p>Для новых пользователей UltraVDS предусмотрена возможность 3-дневного тестового периода, позволяющего оценить функциональность и производительность сервиса.</p><p>После тестового периода стоимость тарифов начинается от 119 рублей в месяц. На сайте доступен онлайн-калькулятор, позволяющий подобрать конфигурацию сервера и рассчитать итоговую стоимость.</p><figure><img src="https://media.tproger.ru/user-uploads/99854/2025-07-17/932d0cca-9f20-4723-8ae9-8d9c3218a08a.png" alt="" /></figure><p>Клиентам доступны различные варианты оплаты, включая ежемесячную систему без предоплаты. При авансовой оплате на период от 3 до 12 месяцев предоставляются скидки до 20%, размер которых зависит от выбранного срока. В случае досрочного прекращения использования сервиса, неиспользованный остаток средств возвращается на баланс пользователя.</p><h3>Поддержка и обслуживание</h3><p>Техническая поддержка UltraVDS работает круглосуточно, 7 дней в неделю. Среднее время ответа на запросы составляет до 15 минут. Связь со службой поддержки возможна по электронной почте и телефону, указанным на официальном сайте.</p><h2>3. RUVDS: 10 лет на рынке облачных решений</h2><p><a href="https://ruvds.com/ru-rub">RUVDS</a> — облачный провайдер, имеющий десятилетний опыт работы на рынке услуг виртуальных серверов (VPS/VDS). Является официальным партнером Huawei в России, работает по SLA. Компания предоставляет инфраструктурные решения, которые могут быть применены для широкого спектра задач, включая хостинг высоконагруженных интернет-магазинов, корпоративных порталов, игровых серверов, сложных backend-систем и чат-ботов.</p><p>Платформа RUVDS спроектирована для оптимизации процесса развертывания ресурсов. Одной из ее особенностей является маркетплейс, который позволяет быстро запускать серверы с предустановленным программным обеспечением. Это способствует ускорению старта проектов, снижая потребность в ручной настройке распространенных CMS, игровых серверов и сред разработки.</p><figure><img src="https://media.tproger.ru/user-uploads/99854/2025-07-17/aed25b96-b39b-4be9-b875-dc695645ef24.png" alt="" /></figure><h3>Тарифная политика и варианты оплаты</h3><p>RUVDS предлагает различные тарифные планы. Например, стоимость конфигурации Linux-сервера (1 CPU, 512 МБ RAM, 10 ГБ HDD, 1 IPv4) начинается от 139 ₽/месяц. Это может быть рассмотрено как экономичное решение для запуска небольших проектов и проведения тестирования.</p><p>Клиентам доступны разные опции оплаты:</p><ol><li>Ежемесячные платежи или предоплата на срок от 3 до 12 месяцев, при которой предоставляются скидки до 20%, зависящие от продолжительности периода.</li><li>Для проектов с динамической нагрузкой предусмотрена посекундная тарификация, оплата по которой взимается только за фактически использованные ресурсы. Неиспользованный остаток средств в рамках этой модели возвращается на баланс пользователя</li></ol><p>Дополнительно, до конца 2025 года панель управления ISP Manager для сервера и сайта предоставляется без дополнительной платы при создании любого VPS.</p><h3>Глобальная инфраструктура и стабильность</h3><p>Инфраструктура включает 17 дата-центров уровня Tier III, расположенных по всему миру. Это один из самых больших показателей по количеству геолокаций среди российских провайдеров. Для работы используются корпоративное оборудование и накопители (HDD, SSD, NVMe), чтобы обеспечить стабильную работу и производительность размещенных проектов.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-07-16/3f3c970e-820f-4f0e-9b53-f227950e298b.png" alt="" /></figure><h3>Поддержка клиентов и доступные ресурсы</h3><p>Техническая поддержка RUVDS доступна круглосуточно, 7 дней в неделю. Среднее время ответа на запросы через тикет-систему или онлайн-чат составляет 15 минут. Клиентам предоставляются полные административные права и консультации по вопросам запуска и настройки серверов. Для самостоятельного изучения доступна база знаний, включающая инструкции и руководства.</p><figure><img src="https://media.tproger.ru/user-uploads/99854/2025-07-17/c086a963-2d51-4ada-86c8-0c1704cf8230.png" alt="" /></figure><h3>Безопасность и масштабирования</h3><p>В контексте безопасности данных, RUVDS предлагает несколько решений:</p><p>- Встроенная защита от DDoS-атак, способствующая поддержанию бесперебойной работы серверов при внешнем воздействии.</p><p>- Стандартный IPv4-адрес включен в стоимость каждой виртуальной машины, с опцией аренды дополнительных IP-адресов.</p><p>- API, соответствующий OpenAPI 3.0.0, предоставляет возможности для интеграции и автоматического масштабирования серверных ресурсов в зависимости от нагрузки.</p><p>- Компания официально подтверждает соответствие требованиям ФСТЭК и ФЗ-152 по защите персональных данных, что обеспечивает соблюдение соответствующих законодательных норм.</p><h2>4. McHost: решения для бизнеса разного масштаба</h2><p><a href="https://mchost.ru/"> McHost</a> предоставляет комплексные хостинговые решения, включая виртуальный хостинг и VPS/VDS с NVMe-накопителями. Сервис поддерживает популярные CMS (WordPress, Joomla, 1С-Битрикс) с оптимизированными настройками и автоматической установкой через панель управления.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-07-16/2ccc459a-8df5-41b6-bbf9-b751bed2e757.png" alt="" /></figure><p>McHost ориентирован на широкий круг клиентов:</p><ul><li>владельцы сайтов-визиток, блогов и лендингов — благодаря низким тарифам и полному набору опций;</li><li>интернет-магазины с небольшой нагрузкой — тарифы с SSD-накопителями и автоматическим резервным копированием обеспечивают стабильную работу;</li><li>разработчики, которым нужны<br />VPS/VDS с root-доступом — работают серверы на KVM-виртуализации с ОС Linux и Windows;</li><li>госучреждения и компании,<br />работающие с персональными данными — соответствие 152-ФЗ и размещение в дата-центрах Tier III в Москве.</li></ul><h3>Особенности сервиса</h3><p>McHost поддерживает стабильную работу с аптаймом 99.9% за счет размещения оборудования в дата-центрах уровня Tier III — в Москве и Нидерландах.</p><p>Сервис предоставляет защиту от DDoS-атак, автоматическое резервное копирование раз в два дня с хранением данных в течение 30 дней для виртуального хостинга и 14 дней для VPS, а также поддержку российских криптографических стандартов. Клиентам доступны различные варианты размещения: от виртуального хостинга с SSD (от 157.5 ₽/мес) до выделенных серверов с NVMe-накопителями.</p><h3>Технические параметры и условия</h3><p>Инфраструктура McHost базируется на серверах Dell с NVMe-накопителями и процессорами Intel Xeon (частота ядер от 2.35 ГГц). Для виртуального хостинга используется CloudLinux с технологией CageFS, обеспечивающей изоляцию аккаунтов. Поддержка российских ОС («Альт») подтверждена для VPS-тарифов.</p><p>В техподдержку можно обратиться по телефону, через тикет или в Telegram-боте. Время ответа — до 10 минут.</p><p>Текущие тарифы:</p><ul><li>Виртуальный хостинг: от 157 ₽/мес<br />(3 ГБ SSD, 1 сайт).</li><li>VPS: от 396 ₽/мес (15 ГБ SSD, 1<br />ядро CPU).</li><li>Выделенные серверы: от 3 000 ₽/мес<br />(32 ГБ RAM, 2×1 ТБ HDD).</li></ul><h2>5. UFO Hosting: VPS/VDS и выделенные серверы с портом до 10 Гбит/с и безлимитным трафиком</h2><p><a href="https://ufo.hosting/">UFO Hosting </a>предлагает VPS/VDS и выделенные серверы на партнёрской инфраструктуре IXcellerate (Tier III). В портфолио — недорогие виртуальные машины и серверы с портом 10 Gbps для проектов, которым нужна стабильность без завышенных цен.</p><p>Сервис подходит для пользователей разных масштабов: от фрилансеров и веб‑студий до средних и крупных компаний. Для DevOps‑специалистов доступны API и инструменты автоматизации.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-08-19/3cfc6e79-bab0-48ab-862b-f523c0ad24e8.png" alt="" /></figure><h3>Основные сценарии использования</h3><ul><li>корпоративные сайты, CRM‑системы и веб‑приложения;</li><li>аналитические сервисы и SaaS‑продукты;</li><li>инфраструктура для разработки и тестирования;</li><li>задачи фрилансеров, агентств и digital‑команд.</li></ul><h3>Формат работы, особенности и интеграции</h3><p>Серверы установлены в российском дата‑центре Tier III (IXcellerate), что означает резервирование по питанию и каналам связи. Заявленный аптайм — 99,98 %. Поддержка работает круглосуточно в тикетах, чате и по телефону; среднее время ответа 5–10 минут.</p><p>Сервис UFO Hosting делает акцент на безопасности и гибкости. Есть сеть с защитой от DDoS, возможность горячего расширения ресурсов, автоматическое развёртывание из шаблонов и API для интеграции. Поддерживаются популярные фреймворки и CMS, есть интеграции с GitLab, Telegram и DockerHub. Бэкапы, снапшоты и резервирование входят в стандартный набор, так что восстанавливать тестовую среду не придётся вручную.</p><p>В панели управления можно автоматически установить популярные CMS, панели управления, хранилища и DevOps‑инструменты. Это экономит время на настройку и подходит тем, кто не хочет поднимать всё с нуля.</p><figure><img src="https://media.tproger.ru/user-uploads/99854/2025-08-06/e4433ae3-898b-4c14-90c1-2a4bbb8b13a1.png" alt="" /></figure><h3>Условия использования и тарифы</h3><p>Базовые конфигурации начинаются от 577 руб./месяц. Заявленная скорость порта — до 10 Gbps, что подходит для проектов, где много трафика.</p><p>Есть возможность бесплатно попробовать сервис присутствует, но предоставляется по запросу в поддержку, а при оплате на срок от трёх месяцев действуют скидки, а также регулярно проводятся акции: это поможет оптимизировать бюджет.</p><figure><img src="https://media.tproger.ru/user-uploads/99854/2025-08-06/1e2e0191-1194-4a60-a612-fcac5d8cf76d.png" alt="" /></figure><p>В целом, UFO Hosting выглядит как практичное решение для тех, кому нужны производительные VPS/VDS и выделенные серверы в России. При выборе стоит оценить, насколько конфигурации подходят под конкретные нагрузки и есть ли необходимость в интеграциях из коробки.</p><h2>6. Timeweb: хостинг для веб-проектов</h2><p><a href="https://timeweb.com/">Timeweb </a>предоставляет услуги хостинга для различных типов веб-проектов. Сервис поддерживает популярные CMS, включая WordPress, 1C-Битрикс и Joomla, что делает его подходящим как для личных блогов, так и для корпоративных сайтов.</p><p>Платформа использует собственную панель управления с инструментами для работы с сайтами, базами данных и резервными копиями. Ежедневное автоматическое резервное копирование с хранением данных до 30 дней включено во все тарифные планы. Базовая защита от DDoS-атак доступна для всех клиентов без дополнительной платы.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-07-16/b443bfef-bccb-4672-bd55-cb67a1146bc3.png" alt="" /></figure><p>Инфраструктура Timeweb размещена в дата-центрах уровня Tier III в России (Санкт-Петербург) и Казахстане (Алматы). Гарантированный показатель uptime составляет 99.98%. Поддерживаются современные технологии: PHP версий от 5.3 до 8.4, MySQL от 5.6 до 8.0, а также Perl, Python, SSH, FTP и Cron.</p><p>Тарифные планы:</p><ul><li>Year+: от 164 ₽/мес (2 сайта, 15<br />ГБ NVMe, 2 БД);</li><li>Optimo+: от 248 ₽/мес (15 сайтов,<br />40 ГБ NVMe, безлимитные БД);</li><li>Century+: от 347 ₽/мес (35 сайтов,<br />50 ГБ NVMe, безлимитные БД);</li><li>Millennium+: от 482 ₽/мес (60<br />сайтов, 60 ГБ NVMe, безлимитные БД).</li></ul><p>Все тарифы включают бесплатный SSL-сертификат, 10 ГБ почтовой квоты с неограниченным количеством ящиков и DNS-хостинг. При оплате годового тарифа предоставляется домен в зонах .RU/.РФ в подарок.</p><p>Техническая поддержка доступна круглосуточно через онлайн-чат, тикет-систему и по телефону. Среднее время ответа не превышает 15 минут. Новые клиенты могут протестировать сервис бесплатно в течение пробного периода.</p><h2>7. Reg.ru: комплексные решения для сайтов и доменов</h2><p><a href="https://www.reg.ru/">Reg.ru </a>сочетает услуги хостинга и регистрации доменов, что упрощает управление веб-проектами. Компания работает с 2005 года, имеет статус аккредитованного регистратора доменных имён в зонах .RU и .РФ.</p><h3>Функциональные возможности</h3><p>Платформа предоставляет доступ к трём панелям управления: ISPmanager, cPanel и Plesk. Это позволяет выбрать наиболее удобный интерфейс для работы с сайтами. Все тарифы включают бесплатный SSL-сертификат от Let’s Encrypt, который автоматически устанавливается при создании сайта.</p><p>Начинающим пользователям доступен конструктор сайтов с готовыми шаблонами. Поддерживаются популярные CMS, включая WordPress, Joomla и 1С-Битрикс. Ежедневное резервное копирование данных с хранением копий в течение 30 дней входит в стандартный набор услуг.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-07-16/c1ac0c6a-51ae-4ae5-8875-f18a01ffdc2c.png" alt="" /></figure><h3>Техническая инфраструктура</h3><p>Серверы размещены в дата-центрах уровня Tier III в Москве. Средний показатель uptime составляет 99.9%, что подтверждается ежемесячной статистикой. Подключение к сети осуществляется по выделенным каналам со скоростью до 1 Гбит/с на выделенных серверах.</p><h3>Поддержка и тарифы</h3><p>Техническая поддержка доступна 24/7 через онлайн-чат и тикет-систему. Среднее время ответа составляет 15-20 минут. Для срочных вопросов можно обратиться по телефону.</p><p>Тарифы — от 151 ₽/мес (7 ГБ SSD, 15 сайтов). При регистрации домена в зонах .RU или .РФ предоставляется скидка на другие доменные имена.</p><h2>8. Спринтхост: хостинг с персональным подходом</h2><p><a href="https://sprinthost.ru/">Sprinthost</a> предлагает услуги хостинга с акцентом на индивидуальную поддержку клиентов. Сервис работает с 2011 года и специализируется на VPS-решениях для различных веб-проектов.</p><h2>Особенности сервиса</h2><p>Компания предоставляет персонального менеджера для каждого клиента, который помогает с настройкой сервера и решением технических вопросов. А если вы остались недовольны услугами, то в течение 30 дней сервис вернёт деньги. Sprinthost проводит бесплатные обучающие вебинары по DevOps и администрированию серверов.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-07-16/7acc90d0-655a-4cda-906f-a7e5ad4f9a8e.png" alt="" /></figure><h3>Технические характеристики и тарифы</h3><p>Инфраструктура размещена в дата-центрах Москвы и Санкт-Петербурга с аптаймом 99.9%. Поддерживаются современные технологии разработки, включая Ruby on Rails, Node.js, Python и Docker. Все серверы используют SSD-накопители с гарантированной скоростью чтения/записи.</p><p>Тарифные планы:</p><ul><li>Start: 290 ₽/мес (1 ядро, 1 ГБ<br />RAM, 15 ГБ SSD);</li><li>Turbo: 1 900 ₽/мес (4 ядра, 8 ГБ<br />RAM, 100 ГБ NVMe).</li></ul><h3>Поддержка</h3><p>Техническая помощь доступна 24/7 через тикет-систему и онлайн-чат. Среднее время ответа составляет 10-15 минут. Для корпоративных клиентов предусмотрена приоритетная поддержка по телефону.</p><h2>Как выбрать хостинг в 2025 году</h2><p>Выбор хостинга зависит от типа проекта и его требований. Для небольших сайтов и блогов подойдет виртуальный хостинг с поддержкой популярных CMS — важно проверить наличие автоматических бэкапов и базовой защиты от DDoS. Если проект связан с обработкой персональных данных, убедитесь, что провайдер соответствует 152-ФЗ и использует сертифицированное оборудование.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-08-20/3a0b1d01-c4e0-424d-86b2-8988d43bcdb1.png" alt="" /></figure><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-08-20/b3c26558-3a50-4eb3-a9f3-89c899fd9e59.png" alt="" /></figure><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-08-20/3408c453-b5db-44ce-b6ab-f1b3bcb5abd1.png" alt="" /></figure><p>Для высоконагруженных сервисов и интернет-магазинов лучше рассматривать VPS или выделенные серверы. Обратите внимание на тип накопителей (SSD/NVMe), возможность масштабирования ресурсов и аптайм дата-центров (рекомендуется от 99.9%).</p><p>Перед покупкой протестируйте сервис — большинство провайдеров предлагают пробный период. Проверьте скорость работы панели управления и отзывчивость поддержки. Не забывайте о резервном копировании: даже если хостинг предоставляет эту услугу, дублируйте критически важные данные самостоятельно.</p><p>Главное правило — выбирайте решение, которое покрывает текущие потребности проекта. Важно, чтобы конфигурацию можно было оперативно менять по мере роста запросов и масштабирования бизнеса. Технологии меняются быстро, и гибкость конфигурации часто важнее сиюминутной экономии.</p><h2>FAQ</h2><h3>Что такое виртуальный хостинг и когда его выбирать?</h3><p>Виртуальный хостинг — это экономичное решение, где один физический сервер делит ресурсы между множеством сайтов. Подходит для небольших проектов с низкой нагрузкой: личных блогов, лендингов или стартовых страниц.</p><p>Преимущества: низкая стоимость, простота управления через панели, автоматические обновления и базовая защита. Минусы: ограниченные ресурсы; производительность зависит от соседних сайтов; минимальный контроль над настройками.</p><h3>Что такое VPS/VDS и для каких проектов он подходит?</h3><p>VPS (Virtual Private Server) или VDS — это виртуальный сервер с выделенными ресурсами (процессор, память, диск), предоставляющий доступ для полной настройки. Идеален для проектов среднего масштаба: интернет-магазинов, API, SaaS, чат-ботов, корпоративных порталов или приложений с умеренным трафиком.</p><p>Преимущества: гибкость конфигураций, выбор ОС, изоляция ресурсов. Минусы: требует базовых навыков администрирования, стоимость выше, чем у виртуального хостинга.</p><h3>Что такое выделенный сервер и когда его использовать?</h3><p>Выделенный сервер — это физический сервер, полностью зарезервированный под ваш проект. Подходит для высоконагруженных систем: крупных интернет-магазинов, игровых платформ, корпоративных ERP или аналитических сервисов с большим трафиком.</p><p>Преимущества: максимальная производительность, полный контроль, высокая отказоустойчивость. Минусы: высокая цена, сложность настройки и обслуживания.</p><h3>В чём основные различия между виртуальным хостингом, VPS и выделенным сервером?</h3><p>Виртуальный хостинг — самый дешёвый и простой, но ресурсы делятся между пользователями, что ограничивает производительность (до 1000–2000 посетителей в сутки).</p><p>VPS обеспечивает выделенные ресурсы и гибкость, справляясь с нагрузкой до 5000–10 000 пользователей в сутки.</p><p>Выделенный сервер — максимум мощности для пиков свыше 10 000 пользователей, но требует значительных затрат и технических знаний.</p><p>Выбор зависит от масштаба: виртуальный для старта, VPS для роста, выделенный для enterprise.</p><h3>Нужны ли навыки администрирования для хостинга?</h3><p>Для виртуального хостинга навыки не нужны — управление идёт через интуитивные панели, а провайдеры обеспечивают обновления и базовую поддержку. Для VPS желательны базовые знания (настройка ОС, установка ПО), хотя многие провайдеры предлагают помощь. Для выделенного сервера навыки администрирования необходимы, так как вы полностью отвечаете за сервер, хотя провайдеры могут предлагать платное администрирование.</p>]]></content:encoded>
    </item>
    <item>
      <title>DRM, ИИ и форензика: гид по защите видеоконтента от пиратов и хакеров</title>
      <link>https://tproger.ru/articles/drm--ii-i-forenzika--gid-po-zashhite-videokontenta-ot-piratov-i-hakerov</link>
      <comments>https://tproger.ru/articles/drm--ii-i-forenzika--gid-po-zashhite-videokontenta-ot-piratov-i-hakerov?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Татьяна Жукова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/drm--ii-i-forenzika--gid-po-zashhite-videokontenta-ot-piratov-i-hakerov</guid>
      <description><![CDATA[<p>Вместе с Александром Павлычевым, сооснователем видеохостинга Kinescope, рассмотрим, как защитить видеоконтент от киберугроз и пиратства.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/drm--ii-i-forenzika--gid-po-zashhite-videokontenta-ot-piratov-i-hakerov">DRM, ИИ и форензика: гид по защите видеоконтента от пиратов и хакеров</a>»</p>]]></description>
      <category><![CDATA[Интернет]]></category>
      <category><![CDATA[API]]></category>
      <category><![CDATA[Android]]></category>
      <category><![CDATA[Git]]></category>
      <category><![CDATA[Apple]]></category>
      <category><![CDATA[Опрос]]></category>
      <category><![CDATA[Google]]></category>
      <category><![CDATA[PHP]]></category>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[Windows]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Opera]]></category>
      <category><![CDATA[HR]]></category>
      <category><![CDATA[Xbox]]></category>
      <category><![CDATA[Сервисы]]></category>
      <category><![CDATA[Firefox]]></category>
      <category><![CDATA[Маркетинг]]></category>
      <category><![CDATA[Хакеры]]></category>
      <category><![CDATA[YouTube]]></category>
      <category><![CDATA[Взлом]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[Kubernetes]]></category>
      <category><![CDATA[Библиотеки]]></category>
      <category><![CDATA[Машин]]></category>
      <category><![CDATA[аналитик]]></category>
      <category><![CDATA[1C]]></category>
      <category><![CDATA[Бизнес]]></category>
      <category><![CDATA[CDN]]></category>
      <category><![CDATA[Стриминговые сервисы]]></category>
      <category><![CDATA[Видеоконтент]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 21 Jul 2025 14:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Пиратство
и кибератаки ежегодно обходятся бизнесу в миллиарды долларов, а утечки
видеоконтента угрожают не только стриминговым платформам, но и компаниям,
использующим видео для обучения, маркетинга или внутренних процессов. Как
выстроить защиту видеоконтента от кражи? 
Александр Павлычев, сооснователь видеохостинга Kinescope, рассказывает
про многоуровневую стратегию, DRM, цифровую форензику и ИИ-мониторинг, которые
помогут разработчикам и бизнесу остановить пиратов и хакеров.</p><p>Цифровой контент — актив, который требует
защиты не меньше, чем банковские данные. Многие привыкли, что свежий сериал или
долгожданный фильм оказывается в сети за неделю до премьеры или в день релиза,
а дорогостоящий курс можно скачать бесплатно на «складчинах». В 2024 году
пиратство нанесло российским правообладателям ущерб в <a href="https://www.tadviser.ru/index.php/%D0%A1%D1%82%D0%B0%D1%82%D1%8C%D1%8F:%D0%9F%D0%B8%D1%80%D0%B0%D1%82%D1%81%D0%BA%D0%B8%D0%B5_%D1%81%D0%B0%D0%B9%D1%82%D1%8B_%D0%B8_%D0%B7%D0%B0%D1%89%D0%B8%D1%82%D0%B0_%D0%B0%D0%B2%D1%82%D0%BE%D1%80%D1%81%D0%BA%D0%BE%D0%B3%D0%BE_%D0%BF%D1%80%D0%B0%D0%B2%D0%B0_%D0%B2_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8#.2A.D0.9E.D0.B1.D1.8A.D0.B5.D0.BC_.D1.80.D1.8B.D0.BD.D0.BA.D0.B0_.D0.BE.D0.BD.D0.BB.D0.B0.D0.B9.D0.BD-.D0.BF.D0.B8.D1.80.D0.B0.D1.82.D1.81.D1.82.D0.B2.D0.B0_.D0.B2_.D0.A0.D0.BE.D1.81.D1.81.D0.B8.D0.B8_.D1.81.D0.BD.D0.B8.D0.B7.D0.B8.D0.BB.D1.81.D1.8F__.D0.BD.D0.B0_4.2C2.25_.D0.B4.D0.BE_.E2.82.BD3.2C36_.D0.BC.D0.BB.D1.80.D0.B4">3,36 млрд</a> рублей, а глобальные потери
медиаиндустрии превысили <a href="https://www.forbes.com/sites/niallmccarthy/2019/06/26/pirated-video-gets-viewed-over-200-billion-times-a-year-infographic/">$71 миллиард</a>. Утечки контента происходят через
уязвимости в системах доставки, запись экрана или взлом серверов.</p><p>Но угрозы безопасности видеконтента не
ограничиваются пиратством. Кибератаки добавляют новый уровень сложности: в
отличие от пиратов, которые стремятся монетизировать контент через нелегальное
распространение, хакеры могут преследовать иные цели — от вымогательства до
саботажа инфраструктуры. Например, говорить, что в их распоряжении есть
интимные видеозаписи жертвы (ещё лучше, если это CEO известной компании) и
вымогать крупную сумму денег. Или <a href="https://www.forbes.ru/tekhnologii/465207-servis-poprostu-udalilsa-kak-vzlomali-rutube-i-cto-budet-s-videohostingom-dal-se">взломать Rutube</a> и саботировать инфраструктуру
сервиса, как это было в 2022 году. Киберугрозы также могут включать DDoS-атаки,
эксплуатацию уязвимостей в API или кражу пользовательских данных, что приводит
к последствиям:</p><ul><li>Коммерческие риски: снижение выручки, подрыв
бизнес-модели, что особенно актуально для премиальных и эксклюзивных материалов
и сервисов.</li><li>Правовые последствия: иски от правообладателей
или штрафы за утечку персональных данных.</li><li>Репутационные издержки: утрата доверия
пользователей и партнеров, особенно если платформа позиционируется как
безопасная.</li></ul><p>Важно понимать, что защита должна
учитывать не только копирование контента, но и целостность всей экосистемы — от
API до клиентского плеера.</p><h2>Многоуровневая защита: из
чего она состоит</h2><p>Механизмы пиратства
и кибератак многогранны: злоумышленники используют разные методы, от простого
скачивания до сложных схем обхода защиты. Поэтому стратегия должна
включать несколько уровней.</p><p><b>1. Защита от несанкционированного
доступа и копирования</b></p><p>Первый барьер —
ограниченный доступ к контенту:</p><ul><li>Шифрование: AES-128 или AES-256 для защиты видеопотоков.</li><li>Авторизация: токены JWT или OAuth для проверки прав пользователей.</li><li>Системы управления цифровыми правами (DRM) устанавливают ограничения на воспроизведение контента — по устройствам, географическому положению и времени. Если отсутствует соответствующий ключ шифрования, выдаваемый лицензионным сервером, воспроизведение может быть заблокировано.</li></ul><p><b>2. Пиратские копии</b></p><p>Даже если контент
уже украден, важно оперативно выявить его нелегальное распространение.
Технологии AI-мониторинга
и цифровой форензики сканируют даркнет, соцсети и пиратские сайты. ИИ
распознает видео по фрагментам, даже если оно перекодировано.</p><p><b>Технический нюанс</b>: ИИ-системы используют сверточные нейросети (CNN) для анализа визуальных и
аудиохарактеристик. Разработчикам стоит интегрировать такие решения через API, например, от Google Cloud Vision или специализированных
вендоров.</p><p><b>3. Отслеживание источника утечки</b></p><p>Ключевой вопрос при
утечке: кто и как получил доступ к контенту? Водяные знаки и «цифровые
отпечатки» (fingerprinting) позволяют встраивать уникальные идентификаторы в видеофайлы. Fingerprinting, например, создает хэши
аудио- и видеофрагментов для поиска копий.</p><p><b>Технический нюанс</b>: сессионные водяные знаки добавляют задержку в
стриминг. Проблема решается предварительной обработкой сегментов для HLS/DASH-протоколов.</p><p><b>4. Противодействие пиратским
ресурсам</b></p><p>Удалить копии после
обнаружения можно через:</p><ul><li>Обращение в РКН и к платформе, где появилось видео. Если реакции от платформы нет, РКН или провайдер хостинга заблокируют сайт по запросу.</li><li>Автоматическую блокировку ссылок через API хостингов.</li><li>Юридическое давление на пиратские платформы.</li></ul><h2>Технологии против
пиратов: DRM, ИИ, водяные знаки и «цифровые
отпечатки»</h2><p>Современные решения
для защиты видео объединяют несколько технологий, каждая из которых решает
определенные задачи. Рассмотрим их подробнее.</p><p><b>DRM</b><b> (управление цифровыми правами)</b></p><p>DRM-системы шифруют контент и управляют лицензиями на доступ к видеопотоку. DRM защищает контент на
уровне клиента и сервера, предотвращая неавторизованный доступ и перехват.
Такие системы интегрируются в плееры и платформы и показывают контент только
авторизованным пользователям.</p><p>DRM-системы опираются на три ключевых компонента:</p><ol><li>Лицензионный сервер отвечает за выдачу и проверку ключей расшифровки контента.</li><li>Клиентская часть DRM (Content Decryption Module, CDM) интегрирована в браузер/плеер.</li><li>Упаковщик контента (Packager) подготавливает видеопотоки для защищенной доставки.</li></ol><p>Но есть техническая проблема совместимости — DRM-системы неоднородны по платформам:</p><ul><li>Widevine (Android, Chrome, Firefox, Opera);</li><li>PlayReady (Windows, Xbox, некоторые Smart TV);</li><li>FairPlay (экосистема Apple);</li><li>WisePlay DRM (экосистема Huawei).</li></ul><p>Решение — мульти-DRM упаковщики, поддерживающие все стандарты через единую интеграцию. Используйте библиотеки, например, Shaka Player, для упрощенной интеграции мульти-DRM.</p><p><b>Водяные знаки (Digital</b><b> Watermarking</b><b>)</b></p><p>Водяные знаки —
метки, встроенные в видео, которые содержат информацию о правообладателе или
пользователе, что помогает отследить источник утечки, если контент появляется
на пиратских ресурсах. Они могут быть видимыми или незаметными: первые
отпугивают пиратов, а вторые помогают отследить источник утечки.</p><p><b>Отслеживание «цифровых следов» (Fingerprinting</b><b>)</b></p><p>В отличие от водяных
знаков, которые внедряются в контент, технология фингерпринтинга генерирует
хэши фрагментов видео и аудио для поиска копий в сети без модификации самих
файлов. Это позволяет находить пиратские копии, даже если они были изменены
(например, перекодированы или обрезаны). Работает это так: система создает
«цифровой отпечаток» оригинального видео и затем автоматически сканирует
интернет в поисках материалов с похожими характеристиками.</p><p>Например, YouTube Content ID верифицирует права на
материалы и затем в автоматическом режиме отслеживает загрузки на платформе.
Когда пользователь загружает видео, Content ID сравнивает его с базой отпечатков, и, если
обнаруживает совпадение с материалами, может заблокировать ролик за нарушение
авторских прав, перенаправить доход от рекламы правообладателю или уведомить
владельца контента.</p><p><b>Цифровая форензика</b></p><p>Цифровая форензика —
это сбор и исследование данных для раскрытия цифровых преступлений. Проще
говоря, цифровая криминалистика. Специалисты-форензики анализируют источники
пиратских копий через анализ метаданных, характеристик кодирования, артефактов
сжатия и других цифровых «улик», чтобы выявить, как и когда произошла утечка.
Например, уникальные артефакты в H.264-кодеке могут указать на устройство, с
которого записали экран.</p><p><b>AI</b><b>-мониторинг</b></p><p>Искусственный
интеллект ускоряет поиск пиратских копий через анализ огромных массивов данных
в интернете с помощью компьютерного зрения и машинного обучения. ИИ-системы
мониторинга используют сверточные нейросети (CNN), которые способны распознавать визуальные
образы и алгоритмы, такие как Mel-Frequency Cepstral Coefficients (MFCC) (используется для распознавания речи). С их
помощью можно находить копии даже при перекодировании или обрезке.</p><p>Уже существует
множество готовых решений на основе ИИ. Например, Red Points постоянно мониторит соцсети, видеоплатформы и
пиратские сайты с применением машинного обучения, компьютерного зрения и
распознавания изображений, а при обнаружении совпадений автоматически
отправляет запросы на удаление через API. Piracymeter и Bytescare анализируют списки доменов, поисковые результаты Google и торрент-трекеров. Bytescare также может
находить пиратские копии ПО.</p><p>Такие решения
быстрее ручного мониторинга и больше подходят для больших каталогов видео. Они
могут работать автономно или подключаться через REST API, но требуют настройки для снижения ложных
срабатываний.</p><h3>Пример комплексного подхода к защите видео</h3><p>Для защиты
видеоконтента компании всё чаще используют решения, которые сочетают несколько
технологий. Например, разработчик систем безопасности GS Labs совместно с видеохостингом Kinescope создал <a href="https://www.cnews.ru/news/line/2025-04-30_gs_labs_i_kinescope_realizuyut_sovmestnye">систему</a>, интегрирующую DRM, водяные знаки и цифровую форензику. Она
позволяет шифровать контент, встраивать уникальные идентификаторы для
отслеживания утечек и анализировать источники пиратских копий. Такое решение
работает как в облаке, что даёт стриминговым платформам масштабируемость, так и
локально, что важно для компаний с собственной инфраструктурой.</p><h2>Модели внедрения технологий защиты видеоконтента</h2><p>Выбор модели
внедрения зависит от потребностей компании, ее бюджета и технических
возможностей. Рассмотрим три основные модели.</p><h2>Локальные
решения (on-premises)</h2><p>Локальные системы
устанавливаются на серверах компании, что подходит для крупных медиакомпаний с
собственной инфраструктурой. Их преимущества — полный контроль над данными и
независимость от внешних провайдеров. Из минусов — высокие затраты на
оборудование, обслуживание и персонал.</p><h2>Облачные/SaaS-решения</h2><p>Облачные платформы
минимизируют затраты, предлагают гибкость и масштабируемость. Они идеальны для
стартапов и онлайн-кинотеатров, которые не хотят инвестировать в собственные
серверы. SaaS-модель
позволяет быстро внедрить защиту, минимизируя затраты на инфраструктуру.</p><p><b>Совет</b>: используйте облачные решения с SOC 2 или ISO 27001 сертификацией для защиты данных.</p><h2>Гибридные
модели</h2><p>Гибридные решения
сочетают локальные и облачные компоненты. Например, компания может хранить
критически важные данные на своих серверах, а для мониторинга и аналитики
использовать облачные сервисы. Такая модель обеспечивает баланс между контролем
и масштабируемостью, но требует внимательной интеграции.</p><p><b>Совет: </b>используйте Kubernetes для оркестрации гибридных систем и минимизации downtime.</p><h2>Что стоит сделать прямо сейчас, чтобы защитить видеоконтент</h2><ol><li>Подобрать постоянное комплексное решение: исследуйте вендоров и технологии на рынке.</li><li>Провести аудит инфраструктуры: проверьте уязвимости в CDN, API и плеере, например, с помощью OWASP ZAP.</li><li>Интегрировать DRM: выберите мульти-DRM решение, совместимое с Widevine, PlayReady и FairPlay.</li><li>Внедрить мониторинг: подключите ИИ через API для поиска копий.</li><li>Провести пентесты в BurpSuite, симулируя пиратские атаки и взлом.</li><li>Отработать реакцию на инциденты.</li></ol><p>Если вы тоже
работаете с видео и хотите усилить его безопасность, начните с анализа текущих
процессов: какие технологии уже задействованы, где есть пробелы и какие решения
помогут закрыть их в первую очередь. Такой системный подход создаст барьер
против киберугроз, нелегального копирования и распространения видеоконтента.</p>]]></content:encoded>
    </item>
    <item>
      <title>n8n: установка, настройка и интеграция с Python, Node.JS и PHP</title>
      <link>https://tproger.ru/articles/n8n--ustanovka--nastrojka-i-integraciya-s-python--node-js-i-php</link>
      <comments>https://tproger.ru/articles/n8n--ustanovka--nastrojka-i-integraciya-s-python--node-js-i-php?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Кирилл Косолапов]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/n8n--ustanovka--nastrojka-i-integraciya-s-python--node-js-i-php</guid>
      <description><![CDATA[<p>Подробный туториал по установке и настройки n8n. Примеры интеграции с Python, Node.JS и PHP и взаимодействия с LLM Mistral AI.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/n8n--ustanovka--nastrojka-i-integraciya-s-python--node-js-i-php">n8n: установка, настройка и интеграция с Python, Node.JS и PHP</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[C#]]></category>
      <category><![CDATA[Опрос]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[JSON]]></category>
      <category><![CDATA[PHP]]></category>
      <category><![CDATA[iOS]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Microsoft]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[Opera]]></category>
      <category><![CDATA[Node.js]]></category>
      <category><![CDATA[HR]]></category>
      <category><![CDATA[Telegram]]></category>
      <category><![CDATA[Docker]]></category>
      <category><![CDATA[OpenAI]]></category>
      <category><![CDATA[QA]]></category>
      <category><![CDATA[Приложение]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[DeFi]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sun, 29 Jun 2025 09:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p>n8n — open-source платформа для автоматизации рабочих процессов (workflow), позволяющая создавать сложные цепочки задач без глубоких знаний программирования.</p><p><b>В статье рассмотрим:</b></p><p>- Установку локально и в облаке;</p><p>- Интеграцию с Python, Node.js и PHP;</p><p>- Примеры автоматизаций;</p><p>- Интеграцию с AI Mistral.</p><h2>Установка n8n</h2><h3>Локальная установка</h3><p>Нам потребуется Docker, проверьте установку:</p><p><b>Шаги установки:</b></p><p>1. Создайте том данных:</p><p>2. Запустите контейнер:</p><p>После запуска откройте: `http://localhost:5678`</p><figure><img src="https://media.tproger.ru/user-uploads/115814/2025-06-16/32713acd-811d-40dc-8141-4fb625cd4216.png" alt="" /></figure><h3>Установка на удаленном сервере</h3><p>Развертывание мы произведем в облаке <a href="https://amvera.ru/n8n">Amvera</a>, так как в нем n8n предоставляется как преднастроенный сервис с бесплатным доменом (он нам нужен), настроенными переменными и проксированием до заблокированных в РФ LLM (OpenAI, Gemini, Claude и др.).</p><p>1. Регистрируемся на <a href="https://amvera.ru/n8n">Amvera</a>;</p><p>2. Выбираем n8n в плитке на главной странице;</p><figure><img src="https://media.tproger.ru/user-uploads/115814/2025-06-16/e74d96ee-5f96-4c61-bf7a-562a38edc703.png" alt="" /></figure><p>3. Вводим название для проекта и выбираем тариф.</p><p><b>Готово, через 30 секунд запустится n8n с выделенным доменом и настроенными основными переменными.</b></p><h2>Настройка n8n</h2><h3>Первоначальная настройка</h3><p>1. Откройте n8n (локально: `localhost:5678`, в облаке: ваш домен)</p><p>2. Заполните данные администратора:</p><ul><li>Email</li></ul><ul><li>Имя/Фамилия</li></ul><ul><li>Пароль</li></ul><p>3. По желанию вы можете получить бесплатный лицензионный ключ:</p><ul><li>Введите email → "Send me a free license key"</li></ul><ul><li>Активируйте в разделе Settings → Usage</li></ul><h3>Настройка для HTTP</h3><p>1. Создайте новый <b>workflow</b> → Start from scratc</p><p>2. Добавьте триггер: <b>Webhook</b> - <b>On webhook call</b></p><p>3. Настройте:</p><ul><li>HTTP Method: POST</li></ul><ul><li>Path: `/n8n` (пример)</li></ul><ul><li>Respond Mode: Using 'Respond to Webhook' node</li></ul><figure><img src="https://media.tproger.ru/user-uploads/115814/2025-06-16/6e51fb08-a901-408c-833e-eb27c3ab1f17.png" alt="" /></figure><p>4. Добавьте обработчик: <b>Core</b> → <b>Respond to Webhook</b></p><p>5. Настройте ответ:</p><figure><img src="https://media.tproger.ru/user-uploads/115814/2025-06-16/37a5add7-0873-42e1-9004-d33a228d828b.png" alt="" /></figure><h2>Примеры использования</h2><h3>Пример на Python</h3><p>В примере на Python мы сделаем калькулятор. Суть: отправляем выражение через POST,  n8n делает вычисление, возвращаем результат.</p><p><b>Workflow</b>:</p><p>1. Добавьте <b>Core</b> → <b>Code node</b> между Webhook и Respons:</p><p><b>Клиент (Python):</b></p><p>Запустим код и посмотрим результат:</p><figure><img src="https://media.tproger.ru/user-uploads/115814/2025-06-16/c9a2bd14-0a7e-4c6f-8544-e4a098a5cd5e.png" alt="" /></figure><h3>Пример на PHP</h3><p>В примере на PHP мы сделаем валидацию данных. Суть: отправляем данные через POST, n8n проверяет данные, возвращает результат.</p><p><b>Workflow (Code node):</b></p><p><b>Клиент (PHP):</b></p><p>Можем зайти на нашу страницу, все работает нормально:</p><figure><img src="https://media.tproger.ru/user-uploads/115814/2025-06-16/722241bc-9794-41eb-9d32-8d73d7147800.png" alt="" /></figure><h3>Пример на Node.js</h3><p>Примером на node.js будет фильтр запрещенных слов. Суть: отправляем текст, n8n проверяет на наличие плохих слов, возвращает результат.</p><p><b>Workflow (Code node):</b></p><p><b>Клиент (Node.js):</b></p><p>Перед запуском установим библиотеку командой `npm install axios`</p><figure><img src="https://media.tproger.ru/user-uploads/115814/2025-06-16/c56f275a-8c74-49bf-80e5-22d5becd222a.png" alt="" /></figure><h3>Интеграция n8n с Mistral AI</h3><p>Мы интегрируем нейросеть Mistral в телеграмм-бота на C# с помощью n8n. Перед тем как начать, нам нужно получить токен.</p><p>1. Зарегистрируйтесь на <a href="https://mistral.ai/">Mistral</a></p><p>2. Создайте агента <b>Сreate an agent</b></p><p>3. Перейдите в раздел <b>API Keys</b></p><p>4. Создайте и скопируйте API-ключ (звездочки наложены):</p><figure><img src="https://media.tproger.ru/user-uploads/115814/2025-06-16/7bb95f2e-0ebe-47af-9089-5e10ee2822cf.png" alt="" /></figure><p>Теперь нужно создать credentials для работы с созданной моделью. Для этого в правом верхнем углу нажмите <b>Create credentials</b>. В списке найдите <b>Mistral Cloud API</b>. В открывшемся окне вставьте скопированный ключ и сохраните.</p><p>Осталось настроить workflow.</p><p>1. Добавляем <b>Webhook</b>:</p><ul><li>Method: POST</li></ul><ul><li>PATH: n8n</li></ul><ul><li>Respond: Using 'Respond to Webhook' Node</li></ul><p>2. Добавляем <b>AI Agent</b>:</p><ul><li>Source for Prompt: Define below</li></ul><ul><li>Prompt: `{{ $json.body.text }}`</li></ul><p>3. Подключаем <b>Chat Model </b>к созданному агенту:</p><ul><li>Credential to connect with: Mistral Cloud API</li></ul><ul><li>Model: mistral-large-2411</li></ul><p>4. Добавляем <b>Respond to Webhook</b></p><p>Вот так выглядит готовый workflow:</p><figure><img src="https://media.tproger.ru/user-uploads/115814/2025-06-16/b2618a94-f3eb-4055-9061-ab185aca9d9d.png" alt="" /></figure><p>Можем приступить к созданию бота. Для начала введите эти команды по очередности:</p><p>Переходим в папку с кодом и редактируем файл `Program.cs`:</p><p>Запустите бота с помощью команды `dotnet run`.</p><h3>Автоматизируем с помощью n8n</h3><p>В примере автоматизации мы сделаем бота, который будет отправлять уведомления при заполнении формы, полностью без кода.</p><p>Для работы с <b>Telegram Node</b> понадобиться создать credentials <b>Telegram API</b>. Туда вставляем токен бота, полученный в @BotFater. Сохраняем и переходим к настройке workflow.</p><p><b>Создаем новый workflow. </b></p><p>1. Добавляем <b>On form submission</b>. В качестве примера я создам самую простую форму:</p><figure><img src="https://media.tproger.ru/user-uploads/115814/2025-06-16/3bd6f188-16bd-4fa4-bde2-f7a88855bdad.png" alt="" /></figure><p>Перейдите по ссылке в <b>Producrion URL</b> чтобы заполнить форму.</p><p>2. Добавляем <b>Telegram Node</b>:</p><ul><li>Credential to connect with: Telegram account</li></ul><ul><li>Resource: Message</li></ul><ul><li>Operation: Send message</li></ul><ul><li>Chat ID: вставьте свой telegram id</li></ul><p>Text:</p><p>Готово! При новых заявках бот будет присылать уведомления.</p><h3>Деплой бота в Amvera Cloud</h3><p>Перед тем как начать деплой, мы должны создать конфигуационнный файл `amvera.yml`. Для этого создаем его в рабочем каталоге с ботом и вводим следующее:</p><p>Строго говоря, этот файл проще создать в конфигураторе в интерфейсе.</p><p>2. Структура проекта будет такой:</p><p>tg-bot/</p><p>├── Program.cs</p><p>├── tg-bot.csproj</p><p>├── amvera.yml</p><p>├── bin/</p><p>└── obj/</p><p>Идем В Amvera Cloud и создаем приложение <b>Приложения</b> — <b>Создать приложение</b>. Вводим название и выбираем тариф.</p><p>Далее загружаем все файлы, что есть у нас в каталоге, с ботом. В конце будет окно с настройкой конфигуцрации, выглядит оно так:</p><figure><img src="https://media.tproger.ru/user-uploads/115814/2025-06-16/7806bf2f-38e5-4aa4-ade2-6c12d3f6c214.png" alt="" /></figure><p>Нажимаем <b>Завершить</b> и ждем когда приложение будет запущено.</p><h2>Заключение</h2><p>n8n — мощный инструмент для создания интеграций и автоматизаций. Надеюсь, статья была вам полезна и буду рад обсудить в комментариях любые вопросы!</p>]]></content:encoded>
    </item>
    <item>
      <title>Playwright + VS Code: Установка и первый автотест за 15 минут</title>
      <link>https://tproger.ru/articles/playwright---vs-code--ustanovka-i-pervyj-test-za-15-minut</link>
      <comments>https://tproger.ru/articles/playwright---vs-code--ustanovka-i-pervyj-test-za-15-minut?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Pavel Nik]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/playwright---vs-code--ustanovka-i-pervyj-test-za-15-minut</guid>
      <description><![CDATA[<p>Гайд для начинающих: как настроить среду, установить Playwright и написать первый тест. Пошаговая инструкция с примерами кода и пояснениями.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/playwright---vs-code--ustanovka-i-pervyj-test-za-15-minut">Playwright + VS Code: Установка и первый автотест за 15 минут</a>»</p>]]></description>
      <category><![CDATA[PHP]]></category>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[Браузеры]]></category>
      <category><![CDATA[Windows]]></category>
      <category><![CDATA[Microsoft]]></category>
      <category><![CDATA[Node.js]]></category>
      <category><![CDATA[HR]]></category>
      <category><![CDATA[MIT]]></category>
      <category><![CDATA[QA]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 24 Jun 2025 14:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Playwright — мощный инструмент автоматизации web-приложений. Фреймворк уже достаточно известный и популярный. И если вы хотите его попробовать, то вот инструкция по установке с помощью Visual Studio Code (VS code).</p><p>Гайд для тех, кто только входит в автоматизацию. После можно получить первые результаты, попробовать сам фреймворк и дальше экспериментировать: делать свои тесты.</p><p><b>*Инструкция для Windows. Надеюсь, проблем при установке ни у кого не возникнет.</b></p><h2>Основные шаги по установке</h2><h3>Установка VS Code</h3><ol><li>Перейдите на оф. сайт <a href="https://code.visualstudio.com/">https://code.visualstudio.com/</a> и скачайте последнюю версию. На главной странице должна отображаться кнопка <i>Download for Windows.</i></li><li>Дальше стандартная установка по инструкции: <i>Next &gt; Next &gt; Install</i>.</li></ol><h3>Установка Node.js. Шаги аналогичные</h3><ol><li>Также перейдите на оф. сайт <a href="https://nodejs.org/en/download">https://nodejs.org/en/download</a> и скачайте последнюю версию Node.js. Я использовал <i>Windows Installer (.msi).</i></li><li>Такая же стандартная установка: <i>Next &gt; Next &gt; Install</i>.</li></ol><h3>Создание проекта</h3><ol><li>Создайте пустую папку на ПК, где будет храниться проект для автоматизации. <br />У меня для этого есть отдельная директория, так удобнее хранить все проекты в одном месте. Но её можно создать даже на рабочем столе, разницы никакой. Мой путь к папке —  <i>C:\Users\Pavel\Projects\TestProject.</i></li><li>Запустите VS Code и там выберите созданную папку.</li></ol><figure><img src="https://media.tproger.ru/user-uploads/113257/2025-03-04/d46a761e-dbab-4bde-9ac8-f1bb936117d0.png" alt="" /></figure><h3>Установка Playwright</h3><ol><li>Перейдите в раздел управления расширениями <i>Extensions.</i></li><li>Введите <i>Playwright</i> в поисковой строке.</li><li>Нужно скачать тот, что верифицирован Microsoft (у него больше всего установок).</li></ol><figure><img src="https://media.tproger.ru/user-uploads/113257/2025-03-04/b5ea7aec-53b2-480b-af3c-4934b427a86c.png" alt="" /></figure><p>Но установка еще не закончена, дальше:</p><ul><li>Вызовите<i> Command Palette</i>. Можно через основное меню: <i>View &gt; Command Palette </i>или комбинацией клавиш <i>Ctrl+Shift+P</i>.</li><li>Введите <i>Test: Install Playwright</i> в появившейся строке.</li><li>Выберите необходимые браузеры для установки.</li><li>Я оставляю только Chromium, его вполне достаточно. Кликаем Ok и ждем окончательной установки Playwright (должен появиться терминал и начаться установка пакетов).</li></ul><figure><img src="https://media.tproger.ru/user-uploads/113257/2025-03-04/9d8a4d16-7fbc-43ba-a316-a28d7b729a95.png" alt="" /></figure><h3>Создание тестов</h3><ol><li>В основном окне <i>Explorer </i>добавьте новый файл в модуле <i>tests </i>(правая кнопка мыши, новый файл).<br />*Важно, чтобы название файла оканчивалось на <i>spec.ts</i> или <i>.test.ts</i> (расширение может быть и <i>.js</i>): так Playwright определяет тесты по дефолту. В примере добавил файл <i>login.spec.ts.</i></li></ol><figure><img src="https://media.tproger.ru/user-uploads/113257/2025-03-04/731e6efb-a3e6-4385-93c7-2fa89e8fa0f3.png" alt="" /></figure><ol><li>Вставьте следующий код в созданный файл <i>login.spec.ts. </i><br />Это пример логина на платформе, который ± подходит под любой сайт: нужно только изменить URL, locators и данные для входа. Использую тестовую платформу <a href="https://demowebshop.tricentis.com/">https://demowebshop.tricentis.com/</a>.</li></ol><p>Осталось совсем немного. Только запустить созданный тест:</p><ol><li>Перейдите в раздел <i>Testing</i>.</li><li>Выберите созданный файл и запустите тесты кликом <i>Run test</i>.</li></ol><figure><img src="https://media.tproger.ru/user-uploads/113257/2025-03-04/64456ff7-2a83-416f-8a60-57ae2567eb51.png" alt="" /></figure><p>Можете добавить еще один тест в тот же файл и посмотреть его выполнение:</p><p>Вот и всё! Теперь у вас есть базовая автоматизация с Playwright! Дальше можно дописывать другие тесты. Например, посмотреть работу системы с незарегистрированным email, вынести credentials в конфигурационный файл и т.д. И, конечно, углубляться, разбираться во всем, чтобы стать уверенным автоматизатором. Можно продолжить изучение статей на оф.сайте <a href="https://playwright.dev/docs/writing-tests">Playwright</a>. Главное, соблюдайте <a href="https://playwright.dev/docs/best-practices">best-practices</a> при работе с ним.</p>]]></content:encoded>
    </item>
    <item>
      <title>Как сделать свой первый сайт на HTML и CSS: пошаговая инструкция</title>
      <link>https://tproger.ru/articles/kak-sdelat-svoj-pervyj-sajt-na-html-i-css--powagovaya-instrukciya</link>
      <comments>https://tproger.ru/articles/kak-sdelat-svoj-pervyj-sajt-na-html-i-css--powagovaya-instrukciya?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Вадим Егорцев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kak-sdelat-svoj-pervyj-sajt-na-html-i-css--powagovaya-instrukciya</guid>
      <description><![CDATA[<p>Как сделать на HTML и CSS. Показываем, какими навыками нужно обладать для создания сайтов. Рассматриваем пошаговую инструкцию и основные нюансы ✔ Tproger</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kak-sdelat-svoj-pervyj-sajt-na-html-i-css--powagovaya-instrukciya">Как сделать свой первый сайт на HTML и CSS: пошаговая инструкция</a>»</p>]]></description>
      <category><![CDATA[Интернет]]></category>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Веб-разработка]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Опрос]]></category>
      <category><![CDATA[MySQL]]></category>
      <category><![CDATA[Google]]></category>
      <category><![CDATA[PHP]]></category>
      <category><![CDATA[CSS]]></category>
      <category><![CDATA[SQL]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[HTML]]></category>
      <category><![CDATA[WordPress]]></category>
      <category><![CDATA[HR]]></category>
      <category><![CDATA[Фронтенд]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[Бизнес]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 23 Jun 2025 14:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Tilda, Wix, WordPress — конструкторы сайтов кажутся простым решением. Согласны, на готовых блоках можно сделать интернет-магазин за 1 час. Но учтите, что в конструкторе непонятно, как всё работает изнутри. Вы не поймёте, почему сайт долго грузится, как увеличить кнопку для смартфонов и т. д.</p><p><b>Выбрали путь программиста</b>? Значит навсегда запомните, когда опубликовали первый самописный сайт. Откосить не получится: мы сразу перейдём к практике — к концу статьи у вас будет ссылка на сайт-визитку.</p><p><b>Мало времени</b>? Выделите 10 минут — мы используем только HTML и CSS.</p><p>Вы узнаете:</p><ul><li>как подключать стили,</li><li>как верстать блоки,</li><li>как опубликовать сайт.</li></ul><p>Возможно сейчас вы убедитесь, что веб-разработка — это ваше призвание, и захотите продолжить обучение профессии.</p><h2>Шаг 1. Подготовим инструменты и папку проекта</h2><p>Сайт можно писать и в блокноте. Это как забивать гвозди камнем – работает, но зачем мучиться? <b>Редактор кода подсвечивает синтаксис, подсказывает команды и сразу указывает на ошибки</b>.</p><p>Новичкам рекомендуем ставить <b>Visual Studio Code (VS Code)</b>. Он бесплатный, не тормозит и понимает любой код. Плюс у него огромное сообщество — если нужно установить плагин или увеличить шрифт, ответ на вопрос уже есть в интернете.</p><p><a href="https://code.visualstudio.com/download">Скачайте VS Code с официального сайта</a>.</p><h2>Как устроен веб-проект</h2><p><b>Сайт</b> — это папка с файлами для браузера.</p><p>HTML-файл содержит текст и разметку страницы, CSS-файл — правила оформления. Браузер берёт эти два файла и показывает веб-страницу.</p><p>Основной файл сайта обычно называют <i>index.html</i>. Стили хранятся в <i>style.css</i>.</p><p>Кроме файлов HTML и CSS, в нашем проекте будут папки:</p><ul><li><i>img </i>— для картинок.</li><li><i>fonts </i>— для шрифтов.</li></ul><p><b>Создайте на рабочем столе папку с названием сайта</b>, например <i>first-site</i>, и соберите начальную структуру — это займёт 1 минуту.</p><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-06-06/5ba1fa76-6d96-4b7b-aac4-633a4d251a7e.jpg" alt="" /><figcaption>Типичная структура веб-проекта</figcaption></figure><h2>Шаг 2. Создадим базовую HTML-страницу</h2><p>В VS Code есть удобная фишка: наберите символ «!» и нажмите Tab. Редактор <b>автоматически </b>создаст базовую структуру HTML-документа.</p><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-06-06/3fbcd34e-cf7c-473c-b0cf-84260e9aa42c.jpg" alt="" /><figcaption>Структура HTML-документа в VS Code</figcaption></figure><p>Как читать структуру:</p><ul><li><i></i><b>&lt;!DOCTYPE html&gt; </b>—<b> </b>сообщает браузеру, что это HTML-документ.</li><li><i></i><b>&lt;html&gt; </b>—<b> </b>корневой элемент, внутри которого живёт страница.</li><li><i></i><b>&lt;head&gt; </b>—<b> </b>служебная информация, которую не видно на странице.</li><li><i></i><b>&lt;body&gt; </b>—<b> </b>то, что увидят пользователи на странице.</li></ul><p><b>Измените Document на название вашего сайта</b> — это текст, который появится во вкладке браузера.</p><p>Добавим контент в &lt;body&gt;:</p><p>Мы не комментируем каждый тег и атрибут, потому что это тема для отдельной статьи. Наша задача — показать, как быстро собрать сайт и выложить его в интернет.</p><p><b>Сохраните HTML-файл и откройте его в браузере</b>. Поздравляем, ваша первая веб-страница готова! Она недоступна другим пользователям, но мы это исправим.</p><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-06-06/c3588fae-fe59-447a-9045-d7f7ada0161c.jpg" alt="" /><figcaption>HTML-страница без стилей</figcaption></figure><h2>Шаг 3. Подключим стили CSS</h2><p>Сейчас сайт выглядит странно — чёрный текст на белом фоне. Так не пойдёт, добавим стилей в файле <i>style.css</i>.</p><p>CSS можно писать внутри HTML или в отдельном файле. Мы выберем второй вариант, потому что это удобнее.</p><p>Подключим CSS к HTML. В секции <i></i> вашего <i>index.html</i> добавьте строчку:</p><p>Тег <i> </i>говорит браузеру: «Возьми файл <i>style.css</i> из той же папки и примени все стили к этой странице».</p><p>Добавьте в <i>style.css </i>первое правило:</p><p><b>Сохраните оба файла </b>—<b> HTML и CSS</b>. Обновите страницу в браузере.</p><p>Фон поменял цвет? Значит, CSS подключён правильно. Можете вернуть белый фон или оставить голубой — далее мы добавим более интересные стили.</p><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-06-06/95a0bd53-c4a5-4139-92c5-1c1fdda3916b.jpg" alt="" /><figcaption>Применили стиль к фону страницы</figcaption></figure><h2>Шаг 4. Подключим шрифты</h2><p>Есть три способа избавиться от дефолтного Times New Roman:</p><ul><li>Google Fonts — бесплатная библиотека шрифтов от Google.</li><li>Локальные файлы — загружаете шрифт на свой сервер.</li><li>Системные шрифты — используете то, что уже есть на компьютере пользователя.</li></ul><p><b>Для первого сайта на HTML и CSS рекомендуем Google Fonts</b> — это просто, быстро и надёжно.</p><p>Перейдите на <a href="http://fonts.google.com">fonts.google.com</a> и выберите шрифт. Популярные варианты: Roboto, Open Sans, Lato, Montserrat. Нажмите на понравившийся шрифт, выберите начертания (тонкий, обычный или жирный), скопируйте код подключения и вставьте в <i>head</i>.</p><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-06-06/19c3409f-ea46-42fb-a56d-2680820d1fb3.jpg" alt="" /><figcaption>Подключение всех начертаний Montserrat в Google Fonts</figcaption></figure><p>На Google Font собраны популярные шрифты. Если этого мало, нужно скачать шрифт (.woff, .woff2, .ttf) и поместить в папку fonts.</p><p>Путь к файлу указывается относительно CSS-файла. Подключаем начертания через <i>@font-face:</i></p><p>Теперь используйте шрифт в CSS:</p><p>Для каждого начертания (обычный, жирный, курсив) нужно отдельное правило <i>@font-face</i>.</p><h2>Шаг 5. Сверстаем блоки</h2><p>Замените содержимое вашего <i>style.css</i> на этот код:</p><p>Что мы делаем:</p><ul><li>Убираем стандартные отступы браузера и задаём голубой фон.</li><li>Центрируем карточку по всей странице с помощью flexbox.</li><li>Создаём белую карточку с тенью и скруглёнными углами.</li><li>Делаем круглый аватар с рамкой.</li><li>Стилизуем текст и кнопку.</li><li>Добавляем эффект при наведении на кнопку.</li></ul><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-06-06/d89d9cf8-b178-4794-bd56-00997cf45750.jpg" alt="" /><figcaption>Простая визитка на HTML и CSS с анимированной кнопкой и ссылкой на Телеграм</figcaption></figure><h2>Шаг 6. Загрузим сайт на хостинг</h2><p>Чтобы визиткой можно было поделиться, нужно загрузить файлы на <b>хостинг</b>. Это сервер, который работает круглосуточно и показывает ваш сайт всем желающим. Посмотреть, как это работает, можно на бесплатном тарифе.</p><p>Заходим на сайт хостинга (Beget, Hostiman, InfinityFree) и регистрируемся. После подтверждения email вы попадёте в панель управления. Система предложит выбрать домен — берите бесплатный типа название.<b>fwh.is</b>.</p><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-06-06/26a6c762-28f6-4c16-9db2-9963b1468a14.jpg" alt="" /><figcaption>Выбор бесплатного поддомена на InfinityFree</figcaption></figure><h2>Загружаем файлы на сервер</h2><p>После создания аккаунта появится доступ к файловому менеджеру. Через веб-интерфейс можно управлять файлами на сервере прямо из браузера. Перейдите в папку <i>htdocs </i>— это корневая директория вашего сайта, куда нужно загружать структуру.</p><p>Удалите лишние файлы по типу <i>default.php</i> и загрузите ваши файлы: <i>index.html</i>, <i>style.css</i>,  <i>папки img и fonts</i>. Основной <i>index.html </i>должен лежать прямо в <i>htdocs</i>, а не во вложенной папке — иначе сайт не откроется.</p><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-06-06/142fed8d-33ff-4d1a-bc2c-0bb97effdbb8.jpg" alt="" /><figcaption>Менеджер файлов InfinityFree</figcaption></figure><p>Более продвинутый способ — использовать FTP-клиент <a href="https://filezilla-project.org/">FileZilla</a>. В панели хостинга найдите FTP-данные и подключитесь через программу. Это удобнее для больших проектов, но для первого сайта веб-менеджера будет достаточно.</p><h2>Проверяем результат</h2><p>Через несколько минут после загрузки ваш сайт будет доступен по адресу. Откройте его в браузере — если всё сделано правильно, увидите свою страницу. Если что-то не работает, проверьте, что <i>index.html</i> лежит в корне <i>htdocs</i>, а <i>style.css</i> загружен в ту же папку.</p><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-06-06/28368cd4-887b-41fe-8930-37b51e3875e2.jpg" alt="" /><figcaption>Опубликованная визитка на HTML и CSS</figcaption></figure><h2>Реальность бесплатного хостинга</h2><p>Для изучения основ и создания первых проектов на HTML и CSS это отличный вариант. Регистрация занимает 1 минуту, никаких настроек, можно сразу экспериментировать и видеть результат.</p><p><b>Помните про обратную сторону медали</b>. Бесплатные хостинги жёстко ограничивают ресурсы — трафик, место на диске, нагрузку на сервер. Иногда вставляют рекламу на ваш сайт. Серверы часто «падают» — страница может быть недоступна по несколько часов.</p><p>Самая большая проблема — нестабильность бизнеса. Бесплатные хостинги закрываются без предупреждения. Сегодня ваш сайт работает, а завтра компания решила, что бесплатные услуги больше не окупаются.</p><p>Скрытые ограничения:</p><ul><li>В рекламе бесплатные хостинги обещают безлимитный трафик и неограниченное место, но вынуждают переходить на платный тариф после 100 посетителей в день.</li><li>Про индексацию можно забыть — поисковые системы не пропустят бесплатные поддомены на первые страницы выдачи.</li><li>На бесплатных хостингах слабая защита. Ваш сайт могут использовать для размещения вредоносного кода, а вы об этом даже не узнаете.</li></ul><h2>Когда стоит переходить на платный хостинг</h2><p>Бесплатный хостинг — это тренировочная площадка, а не постоянное решение. Если планируете заниматься веб-разработкой, создавать портфолио или коммерческие проекты, лучше сразу инвестировать в качественный хостинг и собственный домен.</p><p>Самый простой домен стоит 200-1000 рублей/год, а базовый хостинг — 100-300 рублей/месяц. Плюс получите доступ к технологиям (PHP, MySQL), более стабильную работу и нормальную техподдержку. <b>Начните с минимального тарифа </b>— <b>его хватит на тренировочные проекты, а потом можно масштабироваться</b>.</p><h2>Куда двигаться дальше?</h2><p>Мы создали первый сайт и опубликовали его в интернете. Если повторяли за нами то поздравляем — многие останавливаются на теории, а вы дошли до результата. Теперь у вас есть понимание основ:</p><ul><li>как работает HTML,</li><li>зачем нужен CSS,</li><li>что такое хостинг и домен.</li></ul><p><b>Следующий шаг</b> — подробнее изучить CSS. Сайт-визитка из примера нормально отображается только на больших экранах. Однако 60% пользователей <a href="https://gs.statcounter.com/platform-market-share/desktop-mobile-tablet">заходит</a> с телефонов. Изучите медиазапросы, они применяются только на определённых размерах дисплея.</p><p>Подробнее про адаптив рассказал старший фронтенд-разработчик Никита Кушнарёв: <a href="https://tproger.ru/articles/esli-vy-umeete-pokrasit-knopochku-no-hotite-uznat-bolshe-o-vjorstke-veb-prilozhenij">Если вы умеете покрасить кнопочку, но хотите узнать больше о вёрстке веб-приложений</a>.</p><p>Попробуйте переделать карточку так, чтобы она нормально выглядела на телефоне. Уменьшите размеры, измените отступы, сделайте кнопку на всю ширину. Потом изучите <a href="https://tproger.ru/articles/css-grid-i-flexbox--evolyuciya-maketov-v-veb-dizajne">Flexbox и CSS Grid</a> — современные способы вёрстки макетов.</p><p>Когда почувствуете уверенность в CSS, пора знакомиться с <b>JavaScript</b>. Это язык программирования, который делает сайты интерактивными. Сложные анимации, всплывающие окна, динамическое изменение контента — это JS. Предупреждаем, он сложнее HTML и CSS. В нём есть функции, условия, циклы — всё то, что пугает новичков.</p><p>Подробнее про JavaScript: <a href="https://tproger.ru/articles/javascript-s-nulja-dorozhnaja-karta">Разработка на JavaScript с нуля: дорожная карта</a>.</p><p><b>Изучайте инструменты разработчика</b> в браузере. Нажмите F12 на любом сайте — откроется интерфейс для просмотра структуры сайта, отладки JS, тестирования адаптива. Смотрите, как устроены другие сайты, изучайте чужой код.</p><p>Самое время узнать о большем количестве инструментов программиста. Читайте в нашем <a href="https://t.me/+N9AAs1a82VA1MDMy">тг-канале!</a></p>]]></content:encoded>
    </item>
    <item>
      <title>Зачем нам свои сети, если ими никто не пользуется? Насколько все плохо с российскими SDN</title>
      <link>https://tproger.ru/articles/zachem-nam-svoi-seti--esli-imi-nikto-ne-polzuetsya--naskolko-vse-ploho-s-rossijskimi-sdn</link>
      <comments>https://tproger.ru/articles/zachem-nam-svoi-seti--esli-imi-nikto-ne-polzuetsya--naskolko-vse-ploho-s-rossijskimi-sdn?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Денис Кудерин]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/zachem-nam-svoi-seti--esli-imi-nikto-ne-polzuetsya--naskolko-vse-ploho-s-rossijskimi-sdn</guid>
      <description><![CDATA[<p>Российские сети SDN — что с ними не так и почему инфраструктура так медленно развивается. Экспертный обзор ситуации на рынке</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/zachem-nam-svoi-seti--esli-imi-nikto-ne-polzuetsya--naskolko-vse-ploho-s-rossijskimi-sdn">Зачем нам свои сети, если ими никто не пользуется? Насколько все плохо с российскими SDN</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[Linux]]></category>
      <category><![CDATA[Оптимизация]]></category>
      <category><![CDATA[Git]]></category>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[Опрос]]></category>
      <category><![CDATA[PHP]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[GitHub]]></category>
      <category><![CDATA[Базы данных]]></category>
      <category><![CDATA[HR]]></category>
      <category><![CDATA[Образование]]></category>
      <category><![CDATA[Россия]]></category>
      <category><![CDATA[VMware]]></category>
      <category><![CDATA[Дата-центр]]></category>
      <category><![CDATA[аналитик]]></category>
      <category><![CDATA[микро]]></category>
      <category><![CDATA[1C]]></category>
      <category><![CDATA[DeFi]]></category>
      <category><![CDATA[Бизнес]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 20 Jun 2025 10:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>В 2025 году программно-определяемые сети (SDN) — это не тренд, а жизненная необходимость. Мировой рынок SDN растет на 13–22% в год, а в России его объем уже превысил 15 млрд рублей. Но вот в чем подвох: пока мир переходит на «сети из кода», российские компании до сих пор настраивают VLAN вручную или цепляются за устаревшие решения VMware, американского разработчика ПО для виртуализации.</p><p>Почему так? В 2024–2025 годах США ужесточили ограничения: VMware NSX и Cisco ACI официально заблокированы. Казалось бы, идеальный момент для отечественных решений вроде Basis SDN от «Базиса». Но сегодня их доля на рынке — не выше 3%.</p><p>Выясним, почему российские SDN, несмотря на импортозамещение, пока так и не стали массовыми, и что мешает бизнесу переходить на отечественные продукты — от дефицита специалистов до проблем с legacy-инфраструктурой. Только факты, кейсы внедрений и прогнозы на 2026–2030 годы с опорой на отчеты Ростелекома, аналитику <a href="https://www.6wresearch.com/industry-report/russia-software-defined-anything-market">6Wresearch</a> и документы <a href="https://www.archivemarketresearch.com/reports/sdn-system-43385">OFAC</a>.</p><h2>SDN в России-2025: почему мир перешел на «сети из кода», а мы настраиваем маршрутизаторы вручную</h2><p>SDN (Software-defined networking) — это когда сетью управляют не железки, а код. Представьте, что вместо того, чтобы вручную прописывать правила на каждом коммутаторе, вы просто пишете скрипт, и сеть мгновенно перестраивается под ваши задачи. Контроллер SDN решает, куда направить трафик, как распределить нагрузку и какие политики безопасности применить. Все это — без манипуляций с командной строкой и конфигурационных файлов.</p><h3>Мировой контекст: SDN как новая норма</h3><p>Глобальный рынок SDN к 2025 году оценивается в $12+ млрд, а темпы роста превышают 18% в год. Причины просты:</p><ul><li>Облака и гибридные инфраструктуры требуют гибкости, которую традиционные сети дать не могут.</li><li>Киберугрозы теперь атакуют не отдельные устройства, а всю сеть. SDN позволяет изолировать зараженные сегменты за секунды — например, отрезать атакованный филиал до того, как он заразит головной офис.</li><li>5G и IoT без SDN просто не работают. Виртуальные срезы сети (network slicing) — единственный способ гарантировать приоритет критичному трафику, будь то телемедицина или беспилотники.</li></ul><p>Но главный драйвер — экономика. <a href="https://www.tadviser.ru/index.php/%D0%A1%D1%82%D0%B0%D1%82%D1%8C%D1%8F:%D0%93%D0%BB%D0%B0%D0%B2%D0%BD%D1%8B%D0%B5_%D1%82%D0%B5%D0%BD%D0%B4%D0%B5%D0%BD%D1%86%D0%B8%D0%B8_%D0%BD%D0%B0_%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%BE%D0%BC_%D1%80%D1%8B%D0%BD%D0%BA%D0%B5_%D0%B4%D0%B0%D1%82%D0%B0-%D1%86%D0%B5%D0%BD%D1%82%D1%80%D0%BE%D0%B2">Компании устали переплачивать за «умное» железо</a> Cisco и Juniper, когда всю логику можно перенести в софт. К 2025 году 70% корпоративных сетей в ЕС и США управляются через SDN-контроллеры — просто потому, что это дешевле и быстрее.</p><figure><img src="https://media.tproger.ru/user-uploads/113565/2025-06-12/45a4e2ba-6d0d-4766-9673-120dca5836f6.png" alt="" /></figure><h3>Россия: технологический суверенитет vs. реальность</h3><p>В 2024–2025 годах санкции добили то, что не успели в 2022-м:</p><ul><li>VMware NSX официально заблокирован для российских компаний.</li><li>Cisco ACI и Huawei CloudFabric доступны только через «серые» схемы, но их поддержка практически не работает.</li><li>Оборудование попало под прямые ограничения: даже нейтральные производители вроде Arista отказываются поставлять коммутаторы из-за риска вторичных санкций.</li></ul><p>Казалось бы, идеальный момент для российских SDN-решений. Но доля отечественных продуктов на рынке — единицы. Причины такой ситуации вполне объективны:</p><ul><li>«Железная» зависимость. Большинство российских SDN работают только с оборудованием конкретных вендоров — YADRO, Aquarius, «Бифорком». Если у компании инфраструктура на старых Cisco или Huawei, миграция потребует полной замены «железа».</li><li>Функциональные пробелы. Тот же Basis SDN декларирует 80% функционала VMware NSX, но ключевые фичи вроде автоматического восстановления после сбоев (self-healing) или глубокой аналитики трафика через ИИ пока в разработке.</li><li>Дефицит экспертов. В России менее 1000 сертифицированных специалистов по SDN — против 25 000 в США и ЕС. Обучение нового инженера с нуля занимает 1.5–2 года — бизнес не готов ждать.</li></ul><h3>Спрос есть, но внедрять некому</h3><p>Опросы специализированных изданий показали, что более трети крупных отечественных компаний хотели бы перейти на отечественные SDN, но многие из них не верят в стабильность российских решений, не готовы инвестировать в замену инфраструктуры, не могут найти подрядчика с нужной экспертизой.</p><p>При этом Basis SDN — единственное решение, которое хоть как-то закрывает дыру. Его пилоты запустили Ростелеком, СберТех и несколько госструктур. Но даже они признают: продукту не хватает открытости API и поддержки мультивендорных сред.</p><p>Вывод: мир уже живет в эпоху «сетей как кода», а Россия только учится настраивать контроллеры. Без массовых инвестиций в R&amp;D (Research and Development, научные исследования и разработки) и образование разрыв будет расти. К 2030 году мы рискуем остаться с SDN «на бумаге», пока глобальные игроки перейдут на следующую ступень — IBN (intent-based networking) — сеть, основанную на намерениях с полной автономией ИИ.</p><h2>Свои SDN: роскошь или необходимость?</h2><p>Блокировки лишили российские компании доступа к обновлениям и техподдержке. Санкции против YADRO и других производителей сетевого оборудования усугубили проблему: даже если «железо» физически есть, его нельзя масштабировать без лицензий. Сложность в том, что технологический суверенитет нельзя купить — его нужно строить.</p><h3>Технологический суверенитет — не лозунг, а вынужденная мера</h3><p>В 2025 году термин «импортозамещение» уже не вызывает иронии. Сегодня российский бизнес столкнулся с простым фактом: зарубежные SDN-решения либо недоступны, либо работают с перебоями.</p><p>Компании, которые в 2024-м надеялись на «серые» поставки VMware NSX, теперь тратят на 40% больше на поддержку устаревших версий.</p><p>Basis SDN — пока единственная рабочая альтернатива. Разработка «Базиса» и Angie Software изначально создавалась под санкционные реалии:</p><ul><li>полная независимость от зарубежного ПО — даже гипервизор работает на KVM;</li><li>поддержка российского «железа» (YADRO, Aquarius) без необходимости доработок;</li><li>цена ниже VMware NSX до его ухода с рынка.</li></ul><p>Но главное — это не просто клон VMware, а адаптация под российские условия. Например, здесь изначально заложена поддержка требований ФСТЭК к шифрованию трафика, что для госсектора критично.</p><h2>Преимущества, которые оценит даже скептик</h2><p>Рассмотрим подробно плюсы перехода на отечественные программно-определяемые сети.</p><h3>Централизованное управление: оптимизация времени и расходов</h3><p>Вместо настройки каждого коммутатора вручную вы управляете всей сетью через одну веб-панель. Нужно изменить политику безопасности для филиала? Все делается элементарно: не надо ехать на место или объяснять по телефону — правила применяются мгновенно.</p><p>Так работает Basis SDN:</p><ul><li>единый контроллер заменяет десятки разрозненных консолей Cisco Prime или Huawei eSight;</li><li>автоматизация рутинных задач — например, выделение VLAN под новый отдел занимает минуты вместо часов;</li><li>мониторинг в реальном времени — аномалии трафика (DDoS, утечки) система обнаруживает сама и предлагает решения.</li></ul><h3>Микросегментация: безопасность без головной боли</h3><p>В 2025 году кибератаки стали точечными: злоумышленники не ломают всю сеть, а ищут слабые звенья — бухгалтерию, базы данных, IoT-устройства.</p><p>SDN позволяет изолировать критичные сегменты без физического разделения:</p><ul><li>финансовые системы можно отрезать от общего трафика, даже если они используют те же коммутаторы;</li><li>доступ к данным регулируется не только логинами, но и контекстными правилами (например, запрет копирования файлов после 18:00);</li><li>в случае атаки зараженный сегмент автоматически блокируется — без остановки всей сети.</li></ul><h2>Совместимость: работает здесь и сейчас</h2><p>Типичная претензия к российскому ПО — «а вот у Cisco…». Но Basis SDN уже сегодня поддерживает:</p><ul><li>Astra Linux и «Альт» — без костылей в виде дополнительных драйверов;</li><li>оборудование YADRO, БСТ, Aquarius — с гарантией обновлений;</li><li>облачные платформы на базе KVM и отечественных гипервизоров.</li></ul><p>При этом система не требует полного отказа от legacy-инфраструктуры. Например, можно оставить старые коммутаторы Cisco, но управлять ими через SDN-контроллер — это вдвое дешевле, чем менять все железо.</p><h2>Рыночные перспективы: куда движется отрасль</h2><p>Объем рынка SDN в России пока относительно невелик, но к 2031-му прогнозируют его рост до 32 млрд.</p><p>Основные драйверы:</p><ul><li>Госсектор: с 2024 года все госкомпании обязаны использовать «третьи ключи шифрования» — без SDN это нереализуемо.</li><li>Телеком: Ростелеком и МТС тестируют SDN для 5G-сетей — ручное управление таким трафиком уже невозможно.</li><li>Средний бизнес: облачные CRM и ERP требуют гибких сетей, а аренда VMware NSX теперь недоступна.</li></ul><h3>Вывод: свои SDN — это про выживание</h3><p>В 2025 году вопрос уже не в том, «зачем свои SDN», а в том, как быстро компании смогут перейти на них. Ожидать возвращения VMware бессмысленно и нерационально.</p><p>При этом:</p><ul><li>Basis SDN — не идеален, но это практически единственное рабочее решение;</li><li>без микросегментации скоро не получится пройти даже базовый аудит ФСТЭК;</li><li>гибридные облака без SDN превращаются в кошмар админа.</li></ul><p>Те, кто внедрит российские SDN сейчас, через 2–3 года получат снижение затрат на 25–40% по сравнению с теми, кто цепляется за «серые» Cisco и Huawei. Остальные рискуют остаться с сетью, которую некому и нечем администрировать.</p><h2>Проблемы отечественных SDN: почему российские «сети из кода» пока не взлетели</h2><p>Однако в 2025 году российские SDN-решения пока далеки от совершенства. Basis SDN от «Базиса» и аналоги от VK Tech («Спрут») — первые ласточки, но их внедрение сталкивается с тремя группами проблем: технологическими, экономическими и рыночными. Разберем каждую.</p><h3>Технологические вызовы: когда железа много, а экспертов нет</h3><p>Эта  группа проблем наиболее показательна для отечественных решений.</p><p><b>Дефицит экспертизы.</b> Для разработки конкурентоспособного SDN нужны специалисты высшего уровня, которых в РФ катастрофически не хватает.</p><p><b>Функциональные пробелы.</b> Basis SDN декларирует 80% функционала VMware NSX, но критичные фичи вроде автономного восстановления после сбоев или глубокой аналитики трафика через ИИ появятся <a href="https://ict-online.ru/news/Basis-SDN-pervoye-setevoye-resheniye-klassa-SDN-sozdannoye-pod-rossiiskikh-zakazchikov-310789">не раньше 2026 года</a>. Для корпоративных клиентов это риск: например, без self-healing атака на один сегмент может парализовать всю сеть.</p><p><b>Совместимость с legacy-инфраструктурой.</b> Большинство российских SDN работают с оборудованием YADRO, Aquarius или «Бифорком». Если у компании стоят старые Cisco или Huawei, миграция потребует полной замены «железа» — а это +30–50% к бюджету проекта.</p><p><i>Пример: В 2024 году Ростелеком-ЦОД пытался интегрировать Basis SDN с унаследованными коммутаторами Juniper. Проект забуксовал — пришлось докупать российские аналоги, что увеличило сроки внедрения на 4 месяца.</i></p><h3>Экономические и регуляторные барьеры: санкции vs. окупаемость</h3><p><b>Высокая стоимость разработки.</b> Создание Basis SDN обошлось в сотни миллионов рублей. Для сравнения: бюджет VMware NSX превышает $1 млрд, но его распределяют на глобальный рынок. Российским вендорам приходится компенсировать затраты за счет узкой локальной аудитории.</p><p><b>Давление санкций.</b> С июня 2024 года США запретили ИТ-консалтинг и облачные услуги для российских компаний. Это ударило по поддержке гибридных инфраструктур. Стало невозможно заказывать аудит сети у зарубежных вендоров, а облачные платформы вроде VMware Cloud Foundation недоступны даже через «серые» схемы.</p><p><b>Долгая окупаемость.</b> По прогнозам «Базиса», Basis SDN окупится за 2–3 года. Но малый бизнес не готов ждать — ему нужны решения здесь и сейчас.</p><h3>Рыночное недоверие: почему бизнес не верит в свои SDN</h3><p>Культ «проверенных» зарубежных решений. Даже санкционные Cisco ACI и VMware NSX остаются в топе запросов у российских интеграторов.</p><p>Причины:</p><ul><li>Документация. У Cisco — 500+ страниц детальных мануалов, у Basis SDN — 80, и половина на уровне «как включить контроллер».</li><li>Сообщество. Для VMware NSX есть 1000+ готовых скриптов на GitHub, для Basis SDN — меньше 50.</li></ul><p>Низкая осведомленность малого бизнеса. Опрос бизнес-лаборатории «КРОК» показал: 60% компаний с оборотом до 1 млрд руб. считают SDN «дорогой игрушкой для корпораций». При этом они не знают, что микросегментация в Basis SDN снижает риски утечек на 40% — но об этом не пишут в СМИ.</p><p>Российские SDN не смогут конкурировать с зарубежными, пока:</p><ul><li>не сократится разрыв в экспертизе — нужны образовательные программы уровня Cisco Networking Academy;</li><li>не появятся гарантии долгосрочной поддержки — например, госсубсидий на 5–10 лет;</li><li>не изменится восприятие рынка — тут нужны кейсы уровня «Сбербанк полностью перешел на Basis SDN».</li></ul><p>Сейчас Basis SDN остается нишевым продуктом для госсектора и Ростелекома.</p><h2>Кейсы и перспективы: где российские SDN уже работают и куда движутся</h2><p>В 2025 году российские SDN-решения перестали быть лабораторными проектами — они постепенно внедряются в реальную инфраструктуру. Но масштабы пока несопоставимы с зарубежными аналогами.</p><p>Разберем, где Basis SDN и другие решения уже доказали свою жизнеспособность, какие рынки могут стать для них перспективными и что мешает ускорить развитие.</p><h3>Basis SDN: первый крупный кейс — «Ростелеком-ЦОД»</h3><p>В мае 2025 года «Базис» <a href="https://www.cnews.ru/news/line/2025-05-28_bazis_predstavila_basis_sdn">завершил пилотное внедрение</a> своего SDN-решения в дата-центрах Ростелекома.</p><p>Проект показал:</p><ul><li>Сокращение времени настройки VLAN с 4 часов до 15 минут за счет централизованного управления.</li><li>Микросегментация финансовых сервисов — изоляция платежных систем снизила риски атак на 40% по данным внутреннего аудита.</li><li>Совместимость с оборудованием: 70% старых коммутаторов Cisco удалось интегрировать через шлюзы на базе KVM, хотя изначально Basis SDN разрабатывался для российского «железа» YADRO и Aquarius.</li></ul><figure><img src="https://media.tproger.ru/user-uploads/113565/2025-06-12/d64df88f-43a2-4a51-967e-4e5f3967e1d5.png" alt="" /></figure><h2>Потенциальные рынки: где российские SDN могут закрепиться</h2><p>В июне 2025 года «Базис» анонсировал партнерство с телеком-оператором в ЮАР.</p><p>Причины интереса:</p><ul><li>Цена: $15 000 за контроллер против $30 000 у VMware NSX.</li><li>Санкционная нейтральность: в Африке нет давления на использование российского ПО, а китайские аналоги (например, ZTE SDN) проигрывают в функционале.</li></ul><p>Планируются поставки в Бразилию (интеграция с облачной платформой на базе OpenStack) и Казахстан (совместный проект с «Казтелеком»).</p><p><a href="https://www.moneytimes.ru/news/rynok-sdn-rossiya-2024/56918/#:~:text=%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B9%D1%81%D0%BA%D0%B8%D0%B9%20%D1%80%D1%8B%D0%BD%D0%BE%D0%BA%20SDN%20%D0%BD%D0%B5%20%D1%80%D0%B0%D1%81%D1%82%D0%B5%D1%82%2C%20%D0%BD%D0%BE%20%D0%BE%D1%82%D0%B5%D1%87%D0%B5%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5%20%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F%20%D0%BE%D0%B1%D0%B5%D1%89%D0%B0%D1%8E%D1%82%20%D0%B2%D0%B7%D1%80%D1%8B%D0%B2%D0%BD%D0%BE%D0%B9%20%D1%80%D0%BE%D1%81%D1%82%20%D0%BA%202031%20%D0%B3%D0%BE%D0%B4%D1%83&amp;text=%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B9%D1%81%D0%BA%D0%B8%D0%B9%20%D1%80%D1%8B%D0%BD%D0%BE%D0%BA%20SDN%20%D0%BD%D0%B5%20%D1%80%D0%B0%D1%81%D1%82%D0%B5%D1%82%2C%20%D0%BD%D0%BE%20%D0%BE%D1%82%D0%B5%D1%87%D0%B5%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5%20%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F%20%D0%BE%D0%B1%D0%B5%D1%89%D0%B0%D1%8E%D1%82%20%D0%B2%D0%B7%D1%80%D1%8B%D0%B2%D0%BD%D0%BE%D0%B9%20%D1%80%D0%BE%D1%81%D1%82%20%D0%BA%202031%20%D0%B3%D0%BE%D0%B4%D1%83&amp;text=%D0%9F%D1%80%D0%BE%D0%B3%D0%BD%D0%BE%D0%B7%D1%8B%20iKS%2DConsulting%20%D1%83%D0%BA%D0%B0%D0%B7%D1%8B%D0%B2%D0%B0%D1%8E%D1%82%20%D0%BD%D0%B0%20%D1%82%D0%BE%2C%20%D1%87%D1%82%D0%BE%20%D0%BA,%D1%8D%D1%82%D0%BE%D0%BC%20%D0%B4%D0%BE%D0%BB%D1%8F%20%D0%BE%D1%82%D0%B5%D1%87%D0%B5%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D1%8B%D1%85%20%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D0%B9%20%D0%B4%D0%BE%D1%81%D1%82%D0%B8%D0%B3%D0%BD%D0%B5%D1%82%2044%20%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D0%BD%D1%82%D0%BE%D0%B2.">Согласно прогнозам</a>, к 2031 году объем рынка SDN в РФ вырастет в 2-3 раза, но 80% спроса будет приходиться на госсектор и госкомпании.</p><p>Малый бизнес пока остается в стороне. Проблема в том, что Basis SDN ориентирован на крупные внедрения. Для малого бизнеса нет «облегченных» версий — аналогов Cisco ACI Essentials.</p><h2>Рекомендации: как сделать российские SDN массовыми</h2><p>Российские SDN-решения доказали свою жизнеспособность, но для перехода из нишевого сегмента в массовый нужны системные изменения. Рассмотрим ключевые направления, без которых не обойтись.</p><p>Кадры — основа всего. Чтобы ускорить подготовку специалистов, нужно:</p><ul><li>ввести грантовые программы по типу «Цифровых профессий», но с фокусом на сетевые технологии;</li><li>интегрировать модули по SDN в вузовские программы — пока лишь единицы технических университетов включают их в учебные планы.</li></ul><p>Без этих шагов бизнес будет сталкиваться с той же проблемой, что и сейчас: даже купив Basis SDN, компании не смогут его эффективно использовать из-за нехватки компетенций.</p><p>Госсектор стал основным драйвером спроса на отечественные SDN, но для массового внедрения нужны меры, стимулирующие переход коммерческих компаний. Опыт Китая показывает, что субсидии на 50% затрат при миграции с VMware/Cisco резко увеличивают долю локальных решений.</p><p>Кроме того, стоит рассмотреть налоговые каникулы для стартапов в области сетевой виртуализации и заняться софинансированием пилотных проектов в среднем бизнесе — например, через Фонд развития цифровой экономики.</p><p>Одна из главных претензий к Basis SDN — слабая интеграция со сторонними платформами. Для сравнения: VMware NSX поддерживал свыше 200 приложений, а у российского аналога их на порядки меньше.</p><p>Без этого Basis SDN так и останется «закрытым» продуктом для узкого круга заказчиков. Российские SDN не станут массовыми сами по себе — нужна скоординированная работа бизнеса, образовательных учреждений и регуляторов.</p><h2>Итоги: отечественные SDN требуют долгосрочной стратегии</h2><p>Российские решения вроде Basis SDN доказали, что могут работать в реальных условиях. Но чтобы конкурировать глобально, нужно:</p><ul><li>увеличить долю рынка внутри страны — пока она менее 5%;</li><li>снизить порог входа для малого бизнеса;</li><li>выйти за пределы госзаказов — иначе продукт останется нишевым.</li></ul><p>Жизнеспособность у проекта есть. Basis SDN закрывает 80% базовых потребностей бизнеса: микросегментация, централизованное управление, совместимость с российским «железом». Но критичные функции вроде автономного восстановления сетей появятся только к 2026 году.</p><p>Аналитики предсказывают рост рынка SDN в России, но это произойдет только если появятся новые фичи: например, интеграция с ИИ для прогнозирования сетевых аномалий, снизится порог входа и вырастет число специалистов.</p><p>Что может сделать каждый:</p><ul><li><b>Тестировать.</b> «Базис» активно привлекает IT-комьюнити к доработке Basis SDN. Участие в пилотах — способ повлиять на развитие продукта.</li><li><b>Развивать open-source.</b> Проекты вроде OpenDaylight и OpenStack — основа для российских SDN. Чем больше контрибьюторов, тем быстрее сократится разрыв с зарубежными аналогами.</li><li>Требовать документирования. Одна из главных претензий к Basis SDN — скудные мануалы. Если разработчики увидят запрос от сообщества на детальные гайды, они быстрее их выпустят</li></ul><p>Главный вывод: SDN — не просто технология, а новая сетевая парадигма. Россия может занять в ней свое место, но для этого нужны не точечные успехи, а системные изменения.</p><p>Больше инфоповодов — в нашем <a href="https://t.me/+WYtyV4-XYmdhZTMy">тг-канале.</a></p>]]></content:encoded>
    </item>
    <item>
      <title>Как я развернул сайт на Java Spring Boot + Angular SSR с Docker и Nginx: личный опыт</title>
      <link>https://tproger.ru/articles/kak-ya-razvernul-sajt-na-java-spring-boot---angular-ssr-s-docker-i-nginx--lichnyj-opyt</link>
      <comments>https://tproger.ru/articles/kak-ya-razvernul-sajt-na-java-spring-boot---angular-ssr-s-docker-i-nginx--lichnyj-opyt?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Александр Тюрин ]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kak-ya-razvernul-sajt-na-java-spring-boot---angular-ssr-s-docker-i-nginx--lichnyj-opyt</guid>
      <description><![CDATA[<p>Как развернуть сайт на Spring Boot и Angular с SSR, Docker и Nginx: пошаговый опыт настройки, устранения ошибок, подключения HTTPS и защиты от ботов.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kak-ya-razvernul-sajt-na-java-spring-boot---angular-ssr-s-docker-i-nginx--lichnyj-opyt">Как я развернул сайт на Java Spring Boot + Angular SSR с Docker и Nginx: личный опыт</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[SEO]]></category>
      <category><![CDATA[Микросервисы]]></category>
      <category><![CDATA[PHP]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Сервисы]]></category>
      <category><![CDATA[Docker]]></category>
      <category><![CDATA[Фронтенд]]></category>
      <category><![CDATA[QA]]></category>
      <category><![CDATA[Бэкенд]]></category>
      <category><![CDATA[Angular]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[микро]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sat, 31 May 2025 09:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Проект представляет
собой веб-приложение на Spring Boot и Angular.
Первоначально я выбрал простую монолитную
архитектуру, но по мере роста требований
и целей пришлось перейти на микросервисный
подход. Здесь я расскажу, как это
происходило: с конфигурациями, ошибками
и решениями.</p><h2>Монолитная архитектура</h2><p>Исходная схема:</p><ul><li>Backend: Spring Boot</li><li>Frontend:
	Angular</li></ul><p>Так как у меня уже
был арендованный VDS, я зарегистрировал
домен у одного известного провайдера,
а хостил сайт уже на VDS сервере.
Для простоты интегрировал Angular-сборку
в Spring Boot как статику через
frontend-maven-plugin.
Всё собиралось в один JAR. Почему так?
Ранее уже был такой опыт, и я решил пойти
этим путем.</p><p>После регистрации
домена необходимо подождать, чтобы ввести доменное имя.
Значит есть время для запуска и настройки
приложения. Однако при тестировании
проявились ключевые недостатки:</p><ul><li>Отсутствие SSR в
	Angular негативно влияло на SEO;</li><li>Ошибка в Angular ломала Maven-сборку;</li><li>Сложно поддерживать и масштабировать.</li></ul><h2>Переход на микросервисы</h2><p>Было принято решение
разделить фронтенд и бэкенд на отдельные
сервисы и использовать микросервисный
подход с SSR для Angular:</p><p>Новая структура:</p><ul><li>Backend: Spring Boot</li><li>Frontend:
	Angular Universal (SSR)</li><li>Инфраструктура:
	Docker Compose, Nginx, HTTPS</li></ul><h3>Docker, Nginx и запуск</h3><p>Создана базовая
структура docker-compose.yml:</p><p>И соответствующий
Nginx:</p><p>После запуска проект
открывался по IP, но появилось множество
проблем:</p><ul><li>Дублирование
	API-префиксов: /api/api/endpoint
→
	Решение: корректировка proxy_pass
	и URL в Angular</li><li>Редиректы
	на POST: Spring добавлял лишние слеши
→
	Решение: правильные аннотации и настройка
	Nginx</li><li>405
	Method Not Allowed
→ Решение: использовать
	@PostMapping</li><li>Docker-сети
→
	Решение: задать общую сеть в
	docker-compose.yml</li></ul><h3>Безопасность: HTTPS, SSL, CORS</h3><p>Чтобы сайт открывался
по имени с панели провайдера для моего
домена, значения DNS-сервера оставил без
изменений (провайдер предоставляет их
бесплатно), а для ресурсной записи @ и
www указал ip адрес своего хостинга. Так
как провайдер домена бесплатно
предоставил SSL-сертификаты (Let's Encrypt), то
как я их интегрировал:</p><p>Скачал с панели
провайдера и перенес на хостинг такие
файлы:</p><p>domain.crt — сертификат</p><p>domain.key — приватный
ключ</p><p>ca_bundle.crt — цепочка
доверия</p><p>Добавил
в Nginx такую запись для HTTPS:</p><p>Но при обращении к сайту по https конечно же возникли ошибки.
А именно: в логах Nginx были ошибки на
SSL_CTX_use_PrivateKey_file.
Оказалось формат был PKCS#7, а
требовался PEM. Конвертировал через
OpenSSL:</p><p>Так
как сертификаты имеют срок действия,
не стоит забывать об их продлении и
обновлении.</p><p>К
тому же всегда следует проверять логи
Nginx (error.log), там могут находится ответы
на вопросы, почему сайт не работает.</p><p>На стороне Spring Boot
были CORS-проблемы, решено так:</p><h3>Атаки ботов и защита</h3><p>После запуска сайта
в логах Nginx стали появляться тысячи
запросов от ботов, ищущих уязвимости
WordPress, PHPMyAdmin и других популярных утилит,
хотя мой сайт работает на Java/Angular. Пример
лога:</p><p><i>45.155.205.213
- - [01/Jan/2023:04:12:11 +0000] "GET /wp-login.php HTTP/1.1"
404 153</i></p><p>Добавлен фильтр в
nginx.conf:</p><h3>Финальная конфигурация</h3><p>После
всех настроек мой сайт
работает и полностью функционирует.
Конфигурация сильно изменена по сравнению
с первоначальной. Вот как они выглядят
сейчас.</p><p><i>docker-compose.yml</i></p><p><i>
nginx.conf</i></p><p><i>
Dockerfile backend</i></p><p><i>
Dockerfile frontend</i></p><p>Разделение сервисов
улучшило поддержку и масштабируемость, к тому же, я получил ценные знания. Надеюсь,
статья будет полезна тем, кто разворачивает
подобные конфигурации на Java и Angular.</p>]]></content:encoded>
    </item>
    <item>
      <title>Программист опубликовал жесткий манифест против «ИИ-зависимых» разработчиков</title>
      <link>https://tproger.ru/news/programmist-opublikoval-zhestkij-manifest-protiv--ii-zavisimyh--razrabotchikov</link>
      <comments>https://tproger.ru/news/programmist-opublikoval-zhestkij-manifest-protiv--ii-zavisimyh--razrabotchikov?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Булат Яббаров]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/programmist-opublikoval-zhestkij-manifest-protiv--ii-zavisimyh--razrabotchikov</guid>
      <description><![CDATA[<p>Программист опубликовал манифест против ИИ-зависимых разработчиков — сарказм, злость и призыв вернуться к настоящему кодингу</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/programmist-opublikoval-zhestkij-manifest-protiv--ii-zavisimyh--razrabotchikov">Программист опубликовал жесткий манифест против «ИИ-зависимых» разработчиков</a>»</p>]]></description>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[PHP]]></category>
      <category><![CDATA[Искусственный интеллект]]></category>
      <category><![CDATA[SQL]]></category>
      <category><![CDATA[Английский]]></category>
      <category><![CDATA[Юмор]]></category>
      <category><![CDATA[Промпты]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 23 May 2025 16:19:10 GMT</pubDate>
      <content:encoded><![CDATA[<p>Американский разработчик Лейн из образовательного проекта Boot.dev <a href="https://www.justfuckingcode.com/">опубликовал</a> вирусный манифест против бездумного увлечения ИИ-инструментами в программировании.</p><p>Его эссе представляет из себя смесь агрессии, сарказма и очень злого юмора. Публикация быстро разошлось в соцсетях среди инженеров, которым не по вкусу тренд на вайб-кодинг.</p><p>Манифест начинается с фразы, ставшей мемом в англоязычных коммьюнити:</p><p><i>Just f**king code. Put the LLM down (Просто пиши код. Убери свою LLM к черту)</i></p><h2>Что не так с «новыми разработчиками»</h2><p>По мнению автора, искусственный интеллект стал костылем для тех, кто называет себя программистом, но не умеет читать чужой код, писать SQL-запросы или отлаживать простейший HTTP-хендлер без помощи ChatGPT, Copilot или Cursor.</p><blockquote><i>«Если ты уходишь домой, потому что у Anthropic API упал — возможно, тебе не стоит получать зп в пятью нулями», — пишет автор</i></blockquote><p>Лейн признается: он сам использует ИИ-инструменты. Но только как ускоритель, а не как замену понимания. И если код, сгенерированный ИИ, все равно приходится переписывать, то какой смысл в этом «вайбе»?</p><h2>Код должен быть болью — но твоей</h2><p>Манифест жестко критикует разработчиков, которые не читают чужой код, не умеют дебажить и вместо этого «тюнят промпты». Лейн язвит: современные инженеры так боятся взглянуть на чужой код, что предпочли бы настраивать Jira.</p><h2>Почему английский — хуже PHP</h2><p>В одной из самых абсурдных, но точных частей эссе Лейн сравнивает естественный язык с худшими чертами устаревших языков программирования:</p><blockquote><i>«Английский — как PHP, только для общения. Столько исключений, что легче выучить математику»</i></blockquote><p>Именно поэтому, по его мнению, промпт-инжиниринг не спасет от незнания основ. Если ты не понимаешь, что хочешь от кода — ты не сможешь объяснить это ни ChatGPT, ни Claude.</p><h2>Это была сатира (но не совсем)</h2><p>В финале автор делает полшага назад: он признает, что сам редактировал текст с помощью GPT и не отрицает пользы ИИ-инструментов.</p><p>Но тут же он предупреждает: «ожидать от ИИ чистого, идеального кода — значит не понимать, как работает программирование».</p><p>Манифест заканчивается цитатой:</p><blockquote><i>«Хороший код — это как можно меньше кода», — какой-то умный человек</i></blockquote>]]></content:encoded>
    </item>
    <item>
      <title>Разработчик развеял мифы о чистом коде, трендах и идеальном программировании</title>
      <link>https://tproger.ru/news/--razrabotchik-razveyal-mify-o-chistom-kode--trendah-i-idealnom-programmirovanii-255770</link>
      <comments>https://tproger.ru/news/--razrabotchik-razveyal-mify-o-chistom-kode--trendah-i-idealnom-programmirovanii-255770?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Булат Яббаров]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/--razrabotchik-razveyal-mify-o-chistom-kode--trendah-i-idealnom-programmirovanii-255770</guid>
      <description><![CDATA[<p>Разработчик развеял мифы о чистом коде и трендах — почему идеальное программирование не всегда оправдано в реальных проектах</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/--razrabotchik-razveyal-mify-o-chistom-kode--trendah-i-idealnom-programmirovanii-255770">Разработчик развеял мифы о чистом коде, трендах и идеальном программировании</a>»</p>]]></description>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[C++]]></category>
      <category><![CDATA[Производительность]]></category>
      <category><![CDATA[PHP]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Советы]]></category>
      <category><![CDATA[Rust]]></category>
      <category><![CDATA[WordPress]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 12 May 2025 03:42:44 GMT</pubDate>
      <content:encoded><![CDATA[<p>В мире разработки часто звучат советы писать чистый код, использовать TDD и быть в курсе последних технологий. Однако Амрит Пандей — разработчик с многолетним опытом, работавший как с модными фреймворками, так и с «устаревшими» технологиями — <a href="https://amritpandey.io/programming-myths-we-desperately-need-to-retire/">развеял</a> несколько мифов об идеальном программировании.</p><p>Больше новостей — в нашем тг-канале «<a href="https://t.me/your_tech">Представляешь»</a></p><p>Он отмечает, что многие советы кажутся логичными на бумаге, но в реальной работе теряют свою ценность.</p><p>Например, философия чистого кода, популяризированная дядей Бобом, действительно помогает писать понятный и поддерживаемый код, но её применение может быть сложным в старых, нагруженных легаси-системах. Многие из них были созданы задолго до появления современных принципов, и переписывать их просто ради красоты — не всегда оправданно.</p><h2>Тренды не всегда важны</h2><p>Ещё один миф — необходимость следовать последним технологическим трендам. Разработчик напоминает, что PHP, которому часто предрекают конец, всё ещё используется на большинстве сайтов, включая WordPress. А Java и C/C++ продолжают работать в критически важных системах и управляют миллиардами устройств:</p><blockquote><i>«Новые технологии, такие как Rust или Next.js, действительно крутые, но это не значит, что работа с устаревшими системами делает вас менее ценным специалистом»</i></blockquote><h2>Производительность не главное</h2><p>Автор также развенчивает культ оптимизации. Многие разработчики стремятся к максимальной скорости кода, забывая, что для большинства бизнес-систем надёжность и стабильность важнее скорости.</p><p>Например, банкоматы работают на старых финансовых системах, и никто не требует от них микросекундной реакции — главное, чтобы деньги выдавались исправно.</p><h2>Масштабируемость — не всегда приоритет</h2><p>Разработчик подчёркивает, что большинство стартапов не требуют архитектур, готовых к миллионам пользователей. Стремление проектировать системы для гипотетических нагрузок часто приводит к усложнению кода и потере фокуса на реальных задачах бизнеса.</p><h2>ИИ не заменит программистов</h2><p>И наконец, автор отрицает миф о том, что ИИ заменит разработчиков. По его словам, ИИ может помочь автоматизировать рутинные задачи, но не заменит людей, которые понимают бизнес-логику и умеют принимать сложные архитектурные решения.</p>]]></content:encoded>
    </item>
    <item>
      <title>Утилита с 30 000 звезд на GitHub: как пет-проект стал тулзой для LinkedIn и властей США</title>
      <link>https://tproger.ru/news/utilita-s-30-000-zvezd-na-github--kak-pet-proekt-stal-tulzoj-dlya-linkedin-i-vlastej-swa</link>
      <comments>https://tproger.ru/news/utilita-s-30-000-zvezd-na-github--kak-pet-proekt-stal-tulzoj-dlya-linkedin-i-vlastej-swa?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Булат Яббаров]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/utilita-s-30-000-zvezd-na-github--kak-pet-proekt-stal-tulzoj-dlya-linkedin-i-vlastej-swa</guid>
      <description><![CDATA[<p>Инструмент, начатый как пет-проект в 2004 году, стал инструментом для властей США и LinkedIn: 30 000 звезд, 50 сотрудников и путь от PHP до венчурной устойчивости</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/utilita-s-30-000-zvezd-na-github--kak-pet-proekt-stal-tulzoj-dlya-linkedin-i-vlastej-swa">Утилита с 30 000 звезд на GitHub: как пет-проект стал тулзой для LinkedIn и властей США</a>»</p>]]></description>
      <category><![CDATA[Open Source]]></category>
      <category><![CDATA[Git]]></category>
      <category><![CDATA[MySQL]]></category>
      <category><![CDATA[PHP]]></category>
      <category><![CDATA[SQL]]></category>
      <category><![CDATA[Рефакторинг]]></category>
      <category><![CDATA[GitHub]]></category>
      <category><![CDATA[Стартапы]]></category>
      <category><![CDATA[Vue]]></category>
      <category><![CDATA[Пет-проект]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 01 May 2025 13:51:06 GMT</pubDate>
      <content:encoded><![CDATA[<p>Бен Хейнс <a href="https://medium.com/@ben_haynes/i-started-an-open-source-project-in-2004-8d38820a7ecd">начал</a> писать свой инструмент в 2004 году — задолго до GitHub, до стартапов и даже до появления у него детей.</p><p>Больше новостей — в нашем тг-канале «<a href="https://t.me/your_tech">Представляешь»</a></p><p>Он просто хотел заменить phpMyAdmin чем-то более безопасным и понятным для клиентов. Сегодня у его проекта — <a href="https://github.com/directus/directus">более 30 000 звезд</a>, клиенты из списка Fortune 500 и команда из 50 человек.</p><h2>10 лет в одиночку</h2><p>Первые 10 лет инструмент был сугубо личным. Без сообщества, без поддержки, без амбиций. Только PHP, MySQL и Бен. Когда-то он просто поставил на стол счетчик звезд с GitHub — и каждая новая звезда ощущалась как маленькая победа.</p><h2>10 000 звезд: первая волна</h2><p>Где-то в 2015 году о проекте начали говорить — в Reddit, Slack, GitHub Explore. К проекту присоединился Рейк ван Зантен, будущий со-основатель.</p><p>Вместе они вычистили кучу спагетти-кода, переписали все с PHP на Node и Backbone на Vue. Тогда же их позвали в Сан-Франциско — крупная компания хотела внедрить проект, но испугалась, что за ним стоит всего два человека без юрлица.</p><h2>20 000 звезд: время становиться бизнесом</h2><p>Хейнс закрыл имевшееся у него агентство и оформил компанию. Поднял $1 млн, собрал команду, запустил облачный сервис.</p><p>Затем, после сотни встреч с инвесторами и обвала венчурного рынка, нашел партнера, который понял ценность OSS. Удалось закрыть $8 млн — и с этого момента встал вопрос устойчивости: как зарабатывать, не предавая open-source?</p><p>Ответ — собственная лицензия с бесплатным использованием для всех, кроме корпораций. Работали даже с Брюсом Перенсом, сооснователем OSI.</p><h2>30 000 звезд: устойчивость</h2><p>Сегодня проект — это компания из 50 человек. Впервые на горизонте — прибыль. Продуктом пользуются правительственные агентства, крупнейшие компании, стартапы.</p><p>И да, недавно они тихо подняли еще $9 млн — на новый архитектурный рефакторинг.</p><p>Самое сложное, по словам Бена — сохранять баланс: открытость, прозрачность, вменяемую монетизацию и доверие сообщества.</p>]]></content:encoded>
    </item>
    <item>
      <title>Как перевести проект на Laravel: пошаговый план перехода</title>
      <link>https://tproger.ru/articles/kak-perevesti-proekt-na-laravel--powagovyj-plan-perehoda</link>
      <comments>https://tproger.ru/articles/kak-perevesti-proekt-na-laravel--powagovyj-plan-perehoda?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Вадим Егорцев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kak-perevesti-proekt-na-laravel--powagovyj-plan-perehoda</guid>
      <description><![CDATA[<p>Как перевести проект на Laravel. Показываем основные преимущества использования Ларавел. Рассматриваем пошаговую инструкцию нюансы переноса ✔ Tproger</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kak-perevesti-proekt-na-laravel--powagovyj-plan-perehoda">Как перевести проект на Laravel: пошаговый план перехода</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[Тестирование]]></category>
      <category><![CDATA[Git]]></category>
      <category><![CDATA[Производительность]]></category>
      <category><![CDATA[JSON]]></category>
      <category><![CDATA[MySQL]]></category>
      <category><![CDATA[PHP]]></category>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[CSS]]></category>
      <category><![CDATA[SQL]]></category>
      <category><![CDATA[HTML]]></category>
      <category><![CDATA[GitHub]]></category>
      <category><![CDATA[Сервисы]]></category>
      <category><![CDATA[React]]></category>
      <category><![CDATA[Фронтенд]]></category>
      <category><![CDATA[QA]]></category>
      <category><![CDATA[Приложение]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[Библиотеки]]></category>
      <category><![CDATA[Vue]]></category>
      <category><![CDATA[Laravel]]></category>
      <category><![CDATA[Бизнес]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[CI/CD]]></category>
      <category><![CDATA[DPI]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sun, 30 Mar 2025 09:00:02 GMT</pubDate>
      <content:encoded><![CDATA[<p>Когда код устаревает, его поддержка превращается в борьбу с хаосом. После пересмотра архитектуры приходит пугающее осознание: нужно переезжать на более современный стек. Однако непонятно, с чего начать.</p><p><i>В этой статье пошагово разберем перенос вашего проекта на Laravel. Вы узнаете, как мигрировать с минимальными рисками для разработки и пользователей.</i></p><h2>Шаг 1. Готовимся к миграции</h2><p>Посмотрите структуру проекта, чтобы выявить слабые места.</p><p>Архитектура далека от идеала, если проект вырос на хаотичных добавлениях новых функций.</p><p>Проанализируйте:</p><ul><li><b>Вид проекта</b>. Ваша разработка — это монолит, модульная система, API, микросервис?</li><li><b>Зависимости</b>. Определите, какие библиотеки использует проект. Совместимы ли они с Laravel?</li><li><b>Базу данных</b>. Если в БД встречаются дубли, отсутствуют ограничения, это нужно исправить заранее.</li></ul><p>В качестве теста на совместимость перепишите небольшую часть на Laravel. Возьмите один простой модуль и посмотрите, насколько это жизнеспособно.</p><h2>Стратегии перехода</h2><p>Выберем стратегию перехода:</p><ul><li>Big Bang,</li><li>Поэтапный перенос.</li></ul><p><b>Стратегия Big Bang</b> — это полная остановка текущего проекта и создание новой версии на Ларавел с нуля.</p><p>Подход идеален для устаревших и запутанных систем.</p><p>Из минусов — высокие риски. Во время разработки текущая версия может растерять пользователей. К тому же сроки реализации могут затянуться.</p><p><b>Стратегия с постепенным переходом</b> выглядит надежнее.</p><p>Система продолжает работать, а вы поэтапно меняете ее «под капотом».</p><p>Единственный нюанс — готовьтесь к сложностям поддержки, когда часть системы заработает в новой архитектуре, а часть останется в старой.</p><h4>Выбор подхода зависит от проекта</h4><p>Если систему легко поддерживать, то более безопасен постепенный переход.</p><p>Проект напоминает спагетти-код? Плохие новости — Big Bang неизбежен.</p><h2>Шаг 2. Разворачиваем новое окружение на Laravel</h2><p>Чтобы установить фреймворк, выполните команду:</p><p>Прежде чем работать с кодом, настроим окружение.</p><p>В корне проекта для этого есть файл конфигурации .env:</p><ul><li><b>APP_NAME</b>: имя приложения, чтобы оно отображалось в логах и заголовках.</li><li><b>APP_URL</b>: адрес, на котором приложение будет доступно (например, http://localhost).</li></ul><p>В будущем запланирована интеграция с существующей базой, поэтому лучше сразу настроить подключение.</p><h3>Подключение БД</h3><p>Laravel использует <b>Eloquent ORM</b> для взаимодействия с базой.</p><p>Настройка БД выполняется в том же разделе .env:</p><p>Для тестирования подключения запустите команду:</p><h2>Настройка маршрутов</h2><p>Маршруты изначально хранятся в файлах <i>routes/web.php</i> (для страниц) или <i>routes/api.php</i> (для <a href="https://tproger.ru/translations/luchshie-praktiki-razrabotki-rest-api-20-sovetov">REST API</a>).</p><p>В качестве примера добавим базовый маршрут приветствия:</p><p>Если у вас проект с десятками пользовательских маршрутов, интегрируйте их постепенно.</p><h2>Шаг 3. Переносим модели данных и бизнес-логики</h2><p>Eloquent ORM работает с классами, представляющими таблицы в базе данных.</p><p>Чтобы перенести существующую таблицу, нужно создать <b>модель</b>:</p><p>Этот класс автоматически подключается к таблице с именем products.</p><p>Когда название таблицы не соответствует модели, это можно указать явно:</p><p>Если в таблице есть нестандартные поля (например, столбцы с именами вроде created_time вместо created_at), их тоже можно легко обработать:</p><h2>Переносим схему БД</h2><p>Laravel использует механизм <b>миграций </b>для управления таблицами в базе и <b>сиды </b>для внесения данных.</p><p>Перенос структуры БД выполняется командой:</p><p>Миграция создается в папке <i>database/migrations</i>.</p><h3>Переносим данные</h3><p>Если текущая БД уже содержит данные, их можно перенести через <b>сиды</b>: файлы, которые заполняют таблицы данными.</p><p>Создаем сид:</p><p>Внутри метода run описываем данные:</p><h3>Переводим бизнес-логику в сервисы и фасады</h3><p>Старый проект состоит из функционала, размазанного по контроллерам? Улучшим структуру и сделаем код независимым. С этим помогут сервисы и фасады.</p><p><b>Сервисы </b>— это классы, которые объединяют бизнес-логику в одном месте.</p><p>Например, если проект выполняет расчеты цен и скидок, можно создать класс:</p><p>В этом классе описана бизнес-логика:</p><p>Теперь сервис можно вызывать в контроллерах и моделях.</p><p><b>Фасады </b>— это статический интерфейс к сервисам, который делает вызовы более читаемыми.</p><p>Например:</p><p>С фасадом вызов становится простым:</p><h2>Шаг 4. Перенос маршрутов и контроллеров</h2><p>Начнем с <b>маршрутов</b>. Они определяют, как пользователи будут взаимодействовать с приложением.</p><p>Если в старом проекте использовались API-запросы для работы с внешними сервисами или мобильными приложениями, перенесем их в <i>api.php</i> и добавим префикс api для маршрутов:</p><p>Теперь про <b>контроллеры</b>. Они отвечают за логику обработки запросов и взаимодействие с моделями. В Laravel контроллеры работают по правилам <b>MVC </b>(Model-View-Controller).</p><p>Пример обычного метода контроллера:</p><p>Laravel определяет маршруты групповыми методами — по префиксам, middleware или зонам авторизации.</p><p><b>Middleware </b>— это посредники, которые обрабатывают запросы до их поступления в приложение.</p><p>Навесим middleware на маршруты, требующие авторизации пользователя:</p><p><b>Политики </b>контролируют доступ к определенным ресурсам, например, правку или удаление записей.</p><p>Пример метода политики:</p><p>Политики можно подключать к маршрутам или напрямую вызывать в контроллерах.</p><h2>Шаг 5. Перенос фронтенда и представлений</h2><p>Если ваш старый проект использует обычные HTML-файлы, они легко преобразуются в Blade.</p><p><b>Blade </b>— это встроенный механизм шаблонов. С его помощью создают пользовательские интерфейсы.</p><p>Например, перенесем главную страницу сайта:</p><p>Blade-версия:</p><p>Теперь можно динамически передавать данные из контроллера:</p><p>Blade поддерживает механизм наследования, который упрощает работу с повторяющимися частями интерфейса.</p><h3>Интегрируем Vue.js или React</h3><p>Vue.js/React подключают, когда нужен динамичный и интерактивный интерфейс. Например, для <a href="https://tproger.ru/articles/ssr-ili-spa-veb-sajty-chto-vybrat-dlya-vas-i-vawego-biznesa">SPA</a>, реалтайм-функционала, сложных форм или фильтров.</p><p>Blade и JavaScript можно комбинировать: используйте Blade для рендеринга начального интерфейса и Vue.js/React для обработки интерактива.</p><h3>Динамический интерфейс без JS</h3><p><b>Livewire </b>— это инструмент для создания интерфейсов без необходимости обращаться к внешним библиотекам JavaScript. Преимущество в том, что весь код пишется на PHP.</p><p>Livewire пригодится для динамических форм, фильтрации таблиц, уведомлений. Он упрощает код, сохраняя гибкость.</p><h2>Шаг 6. Оптимизируем и тестируем проект</h2><p>Отправная точка улучшения производительности — работа с Blade-шаблонами. Laravel сам их оптимизирует, но есть практики по дополнительному ускорению:</p><ul><li><b>Минимизация логики в представлении</b>. Злоупотребление PHP внутри Blade замедляет рендеринг страниц. Вместо описания сложной логики в шаблонах ее лучше перенести в контроллер.</li><li><b>Кэширование шаблонов</b>. Работу приложения можно ускорить за счет запуска кэширования всех шаблонов, сокращая время компиляции — «<i>php artisan view:cache</i>».</li><li><b>Переиспользование</b>. Если фронтенд состоит из повторяющихся фрагментов, рекомендуется использовать Blade-компоненты.</li></ul><p>В приложениях SPA оптимизируем фрагменты JavaScript.</p><p><b>Laravel Mix</b> генерирует минифицированные CSS и JS. Проверьте размер этих файлов в папке <i>public/js</i>. Если их вес больше 1 МБ:</p><ul><li>Удалите лишние пакеты.</li><li>Используйте динамическую загрузку маршрутов или компонентов.</li></ul><p>Для Vue можно использовать динамическую загрузку, чтобы не грузить весь фронтенд сразу:</p><h3>Тестирование</h3><p>Убедимся, что приложение работает корректно.</p><p>Проверим, например, что страница приветствия открывается и показывает нужный текст:</p><p>Если используете Vue.js или React, для проверки компонентов применяйте <b>Jest </b>или <b>Mocha</b>.</p><p>Тест, который проверяет, что компонент отобразил нужный текст:</p><p>Если приложение работает с API:</p><p>Для проверки приложения под нагрузкой можно использовать <b>Artillery </b>или <b>JMeter</b>.</p><h2>Шаг 7. Разворачиваем и запускаем проект</h2><p>Перенесли данные, создали маршруты и контроллеры, внедрили представления, оптимизировали приложение и протестировали его. Остался последний шаг — развернуть проект на сервере и запустить его.</p><p>Выбор сервера зависит от предпочтений и нагрузок:</p><ul><li>Если важна скорость и масштабируемость, выбирайте <a href="https://tproger.ru/articles/video-osnovy-nginx-dlja-nachinajushhih-za-200-sekund">Nginx</a>. Он быстрее работает под высокой нагрузкой.</li><li>Если важен простой подход, используйте <a href="https://tproger.ru/video/video-osnovy-apache-kafka">Apache</a>. Он интегрируется с большинством систем.</li></ul><p>Фоновые задачи можно связать с <b>Supervisor</b>. Инструмент автоматически запускает воркеров при сбоях, обеспечивая бесперебойную обработку задач.</p><h3>Автоматизация развертывания</h3><p>Чтобы релиз прошел безболезненно, нужен рабочий процесс CI/CD. Например, в <a href="https://tproger.ru/articles/integraciya-ci-cd-processov-s-ispolzovaniem-github-actions">GitHub Actions</a> можно настроить сценарий, который:</p><ol><li>Проверит качество кода.</li><li>Установит зависимости.</li><li>Выполнит миграции.</li><li>Зальет проект на сервер.</li></ol><p>Предусмотрите откат, например, через <b>Spatie Laravel Backup</b>. Если что-то пойдет не так, у вас должна быть возможность вернуть предыдущую версию.</p><p>Инструмент <b>Sentry </b>поможет отслеживать ошибки, а <b>New Relic</b> — оценивать производительность.</p><h2>Заключение</h2><p>Устаревшие проекты уникальны, к каждому нужно искать индивидуальный подход. Надеемся, что пошаговое руководство станет основой для миграции вашего legacy-приложения на Laravel без переписывания кода с нуля.</p>]]></content:encoded>
    </item>
    <item>
      <title>Квиз: сможешь ли ты защитить приложение на PHP?</title>
      <link>https://tproger.ru/quiz/kviz--smozhew-li-ty-zashhitit-prilozhenie-na-php-</link>
      <comments>https://tproger.ru/quiz/kviz--smozhew-li-ty-zashhitit-prilozhenie-na-php-?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Анна Ельцова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/quiz/kviz--smozhew-li-ty-zashhitit-prilozhenie-na-php-</guid>
      <description><![CDATA[<p>PHP — это мощный инструмент, но с ним легко наделать ошибок в безопасности. Ты уверен, что знаешь, как защитить свой код? Проверяй свои навыки в нашем квизе.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/quiz/kviz--smozhew-li-ty-zashhitit-prilozhenie-na-php-">Квиз: сможешь ли ты защитить приложение на PHP?</a>»</p>]]></description>
      <category><![CDATA[PHP]]></category>
      <category><![CDATA[SQL]]></category>
      <category><![CDATA[CSR]]></category>
      <category><![CDATA[Приложение]]></category>
      <category><![CDATA[Викторины]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sat, 29 Mar 2025 09:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Каждый разработчик хоть раз сталкивался с XSS, SQL-инъекциями или CSRF. А еще в веб-разработке не всегда достаточно прикольных фич и разных фишек. Веб-приложение в первую очередь должно быть безопасным. Проходи квиз и проверяй, сможешь ли ты предотвратить различные ошибки и уязвимости.</p><p>А если ты большой фанат PHP, то читай наши статьи по теме:</p><ul><li><a href="https://tproger.ru/articles/http-zaprosy--get--post-i-drugie">HTTP-запросы: GET, POST и другие</a><br /></li><li><a href="https://tproger.ru/articles/obzor-populyarnyh-frejmvorkov-dlya-veb-razrabotki">Фреймворки, меняющие игру: выбираем идеальный инструмент для ваших веб-проектов</a></li><li><a href="https://tproger.ru/articles/pochemu-20-let-vse-govoryat--chto-php-umiraet--a-on-zhiv-250384">Почему 20 лет все говорят, что PHP умирает, а он жив</a></li></ul>]]></content:encoded>
    </item>
    <item>
      <title>Чем заменить Confluence? Разбираем 4 российские базы знаний</title>
      <link>https://tproger.ru/articles/chem-zamenit-confluence--razbiraem-4-rossijskie-bazy-znanij-255108</link>
      <comments>https://tproger.ru/articles/chem-zamenit-confluence--razbiraem-4-rossijskie-bazy-znanij-255108?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Оля Кац]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/chem-zamenit-confluence--razbiraem-4-rossijskie-bazy-znanij-255108</guid>
      <description><![CDATA[<p>Протестировали 4 российских аналога Confluence. Проанализировали плюсы и минусы, выбрали подходящий сервис для дальнейшей работы в IT-компании.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/chem-zamenit-confluence--razbiraem-4-rossijskie-bazy-znanij-255108">Чем заменить Confluence? Разбираем 4 российские базы знаний</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[Linux]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Опрос]]></category>
      <category><![CDATA[PHP]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[Мессенджер]]></category>
      <category><![CDATA[Бизнес]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 27 Mar 2025 13:30:02 GMT</pubDate>
      <content:encoded><![CDATA[<p>Tproger, привет!</p><p>Я Оля, продакт в IT-компании. В нашей команде более 60 человек, и мы стараемся автоматизировать все процессы, чтобы в итоге сосредоточиться на разработке.</p><p>До 2022 года активно использовали Confluence от Atlassian —  создавали базы знаний, вели документацию, отслеживали процессы. Но в 2022 году Atlassian ушел из России.</p><p>Мы не стали резко искать замену Confluence: всё таки он был глубоко встроен в процессы, а рисковать было нельзя. Где-то обошлись выгрузками, где-то — временными решениями и кучей других «костылей». Так и дожили до 2025 года.</p><p>Почему только сейчас решили искать альтернативу? Потому что наконец появилось время подумать не о «как бы не развалилось», а о «как сделать лучше».</p><p>В этот раз решили пересмотреть подход к работе с базой знаний и выбрать российский аналог Confluence, чтобы в итоге не зависеть от санкционной политики и, конечно же, чтобы платформа соответствовала нашим задачам и масштабу команды.</p><p><b>В итоге протестировали четыре сервиса:</b></p><ul><li>Minerva Knowledge</li></ul><ul><li>Eva Wiki,</li><li>«Битрикс24»,</li><li>«ПланФикс».</li></ul><p>Делюсь нашим опытом: что зашло, что не понравилось и на чём в итоге остановились.</p><h2>Какие у нас требования к базе знаний</h2><ol><li><b>Понятный интерфейс.</b> Чтобы было удобно всем: разработчикам, эйчарам, отделу продаж, бухгалтерии. Без перегруженных меню и сложных настроек.</li><li><b>Удобная структура.</b> Возможность создавать иерархии страниц, раздавать права доступа и легко перенести данные из Confluence.</li><li><b>Поиск.</b> Желательно с возможностью находить статьи даже при неточных запросах, но в первую очередь — быстрый и удобный поиск.</li><li><b>Интеграция с другими сервисами.</b> Важно, чтобы база знаний поддерживала работу с внешними системами, например, через API. Если нет готовых модулей интеграции, хотелось бы, чтобы можно было самостоятельно настроить связку с CRM, таск-трекерами или Service Desk.</li></ol><h2>Minerva Knowledge — российский аналог Confluence</h2><p><a href="https://minervasoft.ru/kms">Minerva Knowledge</a> — система управления знаниями для создания корпоративной базы знаний и вики. На сайте компании пишут, что программа рассчитана на средний и крупный бизнес.</p><h2>Что понравилось</h2><p><b>Гибкая структура базы знаний</b> — похожа на Confluence. Можно строить иерархии страниц, настроить поиск по тегам между статьями, раздавать права доступа, легко переносить информацию из других систем.</p><figure><img src="https://media.tproger.ru/user-uploads/113434/2025-04-16/f211c386-be6a-45b9-b8fe-88b87d306b05.png" alt="" /><figcaption>Сотрудники оценили систему иерархии страниц — можно в одном месте найти все нужные ссылки, а не искать гуглдоки, разбросанные по чатам</figcaption></figure><p><b>Умный поиск.</b> Не просто ищет по ключевым словам, но и анализирует контекст. Например, если ввести «завершение релиза 1.2», система найдёт материалы, где говорится о финальных этапах этого релиза, даже если в тексте используются другие формулировки.</p><figure><img src="https://media.tproger.ru/user-uploads/113434/2025-04-16/39886b60-5cf5-4149-882f-2ea6a80168e6.png" alt="" /></figure><p><b>ИИ-ассистент Minerva Copilot.</b> Это умный помощник для автоматизации рутины. Например, приходит тикет: клиент не может войти в корпоративную почту. Вместо того чтобы искать инструкцию вручную, менеджер делает запрос через виджет, который сам находит нужный ответ в базе знаний. Остаётся только проверить и отправить клиенту.</p><p>Copilot можно интегрировать с любой системой компании.</p><figure><img src="https://media.tproger.ru/user-uploads/113434/2025-04-16/a64bc57f-2b55-4adb-af52-2acf45cef87f.png" alt="" /></figure><p><b>Инструменты для совместной работы. </b>Можно комментировать статьи, обсуждать правки, отслеживать изменения и даже видеть, кто прочитал уведомление о действии. Несколько авторов могут работать над одним документом и видеть, кто какие изменения внёс.</p><figure><img src="https://media.tproger.ru/user-uploads/113434/2025-04-16/e93be7fc-1bf8-44af-94d0-20ba8f090152.png" alt="" /><figcaption>Новые комментарии к статьям не теряются в почте или мессенджерах</figcaption></figure><p><b>Интеграция с другими сервисами</b>: CRM, таск-трекерами, Service Desk, ERP, системами управления проектами. Удобно для разных отделов — например, HR-отдел заполняет карточку с данными нового сотрудника, а система сразу подтягивает из базы знаний шаблон трудового договора и велком-сообщение со ссылками и доступами в системы.</p><p><b>Работает без лагов</b>. В Confluence, когда база разрастается, странички начинают подгружаться с задержками. Здесь, в аналоге Confluence, такого нет: грузанули кучу старых документов, а система продолжала работать шустро.</p><h2>Что не понравилось</h2><p><b>Хотелось бы больше уникальных макросов. </b>В Minerva Knowledge не так много плагинов для визуального и текстового контента — всего 25. Да, если вы напишете в техподдержку сервиса, они добавят нужный макрос, но, если не хватает большого количества плагинов, это затруднит работу команды.</p><h2>Технические характеристики Minerva Knowledge</h2><figure><img src="https://media.tproger.ru/user-uploads/113434/2025-04-16/944bbdc5-fc86-4242-8f08-c72597f1b870.png" alt="" /></figure><p>По структуре и возможностям функционал базы знаний Minerva Knowledge оказался максимально похож на аналог Confluence. Включает продвинутые функции, которые закроют потребности крупных и средних команд, в том числе IT.</p><h2>Eva Wiki — достойный вариант для документации</h2><p><a href="https://www.evateam.ru/evawiki/">Eva Wiki </a>— простой сервис для создания корпоративных баз знаний и вики. На сайте заявлено, что это российская замена Confluence.</p><h2>Что понравилось</h2><p><b>Простота и минимализм. </b>Eva Wiki позиционируется как лёгкий и интуитивно понятный сервис для замены Confluence. Интерфейс действительно простой: нет лишних кнопок и сложных настроек.</p><p>Так выглядит интерфейс рабочей области и инструменты для работы с текстом:</p><figure><img src="https://media.tproger.ru/user-uploads/113434/2025-04-16/cf7d1e9d-2ec5-402a-a6a6-5dc4de04a2a5.png" alt="" /></figure><p><b>Гибкая структура.</b> В Eva Wiki можно создавать иерархии страниц и разделов. Например, в рамках теста мы организовали документацию по отделам: разработка, поддержка, HR-отдел. Удобно, что доступы к конфиденциальным документам отделов можно разграничить — например, чтобы сотрудники не копались в приказах HR-отдела и не искали размер годовой премии начальника.</p><p>Так выглядит структура:</p><figure><img src="https://media.tproger.ru/user-uploads/113434/2025-03-26/1a716905-b0f5-4ce1-9d1b-87f50d7bfa3b.png" alt="" /></figure><p><b>Поддержка разметки Markdown.</b> Удобно, что можно сразу посмотреть, как будет выглядеть текст. Достаточно нажать на значок глаза в правом верхнем углу.<b> </b></p><figure><img src="https://media.tproger.ru/user-uploads/113434/2025-03-26/3d0b067a-bb7c-4d9a-a383-6d5ccac703a2.png" alt="" /></figure><p>Работает на отечественных ОС. Например, на Astra Linux, РОСА «КОБАЛЬТ», РЕД ОС, «Альт СП». Актуально, если на проекте всё ПО должно быть российским.</p><h3>Что не понравилось</h3><p><b>Слабый контекстный поиск. </b>Работает только по ключевым словам, не учитывает контекст запросов.</p><p><b>Базовый уровень интеграции. </b>Eva Wiki поддерживает API, но встроенных модулей интеграции с CRM, таск-трекерами и Service Desk нет — их нужно настраивать отдельно, а это занимает какое-то время.</p><h3>Технические характеристики Eva Wiki</h3><figure><img src="https://media.tproger.ru/user-uploads/113434/2025-03-28/93724d58-7847-4cd3-b68d-c762a6717e8d.png" alt="" /></figure><h2>«Битрикс24» — подойдёт командам, которые уже работают в экосистеме</h2><p>Ещё один российский аналог Confluence —<b> </b>«<a href="https://www.bitrix24.ru/features/more/bazaznaniy.php">Битрикс24</a>». Это  многофункциональная платформа для управления бизнесом. В ней есть инструменты для CRM, коммуникаций (чат, видеозвонки), документооборота, управления задачами, проектами, автоматизации бизнес-процессов, аналитики, а также база знаний.</p><h3>Что понравилось</h3><p><b>База знаний встроена в «Битрикс24»</b> —удобно, если уже работаете в ней. Можно сразу привязывать документы и статьи к задачам, CRM и другим модулям. Например, можно фиксировать в карточках данные о каждом клиенте отдела продаж: контакты, даты и результат последней коммуникации, переписки.</p><figure><img src="https://media.tproger.ru/user-uploads/113434/2025-03-26/bc5df7f4-6607-4ac2-b9ef-f5679d497ee2.png" alt="" /></figure><p><b>Поддержка совместной работы</b> — можно оставлять комментарии, редактировать страницы, вести историю изменений.</p><h3>Что не понравилось</h3><p><b>Нет самостоятельной базы знаний.</b> Это дополнительный модуль внутри системы «Битрикс24». То есть нам нужно всей компанией сначала переехать в «Битрикс24», чтобы иметь возможность пользоваться базой.</p><figure><img src="https://media.tproger.ru/user-uploads/113434/2025-03-26/f1186cc6-d3c6-4fcb-bbcf-460abd175ffd.png" alt="" /></figure><p><b>Перегруженный интерфейс.</b> Нам показалось, что много ненужных кнопок — пока найдёшь нужную функцию, успеешь передумать или забыть, зачем ты сюда залез.</p><p><b>Права доступа можно настроить не на всех тарифах</b> — только начиная со «Стандартного». Кажется мелочью, но это странное ограничение. Контроль прав — базовая штука, без него в командной работе быстро начнётся хаос: кто угодно сможет менять статьи, и в документах будет бардак.</p><figure><img src="https://media.tproger.ru/user-uploads/113434/2025-03-26/e398376f-e646-45ce-9096-d60ace98b475.png" alt="" /></figure><h2>Технические характеристики «Битрикс24»</h2><figure><img src="https://media.tproger.ru/user-uploads/113434/2025-03-28/d6455438-ca42-4c17-ba9f-a5ac9adb52f2.png" alt="" /></figure><p>Переезжать всей компанией в экосистему «Битрикс24», чтобы использовать базу знаний, —<b> </b>такой вариант аналога Confluence нам не подошёл. Мотивацию «Битрикс24» понимаю, но у нас многие процессы завязаны на конкретном софте — например, мы работаем в amoCRM. Поэтому это стало бы слишком глобальной задачей для компании.</p><h2>«ПланФикс» — больше таскменеджер, чем база знаний</h2><p><a href="https://planfix.ru/blog/kejsy-ispolzovaniya-planfiksa-baza-znanij/">«ПланФикс»</a> — система управления задачами и проектами, в которую встроен модуль базы знаний. От коллег слышала хорошие отзывы о «ПланФиксе» как о CRM. Про базу знаний информации было мало, поэтому пошли проверять.</p><h3>Что понравилось</h3><p><b>Понятный интерфейс.</b> Есть основные возможности форматирования текста: заголовки, списки, таблицы, вставка изображений и ссылок. У нашей тестовой группы проблем не возникло.</p><figure><img src="https://media.tproger.ru/user-uploads/113434/2025-03-26/58e80fe4-25e2-4c07-9e17-64814aee2e0a.png" alt="" /><figcaption>«ПланФикс» поддерживает стандартный набор инструментов для работы с текстом и редактор кода</figcaption></figure><p><b>Поиск по ключевым словам. </b>Работает достаточно быстро, особенно если база знаний не слишком большая. Мы протестировали на 50 страницах — система находила нужные статьи по словам не в прямом вхождении за пару секунд.</p><figure><img src="https://media.tproger.ru/user-uploads/113434/2025-03-26/571b1128-b8ac-4cc3-8548-201cdea30802.png" alt="" /></figure><h3>Что не понравилось</h3><p><b>Нет самостоятельного модуля. </b>Как и в случае с «Битрикс24», база знаний «ПланФикса» — часть системы. Купить отдельно базу знаний нельзя — нужно переезжать полностью на «ПланФикс».</p><p><b>Ограниченная структура. </b>База знаний в «ПланФиксе» — это скорее набор статей, чем полноценная вики-система, и как полноценную замену Confluence его рассматривать нельзя. Нет возможности создавать сложные иерархии страниц или разделы с вложенными подразделами. Например, если вы хотите организовать документацию по разным отделам, придётся вручную проставлять теги в статьях.</p><h2>Технические характеристики «ПланФикса»</h2><figure><img src="https://media.tproger.ru/user-uploads/113434/2025-03-28/8ebf3a0f-31a9-4a72-8ae7-aa107da42df7.png" alt="" /></figure><p>Мы протестировали базу знаний в «ПланФиксе» для хранения технической документации и инструкций для техподдержки. Это сработало хорошо для небольших задач. Например, разработчики быстро находили гайды, а поддержка — ответы на частые вопросы клиентов. Но когда попробовали перенести туда часть документации, столкнулись с проблемами: без иерархии страниц и контекстного поиска работать было неудобно.</p><h2>Сравнительная таблица аналогов Confluence</h2><figure><img src="https://media.tproger.ru/user-uploads/113434/2025-03-28/9e3ff266-608b-49b4-8559-7b541a5fa61f.png" alt="" /></figure><p>Посовещавшись и взвесив все плюсы и минусы, мы выбрали Minerva Knowledge — систему, больше всего похожую на настоящий аналог Confluence. Нашей команде в первую очередь были важны гибкость сервиса, кастомизация, продвинутые AI-инструменты и глубокие интеграции.</p><p>Мы протестировали всего четыре сервиса, опираясь на задачи нашей компании. Возможно, вы пользуетесь чем-то другим или я упустила что-то важное. Если это так, делитесь своим мнением в комментариях.</p><p><b>Какие базы знаний вы пробовали и чем пользуетесь сейчас?</b></p>]]></content:encoded>
    </item>
    <item>
      <title>Hexagonal Architecture: Почему старая добрая многослойка больше не работает?</title>
      <link>https://tproger.ru/articles/razbiraem-hexagonal-architecture-i-ee-primenenie</link>
      <comments>https://tproger.ru/articles/razbiraem-hexagonal-architecture-i-ee-primenenie?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Денис Кудерин]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/razbiraem-hexagonal-architecture-i-ee-primenenie</guid>
      <description><![CDATA[<p>Что такое Hexagonal Architecture. Показываем основные возможности применения гексагональной архитектуры в программировании. Рассматриваем пошаговую инструкцию и основные нюансы</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/razbiraem-hexagonal-architecture-i-ee-primenenie">Hexagonal Architecture: Почему старая добрая многослойка больше не работает?</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[Тестирование]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Архитектура ПО]]></category>
      <category><![CDATA[PHP]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[Приложение]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 20 Mar 2025 10:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Гексагональная архитектура — подход к организации кода, направленный на создание гибких и легко поддерживаемых программных продуктов. Паттерн отделяет логику приложений от внешних интерфейсов, тем самым обеспечивая автономность и модульность компонентов системы. Другое название подхода — порто-ориентированная архитектура, то есть привязанная к портам и адаптерам.</p><p>Узнаем, что собой представляет гексагональная архитектура, каковы ее основные принципы, как она работает и применяется.</p><h2>Основные принципы Hexagonal Architecture</h2><p>Мобильные и веб-приложения становятся все более сложными и производительными, поэтому требования к ним постоянно повышаются — ПО должно быть адаптивным, тестируемым и модульным, а компоненты в нем — независимыми. Hexagonal Architecture в Java предоставляет разработчикам эффективные решения, позволяющие достигать максимальных результатов с минимальными усилиями.</p><p>Основная логика приложения в формате гексагональной архитектуры: центральное ядро, которое соединяется с внешним миром через специальные интерфейсы — порты и адаптеры.</p><p>Визуально этот архитектурный паттерн можно представить в виде шестиугольника (гексагона), на всех сторонах которого находятся различные адаптеры, соединяющие центр с внешними сервисами — отсюда название подхода. Схема отражает гибкость такой структуры — новые адаптеры можно добавлять либо удалять без ущерба для ядра.</p><p>Принцип работы Hexagonal Architecture заключается во взаимодействии портов и адаптеров. Порты — это границы приложения, взаимодействующие с внешней для ядра средой: интерфейсами, сообщениями, базами данных, запросами командной строки и т.д. Адаптеры отвечают за трансляцию данных между разными интерфейсами.</p><figure><img src="https://media.tproger.ru/user-uploads/113565/2025-03-17/16a29764-dbf7-45f4-b33f-13b8d85d6882.png" alt="" /><figcaption>Схема Hexagonal Architecture</figcaption></figure><h3>Связь Hexagonal Architecture с принципами SOLID</h3><p>Шестиугольная архитектура в java или скриптоподобном языке PHP работает по принципам объектно-ориентированного программирования SOLID. Согласно концепции, код нужно максимально упрощать, избегая запутанных конструкций.</p><p>Ключевым для Hexagonal Architecture считается пятый принцип SOLID — Dependency Inversion Principle (DIP), т.е. принцип инверсии зависимостей. Он гласит, что модули верхнего порядка не должны зависеть от модулей нижнего порядка. Код пишется таким образом, чтобы зависимости между компонентами приложения основывались на абстракциях вместо конкретных реализаций. Так, компоненты будет просто заменить, не воздействуя на другие части системы.</p><p>Сегодня компании, специализирующиеся на создании сложного и масштабируемого софта, активно используют паттерн для повышения устойчивости, удобства поддержки и развития своих продуктов.</p><h2>Структура Hexagonal Architecture</h2><p>Шестигранная программная архитектура в java предполагает, что приложение имеет одинаковую управляемость со стороны пользователей, других приложений и автоматических текстов. Для логики не имеет значения источник вызова. Свойства Hexagonal Architecture обеспечиваются ее структурой, которую стоит рассмотреть в подробностях.</p><h3>Центральное ядро — логика основного домена</h3><p>Бизнес-логика — центральная часть любого приложения, отвечающая за реализацию внутренних правил и процессов. В рамках Hexagonal Architecture ядро рассматривается как ключевой компонент всей системы, куда поступают входные данные и откуда выходят через порты.</p><p>Бизнес-логика отвечает за обработку запросов, управление данными и выполнение всех требований заказчика. Грамотная организация бизнес-логики гарантирует корректную и эффективную работу приложения независимо от изменений в пользовательских интерфейсах или внешних системах.</p><p>Гексагональная архитектура изолирует бизнес-логику от любых внешних зависимостей. За изоляцию отвечают порты, которые берут на себя все сторонние взаимодействия. Это обеспечивает приложениям гибкость и поддерживаемость — то есть высокую скорость, удобство и простоту при внесении изменений.</p><p>На практике изоляция означает, что изменения в одной части системы никак не влияют на другие компоненты приложения, что на порядок упрощает разработку, тестирование и дальнейшее развитие продукта.</p><h3>Порты</h3><p>Порты — интерфейсы, которые определяют способы взаимодействия бизнес-логики приложения с внешними системами. Они работают как контракты, задающие стандарты для коммуникации.</p><p>Используется два типа портов:</p><ul><li>Управляющие. Их используют внешние участники в процессе взаимодействия с системой — например, элементы пользовательского интерфейса. Управляющие порты определяют способы, которые внешние клиенты применяют для запросов к бизнес-логике.</li><li>Управляемые. С их помощью приложение взаимодействует с внешними сервисами — данными, системами обмена сообщениями, сторонним API. Эти порты отвечают за методы, обеспечивающие полноценную работу приложения.</li></ul><p>Важная особенность портов в рамках гексагональной архитектуры и принципа DIP — их абстрактная природа, которая сохраняет независимость логики от деталей реализации. Порты определяют форматы ввода/вывода данных и протоколов, по которым ядро взаимодействует с адаптерами.</p><h3>Адаптеры</h3><p>Задача адаптеров — реализовать работу портов и преодолеть разрыв между логикой домена и любыми внешними сервисами. Эти компоненты структуры переводят внешние данные в формат, понятный приложению, и проделывают обратную трансформацию.</p><p>Применяется два типа адаптеров:</p><ul><li>Входные. Преобразуют данные извне (например запросы HTTP или пользовательский ввод) в команды, понятные ядру приложения.</li><li>Выходные. Преобразуют выходные данные логики домена в команды для работы с внешними компонентами. Например, получив преобразованный запрос HTTP, приложение с помощью управляемого адаптера выдает результат в формате JSON.</li></ul><p>Адаптеры — ключевой компонент, обеспечивающий системе гибкость. Базовая бизнес-логика, благодаря адаптерам и портам, общается с разными интерфейсами, что особенно важно для масштабируемых приложений. С каждым портом могут взаимодействовать несколько адаптеров, что обеспечивает бизнес-логике независимость от типа входных устройств.</p><h2>Преимущества Hexagonal Architecture</h2><p>Зачем использовать гексагональную архитектуру в программировании на Java? Все дело в преимуществах, которые обеспечивает этот паттерн. Рассмотрим основные плюсы «шестигранного» подхода.</p><h3>Строгое разделение ответственности</h3><p>Бизнес-логика изолирована от внешних зависимостей, что позволяет разрабам сосредоточиться на основных задачах приложения, не заморачиваясь на специфике внешних интеграций.</p><p>За взаимодействия отвечают порты и адаптеры — разделение функций значительно упрощает не только разработку, но и все остальные этапы реализации приложения как готового продукта.</p><p>Разделение ответственности обеспечивает гибкость программного обеспечения, то есть возможность менять бизнес-логику независимо от способов взаимодействия с внешними системами. Порты и адаптеры выступают посредниками между ядром и внешним миром, что минимизирует взаимозависимости.</p><h3>Повышенная тестируемость</h3><p>Поскольку логика домена изолирована от внешних сервисов, программисты могут создавать модульные тесты для бизнес-правил без использования заглушек и имитации.</p><p>Тестируемость — одно из ключевых преимуществ Hexagonal Architecture. Она позволяет проверять работу отдельных компонентов системы в изоляции, что делает тесты более корректными и эффективными.</p><p>Снижаются затраты на обнаружение и исправление багов, прогеры быстрее выявляют и устраняют проблемы. Итог такого подхода — более надежное и устойчивое ПО.</p><h3>Улучшенная адаптивность</h3><p>Разделение ответственности исключает влияние внешних зависимостей на основную логику приложения. Продукты проще обновлять, рефакторить (перерабатывать код с целью его упрощения), менять внешние компоненты — подключать новые адаптеры при смене баз данных и добавлении новых API. При этом на основной функционал такие изменения не повлияют.</p><h3>Масштабируемость</h3><p>Благодаря модульной структуре любую часть системы можно расширить, модифицировать или заменить, не затрагивая при этом другие компоненты.</p><p>Масштабируемость делает Hexagonal Architecture идеальным выбором для крупных и постоянно развивающихся проектов типа банковских приложений, в которые регулярно добавляются новые функции.</p><h3>Упрощенная интеграция</h3><p>Наличие портов и адаптеров позволяет без проблем подключать приложения к разным типам внешних сервисов, что повышает адаптивность и конкурентоспособность продукта. Бизнес-логика не зависит от конкретных технологий или протоколов — ее можно интегрировать в новые системы без переписки кода.</p><p>Если одну базу данных нужно заменить на другую, это не вызовет у программиста никаких сложностей. Или если изначально приложение использовало REST API, а затем возникла необходимость перейти на GraphQL, достаточно создать новый адаптер для GraphQL, не трогая бизнес-логику.</p><p>Учитывая, что тестирование новых интеграций упрощено, подключение дополнительных сервисов становится предельно доступной и быстрой процедурой. На этапе проверки реальные адаптеры можно заменить на их тестовые версии, что позволяет моделировать различные сценарии без необходимости подключения к реальным системам.</p><p>Такой подход не только ускоряет тестирование, но и снижает затраты: согласно исследованиям, использование модульных архитектур снижает расходы на интеграцию на 30%.</p><h2>Недостатки и сложности применения</h2><p>Минусов у гексагональной архитектуры немного:</p><ul><li>Подход может оказаться слишком сложным для простых продуктов — затраты будут избыточными по сравнению с полученными результатами. В профессиональной среде это называется оверинжирирг.</li><li>Повышенное количество абстракций иногда становится проблемой для приложения и отражается на его функциональности.</li></ul><p>Отдельно стоит рассмотреть сложности в начальной реализации подхода. К числу наиболее распространенных ошибок при внедрении Hexagonal Architecture относится недостаточное разделение ответственности между компонентами системы. Возникает зависимость бизнес-логики от внешних интерфейсов, что противоречит базовым принципам гексагона.</p><p>Чтобы избежать ошибок, необходимо уделить максимум внимания проектированию портов и адаптеров. Важно также проводить регулярные ревью кода и применять автоматизированное тестирование, чтобы убедиться, что архитектурные принципы соблюдаются.</p><h2>Сравнение с другими архитектурными подходами</h2><p>Многослойная архитектура (Layered Architecture), которая используется еще с 1970-х годов, представляет собой классический подход к построению программных систем. Такие приложения разделены на зависимые друг от друга слои, каждый из которых отвечает за конкретный аспект функционала — ядро, интерфейс, логику.</p><p>В отличие от такого паттерна, Hexagonal Architecture вводит концепцию портов и адаптеров, которая минимизирует зависимость между слоями. Это делает продукт более устойчивым, поскольку изменения в одном компоненте минимально затрагивают остальные части.</p><p>К примеру, в классической многослойной архитектуре изменение интерфейса доступа к данным может требовать значительных изменений в бизнес-логике, тогда как в Hexagonal Architecture такое обновление ограничивается заменой адаптера.</p><p>Гексагональная архитектура имеет схожие черты с Clean Architecture. Более того, Clean Architecture основана на принципах шестигранного паттерна.</p><p>Здесь тоже есть разделение на уровни ответственности, которые в значительной степени изолированы друг от друга. При этом модули также зависят не от конкретных компонентов, а от абстракций, что позволяет без проблем адаптировать приложение к различным технологиям.</p><p>Можно сказать, что Clean Architecture — это эволюция паттернов разработки. В таких приложениях код слабо зависит от изменений в изолированных слоях (бережем труд программиста), а сам продукт легко тестировать, масштабировать и поддерживать.</p><h2>Примеры реализации</h2><p>Реальные примеры Hexagonal Architecture и изолированной бизнес-логики можно найти в банковских приложениях. В таких системах логика обработки транзакций, проверки баланса и расчета комиссий отделена от пользовательских интерфейсов и взаимодействия с базами данных. Такое разделение упрощает обновление или расширение функционала — сотрудникам ИТ-отдела не придется вмешиваться в ядро, когда потребуется прикрепить новую опцию.</p><p>Адаптеры используются и в таких крупных проектах, как Amazon и Netflix — масштабируемость позволяет развивать приложения практически в реальном времени, улучшая пользовательский интерфейс и быстродействие.</p><p>В онлайн-магазинах адаптеры с одинаковым успехом обрабатывают запросы от веб-приложений, мобильного софта и REST API, направляя их в одну и ту же бизнес-логику. Разработчики могут добавлять новые интерфейсы, например, голосовых помощников, без изменения базового кода.</p><h2>Рекомендации по внедрению Hexagonal Architecture</h2><p>Внедрение Hexagonal Architecture в проект начинается с анализа текущей архитектуры приложения и определения, какие компоненты можно выделить в качестве бизнес-логики. Это важно, поскольку основная цель архитектуры заключается в четком отделении ядра продукта от интерфейсов взаимодействия.</p><p>Следующий шаг — проектирование портов, которые будут связывать бизнес-логику и внешние адаптеры. На этом этапе определяют, какие операции и данные должны быть доступны для взаимодействия с внешними системами.</p><p>Затем разрабатываются адаптеры, которые реализуют взаимодействие через порты с конкретными внешними системами (базами данных, веб-интерфейсами или API).</p><p>Завершающий этап — тестирование новой архитектуры: нужно убедиться, что она соответствует требованиям и хорошо интегрируется в существующую экосистему приложения.</p><p>Для успешной интеграции Hexagonal Architecture в проект стоит начать с небольших изолированных модулей, чтобы минимизировать риски и протестировать подход. Важно уделить внимание документированию портов и адаптеров, чтобы все в команде могли легко понять их назначение и использовать в дальнейшей работе.</p><p>Также необходимо применять современные инструменты, которые поддерживают модульность и тестируемость кода. Например, автоматизация тестирования значительно упростит проверку соответствия новой архитектуры текущим требованиям. Наконец, регулярно проводить ревизию архитектуры, чтобы убедиться, что она все еще удовлетворяет потребности проекта по мере его роста и развития.</p>]]></content:encoded>
    </item>
    <item>
      <title>Тим О’Райли: ИИ не убьёт программирование, но полностью его изменит</title>
      <link>https://tproger.ru/news/tim-o-rajli--ii-ne-ubyot-programmirovanie--no-polnostyu-ego-izmenit</link>
      <comments>https://tproger.ru/news/tim-o-rajli--ii-ne-ubyot-programmirovanie--no-polnostyu-ego-izmenit?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Булат Яббаров]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/tim-o-rajli--ii-ne-ubyot-programmirovanie--no-polnostyu-ego-izmenit</guid>
      <description><![CDATA[<p>Тим О’Райли: ИИ не заменит программистов, но изменит их работу. Кодинг станет абстрактнее, а ценность инженеров вырастет</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/tim-o-rajli--ii-ne-ubyot-programmirovanie--no-polnostyu-ego-izmenit">Тим О’Райли: ИИ не убьёт программирование, но полностью его изменит</a>»</p>]]></description>
      <category><![CDATA[Интернет]]></category>
      <category><![CDATA[API]]></category>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[PHP]]></category>
      <category><![CDATA[Искусственный интеллект]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[Навыки]]></category>
      <category><![CDATA[Фреймворки и библиотеки]]></category>
      <category><![CDATA[Библиотеки]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 13 Feb 2025 02:06:22 GMT</pubDate>
      <content:encoded><![CDATA[<p>Тим О’Райли, создатель O’Reilly Media и идеолог <b>Веб 2.0</b>, <a href="https://www.oreilly.com/radar/the-end-of-programming-as-we-know-it/">выступил</a> с развернутым мнением о будущем программирования.</p><p>Он уверен: <b>разработчики никуда не исчезнут</b>, но их работа <b>станет совсем другой</b>.</p><p>Сегодня индустрия переживает <b>очередную революцию</b> — теперь под давлением <b>ИИ генераторов кода</b>. Многие задаются вопросом: <b>не заменит ли искусственный интеллект программистов?</b></p><p>О’Райли уверен: <b>нет</b>. Но привычный подход к разработке уйдет в прошлое.</p><h2>Как менялась работа программистов?</h2><p>Технологии программирования <b>развиваются волнами</b>.</p><ul><li><b>В 1940-х</b> инженеры вручную соединяли физические цепи, чтобы задать алгоритм.</li><li><b>В 1950-х</b> появились первые языки низкого уровня — разработчики писали код <b>на ассемблере</b>.</li><li><b>В 1960-х–1980-х</b> на смену им пришли языки вроде <b>Fortran, COBOL, C</b> — более абстрактные, но всё ещё сложные.</li><li><b>В 1990-х</b> программисты начали работать с <b>интерпретируемыми языками</b>, такими как JavaScript, Python, PHP.</li><li><b>В 2000-х</b> мир покорили <b>фреймворки и библиотеки</b>, упрощающие работу с кодом.</li><li><b>В 2010-х</b> активно развивалась <b>облачная инфраструктура</b> и <b>интернет-экосистемы API</b>.</li></ul><p>Каждый раз разработчики боялись, что <b>их навыки станут ненужными</b>. Но вместо этого <b>количество программистов только росло</b>.</p><p>Сейчас мы <b>вступаем в эпоху ИИ-помощников</b>. И снова слышны разговоры: <b>«Теперь код будут писать боты!»</b></p><h2>Чем ИИ отличается от прошлых революций?</h2><p>Ранее автоматизация <b>убирала рутину, но не сам процесс кодинга</b>. Например, программистам больше не нужно вручную управлять памятью или писать драйверы для каждой новой мышки.</p><p>Сейчас же ИИ предлагает <b>принципиально новый уровень абстракции</b>:</p><ul><li>Можно <b>не писать код</b>, а просто описывать задачу словами.</li><li>Можно получать <b>прототипы за секунды</b>, а не вручную разрабатывать архитектуру.</li><li>Можно делегировать <b>генерацию, тестирование и даже исправление багов</b>.</li></ul><p>Но здесь есть важный нюанс: <b>ИИ пока не заменяет инженеров, а лишь ускоряет их работу</b>.</p><blockquote>ИИ делает программистов в 10 раз продуктивнее. Но если возможностей для программирования станет в 20 раз больше, нам всё равно понадобятся люди</blockquote><h2>Что ждёт программистов дальше?</h2><p>О’Райли считает, что программисты <b>не исчезнут</b>, но их работа изменится.</p><ul><li><b>Новые роли.</b> Разработчики будут не столько писать код, сколько <b>управлять ИИ-системами</b>, став своего рода менеджерами цифровых сотрудников.</li><li><b>Другие навыки.</b> Важно будет не просто знать язык программирования, а <b>уметь правильно ставить задачи ИИ</b>.</li><li><b>Рост требований.</b> Простой код смогут писать и новички с помощью нейросетей, но <b>ценность приобретут архитекторы и инженеры высокоуровневых систем</b>.</li></ul><blockquote>Если ИИ автоматизирует 70% рутинных задач, то останется 30%, с которыми справятся только профессионалы</blockquote><h2>Вывод: программирование не умирает, а эволюционирует</h2><p>ИИ не сделает людей ненужными. Он <b>размоет границы между программистами и пользователями</b>, даст новые инструменты, но потребность в инженерах <b>никуда не денется</b>.</p><p>О’Райли считает, что мы сейчас <b>в начале новой технологической эры</b>. И те, кто <b>быстро адаптируются</b>, будут в выигрыше.</p>]]></content:encoded>
    </item>
    <item>
      <title>WAF и Firewall: просто о сложном для начинающих разработчиков и аналитиков</title>
      <link>https://tproger.ru/articles/waf-i-firewall--prosto-o-slozhnom-dlya-nachinayushhih-razrabotchikov-i-analitikov</link>
      <comments>https://tproger.ru/articles/waf-i-firewall--prosto-o-slozhnom-dlya-nachinayushhih-razrabotchikov-i-analitikov?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Михаил Пискунов]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/waf-i-firewall--prosto-o-slozhnom-dlya-nachinayushhih-razrabotchikov-i-analitikov</guid>
      <description><![CDATA[<p>Разбираем, чем отличаются WAF и Firewall, как они работают и когда их применять. Простые объяснения для начинающих разработчиков и аналитиков.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/waf-i-firewall--prosto-o-slozhnom-dlya-nachinayushhih-razrabotchikov-i-analitikov">WAF и Firewall: просто о сложном для начинающих разработчиков и аналитиков</a>»</p>]]></description>
      <category><![CDATA[Интернет]]></category>
      <category><![CDATA[API]]></category>
      <category><![CDATA[Для начинающих]]></category>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[PHP]]></category>
      <category><![CDATA[DevOps]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[Cloudflare]]></category>
      <category><![CDATA[Хакеры]]></category>
      <category><![CDATA[Взлом]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[аналитик]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sat, 08 Feb 2025 09:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>В мире кибербезопасности часто встречаются термины WAF и Firewall, но не всегда понятно, чем они отличаются и как работают. Если вы начинающий разработчик или аналитик и хотите разобраться, как защитить веб-приложение от атак, эта статья может вам помочь. Сегодня простыми словами объясню принципы работы WAF и классического брандмауэра, разберу их ключевые различия и подскажу, когда и какой инструмент применять.</p><h2>Что такое Firewall и зачем он нужен?</h2><p>Представьте, что ваш дом окружён забором, который защищает вас от нежелательных гостей. Этот забор проверяет, кто входит и выходит, и позволяет проходить только тем, у кого разрешение. В мире IT таким забором выступает Firewall <i>(межсетевой экран)</i>.</p><p><b>Firewall</b><i> (читается как фаервол)</i> — система безопасности, которая фильтрует трафик между устройствами в сети и Интернетом. Она контролирует, какие данные могут входить и выходить, и блокирует вредоносные или подозрительные соединения.</p><h3>Когда нужен Firewall?</h3><ol><li><b>Защита офисной сети.</b> Например, в компании есть корпоративная сеть, и руководство не хочет, чтобы сотрудники открывали небезопасные сайты или скачивали вирусы. Firewall можно настроить так, чтобы блокировать доступ к определённым ресурсам.</li><li><b>Фильтрация внешних подключений.</b> Допустим, у вас есть сервер с важными данными, и вы хотите, чтобы он был доступен только с определённых IP-адресов. Firewall может заблокировать всех, кроме разрешённых пользователей.</li><li><b>Защита от вредоносных атак.</b> Хакеры могут пытаться сканировать сеть на наличие уязвимостей или отправлять вредоносный трафик. Firewall помогает остановить такие атаки.</li></ol><h2>Что такое WAF и почему его недостаточно заменить Firewall?</h2><p>Если <b>Firewall</b> – <b>забор</b> вокруг дома, то <b>WAF </b>(Web Application Firewall) – <b>умный домофон</b>, который проверяет каждого гостя по видео и может отказать в доступе, если что-то не так.</p><p>WAF защищает конкретно веб-приложения, анализируя HTTP/HTTPS-запросы и предотвращая атаки, направленные на уязвимости сайта. Обычный Firewall <b>не разбирается</b> в веб-запросах на таком глубоком уровне.</p><figure><img src="https://media.tproger.ru/user-uploads/111901/2025-02-06/b7d65f99-4cd6-4376-88cb-d3ad769f5828.png" alt="" /><figcaption>WAF или Firewall размещается перед балансировщиками нагрузки и API Gateway, принимая входящие запросы от пользователей первым</figcaption></figure><h3>Когда нужен WAF?</h3><h4>Защита от SQL-инъекций</h4><p><b>SQL-инъекция</b> – атака, при которой злоумышленник вводит вредоносный код в текстовые поля веб-приложения, чтобы изменить работу базы данных.</p><p><i>Пример на PHP:</i></p><p>WAF может блокировать такие запросы, обнаруживая подозрительный ввод.</p><h4>Защита от XSS (кросс-сайтового скриптинга)</h4><p><b>XSS</b> – атака, при которой хакер внедряет вредоносный JavaScript-код на сайт, который затем выполняется у пользователей.</p><p>Пример уязвимого кода на JavaScript:</p><p>Если злоумышленник введёт &lt;script&gt;alert('Взлом!')&lt;/script&gt;, браузер выполнит этот код, открыв всплывающее окно. WAF может предотвратить подобные инъекции.</p><h2>Можно ли ставить WAF и Firewall на один сервер?</h2><p>Обычно WAF и Firewall работают на разных уровнях и ставятся на разные устройства:</p><ol><li>Firewall чаще устанавливается на <b>отдельный сервер</b> или <b>маршрутизатор</b>, через который проходит весь трафик.</li><li>WAF может быть <b>облачным</b> <i>(например, Cloudflare)</i> или <b>локальным</b> <i>(установленным на сервере веб-приложения)</i>.</li></ol><p>Но бывают и комплексные решения, где оба механизма объединены.</p><h2>Популярные Firewall и WAF</h2><p>Популярные Firewall:</p><ol><li><b>pfSense</b> — бесплатный и мощный firewall с гибкой настройкой</li><li><b>Cisco ASA</b> — аппаратный межсетевой экран от Cisco, часто используется в крупных компаниях</li><li><b>Fortinet FortiGate</b> — мощное решение для корпоративных сетей</li></ol><figure><img src="https://media.tproger.ru/user-uploads/111901/2025-02-06/7a6f463d-0cca-48b0-91bb-bbfe4dcf11de.png" alt="" /><figcaption>Популярные Firewalls: pfSense – сверху, Cisco ASA – слева, Fortinet FortiGate – справа</figcaption></figure><p>Популярные WAF:</p><ol><li><b>ModSecurity </b>— один из самых известных WAF, который можно интегрировать с веб-серверами</li><li><b>Cloudflare WAF</b> — облачное решение, защищающее сайты от атак</li><li><b>AWS WAF</b> — WAF от Amazon, используется для защиты приложений, развернутых в AWS</li></ol><figure><img src="https://media.tproger.ru/user-uploads/111901/2025-02-06/5524db29-9150-41c6-ba4f-dfa01c75a506.png" alt="" /><figcaption>Популярные WAF: ModSecurity – сверху, Cloudflare WAF – слева, AWS WAF – справа</figcaption></figure><p>Обычно настройкой занимаются DevOps-инженеры, системные администраторы или сетевые инженеры. Они устанавливают firewall на сетевых узлах.</p><h2>Cloudflare — это WAF или Firewall?</h2><p>Cloudflare предоставляет <b>облачный WAF</b>, который анализирует веб-трафик и защищает от атак. Однако у Cloudflare также есть сетевые функции, похожие на firewall, например, защита от DDoS. То есть Cloudflare <b>не заменяет полностью firewall</b>, а дополняет его.</p><p>Cloudflare работает как <b>промежуточный слой</b> между пользователями и серверами, фильтруя весь входящий трафик. Он может блокировать вредоносные боты, снижать нагрузку на серверы и предотвращать атаки — SQL-инъекции и XSS. Кроме того, Cloudflare автоматически кэширует статический контент, ускоряя загрузку страниц и снижая нагрузку на сервер.</p><p>Одна из ключевых функций Cloudflare — защита от <b>DDoS</b>-атак, когда злоумышленники пытаются перегрузить сервер огромным количеством запросов. В таких случаях Cloudflare распределяет нагрузку между своими серверами, минимизируя воздействие атаки. В то же время он может работать вместе с традиционными firewalls, усиливая их защитные функции за счёт интеллектуального анализа трафика и машинного обучения.</p><h2>Что нужно выбрать?</h2><p>Если у вас обычный сервер, то:</p><ol><li><b>Firewall</b> — защита на уровне сети, нужен для фильтрации трафика;</li><li><b>WAF</b> — защита веб-приложения от специфичных атак (SQL-инъекции, XSS);</li><li><b>Cloudflare</b> — может дополнять их, предоставляя облачную защиту.</li></ol><p>Если у вас веб-приложение, обязательно используйте WAF + безопасные подходы к программированию, чтобы защитить данные пользователей.</p><p>И помните: безопасность — это не одна технология, а комплекс мер, которые помогают защитить ваш проект!</p><p>Если вам интересно разобраться в этих темах подробнее и в доступной форме, загляните в мой блог СистемныйАрхитектор.рф — там много полезных материалов.</p>]]></content:encoded>
    </item>
    <item>
      <title>Как работать с JSON в веб-разработке?</title>
      <link>https://tproger.ru/articles/kak-rabotat-s-json-v-veb-razrabotke-</link>
      <comments>https://tproger.ru/articles/kak-rabotat-s-json-v-veb-razrabotke-?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Елизавета Малышева]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kak-rabotat-s-json-v-veb-razrabotke-</guid>
      <description><![CDATA[<p>Что такое JSON. Показываем основы веб-разработки с помощью JSON. Рассматриваем пошаговую инструкцию, как правильно управлять данными ✔ Tproger </p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kak-rabotat-s-json-v-veb-razrabotke-">Как работать с JSON в веб-разработке?</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[Веб-разработка]]></category>
      <category><![CDATA[Парсинг]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[JSON]]></category>
      <category><![CDATA[PHP]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[Библиотеки]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[XML]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 17 Jan 2025 10:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>JSON может убить ваш сайт на часы, а может, и больше. Хотите узнать, как этого избежать? Тогда читайте дальше: разберем самые частые ошибки и расскажем, как правильно управлять данными.</p><h2>Что такое JSON</h2><p>JSON или JavaScript Object Notation — формат для обмена данными. Его используют в веб-разработке, чтобы передать числовую информацию от клиента к серверу и наоборот. По сути это просто строка, но с нюансами.</p><p>JSON — стандарт в веб-разработке, так как его текстовая структура легко читается как человеком, так и компьютером. Давайте посмотрим, из чего он может состоять:</p><ul><li><b>Объекты </b>— пары “ключ-значение” в фигурных скобках. Выглядят так же, как обычные JS-объекты;</li><li><b>Массивы </b>— упорядоченные значения. Заключаются в квадратные скобки и отделяются запятой;</li><li>Ключи — строки, которые обязательно в двойных кавычках. Одинарные не подойдут;</li><li>Значения — могут быть строками в двойных кавычках, числами, логическими значениями, массивами, объектами или null.</li></ul><p>Мы не зря упоминаем двойные кавычки. Очень важно следить за ними, иначе сервер или ваш сайт не смогут обработать JSON.</p><figure><img src="https://media.tproger.ru/user-uploads/105990/2025-01-10/2881af4f-84d3-46b4-9f97-86c49b1e3c17.png" alt="" /></figure><p>Пример JSON-документа:</p><p>В этом примере объект содержит четыре ключа:</p><ul><li>name — строка,</li><li>type — строка,</li><li>topics — массив строк,</li><li>published — логическое значение, true.</li></ul><p>Этот JSON описывает воображаемую статью, у которой есть темы, название и статус публикации.</p><h2>Зачем нужен JSON, если есть XML?</h2><figure><img src="https://media.tproger.ru/user-uploads/105990/2025-01-10/52e20503-f9b7-4b82-8959-0259db56f08d.png" alt="" /></figure><p>До JSON разработчики использовали XML. Вот основные отличия:</p><figure><img src="https://media.tproger.ru/user-uploads/105990/2025-01-10/f33c9cfe-801c-49d2-ab39-d4f86994a5c1.png" alt="" /></figure><p>Давайте разберём все пункты и посмотрим, в чём же конкретно хорош JSON.</p><h3>Синтаксис</h3><h4>JSON</h4><p>Выглядит как обычный JavaScript-объект.</p><p>Пример:</p><p>Мы создали объект с двумя ключами. Имя –– John, возраст –– 30. Это упрощённый вариант хранения данных о пользователе. Также можно добавить почту, ник, город и так далее.</p><h4>XML</h4><p>XML или (Extensible Markup Language) –– посложнее, так как использует закрывающиеся теги. Это делает его визуально более «шумным» и трудным для восприятия. Особенно если XML-данных много.</p><h3>Размер данных</h3><h4>JSON</h4><p>JSON компактнее, в нём нет лишних тегов и атрибутов. Он лучше подходит для веба, так как важна минимизация. Чем данные легче, тем быстрее работает сайт.</p><h4>XML</h4><p>XML объемнее, потому что каждый элемент должен быть обёрнут в открывающий, а потом закрывающий тег.</p><h3>Легкость парсинга</h3><h4>JSON</h4><p>JSON легко парсить. В JavaScript достаточно использовать JSON.parse(), чтобы преобразовать JSON-строку в JS-объект.</p><p>Пример:</p><p>Здесь мы поместили JSON-строку в переменную и затем распарсили её в другую переменную с помощью функции JSON.parse().</p><h4>XML</h4><p>XML-файлы могут быть большими, с множеством вложенных тегов: чтобы распарсить такие данные, нужно много времени и ресурсов.</p><p>Пример на JavaScript:</p><p>Что здесь происходит:</p><ol><li>Создаем строку, которую хотим превратить в XML. Она содержит элемент  с вложенными элементами;</li><li>Используем объект DOMParser. Он превращает текстовые строки в XML-документы;</li><li>Метод parseFromString() выполняет это преобразование. После этого js работает с переменной через DOM-методы;</li><li>Используем метод getElementsByTagName(), чтобы получить значение элемента . Он возвращает массив элементов с указанным тегом;</li><li>Указываем индекс [0] для выбора первого элемента, а затем получаем его текстовое содержимое через childNodes[0].nodeValue.</li></ol><p>Разница очевидна:</p><ul><li>Для JSON мы можем сразу преобразовать строку в объект с помощью JSON.parse();</li><li>Для XML требуется больше шагов: разбор строки в документ и использование методов DOM для извлечения данных.</li></ul><h3>Читаемость</h3><h4>JSON</h4><p>JSON легко читать, потому что его структура похожа на JavaScript-объект. Он не требует лишних символов и тегов, поэтому визуально лаконичен и прост.</p><h4>XML</h4><p>XML выглядит сложнее. Теги для описания структуры делают документ более громоздким и менее читаемым. Особенно если в файле много вложенных элементов.</p><figure><img src="https://media.tproger.ru/user-uploads/105990/2025-01-10/4c30c1ee-6657-4830-b3df-aa0c8073fd9d.png" alt="" /></figure><h2>Создаём и парсим JSON</h2><p>JSON-документы можно создать вручную. Главное, надо соблюдать синтаксические правила:</p><ul><li>Использовать двойные кавычки для строк;</li><li>Разделять ключи и значения двоеточием, как и в JS-объектах;</li><li>Ставить запятые между ключами.</li></ul><p>А можно использовать <a href="https://www.convertsimple.com/convert-javascript-to-json/">конвертер</a>. Вы ему JS-объект, а он из него  ––  JSON.</p><p>В разных языках  –– разные инструменты для работы с JSON. Разработчики используют встроенные средства языков программирования или сторонние библиотеки:</p><ul><li><b>JavaScript</b>: Методы JSON.stringify() и JSON.parse();</li><li><b>Python</b>: Модуль json для сериализации и десериализации;</li><li><b>PHP</b>: Функции json_encode() и json_decode();</li><li><b>Node.js</b>: Встроенные методы для работы с JSON в модуле fs.</li></ul><h3>Работа с JSON в Python</h3><p>Что тут происходит:</p><ol><li><b>Импортируем json</b>. Это встроенная библиотека Python. Она работает с данными в формате JSON;</li><li><b>Создаём данные для сериализации </b>–– Python-словарь data, который содержит пары ключ-значение. Не пугайтесь нового слова «сериализация». Это всё то же преобразование одного формата в другой;</li><li><b>Используем </b>метод json.dumps() для преобразования Python-объекта в строку в формате JSON. Результатом будет строка, которую можно передать серверу, сохранить в файл или обработать в другой программе;</li><li><b>Десериализириуем данные  </b>с помощью метода json.loads(). Он преобразует JSON-строку обратно в Python-объект;</li><li><b>Выводим десериализованные данные </b>в консоль. В данном случае это словарь parsed_data, который будет точно таким же, как и исходный словарь data.</li></ol><h3>Работа с JavaScript</h3><p>Методы JSON.stringify() и JSON.parse() позволяют преобразовывать данные из объекта в JSON-строку и обратно.</p><p>Пример:</p><p>Метод fetch() используется для отправки HTTP-запросов с JSON-данными:</p><p>Что здесь происходит:</p><ul><li>Мы указываем, куда нужно сделать запрос и что нужно передать серверу. Посылка –– это значение в ключе body. Если не обернуть объект с данными в JSON.stringify(), то запрос упадёт. Так как этот метод превращает JS-объект в JSON-строку. Сервер умеет читать JSON, но не умеет работать с JS-объектами;</li><li>На предпоследней строке мы получаем ответ от сервера. А затем обязательно переводим его обратно, в удобоваримый для JS код.</li></ul><h2>Работа с JSON на сервере</h2><p>JSON незаменим в бэкэнде. Сервер присылает данные через REST API в  JSON. Поэтому в предыдущем блоке мы использовали на ответе метод .json(). Без него данные останутся обычной JSON-строкой.</p><p>Разберём примеры на разных языках.</p><h3>Пример реализации REST API на Node.js</h3><p>Здесь мы создаём приложение на основе Express. Оно слушает POST-запросы на маршруте /data и возвращает ответ в формате JSON с сообщением о том, что данные получены.</p><p>Для работы с JSON на сервере используем встроенную функцию express.json(), которая парсит данные, и метод res.json(), чтобы отправить ответ в формате JSON.</p><h3>Пример работы JSON в python-фреймворке Flask</h3><p>Что делаем:</p><ol><li><b>Импортируем необходимые библиотеки</b>: Flask, request, jsonify для создания нашего веб-приложения и обработки JSON-строк;</li><li><b>Создаем приложение </b>через экземпляр Flask;</li><li><b>Определяем маршрут  </b>/data и указываем, что функция handle_data() будет обрабатывать по этому маршруту POST-запросы;</li><li><b>Извлекаем JSON-данные из запроса </b>внутри функции. Получаем и преобразуем данные из тела запроса в JSON с помощью request.get_json();</li><li><b>Отправляем JSON-ответ</b>. Возвращаем клиенту JSON-ответ, содержащий полученные данные. Либо, если переменная data пуста, отправляем ошибку и 400 статус. И обязательно отлавливаем ошибки с помощью try-except;</li><li><b>Запускаем приложение</b>. Приложение запускается на сервере и слушает входящие запросы.</li></ol><h2>Что не так с JSON</h2><p>За простотой JSON скрываются ловушки, попадать в которые лучше не надо. Малейшая ошибка — и данные становятся нечитаемыми, а приложение падает. Разберём эти ловушки:</p><h3>Неправильная структура</h3><p>Забудете закрыть скобку, добавите не ту кавычку или поставите запятую в конце массива — и всё. Браузер или сервер выдадут ошибку. А если JSON создается динамически, найти проблему будет сложно.</p><p>Пример ошибки:</p><p>В этом примере после крайнего элемента массива стоит лишняя запятая. Исправленный вариант:</p><h3>Большие объемы данных</h3><p>JSON не предназначен для хранения огромных массивов данных. Обрабатывать большие файлы в браузере –– опасно для производительности. Ваш сайт может начать тормозить или вовсе зависнуть.</p><h3>Неэкранированные символы</h3><p>Забыли экранировать кавычку в строке? Получите ошибку. JSON требует строго соблюдать правила синтаксиса, иначе парсинг провалится.</p><p>Пример ошибки:</p><p>Здесь у нас дублирование. Нельзя помещать двойные кавычки внутрь таких же двойных кавычек:</p><p>Исправленный вариант:</p><h3>Уязвимая безопасность</h3><p><b></b> Если данные не проверяются, JSON может стать источником XSS-атак или привести к раскрытию конфиденциальной информации.</p><p>Пример ошибки:</p><p>Пользователь может отправить через поле ввода вредоносные данные. И получится вот такая история:</p><p>Решение: обязательно проверяйте входящие данные. Можно заменить опасные символы безопасными:</p><p>И уже эту строку отправить на сервер.</p><h2>Как избежать проблем с JSON?</h2><p>Чтобы работать с JSON безопасно и эффективно:</p><ul><li><b>Используйте валидаторы</b>. Перед передачей данных обязательно проверяйте JSON на синтаксические ошибки;</li><li><b>Сжимайте данные</b>. Уменьшайте размер JSON, удаляя лишние пробелы и символы, чтобы оптимизировать передачу и обработку;</li><li><b>Не доверяйте входящим данным</b>. Проверяйте и фильтруйте всё, что приходит от клиента или сторонних API;</li><li><b>Ограничивайте глубину вложенности</b>. Глубокая структура JSON может перегрузить обработчик и вызвать зависание.</li></ul><h3>Валидаторы JSON</h3><p>Перед отправкой проверьте свой JSON. Для этого можно использовать онлайн-валидаторы. Например, <a href="https://jsonlint.com/"> </a><a href="https://jsonlint.com">https://jsonlint.com</a>. Как он работает: вы прописываете вашу строку, а валидатор проверяет, нет ли в ней ошибок.</p><h3>Минификация JSON</h3><p>Для уменьшения размера JSON-строку можно минифицировать. Удалить пробелы и переносы строк. Пример минификации в Python:</p><h3>Обработка ошибок при работе с JSON</h3><p>Ошибки часто возникают из-за неправильного формата данных. Всех опасных мест не избежать. Но можно подстелить соломку.</p><p>Вот так обрабатываются возможные ошибки с JSON:</p><p>Что тут происходит:</p><ol><li><b>Получаем данные из localStorage</b>: Используется метод localStorage.getItem(), чтобы извлечь данные по указанному ключу key;</li><li><b>Проверяем на наличие данных</b>: Если данные отсутствуют –– null, выбрасывается ошибка с помощью throw;</li><li><b>Парсим данные</b>: Если данные есть, они парсятся через JSON.parse(). И на выходе получается JS-объект;</li><li><b>Обрабатываем ошибки</b>: В блоке catch ловятся все ошибки. Затем их можно обработать и отобразить пользователю в интерфейсе.</li></ol><p>Теперь даже если в LocalStorage не лежат нужные данные, приложение не упадёт.</p><p>В веб разработке без JSON никуда. Он лёгкий и гибкий. Но чтобы использовать эти преимущества, нужно научиться с ним взаимодействовать.</p><p>Для этого просто следуйте нашим правилам. Проверяйте свои JSON-строки, обрабатывайте ошибки и тестируйте приложение на корнер-кейсы. Тогда ваши сайты и приложения будут в безопасности. 🙂</p>]]></content:encoded>
    </item>
    <item>
      <title>HTTP-запросы: GET, POST и другие</title>
      <link>https://tproger.ru/articles/http-zaprosy--get--post-i-drugie</link>
      <comments>https://tproger.ru/articles/http-zaprosy--get--post-i-drugie?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Вадим Егорцев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/http-zaprosy--get--post-i-drugie</guid>
      <description><![CDATA[<p>Что такое HTTP-запросы. Показываем основные виды запросов HTTP. Рассматриваем пошаговую инструкцию по использованию ✔ Tproger</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/http-zaprosy--get--post-i-drugie">HTTP-запросы: GET, POST и другие</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[Тестирование]]></category>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[JSON]]></category>
      <category><![CDATA[PHP]]></category>
      <category><![CDATA[Node.js]]></category>
      <category><![CDATA[QA]]></category>
      <category><![CDATA[Приложение]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[Библиотеки]]></category>
      <category><![CDATA[XML]]></category>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 14 Jan 2025 10:00:02 GMT</pubDate>
      <content:encoded><![CDATA[<p>HTTP-запросы — основа взаимодействия между клиентской и серверной частями веб-приложений. Методы GET и POST используются для передачи данных и выполнения операций на сервере.</p><p><i>В статье детально разобрали подходы к реализации HTTP-запросов на практике.</i></p><h2>Общие понятия HTTP-запросов</h2><p><b>HTTP (HyperText Transfer Protocol)</b> определяет правила обмена данными между клиентом и сервером. Клиент, браузер или приложение отправляют запрос серверу, который обрабатывает его и возвращает ответ.</p><p>HTTP-запрос состоит из нескольких компонентов:</p><h3>Метод</h3><p>Обозначает действие, которое клиент хочет выполнить. Например, метод GET используется для запроса данных с сервера, а POST — для отправки данных на сервер.</p><h3>URL</h3><p>Определяет адрес ресурса, к которому обращается клиент. Он включает в себя доменное имя и путь к конкретному ресурсу на сервере.</p><h3>Заголовки</h3><p>Содержат дополнительную информацию о запросе. Могут включать данные о типе контента, формате принятого ответа и других параметрах, необходимых для обработки запроса.</p><h3>Тело</h3><p>Используется при отправке сведений на сервер. В методе POST тело содержит данные формы или другие данные, которые необходимо передать. При методе GET тело обычно отсутствует, так как данные передаются в URL.</p><h3>Статус-коды ответа</h3><p>После обработки запроса сервер возвращает ответ со статус-кодом. Он сообщает клиенту о результате обработки запроса.</p><p>Категории статус-кодов:</p><ul><li><b>Информационные 1xx</b>: указывают, что запрос принят и продолжается обработка;</li><li><b>Успешно 2xx</b>: подтверждают успешную обработку запроса;</li><li><b>Перенаправления 3xx</b>: информируют о совершении редиректа;</li><li><b>Ошибки клиента</b> <b>4xx</b>: указывают на проблемы со стороны клиента;</li><li><b>Ошибки сервера 5xx</b>: указывают на проблемы со стороны сервера.</li></ul><p>Статус-коды помогают клиенту понять результат запроса и, при необходимости, предпринять действия — обновить страницу, согласиться на перенаправление и т. д.</p><h2>Основные методы HTTP-запросов</h2><p>GET и POST используются для получения и отправки данных соответственно. Каждый метод имеет свои особенности.</p><h3>GET — получение данных</h3><p>Метод предназначен для запроса данных с сервера. Он используется, когда клиенту необходимо получить ресурс без внесения изменений.</p><p>При использовании GET-запроса параметры передаются через строку запроса в URL: можно закэшировать запросы и делать их повторно без отправки данных.</p><p>Повторное выполнение запроса не изменит состояние сервера. Это важно для безопасности и эффективности в сетевых операциях. Например, при обновлении страницы браузер отправляет GET-запрос, чтобы загрузить актуальное содержимое.</p><figure><img src="https://media.tproger.ru/user-uploads/105601/2024-12-28/1d779461-4482-4bb0-8632-a146d25087a4.jpg" alt="" /><figcaption>Пример GET-запроса</figcaption></figure><p>Ограничения метода GET связаны с объемом передаваемых данных. Поскольку параметры передаются в URL, есть ограничение на длину строки. Поэтому метод GET не подходит для передачи больших объемов данных или конфиденциальной информации, т. к. содержимое отображается в адресной строке.</p><h3>POST — отправка данных</h3><p>Метод используется для отправки данных на сервер, чтобы создать или обновить ресурсы. В отличие от GET, данные передаются в теле запроса. Можно передавать большие объемы информации и делать это более безопасно, потому что данные не отображаются в URL.</p><figure><img src="https://media.tproger.ru/user-uploads/105601/2024-12-28/67e96f9b-1ea9-46f1-a0d3-a123753e6bb1.jpg" alt="" /><figcaption>Пример POST-запроса</figcaption></figure><p>Повторная отправка POST-запроса может привести к созданию нескольких одинаковых ресурсов или повторному выполнению операции. Обрабатывать такие запросы нужно с особой осторожностью.</p><p>POST используется при отправке форм на веб-сайтах, загрузке файлов, в API-запросах. Он поддерживает передачу сложных структур данных, включая JSON или XML.</p><h2>Другие методы HTTP-запросов</h2><p>Помимо GET и POST есть дополнительные методы для гибкого управления ресурсами. К ним относятся PUT, DELETE, PATCH, HEAD и OPTIONS.</p><h3>PUT — обновление данных</h3><p>Применяется для создания нового ресурса или полного обновления существующего на сервере по указанному URI.</p><p>Клиент отправляет запрос с полным представлением ресурса, которое сервер должен сохранить. Если ресурс по указанному URI не существует, сервер создаст его.</p><h3>DELETE — удаление данных</h3><p>Используется для удаления ресурса по URI. При успешной обработке запроса веб-страница становится недоступной.</p><p>Как и PUT, метод DELETE идемпотентный: повторные запросы удаления не приведут к ошибке, хотя сервер может сообщить, что ресурс уже недоступен.</p><h3>PATCH — частичное обновление</h3><p>Предназначен для частичного изменения ресурса.</p><p>Вместо отправки полного представления, как в случае с PUT, клиент отправляет только те данные, которые необходимо обновить.</p><h3>HEAD — запрос заголовков без тела</h3><p>Необходим для получения метаданных без передачи содержимого.</p><p>Применяется для проверки ресурса, определения его размера или времени последнего изменения без необходимости загружать весь ресурс.</p><h3>OPTIONS — получение информации о поддерживаемых методах</h3><p>Используется для выявления возможностей сервера или проверки поддерживаемых методов.</p><p>Клиент может узнать, какие HTTP-методы доступны для данного URI, а также получить информацию о поддерживаемых заголовках и других параметрах.</p><h3>Различия между GET и POST</h3><p>Несмотря на то, что оба метода используются для отправки запросов, они имеют существенные различия в способах передачи данных, кэшировании и безопасности.</p><h3>URL vs. тело запроса</h3><p>GET передает данные через строку URL, добавляя параметры запроса после знака вопроса “?”. Параметры представляют собой пары «ключ=значение», разделенные амперсандом “&amp;”.</p><figure><img src="https://media.tproger.ru/user-uploads/105601/2024-12-28/c0b6b2a6-a1e5-409e-bf4a-11c6d049d370.jpg" alt="" /><figcaption>Пример URL GET-запроса</figcaption></figure><p>POST передает данные в теле запроса, отделенном от заголовков пустой строкой. В ней можно передавать больше данных и использовать форматы типа application/x-www-form-urlencoded или multipart/form-data.</p><h3>Кэширование и безопасность</h3><p>GET подвержен кэшированию браузерами и промежуточными серверами. Он снижает нагрузку на сервер и ускоряет загрузку страниц, повторно используя ранее полученные ответы. Однако кэширование становится причиной тогда, когда клиент получает устаревшие данные, если ресурс на сервере уже был обновлен.</p><p>POST обычно не кэшируется, поскольку предполагается, что каждый запрос может изменять состояние сервера или создавать новые данные. Браузеры и прокси-серверы по умолчанию не сохраняют ответы на POST-запросы в кэше.</p><p>С точки зрения безопасности, GET менее предпочтителен для передачи конфиденциальной информации. Данные, переданные через URL, открыты для посторонних лиц, сохраняются в истории браузера и логах сервера.</p><p>POST дает большую конфиденциальность, так как данные передаются в теле запроса и не отображаются в адресной строке.</p><p>Сами по себе методы GET и POST не спасают сообщение от кражи. При передаче чувствительной информации необходимо использовать соединение HTTPS, которое шифрует данные и защищает от перехвата злоумышленниками.</p><p>Оба метода уязвимы к атаке CSRF. Поскольку GET-запросы можно совершать простым переходом по ссылке или загрузкой изображения, атаки через GET встречаются чаще. Для защиты от CSRF рекомендуется использовать уникальные токены и проверять происхождение запросов на сервере.</p><h2>Работа с HTTP-запросами на практике</h2><p>Рассмотрим реализацию HTTP-запросов в JavaScript с использованием fetch и axios, тестирование запросов через Postman и применение HTTP в бекенд-разработке на примерах Node.js, Python и PHP.</p><h3>JavaScript (fetch, axios)</h3><p>Fetch — встроенная функция JS. Она отправляет HTTP-запросы и обрабатывает ответы.</p><p>Пример выполнения GET-запроса:</p><p>Здесь выполняется запрос к URL, затем ответ преобразуется в формат JSON.</p><p>Для отправки POST-запроса с передачей данных в теле используется следующий синтаксис:</p><p>В теле запроса передаются данные в формате JSON, а заголовок Content-Type сообщает серверу о типе данных.</p><h3>Использование axios</h3><p>Axios — популярная библиотека для выполнения HTTP-запросов, поддерживающая как браузерную, так и серверную среду.</p><p>Пример выполнения GET-запроса:</p><p>Для отправки POST-запроса с данными:</p><p>Axios автоматически преобразует объекты JavaScript в JSON и устанавливает заголовки, что упрощает работу с запросами.</p><h3>Тестирование через Postman</h3><p><a href="https://tproger.ru/articles/gajd-po-rabote-s-postman">Postman</a> — инструмент для разработки и тестирования API. Для его использования необходимо установить приложение, создать новый запрос, указать метод и URL.</p><p>При тестировании GET-запроса в Postman вводится URL и при необходимости добавляются параметры. После отправки запроса интерфейс показывает заголовки и тело ответа, что помогает в отладке и анализе данных.</p><p>Для POST-запросов в Postman можно указать тело запроса в форматах form-data, x-www-form-urlencoded, raw и других. Это позволяет отправлять сложные структуры данных и файлы, имитируя работу реальных приложений.</p><p>Postman также поддерживает сохранение коллекций запросов, управление переменными среды и написание скриптов для автоматизации тестирования.</p><h2>Использование HTTP в backend</h2><p>В Node.js для создания веб-серверов и обработки HTTP-запросов обычно используется фреймворк Express:</p><p>Этот сервер обрабатывает GET и POST-запросы по пути /users. Можно получать список пользователей и создавать новых.</p><h3>Python</h3><p>В Python популярным фреймворком для веб-разработки выступает Flask:</p><p>С помощью Flask создается сервер, обрабатывающий HTTP-запросы и возвращающий данные в формате JSON.</p><h3>PHP</h3><p>В PHP с фреймворком Laravel можно реализовать обработку HTTP-запросов следующим образом:</p><p>Работа с HTTP в backend-приложениях состоит не только в приеме запросов, но и в отправке их к другим сервисам. В языках для веб-разработки есть библиотеки для выполнения исходящих HTTP-запросов:</p><ul><li>axios для Node.js,</li><li>requests для Python,</li><li>Guzzle для PHP.</li></ul><p><b>Теперь ваша очередь! Попробуйте применить полученные знания на практике. Создайте простое приложение, использующее HTTP-запросы, или протестируйте API с помощью Postman.</b></p>]]></content:encoded>
    </item>
    <item>
      <title>Фреймворки, меняющие игру: выбираем идеальный инструмент для ваших веб-проектов</title>
      <link>https://tproger.ru/articles/obzor-populyarnyh-frejmvorkov-dlya-veb-razrabotki</link>
      <comments>https://tproger.ru/articles/obzor-populyarnyh-frejmvorkov-dlya-veb-razrabotki?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Вадим Егорцев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/obzor-populyarnyh-frejmvorkov-dlya-veb-razrabotki</guid>
      <description><![CDATA[<p>Популярные фреймворки для веб-разработки. Показываем основные виды фреймворков. Рассматриваем пошаговую инструкцию по использованию ✔ Tproger</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/obzor-populyarnyh-frejmvorkov-dlya-veb-razrabotki">Фреймворки, меняющие игру: выбираем идеальный инструмент для ваших веб-проектов</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[Производительность]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Ruby]]></category>
      <category><![CDATA[MySQL]]></category>
      <category><![CDATA[PHP]]></category>
      <category><![CDATA[SQL]]></category>
      <category><![CDATA[Рефакторинг]]></category>
      <category><![CDATA[Ruby on Rails]]></category>
      <category><![CDATA[HTML]]></category>
      <category><![CDATA[Базы данных]]></category>
      <category><![CDATA[Node.js]]></category>
      <category><![CDATA[React]]></category>
      <category><![CDATA[Фронтенд]]></category>
      <category><![CDATA[Бэкенд]]></category>
      <category><![CDATA[Приложение]]></category>
      <category><![CDATA[Angular]]></category>
      <category><![CDATA[Vue]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 10 Jan 2025 09:00:02 GMT</pubDate>
      <content:encoded><![CDATA[<p>Выбор фреймворка влияет на скорость, удобство разработки, производительность, масштабируемость и поддержку приложения. Рассмотрим популярные варианты для веб-разработки фронтенда, бэкенда и фулстека и сравним их между собой.</p><h2>Frontend фреймворки</h2><h3>React</h3><p>Это самый популярный фреймворк для создания веб-приложений. React используется в лендингах, динамических веб-приложениях и даже мобильных приложениях (<a href="https://tproger.ru/articles/your-first-app-in-react-native">React Native</a>).</p><p>UI здесь разбивается на независимые и переиспользуемые блоки. Такие компоненты легко интегрировать, комбинировать в разных частях приложения или между проектами. Фреймворк ускоряет разработку и рефакторинг.</p><p>React обращается к DOM только для обновления изменившихся компонентов. За счет этого повышается производительность приложения.</p><p>Пример простого React компонента:</p><h4>Преимущества фреймворка:</h4><ul><li>Облегчает повторное использование кода и поддержку приложений;</li><li>Имеет множество дополнительных библиотек и инструментов;</li><li>Виртуальный DOM снижает прямые манипуляции с DOM и повышает производительность приложения;</li><li>Фреймворк пользуется популярностью в сообществе. Как результат  —  множество учебников, разборов документации и сторонних библиотек.</li></ul><h4>Недостатки фреймворка:</h4><ul><li>Концепции JSX и управления состоянием могут быть сложны для новичков;</li><li>Плохая кроссбраузерная поддержка;</li><li>Требует дополнительных библиотек для маршрутизации и управления состоянием.</li></ul><h3>Vue.js</h3><p>Vue используется для разработки простых лендингов и комплексных веб-приложений. Это гибкое решение, которое можно интегрировать в проекты постепенно.</p><p>Преимущество Vue в его простоте и низком пороге входа. При этом фреймворк сохраняет статус мощного инструмента для разработки сложных веб-приложений.</p><p>Vue автоматически отслеживает зависимости между блоками и обновляет DOM при их изменении, как React.</p><p>Компонентная архитектура Vue позволяет разбивать UI на переиспользуемые части. Разметка, стили и логика разделяются «оболочкой», а это облегчает поддержку и масштабирование приложения.</p><p>Пример простого компонента Vue:</p><p>Экосистема Vue включает множество библиотек и плагинов, расширяющих возможности фреймворка. Например, Vuex для управления состоянием, Vue Router, Nuxt.js и другие.</p><h4>Преимущества фреймворка:</h4><ul><li>Понятный синтаксис и подробная документация;</li><li>Может использоваться как библиотека или цельный фреймворк в зависимости от проекта;</li><li>Есть поддержка серверного рендера;</li><li>Автоматически обновляет интерфейс при изменении данных;</li><li>Имеет небольшой вес файлов.</li></ul><h4>Недостатки фреймворка:</h4><ul><li>Меньше ресурсов и сторонних библиотек по сравнению с React и Angular;</li><li>Неполная документация на русском языке.</li></ul><h3>Angular</h3><p>С помощью Angular разрабатывают клиентские части веб-приложений. Этот фреймворк сложнее Vue и React.</p><p>Angular чаще используют для крупных веб-приложений. Например, панели администрирования, системы управления контентом и т. д.</p><p>По аналогии с Vue и React, фреймворк разбивает приложение на независимые, переиспользуемые блоки кода. Компоненты: шаблон; класс, описывающий поведение; стили.</p><p>Освоение Angular требует больше времени и усилий по сравнению с Vue и React из-за архитектуры и специфических концепций. Нужны углубленные знания по внедрению зависимостей, декораторам и модулям.</p><p>Пример простого Angular-компонента:</p><h4>Преимущества фреймворка:</h4><ul><li>Богатый выбор инструментов, шаблонов, которые сокращают сроки реализации сложных приложений;</li><li>Angular CLI расширяется за счет shematics, поэтому его легко доработать под конкретные задачи;</li><li>Есть поддержка TypeScript: статическая типизация улучшает качество кода;</li><li>Встроенная утилита для обновления проекта при переходе на новую версию Angular.</li></ul><h4>Недостатки фреймворка:</h4><ul><li>Ангуляр сложнее, чем Вью и Реакт. Его изучение занимает больше времени, если это первый фреймворк в карьере разработчика.</li></ul><h2>Backend фреймворки</h2><h3>Django (Python)</h3><p>Django подходит для широкого спектра приложений — от блогов до высоконагруженных веб-сервисов. Админ-панель фреймворка упрощает управление контентом и пользователями. Django часто используют для разработки новостных сайтов, интернет-магазинов, социальных сетей и образовательных платформ.</p><p>Фреймворк содержит множество инструментов для решения общих задач веб-разработки. «В комплекте» готовые библиотеки для аутентификации пользователей, администрирования контента, работы с формами, маршрутизации URL.</p><p>Django следует архитектурному шаблону Model-View-Controller (MVC). Модели определяют структуру данных, представления обрабатывают логику и взаимодействие с моделями, а шаблоны отвечают за представление данных пользователю.</p><p>Сильная сторона Django — его ORM (Object-Relational Mapping). Интерфейс для работы с базой данных на Python используется для написания сырых SQL-запросов. Django поддерживает PostgreSQL, MySQL, SQLite, Oracle.</p><p>Если ищете универсальный фреймворк для бэкенд-разработки на Python, Django определенно заслуживает вашего внимания.</p><p>Пример модели Django:</p><p>В примере определяем модель Article с полями title, content и published_at. Метод __str__ возвращает строковое представление объекта:</p><p>Представление article_list получает объекты Article из базы данных и передает их в шаблон для отображения.</p><h4>Преимущества фреймворка:</h4><ul><li>Широкий набор инструментов: включает ORM, аутентификацию и админ-панель;</li><li>Фреймворк задаёт структуру проекта — помогает разработчикам понимать, как и где добавлять новую функцию;</li><li>Защищен от SQL-инъекции и подделки межсайтовых запросов;</li><li>Подходит для высоконагруженных приложений.</li></ul><h4>Недостатки фреймворка:</h4><ul><li>Django ORM уступает последней SQLAlchemy.</li></ul><h3>Ruby on Rails (Ruby)</h3><p>Rails подходит для быстрого прототипирования и проектов, ориентированных на работу с базами данных. Его используют для SaaS-платформ, CRM-систем, CMS, маркетплейсов и многого другого.</p><p>Rails применяет архитектурный паттерн MVC (Model-View-Controller). Фреймворк хорош с точки зрения бизнес-логики и взаимодействует с базой данных с помощью ActiveRecord ORM.</p><p>Rails поставляется со встроенными инструментами и библиотеками. Например, ActiveRecord для работы с базами данных, ActiveStorage для управления файлами, ActionMailer для отправки email.</p><p>В сообществе Rails огромное количество гемов (библиотек), расширяющих функциональность фреймворка.</p><p>Пример модели Rails (с использованием ActiveRecord):</p><p>Пример контроллера Rails:</p><p>В примере определяем модель Article с валидациями и связями. Контроллер ArticlesController содержит экшены для списка статей, отображения отдельной статьи, создания новой статьи.  Приватный метод article_params используется для фильтрации параметров.</p><h4>Преимущества фреймворка:</h4><ul><li>Продуманная структура, которая продвигает стандарты качества и лучшие практики веб-разработки;</li><li>Active Record ORM упрощает взаимодействие с базой данных;</li><li>Vue, Angular.js и React легко интегрируются с Ruby on Rails.</li></ul><h4>Недостатки фреймворка:</h4><ul><li>Ruby on Rails js медленнее Django и Node.js.</li></ul><h3>Node.js с Express (JavaScript)</h3><p>Express — фреймворк Node.js с набором функций для разработки веб-приложений и API. В нем реализован простой интерфейс для HTTP-запросов и маршрутизации.</p><p>Node.js + Express используется для сервисов, серверных приложений (например, чатов или игр).</p><p>Преимущество Node.js и Express состоит в возможности писать на JavaScript как клиентскую, так и серверную сторону. Можно вести разработку на одном языке и делиться кодом с фронтендом и бэкендом.</p><p>Пример простого приложения на Express:</p><h4>Преимущества фреймворка:</h4><ul><li>JavaScript на всем стеке — один язык для фронтенда и бэкенда;</li><li>Имеет минимальные ограничения, можно строить архитектуру как удобно.</li></ul><h4>Недостатки фреймворка:</h4><ul><li>Отсутствуют встроенные компоненты, требуются дополнительные настройки для безопасности и работы с базами данных;</li><li>Управление обратными вызовами усложняет код и его поддержку.</li></ul><h2>Full-Stack фреймворки</h2><h3>Laravel (PHP)</h3><p>Laravel — фреймворк для веб-разработки на PHP. Он использует архитектуру MVC: разделяет логику приложения и улучшает организацию кода.</p><p>Laravel выбирают для разработки CMS, SaaS-платформ, электронной коммерции и др. Встроенные библиотеки ускоряют работу.</p><p>В фреймворке реализована:</p><ul><li>Система миграций для управления структурой базы данных;</li><li>Eloquent ORM для работы с данными;</li><li>Система шаблонизации Blade;</li><li>Встроенная поддержка аутентификации и авторизации;</li><li>Очередь заданий и планировщик для выполнения асинхронных задач.</li></ul><p>Пример определения маршрута в Laravel:</p><p>Пример контроллера Laravel:</p><p>Пример модели Eloquent:</p><p>В примерах выше определяем маршрут, который принимает id и возвращает строку с идентификатором. Контроллер UserController методом show получает пользователя из базы данных по id и передает его в представление user.profile. Модель User представляет таблицу пользователей в базе данных и определяет заполняемые атрибуты.</p><h4>Преимущества фреймворка:</h4><ul><li>Шаблонизатор Blade упрощает создание представлений;</li><li>ORM Eloquent облегчает работу с базами данных;</li><li>Есть автоматизация задач с помощью встроенных инструментов и командной строки.</li></ul><h4>Недостатки:</h4><ul><li>Сложности с долгосрочной поддержкой версий.</li></ul><h3>Spring Boot (Java)</h3><p>Spring Boot применяется для разработки микросервисов и облачных приложений. Модульная архитектура используется в независимых сервисах, которые легко масштабировать.</p><p>Фреймворк имеет встроенный контейнер сервлетов (Tomcat, Jetty), чтобы запускать приложение как автономный JAR-файл без развертывания на внешнем сервере.</p><p>Фреймворк также предлагает:</p><ul><li>Автоконфигурацию библиотек (JPA, JDBC);</li><li>Встроенные метрики мониторинга;</li><li>Поддержку внешней конфигурации;</li><li>Интеграцию с базами данных.</li></ul><h4>Преимущества фреймворка:</h4><ul><li>Есть встроенные серверы Tomcat, Jetty и Undertow;</li><li>Облегчает управление зависимостями с помощью стартовых пакетов;</li><li>Оснащен встроенным контейнером сервлетов;</li><li>Автоматическая конфигурация экономит время на старте проекта.</li></ul><h4>Недостатки:</h4><ul><li>Spring Boot создает множество неиспользуемых зависимостей и  увеличивает размер файла развертывания.</li></ul><h3>Meteor (JavaScript)</h3><p>Особенность Meteor в том, что он синхронизирует данные в реальном времени. Фреймворк автоматически обновляет пользовательский интерфейс при изменении данных на сервере. Это возможно благодаря протоколу DDP (Distributed Data Protocol) и реактивным источникам данных, таких как MongoDB.</p><p>На JS + Meteor можно писать код, который работает как на клиенте, так и на сервере. Фреймворк также предоставляет интегрированную систему сборки, которая автоматически объединяет ресурсы приложения.</p><p>Meteor выбирают для разработки приложений, требующих обновления данных в реальном времени (чаты, приложения для совместной работы, панели мониторинга,  игровые проекты). Его реактивная архитектура и синхронизация данных облегчают создание интерактивных и отзывчивых пользовательских интерфейсов.</p><h4>Преимущества фреймворка:</h4><ul><li>Архитектура и синтаксис с понятным кодом упрощают обучение новичков и повышают производительность команды;</li><li>Есть мгновенная синхронизация данных между клиентом и сервером;</li><li>Возможна интеграция базы данных MongoDB.</li></ul><h4>Недостатки фреймворка:</h4><ul><li>Не предлагает широкого функционала для масштабирования и разделения логики на модули;</li><li>Сложности с масштабированием при увеличении числа пользователей из-за обработки данных в реальном времени.</li></ul><p>При выборе фреймворка важно учитывать долгосрочные перспективы проекта. Также следует принимать во внимание доступность обучающих ресурсов и поддержки. Помните, нет идеального решения. Выбор фреймворка зависит от конкретных требований, ресурсов и предпочтений команды.</p>]]></content:encoded>
    </item>
    <item>
      <title>ТОП-32 курса PHP-разработчиков: бесплатное и платное онлайн-обучение программированию на PHP с нуля</title>
      <link>https://tproger.ru/articles/top-32-kursa-php-razrabotchikov--besplatnoe-i-platnoe-onlajn-obuchenie-programmirovaniyu-na-php-s-nulya</link>
      <comments>https://tproger.ru/articles/top-32-kursa-php-razrabotchikov--besplatnoe-i-platnoe-onlajn-obuchenie-programmirovaniyu-na-php-s-nulya?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Анастасия Шишкина]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/top-32-kursa-php-razrabotchikov--besplatnoe-i-platnoe-onlajn-obuchenie-programmirovaniyu-na-php-s-nulya</guid>
      <description><![CDATA[<p>Лучшие онлайн-курсы для PHP-разработчиков. Список школ, осуществляющих обучение на бесплатной или платной основе, а так же цены на курсы PHP программистов</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/top-32-kursa-php-razrabotchikov--besplatnoe-i-platnoe-onlajn-obuchenie-programmirovaniyu-na-php-s-nulya">ТОП-32 курса PHP-разработчиков: бесплатное и платное онлайн-обучение программированию на PHP с нуля</a>»</p>]]></description>
      <category><![CDATA[Для начинающих]]></category>
      <category><![CDATA[Обучение программированию]]></category>
      <category><![CDATA[PHP]]></category>
      <category><![CDATA[Обучающие курсы]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 12 Nov 2024 14:00:02 GMT</pubDate>
      <content:encoded><![CDATA[<p>Освоить востребованный язык для веб-разработки можно в короткие сроки с помощью курсов PHP. Этот язык отличается широким возможностями и универсальностью. По данным <a href="https://w3techs.com/technologies/overview/programming_language">W3Techs</a>, его использует почти 80% всех веб-сайтов. Поэтому работа для специалистов со знанием PHP всегда найдется. При этом язык используется для проектов разных масштабов. На нем пишут простые браузерные игры, элементы крупных веб-сайтов, например, VK, серверные сценарии, CMS и т. д. PHP достаточно сложно освоить с нуля. Однако возможности, которые он открывает, окупают каждую затраченную на обучение минуту.</p><p>Вместе с экспертами <a href="https://kursfinder.ru/">Kursfinder</a> я рассмотрела около 60 программ подготовки и собрала для вас 32 лучших курса, в том числе и бесплатных. Еще больше <a href="https://kursfinder.ru/php/">курсов PHP</a> вы найдете в каталоге сервиса.</p><h2>ТОП-10 лучших курсов по PHP в 2026 году</h2><ol><li><a href="https://experts2.ru/mNCdrh?sub1=tproger-kf&amp;sub2=php-kursy&amp;sub4=1">PHP-разработчик</a> от «Хекслета» — углубленная программа обучения для плавного входа в IT или смены профиля.</li><li><a href="https://experts2.ru/QLhxma?sub1=tproger-kf&amp;sub2=php-kursy&amp;sub4=2">PHP Developer. Professional</a> от OTUS — расширенный курс для освоения навыков уровня middle+.</li><li><a href="https://experts2.ru/sUCzup?sub1=tproger-kf&amp;sub2=php-kursy&amp;sub4=3">Профессия «PHP-разработчик с нуля до PRO»</a> от Skillbox — комплекс из трех курсов для быстрого входа в профессию.</li><li><a href="https://experts2.ru/HfrdiA?sub1=tproger-kf&amp;sub2=php-kursy&amp;sub4=4">PHP: Деревья</a> от «Хекслета» — короткий прикладной курс для новичков.</li><li><a href="https://experts2.ru/jHshNw?sub1=tproger-kf&amp;sub2=php-kursy&amp;sub4=5">PHP-разработчик. Базовый уровень</a> от Skillbox — короткий курс для быстрого освоения основ языка.</li><li><a href="https://experts2.ru/dawKxA?sub1=tproger-kf&amp;sub2=php-kursy&amp;sub4=6">PHP-разработчик с нуля</a> от «Брунояма» — интенсивный очный курс в Санкт-Петербурге.</li><li><a href="https://experts2.ru/HiegLa?sub1=tproger-kf&amp;sub2=php-kursy&amp;sub4=7">Видеокурс по PHP, MySQL</a> от itProger — недорогой курс с большим объемом практики.</li><li><a href="https://experts2.ru/FMakqr?sub1=tproger-kf&amp;sub2=php-kursy&amp;sub4=8">Веб-разработчик с нуля</a> от Skillfactory — расширенная программа с изучением двух языков программирования.</li><li><a href="https://experts2.ru/wsArPh?sub1=tproger-kf&amp;sub2=php-kursy&amp;sub4=9">Уроки PHP для начинающих</a> от itProger — экспресс-курс по PHP + MySQL.</li><li><a href="https://experts2.ru/GwXgth?sub1=tproger-kf&amp;sub2=php-kursy&amp;sub4=10">Онлайн-курсы по программированию на PHP</a> от Onskills — экспресс курс для знакомства с разными языками программирования с упором на PHP.</li></ol><p>В моей подборке лучших курсов по PHP вы найдете программы для обучения с нуля, а также образовательные треки для углубления имеющихся знаний. Кроме того, есть узкоспециализированные курсы для обучения работе с определенными инструментами языка. Благодаря обучению вы сможете получить свою первую работу в IT или повысить профессиональный уровень и доход.</p><h2>Онлайн-курсы по PHP</h2><p><b>1. </b><a href="https://experts2.ru/mNCdrh?sub1=tproger-kf&amp;sub2=php-kursy&amp;sub4=1">PHP-разработчик</a><b> | Хекслет </b></p><p>Углубленный онлайн-курс обучения PHP, на котором вы освоите HTML, CSS, научитесь работать с базами данных и популярными фреймворками. После прохождения обучения вы сможете создавать сайты и веб-приложения, заниматься администрированием, работать с сервером. Поймете, как проводится оптимизация веб-ресурсов для обеспечения их безопасности. Освоите особенности работы с системой контроля версий Git. В «Персональном» тарифе во время обучения вас будет сопровождать опытный разработчик, который ответит на все вопросы во время индивидуальных консультаций.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2024-11-02/00c0be29-1730-4223-9f5a-ac4dbb01db7e.png" alt="" /></figure><ul><li>Стоимость: от 6 300 и от 10 900 рублей в месяц в рассрочку на 24 месяца для тарифов «Групповой» и «Персональный» соответственно.</li><li>Длительность: 10 месяцев.</li><li>Формат обучения: теория, тесты, практика, вебинары с наставниками.</li><li>Сертификат: есть.</li></ul><p><b>Кому подойдет:</b> новичку, который хочет погрузиться в IT, специалисту, решившему сменить профиль, а также PHP-разработчику для углубления и актуализации знаний.</p><p><b>Преимущества:</b></p><ul><li>четыре проекта для портфолио;</li><li>Практика с первого урока;</li><li>Подготовка к трудоустройству;</li><li>Наставники — практикующие разработчики;</li><li>Учеба в комфортном темпе;</li><li>Возврат денег, если не удалось найти работу;</li><li>два тарифа на выбор;</li><li>80 часов персональных консультаций и персональное расписание в тарифе «Персональный».</li></ul><p><b>Недостатки:</b></p><ul><li>в «Групповом» тарифе преимущественно самостоятельное обучение;</li><li>достаточно дорогой «Персональный» тариф.</li></ul><p><b>Программа обучения:</b></p><ul><li>Основы программирования.</li><li>Профессиональный PHP.</li><li>Разработка сайтов.</li><li>Laravel.</li></ul><p><a href="https://experts2.ru/mNCdrh?sub1=tproger-kf&amp;sub2=php-kursy&amp;sub4=1">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><p><b>2.</b> <a href="https://experts2.ru/QLhxma?sub1=tproger-kf&amp;sub2=php-kursy&amp;sub4=2">PHP Developer. Professional</a> <b>| OTUS </b></p><p>Онлайн-курс PHP для специалистов с опытом. После его прохождения вы освоите все необходимые навыки для уровня middle+. Для поступления требуется пройти предварительное тестирование. Процесс обучения подразумевает проведение онлайн-занятий с экспертами, которые могут дать обратную связь в ходе проведения урока. Вы научитесь работать с инфраструктурой, хранилищем, тестированием. Освоите тестирование, доставку в продакшен, SRE-практики.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2024-11-02/db15cdf2-30a4-4d0d-872c-fca85afd5a15.png" alt="" /></figure><ul><li>Стоимость: от 9 600 рублей в месяц в рассрочку на 10 месяцев.</li><li>Длительность: 5 месяцев.</li><li>Формат обучения: вебинары, практические задания, проектная работа.</li><li>Сертификат: есть.</li></ul><p><b>Кому подойдет: </b>разработчикам на PHP с опытом разработки от 1 года. Программистам на любом языке ООП с опытом от трех лет.</p><p><b>Преимущества:</b></p><ul><li>практика командной разработки;</li><li>работа над проектом — коммерческим кейсом;</li><li>размещение резюме в базе партнеров OTUS;</li><li>общение с преподавателями и однокурсниками;</li><li>оперативная поддержка от экспертов;</li><li>можно посетить бесплатные открытые вебинары для оценки качества обучения на платформе;</li><li>корпоративное обучение на особых условиях.</li></ul><p><b>Недостатки:</b></p><ul><li>время проведения вебинаров — 20:00 в понедельник и четверг по Москве, может подойти не всем;</li><li>редкий набор групп;</li><li>требуется пройти вступительное тестирование для поступления на обучение.</li></ul><p><b>Программа обучения:</b></p><ul><li>Общие знания.</li><li>Базы данных.</li><li>Практики разработки.</li><li>Архитектуры.</li></ul><p><a href="https://experts2.ru/QLhxma?sub1=tproger-kf&amp;sub2=php-kursy&amp;sub4=2">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><p><b>3.</b> <a href="https://experts2.ru/sUCzup?sub1=tproger-kf&amp;sub2=php-kursy&amp;sub4=3">Профессия «PHP-разработчик с нуля до PRO»</a> <b>| Skillbox</b></p><p><i><b>🎁Используйте промокод «kursfinder», чтобы получить скидку 60% на профессии из раздела «Программирование» и до 50% на курсы школы.</b></i></p><p>Расширенный курс PHP-разработчика, на котором вы с нуля научитесь программировать сайты и веб-приложения. В ходе обучения создадите облачное хранилище и собственный сервис для бронирования отелей. Вы поймете принципы ООП, научитесь работать с файловой системой. Большое внимание уделяется поиску и исправлению ошибок в коде. В качестве бонусного курса вы получите программу обучения по основам SQL. В процессе и после окончания обучения вас ждет помощь в трудоустройстве от Центра карьеры.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2024-11-02/5f5a4739-d6ff-4f59-918a-9d5a118ca040.png" alt="" /></figure><ul><li>Стоимость: от 4 666 рублей в месяц в рассрочку на 22 месяца.</li><li>Длительность: 7 месяцев.</li><li>Формат обучения: вебинары, задания, основанные на реальных задачах разработчика.</li><li>Сертификат: есть.</li></ul><p><b>Кому подойдет:</b> новичкам, которые хотят научиться программировать. Начинающим разработчикам, у которых есть базовые навыки программирования, но требуется помощь в разборе трудных тем.</p><p><b>Преимущества:</b></p><ul><li>помощь в поиске работы;</li><li>бонусный курс по SQL;</li><li>2 итоговых проекта;</li><li>вечный доступ к курсу и чату;</li><li>оперативная поддержка.</li></ul><p><b>Недостатки:</b></p><ul><li>уроки в формате предзаписанных видео, без общения с экспертами;</li><li>преподаватели не взаимодействуют со студентами.</li></ul><p><b>Программа обучения:</b></p><ul><li>PHP.</li><li>Laravel.</li><li>Основы SQL.</li><li>Итоговые проекты.</li></ul><p><a href="https://experts2.ru/sUCzup?sub1=tproger-kf&amp;sub2=php-kursy&amp;sub4=3">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><p><b>4.</b> <a href="https://experts2.ru/HfrdiA?sub1=tproger-kf&amp;sub2=php-kursy&amp;sub4=4">PHP: Деревья</a><b> | Хекслет </b></p><p>Прикладной курс PHP для начинающих, посвященный изучению принципов устройства и построения деревьев. После обучения вы поймете, как представлять в коде и работать с данными, имеющими рекурсивную природу. Научитесь строить абстракции поверх древовидных структур, применять функциональную парадигму. Деревья нужны в работе с категориями товаров, комментариями, HTML, XML, JSON.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2024-11-02/d4fa95de-4b14-4b1b-a235-b9679a467ad3.png" alt="" /></figure><ul><li>Стоимость: 3 900 рублей в месяц — стоимость подписки на все курсы платформы.</li><li>Длительность: 11 часов.</li><li>Формат обучения: теория, упражнения и тесты.</li><li>Сертификат: нет.</li></ul><p><b>Кому подойдет:</b> тем, что знает основы PHP, заранее изучал ассоциативные массивы и функции и хочет разбираться, как строить деревья PHP.</p><p><b>Преимущества:</b></p><ul><li>много дополнительных материалов;</li><li>к каждой теме тесты и упражнения;</li><li>возможность проходить любые курсы «Хекслета» по подписке;</li><li>доступ к теории остается навсегда;</li><li>помощь в «Обсуждениях»;</li><li>регулярные обновления курса.</li></ul><p><b>Недостатки:</b></p><ul><li>непродолжительный и узконаправленный курс;</li><li>помощь в сложных вопросах не всегда оказывается быстро.</li></ul><p><b>Программа обучения:</b></p><ul><li>Определения.</li><li>Виртуальная файловая система.</li><li>Обход дерева.</li><li>Агрегация.</li><li>Повторные вычисления.</li><li>Аккумулятор.</li><li>HTML-дерево.</li><li>Бонусные материалы.</li></ul><p><a href="https://experts2.ru/HfrdiA?sub1=tproger-kf&amp;sub2=php-kursy&amp;sub4=4">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><p><b>5.</b> <a href="https://experts2.ru/jHshNw?sub1=tproger-kf&amp;sub2=php-kursy&amp;sub4=5">PHP-разработчик. Базовый уровень</a><b> | Skillbox</b></p><p>Онлайн-курс PHP с нуля, на котором вы освоите язык программирования и сможете использовать полученные знания на практике для написания полноценного проекта — создадите облачное хранилище. Научитесь устанавливать окружение, разберетесь в принципах ООП, поймете, как работать с файловой системой. Большое внимание уделяется поиску ошибок в коде. В качестве бонусного курса вас ждет обучение работе с базами данных.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2024-11-02/1abf595e-77ea-49aa-89b8-9603840f8482.png" alt="" /></figure><ul><li>Стоимость: от 5 897 рублей в месяц в рассрочку на год.</li><li>Длительность: 3 месяца.</li><li>Формат обучения: предзаписанные вебинары, практика на основе реальных задач разработчика. Работа над проектом.</li><li>Сертификат: есть.</li></ul><p><b>Кому подойдет: </b>тем, кто хочет научиться программировать и начинающим разработчикам.</p><p><b>Преимущества:</b></p><ul><li>1 год обучения английскому на платформе от Skillbox бесплатно;</li><li>бонусный курс по SQL;</li><li>помощь от кураторов и экспертов в процессе обучения;</li><li>работа над итоговым проектом;</li><li>упор на практику;</li><li>короткий. Но информативный курс.</li></ul><p><b>Недостатки:</b></p><ul><li>без общения с преподавателями;</li><li>относительно высокие платежи по рассрочке.</li></ul><p><b>Программа обучения:</b></p><ul><li>Введение в программирование.</li><li>Переменные, числа, условные операторы.</li><li>Строки и массивы.</li><li>Функции.</li><li>Классы, методы, объекты.</li><li>Интерфейсы.</li><li>HTML/CSS.</li><li>Файлы и сеть.</li><li>REST и RESTful API.</li><li>Базы данных.</li><li>Laravel.</li></ul><p><a href="https://experts2.ru/jHshNw?sub1=tproger-kf&amp;sub2=php-kursy&amp;sub4=5">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><p><b>6.</b><a href="https://experts2.ru/dawKxA?sub1=tproger-kf&amp;sub2=php-kursy&amp;sub4=6"> PHP-разработчик с нуля</a><b> | Бруноям</b></p><p><b><i>🎁Используйте эксклюзивный промокод «kursfinder», чтобы получить скидку 15% на покупку любого курса школы.</i></b></p><p>Очный курс обучения PHP в Санкт-Петербурге, на котором вас ждет работа в малых группах (5-10 человек) и возможность напрямую взаимодействовать с экспертом. Программа рассчитана на подготовку к работе и освоение всех необходимых для старта навыков. В ходе обучения вы познакомитесь с фреймворками, поймете принципы ООП. Научитесь работать с базами данных и системой контроля версий.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2024-11-02/4d36263b-868c-4b0c-b30f-09001c51723f.png" alt="" /></figure><ul><li>Стоимость: от 2 825 рублей в месяц в рассрочку на год.</li><li>Длительность: 6 недель.</li><li>Формат обучения: очные занятия в группе или индивидуально, практические домашние задания.</li><li>Сертификат: есть.</li></ul><p><b>Кому подойдет: </b>новичкам, которые не имеют опыта в программировании.</p><p><b>Преимущества:</b></p><ul><li>помощь с оформлением портфолио и резюме;</li><li>занятия в малых группах;</li><li>доступен индивидуальный формат обучения;</li><li>дополнительная скидка за раннюю запись на курс;</li><li>вводный бесплатный курс «Учись учиться», который мотивирует на прохождение обучения.</li></ul><p><b>Недостатки:</b></p><ul><li>очная программа в СПб;</li><li>нет информации о времени старта очередного потока.</li></ul><p><b>Программа обучения:</b></p><ul><li>Серверные технологии.</li><li>Формы, циклы и массивы.</li><li>Функции.</li><li>Принципы построения динамического веб-сайта.</li><li>Базы данных.</li><li>Сессии и cookies.</li><li>Практика.</li><li>Отправка файлов, работа с текстами.</li><li>ООП.</li></ul><p><a href="https://experts2.ru/dawKxA?sub1=tproger-kf&amp;sub2=php-kursy&amp;sub4=6">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><p><b>7.</b> <a href="https://experts2.ru/HiegLa?sub1=tproger-kf&amp;sub2=php-kursy&amp;sub4=7">Видеокурс по PHP, MySQL</a> <b>| itProger </b></p><p>Короткий, но информативный курс по PHP с нуля, который отличается своей невысокой стоимостью. Доступно четыре тарифа на выбор. В зависимости от выбранной программы обучения, вы получите доступ к разным объемам практических заданий. Например, в тарифе «Мини» доступны только видеоуроки и тесты, в тарифе «Стандарт» добавляются исходники к урокам, в «Наилучшем» — консультации, а во «Все включено» — практические задачи. Даже самый дорогой тариф доступен для любого бюджета — 3 500 рублей. Поэтому лучше присмотреться к нему. К тому же от стоимости тарифа зависит длительность подарочной подписки на сайт, по которой вы сможете заниматься на других программах, представленных на проекте.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2024-11-02/8cc93035-03e2-4857-8674-2644c90a771e.png" alt="" /></figure><ul><li>Стоимость: по подписке от 700 рублей в месяц.</li><li>Длительность: 10 часов.</li><li>Формат обучения: теория, практические задания, тесты.</li><li>Сертификат: есть, но не во всех тарифах.</li></ul><p><b>Кому подойдет: новичкам, </b>которые хотят самостоятельно освоить язык PHP.</p><p><b>Преимущества:</b></p><ul><li>недорогой курс;</li><li>4 тарифа на выбор;</li><li>подписка на сайт для обучения на других курсах в подарок;</li><li>более 250 практических заданий;</li><li>курс выбрало большое количество учеников;</li><li>изучение дополнительных технологий.</li></ul><p><b>Недостатки:</b></p><ul><li>консультации и сертификат только в двух самых дорогих тарифах;</li><li>все тесты доступны только для максимального тарифа;</li><li>практика только в максимальном тарифе.</li></ul><p><b>Программа обучения:</b></p><ul><li>PHP.</li><li>MySQL.</li><li>Создание сайтов.</li></ul><p><a href="https://experts2.ru/HiegLa?sub1=tproger-kf&amp;sub2=php-kursy&amp;sub4=7">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><p><b>8.</b> <a href="https://experts2.ru/FMakqr?sub1=tproger-kf&amp;sub2=php-kursy&amp;sub4=8">Веб-разработчик с нуля</a><b> | Skillfactory </b></p><p>Онлайн-курс веб-разработки, в котором большое внимание уделяется обучению PHP. В базовом модуле вы познакомитесь с версткой, базовыми фронтендом и бэкендом, а вместе с ними — с языками PHP и JavaScript. После этого у вас будет возможность выбрать: какой из языков продолжать изучать на углубленном уровне в течение следующих восьми месяцев. В ходе обучения вы соберете портфолио из 10 проектов, которые помогут в трудоустройстве. Дополнительную поддержку в поиске работы окажут специалисты школы.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2024-11-02/c1e07d53-da41-40b5-b0af-5bc0e00a9ffa.png" alt="" /></figure><ul><li>Стоимость: от 4 233 рублей в месяц в рассрочку на 3 года.</li><li>Длительность: 1 год.</li><li>Формат обучения: тренажеры, тестовые и практические задания, общение с экспертами и работа над проектами.</li><li>Сертификат: сертификат или диплом о переподготовке.</li></ul><p><b>Кому подойдет:</b> новичкам без опыта в программировании.</p><p><b>Преимущества:</b></p><ul><li>вечный доступ к курсу;</li><li>10 проектов для портфолио;</li><li>помощь менторов по любым вопросам;</li><li>содействие в трудоустройстве;</li><li>изучение двух языков программирования;</li><li>3 тарифа на выбор;</li><li>вебинары с экспертами даже в «Базовом» тарифе.</li></ul><p><b>Недостатки:</b></p><ul><li>полноценное изучение PHP только при выборе программы Backend-разработки;</li><li>дорогой «Индивидуальный» тариф.</li></ul><p><b>Программа обучения:</b></p><ul><li>Введение в веб-разработку.</li><li>Frontend-разработчик или Backend-разработчик.</li></ul><p><a href="https://experts2.ru/FMakqr?sub1=tproger-kf&amp;sub2=php-kursy&amp;sub4=8">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><p><b>9.</b> <a href="https://experts2.ru/wsArPh?sub1=tproger-kf&amp;sub2=php-kursy&amp;sub4=9">Уроки PHP для начинающих</a><b> | itProger </b></p><p>Короткий курс дистанционного обучения PHP, состоящий из текстовых материалов, видео и практических заданий. Он доступен по подписке на платформу. После ее оформления вы сможете проходить большое количество образовательных программ, познакомиться с разными языками программирования или погрузиться в PHP. Примечательно, что теоретическая часть курса доступна даже без подписки, а в зависимости от длительности подписки меняются объемы тестовых и практических заданий.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2024-11-02/9aa5e164-6d30-4cd5-ae48-91aa25942dce.png" alt="" /></figure><ul><li>Стоимость: по подписке от 700 рублей в месяц.</li><li>Длительность: 28 уроков.</li><li>Формат обучения: текстовые материалы, видеоролики, тесты и практические задания.</li><li>Сертификат: нет.</li></ul><p><b>Кому подойдет: </b>новичкам, которые хотят изучить язык PHP самостоятельно.</p><p><b>Преимущества:</b></p><ul><li>четыре варианта подписки на разный срок;</li><li>возможность смотреть теорию бесплатно;</li><li>консультации от экспертов (при подписке от 6 месяцев);</li><li>тесты, практические задания;</li><li>предоставление готового кода для уроков;</li><li>внутренний конструктор сайтов;</li><li>возможность учиться на платных курсах платформы бесплатно при подписке на 1 год.</li></ul><p><b>Недостатки:</b></p><ul><li>при подписке на 1 месяц недоступны тесты, дополнительные практические задания, открывается доступ не ко всем тестам;</li><li>требуется высокий уровень организованности, чтобы пройти курс самостоятельно.</li></ul><p><b>Программа обучения:</b></p><ul><li>Введение.</li><li>Локальный сервер.</li><li>Переменные и данные.</li><li>Математические действия.</li><li>Операции.</li><li>Конструкции.</li><li>Массивы данных и циклы.</li><li>Функции.</li><li>Обработка форм.</li><li>Встроенные функции PHP.</li><li>Модуль по SQL.</li></ul><p><a href="https://experts2.ru/wsArPh?sub1=tproger-kf&amp;sub2=php-kursy&amp;sub4=9">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><p><b>10. </b><a href="https://experts2.ru/GwXgth?sub1=tproger-kf&amp;sub2=php-kursy&amp;sub4=10">Онлайн-курсы по программированию на PHP</a><b> | Onskills </b></p><p>Курс в формате видеоуроков с тестами, в ходе которого вы не только познакомитесь с основами PHP, но и поработаете с HTML/CSS, JavaScript. Эта недорогая программа обучения подойдет тем, кто хочет познакомиться с разными технологиями и выбрать дальнейший путь обучения. Уроки содержат практику и тесты для закрепления пройденных материалов.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2024-11-02/80fbb53e-551f-4eb5-9160-1282ec94e159.png" alt="" /></figure><ul><li>Стоимость: 1 900 рублей.</li><li>Длительность: 18 уроков.</li><li>Формат обучения: видеоуроки, тесты и практика.</li><li>Сертификат: есть.</li></ul><p><b>Кому подойдет: </b>новичкам и студентам, а также практикующим программистам и проект-менеджерам.</p><p><b>Преимущества:</b></p><ul><li>недорогой курс;</li><li>много практики;</li><li>вечный доступ к материалам курса;</li><li>база по PHP, CSS, HTML и JavaScript в одном курсе;</li><li>оперативные ответы от службы поддержки.</li></ul><p><b>Недостатки:</b></p><ul><li>без обратной связи от эксперта;</li><li>проверка знаний тестами.</li></ul><p><b>Программа обучения:</b></p><ul><li>HTML/CSS.</li><li>JavaScript.</li><li>PHP.</li></ul><p><a href="https://experts2.ru/GwXgth?sub1=tproger-kf&amp;sub2=php-kursy&amp;sub4=10">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><h2>Еще 7 курсов по PHP</h2><ul><li><a href="https://experts2.ru/UgXdwo?sub1=tproger-kf&amp;sub2=php-kursy&amp;sub4=netop">PHP: Составные данные</a> от «Хекслета» — для прохождения курсов на платформе нужно оформить подписку. В курсе рассматриваются особенности написания кода, реализации данных, поддержки модульности и др. Программа предназначена для самостоятельного изучения.</li><li><a href="https://experts2.ru/rNPcig?sub1=tproger-kf&amp;sub2=php-kursy&amp;sub4=netop">Онлайн-курс по PHP</a> от HEDU (irs.academy) — программа обучения PHP онлайн для новичков без опыта в программировании и начинающих разработчиков. В программе делается большой упор на практический формат обучения.</li><li><a href="https://experts2.ru/MtOgax?sub1=tproger-kf&amp;sub2=php-kursy&amp;sub4=netop">Язык программирования PHP</a> от Stepik — образовательная программа, направленная на изучение PHP и MySQL. Эксперты углубятся в основы программирования, рассмотрят операции и операторы, функции, циклы, массивы и др.</li><li><a href="https://experts2.ru/GuLrbl?sub1=tproger-kf&amp;sub2=php-kursy&amp;sub4=netop">PHP. Профессиональная веб-разработка</a> от HTML Academy — онлайн-курс даст необходимые профессиональные навыки новичкам. В ходе обучения студенты работают над проектами, получают обратную связь от наставников.</li><li><a href="https://experts2.ru/xbvnYI?sub1=tproger-kf&amp;sub2=php-kursy&amp;sub4=netop">СИКП на PHP</a> от «Хекслета» — для доступа к курсам площади необходимо оформить подписку. Программу можно изучать самостоятельно, в комфортном темпе. Эксперты расскажут, как использовать различные функции.</li><li><a href="https://experts2.ru/pQacOd?sub1=tproger-kf&amp;sub2=php-kursy&amp;sub4=netop">Профессия «Fullstack-разработчик на PHP»</a> от Skillbox — образовательная программа поможет слушателям научиться верстать страницы с нуля. В ходе обучения студенты изучают теорию, закрепляют ее на практике и подготавливают проекты для портфолио.</li><li><a href="https://experts2.ru/CdhbgD?sub1=tproger-kf&amp;sub2=php-kursy&amp;sub4=netop">ООП В PHP</a> от «Хекслета» — для прохождения курсов на платформе необходимо оформить подписку. Программа подходит для слушателей, которые хотят изучать материал самостоятельно в комфортном темпе. Вы разберетесь в прототипах, наследовании, трейтах и полиморфизмах и т.д.</li></ul><h2>Бесплатные курсы по PHP</h2><p>Бесплатные курсы по PHP открывают большие возможности для самостоятельного изучения языка программирования, его особенностей и возможностей. В этой подборке представлены бесплатные программы.</p><p><b>1.</b> <a href="https://experts2.ru/rwTpxO?sub1=tproger-kf&amp;sub2=php-kursy&amp;sub4=netop">Ключевые аспекты веб-разработки на PHP</a> — <b>«Хекслет»</b></p><p>Онлайн-курс, для изучения которого потребуется всего 4 часа. Эксперты расскажут, как создавать простые страницы на PHP, устанавливать приложения на Slim и др. Также для слушателей подготовлена самостоятельная работа.</p><p><b>Главное о курсе: </b></p><ul><li>есть тесты для самопроверки;</li><li>можно получить поддержку в «обсуждениях».</li></ul><p><b>2. </b><a href="https://experts2.ru/qGeoLy?sub1=tproger-kf&amp;sub2=php-kursy&amp;sub4=netop">Курс PHP: онлайн обучение с нуля, бесплатно</a> — <b>Code Basics</b></p><p>Образовательная программа для самостоятельного изучения. Для закрепления отработанного материала предусмотрена практика в браузере. Курс подходит для новичков, которые только начали свой путь в разработке.</p><p><b>Главное о курсе: </b></p><ul><li>предусмотрена практика в браузере;</li><li>структурированный материал.</li></ul><p><b>3.</b> <a href="https://experts2.ru/vizkNW?sub1=tproger-kf&amp;sub2=php-kursy&amp;sub4=netop">PHP: Разработка микрофреймворка</a> — <b>«Хекслет»</b></p><p>Обучение PHP разработчика в асинхронном формате. Эксперты научат проектировать веб-фреймворки, создавать простую шаблонизацию, углубятся в аспекты обработки файлов и др. Дополнительно в программу включены тесты для самопроверки.</p><p><b>Главное о курсе:  </b></p><ul><li>слушателям предлагаются дополнительные материалы для изучения;</li><li>бессрочный доступ.</li></ul><p><b>4. </b><a href="https://live.skillbox.ru/webinars/code/znakomstvo-s-php-osnovy-yazyka-i-ego-integraciya-s-html270921/">Знакомство с PHP. Основы языка и его интеграция с HTML</a> — <b>Skillbox</b></p><p>Программа представляет собой вебинар в записи. Эксперты рассматривают возможности языка программирования, особенности создания программ, интеграцию с HTML и др.</p><p><b>Главное о курсе: </b></p><ul><li>для изучения требуется минимум времени;</li><li>эксперты делятся лайфхаками.</li></ul><p><b>5.</b> <a href="https://stepik.org/62383">PHP для начинающих</a> — <b>Stepik</b></p><p>Онлайн-курс, направленный на изучение основ языка программирования. Автор расскажет о переменных, рассмотрит арифметические выражения, строки, циклы и др. Дополнительно в рамках курса предусмотрены тесты и интерактивные задачи.</p><p><b>Главное о курсе: </b></p><ul><li>ориентировано на новичков;</li><li>есть задачи для закрепления.</li></ul><p><b>6.</b> <a href="https://experts2.ru/vizkNW?sub1=tproger-kf&amp;sub2=php-kursy&amp;sub4=netop">Основы PHP</a> — <b>«Хекслет»</b></p><p>Образовательная программа, включающая в себя не только видеоуроки, но и тренажеры, а также тесы. Эксперты научат разрабатывать несложные программы с применением базовых конструкций языка, составлять программы из разных файлов и др.</p><p><b>Главное о курсе: </b></p><ul><li>упор на практику;</li><li>предоставляются дополнительные материалы.</li></ul><p><b>7.</b> <a href="https://loftschool.com/modules/607-php-vstroennye-vozmoznosti-iazyka">PHP: Встроенные возможности языка</a> —<b> Loftschool</b></p><p>Видеокурс предназначен для новичков в разработке. Первый урок из подборки можно посмотреть без ограничений, однако для знакомства с остальной программой необходимо зарегистрироваться на платформе. Студенты узнают о функциях для работы с переменными, строками, датой и временем и др.</p><p><b>Главное о курсе: </b></p><ul><li>небольшие видеоуроки;</li><li>простое и доступное изложение.</li></ul><p><b>8.</b> <a href="https://experts2.ru/sFOpei?sub1=tproger-kf&amp;sub2=php-kursy&amp;sub4=netop">Видеокурс по основам PHP 8</a> — <b>Михаил Русаков</b></p><p>Авторский онлайн-курс, предназначенный для знакомства с основами PHP. Изучая материалы, слушатели узнают о том, как установить локальный сервер. Также автор разберет подготовительные этапы для создания движка, уделит время особенностям генерирования страницы и т. д.</p><p><b>Главное о курсе: </b></p><ul><li>курс высылается на электронную почту;</li><li>доступное изложение материала.</li></ul><p><b>9. </b><a href="https://experts2.ru/rniCHd?sub1=tproger-kf&amp;sub2=php-kursy&amp;sub4=netop">PHP — первое знакомство</a> — <b>Stepik</b></p><p>Образовательная программа, которая подходит для изучения с нуля, без опыта в программировании. В курсе автор рассмотрит основы языка программирования: синтаксис, переменные, операторы, массивы, структуры и др. Дополнительно в программу включены тесты и интерактивные задачи для закрепления полученных навыков.</p><p><b>Главное о курсе: </b></p><ul><li>предусмотрена выдача сертификата;</li><li>есть тесты и задачи для самоконтроля.</li></ul><p><b>10. </b><a href="https://experts2.ru/wnqjYQ?sub1=tproger-kf&amp;sub2=php-kursy&amp;sub4=netop">Создание движка на PHP для начинающих</a> — <b>Михаил Русаков</b></p><p>Авторская образовательная программа, разработанная специально для начинающих разработчиков. У слушателей есть возможность научиться создавать различные движки для сайтов на основе PHP.</p><p><b>Главное о курсе: </b></p><ul><li>для лучшего восприятия обучение ведется на примерах;</li><li>курс высылается по адресу электронной почты.</li></ul><h2>Видеоуроки по PHP</h2><p><b>1.</b> <a href="https://www.youtube.com/playlist?list=PLyQw8knu4zeE1wNgDGa9B4mWQtd3mZpjF">Записи докладов с PHP-митапов</a> — <b>Skyeng Tech</b></p><p>Записи PHP-митапов будут интересны опытным разработчикам. На канале представлены насыщенные видеоуроки с подробными разборами. В процессе обучения слушатели могут узнать больше о производительности приложений, создании формы обратной связи, угрозах и т.д.</p><p><b>Главное о курсе:  </b></p><ul><li>простые и доступные видеоуроки;</li><li>материал для опытных разработчиков.</li></ul><p><b>2.</b> <a href="https://www.youtube.com/c/PHPChannel">Записи конференций PHP Russia 2022</a> — <b>PHP Channel</b></p><p>Вниманию зрителей предлагается целый канал, посвященный PHP. Слушатели могут изучить доклады разработчиков. Эксперты из крупнейших компаний рассматривают тестирование версий, аспекты автоматного программирования, интеграции с другими проектами и т.д.</p><p><b>Главное о курсе: </b></p><ul><li>ориентировано на опытных PHP-разработчиков;</li><li>в материалах можно найти интересные лайфхаки.</li></ul><p><b>3.</b> <a href="https://www.youtube.com/playlist?list=PLyQw8knu4zeF5cQokaeusUv35rJfgYEk6">Стримы с клевыми людьми из отрасли</a> — <b>Skyeng Tech</b></p><p>Образовательная программа представляет собой насыщенные лекции и вебинары в записи по PHP. Уроки больше ориентированы на опытных разработчиков, которые хотят быть в курсе актуальных изменений, получать профессиональные рекомендации.</p><p><b>Главное о курсе: </b></p><ul><li>насыщенные лекции;</li><li>упор на опытных разработчиков.</li></ul><p><b>4. </b><a href="https://youtube.com/playlist?list=PLbaJpLafV4JGKNaSfT8kRmqef-tp_c4hm&amp;si=iwQmtHbeWlz4nVNY">Пишем на PHP и не теряем память</a> —<b> PHP Point</b></p><p>Программа представляет собой лекцию в записи. Материал объемный, для удобства изучения предусмотрена разбивка на тайминги. Слушатели могут узнать об утечке памяти, инструментах для ее выявления и устранения.</p><p><b>Главное о курсе: </b></p><ul><li>автор делится полезными дополнительными материалами по теме;</li><li>есть деление лекции на тайминги.</li></ul><p><b>5.</b> <a href="https://youtube.com/playlist?list=PLTucyHptHtTlPKuCdveqnaZE_Mi-F1LhE&amp;si=3zPMleb4h3nFx5VZ">PHP с нуля</a> — <b>Просто о Laravel. CutCode</b></p><p>Обучение PHP с нуля с простыми и доступными видеоуроками. Изучение материала не займет много времени, в уроках объясняются основные моменты. Автор ведет трансляцию с экрана, это позволят видеть редактор кода, учиться можно прямо на примере.</p><p><b>Главное о курсе: </b></p><ul><li>обучение ведется на наглядных примерах и иллюстрациях;</li><li>уроки идут от простого к сложному.</li></ul><h2>Тренажеры и задачи по PHP</h2><p>Практика — залог успеха в освоении любого языка программирования. Задачи и тренажеры могут быть для мобильных устройств, браузера или непосредственно в редакторе кода. С их помощью можно изучить PHP, отработать техники кодирования.</p><ul><li><a href="https://codechick.io/">СodeСhick</a> — площадка с практическими задачами и тренажерами по разным языкам программирования, в числе которых и PHP. Для лучшего восприятия, каждая задача с тренажером имеет подробное описание, пример решения, а также разработчики внедрили функцию автотеста для самоконтроля. Тренажеры разделяются на уровни сложности от легкого к простому.</li><li><a href="https://codeforces.com/">Codeforces</a> — платформа, на которой можно найти задачи по программированию, также и олимпиады. Для старта обучения и поиска соревнования необходимо пройти процесс регистрации на платформе.</li><li><a href="https://code-basics.com/ru">Code Basics</a> — инструмент для изучения одного из множества языков программирования прямо в браузере. Платформа доступна на русском языке, что позволяет разбираться в теме без затруднений, связанных с языковым барьером. На площадке представлены курсы различных уровней сложности, поэтому обучаться могут как новички, так и продвинутые программисты.</li></ul><p>Также можно найти и бесплатные сервисы с задачами и пособиями по программированию.</p><ul><li><a href="https://www.codewars.com/">Codewars</a> — платформа, подготовленная сообществом программистов. На площадке действует функциональный тренажер, с помощью которого можно закрепить навыки по различным языкам программирования. Упражнения представлены в формате «ката», с ними можно отработать техники кодирования до профессионального уровня.</li><li><a href="https://edabit.com/">Edabit</a> — на площадке представлены задачи различного уровня сложности по PHP и другим языкам программирования. Также у учеников есть возможность изучить пособия. В личном кабинете можно не только искать задачи и пособия, но и следить за личным прогрессом в обучении.</li><li><a href="https://exercism.org/">Exercism</a> — площадка с тренажерами и задачами по 74 языкам программирования, в числе которых и PHP. Команда специалистов подготовила бесплатные упражнения с автоматическим анализом: если в решении есть ошибки, то эксперты подскажут, как их исправить.</li><li><a href="https://www.freecodecamp.org/">freeCodeCamp</a> — бесплатный сервис, на котором представлены курсы, проекты и задачи для изучения PHP и других инструментов разработчика. На платформе предлагаются решения как для новичков, так и для практикующих специалистов. Над проектами можно работать непосредственно в редакторе кода, в браузере или же мобильном приложении.</li></ul><h2>Заключение</h2><p>PHP-разработчик — востребованный специалист в веб-разработке, при создании CRM-систем. На <a href="https://hh.ru/search/vacancy?ored_clusters=true&amp;area=1&amp;area=113&amp;hhtmFrom=vacancy_search_list&amp;hhtmFromLabel=vacancy_search_line&amp;search_field=name&amp;search_field=company_name&amp;search_field=description&amp;enable_snippets=false&amp;text=php&amp;salary=110000&amp;only_with_salary=true&amp;L_save_area=true">hh.ru</a> представлено более тысячи вакансий, половина из которых доступна в удаленном формате. При этом средний уровень зарплаты специалистов составляет 110 000 рублей. Более того, программисты с опытом найдут для себя вакансии с заработной платой до 1 миллиона рублей. А начать карьеру в IT вам помогут курсы PHP, представленные в подборке. На них можно получить не только базовые знания, но и первый опыт работы.</p><p><i>Нашли ошибку или неточность? Информация в статье потеряла актуальность? Расскажите об этом в комментариях — все исправим. Если хотите, чтобы проверенный вами курс по PHP тоже был в подборке, поделитесь своими впечатлениями о нем.</i></p>]]></content:encoded>
    </item>
    <item>
      <title>Разделение оплаты между юридическими лицами на Битрикс: пошаговая инструкция</title>
      <link>https://tproger.ru/articles/oplata-ot-dvuh-yuridicheskih-lic-na-bitriks--powagovaya-instrukciya</link>
      <comments>https://tproger.ru/articles/oplata-ot-dvuh-yuridicheskih-lic-na-bitriks--powagovaya-instrukciya?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Дмитрий Талызин]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/oplata-ot-dvuh-yuridicheskih-lic-na-bitriks--powagovaya-instrukciya</guid>
      <description><![CDATA[<p>Оптимизируйте процесс приема платежей, улучшите взаимодействие с клиентами и сделайте свою платформу более удобной для бизнеса. Простой и понятный подход к реализации двусторонних расчетов на Битрикс.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/oplata-ot-dvuh-yuridicheskih-lic-na-bitriks--powagovaya-instrukciya">Разделение оплаты между юридическими лицами на Битрикс: пошаговая инструкция</a>»</p>]]></description>
      <category><![CDATA[1C-Bitrix]]></category>
      <category><![CDATA[PHP]]></category>
      <category><![CDATA[Веб-разработка]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 10 Sep 2024 14:20:02 GMT</pubDate>
      <content:encoded><![CDATA[<p>Бизнес, работающий с физическим товаром покупает его, хранит и продает от конкретного юридического лица. Однако бывает необходимость делать все это от нескольких юридических лиц.</p><p>В классическом интернет-магазине техническая реализация предполагает продажу товара только от одного юрлица, но это бы означало с точки зрения бухгалтерии необходимость переместить товар с одного юрлица на другое, что является не только головной болью бухгалтера, но и предполагает денежные потери на такой транзакции.</p><h3>Важность реализации функционала разделения оплаты</h3><p><b>1. Упрощение бухгалтерского учета</b></p><p>Разделение платежей между двумя юридическими лицами позволяет более четко отслеживать финансовые потоки. Каждое юридическое лицо может вести отдельный бухгалтерский учет, что упрощает процесс отчетности и минимизирует риски ошибок. Это особенно актуально для компаний, работающих в разных регионах, где налоговые правила могут значительно отличаться.</p><p><b>2. Снижение налоговых рисков  </b></p><p>Разделение оплат позволяет более эффективно управлять налоговыми обязательствами. Каждое юридическое лицо может оптимизировать свои налоговые расходы в соответствии с действующим законодательством. Это снижает риск налоговых проверок и штрафов, так как каждая компания отвечает только за свои финансовые операции.</p><p><b>3. Гибкость в управлении финансами</b></p><p>Разделение платежей дает возможность более гибко управлять финансами. Например, одно юридическое лицо может заниматься продажами одних групп товаров, а другое — других групп товаров, к примеру от разных поставщиков.</p><p><b>4. Легкость в масштабировании бизнеса</b></p><p>При расширении бизнеса или выходе на новые рынки наличие нескольких юридических лиц может стать значительным преимуществом. Каждое из них может адаптироваться к специфике нового рынка, что позволяет легче и быстрее реагировать на изменения и потребности клиентов.</p><figure><img src="https://media.tproger.ru/user-uploads/72001/2024-08-20/8084383b-7874-4a4c-8a2c-04a6a608483d.png" alt="" /></figure><h4>Настройка функционала разделения оплаты</h4><p>Теперь поговорим о том, как же всю эту красоту настроить технически на платформе Bitrix.</p><p>В настройках платежных систем мы добавили два способа оплаты. В нашем случае это платежные системы с ID 10 и 11:</p><figure><img src="https://media.tproger.ru/user-uploads/72001/2024-08-20/5eb23fb3-fd89-41da-b965-6b74817a84ee.jpg" alt="" /></figure><p>Обработчик, название и описание у них одинаковые:</p><figure><img src="https://media.tproger.ru/user-uploads/72001/2024-08-20/9460931f-ecb0-4c99-905d-4078a90ce642.jpg" alt="" /></figure><p>Отличаются только настройки платежной системы, которые были предоставлены Paykeeper:</p><figure><img src="https://media.tproger.ru/user-uploads/72001/2024-08-20/9cca70c1-bfe3-4445-87e9-91df974bd76b.jpg" alt="" /></figure><p>Затем мы внесли изменения в шаблон страницы оформления заказа, в нашем случае это компонент sale.order.ajax. Мы сделали, чтобы для пользователя отображалась всегда одна из платежный систем.</p><figure><img src="https://media.tproger.ru/user-uploads/72001/2024-08-20/cf640bc6-8966-49ae-a735-e8f467bba1f0.jpg" alt="" /></figure><p>То есть, если в корзине есть товары, которые принадлежат только первому складу или обоим складам одновременно, то в этом случае отображалась платежная система с ID 10.</p><p>В остальных случаях c ID 11.</p><p>Таким образом, если у пользователя в корзине были товары только с первого или только со второго склада, то алгоритм оформления заказа никак не менялся с точки зрения пользователя. Ему автоматически подставлялась необходимая платежная система, и далее он оформлял заказ, проходя штатный механизм Битрикс.</p><p>Вся магия начиналась, когда у пользователя в корзине были товары с обоих складов. Так как Битрикс при оформлении заказа всегда создает одну оплату, то нам необходимо сразу после оформления заказа разделять ее на две отдельных оплаты.</p><p>Для этого мы в файле init.php на событие OnSaleOrderSaved создаем обработчик, в котором все изменения делаем для только для новых заказов:</p><p>Далее получаем заказ, товары из него и коллекцию оплат:</p><p>Товары складываем в массив $arBasketItems, чтобы потом с ним было проще работать:</p><p>Затем проверяем, на каких складах содержатся товары из массива $arBasketItems  , и сохраняем итоговую сумму товаров по складам в массиве $arBillSum:</p><p>Ключами массива $arBillSum являются ID складов, хранящиеся в Битрикс. В нашем случае есть два склада с ID 1 и 2.</p><p>Мы проверяем, если в заказе есть товары с обоих складов, то в этом случае делаем разбиение на два счета:</p><p>Из текущей суммы оплаты вычитаем стоимость товаров, принадлежащих ко второму складу. Данная стоимость хранится в переменной $arBillSum[2]:</p><p>Теперь создаем вторую оплату. ID 11 — это идентификатор второй платежной системы в Битрикс:</p><p>Сохраняем заказ:</p><p>После этого пользователь попадает в личный кабинет на страницу данного заказа, которая реализована через стандартный компонент sale.personal.order.detail:</p><figure><img src="https://media.tproger.ru/user-uploads/72001/2024-08-20/e865ad38-d1f6-4021-ab67-5cf0519b8b8a.jpg" alt="" /></figure><p>Вверху мы выводим сообщение, в котором подробно описываем, почему у данного заказа две оплаты.</p><p>Ниже у него выводится две кнопки на оплату, а в правой части отображаются товары данного заказа, разбитые на две части.</p><p>Оплату мы принимаем через <a href="https://marketplace.1c-bitrix.ru/solutions/ooopaykeeperprocessing.paykeeperpayment/">систему</a> PayKeeper и на сайте используем ее модуль. Этот модуль, к сожалению, не поддерживает корректную работу при оплате двух счетов, поэтому нам пришлось его немного кастомизировать.</p><p>Для этого необходимо внести изменения в файле /bitrix/modules/ooopaykeeperprocessing.paykeeperpayment/install/bitrix/</p><p>modules/sale/handlers/paysystem/paykeeper/handler.php :</p><ul><li>в методе initiatePay(), чтобы сумма оплата бралась не как сумма заказа, а как сумма конкретной платежки,</li><li>в методе cart(), который формирует данные для чека — в него мы добавили проверку, чтобы он также возвращал не все товары, а только те, которые относятся к конкретной платежке.</li></ul><p>После установки модуля этот файл будет скопирован в папку /bitrix/modules/sale/handlers/paysystem/paykeeper/handler.php  — через нее он будет подключаться при оплате.</p><figure><img src="https://media.tproger.ru/user-uploads/72001/2024-08-20/ff121dac-20ae-41f5-9801-97230eed6c6c.png" alt="" /></figure><p><i>Если у вас остались вопросы, с удовольствием ответим на них в комментариях! </i></p>]]></content:encoded>
    </item>
    <item>
      <title>Python, Go, Rust: названы самые популярные языки программирования в 2024 году</title>
      <link>https://tproger.ru/news/python--go--rust--nazvany-samye-populyarnye-yazyki-programmirovaniya-v-2024-godu</link>
      <comments>https://tproger.ru/news/python--go--rust--nazvany-samye-populyarnye-yazyki-programmirovaniya-v-2024-godu?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Булат Яббаров]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/python--go--rust--nazvany-samye-populyarnye-yazyki-programmirovaniya-v-2024-godu</guid>
      <description><![CDATA[<p>В 2024 году Python сохраняет лидирующие позиции среди языков программирования благодаря широкому применению. JavaScript и Java остаются популярными для фронтенд-разработки и корпоративных приложений</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/python--go--rust--nazvany-samye-populyarnye-yazyki-programmirovaniya-v-2024-godu">Python, Go, Rust: названы самые популярные языки программирования в 2024 году</a>»</p>]]></description>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[C++]]></category>
      <category><![CDATA[Языки программирования]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[PHP]]></category>
      <category><![CDATA[SQL]]></category>
      <category><![CDATA[TypeScript]]></category>
      <category><![CDATA[Rust]]></category>
      <category><![CDATA[Фронтенд]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 02 Sep 2024 04:25:58 GMT</pubDate>
      <content:encoded><![CDATA[<p>В 2024 году анализ популярности языков программирования <a href="https://www.zdnet.com/article/the-most-popular-programming-languages-in-2024-and-what-that-even-means/">показал</a>, что Python уверенно лидирует в большинстве рейтингов.</p><p>Он сохраняет свою востребованность благодаря широкому спектру применения — от веб-разработки до анализа данных и машинного обучения.</p><h2>Ключевые тенденции в программировании</h2><p>JavaScript и Java также продолжают занимать важные позиции в мире программирования.</p><p>Так, JavaScript остается незаменимым для фронтенд-разработки, в то время как Java сохраняет свою популярность среди разработчиков корпоративных приложений. Эти языки остаются основой для создания многих современных цифровых решений.</p><figure><img src="https://media.tproger.ru/user-uploads/98945/2024-09-02/483e4c9b-c0a4-462e-b3df-f0fcc2544d8c.jpg" alt="" /></figure><p>Кроме того, TypeScript, являющийся расширением JavaScript, стабильно набирает популярность. Он привлекает внимание разработчиков, стремящихся к более строгой типизации и управляемому коду в крупных проектах.</p><p>С другой стороны, языки C и C++ продолжают оставаться важными для системного программирования и создания высокопроизводительных приложений, что подтверждает их долгосрочную актуальность.</p><h2>Растущие звезды: Go и Rust</h2><p>В 2024 году Go и Rust привлекли еще больше внимания. Go активно используется для создания облачных приложений и микросервисов, тогда как Rust известен своей безопасностью и эффективностью в системном программировании.</p><p>Оба языка показывают, как новые технологии могут успешно решать современные задачи и постепенно занимать важное место в экосистеме разработчиков.</p><h2>Рекомендации по выбору языка</h2><p>Выбор языка программирования всегда зависит от конкретных целей.</p><p>Python будет лучшим выбором для тех, кто хочет углубиться в анализ данных или разработку на основе искусственного интеллекта.</p><p>JavaScript и TypeScript идеально подходят для веб-разработки, особенно если вам важна современная типизация.</p><p>Если вы планируете заниматься системным программированием или создавать высокопроизводительные приложения, обратите внимание на C, C++ или Rust.</p><h2>Важность владения несколькими языками</h2><p>Современные проекты часто требуют знания нескольких языков программирования.</p><p>Например, разработка веб-приложений может потребовать комбинации JavaScript, SQL и PHP. Поэтому важно не только осваивать один язык, но и расширять свои навыки, чтобы оставаться конкурентоспособным на рынке труда.</p><figure><img src="https://media.tproger.ru/user-uploads/98945/2024-09-02/ebaa61d6-ef76-4671-be24-decc8470369f.jpg" alt="" /></figure>]]></content:encoded>
    </item>
    <item>
      <title>Критическую уязвимость PHP использовали для взлома Тайваньского университета</title>
      <link>https://tproger.ru/news/kriticheskuyu-uyazvimost-php-ispolzovali-dlya-vzloma-tajvanskogo-universiteta</link>
      <comments>https://tproger.ru/news/kriticheskuyu-uyazvimost-php-ispolzovali-dlya-vzloma-tajvanskogo-universiteta?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Булат Яббаров]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/kriticheskuyu-uyazvimost-php-ispolzovali-dlya-vzloma-tajvanskogo-universiteta</guid>
      <description><![CDATA[<p>Злоумышленники использовали критическую уязвимость в PHP (CVE-2024-4577) для взлома Тайваньского университета, внедрив бэкдор Msupedge. Эта уязвимость позволяет удаленно выполнять код на сервере, обходя защитные механизмы. </p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/kriticheskuyu-uyazvimost-php-ispolzovali-dlya-vzloma-tajvanskogo-universiteta">Критическую уязвимость PHP использовали для взлома Тайваньского университета</a>»</p>]]></description>
      <category><![CDATA[Интернет]]></category>
      <category><![CDATA[PHP]]></category>
      <category><![CDATA[Хакеры]]></category>
      <category><![CDATA[Взлом]]></category>
      <category><![CDATA[Уязвимость]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 21 Aug 2024 11:25:32 GMT</pubDate>
      <content:encoded><![CDATA[<p>Недавно в одном из университетов Тайваня произошла серьезная кибератака, в ходе которой злоумышленники использовали уязвимость в PHP.</p><p>Эта уязвимость (CVE-2024-4577) позволяет удаленно выполнять код на сервере, что и привело к внедрению бэкдора под названием Msupedge.</p><h2>Как работает Msupedge?</h2><p><b>Msupedge</b> — это вредоносная программа, которая устанавливается на компьютер и связывается с командным сервером через DNS-запросы.</p><p>Программа маскирует свои команды под обычные интернет-запросы, что делает её трудной для обнаружения. Хакеры могут использовать инструмент для выполнения различных команд, например, загрузки файлов или запуска процессов, всё это незаметно для пользователя.</p><h2>В чем суть уязвимости?</h2><p>Уязвимость в PHP возникает из-за ошибки в обработке входящих данных. Это позволяет хакерам отправить на сервер специально созданный запрос, который сервер принимает как команду для выполнения.</p><p>Таким образом, злоумышленники могут внедрить в систему вредоносный код и запустить его, обходя обычные механизмы защиты.</p><h2>Что делать?</h2><p>Если вы используете PHP на своих серверах, важно немедленно обновить его до последней версии и следить за новыми обновлениями безопасности.</p><p>Уязвимости, подобные этой, могут стать дверью для злоумышленников в вашу систему.</p>]]></content:encoded>
    </item>
    <item>
      <title>Почему 20 лет все говорят, что PHP умирает, а он жив</title>
      <link>https://tproger.ru/articles/pochemu-20-let-vse-govoryat--chto-php-umiraet--a-on-zhiv-250384</link>
      <comments>https://tproger.ru/articles/pochemu-20-let-vse-govoryat--chto-php-umiraet--a-on-zhiv-250384?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Александр Сельдемиров]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/pochemu-20-let-vse-govoryat--chto-php-umiraet--a-on-zhiv-250384</guid>
      <description><![CDATA[<p>Как 20 лет назад говорили, что скоро PHP умрет, так говорят и до сих пор. Тем не менее, на нем по прежнему работает около 75% веб-сайтов в мире. Ни одна альтернативная технология, а их за эти годы было очень много, не добилась даже сравнимой популярности.
</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/pochemu-20-let-vse-govoryat--chto-php-umiraet--a-on-zhiv-250384">Почему 20 лет все говорят, что PHP умирает, а он жив</a>»</p>]]></description>
      <category><![CDATA[PHP]]></category>
      <category><![CDATA[Языки программирования]]></category>
      <category><![CDATA[Веб-разработка]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 13 May 2024 13:00:38 GMT</pubDate>
      <content:encoded><![CDATA[<p>Мой коллега, Альберт Степанцев, тимлид и партнёр ITQuick, уже 20 лет работающий с PHP, рассказал, почему этому языку постоянно пророчат скорое забвение, но оно так и не приходит.</p><p>Как 20 лет назад говорили, что скоро PHP умрет, так говорят и до сих пор. Тем не менее, на нём по прежнему <a href="https://w3techs.com/technologies/details/pl-php">работает</a> около 75% веб-сайтов в мире. Ни одна альтернативная технология — а их за эти годы было очень много — не добилась даже сравнимой популярности.</p><p>К примеру, когда появилась Node.js, многие ликовали: «О, сейчас мы, наконец, сможем писать на одном языке и бэк, и фронт!». Выходит миллион статей на Хабре, но через пару лет хайп затухает, а PHP как работал, так и работает. На нём продолжают создавать проекты, причём и достаточно сложные. PHP <a href="https://www.jetbrains.com/lp/devecosystem-2021/php/#PHP_what-types-of-software-do-you-develop-with-php">используют</a> для разработки утилит, в области хранения данных, в разработке ПО, финтехе и машинном обучении. Это действительно уникальная в своей стабильности технология, но почему?</p><h2>Откуда взялись предубеждения насчёт PHP</h2><p>PHP очень удобно хейтить. Однако все предубеждения обусловлены стереотипами и заблуждениями. Часто люди считают, что PHP — это простой язык программирования, предназначенный исключительно для новичков, которым стоит переходить на более сложные языки в дальнейшем. Однако PHP обладает целым рядом уникальных особенностей и является мощным инструментом для разработки различных проектов.</p><p>PHP предлагает простую синтаксическую структуру, что делает его отличным выбором для новичков, позволяя быстро приступить к написанию кода и созданию функциональных веб-приложений. Это не означает, что PHP ограничивается только начальным уровнем — на самом деле, с его помощью можно создавать сложные и масштабируемые приложения. Он обладает развитой экосистемой инструментов и фреймворков, позволяющих реализовывать различные проекты, включая крупные системы управления, аналитики и прогнозирования.</p><p>Уникальная особенность PHP — последовательное изучение. Например, чтобы студентам на Java написать «2+2», для начала надо написать класс. Чтобы написать класс, нужно ввести это понятие — объяснить, что такое классы и объектно-ориентированное программирование (ООП). Получается непоследовательная кривая обучения: чтобы понять простые вещи, придется изучить сложное. Методически это плохо.</p><p>В то же время на PHP, чтобы написать «2+2», я буквально пишу «2+2». Принцип «Easy to learn — hard to master» — одно из ключевых преимуществ PHP. Возможность быстрого изучения позволяет быстро войти в процесс разработки, а богатая функциональность и гибкость языка открывают широкие возможности для реализации сложных задач. Исторически PHP действительно начинался как легковесный инструмент для создания домашних страниц, но с течением времени он вырос во взрослый и многофункциональный инструмент для веб-разработки.</p><p>Например, мы создали огромную систему оптовой торговли автозапчастями полностью на PHP. Она включает управление складом, прогнозирование товарных запасов, управление продажами и так далее. На нём же мы делали систему прогнозирования морских перевозок, которая позволяет владельцу судов построить модель работы на год вперед — спроектировать маршруты, точки загрузки и разгрузки, и рассчитать потенциальную прибыль.</p><h2>PHP и Go</h2><p>Go, разработанный внутри Google, изначально позиционируется как язык для создания быстрых и надёжных микросервисов, а также для работы с распределёнными системами. Он обладает отличным набором инструментов и высокой производительностью, что делает его привлекательным выбором для определённых задач. Однако, PHP и Go имеют разные философии и набор возможностей, поэтому не стоит рассматривать их как прямые замены друг другу.</p><p>В России почему-то многие считают, что Go станет заменой PHP. Это временное заблуждение, которое обязательно пройдёт, потому что языки абсолютно разные. Важно помнить, что каждый язык программирования имеет свои сильные стороны и области применения. Ключевым здесь является выбор подходящего инструмента для конкретной задачи и проекта, а не сравнение их как абсолютных замен. Разнообразие языков программирования дает возможность выбирать наиболее подходящий инструмент для достижения поставленных целей. Но у меня создаётся ощущение, что в Go идут те, кто не осилил PHP.</p><p>По сути, у каждой IT-технологии есть свой жизненный цикл. Принято считать, что в среднем он длится порядка пяти лет — от возникновения до спада хайпа и выхода на стабильный интерес. То есть появилась новинка, ею заинтересовался весь рынок, но в конце концов пользуются ей только те, кому она реально нужна. Но PHP уже больше 20 лет имеет очень широкое применение. Значит, он проходит несколько жизненных циклов?</p><h2>Почему PHP не теряет актуальности</h2><p>PHP продолжает привлекать интерес программистов и оставаться популярным благодаря своему развитию и способности адаптироваться к изменяющимся требованиям рынка. За свою долгую историю язык пережил несколько значительных революций, каждая из которых привнесла в него новые возможности и перезапустила его жизненный цикл.</p><p>Например, переход PHP с четвёртой версии на пятую. В пятой версии появилось полноценное объектно-ориентированное программирование (ООП). Затем революционная версия 5.4 позволила коллективную работу на PHP — появились неймспейсы и пакетный менеджер. Вместо языка персональных страничек он стал мощным инструментом для коллективной работы. Это буквально все перевернуло. Появилась возможность собрать 10-20 программистов и работать над одним проектом, не мешая друг другу.</p><p>Седьмая версия — это революция производительности. Дмитрий Стогов из Core team PHP оптимизировал производительность настолько, что язык стал новым движком. Поэтому седьмую версию долгое время называли PHP Next Generation или Next Gen. С ней он стал не только самым распространенным языком бэкенда, но еще и самым быстрым.</p><p>Каждая революция перезапускала жизненный цикл PHP как технологии. Мы получали абсолютно новый язык. Однако, он остаётся актуальным и конкурентоспособным благодаря сбалансированному подходу к развитию.</p><p>Этот баланс выражается в возможности выбора между одним стандартом и множеством разнообразных решений. PHP обладает активным сообществом разработчиков, где можно найти несколько основных популярных фреймворков, при этом сохраняя возможность начать что-то собственное без лишних ограничений. Строгие требования к качеству кода и открытый процесс разработки новых версий позволяют PHP оставаться устойчивым и привлекательным для программистов.</p><p>Например, Ruby как язык программирования имеет свои уникальные особенности и красоту, но его судьба была в значительной степени связана с популярностью фреймворка Ruby on Rails. Многие программисты использовали его как основной инструмент для создания веб-приложений. Однако с течением времени зависимость от одного фреймворка ограничила разнообразие и инновации в сообществе Ruby. Новые идеи не могли достичь широкого распространения, и разнообразие в экосистеме оставалось недостаточным.</p><p>С другой стороны, JavaScript является примером языка программирования, где существует огромное количество фреймворков и библиотек. Это может создавать сложности для начинающих разработчиков. Быстрая смена технологий и постоянное появление новых инструментов делает работу на JavaScript вызовом даже для опытных специалистов. В такой среде важно уметь следить за актуальными тенденциями, постоянно обновлять свои знания и умения, чтобы успешно работать с этим языком.</p><p>PHP же умело соблюдает баланс между стабильностью и разнообразием. В сообществе PHP существует несколько основных «парков» с отличающимися подходами, но в целом схожими по духу. Это обеспечивает разнообразие выбора фреймворков и библиотек для разработчиков, позволяя каждому найти оптимальное решение для своих задач. Самостоятельное начало работы над проектом приветствуется, однако существуют строгие стандарты кодирования, и плохое качество кода не находит восприятия в сообществе.</p><p>PHP оставляет простор для индивидуальных творческих подходов к разработке, при этом устанавливая высокие стандарты и не допуская низкокачественного кода. Регулярные выпуски новых версий PHP проводятся по чёткому графику с участием сообщества: любой желающий может принять участие в обсуждении и голосовании за функции, которые будут включены в следующую версию языка. Этот открытый процесс позволяет всем участникам сообщества видеть и влиять на будущее PHP.</p><p>PHP не остаётся в прошлом, постоянно адаптируясь к текущим тенденциям и заимствуя интересные идеи из других языков программирования. Он активно развивается, сохраняя баланс между сохранением традиций и принятием инноваций, что позволяет ему оставаться актуальным и конкурентоспособным.</p>]]></content:encoded>
    </item>
    <item>
      <title>PHP не умирает. И доказательство тому — нехватка PHP-программистов на рынке и высокие зарплаты</title>
      <link>https://tproger.ru/articles/php-ne-umiraet--i-dokazatelstvo-tomu---nehvatka-php-programmistov-na-rynke-i-vysokie-zarplaty</link>
      <comments>https://tproger.ru/articles/php-ne-umiraet--i-dokazatelstvo-tomu---nehvatka-php-programmistov-na-rynke-i-vysokie-zarplaty?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Евгения Луценко]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/php-ne-umiraet--i-dokazatelstvo-tomu---nehvatka-php-programmistov-na-rynke-i-vysokie-zarplaty</guid>
      <description><![CDATA[<p>В этой статье расскажем, сколько зарабатывают PHP-разработчики, и как на это влияет низкая конкуренция.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/php-ne-umiraet--i-dokazatelstvo-tomu---nehvatka-php-programmistov-na-rynke-i-vysokie-zarplaty">PHP не умирает. И доказательство тому — нехватка PHP-программистов на рынке и высокие зарплаты</a>»</p>]]></description>
      <category><![CDATA[PHP]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 03 Apr 2024 12:50:01 GMT</pubDate>
      <content:encoded><![CDATA[<p>В последнее время на слуху несколько популярных языков программирования: Python, C#, JavaScript. Из-за этого кажется, что другие языки не так востребованы на рынке и изучать их нет смысла. На самом деле, это не так.</p><p>Меня зовут Евгения Луценко, я HR-специалист в хостинг-провайдере SpaceWeb. В нашей компании уже больше 10 лет бэкенд пишут на PHP, и мы постоянно нанимаем PHP-разработчиков. В статье расскажу, какая сейчас ситуация на рынке PHP-программистов, какие у них зарплаты, и что ожидать в будущем. А мой коллега Виталий Киреев, руководитель разработки SpaceWeb, поделится, есть ли перспективы у языка PHP, и стоит ли изучать его сейчас.</p><h2>Контекст: какие проекты поддерживаются на PHP, и актуален ли язык</h2><p>Существует миф, что PHP медленно умирает. На самом деле это не так. Разработчики продолжают выпускать новые версии, добавлять фичи и строить комьюнити — например, в конце 2023 года вышла версия PHP 8.3. Помимо этого, в PHP есть много функциональных фреймворков. Одни из популярных — Laravel и Yii. Они тоже постоянно развиваются и соответствуют всем стандартам программирования, в том числе по потоковой передаче данных и безопасности.</p><p>На PHP есть не только легаси проекты. Многие разработчики продолжают создавать и развивать веб-сервисы на этом языке. Самый известный пример — ВКонтакте. Как правило, PHP-проекты существуют десятки лет — их развивают компании, которые стабильно растут. А это значит, что PHP-программисты будут востребованы еще очень долго.</p><h2>Ситуация на рынке PHP-программистов сейчас</h2><p>Если коротко, на рынке ощущается острая нехватка PHP-программистов последние 3–5 лет. Но многое зависит от грейда.</p><h3>Junior</h3><p>Количество вакансий на конец марта — 110. Опыт не требуется.</p><p>Здесь ситуация двоякая. Обычно джуны — это программисты, которые понимают, как создавать сайты на CMS, знают ООП и неплохо пишут на PHP. Но для работы над реальным проектом этого мало. Большинство компаний используют фреймворки, которые обязательно нужно понимать. Но не так много джунов на рынке их знает, а значит и компании не так активно набирают начинающих специалистов.</p><p>С другой стороны, крупным компаниям выгодно брать новичков «на вырост» и помогать прокачивать скиллы в процессе, потому что найти мидл PHP-разработчика не так просто.</p><h3>Middle</h3><p>Количество вакансий на конец марта — 900. Нужен опыт 1–3 года.</p><p>Самый востребованный грейд в PHP. Джунов на рынок приходит не так много, а значит и в мидлов вырастает тоже малое количество программистов. Те, кто уже опытный, остаются в компаниях надолго.</p><p>Наибольшая ценность в программистах этого грейда — знание фреймворков, используемых в проекте. Одни из популярных — Laravel, Yii, Symfony.</p><h3>Senior</h3><p>Количество вакансий на конец марта — 850. Нужен опыт более 3 лет.</p><p>Сеньоров на рынке достаточно. Но проблема в том, что очень опытный PHP-программист нужен не в каждый проект. Поскольку в PHP есть функциональные фреймворки, нет необходимости создавать сервис с нуля или делать серьезную доработку фреймворков. Просто потому что текущих средств и обновлений достаточно.</p><h2>Как изменились зарплаты PHP-разработчиков</h2><p>Зарплаты у разработчиков подскочили по всему рынку еще в 2020 году, когда началась пандемия — по разным оценкам, рост <a href="https://www.forbes.ru/karera-i-svoy-biznes/426519-idet-zhestkiy-hanting-pochemu-v-rossii-rezko-vyrosli-spros-na-it">составлял</a> от 30 до 80%. Позже ситуация стабилизировалась, рынок зарплат вернулся в сторону работодателя.</p><p>Однако баланса на рынке PHP-программистов не случилось — здесь по-прежнему было мало мидлов, и нехватка специалистов ощущалась остро. Из-за этого рост зарплат у PHP-разработчиков в 2021-2022 годах был сильнее, чем в Python и C#.</p><p>По <a href="https://habr.com/ru/companies/habr_career/articles/719730/">данным</a> «Хабр Карьеры», зарплаты в PHP в этом промежутке выросли так:</p><ul><li>У джунов +20% — с 45 000 ₽ до 60 000 ₽;</li><li>У мидлов +14% — со 100 000 ₽ до 140 000 ₽;<br /></li><li>У сеньоров +8% — со 160 000 ₽ до 233 000 ₽;<br /></li><li>У лидов +4%— со 192 000 ₽ до 260 000 ₽.<br /></li></ul><figure><img src="https://media.tproger.ru/user-uploads/99850/2024-04-02/21e0cc7a-74c2-47aa-8aa8-6f5ca88891ff.png" alt="" /></figure><p>Ощутимее всего рост был у грейда мидл. За тот же промежуток 2021–2022 гг. у Python-разработчиков уровня мидл зарплата изменилась на +7%, а у C#-разработчиков — на 11%.</p><p>В 2023 году динамика зарплат в PHP сохранялась примерно на том же уровне. На «Хабр Карьере» проводили <a href="https://habr.com/ru/specials/790600/">исследование</a> медианных зарплат IT-специалистов во второй половине 2023 года. В PHP медианная зарплата составляет 200 000 ₽, а динамика между 1 и 2 полугодием 2023 — 10%.</p><figure><img src="https://media.tproger.ru/user-uploads/99850/2024-04-02/8c7500c9-a744-4ac6-84b7-82f691a17278.png" alt="" /></figure><p>За 3 месяца 2024 года обновленной статистики по зарплатам PHP-разработчиков нет. Мы в SpaceWeb придерживаемся мнения, что уровень зарплаты продолжит планомерно расти теми же темпами, как в 2021–2023 годах. Однако если произойдут события, которые снова заставят оставшихся разработчиков мигрировать в другие страны, то ситуация изменится. Будет еще больший дефицит PHP-разработчиков, а значит и вынужденный подъем зарплат для переманивания ценных кадров.</p><h2>Что будет дальше с рынком PHP-разработчиков в России</h2><p>Спрос на PHP-программистов будет только расти — новичков в сфере мало, соответственно и крепких мидлов тоже. При этом для кандидатов среда будет менее конкурентной, чем, например, в Python. И это преимущество для тех, кто только начинает развиваться в PHP.</p><p><b>Стоит ли сейчас начинать изучать PHP новичку? </b>Вопрос неоднозначный:</p><blockquote>«Если вы выбираете свой первый язык программирования, стоит отдать предпочтение более академичным вариантам — C#, Swift, Kotlin, Java. Эти языки максимально соответствуют парадигме объектно-ориентированного программирования. И если вы будете знать один из них, вам будет гораздо проще освоить любой другой язык программирования. <br /><br />Однако если вы хотите развиваться в веб-технологиях и не смотрите на разработку, например, мобильных приложений, тогда PHP — это отличный вариант. Да, он не будет так прост для изучения, как Python. Но вам и не придется конкурировать с сотней джунов, а найти стажировку и работу будет проще. Чтобы получить преимущество на рынке, сразу погружайтесь в популярные фреймворки PHP — это поможет развиваться в профессии быстрее».</blockquote>]]></content:encoded>
    </item>
    <item>
      <title>Платформа для работы с исходным кодом GitVerse получила масштабное обновление</title>
      <link>https://tproger.ru/articles/platforma-dlya-raboty-s-ishodnym-kodom-gitverse-poluchila-maswtabnoe-obnovlenie-erid-ljn8kxjg3</link>
      <comments>https://tproger.ru/articles/platforma-dlya-raboty-s-ishodnym-kodom-gitverse-poluchila-maswtabnoe-obnovlenie-erid-ljn8kxjg3?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Ирина Тюльпакова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/platforma-dlya-raboty-s-ishodnym-kodom-gitverse-poluchila-maswtabnoe-obnovlenie-erid-ljn8kxjg3</guid>
      <description><![CDATA[<p>На платформе доступны новые инструменты, ускоряющие разработку, реализован чат в GigaCode, а пользоваться GitVerse теперь может малый и средний бизнес.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/platforma-dlya-raboty-s-ishodnym-kodom-gitverse-poluchila-maswtabnoe-obnovlenie-erid-ljn8kxjg3">Платформа для работы с исходным кодом GitVerse получила масштабное обновление</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[Open Source]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Git]]></category>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[JSON]]></category>
      <category><![CDATA[Ruby]]></category>
      <category><![CDATA[PHP]]></category>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[CSS]]></category>
      <category><![CDATA[Рефакторинг]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Советы]]></category>
      <category><![CDATA[HTML]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[Rust]]></category>
      <category><![CDATA[HR]]></category>
      <category><![CDATA[Сервисы]]></category>
      <category><![CDATA[PyCharm]]></category>
      <category><![CDATA[Мессенджер]]></category>
      <category><![CDATA[ARM]]></category>
      <category><![CDATA[Сбер]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[Фулстек-разработка: полный цикл]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 29 Mar 2024 16:20:02 GMT</pubDate>
      <content:encoded><![CDATA[<p>Разработчик платформы СберТех (дочерняя компания Сбера) внес десятки улучшений в базовую функциональность платформы для работы с исходным кодом <a href="https://gitverse.ru/promo/announcement-conference?utm_source=sm_tproger&amp;utm_medium=cpm&amp;utm_campaign=sm_202401033103_media_march_2024_rk528559gr6134&amp;utm_content=article&amp;utm_term=event">GitVerse</a> и представил ее новые возможности, которые помогают ускорить и упростить разработку. Об этом команда платформы рассказала на онлайн-презентации «GitVerse: открой вселенную кода».</p><h2>CI/CD-инструменты</h2><p>CI/CD-инструменты позволят автоматизировать сборку исходного кода и процессы поставки. Разработчики теперь могут воспользоваться уже написанными скриптами сборки, в один клик перенося свои проекты с Git-репозиториев. Технология оповещения о новых событиях на сервере (вебхуки) позволяет реализовать еще больше сценариев автоматизации. По событиям в GitVerse можно вызвать через API сторонние сервисы. Например, при определенных событиях в репозитории можно запустить сторонний сборочный конвейер или отправить уведомление в мессенджер.</p><h2>Новые функции персонального AI-ассистента разработчика GigaCode</h2><p>Теперь AI-ассистент поможет разработчику решать задачи, связанные с кодом, в окне чата непосредственно в среде разработки. Сервис чата также доступен и в GitVerse, где при просмотре репозитория можно получить объяснение, что делает та или иная часть кода, а также советы по его улучшению. Список языков программирования, которые поддерживает GigaCode, пополнил Ruby, а также стала доступна генерация текстовых данных в формате JSON. На сегодняшний день AI-ассистент поддерживает уже более 15 популярных языков программирования и устанавливается как плагин в привычные среды разработки, включая IDEA, PyCharm, VSCode, Jupyter.</p><h2>Функциональность для организаций</h2><p>Теперь разработка на GitVerse доступна не только индивидуальным разработчикам, но и малым и средним предприятиям. Компании могут организовать совместную работу команды и управлять доступами к своим репозиториям.</p><blockquote>При разработке новой функциональности мы учитываем пожелания пользователей, добавляем необходимые инструменты, чтобы они могли вести разработку еще проще и быстрее. С каждым релизом платформа будет становиться все более удобной и пополняться новыми популярными репозиториями, open source-версиями продуктов и инструментами для эффективной разработки. Будущее разработки мы видим в создании удобной среды по принципу единого окна, в которой все члены команды могут работать на своем этапе производственного процесса, заказывать облачную инфраструктуру и общаться. На всех этапах разработки партнерскую роль будет занимать AI: помогать писать код, советовать, как сконфигурировать стенд, готовить документацию, подсказывать шаги по CI/CD-конвейеру</blockquote><p>Также на мероприятии представили дорожную карту развития платформы, согласно которой в этом году появится еще больше полезной функциональности для разработчиков:</p><ul><li>новые инструменты для управления проектами, позволяющие удобно организовывать рабочие процессы;</li><li>интегрированная среда разработки позволит разворачивать полностью настроенные инструменты разработки в облаке. Функциональность будет доступна прямо из браузера: разработчик сможет легко и быстро открыть любой репозиторий GitVerse в среде разработки;</li><li>новые функции GigaCode: генерация тестов, автоматическое создание документации и умный рефакторинг. Число языков, которые поддерживает GigaCode, пополнят PHP, HTML, CSS, Markdown и Rust; <b> </b></li><li>инструменты для безопасной разработки (оркестрация CI/CD, статический анализатор, управление секретами и безопасность зависимостей);</li><li>удобный и безопасный вход через популярные сервисы идентификации личности, а также мобильная версия платформы.</li></ul><p><i>Реклама Реклама АО “Сбертех” ИНН 7736632467, </i> <i>LjN8KXJG3</i></p>]]></content:encoded>
    </item>
    <item>
      <title>Вышел релиз Laravel 11, что нового?</title>
      <link>https://tproger.ru/news/vywel-reliz-laravel-11--chto-novogo-</link>
      <comments>https://tproger.ru/news/vywel-reliz-laravel-11--chto-novogo-?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[ihor]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/vywel-reliz-laravel-11--chto-novogo-</guid>
      <description><![CDATA[<p>Laravel 11 представляет минимальную структуру приложения, по умолчанию использует SQLite, реализует health routing, улучшает тестирование очередей, вводит новые команды Artisan, добавляет транспорт для повторной отправки почты, интегрирует средство проверки запросов и многое другое.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/vywel-reliz-laravel-11--chto-novogo-">Вышел релиз Laravel 11, что нового?</a>»</p>]]></description>
      <category><![CDATA[PHP]]></category>
      <category><![CDATA[Laravel]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 13 Mar 2024 12:40:02 GMT</pubDate>
      <content:encoded><![CDATA[<p><b>Важно!</b> Для Laravel 11.x  требуется как минимум PHP 8.2.</p><h2>Минимальная структура приложения</h2><p>В Laravel 11 изменился принцип структуризации приложений. Фреймворк лучше оптимизировали именно с точки зрения производительности. Изменения не коснулись уже существующих приложений, так что рефакторить или переписывать их не нужно.</p><p>Новая структура приложения призвана обеспечить более компактное и современное взаимодействие, сохраняя при этом многие концепции, с которыми разработчики Laravel уже знакомы.</p><h4>Файл  bootstrap/app.php</h4><p>Теперь с помощью этого файла вы можете настроить маршрутизацию, middleware, сервис-провайдер, обработку исключений и многое другое.</p><p>Этот файл объединяет множество высокоуровневых настроек поведения, которые ранее были разбросаны по файловой структуре вашего приложения:</p><h4>Сервис-провайдеры</h4><p>Вместо структуры приложения Laravel по умолчанию, содержащей пять сервис-провайдеров, Laravel 11 включает только один AppServiceProvider.</p><p>Функциональность предыдущих сервис-провайдеров была включена в bootstrap/app.php, обрабатывается фреймворком автоматически или может быть размещена в AppServiceProvider вашего приложения.</p><h4>Маршрутизация api и broadcast</h4><p>Файлы api.php и channels.php  удалены по умолчанию, поскольку многим приложениям эти файлы не требуются.</p><p>Вместо этого их можно создать с помощью простых команд Artisan:</p><h4>Middleware</h4><p>Ранее новые приложения Laravel включали девять middleware, таких как аутентификация, CSRF-токенов и прочее.</p><p>В Laravel 11 функциональность middleware перенесена в сам фреймворк. По-видимому, разработчики решились на этот шаг, чтобы не раздувать само приложение — большая часть middleware всё равно не использовалась.</p><p>Настроить их поведение можно вызвав методы из файла bootstrap/app.php:</p><p>Поскольку все middleware легко настраиваются с помощью bootstrap/app.php, необходимость в отдельном классе HTTP "kernel" отпала.</p><h4>Планировщик</h4><p>Используя новый интерфейс планировщика, задачи теперь можно определять непосредственно в файле вашего приложения routes/console.php, устраняя необходимость в отдельном консольном классе "kernel".:</p><h4>Обработка исключений</h4><p>Подобно маршрутизации и middleware, обработку исключений теперь можно настроить из файла вашего приложения bootstrap/app.php вместо отдельного класса обработчика исключений, что сокращает общее количество файлов, включаемых в новое приложение Laravel:</p><h4>Контроллер по умолчанию</h4><p>Базовый контроллер, включенный в новые приложения Laravel, упростили. Он больше не расширяет внутренний класс контроллера Laravel, а функции AuthorizesRequests и ValidatesRequests были удалены, поскольку при желании они могут быть включены в отдельные контроллеры вашего приложения:</p><figure><img src="https://media.tproger.ru/user-uploads/10203/2024-03-12/12937231-b492-4346-965f-f7727ff649c7.png" alt="" /><figcaption>структура laraver приложения</figcaption></figure><h2>SQLite по умолчанию</h2><p>По умолчанию новые приложения Laravel используют <b>SQLite</b> для хранения базы данных, а также драйвер для сессий, кэша и очереди Laravel.</p><p>Кроме того, создание проекта с использованием composer create-project позволяет приступить к сборке вашего приложения сразу после создания нового, без необходимости устанавливать дополнительное программное обеспечение или заниматься миграцией баз данных.</p><figure><img src="https://media.tproger.ru/user-uploads/10203/2024-03-12/60337b5a-629e-49c0-a0db-c247136d70d0.png" alt="" /><figcaption>миграция таблиц SQLite</figcaption></figure><h2>Health-check Routing</h2><p>Новые приложения Laravel 11 включают health-check эндпоинт, с помощью которого сторонние службы мониторинга или такие сервисы, как Kubernetes, могут проверить работоспособность приложения.</p><p><b>эндпоинт по умолчанию:</b>  /up</p><p>Когда HTTP-запросы отправляются по этому маршруту, Laravel отправляет событие DiagnosingHealth, которое запускает дополнительные проверки. Это может быть проверка подключения к базе данных или работы кэша.</p><figure><img src="https://media.tproger.ru/user-uploads/10203/2024-03-12/f0c148c0-01cd-4f2f-ac59-e75cbd829672.png" alt="" /><figcaption>Ответ приложения на проверку статуса</figcaption></figure><h2>Изящная ротация ключа шифрования</h2><p>Поскольку Laravel шифрует все файлы cookie, включая файлы cookie сеанса вашего приложения, по сути, каждый запрос к приложению Laravel основан на шифровании. Однако из-за этого смена ключа шифрования приложения приведет к выходу всех пользователей из приложения.</p><p>Кроме того, расшифровка данных, которые были зашифрованы предыдущим ключом шифрования, становится невозможной.</p><p>Laravel 11 позволяет вам определять предыдущие ключи шифрования  приложения в виде списка, разделенного запятыми, с помощью переменной окружения APP_PREVIOUS_KEYS:</p><figure><img src="https://media.tproger.ru/user-uploads/10203/2024-03-12/ed51aeb9-0e94-4b50-9163-996b94c508ca.png" alt="" /><figcaption>Объявление ключей шифрования</figcaption></figure><p>При шифровании значений Laravel всегда будет использовать "текущий" ключ шифрования, который находится в переменной окружения APP_KEY.</p><p>При расшифровке значений Laravel сначала попробует текущий ключ. Если при расшифровке не удается использовать текущий ключ, Laravel будет пробовать все предыдущие ключи до тех пор, пока один из ключей не сможет расшифровать значение.</p><p>Такой подход к изящному дешифрованию позволяет пользователям продолжать использовать ваше приложение без сбоев, даже если ваш ключ шифрования изменился.</p><p>Для получения дополнительной информации о шифровании в Laravel ознакомьтесь с <a href="https://laravel.com/docs/11.x/encryption">документацией по шифрованию</a>.</p><h2>Тестирование взаимодействия с очередью</h2><p>Ранее попытка проверить, что задание, поставленное в очередь, было выпущено, удалено или завершилось ошибкой вручную, была громоздкой и требовала определения пользовательских подделок очереди и заглушек.</p><p>Однако в Laravel 11 вы можете легко протестировать эти взаимодействия с очередями, используя метод withFakeQueueInteractions:</p><figure><img src="https://media.tproger.ru/user-uploads/10203/2024-03-12/31ba24e8-0b8d-4675-b7f3-33b5d116a74f.png" alt="" /></figure><p>Помимо утверждения assertReleased, которое вы можете использовать для проверки того, было ли задание возвращено обратно в очередь, вы также можете использовать утверждения assertFailed или assertDeleted, чтобы определить, завершилось ли задание ошибкой или было удалено соответственно.</p><h2>Посекундный Rate Limiting</h2><p>Laravel теперь поддерживает ограничение скорости "в секунду" для всех ограничителей скорости, в том числе для HTTP-запросов и заданий в очереди. Ранее ограничители скорости в Laravel были ограничены степенью детализации "в минуту" :</p><h2>Laravel Prompts</h2><p><a href="https://laravel.com/docs/11.x/prompts">Laravel Prompts</a> - это PHP-пакет для добавления красивых и удобных форм в ваши приложения командной строки с функциями, подобными браузеру, включая placeholder и валидацию.</p><p>Laravel Prompts поддерживает проверку ввода с помощью замыканий:</p><p>Однако это может стать громоздким при работе со многими входными данными или сложными сценариями проверки.</p><p>Таким образом, в Laravel 11 вы можете использовать все возможности <a href="https://laravel.com/docs/11.x/validation">валидатора</a> Laravel при проверке вводимых запросов:</p><h2>Новые команды Artisan</h2><p>Добавлены новые команды Artisan, позволяющие быстро создавать классы, перечисления, интерфейсы и свойства:</p><h2>Laravel Reverb</h2><p><a href="https://reverb.laravel.com/">Laravel Reverb</a> обеспечивает невероятно быструю и масштабируемую связь через WebSocket в режиме реального времени непосредственно с вашим приложением Laravel и обеспечивает плавную интеграцию с существующим набором инструментов трансляции событий Laravel, таких как Laravel Echo.</p><p>Кроме того, <b>Reverb</b> поддерживает горизонтальное масштабирование с помощью возможностей Redis, что позволяет распределять трафик WebSocket по нескольким серверам Reverb, поддерживающим одно высоконагруженное приложение.</p><h2>Изменения в Моделях</h2><p>В Laravel 11 касты моделей теперь определяются как метод, а не как свойство.</p><p>Когда они определены как метод, мы можем делать и другие вещи. Например, вызывать другие методы непосредственно из кастов.  Это позволяет создавать упрощенные и плавные определения приведений, особенно при использовании кастов с аргументами:</p><h2>Функция once</h2><p>Вспомогательная функция once выполняет заданный обратный вызов и кэширует результат в памяти на время выполнения запроса.</p><p>Любые последующие вызовы функции once с тем же обратным вызовом вернут ранее кэшированный результат:</p><h2>Улучшена поддержка  MariaDB</h2><p>В предыдущих версиях Laravel вы могли использовать <b>MariaDB</b> через драйвер <b>MySQL</b> от <b>Laravel</b>. Однако в Laravel 11 теперь включен специальный драйвер <b>MariaDB</b>, который обеспечивает лучшие настройки по умолчанию для этой системы баз данных.</p><h2>Политика поддержки Laravel</h2><p>Для всех выпусков <b>Laravel</b> исправления ошибок предоставляются в течение 18 месяцев, а исправления безопасности - в течение 2 лет. Для всех дополнительных библиотек, включая <b>Lumen</b>, исправления ошибок предоставляются только в последнем основном выпуске.</p><figure><img src="https://media.tproger.ru/user-uploads/10203/2024-03-12/5cc703a7-e69f-4fd7-8690-7d145ceffdf9.png" alt="" /></figure><p>Источник: <a href="https://laravel.com/docs/11.x/releases#the-once-function">официальная документация Laravel</a></p>]]></content:encoded>
    </item>
    <item>
      <title>Анонимные и стрелочные функции: как использовать их вместо create_function в PHP 8</title>
      <link>https://tproger.ru/articles/anonimnye-i-strelochnye-funkcii--kak-ispolzovat-ih-vmesto-create-function-v-php-8</link>
      <comments>https://tproger.ru/articles/anonimnye-i-strelochnye-funkcii--kak-ispolzovat-ih-vmesto-create-function-v-php-8?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Виталий Киреев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/anonimnye-i-strelochnye-funkcii--kak-ispolzovat-ih-vmesto-create-function-v-php-8</guid>
      <description><![CDATA[<p>Рассказал, как работают анонимные и стрелочные функции в PHP. А также, на что заменить create_function при переходе с PHP 7.4 на PHP 8.
</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/anonimnye-i-strelochnye-funkcii--kak-ispolzovat-ih-vmesto-create-function-v-php-8">Анонимные и стрелочные функции: как использовать их вместо create_function в PHP 8</a>»</p>]]></description>
      <category><![CDATA[PHP]]></category>
      <category><![CDATA[Рефакторинг]]></category>
      <category><![CDATA[Legacy]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sun, 03 Mar 2024 12:50:02 GMT</pubDate>
      <content:encoded><![CDATA[<p>PHP выкатывает крупные обновления почти каждый год. В новых версиях появляются фичи, позволяющие увеличить производительность, а иногда частично меняется синтаксис. С выходом обновления две предыдущие версии PHP поддерживаются разработчиками еще три года — они продолжают устранять ошибки и улучшать безопасность. Когда время проходит, за старыми версиями PHP перестают следить, и некоторые функции полностью перестают работать. Если вовремя не обновить код в проекте, начнут появляться ошибки.</p><p>Меня зовут Виталий Киреев, я руководитель отдела исследований и разработок хостинг-провайдера SpaceWeb. В статье расскажу, как мы с нашей командой проводили рефакторинг кода при переходе с PHP 7.4 на PHP 8 и на что заменили одну из самых популярных функций — create_function.</p><p>Статья будет полезна и тем, кто только погружается в язык PHP. На примере реальной задачи по рефакторингу подробно разберу, как использовать анонимные и стрелочные функции. И объясню, чем они отличаются.</p><h2>Контекст: когда стало ясно, что нужен рефакторинг</h2><p>В части проектов SpaceWeb много legacy-кода. Мы поддерживаем проекты с версии PHP 5.6, которая появилась в 2014 году. С некоторой периодичностью переходим на новые версии PHP, постоянно обновляя код.</p><p>Оставлять прежний код в старых версиях PHP — плохая идея, потому что в какой-то момент он может перестать работать. А еще в них могут быть уязвимости в разрезе безопасности. Обновленные версии PHP обычно включают исправления ошибок и новые языковые возможности, которые могут улучшить производительность сайтов и приложений.</p><p>Когда вышла версия PHP 7.4, функция create_function, которая часто использовалась в нашем коде, стала deprecated, то есть перестала поддерживаться и работать. Из-за этого стали появляться ошибки в коде. Тогда и стало ясно, что нужен рефакторинг.</p><p>Подсветить часть проблем в коде нам помогли статические анализаторы кода — PHP Code Style Fixer и PHPstan. Но большую часть кода мы проверяли и обновляли вручную. В первую очередь нужно было придумать, на что заменить  популярную create_function. Сперва начали переход на анонимную функцию и замыкание. А спустя время внедрили и стрелочные функции, чтобы повысить читаемость кода и решить дополнительные задачи.</p><h2>Анонимные функции: как работают и как применить замыкание</h2><p>Особенность анонимных функций в том, что они задают область видимости. Внутри этой области будут работать только те переменные, которые определены там же. Если мы пропишем переменные за пределами функции, код будет выдавать ошибку.</p><p>На самом деле, create_function, которую мы обычно использовали до PHP 8 — это классический пример использования анонимной функции. Ее часто применяли для обработки данных в массиве. Функция содержит два аргумента — массив аргументов функции и сам код.</p><p>Когда эта функция стала deprecated в PHP 8, мы начали рефакторинг кода. Анонимные функции стали выглядеть так:</p><p>Но что, если нам потребуется вызвать эту функцию в нескольких разных местах? Тогда можно использовать замыкание. Это позволит вызывать функцию, используя ее как переменную.</p><p>А как быть, если нам нужно использовать переменные из окружения, и значения переменных  будут меняться в процессе выполнения программы? Здесь нам помогут стрелочные функции.</p><h2>Стрелочные функции: в чем отличие от анонимных и где лучше использовать</h2><p>Стрелочные функции позволяют избежать постоянного использования use, потому что в них есть автоматический захват внешних переменных. Это позволяет сделать код более лаконичным. Еще стрелочные функции лучше подходят для работы с большим количеством переменных или с частой сменой переменных в процессе.</p><p>В этом примере была задача отфильтровать контракты и соотнести их с нужным ИНН. Если бы решали ее с помощью анонимных функций, то под каждый ИНН пришлось бы писать отдельную функцию. А еще везде использовать use.</p><p>С помощью стрелочных функций получилось решить задачу быстрее, потому что они позволяют получить доступ ко всей области видимости. Это уменьшает время на дальнейшую поддержку кода, а доступ к области видимости выше можно получить без дополнительных функций.</p><p>Важно отметить, что у стрелочных функций есть ограничение. Они не могут быть слишком сложными, у них компактный синтаксис. Если нам нужно разместить многострочный код, мы используем анонимные функции.</p><h2>Итоги</h2><p>Для замены create_function в PHP 8 можно использовать как анонимные, так и стрелочные функции.</p><p>Анонимные функции в PHP позволяют создавать функции, не имеющие определенных имен. Они работают в заданной области видимости и только с теми переменными, которые определены там же. Преимущество анонимных функций — в них можно разместить многострочный код, в отличие от стрелочных.</p><p>Стрелочные функции позволяют избежать постоянного использования use и упростить синтаксис. А еще они лучше подходят для работы с большим количеством переменных или с частой сменой в процессе.</p>]]></content:encoded>
    </item>
    <item>
      <title>Почему PHP — лучший язык программирования для новичка</title>
      <link>https://tproger.ru/articles/pochemu-php---luchwij-yazyk-programmirovaniya-dlya-novichka</link>
      <comments>https://tproger.ru/articles/pochemu-php---luchwij-yazyk-programmirovaniya-dlya-novichka?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Дух айтишной эмо школы]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/pochemu-php---luchwij-yazyk-programmirovaniya-dlya-novichka</guid>
      <description><![CDATA[<p>IT-блогер ProBelDev рассказал о языке программирования PHP и почему он подходит для новичков. </p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/pochemu-php---luchwij-yazyk-programmirovaniya-dlya-novichka">Почему PHP — лучший язык программирования для новичка</a>»</p>]]></description>
      <category><![CDATA[Для начинающих]]></category>
      <category><![CDATA[Языки программирования]]></category>
      <category><![CDATA[PHP]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Фронтенд]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 31 Jan 2024 11:23:08 GMT</pubDate>
      <content:encoded><![CDATA[<p>IT-блогер ProBelDev рассказал о языке программирования PHP и почему он подходит для новичков. PHP нагляден и позволяет быстро увидеть результат своей работы в браузере.</p><p>В отличие от других языков, где результат виден только в консоли. PHP также позволяет быстро создавать простые сайты и применять знания сразу. На PHP больше вакансий, чем на других языках, и это является преимуществом для новичков при поиске работы.</p><p>PHP также экономически выгоден для бизнеса из-за доступности хостингов. Большие проекты, включая ВКонтакте, также используют PHP. PHP является классическим ООП-языком, что упрощает переход на другие языки.</p><p>Скорость работы PHP достаточна для большинства веб-приложений. Изучив HTML, CSS и PHP, можно создавать полноценные проекты, а добавив JavaScript, стать начинающим фуллстек-разработчиком.</p><p>PHP также обеспечивает больше возможностей для фриланса и предпринимательства. Все это делает PHP идеальным выбором для новичков в программировании.</p><p>Вот, о чём говорится в видео:</p><ol><li>PHP считается одним из лучших языков программирования для новичков из-за простоты обучения и поиска работы.</li><li>PHP более нагляден для начинающих, чем языки, результат работы которых виден только в консоли, такие как Python, C# или Java.</li><li>Уже после нескольких уроков по PHP новички могут создать простой сайт, в то время как в других языках они бы создавали консольные утилиты.</li><li>PHP позволяет быстро переходить к практике веб-разработки, что делает обучение интереснее и понятнее.</li><li>PHP подходит для разработки как маленьких, так и больших проектов, и многие крупные сайты начинались с PHP.</li><li>Изучение PHP облегчает переход на другие OOP-языки программирования, такие как Python, Java, C#.</li><li>JavaScript, хотя и популярен, представляет большую конкуренцию на рынке труда и имеет другие подходы в программировании, что может усложнить переход на back-end разработку.</li><li>PHP достаточно быстр для большинства приложений, и разница в скорости выполнения кода не всегда критична.</li><li>Знание PHP в сочетании с HTML, CSS и базовым JavaScript позволяет стать начинающим full-stack разработчиком и брать заказы на фрилансе.</li><li>PHP предлагает широкие возможности для начинающих разработчиков, включая легкий старт в фриланс и создание собственного бизнеса.</li></ol><p>Ниже — транскрибация ролика.</p><h2>Введение</h2><p>Сегодня хочу поговорить с тобой про язык программирования PHP, он же PHP. И почему я считаю его одним из лучших языков программирования для новичков. Какие есть две проблемы у начинающих разработчиков? В основном это сложность в обучении и сложность поиска первой работы. И PHP в этом плане выигрывает у многих других языков. И давайте поговорим об этом подробнее.</p><h2>Почему стоит выбрать PHP при входе во фронтенд</h2><p>И начнем давайте с сложности изучения. И я бы сказал, что PHP не то чтобы проще, он более нагляден. Почему, например, многие новички выбирают FrontEnd?</p><p>Потому что ты написал там в HTML какой-то div, сделал ему background, написал какой-то текст в нем, открыл в браузере там в Google Chrome и видишь готовый результат своей работы. Либо ты написал какую-нибудь функцию в JavaScript, нажал на кнопку, у тебя вылезло какое-нибудь окошко с формой.</p><p>А как происходит обучение, например, в том же Python, C-Sharp, Java? Оно происходит так, что ты постоянно пишешь какой-то код, и все, что ты видишь, это результат в консоли. И мне кажется, что новички, которые пришли учить программирование, не очень хотят заниматься написанием консольных утилит, потому что они в своей реальной жизни никогда не используют консольные утилиты. Только если они не начали учить там Linux и не начали погружаться в терминалы Linux.</p><p>В то же время PHP если посмотреть любые видеоуроки на ютубе, там практически с первых занятий тебе показывают, как вот начать писать какой-нибудь код и сразу продемонстрируют результат в браузере. То есть ты написал цикл for, и у тебя оп, и там 10 параграфов на сайте вывелось. И если там проработать 10 видеоуроков, порешать какие-то задачи по ним, то в PHP через 10 уроков вы уже можете написать какой-нибудь простенький сайт.</p><p>В то время как на Python, Java, C Sharp через 10 уроков вы сможете писать только какие-то, опять же, консольные утилиты. И, мне кажется, будет намного нагляднее и более интереснее делать вот все-таки сразу работаем с каким-то сайтом. Плюс также вы можете, например, когда вы еще изучали HTML, сделать какой-нибудь там, не знаю, сайт в свою портфолио и по мере изучения PHP добавлять туда какой-то PHP-код. И тем самым вы будете свои знания сразу же применять. И такой метод обучения относит на более поздний этап метод взаимодействия фронтенда и бэкенда. И да, я знаю, что и в Python, и в Java, и в C Sharp, и в Go тоже можно генерить HTML-странички.</p><p>Но это не такой стандартный метод обучения, как идет, например, это в PHP. То есть вы не найдете там где-нибудь уроки Python для начинающих, где вы будете сразу делать какой-то сайт. Вы будете также делать там какие-то консольные утилиты. И в итоге вам будет проще, веселее и понятней изучать то, к чему вы привыкли. То есть вы привыкли в своей жизни пользоваться веб-сайтами, там, новостными, интернет-магазинами, да, чем угодно. И вы точно такое же сразу делаете вот во время обучения.</p><h2>Легко ли найти работу разработчику на PHP</h2><p>И теперь перейдем к простоте поиска работ. Я не буду вам врать и говорить, что вы там сразу изучите ПХП и вас сразу возьмут на работу, но определенные бонусы это вам даст. Смотрите, что важно новичку, чтобы строиться на работу. Ему надо проходить много собеседований, и на одном из них вас рано или поздно возьмут на работу. Но если вы зайдете на Работа.by для Беларуси, Headhunter.ru для России, и посмотрите, какие там есть вакансии на тот же Python, Java, C Sharp, и потом посмотрите, какие есть вакансии на PHP, то количество вакансий на PHP будет просто в разы больше.</p><p>Раз в пять, а то и в десять. И при этом PHP будет, скорее всего, даже в тех городах, где нет работы на других языках программирования. То есть реально, вы можете прямо сейчас открыть сайт с вакансиями, ввести любой язык программирования, посмотреть, сколько там вакансий будет в поиске, и ввести PHP, посмотреть, сколько там будет вакансий в поиске.</p><h2>Умирает ли PHP</h2><p>И давайте разберемся, почему PHP, хоть там на всех сайтах пишут, что он умирает, теряет популярность, я это слышу, нам, наверное, лет уже 10. Но при этом количество вакансий на нем почему-то все еще больше. И давайте посмотрим, почему так. На самом деле бизнесу абсолютно наплевать на то, на каком языке программирования будет работать их сайт. А то, на что им не наплевать, это то, сколько она будет его платить за его обслуживание.</p><p>И, например, в Беларуси и в России, возможно, кстати, и в Европе, и в Америке, и в других местах, но не буду ручаться, есть специальные хостинги для сайтов на PHP. Который стоит там очень дешево, буквально 5 долларов в месяц платишь, и ты можешь размещать свой сайт. В то же самое время, для того, чтобы вам написать какой-то сайт на питоне, сишарпе, джаве, вам нужна виртуальная машина под линукс.</p><p>И такие сервера стоят просто намного дороже. Там будет у вас не 5 долларов в месяц, а 20. И то есть бизнесу будет непонятно, зачем им надо платить по 20 долларов в месяц, если они могут платить 5. По сути, для бизнеса и тот, и другой вариант небольшой, но просто им будет все равно непонятно, зачем.</p><p>Если можно, вот, нанять другого, какого-нибудь фрилансера, который сделает, и нам будут платить там 5 долларов в месяц. Но это если только говорить про какие-то маленькие сайты. Хотя, на самом деле, их большинство.</p><h2>Практическое применение языка</h2><p>То есть, если мы говорим про какую-нибудь парикмахерскую, ей не нужна там какая-то масштабная CRM-система, в которой они будут как-то учитывать клиентов. Им надо простенький сайтик, на котором можно будет делать онлайн-запись, и все. И, по сути, даже если заниматься фрилансом, то таких людей, которые ведут какой-то маленький свой бизнес, будет очень много. Вы можете даже по знакомым поспрашивать, у родителей поспрашивать. По-любому есть люди, которые ведут какой-то бизнес. И тем более эти бизнесы открываются и закрываются там постоянно. И то есть у вас никогда не будет проблем с каким-то заказом, если вы будете заниматься фрилансом. Ну, а если вы будете работать в найме, то в какой-нибудь веб-студии тоже никогда не будет проблем с заказами.</p><p>И этих веб-студий будет там десятки в любом городе. Но также на PHP пишут, кстати, и большие проекты. Например, тот же ВКонтакте. Изначально был написан на PHP. Как-то получается, что большие проекты тоже пишут на PHP. На самом деле, открою вам страшную тайну, но когда начинают какой-то новый проект, не смотрят по тому, какой там язык лучше или хуже подойдет, она чаще всего смотрит то, какие разработчики есть у компании.</p><p>То есть, если у нас есть 5 разработчиков на PHP, никто не решится писать на Java внезапно. Не, иногда так делают, конечно, но чаще всего берут именно тот язык программирования, к которому можно уже прям сесть и нафигачить сразу какой-то прототип. Плюс также многие большие проекты вырастали из каких-то маленьких. То есть они начали буквально с какого-нибудь интернет-магазина, потом разрослись, разрослись и стали каким-то маркетплейсом огромным.</p><p>То есть это прошли годы. И начинали просто с маленького интернет-магазина, написанного на PHP. Единственный конкурент по тому, сколько вакансий есть на рынке, это JavaScript. Но JavaScript проигрывает немного в другом ключе. Во-первых, JavaScript сейчас супер модный, и о нём кричат просто на каждом углу. Что типа, вот, иди по FrontEnd, изучай React, изучай Vue, и будешь там крутым специалистом.</p><h2>Конкуренция в PHP</h2><p>И я вот, перед записью этого видоса, просто там открыл первую попавшуюся вакансию на Junior JavaScript разработчик, и её просматривали 10 кандидатов. И открыл первую попавшуюся вакансию на Junior PHP разработчик, и её просматривали 2 человека. То есть, понятно, ну метрика, конечно, так себе, но понятно, что джаваскриптеров смотрят там в пять раз больше, чем на PHP.</p><p>И то есть у вас будет даже тупо больше конкуренции еще на этапе того, как вы отправите свое резюме.</p><h2>Что выбрать: PHP или JS</h2><p>И второй момент, где PHP выигрывает у джаваскрипта, это то, что это классический OOP-шный язык. То есть, изучив PHP один раз, поработав на нем, там, не знаю, года два в какой-то компании, и вы решите перейти на тот же Python, на тот же Java, на тот же C-Sharp. Вы посмотрите пару видосов по C-Sharp, и окажется, что тут все то же самое, что и было в PHP. Почему?</p><p>Потому что все архитектурные решения, все работы с OOP будут точно такими же, как у вас были в PHP. И вы посмотрите, и поймете, что тут оказывается все то же самое. И никакой проблемы перейти с одного языка программирования на другое нет. Вы там посидите, поковыряйтесь там неделю по вечерам и сможете полностью писать на том же C-Sharp, либо на том же Java.</p><p>А JavaScript с ее подходом, с асинхронным программированием, с callbacks, async-await — это другой принцип разработки программного обеспечения, который будет намного сложнее перенести. Это будет реально сделать, но это будет намного сложнее.</p><h2>Скорость работы кода на PHP</h2><p>Также многие говорят, что PHP работает намного медленнее, чем любой другой язык программирования. И в целом, да, так оно и есть.</p><p>C Sharp, Java, Go будут работать намного быстрее, чем PHP. Но тут такой момент, что любое современное бэкэнд-приложение работает либо с базой данных, либо с опеки сторонних сервисов. И вот это взаимодействие либо с базой данных, либо с другими сервисами будет намного дольше, прям в разы дольше, чем то, что вы взаимодействуете непосредственно в своем коде. То есть, грубо говоря, если вы делаете запрос в базу данных, то он будет занимать 120 миллисекунд, допустим, и уже нет особой разницы, ваша функция на PHP выполнится за 7 миллисекунд или за 5. То есть эти 2 миллисекунды не скажутся на каком-то финальном результате кардинально.</p><p>И то есть скорость самого PHP достаточно быстрая для того, чтобы делать на нем приложение. Единственное, где это может как-то повлиять, это когда у вас там на сайте уже приходят там миллионы людей в секунду, как, например, на тот же, не знаю, ВК, Яндекс, Озон или еще что-нибудь. И тогда это скажется только на том, насколько более мощные сервера вам нужны.</p><h2>Почему PHP выгоден</h2><p>И смотрите, если вы изучите HTML, CSS и JavaScript, вы можете делать только frontend для каких-то проектов. Если же вы изучите html, css и php, то вы сможете сделать полностью проект целиком. Да, он будет не такой там современный, то есть там нельзя будет без обновления страниц какие-то данные получать либо отправлять.</p><p>Но мы буквально к этому добавляем там чуть-чуть знаний по javascript, вам даже не надо его изучать весь, а надо изучить как я пользовался Аяксом и как выводить какие-то данные на сайт. И, по сути, в этот момент вы будете полностью готовым, начинающим фуллстек-разработчиком. И вы сможете на фрилансе выполнять абсолютно любые заказы на какие-нибудь простые сайты. И так постепенно, по мере необходимости, вы будете доучивать и HTML, и CSS, и PHP, и JavaScript. И в итоге у вас будет база расширяться просто по всем этим языкам программирования.</p><p>В то же время, например, если вы выбрали HTML, CSS и JavaScript, развивались только бы во фронтенде. И, в принципе, не могли бы брать какие-то заказы на фрилансе, которые необходимо делать в сайт целиком. И вообще, если вы пойдете по пути какого-нибудь фриланса, то вы можете вообще пойти в какой-нибудь свой бизнес начать делать.</p><p>То есть, нашли одного заказчика, второго, третьего, четвертого, вначале делайте сами заказы целиком, потом же нашли каких-то дополнительных людей, которые будут это делать вместе с вами. То есть, с фронтендом, если вы выберете только фронтенд, то такой вариант не прокатит. Потому что вам надо будет еще искать где-то бэкэндера уже сразу на первых этапах.</p><p>И, как мне кажется, PHP в качестве первого языка программирования подходит максимально идеально. То есть вы его можете более просто, более наглядно, более быстро изучить и понять вообще, что происходит во время работы сайта. Вы можете более быстро найти работу. Вы можете найти на нем фриланс очень просто.</p><h2>Минус PHP</h2><p>И тут одни плюсы. Единственный минус, что, скорее всего, у вас от знакомых, которые изучают какие-то другие иски программирования, будет там много шуток, и я их сам там наслушался, пока работал на PHP. А работал я на PHP лет 5, наверное. Я так точно не знаю.</p><p>Ну, прям много лет я работал на PHP. И в целом у меня не было такого момента, что я не мог на нем найти работу вообще. Или я мог в любой момент зайти на какой-нибудь фриланс.ру, и там по-любому я бы нашел себе какой-то заказ. Плюс я также на нем делал много сайтов, которые вот так вот чисто по знакомству мне попадались. Сделать там сайт-портфолио для художника, сделать сайт для кофейни, сделать сайт для мастера, который делает мебель на заказ. И так далее. Я уже там даже не помню, какие сайты делал еще. Ну, их было прям прилично.</p><p>И даже если вы начнете делать сначала фриланс, а потом пойдете искать работу, то вы сможете уже показать, что вот, эти сайты, которые я делал, они полностью готовы, и это будет вам огромным плюсом. На том же Python, или там Java, C Sharp, или на чем угодно, вы такие проекты сделать не сможете. Также вы не сможете их сделать, если вы выберете HTML, CSS и JavaScript.</p><p>Еще могу сказать, что я могу изучить JavaScript и делать на нем и front-end, и back-end. Но я хочу вас расстроить, это так не работает. По большому счету, знания языка это просто минимальные знания, которые нужны для того, чтобы писать, например, front-end или back-end.</p><p>Там есть намного более важные вещи. То есть, как думать, например, о безопасности, как работать с базой данных, если мы говорим про back-end. Как, например, строить архитектуру приложения, при этом она будет разная и на бэкэнде, и на фронтэнде. И то есть, по сути, если мы говорим изучение разработки на бэкэнде, либо изучение разработки на фронтэнде, то это совершенно разные знания нужны. И при этом вам изучить PHP, либо JavaScript, это будет просто минимум этих знаний, которые вам понадобятся.</p>]]></content:encoded>
    </item>
    <item>
      <title>PHP-демон в контейнере Kubernetes: как сделать асинхронную доставку сообщений</title>
      <link>https://tproger.ru/articles/demon-v-kontejnere-kak-my-realizovali-asinhronnuyu-dostavku-soobshhenij-polzovatelyam-hostinga</link>
      <comments>https://tproger.ru/articles/demon-v-kontejnere-kak-my-realizovali-asinhronnuyu-dostavku-soobshhenij-polzovatelyam-hostinga?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Виталий Киреев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/demon-v-kontejnere-kak-my-realizovali-asinhronnuyu-dostavku-soobshhenij-polzovatelyam-hostinga</guid>
      <description><![CDATA[<p>Рассказал, как с использованием PHP-демона в Kubernetes сделать так, чтобы сообщения доставлялись пользователям асинхронно и без лагов.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/demon-v-kontejnere-kak-my-realizovali-asinhronnuyu-dostavku-soobshhenij-polzovatelyam-hostinga">PHP-демон в контейнере Kubernetes: как сделать асинхронную доставку сообщений</a>»</p>]]></description>
      <category><![CDATA[PHP]]></category>
      <category><![CDATA[Kubernetes]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 08 Jan 2024 08:35:02 GMT</pubDate>
      <content:encoded><![CDATA[<p>Представьте, что вы владелец хостинга, где пользователи иногда создают бэкапы. Должен ли провайдер уведомить пользователя, когда все будет готово? Конечно. А сообщить, если в процессе что-то пойдет не так, и пользователю нужно будет прийти и принять решение? Тем более.</p><p>Задача веб-разработчика — сделать так, чтобы сообщения доставлялись пользователям с минимальной нагрузкой на систему и без временных лагов.</p><p>Меня зовут Виталий Киреев и я руководитель отдела исследований и разработок хостинг-провайдера SpaceWeb. Расскажу, как это реализовать.</p><h2>Как выглядит бизнес-процесс</h2><p>Вернемся к примеру из начала. Давайте поясню бизнес-процесс:</p><ol><li>В админ-панель хостинга входит пользователь.</li><li>Пользователь запускает какой-либо процесс (например, создание резервной копии файлов).</li><li>Система запускает скрипт, отслеживающий событие: успешное или неуспешное завершение процесса.</li><li>В случае наступления события, система присылает пользователю уведомление.</li></ol><p>Само собой, не все пользователи хотят сидеть и ждать, пока процесс не завершится. Им удобнее получить уведомление — например, пуш или СМС. Обычно для решения подобных задач используют cron. Вероятно, вы знаете принцип работы: вы создаете «расписание», по которому будет запускаться определенный серверный скрипт. В нашем случае он будет проверять, не закончился ли процесс создания бэкапа. Формально, такая технология будет рабочей, но с двумя существенными нюансами.</p><ol><li><b>Первый недостаток — большую часть времени скрипты будут работать вхолостую. </b>Расписание нельзя подстроить оптимально: пользователи будут создавать задачи неравномерно в течение суток. А значит, нам нужно запускать крон непрерывно —это лишняя нагрузка на сервер.</li><li><b>Второй недостаток — временной лаг. </b>С момента, когда скрипт уже запущен, до момента, когда он закончил работу и отключился, может проходить до 59 секунд — это обусловлено техническими особенностями технологии cron. Вроде и не много, но иногда пользователю неудобно ждать столько времени, особенно когда у тебя за минуту создается сам бэкап.</li></ol><p>Как оптимизировать процесс?</p><h2>Асинхронность и очереди</h2><p>Для решения подобной задачи хорошо работают брокеры — программы, которые работают с очередями. Как строится работа таких программ:</p><ol><li>Есть <b>очередь</b> — буфер в памяти, не ограниченный по количеству хранимых сообщений. Очередь пополняется и опустошается.</li><li><b>Паблишер (или продюсер)</b> — сторона, которая добавляет сообщения в очередь. Паблишеров может быть несколько.</li><li><b>Подписчики (или консьюмеры)</b> —сторона, которая берет сообщения из очереди и выполняет с ним какое-либо действие. Например, передает в СМС-шлюз — и так пользователь получает свое уведомление. Подписчиков тоже может быть несколько.</li></ol><p>Особенность программ-брокеров в том, что в момент, когда подписчик принимает сообщение из очереди, это сообщение удаляется из буфера. Тем самым освобождает место в памяти.Также исключаются ситуации, когда одно сообщение может забрать сразу несколько подписчиков — такое вполне может произойти, если вместо очередей использовать обычные базы данных.</p><p>Другое преимущество работы через брокера перед прямой работой с БД в данном кейсе — это скорость транзакций.</p><h2>RabbitMQ или Kafka?</h2><p>Стоит чуть подробнее рассказать про выбор технологий. Вообще брокеров десятки, но чаще всего применяют эти два из заголовка.</p><p>Лично мы в своем продукте используем RabbitMQ — отчасти потому, что наша инфраструктура уже содержала в себе необходимые библиотеки для работы с этим брокером. Но главный критерий — это способ доставки сообщений. В Rabbit это push-реквест, а в Кафке — pull-реквест.</p><p>В нашем случае было важно гарантированно доставить сообщение пользователю, который выполняет пассивную роль. Еще один критерий, почему мы выбрали Rabbit — его PHP-библиотека поддерживает обработку управляющих сигналов Unix, мы <a href="https://github.com/php-amqplib/php-amqplib#unix-signals">используем</a> их для мониторинга работы процесса.</p><p>Если дальше сравнивать технологии, у Kafka есть еще один недостаток: журнал хранения сообщений с определенным сроком жизни — нам такое не подходило. У нас пользователь может зайти в панель хоть через полгода — он все равно должен получить все уведомления.</p><h2>PHP-демон в контейнере Kubernetes</h2><p>Важная часть работы системы доставки сообщений — это механизм контроля ее работоспособности. Если упал сервис, который занимался постановкой сообщений в очередь и их распределением, связанные микросервисы не смогут обмениваться с ним данными. Соответственно, вся система рухнет, пользователи не получат уведомлений.</p><p>Как такая проблема решается «по классике»? Обычно инструментами crone или systemd. Но у них есть недостаток: если с самим брокером все в порядке, вы не узнаете о неполадках. А вместе с тем, если есть проблемы с соединением, например, с СМС-шлюзом, бизнес-логика выполняться не будет. В итоге процесс хоть и формально живой, а сообщения не ходят.</p><p>Поэтому мы сейчас думаем внедрить другое решение. Сегодня существует универсальный стандарт проверки, liveness probe. Скрипт проверяет соединение с базой, СМС-шлюзом, шлюзом push-уведомлений — то есть мониторит состояние всего процесса целиком.</p><p>PHP-демон в таком случае упаковывается в контейнер оркестратора, а он в свою очередь перезапускает демона, если скрипт по итогам проверки выявил проблемы. Утерянные соединения восстанавливаются.</p><p>На текущий момент решение содержит вариант проверки Docker Healthcheck — проверка запускается при отправке процессу управляющего сигнала Unix, который перехватывается и обрабатывается в PHP-демоне с помощь библиотеки php-amqplib и позволяет выполнять диагностику работоспособности внутри самого демона:</p><figure><img src="https://media.tproger.ru/user-uploads/93610/2023-12-06/9638a8f8-9bbf-4c44-9a82-9fd7e2fb683f.jpg" alt="" /></figure><figure><img src="https://media.tproger.ru/user-uploads/93610/2023-12-06/f6fa3637-0d27-4ccc-b607-f16b34f5107f.jpg" alt="" /></figure><p>Сам демон включает интерфейсы, необходимые для взаимодействия с RabbitMQ и с нашим кодом. Он выступает как middleware для всей системы.</p><h2>Что на выходе</h2><p>Такое решение отлично заменяет cron и его более современные аналоги. С точки зрения устойчивости системы получаем более безопасный вариант, так как непрерывный мониторинг работоспособности всей системы страхует ее от внезапных падений отдельных микросервисов и нарушения соединений между ними.</p><p>Уведомления отправляются без задержек, что было бы неизбежно при использовании перебора по крону: задержки составляли бы от одной до двух минут. Также мы не нагружаем сервер: в состоянии «покоя» демон практически не потребляет ресурсов.</p>]]></content:encoded>
    </item>
    <item>
      <title>Я выбираю PHP для веб-разработки. И вот почему</title>
      <link>https://tproger.ru/articles/ya-vybirayu-php-dlya-veb-razrabotki-i-vot-pochemu</link>
      <comments>https://tproger.ru/articles/ya-vybirayu-php-dlya-veb-razrabotki-i-vot-pochemu?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Filipp Shcherbanich]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/ya-vybirayu-php-dlya-veb-razrabotki-i-vot-pochemu</guid>
      <description><![CDATA[<p>Рассказали про преимущества PHP: про его гибкость, лёгкость интеграции, широкую поддержку сообщества и доступные инструменты для разработки.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/ya-vybirayu-php-dlya-veb-razrabotki-i-vot-pochemu">Я выбираю PHP для веб-разработки. И вот почему</a>»</p>]]></description>
      <category><![CDATA[PHP]]></category>
      <category><![CDATA[Бэкенд]]></category>
      <category><![CDATA[Языки программирования]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 28 Dec 2023 10:26:52 GMT</pubDate>
      <content:encoded><![CDATA[<p>В <a href="https://tproger.ru/articles/pochemu-php-sohranit-svoi-pozicii-kak-klyuchevoj-yazyk-dlya-bekenda-veb-prilozhenij-v-2024-godu">своей предыдущей статье</a> я рассказал, почему PHP не только не канет в лету, но и переживёт ещё не одну зиму, обязательно сохранив ключевую роль в веб-разработке на многие годы. На этот раз я хочу более детально расписать все те его уникальные преимущества, благодаря которым PHP остаётся популярным и актуальным при любых условиях, а именно его гибкость, лёгкость интеграции с различными системами, широкую поддержку сообщества и доступные инструменты для разработки. Поехали!</p><h2>Почему PHP: мои воспоминания о былом</h2><p>Когда я только начинал учиться программировать, меня всегда волновал один вопрос: как превратить написанный программный код, состоящий из циклов, функций, переменных и модулей, во что-то осязаемое? Как создать изо всего этого рабочее приложение – не только полезное для других людей, но при этом ещё и визуально привлекательное? Будучи олдом, я, как и многие студенты того времени, изучал основы программирования на Pascal и C++, и иногда мне казалось, что программирование не интереснее «Слова пастыря» по воскресеньям. Вместо реальных задач мы фокусировались на алгоритмах и математических вычислениях, и уже одно это вгоняло скуку и нелюбовь к предмету. Однако всё изменилось, когда я познакомился с веб-разработкой.</p><p>На одном из курсов нам было задано разработать интернет-магазин на выбранном нами языке программирования. На реализацию было выделено ни много ни мало – шесть месяцев. Именно тогда я впервые открыл для себя HTML (да-да, простейший язык разметки веб-страниц) и был удивлён, насколько легко с его помощью можно создавать что-то для браузера и сразу видеть результат своей работы. Это впечатляло, но я быстро понял, что с помощью одного только HTML реализовать сложную логику или динамику не получится. Так я познакомился с PHP — серверным языком программирования, который давал возможность оживить стандартные HTML-страницы, причём безо всяких сложных выкидонов. С его синтаксисом мне было комфортно: он напоминал C-подобные языки, а с ним я уже был знаком. Да и способ работы PHP мне очень понравился: для обработки запроса скрипт запускается, делает то, что должен сделать, а затем завершает свою работу, что очень сильно упрощает задачу по созданию серверной части приложения.</p><p>Реализация этого проекта стала для меня настоящим прорывом. Я столкнулся со множеством новых технологий, немного углубился в изучение JavaScript и JQuery для оживления клиентской части приложения, понял, как работают веб-серверы, и освоил основы сетевых технологий. Но именно PHP оказал на меня самое сильное впечатление и навсегда занял особое место в моём сердце. Он изменил моё восприятие бэкенд разработки, показав, что создание динамичных веб-приложений со сложной серверной логикой может быть интуитивно понятным и доступным занятием. Уверен, многие разработчики разделят со мной эти чувства.</p><p>PHP не просто упрощает процесс бэкенд разработки, но и открывает широкие возможности для творчества и инноваций. Гибкость и простота всегда делали PHP идеальным инструментом для тех, кто хочет создавать веб-приложения любой сложности – и именно они определили актуальность этого языка во все времена.</p><h2>Преимущества PHP</h2><p>Моя история – наглядный пример того, почему PHP был и остаётся удобным для веб-разработчиков языком. Теперь я распишу его преимущества ещё подробнее, и тогда вы точно станете его адептом.</p><ol><li>PHP имеет C-подобный синтаксис, который делает его изучение и усвоение лёгким для всех, кто уже знаком с языками программирования, подобными C (а таких людей действительно очень много). Он включает в себя знакомые структуры управления, такие как условные операторы и циклы, аналогичный формат объявления функций, использование фигурных скобок для определения блоков кода, и тд.;</li><li>PHP обладает завидной терпимостью. Терпимостью к ошибкам. Это делает PHP просто идеальным для новичков – а, впрочем, и не только. Его ключевой особенностью является то, что почти каждый скрипт «оживает» для обработки запроса, а затем преспокойно «умирает» сразу же по его выполнении (я не говорю про RoadRunner и подобные ему технологии: <a href="https://roadrunner.dev/docs/intro-about/current/en">там история, конечно, немного другая</a>). Такой подход значительно снижает риски, связанные с утечками памяти и многими другими узкими местами для других серверных ЯП. А потому PHP позволяет сосредоточиться на логике и функциональности программы, и постоянно держать в голове низкоуровневые аспекты управления ресурсами не надо;</li><li>PHP удобен для быстрой реализации веб-приложений, так как он не требует компиляции кода для запуска программы. Он относится к группе <a href="https://ru.wikipedia.org/wiki/%D0%98%D0%BD%D1%82%D0%B5%D1%80%D0%BF%D1%80%D0%B5%D1%82%D0%B8%D1%80%D1%83%D0%B5%D0%BC%D1%8B%D0%B9_%D1%8F%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F">интерпретируемых ЯП</a>, что суперсильно ускоряет разработку. Многие изменения в работе скриптов можно увидеть мгновенно: например, просто обновив страницу в браузере. Press F5!</li><li>Ещё один важный аспект PHP – это его возможности по работе с разными типами данных. С самого начала своего существования PHP не придерживался строгих правил типизации, что предоставляло разработчикам значительную свободу. В этом языке можно использовать переменные для хранения данных любого поддерживаемого типа, а при выполнении какой-либо операции с этой переменной, тип <a href="https://www.php.net/manual/ru/language.types.type-juggling.php">преобразовывается в необходимый для её осуществления</a>, если, конечно, это возможно. Но так как логика приведения типов не всегда очевидна для разработчиков, со временем появлялось все больше возможностей более строгой типизации. Например, в современных версиях PHP можно указать тип проперти, константы, аргументов функций, возвращаемых типов данных, а также существует возможность включения режима строгой типизации (через директиву <a href="https://www.php.net/manual/en/language.types.declarations.php#language.types.declarations.strict">declare(strict_types=1)</a>). Если строгая типизация активирована, PHP не будет пытаться автоматически преобразовывать типы, которые не соответствуют ожиданиям функции или метода. Вместо этого, язык выдаст ошибку, указывающую на несоответствие типов, а значит, использование strict_type поможет выявить ошибки еще на ранней стадии разработки проекта. Кстати, strict_type работает только в том файле, где он включён, поэтому можно постепенно включать эту функцию в проекте, не ломая старый функционал. Таким образом, PHP сочетает в себе и гибкость, когда нужно сделать что-то очень быстро, и строгость, актуальную для более серьёзных проектов, когда цена ошибки очень высока;</li><li>Заводя речь о типах данных, грех не вспомнить массивы, <a href="https://www.php.net/manual/ru/language.types.array.php">ведь в PHP они действительно заслуживают особого внимания</a>. Массив тут одновременно может функционировать и как простой динамический массив с числовыми индексами, и как ассоциативный массив (или хеш-таблица) со строковыми ключами, и как коллекция, и как вектор, и тд.. Таким образом в PHP легко закрываются многие потребности веб-разработки;</li><li>С PHP, программисты могут быстро и просто внедрять различные решения для отладки кода программы в процесс своей работы – например каждый, кто связан с этим ЯП слышал про популярнейший инструмент <a href="https://xdebug.org/">Xdebug</a>, который предоставляет обширные возможности для отслеживания ошибок и анализа выполнения кода. Ну а если лень использовать мощные инструменты, то на помощь всегда придёт var_dump. Думаю, что любой PHP-разработчик понимает, о чём я;</li><li>ООП в PHP обладает по-настоящему крутыми возможностями. Тут есть все: и абстрактные классы, и интерфейсы, и вопросы об их отличии на собеседованиях. Понятный механизм наследования, трейты, финальные классы или методы, readonly properties/classes и многое-многое другое… Перечислять долго, поэтому выскажусь просто: PHP крут. Почти как батончик «Финт»;</li><li>PHP по праву считается одним из самых производительных скриптовых языков программирования (особенно – в контексте веб-разработки). Его производительность ощутимо выросла на седьмой версии за счёт оптимизации интерпретатора Zend Engine: PHP получил более оптимальное управление памятью и существенное ускорение выполнения операций (в своё время об этом не говорил только ленивый). Внедрение <a href="https://php.watch/versions/8.0/JIT">JIT</a> компиляции в PHP 8 повысило производительность ещё выше, особенно это заметно в вычислительно-интенсивных задачах. Что ещё ускоряет PHP? Конечно же, <a href="https://www.php.net/manual/ru/intro.opcache.php">OpCache</a> – расширение, включённое в PHP начиная с версии PHP 5.5, которое делает язык ещё более быстрым за счёт кэширования предварительно скомпилированного байт-кода скриптов в памяти. Кстати, новые разработки в PHP, такие как <a href="https://github.com/openswoole">Swoole</a> и <a href="https://reactphp.org/">ReactPHP</a>, предоставляют возможности и для асинхронного программирования, что может значительно улучшить производительность многих приложений – особенно тех, которые имеют дело с частыми I/O операциями.</li></ol><h2>Уже хочу! А ещё плюсы будут?</h2><p>Бесконечно можно делать три вещи: смотреть на огонь, наблюдать, как работают другие и перечислять все плюсы PHP, их так много, что на одно только перечисление не хватит и десятка таких статей. Причём, не все преимущества ЯП определяются исключительно его функциональными возможностями: важна ещё и экосистема, а PHP имеет одну из самых богатых и разнообразных экосистем среди языков программирования. Тут и широкий спектр различных расширений, и множество инструментов, и библиотеки, и фреймворки. Чего стоит один только Symfony… а ведь он и сам в основном состоит из <a href="https://symfony.com/components">множества отдельных библиотек</a>! Каждую из них можно использовать в любых проектах, ведь все они открыты для сообщества: так, другой крайне популярный PHP фреймворк, Laravel, во многом основан именно на них. Найти что-то необходимое для создания веб-проекта, чего ещё не успели реализовать в виде библиотеки или пакета на PHP, довольно сложно: очень многое уже есть, и выбор действительно огромный.</p><p>Нельзя обойти стороной и крутое комьюнити, которое может ответить почти на любой ваш вопрос. Да и без того информации о разработке на PHP полно в интернете. С этим не было проблем даже в 2010-х, когда я только изучал его, а уж сейчас годных уроков, гайдов и примеров доступно ещё больше.</p><h2>PHP ждёт классное будущее. Стань его частью!</h2><p>PHP обладает многообещающим будущим, ведь он непрестанно развивается и день ото дня становится только лучше. Вокруг этого ЯП собралось очень активное сообщество разработчиков, которые его любят, а его реальная популярность в вебе не уменьшается. С каждым новым обновлением PHP предлагает всё новые возможности, повышает производительность и безопасность.</p><p>Изучая PHP, вы не только научитесь работать с одним из самых распространённых и востребованных языков программирования, но также получите возможность внести свой вклад в развитие технологий и поделиться знаниями с огромным количеством единомышленников. Присоединяйтесь к сообществу PHP: станьте частью его яркого будущего!</p>]]></content:encoded>
    </item>
    <item>
      <title>Четвёртый раунд битвы языков программирования в 2023 году</title>
      <link>https://tproger.ru/articles/chetvyortyj-raund-bitvy-yazykov-programmirovaniya-v-2023-godu</link>
      <comments>https://tproger.ru/articles/chetvyortyj-raund-bitvy-yazykov-programmirovaniya-v-2023-godu?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Рафаил Агазода]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/chetvyortyj-raund-bitvy-yazykov-programmirovaniya-v-2023-godu</guid>
      <description><![CDATA[<p>В четвёртом раунде батла лучших языков программирования в 2023 году встретились PHP и JavaScript, Ruby и C. Голосуйте сердцем!</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/chetvyortyj-raund-bitvy-yazykov-programmirovaniya-v-2023-godu">Четвёртый раунд битвы языков программирования в 2023 году</a>»</p>]]></description>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[PHP]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 22 Dec 2023 08:00:02 GMT</pubDate>
      <content:encoded><![CDATA[<p>Третий раунд батла лучших языков программирования окончился победой C# над C++ с отрывом в 10% голосов и победой Pascal над Visual Basic с отрывом в 30% голосов.</p><p>Результаты третьего раунда <a href="https://tproger.ru/articles/tretij-raund-bitvy-yazykov-programmirovaniya-v-2023-godu">можно посмотреть здесь</a>.</p><figure><img src="https://media.tproger.ru/user-uploads/48741/2023-12-22/3036b1c3-5854-489b-b441-f501f591ab71.png" alt="" /><figcaption>Турнирная таблица батла лучших языков программирования в 2023 году</figcaption></figure><p>Сегодня за звание лучшего языка соревнуются:</p><ul><li>PHP и JavaScript;</li><li>Ruby и C.</li></ul><p>Голосование продлится до завтра, 23 декабря 2023 года, до 11 часов по МСК.</p><p>Выберите те языки, которые вы любите больше других. Голосуйте сердцем! Не думайте о популярности языков или их востребованности. В этом турнире важна только народная любовь.</p><p>Со всеми условиями батла <a href="https://tproger.ru/articles/startuet-batl-yazykov-programmirovaniya-2023">можно ознакомиться в анонсе</a>.</p><p>Чтобы не пропустить следующие раунды, подпишитесь на тэг <a href="https://tproger.ru/tag/toplang2023">Лучший язык 2023</a>. Тогда новые раунды появятся в вашей личной ленте, а вам будут приходить уведомления об их публикации.</p>]]></content:encoded>
    </item>
    <item>
      <title>Как верифицировать номер пользователя: SMS или код на PHP</title>
      <link>https://tproger.ru/articles/kak-verificirovat-nomer-polzovatelya-sms-ili-kod-na-php</link>
      <comments>https://tproger.ru/articles/kak-verificirovat-nomer-polzovatelya-sms-ili-kod-na-php?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Станислав Романов]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kak-verificirovat-nomer-polzovatelya-sms-ili-kod-na-php</guid>
      <description><![CDATA[<p>Рассказали, как верифицировать номер телефона пользователя через SMS с помощью кода на PHP и готовых решений.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kak-verificirovat-nomer-polzovatelya-sms-ili-kod-na-php">Как верифицировать номер пользователя: SMS или код на PHP</a>»</p>]]></description>
      <category><![CDATA[PHP]]></category>
      <category><![CDATA[API]]></category>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 19 Dec 2023 13:00:02 GMT</pubDate>
      <content:encoded><![CDATA[<p>Предположим, возникла задача проверять номера пользователей. Нужно отправлять случайно сгенерированные SMS-коды, чтобы верифицировать их номера телефонов. С чего начать?</p><p>Алгоритм такой:</p><ol><li>Пользователь вводит номер телефона.</li><li>Высылаете SMS-код.</li><li>Пользователь вводит этот код.</li><li>Если код верный, пользователь проходит дальше.</li></ol><p>Какие вопросы могут возникнуть:</p><ul><li>Как случайно генерировать код.</li><li>Какой выбрать сервис SMS-рассылок с API.</li></ul><p>Вопрос распадается на несколько кусочков. Начнём с самого простого – случайной генерации кода. На PHP это можно сделать, используя функции для работы с случайными числами и строками, например, rand().</p><p>Если работаете с PHP 7, то берете более криптографически безопасную функцию random_int(). Для случайного цифрового кода можно сделать так:</p><p>Если предпочитаете вариант посложнее, то есть алфавитно-цифровой код, то понадобится random_bytes() или более старый вариант mt_rand(). В этом случае код будет таким:</p><p>После генерации кода сохраняем его в базе данных или временно в сеансе пользователя, чтобы позже сравнить с введенным пользователем кодом при авторизации.</p><p>Далее сгенерированный код вам надо автоматически отправить пользователю. Если выбрали SMS-провайдера, то многое зависит от его условий. Можно обратиться к МТС Exolve. Вот универсальный вариант кода на PHP для отправки SMS с помощью HTTP-запроса к любому SMS-провайдеру:</p><p>Надо только заменить &lt;YOUR_API_ENDPOINT&gt;, &lt;YOUR_API_KEY&gt;, &lt;SENDER_NUMBER&gt; и другие параметры на соответствующие значения, предоставленные вашим SMS-провайдером.</p><p>И немного про варианты без SMS:</p><ol><li>Электронная почта. Вместо SMS-кода отправляем пользователю электронное письмо с проверочной ссылкой или временным кодом для подтверждения их идентификации.</li><li>Парольная авторизация — стандартный метод входа на сайт с использованием пароля.</li><li>Двухфакторная аутентификация (2FA), то есть работаем с приложениями для генерации базе одноразовых временных кодов (например, Google Authenticator или Authy).</li><li>Социальная авторизация через аккаунты в социальных сетях (например, VK, Google, Twitter).</li><li>Протокол аутентификации и авторизации OpenID Connect, чтобы пользователи могли использовать свои учетки с других веб-сервисов.</li><li>Дать пользователям доступ к вашему сайту через сторонние приложения с помощью протокола OAuth.</li></ol>]]></content:encoded>
    </item>
    <item>
      <title>Стартует батл языков программирования 2023</title>
      <link>https://tproger.ru/articles/startuet-batl-yazykov-programmirovaniya-2023</link>
      <comments>https://tproger.ru/articles/startuet-batl-yazykov-programmirovaniya-2023?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Рафаил Агазода]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/startuet-batl-yazykov-programmirovaniya-2023</guid>
      <description><![CDATA[<p>Стартует турнир за звание лучшего языка программирования в 2023 году среди читателей Tproger. Кто же победит в этом году?</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/startuet-batl-yazykov-programmirovaniya-2023">Стартует батл языков программирования 2023</a>»</p>]]></description>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[C++]]></category>
      <category><![CDATA[C#]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Ruby]]></category>
      <category><![CDATA[PHP]]></category>
      <category><![CDATA[Swift]]></category>
      <category><![CDATA[Golang]]></category>
      <category><![CDATA[Язык Си]]></category>
      <category><![CDATA[BASIC]]></category>
      <category><![CDATA[Rust]]></category>
      <category><![CDATA[Kotlin]]></category>
      <category><![CDATA[Pascal]]></category>
      <category><![CDATA[Dart]]></category>
      <category><![CDATA[Лучший язык 2023]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 18 Dec 2023 08:27:48 GMT</pubDate>
      <content:encoded><![CDATA[<p>Подходит к концу 2023 год, а это значит, пора подвести его итоги и запустить традиционный батл за звание лучшего языка программирования на Tproger.</p><p>Мы уже проводили батл в прошлых <a href="https://tproger.ru/articles/battl-jazykov-programmirovanija-2022-zavershilsja">2020</a>, <a href="https://tproger.ru/articles/battl-jazykov-programmirovanija-2021-zavershilsja">2021</a> и <a href="https://tproger.ru/articles/battl-jazykov-programmirovanija-2022-zavershilsja-2">2022</a> годах: первые два раза в голосовании победил Python, а в прошлом году — C#.</p><p>Вот, кто поборется за звание лучшего языка в 2023 году:</p><figure><img src="https://media.tproger.ru/user-uploads/48741/2023-12-18/7e3c300f-7dab-486d-af02-360ba8dc5952.png" alt="" /></figure><p>Правила батла остаются прежними:</p><ol><li>В батле участвует 16 языков программирования.</li><li>Ежедневно соревнуются две пары.</li><li>За любимый язык можно проголосовать в течение 24 часов.</li><li>Пары составляются рандомно, так что выбирайте язык, который субъективно нравится больше.</li><li>В финале мы определим тройку победителей.</li><li>Старт — 19 декабря, финал — 26 декабря.</li></ol><p>Примечание Сохраните эту запись в закладки: сюда мы добавим ссылки на все раунды батла во время голосования.</p><ol><li><a href="https://tproger.ru/articles/nachalsya-battl-yazykov-programmirovaniya-2023">Первый раунд</a></li><li><a href="https://tproger.ru/articles/vtoroj-raund-bitvy-yazykov-programmirovaniya-v-2023-godu">Второй раунд</a></li><li><a href="https://tproger.ru/articles/tretij-raund-bitvy-yazykov-programmirovaniya-v-2023-godu">Третий раунд</a></li><li><a href="https://tproger.ru/articles/chetvyortyj-raund-bitvy-yazykov-programmirovaniya-v-2023-godu">Четвёртый раунд</a></li><li><a href="https://tproger.ru/articles/pyatyj-raund-bitvy-yazykov-programmirovaniya-v-2023-godu">Пятый раунд</a></li><li><a href="https://tproger.ru/articles/westoj-raund-bitvy-yazykov-programmirovaniya-v-2023-godu">Шестой раунд</a></li><li><a href="https://tproger.ru/articles/polufinal-bitvy-yazykov-programmirovaniya-v-2023-godu">Полуфинал</a></li><li><a href="https://tproger.ru/articles/final-bitvy-yazykov-programmirovaniya-v-2023-godu">Финал</a></li><li><a href="https://tproger.ru/articles/batl-yazykov-programmirovaniya-2023-zaverwilsya">Результаты</a></li></ol><p>Также подпишитесь на тэг <a href="https://tproger.ru/tag/toplang2023">Лучший язык 2023</a>. Тогда новые раунды батла появятся в вашей личной ленте, а вам будут приходить уведомления об их появлении.</p><p>Старт уже завтра — 19 декабря в 11:00 МСК. Следите, участвуйте, голосуйте!</p>]]></content:encoded>
    </item>
    <item>
      <title>Почему PHP сохранит свои позиции как ключевой язык для бэкенда веб-приложений в 2024 году</title>
      <link>https://tproger.ru/articles/pochemu-php-sohranit-svoi-pozicii-kak-klyuchevoj-yazyk-dlya-bekenda-veb-prilozhenij-v-2024-godu</link>
      <comments>https://tproger.ru/articles/pochemu-php-sohranit-svoi-pozicii-kak-klyuchevoj-yazyk-dlya-bekenda-veb-prilozhenij-v-2024-godu?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Filipp Shcherbanich]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/pochemu-php-sohranit-svoi-pozicii-kak-klyuchevoj-yazyk-dlya-bekenda-veb-prilozhenij-v-2024-godu</guid>
      <description><![CDATA[<p>Рассказываю, почему PHP не сдаёт позиции под напором новых технологий и остаётся лучшим помощником для создания веб-проектов любой сложности.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/pochemu-php-sohranit-svoi-pozicii-kak-klyuchevoj-yazyk-dlya-bekenda-veb-prilozhenij-v-2024-godu">Почему PHP сохранит свои позиции как ключевой язык для бэкенда веб-приложений в 2024 году</a>»</p>]]></description>
      <category><![CDATA[PHP]]></category>
      <category><![CDATA[Бэкенд]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 06 Dec 2023 08:20:02 GMT</pubDate>
      <content:encoded><![CDATA[<p>Блуждая по сети, можно неоднократно наткнуться на мнения, согласно которым «PHP уже не тот», а 2007-й, когда он занимал топовые позиции, уже не вернуть. Считая, что современные реалии требуют новых инструментов, такие комментаторы, однако, не предлагают никаких альтернатив. И это не удивительно, ведь факт остаётся фактом: будучи лидером в былое время, PHP остаётся им и до сих пор.</p><p>Рассказываю, почему старый добрый PHP не только не сдаёт свои позиции под напором всё большего числа новых технологий, но и остаётся лучшим помощником разработчиков для создания огромного множества веб-проектов любой сложности.</p><h2>PHP: как всё начиналось</h2><p>Цель не только оправдывает средства, но и определяет их: то, каким стал PHP, напрямую связано с задачами, ради которых он создавался. Чтобы понять, почему PHP был и по-прежнему остаётся популярным в вебе, стоит вернуться к истокам его появления и лучше узнать его корни.</p><p>Свой первый день рождения PHP сыграл в 1994 году, когда датский программист Расмус Лердорф решил создать набор скриптов на C для управления своим резюме и отслеживания посещений своего веб-сайта. Отсюда и его название, которое поначалу звучало как «Personal Home Page Tools», а затем, когда Расмус открыл код для общественности, стало известным всему миру как «PHP: Hypertext Preprocessor».</p><p>Как видите, уже на заре своего появления PHP был разработан как основа для веб-проектов. За годы существования PHP претерпел множество изменений, и из простого набора скриптов для управления веб-страницами он вырос до полноценного ЯП, используемого для сложнейших веб-проектов, но его суть осталась той же, что и добрых 30 лет назад: из веба он пришёл, в вебе он и остался</p><p>Будучи простым и гибким языком, PHP привлёк внимание тысяч и десятков тысяч программистов, которые смогли с его помощью быстро и без лишних усилий создавать нескучные сайты. Отдельным плюсом стала та его особенность, которая позволяла разработчикам встраивать код прямо в HTML разметку, что обеспечило невероятную по тем временам простоту и гибкость в создании динамических веб-страниц. Ну и конечно, с появлением таких популярных Фреймворков и систем управления контентом, как Laravel, Symfony, WordPress и Drupal, позиции PHP на рынке стали укреплены еще сильнее.</p><p>К слову, выше названные инструменты и сегодня невероятно популярны в среде как начинающих, так и опытных разработчиков, что добавляет ещё один (не)лишний плюсик в его карму.</p><h2>Конкуренты? Вы серьёзно?</h2><p>Тотальная цифровизация сделала веб-разработку нужной, как никогда прежде. Проникая во все сферы человеческой жизни, Сеть стала её обычной составляющей. Сайты, блоги, интернет-магазины должны быть у каждого предпринимателя, ведь найти клиента, не имея ничего из выше названного, довольно трудно. Поэтому кроме PHP на рынке представлены и другие языки программирования, так или иначе с ним конкурирующие. Но добиваются ли они похожего успеха в вебе? Рассмотрим вопрос внимательнее.</p><h3>JavaScript / TypeScript (и Node.js)</h3><p>Традиционно JavaScript использовался для клиентской разработки, но с появлением Node.js он также стал применяться и для серверной разработки. Это существенно увеличило его популярность и аудиторию, так как разработчики теперь могут использовать один и тот же язык как для фронтенда, так и для бэкенда. Это значит, предприниматели теперь могут сократить бюджет на содержание штата программистов, а JS-программисты получили возможность существенно расширить свои компетенции. Node.js подходит для приложений, требующих высокой производительности и асинхронности, но при этом бэкенд на JavaScript сильно уступает PHP в популярности. Напомним: PHP написаны такие самые популярные системы управления контентом, как WordPress, Joomla!, Drupal.</p><blockquote>Свыше трети всех сайтов Интернета сделаны на WordPress, а это говорит о многом.</blockquote><h3>Python</h3><p>О популярности Python’a не слышал только удав: сегодня этот ЯП так широко разрекламирован, что воспринимается многими как эталон разработки. Да, он применяется во многих областях (в том числе и для разработки бэкендов веб-проектов), да, он обладает мощными фреймворками для написания бэкенд части проектов, такими как Django и Flask, и да – он прост в обучении и требует минимальных трудовложений со стороны разработчика. Но, несмотря на то что Python хорош для комплексных приложений и работы с большими объемами данных, PHP существенно превосходит его в производительности и возможностях для разработки веб-проектов, что не удивительно: ведь, в отличии от Python, <i>он создавался именно для этого</i>. Основная же сфера применения Python – это DS и анализ данных. Там, вероятно, ему нет равных, но мы то сейчас говорим именно о веб-разработке</p><h3>Java</h3><p>Java давно показала себя надёжным ЯПом с такими мощными и масштабируемыми фреймворками, как Spring и Spark. Она отлично подойдёт для реализации корпоративных веб-приложений для компаний, у которых есть соответствующие финансовые и временные ресурсы. Увы, чрезмерно большой бюджет и значительные временные затраты на разработку делают его не самым лучшим вариантом для представителей малого и среднего бизнеса, а тем более стартапов, у которых средства ограничены. Для них будет гораздо более правильным выбрать PHP, который куда проще в управлении и быстрее в запуске.</p><h3>C#</h3><p>Как и у Java, у C# имеется масса мощных инструментов и библиотек для создания масштабируемых веб-приложений. Зато, в отличие от него, PHP более универсален и не так зависит от конкретной экосистемы. PHP более доступен для широкого круга разработчиков, проще в изучении и настройке, то есть он не требует чрезмерно завышенных сроков для выполнения проектов любой сложности, в этом и есть его суперсила.</p><h3>Go (или Golang)</h3><p>Детище Гугла, Go становится всё более популярным благодаря своей производительности. Golang хорош для веб-сервисов с высокой нагрузкой, справляясь с ней с поистине завидной эффективностью. Кроме того, его синтаксис невероятно прост в освоении, даже ходят слухи, что, используя его можно стать Senior-ом за 30 дней с нуля. Однако Go пока не дотянул до охватов PHP, по-прежнему оставаясь где-то в сторонке: в реальности разработка на нём куда медленнее, а количество инструментов и библиотек для создания сложных проектов – значительно ниже. Хотя сегодня многие разработчики эффективно используют Golang в связке с PHP – не заменяя, но эффективно его дополняя.</p><h2>Так что же в итоге</h2><p>Сравнивая языки программирования, многие нередко обращаются к данным опросов. Что ж, сделаем то же самое. Яркий пример: согласно данным  <a href="https://www.stackscale.com/blog/most-popular-programming-languages/#:~:text=Position%20PYPL%20ranking%20September%202023,C%20C">PYPL Index и Stack Overflow’s Developer Survey 2023</a> и <a href="https://www.tiobe.com/tiobe-index/">TIOBE Index</a>, PHP занимает 6-ю или 7-ю строчку. Такие результаты могут сложить ложное впечатление, что он утратил свои позиции среди языков для создания бэкендов веб-приложений, но это не так. Всё дело в том, что занявшие более высокие строчки языки призваны реализовывать более широкий спектр задач в отличие от PHP, нацеленного в основном на <b>бэкенд-разработку</b>.</p><p>Например, тот же Пайтон широко применяется в машинном обучении и анализе данных, но для для создания бэкенда веб-приложений его использование далеко не всегда оправдано. Если посмотреть на JavaScript, то можно увидеть, что он в основном применяется на клиентской стороне веб-разработки: там у него действительно практически нет альтернатив. Ну а других языки, «обогнавшие» PHP, чаще всего просто используются во многих других сферах, где разработка далеко не всегда связана бэкендом веб-проектов.</p><p>Поэтому и в 2023, и в 2024, и наверняка ещё и в 2025 году можно будет с уверенностью говорить о PHP как о лидирующем языке программирования именно для бэкенд-разработки веб-проектов, которая и является его основной целью.</p><h2>Будущее PHP</h2><p>PHP не стоит на месте, а поддерживается и бурно развивается огромным сообществом разработчиков и такими крупными организациями, как <a href="https://thephp.foundation/">PHP Foundation</a> и <a href="https://www.zend.com/">Zend</a>. Скорость его эволюции впечатляет: частые и постоянные релизы базовых и минорных обновлений постоянно улучшают язык, позволяя ему оставаться актуальным в новых реалиях. Разработчики PHP стремятся следовать графику выпуска версий, чтобы обеспечить стабильность и предсказуемость для пользователей; новые минорные версии PHP теперь похоже <a href="https://www.php.net/releases/index.php">выпускаются ежегодно</a>. Так, совсем недавно была выпущена версия 8.3, которая привнесла значительные улучшения в производительности и функциональности языка. Среди ключевых нововведений стали типы констант, которые расширяют возможности типизации в PHP, добавление функции json_validate, из названия которой сразу становится понятна ее цель, расширение возможностей Randomizer-а и многое другое. Возможно, олды помнят, как PHP иногда критиковали за низкое качество некоторых программ, однако всё это в далёком прошлом: ситуация меняется, и только в лучшую сторону. Разработчики накапливают опыт, а язык становится более строгим и безопасным. Ошибки на этапе написания кода? Нет, если браться за дело с прямыми руками!</p><p>Огромный вклад в развитие PHP вносит и сообщество, участники которого непрестанно подготавливают наборы библиотек и инструментов для контроля качества кода. Это способствует повышению общего уровня программ, написанных на PHP, и делает его ещё более привлекательным для разработчиков.</p><p>Конечно, не всё так идеально: даже сейчас в PHP остаются какие-то нерешённые вопросы и проблемы. Например, исторически сложившаяся неоднородность синтаксиса, включающая несогласованность и непоследовательность в названиях функций. Особенно серьёзным недостатком является разный порядок аргументов в функциях, который достаточно часто приводит к путанице и ошибкам. Многие разработчики выражают недовольство и по поводу медленного внедрения новых возможностей; особенно актуальным стал вопрос о поддержке дженериков на уровне языка, которые специалисты всё никак не дождутся.</p><p>Однако всё это далеко не так критично и ни в коей мере не сравнится с теми преимуществами, которые даёт использование PHP. Язык становится всё более зрелым, критика уходит в прошлое, а PHP, как и прежде, используют для создания миллионов веб-проектов каждый год. Фреймворки и CMS, которые и сделали его по-настоящему массовым никуда не делись и не испытывают никакой серьезной конкуренции. На языке всё так же просто писать, а число качественных материалов только растёт, поэтому ожидать в 2024 хоть чего-то, что могло бы пошатнуть лидерство PHP в бэкенд-разработке, не стоит.</p>]]></content:encoded>
    </item>
    <item>
      <title>Laravel Pulse вышел в бета. Новая система мониторинга для приложений Laravel</title>
      <link>https://tproger.ru/articles/laravel-pulse-vywel-v-beta-novaya-sistema-monitoringa</link>
      <comments>https://tproger.ru/articles/laravel-pulse-vywel-v-beta-novaya-sistema-monitoringa?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[ihor]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/laravel-pulse-vywel-v-beta-novaya-sistema-monitoringa</guid>
      <description><![CDATA[<p>Вышла бета-версия инструмента Laravel Pulse. Рассказали, что это такое, что умеет инструмент и в каких приложениях Laravel он работает.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/laravel-pulse-vywel-v-beta-novaya-sistema-monitoringa">Laravel Pulse вышел в бета. Новая система мониторинга для приложений Laravel</a>»</p>]]></description>
      <category><![CDATA[PHP]]></category>
      <category><![CDATA[Laravel]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 05 Dec 2023 14:54:06 GMT</pubDate>
      <content:encoded><![CDATA[<p>1-го декабря на своей странице в (X) Тейлор Отвел <a href="https://x.com/taylorotwell/status/1730634925169082834?s=20">опубликовал</a> пост о выходе бета-версии инструмента Laravel Pulse.</p><h2>Что такое Laravel Pulse</h2><p>Laravel Pulse – это совершенно новый open-source инструмент мониторинга производительности, анализа данных и панели мониторинга в режиме реального времени для приложений Laravel.</p><p>Pulse был разработан специально для Laravel и знает обо всех основных компонентах, таких как очереди, события, почта, уведомления, кэширование, и многих других.</p><p>Laravel Pulse <b> self-hosted</b>  и работает везде, где работает Laravel: VPS, Laravel Forge, Vapor и т.д. У него адаптивный пользовательский интерфейс со светлым и темным режимами.</p><figure><img src="https://media.tproger.ru/user-uploads/10203/2023-12-05/7a87bd19-01db-45dc-9a19-4fe9f79353db.png" alt="" /><figcaption>Пример дашборда, взято с https://pulse.laravel.com</figcaption></figure><h2>Что умеет отслеживать Laravel Pulse</h2><ul><li><b>Работоспособность сервера: </b>отслеживая использование процессора, памяти и диска, Pulse легко масштабируется для управления несколькими серверами с одного инстанса.</li><li><b>Очереди:</b> выводит статистику в реальном времени и за прошлые периоды о том, сколько заданий находится в очереди, сколько выполнено успешно, а сколько нет.</li><li><b>Производительность:</b> обзор узких мест приложений. Позволяет оперативно выявлять и устранять проблемы с самыми медленными эндпоинтами, запросами к БД, заданиями и исходящими запросами.</li><li><b>Исключения: </b>обзор возникающих исключений с полным обзором работоспособности приложения поможет быстрее находить аномалии и устранять их.</li><li><b>Использование приложений:</b> выявляет поведение пользователей путем выявления наиболее активных, которые делают больше всего запросов, взаимодействуют с самыми медленными эндпоинтами и запросами, отправляют больше всего задач.</li></ul><p>Laravel Pulse – инструмент который сделает отладку и мониторинг приложений более приятным и продуктивным.</p><p>Ссылки: <a href="https://github.com/laravel/pulse">GitHub</a>, <a href="https://laravel.com/docs/10.x/pulse">документация</a>, <a href="https://pulse.laravel.com/">сайт Laravel Pulse.</a></p>]]></content:encoded>
    </item>
    <item>
      <title>Строки в PHP и команды над ними</title>
      <link>https://tproger.ru/articles/stroki-v-php</link>
      <comments>https://tproger.ru/articles/stroki-v-php?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Рафаил Агазода]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/stroki-v-php</guid>
      <description><![CDATA[<p>Разобрались, что такое строки в PHP, зачем они нужны и какие операции над ними можно совершать. К каждой операции привели пример с кодом.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/stroki-v-php">Строки в PHP и команды над ними</a>»</p>]]></description>
      <category><![CDATA[Для начинающих]]></category>
      <category><![CDATA[PHP]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 03 Nov 2023 11:21:00 GMT</pubDate>
      <content:encoded><![CDATA[<p>В PHP строка – это последовательность символов, заключенных в одинарные ('') или двойные кавычки (""). Строки могут содержать любой текст, включая буквы, цифры, специальные символы и пробелы.</p><p>Они используются для хранения текстовой информации, такой как текст сообщений, HTML-код, имена файлов и так далее. Строки в PHP также можно использовать для создания HTML-кода, обработки данных форм и других задач.</p><p>Вот самые популярные операции над строками в PHP:</p><ol><li><a href="https://tproger.ru/#one">Конкатенация</a></li><li><a href="https://tproger.ru/#two">Получение длины строки</a></li><li><a href="https://tproger.ru/#three">Извлечение подстроки</a></li><li><a href="https://tproger.ru/#four">Замена подстроки</a></li><li><a href="https://tproger.ru/#five">Поиск подстроки</a></li><li><a href="https://tproger.ru/#six">Преобразование регистра</a></li><li><a href="https://tproger.ru/#seven">Разделение строки</a></li><li><a href="https://tproger.ru/#eight">Форматирование строк</a></li><li><a href="https://tproger.ru/#nine">Удаление лишних пробелов</a></li></ol><p>Рассмотрим их поподробнее.</p><h2>Конкатенация строк в PHP</h2><p>Конкатенация строк в PHP – это процесс объединения двух или более строк в одну строку. Это полезная операция, когда вам нужно объединить разные части текста или переменных в одну строку. Для конкатенации строк в PHP используется оператор точки (.), который служит для объединения строк или строковых переменных.</p><p>Также можно выполнять конкатенацию строк внутри вывода, например:</p><h2>Получение длины строки в PHP</h2><p>Получение длины строки в PHP – это процесс определения количества символов в строке.</p><p>Знание длины строки может быть полезным во многих сценариях программирования, например, при валидации ввода, определении максимальной длины текста, форматировании текста и других задачах.</p><p>Для получения длины строки в PHP используется функция strlen().</p><p>Вы можете использовать длину строки для проверки, соответствует ли введенный текст определенным критериям или ограничениям, таким как максимальная длина имени пользователя или пароля. Также вы можете использовать длину строки, чтобы убедиться, что текст не превышает заданное ограничение.</p><h2>Извлечение подстроки в PHP</h2><p>Извлечение подстроки в PHP – это процесс получения части строки из исходной строки. Это полезная операция, когда вам нужно работать с определенной частью текста или данных в строке. В PHP это можно сделать с помощью функции substr().</p><p>Функция substr() принимает исходную строку и два аргумента: начальную позицию и длину подстроки. Она возвращает указанное количество символов из строки, начиная с указанной позиции.</p><p>В данном примере substr($строка, 8, 6) извлекает 6 символов, начиная с 8-й позиции в строке, и результат (подстрока) – 'строка' – сохраняется в переменной $подстрока.</p><p>Извлечение подстроки позволяет вам работать с определенными частями текста в большой строке, выполнять поиск, замену или другие манипуляции.</p><p>Вы можете извлечь часть текста для дальнейшего форматирования, например, форматировать дату или выделять заголовки.</p><h2>Замена подстроки в PHP</h2><p>Замена подстроки в PHP – это процесс замены одной части текста (подстроки) на другую внутри строки. Это полезная операция, которая позволяет изменять или корректировать содержание строки в соответствии с определенными требованиями.</p><p>В PHP замена подстроки выполняется с помощью функции str_replace(). Функция принимает три аргумента: подстроку, которую нужно заменить, подстроку, на которую нужно заменить, и исходную строку.</p><p>Она заменяет все вхождения подстроки в исходной строке на новую подстроку и возвращает измененную строку.</p><p>Замена подстроки может использоваться для исправления опечаток или неточностей в тексте, для изменения значений переменных или маркеров в строке.</p><h2>Поиск подстроки в PHP</h2><p>Поиск подстроки в PHP – это процесс нахождения позиции (индекса) первого вхождения определенной подстроки внутри строки. Эта операция полезна, когда вам нужно найти определенные части текста или данные в строке.</p><p>В PHP выполнять поиск подстроки можно с использованием функции strpos(). Она принимает два аргумента: искомую подстроку и исходную строку. Она возвращает позицию первого вхождения искомой подстроки в исходной строке, или false, если подстрока не найдена.</p><p>Вы можете использовать поиск подстроки, чтобы определить, существует ли определенный текст или маркер в строке.</p><h2>Преобразование регистра в PHP</h2><p>Преобразование регистра в PHP – это процесс изменения регистра букв (верхний или нижний) в строке.</p><p>Оно нужно, когда вам нужно выполнить сравнение строк без учета регистра, привести текст к определенному стандартному регистру или выполнить другие манипуляции с регистром текста.</p><p>Изменить регистр в PHP можно с помощью нескольких функций.</p><p>strtolower() преобразует все символы в строке в нижний регистр.</p><p>strtoupper() преобразует все символы в строке в верхний регистр.</p><p>ucfirst() преобразует первую букву в строке в верхний регистр.</p><p>lcfirst() преобразует первую букву в строке в нижний регистр.</p><p>Преобразование регистра может быть частью валидации данных, чтобы привести текст к определенному формату. В некоторых случаях преобразование регистра может быть полезным при сортировке данных.</p><h2>Разделение строки в PHP</h2><p>Разделение строки в PHP – это процесс разбиения одной строки на несколько подстрок на основе определенного разделителя. Его используют, когда вам нужно обработать данные, разделенные определенным символом или строкой (разделителем).</p><p>В PHP разделить строки можно с использованием функции explode(). Она принимает два аргумента: разделитель и исходную строку. Она также разбивает исходную строку на массив подстрок, используя указанный разделитель, и возвращает этот массив.</p><p>Результат:</p><p>Разделение строки полезно при обработке данных, разделенных различными символами или символьными последовательностями, например, при разборе CSV-файлов. Также при работе с URL-адресами разделение строки может быть полезным для извлечения различных частей URL, таких как протокол, хост и путь.</p><h2>Форматирование строк в PHP</h2><p>Форматирование строк в PHP – это процесс изменения внешнего вида строки для обеспечения определенного структурированного или эстетического вида. Эта операция полезна для улучшения отображения текста в выводе или при создании текстовых сообщений с определенным форматом.</p><p>В PHP есть несколько операций для форматирования строк.</p><p>Интерполяция переменных или вставка значений переменных в строку для создания динамического текста.</p><p>Выравнивание текста слева, справа или по центру.</p><p>Форматирование чисел с определенным числом знаков после запятой или в виде денежной суммы.</p><p>Форматирование дат.</p><p>Создание многострочных строк с использованием переводов строк (простите за тавтологию) и специальных символов.</p><h2>Удаление пробелов в строках PHP</h2><p>Удаление лишних пробелов в строках PHP – это процесс удаления начальных и конечных пробелов из строки, а также сокращение последовательностей пробелов внутри строки до одного пробела между словами.</p><p>trim() удаляет начальные и конечные пробелы из строки.</p><p>ltrim() удаляет символы с начала строки, до тех пор, пока не встретит символ, который не входит в указанный набор символов. Она принимает два аргумента: исходную строку и необязательную строку символов, которые нужно удалить (по умолчанию удаляются пробелы).</p><p>rtrim() удаляет символы с конца строки, до тех пор, пока не встретит символ, который не входит в указанный набор символов. Она также принимает два аргумента: исходную строку и необязательную строку символов, которые нужно удалить (по умолчанию удаляются пробелы).</p><h2>Заключение</h2><p>Операции над строками в PHP играют важную роль в обработке и манипуляции текстовой информацией.</p><p>Благодаря богатому набору функций и методов, разработчики могут легко выполнять разнообразные задачи, такие как конкатенация, извлечение подстрок, замена, поиск и форматирование строк.</p><p>Понимание и умение применять эти операции позволяют создавать эффективные и функциональные приложения, обрабатывать ввод данных, генерировать отчеты и обеспечивать корректное отображение текста в веб-приложениях на PHP.</p>]]></content:encoded>
    </item>
    <item>
      <title>Очередной фреймворк на PHP  — конкурс пет-проектов</title>
      <link>https://tproger.ru/articles/ocherednoj-frejmvork-na-php-konkurs-pet-proektov</link>
      <comments>https://tproger.ru/articles/ocherednoj-frejmvork-na-php-konkurs-pet-proektov?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Неопознанный программист]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/ocherednoj-frejmvork-na-php-konkurs-pet-proektov</guid>
      <description><![CDATA[<p>Создал PHP-фреймворк для создания веб-проектов DeltaFramework, который должен облегчить жизнь верстальщикам.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/ocherednoj-frejmvork-na-php-konkurs-pet-proektov">Очередной фреймворк на PHP  — конкурс пет-проектов</a>»</p>]]></description>
      <category><![CDATA[PHP]]></category>
      <category><![CDATA[Фреймворки и библиотеки]]></category>
      <category><![CDATA[Pet-проекты]]></category>
      <category><![CDATA[Лучший пет-проект 2023]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 12 Oct 2023 09:35:34 GMT</pubDate>
      <content:encoded><![CDATA[<p>Всем привет. Сразу предупреждаю, что чукча не писатель, поэтому главное не потерять нить повествования.</p><p>Иногда, когда становилось скучно и рабочие проекты пилить не хотелось, я садился за разработку собственного велосипеда. Причем архитектура была выбрана не то чтобы правильная, а наиболее удобная для коротания времени за написанием кода. Где-то встречались костыли, где-то некие ноу-хау.</p><p>Мой велосипед представляет из себя некий PHP-фреймворк для создания веб-проектов.</p><p>На текущий момент он представляет следующий функционал:</p><ul><li>Авторизация;</li><li>Регистрация;</li><li>Роли пользователей;</li><li>Верификация E-Mail;</li><li>Рассылки почты;</li><li>Поддержка шаблонов почтовых отправлений;</li><li>Менеджер очереди заданий;</li><li>Шаблонизатор;</li><li>Поддержка маршрутизации;</li><li>REST API;</li><li>Кеширование;</li><li>Логирование;</li><li>Работа с файлами;</li><li>Миграции;</li><li>Captcha;</li><li>DDoS Guard (basic).</li></ul><figure><img src="https://media.tproger.ru/user-uploads/25296/2023-10-11/fa2ba81e-ed8b-4875-bda4-0a0ecb651129.png" alt="" /><figcaption>Одна из фронтовых страниц демосайта, шаблонизатор Twig</figcaption></figure><p>Пользовательская часть построена с использованием шаблонизатора Twig. Я посчитал, что это приемлемо и, вероятно, в дальнейшем облегчит жизнь верстальщикам.</p><p>Админка же, напротив, сделана без использования каких-либо шаблонизаторов (привет, Битрикс). Местами реализации ужасны, местами из глаз идет кровь, но оно работает. Сделано так, скорее, только на время альфа-версий.</p><p>Функционал пилится, некоторые идеи приходят в неудобное время, и чтобы они появились в качестве реализации, я иногда грешу простыми и топорными реализациями с надеждой на причесывание в дальнейшем. Техдолг копится, как говорится…</p><figure><img src="https://media.tproger.ru/user-uploads/25296/2023-10-11/bb9aef82-8ebb-4248-b3f9-0e47ad049bbf.png" alt="" /><figcaption>Страница авторизации в панели администратора</figcaption></figure><p>Из интересного также есть функционал обработки роутов (маршрутов) для фронтовой части сайта с поддержкой динамических составляющих.</p><p>Реализована поддержка многосайтовости с подключением локального файла конфигурации (когда мы линкуем папку с ядром к другому проекту и создаем конфиг для нового проекта). А для облегчения развертывания используются миграции через Phinx.</p><p>Для большей гибкости реализованы роли пользователей для контроля доступа к каким-либо частям проекта. Там же есть отдельные роли как для администратора с максимальными правами и базовой роли пользователя, так и для менеджера с урезанными правами (базовый доступ к админке). Накручивать можно по желанию что угодно. Кстати, имеется функционал логирования, что очень облегчает поиск виновного, когда кто-то или что-то косячит. ?</p><p>Также реализовал функционал диспетчера очереди с поддержкой приоритетов, воркеров и повторного выполнения в случае возникновения ошибок. Использоваться может, например, для рассылки писем, обработки изображений и в целом для всего, что требует времени больше, чем пользователь готов ждать при загрузке страницы (рендерим страницу, а какие-то тяжелые задачи отдаем очереди на обработку, и все счастливы).</p><p>В качестве мониторингов был выбран Сентри как основной и Телеграм как дублирующий. Функционал второго также реализован в данном проекте.</p><figure><img src="https://media.tproger.ru/user-uploads/25296/2023-10-11/2925401a-655e-4fd3-ba59-96abc5119442.png" alt="" /><figcaption>Пример уведомления о возвращении повисшего задания очереди в работу</figcaption></figure><p>Кодовая база на данный момент ведется на Гитлабе, но интереса ради продублировал репозиторий на Гитхаб с публичным доступом. Мало ли, кому-то данный велосипед зайдет. ?</p><p>Ссылка на репозиторий проекта:</p>]]></content:encoded>
    </item>
    <item>
      <title>Массивы в PHP: типы и операции</title>
      <link>https://tproger.ru/articles/massivy-v-php</link>
      <comments>https://tproger.ru/articles/massivy-v-php?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Рафаил Агазода]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/massivy-v-php</guid>
      <description><![CDATA[<p>Составили шпаргалку по массивам в PHP для начинающих. Рассказали о типах массивов в PHP и об операциях, которые можно совершить над ними.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/massivy-v-php">Массивы в PHP: типы и операции</a>»</p>]]></description>
      <category><![CDATA[Массивы и строки]]></category>
      <category><![CDATA[Для начинающих]]></category>
      <category><![CDATA[Шпаргалки]]></category>
      <category><![CDATA[PHP]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 10 Oct 2023 11:39:44 GMT</pubDate>
      <content:encoded><![CDATA[<p>В PHP массивы представляют собой мощный инструмент для хранения, обработки и управления данными. Они позволяют программистам организовывать информацию в упорядоченные коллекции и обращаться к ней по ключу или индексу.</p><p>В PHP есть несколько типов массивов, включая индексированные и ассоциативные массивы, а также многомерные и вложенные массивы, которые обеспечивают гибкость при работе с данными различной структуры.</p><p>В этой статье мы рассказываем о типах массивов в PHP и об операциях, которые можно совершить над ними.</p><ol><li><a href="https://tproger.ru/#one">Типы массивов в PHP</a></li><li><a href="https://tproger.ru/#two">Как создавать массивы в PHP</a></li><li><a href="https://tproger.ru/#three">Как получить элемент массива в PHP по индексу</a></li><li><a href="https://tproger.ru/#four">Как добавить элемент в конец массива PHP</a></li><li><a href="https://tproger.ru/#five">Как удалить последний элемент массива PHP</a></li><li><a href="https://tproger.ru/#six">Получение длины массива в PHP</a></li><li><a href="https://tproger.ru/#seven">Как проверить наличие элемента массива в PHP</a></li><li><a href="https://tproger.ru/#eight">Как выполнить обход массива в PHP и вывести его элементы</a></li><li><a href="https://tproger.ru/#nine">Как выполнить слияние массивов в PHP</a></li><li><a href="https://tproger.ru/#ten">Как сортировать массив в PHP</a></li></ol><h2>Типы массивов в PHP</h2><h3>1. Индексированные массивы</h3><p>Это самый обычный тип массива в PHP, где элементы нумеруются целыми числами, начиная с 0, и последовательно увеличиваются.</p><h3>2. Ассоциативные массивы</h3><p>В данном типе массивов элементы хранятся в парах ключ-значение, где ключи могут быть строками или целыми числами.</p><h3>3. Многомерные массивы</h3><p>Это тип массива, в котором элементы сами могут быть другими массивами. Такие массивы позволяют хранить иерархически связанные данные.</p><h3>4. Вложенные массивы</h3><p>Это тип массива, в котором элементы могут содержать другие массивы, создавая более сложную структуру данных.</p><h2>Как создавать массивы в PHP</h2><h3>1. Создание пустого массива</h3><p>Создание пустого массива в PHP может быть полезным для программистов, когда они хотят создать массив, к которому будут добавлять элементы в ходе выполнения программы.</p><p>Пустой массив предоставляет исходную точку, с которой можно начать добавлять элементы и формировать коллекцию данных.</p><p>или</p><h3>2. Создание индексированного массива</h3><p>Индексированные массивы в PHP полезны, когда нужно хранить упорядоченную коллекцию значений и обращаться к ним по числовым индексам. Можно использовать индексированный массив, например, для хранения списка элементов, результатов операций или последовательности данных.</p><p>Использование числовых индексов позволяет эффективно обращаться к элементам массива по их позиции.</p><p>или</p><h3>3. Создание ассоциативного массива</h3><p>Ассоциативные массивы в PHP полезны, когда нужно хранить данные в виде пар “ключ” =&gt; “значение”.</p><p>Ассоциативные массивы позволяют, например, хранить информацию о пользователях, настройках приложения, пунктах меню или любых других связанных данных.</p><p>Использование ключей позволяет быстро извлекать и обновлять значения в массиве по имени.</p><p>или</p><h3>4. Создание многомерного массива</h3><p>Многомерные массивы в PHP позволяют хранить данные в виде таблицы с несколькими рядами и столбцами, где каждая ячейка может содержать значение.</p><p>Также многомерные массивы представляют собой массивы, в которых элементами являются другие массивы.</p><p>Это особенно полезно при работе с матрицами, реляционными базами данных или любыми случаями, когда данные нужно организовать в иерархическую структуру.</p><p>или</p><h2>Как получить элемент массива в PHP по индексу</h2><h3>1. Оператор квадратных скобок []</h3><p>Этот способ наиболее распространен и прост в использовании. Можно использовать оператор квадратных скобок [] и указать индекс элемента внутри них.</p><h3>2. Функция array_values()</h3><p>Данная функция возвращает все значения массива в виде нового массива, с индексами, начиная с 0. Затем можно получить элемент массива по новому индексу.</p><h3>3. Функции current() и next()</h3><p>Эти функции позволяют перемещаться по массиву и получать текущий элемент. Функция current() возвращает текущий элемент массива, а функция next() сдвигает указатель на следующий элемент.</p><h2>Как добавить элемент в конец массива PHP</h2><h3>1. Использование оператора []</h3><p>Самым простым способом является использование оператора квадратных скобок [] с пустым индексом, чтобы добавить элемент в конец массива.</p><h3>2. Использование функции array_push()</h3><p>Функция array_push() позволяет добавить один или более элементов в конец массива. Синтаксис функции следующий: array_push($array, $element1, $element2, ...).</p><h3>3. Использование оператора +=</h3><p>Еще одним способом является использование оператора +=, который объединяет два массива. Если левым операндом является пустой массив, то элементы будут добавлены в конец массива</p><h2>Как удалить последний элемент массива PHP</h2><h3>1. Функция array_pop()</h3><p>В результате выполнения этого кода последний элемент (“5”) будет удален из массива, а значение этого элемента будет сохранено в переменной `$lastElement`</p><h3>2. Функция unset()</h3><p>При использовании функции unset() вы указываете индекс последнего элемента массива, который нужно удалить, используя count($myArray) - 1. Это вычисляет индекс последнего элемента массива.</p><h3>3. Оператор array_slice()</h3><p>Оператор array_slice() возвращает часть массива, начиная с индекса 0 и заканчивая индексом -1 (или индексом последнего элемента минус единица). В результате получается массив без последнего элемента.</p><h3>4. Функция array_splice()</h3><p>Функция array_splice() изменяет исходный массив, удаляя элементы, начиная с указанного индекса. В данном случае мы указываем индекс -1, чтобы удалить последний элемент массива.</p><h2>Получение длины массива в PHP</h2><h3>1. Функция count()</h3><p>Функция count() возвращает количество элементов в массиве. В результате выполнения этого кода переменная $length будет содержать длину массива, то есть значение “5”.</p><h3>2. Оператор sizeof()</h3><p>Оператор sizeof() работает аналогично функции count() и также возвращает количество элементов в массиве.</p><h3>3. Функция arraycountvalues()</h3><p>Функция array_count_values() возвращает ассоциативный массив, где ключами являются уникальные значения из исходного массива, а значениями – количество вхождений каждого значения.</p><p>В данном случае мы используем count() для получения длины ассоциативного массива, чтобы узнать количество уникальных значений в исходном массиве.</p><h3>4. Цикл foreach</h3><p>Мы итерируемся по каждому элементу массива с помощью цикла foreach и увеличиваем переменную $length на 1 для каждого элемента. В результате выполнения этого кода длина массива будет сохранена в переменной $length.</p><h2>Как проверить наличие элемента массива в PHP</h2><h3>1. Оператор in_array()</h3><p>Оператор in_array() проверяет, содержится ли указанный элемент в массиве. В этом примере переменная $exists будет содержать значение true, так как элемент `3` содержится в массиве $myArray.</p><h3>2. Функция array_search()</h3><p>Функция array_search() возвращает индекс элемента в массиве, если он найден. Если элемент не найден, функция возвращает false.</p><p>В данном случае мы проверяем, не равен ли индекс false, чтобы определить, содержится ли элемент в массиве.</p><h3>3. Функция array_key_exists()</h3><p>Функция array_key_exists() проверяет, содержится ли указанный ключ в массиве. В этом примере переменная $exists будет содержать значение true, так как ключ 'key2' существует в массиве $myArray.</p><h3>4. Оператор isset()</h3><p>Оператор isset() проверяет, определен ли указанный элемент или ключ в массиве. В данном случае переменная $exists будет содержать значение true, так как элемент с ключом 'key2' определен в массиве $myArray.</p><h2>Как выполнить обход массива в PHP и вывести его элементы</h2><h3>1. Цикл for</h3><p>В этом примере мы используем цикл for, чтобы пройти через каждый индекс массива и вывести его элементы. Код echo $myArray[$i] . ", "; выводит каждый элемент массива, за исключением последнего, и добавляет запятую после каждого элемента.</p><h3>2. Цикл foreach</h3><p>Цикл foreach автоматически итерирует по каждому элементу массива и выполняет указанные действия для каждого элемента. В этом примере мы выводим каждый элемент массива, добавляя запятую после каждого элемента.</p><h3>3. Цикл while с использованием функций current() и next()</h3><p>С помощью функции reset() мы устанавливаем указатель текущего элемента массива в начало. Затем, с помощью цикла while, мы получаем текущий элемент с помощью функции current(), выводим его и перемещаем указатель на следующий элемент с помощью функции next(). Цикл продолжается до тех пор, пока есть элементы в массиве.</p><h2>Как выполнить слияние массивов в PHP</h2><h3>1. Оператор "+"</h3><p>Оператор + объединяет элементы обоих массивов, и дубликаты удаляются, чтобы сохранить только уникальные значения.</p><p>Вывод:</p><h3>2. Функция arraymerge()</h3><p>Функция arraymerge() объединяет элементы обоих массивов в новый массив, сохраняя исходные ключи. Если есть одинаковые ключи, то значение из второго массива заменит значение из первого массива.</p><p>Вывод:</p><h3>3. Оператор "…" в PHP 7.4 и более поздних версиях</h3><p>С помощью оператора ... (spread operator) мы можем распаковать элементы массивов и объединить их в новый массив.</p><p>Вывод:</p><h3>4. Функция arraymergerecursive()</h3><p>Функция arraymergerecursive() объединяет элементы обоих массивов в новый массив, сохраняя все значения в виде массивов, если ключи совпадают.</p><p>Вывод:</p><h2>Как сортировать массив в PHP</h2><h3>1. Функция sort()</h3><p>Функция sort() сортирует массив в порядке возрастания, переиндексируя элементы массива.</p><p>Вывод:</p><h3>2. Функция rsort()</h3><p>Функция rsort() сортирует массив в порядке убывания, переиндексируя элементы массива.</p><p>Вывод:</p><h3>3. Функция asort()</h3><p>Функция asort() сортирует массив в порядке возрастания, сохраняя связь ключей и значений.</p><p>Вывод:</p><h3>4. Функция arsort()</h3><p>Функция arsort() сортирует массив в порядке убывания, сохраняя связь ключей и значений.</p><p>Вывод:</p><h3>5. Функция ksort()</h3><p>Функция ksort() сортирует массив по ключам в порядке возрастания, сохраняя связь ключей и значений.</p><p>Вывод:</p><h3>6. Функция krsort()</h3><p>Функция krsort() сортирует массив по ключам в порядке убывания, сохраняя связь ключей и значений.</p><p>Вывод:</p><h2>Заключение</h2><p>Массивы в PHP играют ключевую роль в хранении и управлении данными.</p><p>Благодаря разнообразию типов массивов разработчики могут эффективно структурировать данные. Операции над массивами позволяют динамически работать с данными и преобразовывать их согласно требованиям проекта.</p><p>Надеемся, шпаргалка оказалась полезной вам, и вы узнали много нового.</p><p>Напишите в комментариях, если эта статья помогла вам. Также укажите, чего в ней может не хватать, чем можно дополнить материал или какие новые статьи по PHP нам стоит опубликовать. Мы будем рады обратной связи. 🙂</p>]]></content:encoded>
    </item>
    <item>
      <title>4 причины, по которым Symfony лучше Laravel</title>
      <link>https://tproger.ru/articles/4-prichiny-po-kotorym-symfony-luchwe-laravel</link>
      <comments>https://tproger.ru/articles/4-prichiny-po-kotorym-symfony-luchwe-laravel?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Вика Овсянникова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/4-prichiny-po-kotorym-symfony-luchwe-laravel</guid>
      <description><![CDATA[<p>И у Symfony, и у Laravel есть свои достоинства и недостатки. В этой статье разбираем, почему Symfony больше подходит для больших проектов.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/4-prichiny-po-kotorym-symfony-luchwe-laravel">4 причины, по которым Symfony лучше Laravel</a>»</p>]]></description>
      <category><![CDATA[Веб-разработка]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[PHP]]></category>
      <category><![CDATA[Laravel]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 05 Oct 2023 08:25:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Сразу спойлер: в Laravel есть фишки, которых нет у Symfony. Обилие интеграций, нестандартные библиотеки, та же «магия» может обернуться достоинством. Мы же разберём, почему Symfony больше подходит для программистов, которые работают с обширной кодовой базой.</p><h2>Скорость</h2><p>Основа современного фреймворка — это DI-контейнер, отвечающий за внедрение зависимостей.</p><p>В Symfony есть этап компиляции DI-контейнера, который происходит один раз, как правило, во время деплоя или первого запроса. В Laravel определение зависимостей происходит динамически через рефлексию при каждом запросе. Так, кода становится больше, особенно если в команде много разработчиков.</p><p>Кроме того, в Symfony по умолчанию используется <a href="https://www.doctrine-project.org/projects/orm.html">Doctrine ORM</a>, которая оптимизирует запросы изменения баз данных. Обновление происходит один раз, и все изменения (удаление, добавление, корректировка записей) проводятся пачками. То есть при изменении одной, 100, 500 или 1 тыс. записей механика не изменится.</p><p>В Laravel можно добиться того же эффекта, но об этом нужно будет явно позаботиться.</p><p>Фреймворк использует Eloquent ORM с моделью ActiveRecord и по умолчанию работает с одной записью. При изменениях придётся создавать массив на каждую запись и использовать отдельные наборы методов, будь то массовое обновление или вставка новых записей.</p><p>С таким кодом время выполнения скрипта растёт, когда нагрузка становится большой и возникает необходимость оперировать тысячами записей.</p><h2>Стабильность</h2><p>Symfony <a href="https://symfony.com/doc/current/contributing/code/bc.html">обещает</a> не ломать обратную совместимость и соблюдать Semver, Laravel — нет. А в долгоживущих приложениях это одна из самых важных фич (если не самая). Благодаря ей, при обновлении кодовой базы мы будем уверены, что новая мажорная версия ничего не сломает, и сможем без страха обновить фреймворк и все пакеты экосистемы.</p><p>Кроме того, версии Symfony имеют Long-Term Support Release (выходят раз в два года). Багфиксы приходят в течение трёх лет после релиза, а обновления безопасности — в течение четырёх. Так, если мы фокусируемся на развитии продукта, редко обновляем фреймворк и чиним сопутствующие баги, то LTS Symfony — это наш путь. Достаточно обновиться до последней минорной версии.</p><p>Мы переезжали с LTS 4.4 сначала на 5.3, потом на 5.4, и всё прошло гладко.</p><p>У Laravel последняя версия с LTS — шестая (притом что уже вышла десятая). Шестая, седьмая и восьмая мажорные версии вышли с разницей полгода. И каждый раз обновлять их посреди большого проекта с кучей кода — было очень нетривиальной и дорогой задачей. Возникали проблемы с обновлением пакетов, связанные с конкретной версией фреймворка. Но без него стоимость выросла бы в разы.</p><h2>Меньше «магии»</h2><p>В Symfony используется концепция маппинга данных на «сущности» — данные в чистом виде, без дополнительной логики. То есть мы можем явно указать тип — и быть уверенными, что получим только его.</p><p>Связи между сущностями явно и декларативно указываются в атрибутах. И это тоже добавляет прозрачности.</p><p>В Laravel много «магии». Основной её поставщик — Eloquent. Покажу на примерах.</p><ul><li>Так создаётся атрибут $this-&gt;user:</li></ul><ul><li>Так задаются связи. Удобно, если не нужно указывать названия ключей:</li></ul><ul><li>Так выглядит кастинг типов:</li></ul><ul><li>Чтобы была возможность создавать через new, нужно явно задать свойство:</li></ul><p>В IDE все свойства таких моделек не видны, и нужно явно прописывать @property для всех и вся.</p><p>Не забывайте добавлять запись на каждое свойство, иначе IDE не сможет подсказывать.</p><ul><li>Явной валидации типов свойств также нет. Можно использовать кастинг типов, чтобы преобразовывать строки с цифрами в булевый формат.</li></ul><p>Это всё повышает порог входа в разработку на Laravel.</p><h2>Стандарт индустрии</h2><p>На Symfony пишут:</p><ul><li>Skyeng,</li><li>«Яндекс.Еда»,</li><li>«СберЛогистика»</li></ul><p>и ещё куча компаний. То есть специалист со знанием фреймворка точно будет востребован.</p><p>На Laravel пишут e-com проекты, например, в AGIMA. Сам сайт Laravel написан на Laravel, а ещё на нём работает Canva. Но чаще его выбирают для стартапов и если нужно прописывать много интеграций с внешним миром.</p><h2>В каких случаях выбирают Symfony</h2><ul><li>Когда в проекте важнее внутренняя логика и не предусмотрено множество интеграций — потому что Symfony стабильнее.</li><li>Когда проект большой, разработчиков много и нужно, чтобы у всех были плюс-минус одинаковые знания — потому что в Symfony используются стандартные решения из коробки.</li></ul><p>Но если компания может позволить себе много дорогих, опытных разработчиков, которых не нужно подгонять под условия работы, то и на Laravel получится быстро написать бизнесовую логику.</p>]]></content:encoded>
    </item>
    <item>
      <title>Как организовать код в Laravel. Опыт PHP-разработчика Amiga</title>
      <link>https://tproger.ru/articles/kak-organizovat-kod-v-laravel-lichnyj-opyt-php-razrabotchika-amiga</link>
      <comments>https://tproger.ru/articles/kak-organizovat-kod-v-laravel-lichnyj-opyt-php-razrabotchika-amiga?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Типичный Программист]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kak-organizovat-kod-v-laravel-lichnyj-opyt-php-razrabotchika-amiga</guid>
      <description><![CDATA[<p>Как организовать свой код в проектах, использующих Laravel. Рассмотрим практики организации кода проекта для начинающих разработчиков.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kak-organizovat-kod-v-laravel-lichnyj-opyt-php-razrabotchika-amiga">Как организовать код в Laravel. Опыт PHP-разработчика Amiga</a>»</p>]]></description>
      <category><![CDATA[Веб-разработка]]></category>
      <category><![CDATA[PHP]]></category>
      <category><![CDATA[Организация разработки]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 05 Sep 2023 13:00:32 GMT</pubDate>
      <content:encoded><![CDATA[<p>Hola Amigos! На связи Евгений Шмулевский, PHP-разработчик в Amiga. Начал заниматься программированием с 2001 года, привет Basic и Express/Turbo Pascal. Веб-разработкой — с 2011 года, а профессионально в вебе с 2013 года. Работал продолжительное время с Битрикс, а с 2018 начал осваивать Laravel.</p><figure><img src="https://media.tproger.ru/user-uploads/64562/2023-09-05/e0823016-f483-4ba6-881f-f19c47cd7ac5.png" alt="" /></figure><p>В посте я расскажу, как организую свой код в проектах, использующих Laravel. Решил немного структурировать, с чем удалось познакомиться после перехода в мир фреймворков из мира чудного (ударение можете сами поставить) Битрикс. Многие вещи стали для меня открытием и особенно переоткрыл для себя ООП. Начнем рассмотрение с практик организации кода проекта. Статья адресована начинающим разработчикам.</p><p>Давайте посмотрим, какие есть подходы к организации кода.</p><h2>Организация кода в контроллерах</h2><p>Когда я начал изучать Laravel (до этого еще знакомился с Zend/Yii/Phalcon), то писал всю бизнес логику в контроллерах. Так сделал пару своих пет-проектов (своя LMS, и CRM для HR) и особенно плохого в этом ничего не видел.</p><p>Действительно, организация кода в контроллерах является наиболее быстрым решением, но имеет ряд недостатков:</p><ul><li>сложность переиспользования кода;</li><li>вносит некоторую запутанность в код, т.к. у контроллера появляется множество ответственностей, помимо его основной роли;</li><li>читать и отлаживать код состоящий из большого количества строк достаточно проблематично (напомню, что вся бизнес логика в контроллерах);</li><li>из первых 2-х пунктов вытекает третий с проблемами масштабирования.</li></ul><p>Почему же этот подход остается популярным? Первая причина — это то, что во время изучения фреймворка во многих курсах преподается данный подход, т.к. его легче усваивать. И далее уже разработчик идет по накатанной. Вторая причина — то, что данный подход прост в реализации и подходит для небольших приложений.</p><h2>Использование команд (actions)</h2><p>Далее познакомился с подходом с использованием команд.  Команда — выполнение некоторого ОДНОГО действия. В таком случае бизнес-логика выносится в отдельный класс-команду.</p><p>В некоторых проектах сталкивался с тем, что весь код был вынесен из контроллера в команду просто через copy-paste. На входе у такого action объект Request. Считаю, что при использовании команд разработчику следует отвязаться от Request, либо через параметры, либо через DTO (о DTO напишу чуть ниже). Это позволяет использовать action вне контроллера и не зависеть от Request.</p><p>Второй момент, класс команды должен быть разбит на небольшие методы. Это позволит легче поддерживать код в будущем. Примеры наименования команд:</p><ul><li>AuthAction</li><li>RegisterAction</li><li>StoreCommentAction</li></ul><p>Ниже пример использования Action в упрощенном варианте (далее посмотрим, как сделать лучше):</p><figure><img src="https://media.tproger.ru/user-uploads/64562/2023-09-01/7b35dd36-f34a-467f-be85-4fb0e1b5e18c.png" alt="" /></figure><ol><li>Controller обращается к action передавая DTO на вход.</li><li>Action обрабатывает данные и возвращает ResultDTO, либо ничего.</li><li>Грубо говоря, мы весь код из контроллера вынесли в action и поделили на методы.</li></ol><h2>Использование сервисов (services)</h2><p>Дальнейшее изучение вопроса навело меня на Сервисы. С понятием «сервиса» я познакомился, изучая <a href="https://laraveldaily.com/course/structure-laravel-projects">курс от Povilas Korop «How to Structure Laravel Projects»</a>.</p><p>Сервис, в отличии от action, может иметь несколько методов и является более крупным строительным блоком. Маттиас Нобак в книге «Объекты. Стильное ООП» приводит такое определение: сервисы — объекты, которые либо выполняют задачу, либо предоставляют информацию. Также автор отмечает, что сервисы не хранят свое состояние, т.к. для повторного использования сервиса придется заново его инициализировать, сбрасывая состояние.</p><p>Также сервисы могут реализовывать интерфейсы и внедряться через интерфейс. Сервис также как и команда должен иметь единственную ответственность.</p><p>Ниже схема использования сервисов:</p><ol><li>Controller обращается к Service/Repository передавая DTO на вход (либо просто параметры, если их количество менее 3).</li><li>Service обрабатывает данные и возвращает ResultDTO, либо ничего.</li><li>Service может внутри себя использовать другие Services (расчеты и сохранение данных) и Repository (выборка).</li></ol><figure><img src="https://media.tproger.ru/user-uploads/64562/2023-09-01/25099e0e-d647-47bc-9288-d8c3bd0ab3bc.png" alt="" /></figure><p>Если нам необходима просто выборка, то можно не использовать сервисы, а обращаться напрямую к классу репозитория.</p><figure><img src="https://media.tproger.ru/user-uploads/64562/2023-09-01/888725e9-2c2d-42ca-9f73-1b49d5190e44.png" alt="" /></figure><h2>Использование паттерна репозиторий</h2><p>С репозиториями также познакомился на курсе от Povilas Korop. Паттерн репозиторий служит цели отделить логику работы с БД от бизнес-логики приложения. Лично для себя выделяю основной плюс в переиспользовании методов выборки. Примерами методов репозитория могут быть такие названия методов как:</p><ul><li>getById()</li><li>getSellers</li><li>getUserList()</li><li>etc</li></ul><p>Также репозиторий может использоваться для create/update/delete операций. Я предпочитаю в репозиторий выносить только все операции выборки, а для операций изменяющих БД использую сервисы.</p><p>Плюсы паттерна:</p><ul><li>достаточно просто переиспользовать код;</li><li>простота миграции на другие БД (на практике мной не встречалось), т.к. у нас есть дополнительный слой абстракции.</li></ul><h2>Использование DTO</h2><p>Еще один кирпичик это DTO, те специальный тип объекта предназначенный для передачи данных между другими объектами. Чаще всего DTO имеют набор публичных полей и методы для своего создания.</p><p>В чем плюсы использования DTO:</p><ul><li>type-hint;</li><li>инкапсуляция;</li><li>разделение слоев приложения;</li><li>модификация данных.</li></ul><p>DTO могут создаваться через обычный конструктор, либо через вызова метода который возвращает сам DTO. Примерами может служить вызов:</p><ul><li>UserDTO::fromRequest($request)</li><li>UserDTO::fromArray($data)</li></ul><p>Начиная с php 8.0, можно задавать свойства прямо в конструкторе, определяя область видимости. Также для облегчения создания DTO есть пакет от spatie.</p><h2>Складываем все вместе</h2><p>Теперь посмотрим, как в приложении используются все вышеперечисленные блоки. Ниже примерная схема взаимодействия (читается справа налево).</p><figure><img src="https://media.tproger.ru/user-uploads/64562/2023-09-01/498d32ac-5096-4715-9c42-c07d9e64ebd5.png" alt="" /></figure><ol><li>Controller обращается к action передавая DTO на вход.</li><li>Action обрабатывает данные и возвращает ResultDTO, либо ничего.</li><li>Action может внутри себя использовать Services (расчеты и сохранение данных) и Repository (выборка), о них подробнее ниже.</li><li>Может быть вариант не использовать Repository непосредственно внутри Action, а вызывать только из Service, но считаю это излишним усложнением.</li></ol><h2>Организация структуры проекта</h2><p>Немного слов о структуре. Поначалу пользовался штатным подходом, как изначально рекомендует нам документация Laravel. Проект разбивается на папки, которым соответствует функционал хранящихся в них классов. Типичная структура Laravel проекта:</p><figure><img src="https://media.tproger.ru/user-uploads/64562/2023-09-01/07fd98eb-c06d-4a80-b2e9-1e4c037a0a8a.png" alt="" /></figure><p>Данный подход хорош для быстрой разработки небольших приложений. В противовес этому подходу существует подход в организации классов, используя модули.</p><p>В идеальном случае, модуль — это независимая часть бизнес-логики. При модульной организации кода структура у нас получается примерно следующей:</p><figure><img src="https://media.tproger.ru/user-uploads/64562/2023-09-01/c8deb548-0dfd-4159-98d8-4a3cd34ad84e.png" alt="" /></figure><p>Код разбивается, исходя из логики принадлежности к Домену. Есть также упрощенный вариант, когда Controllers не выносится в папку с модулями, а остается в изначальной директории app/Http/Controllers.</p><p>Плюсами данного подхода является:</p><ul><li>Проще переиспользовать код на других проектах. При необходимости переносится модуль целиком и подключается на новом проекте.</li><li>У кода меньше зависимостей, т.к. модули имеют минимум связей.</li><li>Разные модули могут разрабатывать разные разработчики.</li><li>Проще в поддержке и масштабировании.</li></ul><p>Минусы:</p><ul><li>Основным минусом является увеличение количества директорий.</li><li>Возможно допустить ошибку при разделении кода на модули. И в будущем придется рефакторить данный код.</li></ul><h2>Мой способ организации кода</h2><ol><li>Классы находятся в папке app и разбиты по модулям. Каждый модуль относится к определенной сущности либо бизнес-процессу.</li><li>Для выборок данных использую паттерн репозиторий.</li><li>Бизнес-логика и операции создания/изменения моделей выношу в сервис-классы. Сервис классы не хранят свое состояние, что позволяет их переиспользовать без повторной инициализации.</li><li>Для того чтобы не зависеть от Request в сервисы передаю либо одиночные параметры, либо DTO. Это позволяет переиспользовать код вне контроллеров (например, команда создания нового пользователя и т.д.).</li><li>Стараюсь, чтобы модели оставались максимально тонкими. В основном содержат в себе связи (relations).</li><li>Контроллеры остаются на своих местах, но создаю папку согласно наименованию модуля.</li><li>Для создания объектов на лету использую статическую фабрику (static factory).</li><li>Если используем сервис, и он выполняет единственное действие.</li><li>Как именую методы:</li></ol><ul><li>getSomething — получение информации. Важный момент — отсутствие side эффектов.</li><li>isSomething — метод для проверки, должен возвращать.</li></ul><p>Вот основная логика организации проекта. Для примера создал на <a href="https://github.com/shmoulevsky/laravel-app-example">github</a> репозиторий с примером простого проекта (авторизация + выборка сущностей) организованный по модулям. Его можно использовать в качестве шаблона для новых проектов. Надеюсь, будет полезно!</p>]]></content:encoded>
    </item>
  </channel>
</rss>