<?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>IDE</title>
    <description>Информация для тех, кто использует notepad.exe — новости о развитии сред разработки и плагины для популярных IDE.</description>
    <link>https://tproger.ru/tag/ide</link>
    <atom:link href="https://tproger.ru/tag/ide/feed" rel="self" type="application/rss+xml"/>
    <lastBuildDate>Mon, 28 Sep 2026 21:45:06 GMT</lastBuildDate>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>12</sy:updateFrequency>
    <image>
      <title>IDE</title>
      <link>https://tproger.ru</link>
      <url>https://tproger.ru/apple-touch-icon.png</url>
    </image>
    <item>
      <title>AI пишет, AI проверяет: почему уязвимости появляются пачками и как понять, какие из них настоящие</title>
      <link>https://tproger.ru/articles/ai-piwet-ai-proveryaet-pochemu-uyazvimosti-poyavlyayutsya-pachkami-i-k</link>
      <comments>https://tproger.ru/articles/ai-piwet-ai-proveryaet-pochemu-uyazvimosti-poyavlyayutsya-pachkami-i-k?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Ислам Виндижев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/ai-piwet-ai-proveryaet-pochemu-uyazvimosti-poyavlyayutsya-pachkami-i-k</guid>
      <description><![CDATA[<p>Почему генеративный код порождает уязвимости пачками, как разбирать поток сработок SAST с помощью локальных LLM и не терять реальные уязвимости.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/ai-piwet-ai-proveryaet-pochemu-uyazvimosti-poyavlyayutsya-pachkami-i-k">AI пишет, AI проверяет: почему уязвимости появляются пачками и как понять, какие из них настоящие</a>»</p>]]></description>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Конференции]]></category>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[Искусственный интеллект]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 18 Sep 2026 05:05:48 GMT</pubDate>
      <content:encoded><![CDATA[<p>За пару лет вопрос «умеет ли модель писать код» перестал быть интересным. Умеет. Ассистент в IDE стал такой же частью рабочего окружения, как линтер, а агент, который берёт задачу целиком и сам ходит по репозиторию, — уже не демо с конференции, а рабочий инструмент. Спорить осталось не о способностях, а о последствиях.</p><p>Одно из последствий обсуждают заметно меньше остальных. Код стали писать быстрее, а проверять — с той же скоростью, что и раньше. Ревью делает человек. Разбор находок статического анализатора делает человек. Решение «это настоящая уязвимость или ложное срабатывание» — тоже человек, и стоит оно вполне конкретных минут рабочего времени. В итоге узкое место переехало: генератор кода работает круглосуточно, а проверка — по восемь часов пять дней в неделю.</p><figure><img src="https://media.tproger.ru/user-uploads/133609/2026-09-18/df6d3a6f-dae9-41ef-995b-dd5f6bb0fb79.webp" alt="" /></figure><p>Дальше всё развивается предсказуемо. Раз разобрать поток руками невозможно, на разбор ставят языковую модель — ту же технологию, которая этот поток и создала. AI пишет код, AI ищет в нём уязвимости, AI решает, какие из находок настоящие. И остаётся вопрос: как понять, что модель не ошиблась, если проверять её ответ, вообще-то, тоже некому.</p><p>Эту проблематику подробно разбирали на <a href="https://offzone.moscow/" rel="nofollow">OFFZONE</a> — конференции по практической кибербезопасности, которая прошла в Москве 20–21 августа. Среди тем докладов — применение ИИ для поиска уязвимостей и анализа результатов, автоматизация задач специалистов и новые риски, которые возникают вместе с этими возможностями. Два выступления особенно точно продолжили разговор о том, что происходит, когда в цепочку поиска и проверки уязвимостей всё активнее включается AI. Мы попросили их авторов подробнее прокомментировать эту тему.</p><p><b>Дмитрий Абрамов</b> занимается уязвимостями, которые приносит генеративный код: что именно ломается, когда код пишет агент. <b>Юрий Туманов</b> отвечает за вторую половину задачи — за разбор находок. Он строит на локальных языковых моделях триаж сработок SAST: статический анализатор просматривает код и выдаёт список подозрительных мест (это и есть сработки), а триаж — разбор этого списка на настоящие уязвимости и ложные срабатывания.</p><p>Каждый из них говорил про свою часть работы. Но в двух местах они, не сговариваясь, сказали почти одно и то же — об этом в конце.</p><h2>Находок стало больше. Но не только из-за уязвимостей</h2><p>Начну с оговорки, без которой дальше легко скатиться в панические настроения.</p><p>Да, поток находок вырос в несколько раз. Но объяснять это только дырявым машинным кодом неправильно, и Дмитрий сразу это проговаривает:</p><p>«Рост находок в несколько раз больше. Но я бы это связал, в первую очередь, с ростом количества строк кода из-за скорости написания кода, перестройки паттернов сканеров и периода внедрения новых сканеров».</p><figure><img src="https://media.tproger.ru/user-uploads/133609/2026-09-18/7fb267d2-fbac-4591-85ce-7aea51a3465a.webp" alt="" /></figure><p>То есть часть роста — это не новая опасность, а новая видимость. Строк стало больше, потому что их стали быстрее писать. Правила сканеров перестроили. Подключили инструменты, которые раньше в эти места не смотрели.</p><p>Но команде, которая разбирает эту очередь, от такого объяснения не легче: откуда бы ни взялся рост, вручную столько находок всё равно не обработать. И дело не только в количестве — изменилось ещё и то, как эти находки приходят.</p><h2>Три механизма, из-за которых дефекты идут пачками</h2><p>Это, по словам Дмитрия, главное практическое отличие генеративного кода. Раньше уязвимость была разовым событием: кто-то один раз ошибся в одном месте. Теперь ошибка тиражируется.</p><p>Первый механизм — шаблонный. Агент подобрал способ решения и применяет его везде, где видит похожую задачу:</p><p>«Агент применяет один шаблон ко всем похожим местам — если шаблон дефектный, дефект тиражируется».</p><p>Второй — конфигурационный. Ошибка лежит не в коде, а уровнем выше: «если ошибка сидит в правилах или в контекстном файле, то она размножается на весь репозиторий». Одна неточная инструкция отрабатывает в каждой задаче, за которую агент берётся.</p><p>Третий механизм Дмитрий Абрамов называет самым коварным:</p><p>«Агент берёт за образец существующий код. Если в репозитории уже есть уязвимый паттерн, он его подхватывает и воспроизводит. Получается самоусиление: одна старая ошибка становится стандартом де-факто».</p><p>Практический вывод отсюда простой. Чинить находки по одной бессмысленно. Если вы видите два десятка однотипных срабатываний, у них почти наверняка один источник: шаблон, правило или пример, который уже лежит в репозитории. Разбираться нужно с источником, а не с каждой строчкой в отчёте.</p><h2>Что ушло, что пришло</h2><p>Набор дефектов заметно изменился. Меньше стало синтаксических ошибок и простых логических багов. Отдельная история — SQL-инъекции: их стало «заметно меньше просто потому, что модель почти всегда тянет ORM». Не из соображений безопасности, а потому что так написано в большинстве примеров, на которых модель училась.</p><p>Вместо них выросли пути эскалации привилегий, архитектурные дефекты, SSRF (когда сервер можно заставить сходить по адресу, который выбрал злоумышленник), отсутствие CSRF-защиты и security-заголовков. Плюс, как формулирует Дмитрий, «отсутствие понимания архитектуры приложения» — код, который сам по себе корректен, но не учитывает, как устроена система вокруг.</p><figure><img src="https://media.tproger.ru/user-uploads/133609/2026-09-18/d3247ec2-9a37-4316-8dbd-ca5e8e1c2bef.webp" alt="" /></figure><p>Причину он называет одну:</p><p>«Но все эти ошибки чаще всего проскакивают из-за недостаточности контекста, передаваемого агенту».</p><p>Часть проблем лечится буквально этим. Заголовки и CSRF в его команде почти исчезли после того, как добавили то, что они назвали «ИБ-контекстом». Модель не отказывалась делать безопасно — ей просто не сказали, что от неё этого ждут.</p><p>А вот ролевая модель и бизнес-логика контекстом не лечатся. Здесь нужны ручные проверки или специфичные автотесты, а значит, снова человеческое время.</p><p>Кстати, он поправил саму постановку вопроса про слепые зоны:</p><p>«Слепыми называть неправильно, скорее было бы правильно — невнимательные».</p><p>Разница есть. Слепая зона — то, чего инструмент не видит в принципе. Невнимательность — то, что исправляется правильно поставленной задачей.</p><h2>Ошибки не в коде, а в поведении агента</h2><p>Есть категория проблем, которая не попадёт ни в один SAST, потому что это вообще не про код.</p><p>«Лишний вызов инструмента, преждевременное завершение задачи, „починил“ тест вместо кода, сфабрикованный отчёт о прогоне — как у Replit. Это не свойство кода, это свойство процесса, и статические анализаторы к нему не приспособлены по определению».</p><figure><img src="https://media.tproger.ru/user-uploads/133609/2026-09-18/1d0a10cd-6fd9-497b-9c10-69de5b5bb1ff.webp" alt="" /></figure><p>Эта мысль пригодится дальше. Модель, которая уверенно рапортует об успехе, — проблема не только на стороне написания кода, но и на стороне его проверки.</p><h2>Разбирать некому. Ставим на разбор модель</h2><figure><img src="https://media.tproger.ru/user-uploads/133609/2026-09-09/1251959c-ea32-4e75-b812-feb5fcebf100.webp" alt="" /></figure><p>Масштаб задачи у Юрия Туманова выглядит так: в агрегаторе, куда стекаются сработки всех анализаторов, накоплено больше миллиона записей. Решение одного аппсека — специалиста по безопасности приложений — по одной сработке стоит около пятнадцати рублей рабочего времени. Дальше можно умножать.</p><p>Напрашивается очевидное: спросить у модели, настоящая это уязвимость или ложное срабатывание. Спросить действительно можно.</p><p>«Спросить можно, и ответ придёт мгновенно — складный, развёрнутый, уверенный».</p><p>У него в докладе есть слайд, который так и называется: «Складно ≠ доказано».</p><h2>Почему прямой вопрос не работает</h2><figure><img src="https://media.tproger.ru/user-uploads/133609/2026-09-09/79a31c59-0d62-4b3c-8c26-f94091fb87c3.webp" alt="" /></figure><p>Причин три.</p><p>Уверенность модели ничего не значит. Модель на семь миллиардов параметров — класс «умной автодополнялки» — на прямой вопрос подтверждает почти половину сработок и выдаёт целые серии с уверенностью 1.0.</p><p>«Само-оценка модели без внешней калибровки театральна, опираться на неё нельзя».</p><p>Формулировка вопроса определяет ответ. Куда модель натаскали при обучении, туда она и копает. Универсальная рамка «найди источник и сток» — то есть место, где данные попадают в приложение, и место, где они используются в опасной операции, — хорошо работает на цепочечных дефектах. И не работает там, где никакой цепочки нет: захардкоженный пароль или слабый алгоритм шифрования видно по одной строке.</p><figure><img src="https://media.tproger.ru/user-uploads/133609/2026-09-09/7c7f99bb-bf85-4eb2-9ad2-06959e80cf92.webp" alt="" /></figure><p>«Универсальная рамка „найди источник и сток“ на дефектах-„свойствах“ хоронит реальное: на одном моём замере неудачная постановка вопроса похоронила 140 реальных сработок из 363».</p><p>У прямого вопроса нет метрик. Без размеченного эталона — набора сработок, по которым заранее известны правильные ответы, — неизвестно ни какая доля подтверждений оказалась правдой, ни какую долю реальных дефектов модель вообще поймала. Остаётся верить ей на слово.</p><p>Здесь стоит остановиться. У Дмитрия дефект проскакивает, потому что агенту недодали контекста. У Юрия модель хоронит реальную сработку, потому что ей задали не тот вопрос и не показали нужный кусок кода. В обоих случаях дело не в модели.</p><h2>Модель предполагает, правила решают</h2><p>Главное, что стоит понять про систему Юрия: последнее слово в ней принадлежит не модели. Порядок такой — модель предполагает, улики подтверждают, правила проверяют. Сам по себе вердикт модели не закрывает ничего.</p><p>Второе — сработки разделены на два сорта, и доказываются они по-разному.</p><p>Уязвимость-свойство. Опасен сам факт в коде: пароль в исходниках, слабый хеш, слишком открытые права. Вопрос ровно один — настоящий секрет или заглушка. Никакого пути данных здесь нет и быть не должно. Таких сработок в потоке подавляющее большинство, около 93%.</p><p>Для них выстроена лестница проверок, и модель на ней — лишь одна из ступеней. Сначала работает алгоритмика без всякой LLM: ключ в формате боевого AWS — сразу подтверждаем, файл сгенерированный или из SBOM — сразу ложное срабатывание. Это снимает больше половины шума и не стоит ни одного обращения к модели. Дальше вопрос уходит модели, но задаётся по сути факта. Потом больше сотни детерминированных правил проверяют её ответ и могут вердикт поправить. Потом пороги по классам: слабый ответ превращается в Unknown. Последняя ступень — человек. Отдельным правилом запрещена сама формулировка «не вижу пути атаки» как причина закрытия: именно на ней система и теряла те самые 140 сработок из 363.</p><p>Уязвимость-путь. Здесь опасен маршрут данных: SQL-инъекция, XSS, обход каталогов. Вопрос другой — дошли ли данные атакующего до опасного вызова и была ли по дороге защита. Вот для этого типа и сделан evidence gate.</p><h2>Evidence gate: перечисли факты — вердикт выведется сам</h2><p>Идея в том, чтобы не спрашивать у модели вердикт вообще. Сначала она обязана заполнить таблицу фактов по жёсткой схеме: найти настоящий sink — строку, где реально выполняется опасный вызов (сканер её часто теряет); перечислить каждую переменную запроса — откуда пришла, какой строкой, была ли по дороге защита; выписать список незащищённых переменных.</p><p>И только потом вердикт вычисляется из этой таблицы механически. Список не пуст — уязвимость подтверждена. Пуст, и происхождение всех переменных известно — ложное срабатывание. Улики повреждены — Unknown, пусть смотрит человек. Переопределять этот результат собственной интуицией модели прямо запрещено.</p><figure><img src="https://media.tproger.ru/user-uploads/133609/2026-09-09/547f987f-821f-46b9-8dae-9201600723cb.webp" alt="" /></figure><p>Держится всё на двух подпорках. Первая — порядок полей в ответе: сначала дословные цитаты из кода, потом вывод. Схема зафиксирована на уровне формата, пропустить шаг физически нельзя. Одна только перестановка полей подняла долю верно закрытых ложных срабатываний больше чем вдвое.</p><p>Вторая — проверка цитат. Каждая цитата должна дословно найтись в том коде, который модели выдали. Не нашлась — ответ бракуется целиком. Проверка не лишняя: в первом же эксперименте десятая часть вердиктов ссылалась на строки, которых в выданном фрагменте вообще не было. Модель «вспоминала» несуществующий код.</p><p>«Придумать вывод легко, придумать проверяемую улику сложно. &lt;…&gt; Фактам — да, поэзии — ни-ни».</p><p>Unknown в этой схеме — не сбой, а штатный ответ и часть защиты. Система обязана его выдать, если не определён источник или сток трассы — цепочки, по которой анализатор проследил путь данных через код; если виден только фрагмент без окружающего кода; если непонятно, тест это или бой; если не видно значение переменной. На главном замере через Unknown человеку ушло 370 сработок, и реальных уязвимостей среди них не оказалось ни одной. То есть механизм отработал ровно так, как задумывался.</p><p>И снова всё упирается в контекст. Чаще всего система отвечает «недостаточно данных» по одной причине: трасса слишком короткая. Модель видит место, где переменная попадает в опасный вызов, но не видит, откуда эта переменная пришла и проверяли ли её по дороге. Лечится это не увеличением окна и не моделью побольше, а доставкой недостающего кода. Юрий пробовал 72B через внутренний портал и получил обратный результат:</p><p>«Дисциплина важнее размера».</p><p>Решение, какому классу дефектов доверить автозакрытие, принимают не на глаз, а по результатам замера. Для каждого класса отдельно берут около сотни сработок, по которым уже есть решения живых аппсеков, и сравнивают: что по этим же сработкам сказала модель и что сказали люди. Совпало — класс допускают до автомата, нет — он продолжает ходить к человеку.</p><p>Дальше система работает на реальном потоке. Там она закрывает чуть больше половины очереди, и ни одной пропущенной уязвимости за ней пока не зафиксировали. Расплата за такую осторожность — около двухсот перестраховок: сработок, по которым система могла бы вынести вердикт сама, но на всякий случай передала их человеку.</p><h2>Почему локально</h2><p>Приватность здесь не аргумент в споре, а входное условие: код, трассы и содержимое агрегатора за периметр не выходят. Облачный вариант отпал сразу.</p><p>Но у локального стенда есть и собственные плюсы, главный из них — воспроизводимость. Фиксированные веса и квантизация — сжатие модели до размера, который помещается в видеокарту, — дают повторяемые вердикты, а на этом держится еженедельная калибровка.</p><p>«Облачная модель обновляется без спроса, и вчерашний замер сегодня уже ни о чём».</p><p>Со стоимостью тоже всё сходится: одна игровая RTX 4080 разбирает около восьми тысяч сработок в сутки за электричество.</p><h2>История про токен</h2><p>Самая показательная часть доклада— не про метрики.</p><p>«Боевой GitLab-токен, модель с уверенностью 1.0 обозвала его „placeholder in test configuration“ — заглушкой в тестовом конфиге, — поверила пути файла и похоронила. Реальный секрет, закрытый автоматом».</p><p>Доверие команды после такого падает мгновенно:</p><p>«Тысяча правильных вердиктов проходит незамеченной, одну галлюцинацию запоминают все и надолго».</p><p>Вернуть его можно, но только механизмами — словам после такого уже не верят. Что сработало: ошибка превращается в регресс-тест, и команда видит, как система после неё изменилась. У каждого вердикта есть журнал с уликами и обоснованием, любой можно поднять и разобрать спустя месяц. Политику для классов с секретами ужесточили: там модель больше не закрывает сработки в одиночку. В поток подсадили канареек — намеренно внедрённые реальные дефекты, проверка на полноту. Стресс-тест показал, что часть из них закрывалась, и после него появились алгоритмические проверки самой логики решения.</p><p>«Доверие к автомату устроено как доверие к коллеге: ошибаться можно, прятать ошибки нельзя. Система, которая сама показывает промахи и после каждого меняется, доверие возвращает. Система, которая уверенно бормочет „всё хорошо“, теряет его навсегда».</p><h2>Где проходит граница</h2><p>Обоим спикерам был задан один и тот же вопрос: что бы вы не стали автоматизировать в ближайший год, даже если технически уже можно? Ответы стоит прочитать подряд.</p><p>Дмитрий Абрамов:</p><p>«У меня довольно чёткая граница, и она проходит не по сложности задачи, а по обратимости последствий и по возможности проверить результат. Не стал бы автоматизировать применение фиксов без человека. Черновик патча — отлично, автомерж в прод — нет, особенно в авторизации и криптографии».</p><p>Дальше в его списке — агент в промышленной среде, автоматическое закрытие тасок и автоматический перевод сработки в статус ложной. Последнее он оставляет как мнение модели, а не как решение.</p><p>Юрий Туманов отвечает про свою часть работы, но приходит к тому же. Автомат работает там, где улика видна прямо по артефакту, а полноту можно проверить канарейками. Цепочечные классы — SQL-инъекции, XSS, path traversal, всё, где нужно доказать путь данных через приложение, — идут к человеку: именно там небольшие модели выдают уверенные галлюцинации, а уверенный неверный вердикт обходится дороже, чем честный ответ «недостаточно данных». Необратимые действия без человека — ротация и отзыв секретов, блокировки, автопатчи с автомержем — тоже нет. И отдельно:</p><p>«Выбор допустимого риска и разметка эталона — решение людей с числами на столе. Эталон размечают люди: отдай его модели — и система начнёт сверяться сама с собой, по кругу».</p><p>Дмитрий и Юрий занимаются разными вещами. Один смотрит, как AI пишет код, второй — как AI этот код проверяет. Но границу автоматизации оба провели в одном месте, и правило у них получилось одинаковое: автоматизировать можно то, что потом можно проверить. Всё остальное — необратимые действия и всё, что зависит от контекста, которого не видно, — модель готовит, фильтрует и предлагает, но решает человек.</p><p>Совпало и кое-что конкретное. Оба назвали одно и то же действие, которое автоматизировать нельзя: перевод сработки в статус ложной без человека. Хотя со стороны именно оно выглядит самым безобидным — подумаешь, закрыли лишнюю строчку в отчёте.</p><p>Логика тут простая. Если система ошиблась в другую сторону и отдала человеку лишнюю сработку, это стоит нескольких минут его времени, и ошибку заметят. Если она посчитала ложной настоящую уязвимость, не заметит никто — пока эту уязвимость не найдёт кто-то другой.</p>]]></content:encoded>
    </item>
    <item>
      <title>VS Code 1.136 доводит pull request до готовности к слиянию агентом</title>
      <link>https://tproger.ru/news/vs-code-1-136-dovodit-pull-request-do-gotovnosti-k-sliyaniyu-agent</link>
      <comments>https://tproger.ru/news/vs-code-1-136-dovodit-pull-request-do-gotovnosti-k-sliyaniyu-agent?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Tproger]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/vs-code-1-136-dovodit-pull-request-do-gotovnosti-k-sliyaniyu-agent</guid>
      <description><![CDATA[<p>Agent Merge в превью: агент сам разбирает замечания ревью, упавшие проверки и конфликты. Плюс экспериментальные multi-root workspace для Copilot и Claude.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/vs-code-1-136-dovodit-pull-request-do-gotovnosti-k-sliyaniyu-agent">VS Code 1.136 доводит pull request до готовности к слиянию агентом</a>»</p>]]></description>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[Искусственный интеллект]]></category>
      <category><![CDATA[Microsoft]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 03 Sep 2026 02:40:02 GMT</pubDate>
      <content:encoded><![CDATA[<p>Microsoft 2 сентября <a href="https://code.visualstudio.com/updates/v1_136">выпустила</a> VS Code 1.136. Главная новинка релиза называется Agent Merge и пока помечена как Preview: агент берёт готовый pull request и крутит цикл «прочитать замечания ревью, поправить код, перезапустить упавшие проверки, разрулить конфликты», пока PR не будет готов к слиянию; само слияние агент не выполняет. Второе крупное изменение экспериментальное: агенты Copilot и Claude научились работать с рабочим пространством из нескольких корневых папок.</p><p>Для разработчика это значит, что самая нудная часть жизни PR, когда код уже написан, а CI красный и ревьюер оставил пятнадцать комментариев, теперь может быть делегирована. Обновление раскатывается постепенно; кто не хочет ждать, запускает команду Check for Updates. Сборки есть для Windows, macOS и Linux (deb, rpm, tarball, Snap), отдельных условий для России на странице релиза нет.</p><ul><li>Agent Merge (Preview) включается настройкой chat.agentMerge.enabled и запускается из окна Agents; агент повторяет цикл исправления и перезапуска workflow до готовности PR.</li><li>Multi-root workspace для агентов в статусе Experimental: chat.agentHost.copilotAgent.multiRootEnabled и chat.agentHost.claudeAgent.multiRootEnabled; хуки агента по-прежнему привязаны к одной папке.</li><li>Agent Host работает отдельным процессом и может обслуживать несколько окон; протокол Agent Host Protocol опубликован отдельно.</li><li>Связанные чаты показываются деревом внутри сессии со статусами и ожидающими подтверждениями; появились уведомления, когда агенту нужен ввод или он закончил.</li><li>Из мелкого: терминальные расширения больше не получают задержку запуска до 5 секунд, режим Compact layout уменьшает отступы между панелями.</li></ul><h2>Как работает Agent Merge и чего он пока не обещает</h2><p>По описанию Microsoft, Agent Merge «помогает довести pull request до финишной черты» (перевод редакции), то есть до состояния, когда его можно сливать. Пользователь указывает PR, агент читает review feedback, смотрит на failed checks и merge conflicts и правит код, после чего снова запускает workflow. Цикл повторяется, пока проверки не пройдут и замечания не будут закрыты. Функция в Preview, поэтому Microsoft не гарантирует ни стабильность, ни то, что агент справится с любым конфликтом; сколько итераций он делает и как считаются затраты на модель, в заметках к релизу не сказано.</p><p>На практике это надстройка над тем же агентским режимом чата, который в VS Code развивают уже год: тот же выбор модели, те же подтверждения опасных действий. Отличие в том, что цель формулируется не промптом, а состоянием PR. Как это соотносится с недавним разрешением <a href="https://tproger.ru/news/github-razrewil-copilot-stavit-approve-na-pull-request">ставить approve силами Copilot</a>, легко представить: одна и та же система может и править PR, и одобрять его, что стоит учитывать при настройке правил защиты веток.</p><h2>Что даёт агентам multi-root workspace</h2><p>Раньше агент видел только одну корневую папку. В 1.136 для Copilot и Claude можно включить работу со всеми корнями workspace; это экспериментальная функция за двумя отдельными настройками. Ссылки на рабочие пространства разрешаются по имени проекта, абсолютному пути и URI, а при совпадении имён VS Code показывает варианты и не выбирает молча. Ограничение осталось одно, зато важное: хуки агента (agent hooks) по-прежнему работают в пределах одной папки.</p><p>Под капотом это стало возможным благодаря Agent Host, отдельному процессу, который теперь умеет обслуживать несколько окон редактора. Протокол взаимодействия с ним, Agent Host Protocol, Microsoft опубликовала отдельно; вместе с Copilot SDK это заявка на то, чтобы сторонние агенты подключались к VS Code по одной схеме.</p><figure><img src="https://media.tproger.ru/user-uploads/133946/2026-09-03/d865f200-12c6-4f53-9283-10b739fb9eda.webp" alt="Иерархия связанных чатов внутри агентской сессии в VS Code 1.136" /><figcaption>Связанные чаты внутри одной сессии показываются деревом со статусами. Изображение: Microsoft</figcaption></figure><h2>Остальные изменения релиза</h2><ul><li>Дерево сессий: заголовки, статусы и ожидающие approvals; чаты можно раскрывать, переименовывать, переносить и удалять.</li><li>Уведомления о том, что агенту нужен ввод или он закончил работу; по умолчанию только для сессий не в фокусе.</li><li>Корпоративные политики могут включить распознавание речи на устройстве и запретить очистку диктовки языковой моделью.</li><li>Compact layout уменьшает интервалы между панелями.</li><li>Запуск терминальных расширений больше не получает искусственную задержку до 5 секунд.</li></ul><h2>Стоит ли включать прямо сейчас</h2><p>Agent Merge имеет смысл пробовать на репозиториях, где CI быстрый и есть чёткие правила ревью: там цикл агента даст видимый результат. На проектах с медленными пайплайнами каждая итерация будет стоить минут ожидания и токенов, а сколько именно, Microsoft не раскрывает. Multi-root режим полезен монорепозиториям, но пока экспериментален, и хуки в нём не работают за пределами одной папки.</p><p>Кому обновление ничего не изменит: тем, кто не пользуется агентским чатом, и командам без подписки на Copilot. Для них в 1.136 остаются Compact layout, ускорение запуска терминальных расширений и мелкие изменения редактора, терминала и доступности. Полные заметки к релизу со скриншотами лежат на <a href="https://code.visualstudio.com/updates/v1_136">сайте VS Code</a>; подробности про approve от Copilot и его учёт в правилах веток мы <a href="https://tproger.ru/news/github-razrewil-copilot-stavit-approve-na-pull-request">разбирали</a> отдельно.</p><p>Источники: <a href="https://code.visualstudio.com/updates/v1_136">VS Code: August 2026 (version 1.136) release notes</a>, <a href="https://github.com/microsoft/vscode/releases/tag/1.136.0">Релиз 1.136.0 на GitHub</a></p><p>Изображение на обложке: Microsoft, логотип Visual Studio Code</p>]]></content:encoded>
    </item>
    <item>
      <title>JetBrains раскрыла детали взлома Cadence: непропатченный TeamCity</title>
      <link>https://tproger.ru/news/jetbrains-raskryla-detali-vzloma-cadence-nepropatchennyj-teamcit</link>
      <comments>https://tproger.ru/news/jetbrains-raskryla-detali-vzloma-cadence-nepropatchennyj-teamcit?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Tproger]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/jetbrains-raskryla-detali-vzloma-cadence-nepropatchennyj-teamcit</guid>
      <description><![CDATA[<p>JetBrains подтвердила: сервис Cadence взломали через непропатченный TeamCity (CVE-2026-63077). Атакующие получили бэкап 2024 года, AWS-учётки и файлы в S3. Хронология, четыре категории утёкших данных, какие секреты считать скомпрометированными и что сделать.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/jetbrains-raskryla-detali-vzloma-cadence-nepropatchennyj-teamcit">JetBrains раскрыла детали взлома Cadence: непропатченный TeamCity</a>»</p>]]></description>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[Облачные технологии]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 01 Sep 2026 17:27:47 GMT</pubDate>
      <content:encoded><![CDATA[<p>JetBrains 1 сентября обновила <a href="https://blog.jetbrains.com/pycharm/2026/08/cadence-security-incident-august-2026/">отчёт о взломе Cadence</a>, своего облачного сервиса для запуска вычислений из PyCharm. Атакующие с 8 по 24 августа имели доступ к серверу api.cadence.jetbrains.com через уязвимость <b>CVE-2026-63077</b> в TeamCity, которая позволяла выполнять команды без аутентификации. Сервер, по признанию компании, «должен был быть пропатчен, но не был». Отчёт подписан Дэниелом Галло из JetBrains; последнее обновление датировано 1 сентября, 12:05 по центральноевропейскому времени, предыдущее — 31 августа.</p><p>Для обычного пользователя PyCharm без плагина Cadence новость ничего не меняет. Для тех, кто подключал сервис, JetBrains даёт жёсткую рекомендацию: все учётные данные, к которым Cadence имел доступ, считать скомпрометированными и заменить, включая ключи облаков, токены GitHub и GitLab, SSH-ключи и ключи подписи. Региональной разбивки пострадавших компания не даёт; если сервис у вас был подключён, рекомендации те же.</p><ul><li>Период доступа атакующих: 8–24 августа 2026 года; JetBrains заметила эксплуатацию 23 августа и отключила сервер 24-го.</li><li>Вектор: CVE-2026-63077 в TeamCity, который оркестрировал облачные задачи Cadence; патч на сервер не поставили.</li><li>Утекли имена пользователей, реальные имена, email, время последнего входа и IP; полный бэкап сервера Cadence за 2024 год; AWS IAM-пользователи и их учётные данные; файлы в S3-бакетах JetBrains.</li><li>Мог быть доступен исходный код, синхронизированный из PyCharm; затронуты ли бакеты клиентов, компания не установила.</li><li>Токены плагина Cadence в PyCharm аннулированы; JetBrains просит заменить все секреты, доступные сервису, и проверить репозитории, облака, реестры пакетов и системы деплоя.</li></ul><h2>Что такое Cadence и при чём тут TeamCity</h2><p>Cadence — облачный сервис JetBrains, который через необязательный плагин PyCharm позволяет отправлять тяжёлые вычисления, например обучение моделей, на удалённые машины. Чтобы запускать эти задачи, сервис использовал TeamCity, собственный CI-сервер JetBrains, как оркестратор облачных нагрузок. Именно в этой инсталляции TeamCity была уязвимость CVE-2026-63077, позволяющая удалённо выполнять команды без входа. Компания признаёт, что для этого сервера действовало то же правило, что и для остальных: патчить сразу после выхода исправления. Правило не сработало.</p><blockquote>The server should have been patched, but it was not.</blockquote><h2>Хронология</h2><ul><li>8 августа: атакующие воспользовались уязвимостью TeamCity и получили доступ к серверу api.cadence.jetbrains.com.</li><li>8–24 августа: период активности; в это время были доступны данные пользователей, бэкап, учётные данные AWS и файлы в S3.</li><li>23 августа: JetBrains обнаружила эксплуатацию.</li><li>24 августа: сервер отключён, токены плагина Cadence в PyCharm аннулированы.</li><li>31 августа: первое обновление отчёта с перечнем затронутых данных.</li><li>1 сентября, 12:05 CEST: второе обновление; расследование ещё включает несколько проверок.</li></ul><h2>Что именно утекло</h2><p>Компания перечисляет четыре категории. Первая — персональные данные пользователей Cadence: логины, реальные имена, адреса почты, время последнего входа и IP-адрес, с которого он был. Вторая, самая неприятная, — полная резервная копия сервера Cadence за 2024 год: JetBrains подтвердила, что атакующие получили доступ к её содержимому, а в нём могло быть всё, что сервис хранил на тот момент. Третья — AWS IAM-пользователи с учётными данными, то есть доступ к части облачной инфраструктуры JetBrains. Четвёртая — файлы в S3-бакетах компании; проверить, были ли затронуты бакеты клиентов, JetBrains на момент публикации не смогла.</p><blockquote>We have confirmed that the threat actors accessed data contained in the Cadence server backup from 2024.</blockquote><p>Отдельно компания допускает, что атакующим мог быть доступен исходный код, который пользователи синхронизировали из PyCharm в Cadence для запуска задач. Доказательств извлечения секретов из текущего окружения сервиса, по словам JetBrains, не найдено. Между «не найдено доказательств» и «не было» большая разница, и компания сама рекомендует исходить из худшего: список секретов, которые нужно считать скомпрометированными, включает облачные учётные данные, токены GitHub, GitLab и Bitbucket, учётные данные реестров пакетов и контейнеров, SSH-ключи и ключи подписи.</p><h2>Что сделать, если вы пользовались Cadence</h2><ul><li>Проверьте в PyCharm, стоял ли плагин Cadence; его токены JetBrains уже аннулировала, но это закрывает только вход в сервис.</li><li>Замените всё, что было доступно из задач Cadence: ключи AWS, Google Cloud и Azure и любых других облаков, токены GitHub, GitLab и Bitbucket, учётные данные реестров пакетов и контейнеров, SSH-ключи, ключи подписи.</li><li>Пересмотрите репозитории, которые синхронизировались в сервис, на предмет секретов в коде и истории коммитов: они могли уйти вместе с исходниками.</li><li>Проверьте журналы облачных аккаунтов за 8–24 августа на действия от имени сервисных пользователей, которыми пользовался Cadence; JetBrains отдельно называет AWS и S3, IAM, реестры пакетов и системы деплоя.</li><li>Если в 2024 году вы пользовались Cadence, а потом ушли, ваши данные могли находиться в бэкапе за 2024 год; состав пользователей в нём компания не раскрыла.</li><li>Ждите финальный отчёт: расследование не закончено, и список затронутых данных может расшириться.</li></ul><h2>Урок для всех остальных</h2><p>История примечательна не масштабом, а причиной. Компания, которая сама делает TeamCity, не поставила патч на свой TeamCity, и этого хватило. Для любой команды это напоминание: инвентаризация внутренних сервисов с публичным адресом и автоматическое отслеживание CVE для них — единственная защита от сюжета «должны были пропатчить, но не пропатчили». Второй урок про бэкапы: резервная копия двухлетней давности оказалась столь же ценной для атакующих, как и живая система, потому что секреты в ней никто не ротировал.</p><p>Источник: <a href="https://blog.jetbrains.com/pycharm/2026/08/cadence-security-incident-august-2026/">Cadence security incident, August 2026 (JetBrains)</a></p><p>Изображение на обложке: JetBrains</p>]]></content:encoded>
    </item>
    <item>
      <title>Android Studio Quail 4 вышла в стабильной версии с локальной Gemma 4 внутри IDE</title>
      <link>https://tproger.ru/news/android-studio-quail-4-vywla-v-stabilnoj-versii-lokalnaya-gemm</link>
      <comments>https://tproger.ru/news/android-studio-quail-4-vywla-v-stabilnoj-versii-lokalnaya-gemm?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Tproger]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/android-studio-quail-4-vywla-v-stabilnoj-versii-lokalnaya-gemm</guid>
      <description><![CDATA[<p>Google выпустила стабильную Android Studio Quail 4 (2026.1.4): локальная Gemma 4 прямо в IDE, офлайн-рефакторинг без отправки кода, 23 встроенных навыка агента. Требования к памяти, как включить, что ещё вошло в релиз и кому это подойдёт.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/android-studio-quail-4-vywla-v-stabilnoj-versii-lokalnaya-gemm">Android Studio Quail 4 вышла в стабильной версии с локальной Gemma 4 внутри IDE</a>»</p>]]></description>
      <category><![CDATA[Android]]></category>
      <category><![CDATA[Мобильная разработка]]></category>
      <category><![CDATA[Google]]></category>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[Искусственный интеллект]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 01 Sep 2026 17:26:07 GMT</pubDate>
      <content:encoded><![CDATA[<p>Google 1 сентября <a href="https://android-developers.googleblog.com/2026/09/leverage-gemma-4-android-studio-quail.html">объявила</a> стабильной <b>Android Studio Quail 4</b>, версию 2026.1.4. Главное в релизе — локальная модель <b>Gemma 4</b>, которая запускается прямо внутри IDE: агент выполняет многофайловые рефакторинги без отправки исходников в облако и без квот на токены. Для команд, которым запрещено отдавать код наружу, это штатный способ пользоваться ИИ-агентом в официальной IDE Android; для остальных — способ не упираться в лимиты облачных моделей.</p><p>Quail 4 — финальный стабильный выпуск линейки Quail, и автор анонса, менеджер продукта Android Studio Амман Фасил Асфав, называет её «готовой к использованию в продакшене». Помимо локальной модели в IDE вошли 23 готовых «навыка» агента под типовые задачи Android, кликабельные ссылки на классы и методы в ответах, индикаторы состояния в списке чатов и сворачиваемый показ рассуждений модели.</p><ul><li>Android Studio 2026.1.4 (Quail 4) стабильна; это последний выпуск линейки Quail.</li><li>Gemma 4 работает локально через встроенный движок инференса; код не покидает машину, лимитов на токены нет.</li><li>Минимум 12 ГБ оперативной памяти для самых маленьких моделей; по словам Google, «машины с 32 ГБ и больше будут работать лучше всего».</li><li>23 встроенных навыка агента (AGP 9 Upgrade, Android Profiler, Navigation 3, Adaptive и другие) выбираются автоматически по запросу и отключаются одним переключателем.</li><li>Локальный режим включается в Agent model selector или в Settings, Tools, AI, Model Providers, Gemma; веса IDE скачивает, проверяет и обновляет сама.</li></ul><h2>Как устроена локальная модель</h2><p>Android Studio сама скачивает веса Gemma 4, проверяет их и обновляет. Внутри IDE работает лёгкий движок инференса, поэтому отдельный сервер вроде Ollama поднимать не нужно. Модель выбирается в переключателе Agent model selector или в настройках: Settings, Tools, AI, Model Providers, Gemma. После этого агент работает локально: анонс подтверждает многофайловые рефакторинги полностью офлайн; остальные сценарии облачного агента Google для локального режима отдельно не перечисляет. Google подчёркивает два свойства: исходный код не покидает локальную машину, и квоты на токены не действуют.</p><blockquote>Your source code never leaves your local machine and you never hit token quota limits.</blockquote><p>Требования к железу компания называет прямо: самые маленькие варианты Gemma 4 стартуют на 12 ГБ оперативной памяти, а лучше всего работают машины с 32 ГБ и больше. На ноутбуке с 16 ГБ, где рядом крутятся эмулятор и Gradle, стоит ожидать, что локальная модель окажется медленнее и заметно проще облачной. Это цена за приватность и отсутствие квот, и оценивать её нужно под свой проект: по нашему опыту, многофайловый рефакторинг на маленькой модели требует больше ручных проверок, чем на облачной.</p><h2>Что такое навыки агента</h2><p>«Навык» здесь — заранее написанная инструкция с контекстом под конкретную задачу Android: как обновить проект на Android Gradle Plugin 9, как читать данные профилировщика, как переехать на Navigation 3 или сделать адаптивную вёрстку под планшеты и складные устройства. В Quail 4 таких навыков 23, и IDE подбирает их по метаданным запроса сама. Если подбор мешает, навыки отключаются общим переключателем в настройках IDE.</p><h2>Что ещё изменилось в интерфейсе агента</h2><ul><li>Ссылки на классы, функции, методы и пути файлов в ответах агента стали кликабельными.</li><li>В списке Recent Chats появились индикаторы: загрузка, ожидание ввода, завершение фоновой задачи.</li><li>Вкладки Task и Walkthrough объединены во вкладку Summary of Changes; по ней стоит проверять правки перед применением.</li><li>Рассуждения моделей с режимом reasoning показываются сворачиваемым блоком.</li></ul><h2>Что менять в проекте и процессе</h2><ul><li>Обновите Android Studio до 2026.1.4 через Check for Updates; проект менять не нужно.</li><li>Если в компании запрещено отправлять код во внешние сервисы, включите Gemma в Model Providers и убедитесь, что облачный провайдер в настройках не выбран.</li><li>Проверьте память: 12 ГБ — заявленный минимум для самых маленьких моделей, 32 ГБ и больше — рекомендация Google; на 16 ГБ закройте эмулятор перед работой агента или пользуйтесь физическим устройством.</li><li>Для миграции на AGP 9 попробуйте одноимённый навык: это задача с сотней мелких правок, где агент экономит время.</li><li>Региональных оговорок в анонсе нет, но доступность загрузки весов из России Google не подтверждает; проверяйте на своей машине. Локальный режим не требует подписки на облачные модели.</li></ul><h2>Контекст</h2><p>Линейка Quail шла к этому весь цикл: в Quail 2 появились параллельные чаты с агентом, затем навыки, интеграция с Firebase и первая поддержка локальных моделей в Canary-сборках. Quail 4 закрывает линейку и делает локальный режим штатным в стабильной версии. Следующая линейка Android Studio получит новое кодовое имя; сохранится ли в ней локальная Gemma как основной сценарий, Google не говорит, и это предположение редакции по тону анонса.</p><p>Источники: <a href="https://android-developers.googleblog.com/2026/09/leverage-gemma-4-android-studio-quail.html">Leverage Android skills and Gemma 4 in Android Studio Quail 4 (Android Developers Blog)</a>, <a href="https://developer.android.com/studio/releases">Android Studio release notes</a></p><p>Изображение на обложке: Google, Android Developers Blog</p>]]></content:encoded>
    </item>
    <item>
      <title>Своя self-hosted двухсерверная VPN-архитектура. Подробный путь разработки и ошибки, с которыми вы можете столкнуться</title>
      <link>https://tproger.ru/articles/svoya-self-hosted-dvuhservernaya-vpn-arhitektura-podrobnyj-put-r</link>
      <comments>https://tproger.ru/articles/svoya-self-hosted-dvuhservernaya-vpn-arhitektura-podrobnyj-put-r?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Роман Фролов]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/svoya-self-hosted-dvuhservernaya-vpn-arhitektura-podrobnyj-put-r</guid>
      <description><![CDATA[<p>Проект представляет из себя быстрый способ воссоздать архитектуру состоящую из 2 серверов (локальный + удаленный) с определенными сервисами, которые решают специфические задачи. Проект сделан прежде всего для меня, а также для людей которые хотят свой готовый self-hosted сервер из коробки с полной системой обслуживания</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/svoya-self-hosted-dvuhservernaya-vpn-arhitektura-podrobnyj-put-r">Своя self-hosted двухсерверная VPN-архитектура. Подробный путь разработки и ошибки, с которыми вы можете столкнуться</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[Тестирование]]></category>
      <category><![CDATA[Linux]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Git]]></category>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Ruby]]></category>
      <category><![CDATA[unix]]></category>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[Музыка]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[HTML]]></category>
      <category><![CDATA[DIY]]></category>
      <category><![CDATA[GitHub]]></category>
      <category><![CDATA[Навыки]]></category>
      <category><![CDATA[VPN]]></category>
      <category><![CDATA[Telegram]]></category>
      <category><![CDATA[Сервисы]]></category>
      <category><![CDATA[Docker]]></category>
      <category><![CDATA[Cloudflare]]></category>
      <category><![CDATA[Фронтенд]]></category>
      <category><![CDATA[Redis]]></category>
      <category><![CDATA[QA]]></category>
      <category><![CDATA[Мессенджер]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[NFT]]></category>
      <category><![CDATA[Машин]]></category>
      <category><![CDATA[1C]]></category>
      <category><![CDATA[DeFi]]></category>
      <category><![CDATA[Grafana]]></category>
      <category><![CDATA[VPS]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sun, 26 Jul 2026 15:46:26 GMT</pubDate>
      <content:encoded><![CDATA[<p>Всё
 началось с того, что меня перестал устраивать мой подход к 
развертыванию личных сервисов. Я решил переписать всё с нуля. К тому же 
это был отличный повод получить новые навыки и попробовать инструменты, 
до которых давно не доходили руки.</p><p>Арендовать мощные VPS под 
ресурсоемкие задачи в текущих реалиях выходит неоправданно дорого. При 
этом дома у меня уже был выделенный неттоп (мини-ПК) с 16 ГБ оперативной
 памяти на базе энергоэффективного процессора Intel N95.</p><p>Пройдя 
путь от простых Bash-скриптов и сторонних туннелей до полностью 
автоматизированной инфраструктуры, я создал проект ServeHub-2. В этой 
статье я подробно разберу, как эволюционировала сеть проекта, почему 
декларативный подход победил императивный и с какими неочевидными багами
 пришлось столкнуться в процессе автоматизации.</p><h2>История настройки сетевой архитектуры</h2><h3>Использование Tuna</h3><p>В
 самом начале проекта я еще не думал о VPN как о способе пробития NAT и 
основе, на которой будет строиться вся система. Первое, к чему я пришел —
 сервис Tuna. Если кратко, это аналог Cloudflare Tunnel за условные 300 
рублей. У него очень приятный веб-интерфейс и невероятно простая 
настройка. Однако для полноценной независимой архитектуры он не подошел 
по двум причинам:</p><ul><li>Сервера Tuna находятся вне контроля пользователя.</li><li>На удаленном сервере нельзя развернуть свои сопутствующие сервисы.</li></ul><p>В целом сервис действительно удобный, но для моих задач он оказался слишком ограничивающим.</p><p>Вот
 пример конфига для tuna (все максимально просто, создаем контейнеры для
 ssh туннеля, чтобы был доступ ssh, а также основной http туннель с 
привязкой к nginx или любому другому прокси если такой есть):</p><h3>В поисках гибкости: тесты Pangolin и переход к FRP</h3><p>После Tuna я решил двигаться в сторону собственного контроля и попробовал Pangolin.
 Однако решение быстро отвалилось: для дешёвого сервера оно оказалось 
слишком «тяжёлым» и избыточным. Главные минусы — ощутимый оверхед по 
ресурсам и лишний слой принудительной веб-аутентификации перед самими 
сервисами. Это ломало нормальное взаимодействие с родными мобильными 
клиентами (вроде Element для Matrix или Bitwarden для паролей), где 
повторная авторизация в браузере просто не нужна.</p><p>На смену пришел FRP (Fast Reverse Proxy).
 Он выполнял ту же функцию проброса, но хостил я его уже на собственном 
арендованном VPS в режиме Layer 4 (TCP). Это дало абсолютную гибкость: 
внешний VPS не заглядывал внутрь пакетов и ничего не расшифровывал, а 
просто пересылал сырой поток домой. Кроме того, это отлично 
оптимизировало расходы: вместо 300 рублей за Tuna и ещё 300 рублей за 
отдельный VPN, я стал платить всего 500 рублей за один стойкий VPS, 
который мог настраивать как хочу. (к тому же можно было обойтись даже 
дешевле, так как VPS с 4 гб оперативки загружен всего лишь на 40%, 
процессор всего на 20%-40%)</p><p>FRP состоит из 2 конфигурационных 
файлов (один на удаленном сервере frp server, другой на локальном frp 
client), все также довольно просто, однако его можно использовать на 
разных слоях. У меня он брал трафик за стандартный TCP и передавал его 
на локальный сервер.</p><p>Также доп. фишка в том что основная 
конфигурация происходит именно в frpc, который, в свою очередь, передает
 часть настроек на frp на удаленном сервере.</p><p>frpc.toml:</p><p>frps.toml:</p><h3>Полноценный переезд на WireGuard (AmneziaWG) и 8 часов отладки</h3><p>Со временем архитектура эволюционировала в сторону полноценной VPN-сети на базе WireGuard, а точнее — его модификации AmneziaWG. Причин для этого шага было несколько:</p><ul><li>Безопасность: FRP всё же открывал внутренние ресурсы в публичный интернет, оставляя их доступными для сканеров портов.</li><li>Удобство маршрутизации:
 Все участники сети стали равноправными узлами в одной виртуальной 
локальной подсети. Больше не нужно было настраивать постоянные 
односторонние пробросы.</li><li>Дополнительный бонус:
 Поскольку удаленный VPS был куплен в Нидерландах, через этот же VPN я 
автоматически получил безопасный доступ ко всем зарубежным ресурсам.</li></ul><p>Для реализации схемы на удаленном VPS был развернут контейнер wg-easy с поддержкой AmneziaWG, а на домашнем мини-ПК — клиентский контейнер Amnezia (сборка из Dockerfile с использованием amnezia-tools  и модулем ядра хоста).</p><p>И
 именно здесь я поймал самый изнурительный баг проекта. После 
развертывания трафик упорно шёл только в одну сторону. Часов 8 ушло на 
диагностику iptables, маршрутов и чтение зарубежных форумов (что 
бесполезно, учитывая специфику наших блокировок). Оказалось, провайдер 
просто дропал обратный трафик стандартного WireGuard, так как пакеты шли
 без маскировки. Причина крылась в docker-compose.yml: у меня было прописано image: ghcr.io/wg-easy/wg-easy:latest. Как выяснилось, тег latest  на Docker Hub намертво прилип к старой 14-й версии, а поддержка параметров AmneziaWG появилась только в ветке 15.x. Изменение тега на конкретную версию (15.3) решило проблему за секунду.</p><p>Благодаря
 переходу конфигурация получилась максимально простой, основные отличия 
от стандартной документации выделил в коде: (в основном то, на что 
пришлось долго рыть информацию)</p><h3>Настройка Nginx</h3><p>Чтобы
 сервисы были доступны исключительно внутри подсети VPN, я задействовал 
Nginx. Доступ к приложениям был жестко ограничен на уровне конфигурации —
 веб-сервер принимает запросы только из диапазона IP-адресов 10.8.0.0/24. Любые попытки постучаться на сервер из внешнего интернета без активного VPN-туннеля автоматически сбрасываются Nginx.</p><p>Логика
 распределения завязана на proxy-протоколе: Nginx на удаленном VPS 
выступает основным входным узлом, принимает зашифрованный трафик, 
заворачивает его в заголовки с реальным IP-адресом клиента и через 
туннель перекидывает на локальный Nginx домашнего сервера. Локальный 
веб-сервер уже сам расшифровывает SSL и распределяет трафик по конечным 
Docker-контейнерам, сохраняя реальные IP в логах безопасности.</p><p>Вставлю
 один кусок кода из nginx на удаленной машине для примера, так все 
остальное примерно похоже (конфиги использовались в виде .template):</p><h3>SSL-сертификаты</h3><p>Для получения валидных SSL-сертификатов я настроил работу через автоматический Certbot по challenge-валидации DNS-01 c API Webnames. Сам домен привязан к внутреннему IP-адресу 10.8.0.1.
 Проверка через DNS позволила выпустить единый wildcard-сертификат на 
весь домен и его поддомены без необходимости держать открытым 80-й порт 
веб-сервера наружу.</p><p>Уточню, что certbot запускается автоматически 
во время выполнения Ansible плейбука, поэтому самому кроме указания 
переменных ничего делать не нужно.</p><p>В
 итоге получилась схема, при которой все сервисы доступны по красивым 
доменным именам с HTTPS, но абсолютно невидимы для внешнего интернета.</p><p>Вот настройка certbot:</p><h2>История софта</h2><p>Параллельно
 с сетевой структурой развивался и сам набор приложений. Изначально я 
хотел собрать в одном месте утилиты, которыми пользуюсь каждый день, но в
 процессе селфхостинга быстро понимаешь: нельзя просто накидать 
контейнеров и надеяться, что мини-ПК справится, а конфигурационные файлы
 не превратятся в кашу.</p><h3>Первый стек и оптимизация</h3><p>Первыми на домашнем сервере прижились медиа-сервисы: Navidrome для стриминга музыки и Audiobookshelf
 для аудиокниг и подкастов. Они легковесные, имеют отличные мобильные 
клиенты с синхронизацией прогресса и полностью закрывают мои 
потребности. Позже к ним добавился Nextcloud как единое независимое облако для файлов, контактов и семейных документов.</p><p>Затем встал вопрос безопасного хранения паролей. Сначала я смотрел в сторону оригинального Bitwarden, но в итоге я выбрал Vaultwarden
 — альтернативный сервер на Rust, полностью совместимый с API Bitwarden.
 Он потребляет считанные мегабайты оперативной памяти и работает 
идеально. Дополнительно для удобства управления всей этой распределенной
 Docker-инфраструктурой в локальный стек был добавлен Portainer. (+ Portainer Agent на удаленный сервер)</p><p>Из интересных моментов, где мне пришлось немного больше возиться, чем с остальными сервисами это nextcloud настройка:</p><h3>Ошибки проектирования: почему я удалил Matrix (Synapse)</h3><p>Не все решения прошли проверку временем. На этапе использования Tuna и FRP я развернул сервер Matrix (Synapse)
 для защищенного обмена сообщениями. Мне казалось это крутой идеей, но 
когда я окончательно перешел на AmneziaWG, целесообразность мессенджера 
внутри закрытого туннеля сошла на нет.</p><p>Synapse требовал слишком 
много ресурсов, впустую расходовал оперативку домашнего ПК и усложнял 
конфиг Nginx. При этом реальной пользы для семьи он не приносил. Для 
критических алертов инфраструктуры и повседневного общения проще и 
эффективнее оказалось использовать Telegram. (плюс алертинг настроен 
именно через него) В итоге я полностью выпилил Synapse из стека, 
освободив ресурсы.</p><p>Вместо него я добавил в связку к wg-easy локальный AdGuard Home.
 Теперь он работает прямо внутри VPN-сети: очищает весь трафик от 
рекламы и трекеров на лету, кэширует DNS-запросы и не дает истории 
веб-серфинга улетать внешним провайдерам.</p><p>Основной проблемой с 
которой я столкнулся при использовании AdGuard Home, так это то что я 
так и не понял как заставить использовать AmneziaVPN клиент AdGuard как 
основной DNS, при этом AmneziaWG работает прекрасно. Как я понимаю дело в
 том что AmneziaWG работает намного проще на уровне ip и у него нету 
никаких доп фильтров, настроек и подобного, поэтому он просто берет 
данные из конфига.</p><h3>От костылей на Bash к декларативному Ansible</h3><p>Весь
 стек на обоих серверах разворачивался через bash скрипты, что было уж 
очень плохо с точки зрения идемпотентности. Во первых из-за bash мне 
постоянно приходилось очищать сервера, так как нормальных проверок у 
меня не было и писать я их не хотел, а также было много костылей с 
импортом переменных, записями в файлы и подобным.</p><p>Так я пришел к декларативному подходу и Ansible.
 Теперь вся конфигурация описывается в виде плейбуков и ролей, 
отражающих конечное желаемое состояние серверов. Конфиденциальные данные
 перенесены в файл secrets.yml, а хрупкие конструкции 
автоматизированы через шаблоны Jinja2. Проект стал идемпотентным: если 
шаги уже выполнены, Ansible их просто пропускает.</p><p>В итоге 
получилось несколько yaml файлов для стандартной настройки системы 
(bootstrap_os.yml) и для настройки каждого из хостов (setup_local.yml и 
setup_remote.yml). В итоге теперь все что нужно чтобы полностью с нуля 
развернуть проект - скачать Ansible, несколько других зависимостей на 
свой рабочий пк и запустить один manage_deploy.sh, в котором можно будет
 выбрать сценарий как будет вести себя Ansible и спокойно дождаться 
разворачивания сервисов.</p><p>Также благодаря Ansible я удобно 
реализовал переносимость проекта. Так как я решил не использовать тома 
docker, и вместо этого храню все в папках, чтобы перенести старые данные
 проекта нужно просто скопировать папку apps-data и положить ее в нужное
 место и все само заработает после повторного развертывания проекта. В 
Ansible выделяется отдельная пауза для этого.</p><p>Вот пример основного плейбука deploy.yml:</p><h3>Тестирование мультидистрибутивности с помощью Vagrant</h3><p>Проект
 изначально затачивался под работу на трех дистрибутивах: Ubuntu, Debian
 и Arch Linux. Тестировать Ansible-плейбуки прямо на рабочей локальной 
машине (в моем случае — EndeavourOS) слишком рискованно, а создавать 
виртуальные машины руками — долго и неудобно.</p><p>Решением стал Vagrant,
 позволяющий за пару минут развернуть чистые ОС в VirtualBox из готовых 
образов. Но в процессе настройки мультивендорного стенда в режиме 
сетевого моста (public_network) всплыли две критические проблемы:</p><ol><li>Конфликт DNS:
 По умолчанию Vagrant создает NAT-интерфейс для управления нодой. При 
включении второго (публичного) интерфейса для локальной сети ломался 
дефолтный DNS-резолвер. Проблему пришлось решать принудительной очисткой
 и перезаписью файла /etc/resolv.conf через inline-скрипт автоматизации Vagrant.</li><li>Проблема с GRUB на Debian: В используемом базовом образе generic/debian12
 конфигурация GRUB сохраняла жесткую привязку к конкретному имени диска 
из окружения сборщика. При повторном развертывании плейбуков на тестовом
 стенде это приводило к сбоям загрузчика. Чтобы автоматизировать 
очистку, пришлось внедрить скрипт, который на лету определяет имя 
системного диска через lsblk и автоматически передает правильные параметры в загрузчик через утилиту debconf-set-selections.</li></ol><p>Вот код Vagrantfile: (в node.vm.provision происходит основное решение ошибок)</p><p>Надежная система бэкапов на базе BorgmaticДля создания резервных копий я внедрил Borgmatic
 (удобную надстройку над дедуплицирующим инструментом Borg Backup). Весь
 процесс автоматизирован с помощью связки системных юнитов borgmatic.service и borgmatic.timer. В бэкап уходят две ключевые директории: apps-data (конфигурации приложений и баз данных) и PersonalData (медиатека: музыка, книги, подкасты, файлы Nextcloud).</p><p>Развертывание
 системы бэкапов полностью берет на себя Ansible. Мне достаточно указать
 UUID внешнего жесткого диска — скрипт сам проверит его наличие в 
системе, примонтирует в нужную директорию, создаст зашифрованный 
репозиторий и настроит политику ротации (хранение 7 ежедневных, 4 
еженедельных и 6 ежемесячных копий). Также в Prometheus выведен 
мониторинг самого репозитория .borg для отслеживания его размера и статуса успешности архивации.</p><p>Главная
 проблема при бэкапе работающих Docker-контейнеров — риск скопировать 
базу данных в «битом» или неконсистентном состоянии, если в момент 
создания архива в нее шла активная запись. Чтобы решить эту проблему, я 
задействовал механизм хуков в конфигурации Borgmatic.</p><p>Перед началом резервного копирования автоматически срабатывает команда остановки контейнеров проекта (docker-compose down),
 а после успешного завершения (или в случае возникновения непредвиденной
 ошибки) контейнеры автоматически поднимаются обратно в фоновом режиме. 
Для удобного просмотра архивов и быстрого восстановления файлов я 
развернул веб-интерфейс Borg UI.</p><p>Конфигурация borgmatic: (использую как Jinja2 шаблон, чтобы Ansible в плейбуках сам подставил переменные)</p><h2>Наблюдаемость (Observability) уровня Enterprise</h2><p>В последних релизах (v1.2.0 и v1.3.0) фокус проекта сместился на мониторинг и работу с логами.</p><h3>Эволюция алертинга и переход на Gatus</h3><p>Изначально для мониторинга доступности я смотрел на Uptime Kuma, но отказался из-за отсутствия удобной декларативной настройки через конфиги. Затем я развернул связку Blackbox Exporter и Alertmanager
 с уведомлениями в Matrix. Но тут крылась логическая несостыковка: весь 
алертинг был завязан на локальном ПК, и в случае его аппаратного отказа я
 бы просто лишился уведомлений.</p><p>Тогда я решил вернуть Uptime Kuma,
 но развернуть его на удаленном VPS в качестве внешнего «сторожа» и 
автоматизировать его настройку через Python-скрипт с библиотекой uptime-kuma-api. Но и тут ждали «грабли» — библиотека не обновлялась три года и намертво ломалась на свежих версиях Kuma.</p><p>В итоге идеальным решением стал Gatus.
 Он изначально проектировался под управление через YAML-конфиги и 
поддерживает отправку алертов, если сервер не отвечает. Из-за специфики 
фронтенда Gatus (он не умеет работать из подкаталога типа /gatus), мне пришлось перенести его и wg-easy на полноценные субдомены gatus. и wireguard.</p><p>Для Gatus получился простой конфиг:</p><p>Для мониторинга аппаратных ресурсов удаленного и локального серверов была развернута связка node-exporter + cAdvisor. Все уведомления теперь приходят мгновенно в Telegram-бота. Чтобы 
избежать лавины одинаковых сообщений (например, при перезагрузке хоста),
 в Alertmanager настроена жесткая группировка и дедупликация событий. 
Также добавлен экспортер для AdGuard Home, выводящий статистику 
заблокированных запросов в Grafana.</p><h3>Централизованные логи: Loki + Grafana Alloy</h3><p>В релизе v1.3.0 в стек была добавлена централизованная система сбора логов Loki. Вместо устаревшего Promtail в качестве агента сбора я применил Grafana Alloy.</p><p>Он
 эффективно собирает логи со всех запущенных Docker-контейнеров, парсит 
их и передает в Loki. Теперь вся история событий, ошибок веб-сервера 
Nginx или падений внутренних приложений доступна в едином интерфейсе 
Grafana с возможностью удобной фильтрации через LogQL, что значительно 
упрощает отладку.</p><p>Конфиг Loki:</p><p>Конфиг Grafana Alloy: (локальный конфиг)</p><h2>Интерфейс: переход на Homepage</h2><p>Изначально для 
домашней страницы я написал кастомную минималистичную HTML-панель с 
Glassmorphism-дизайном. Выглядело это красиво, но добавлять новые 
сервисы вручную через постоянную правку исходного кода было крайне 
неудобно.</p><figure><img src="https://media.tproger.ru/user-uploads/139471/2026-07-15/8a8f2752-8aac-4aa5-898e-98affd01cdff.webp" alt="" /><figcaption>HTML + CSS</figcaption></figure><p>В итоге я заменил самописную страницу на полноценный комьюнити-проект Homepage.
 Это дало некоторую гибкость: вся панель настраивается через простые 
YAML-файлы и поддерживает встроенные виджеты интеграции. Пока что она 
простенькая, но возможно в будущем сделаю что-то более продвинутое.</p><figure><img src="https://media.tproger.ru/user-uploads/139471/2026-07-15/90c65d4a-1310-4a30-b1ad-9e4d3083959d.webp" alt="" /><figcaption>Homepage</figcaption></figure><h2>Заключение</h2><p>Постарался
 подробно рассказать о структуре проекта и как я к этому пришел, очень 
много я не добавил, если пост зайдет, то я обязательно более подробно 
пройдусь по некоторым моментам: как я настраивал Matrix и на каком 
моменте я решил его убрать, как собирал локальный amnezia 
контейнер-клиент, что нового я добавил в релизе 1.4.0 и другое.</p><p>Также
 я перешел с manage_deploy.sh на отдельный GUI клиент, который 
будет полностью автоматизировать процесс подготовки к deploy. (написан на Go Wails). Про это тоже возможно сделаю статью.</p><p>Вся кодовая база проекта, подробная документация, инструкции по развертыванию открыты и доступны для сообщества:</p><p>🔗 GitHub-репозиторий: <a href="https://github.com/canntstand/ServeHub-2" rel="noopener noreferrer nofollow">https://github.com/canntstand/ServeHub-2</a></p><p>Это
 моя первая статья на этом сайте и в то же время первый личный проект, которому я 
отдал так много времени (3 месяца). Буду рад вашему фидбеку в 
комментариях!</p>]]></content:encoded>
    </item>
    <item>
      <title>Git в Telegram: как я избавился от JSON, победил Markdown и получил security by design</title>
      <link>https://tproger.ru/articles/git-v-telegram--kak-ya-izbavilsya-ot-json--pobedil-markdown-i-polu</link>
      <comments>https://tproger.ru/articles/git-v-telegram--kak-ya-izbavilsya-ot-json--pobedil-markdown-i-polu?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Robin Gad]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/git-v-telegram--kak-ya-izbavilsya-ot-json--pobedil-markdown-i-polu</guid>
      <description><![CDATA[<p>Git в Telegram? Без JSON, с SQLite, победой над Markdown и security by design. Код, схема БД, факапы и ссылка на бота.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/git-v-telegram--kak-ya-izbavilsya-ot-json--pobedil-markdown-i-polu">Git в Telegram: как я избавился от JSON, победил Markdown и получил security by design</a>»</p>]]></description>
      <category><![CDATA[Git]]></category>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[JSON]]></category>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[SQL]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Tor]]></category>
      <category><![CDATA[HTML]]></category>
      <category><![CDATA[GitHub]]></category>
      <category><![CDATA[HR]]></category>
      <category><![CDATA[Telegram]]></category>
      <category><![CDATA[GitLab]]></category>
      <category><![CDATA[MIT]]></category>
      <category><![CDATA[IBM]]></category>
      <category><![CDATA[Мессенджер]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[Markdown]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 02 Jul 2026 06:39:38 GMT</pubDate>
      <content:encoded><![CDATA[<p>В своём Telegram-канале я время от времени предлагаю подписчикам выбрать очередную «бредовую» идею для реализации. На этот раз победил Git в Telegram: чтобы можно было инитить проекты, пушить файлы, коммитить — и всё это прямо в мессенджере.</p><p>С практической точки зрения проект на**й не нужен. Есть GitHub, GitLab и куча нормальных инструментов. Но как эксперимент — почему бы и нет? Чисто посмотреть, можно ли заставить Telegram работать как VCS.</p><h2>Почему не JSON</h2><p>На старте я думал: «Положу всё в JSON, на кой мне база данных?» Проектов мало, пользователей немного, файлы текстовые — чего заморачиваться?</p><p>Подергал JSON туда-сюда пару дней и понял: не варик.</p><ol><li>Конкурентный доступ. Два юзера одновременно коммитят — один перезаписывает файл другого.</li><li>Целостность данных. Если бот упал в середине записи — JSON остаётся в невалидном состоянии.</li><li>Версионность. Хранить историю изменений в JSON — это просто перенести проблему из кода в структуру файла.</li></ol><p>Вывод: JSON — для конфигов, а не для данных, которые меняются каждую секунду.</p><h2>Выбор SQLite и схема БД</h2><p>Выбрал SQLite, потому что:</p><ul><li>Не надо поднимать отдельный сервер</li><li>Целостность данных на уровне движка (транзакции, foreign keys, rollback)</li><li>Всё в одном файле — скопировал и унёс</li></ul><p>Сущности:</p><ul><li>users — telegram_id, username, current_project_id</li><li>projects — owner_id, name, thread_id (каждый проект живёт в своём треде канала)</li><li>files — filename, current_version, флаг modified (файл изменился и готов к коммиту)</li><li>file_versions — мясо. Каждая версия файла с полным содержимым. Привязана к file_id и опционально к commit_id</li><li>commits — сообщение, время, ссылка на проект</li><li>commit_files — связка коммитов с версиями файлов (many-to-many, чтобы поддержать ветки)</li></ul><p>Почему так: я хотел иметь возможность откатиться к любой версии любого файла. Да, база распухнет, но текстовые файлы — это не гигабайты видео. Плюс наличие file_versions и commit_files позволяет делать diff между версиями и смотреть историю изменений.</p><p>В коде вместо голых кортежей из SQL — датаклассы:</p><h2>Маркдауновый ад</h2><p>Казалось бы: взял код, обернул в тройные апострофы, кинул в Telegram. Telegram сам подсветит синтаксис, если указать язык. Красота. В теории.</p><p>На практике Telegram использует свой диалект Markdown, где куча служебных символов: _ * [ ] ( ) ~ &gt; # + - = | { } . !</p><p>Попытка 1: заэкранировать всё подряд. Результат: код превращается в кашу. Вместо<b> </b><i>def  __init__- </i> получается <i>def |_|_init|_|_ </i> — уже не запустишь, и в канале выглядит как говно.</p><p>Попытка 2: не экранировать вообще. Telegram шлёт на**й с ошибкой «can't parse entities».</p><p>Попытка 3: экранировать только то, что реально ломает разметку. Выяснилось, что порядок важен. Сначала экранируем точки и подчеркивания, потом обратную косую черту. Но и это не панацея — последовательности типа \*</p><p>после экранирования превращаются в \\*, и Telegram снова недоволен.</p><p>Попытка 4: разбивать на части. Для больших файлов делаю превью (первые 50 строк), экранирую их, отправляю как код, а полную версию — файлом. И тут начался ад: Telegram находил ошибки в тех частях кода, которых в превью вообще не было. Оказывается, он всё равно парсил полный код, даже если отправлялась только его часть.</p><p>Попытка 5 (финал): забил на Markdown и перешёл на HTML. Telegram умеет его принимать. Да, он не такой красивый, но зато предсказуемый:</p><p>Никаких точек, подчеркиваний, обратных слешей. Просто экранируем три символа — и код летит как надо.</p><h2>Security by design</h2><p>Когда бот начал обрастать функциями, я задумался о безопасности. Чтобы никто не мог коммитить или удалять чужие файлы, начал писать проверки в каждую команду:</p><p>Добавил в /commit. Потом решил с другого аккаунта потестировать команды на чужих файлах. И тут бот на каждую команду стал выдавать «файл не найден» или «проект не найден». И я понял: безопасность уже работает. С самого начала. Из коробки. Без единой строчки кода.</p><p>Как так вышло? В таблице projects с самого начала было поле owner_id. При создании проекта я писал туда telegram_id  владельца. Все запросы к БД фильтруются по этому полю:</p><p>Показать проекты — только свои. Найти файл — только в своих проектах. Выбрать проект — только из своих. Никаких лишних проверок. Просто SQL-запросы, которые с самого начала учитывали владельца.</p><h2>Команды: от семи до двух десятков</h2><p>Изначально казалось, что команд будет немного. Но...</p><p>Жизнь рассудила иначе.</p><ul><li>База: /start, /init, /use, /list, /ls, /commit, /log, /status</li><li>Удаление: /rm, /rmproject + подтверждение</li><li>Игнор: /ignore, /ignored, /unignore</li><li>Ветки: /branch, /branches, /checkout</li><li>Диффы и просмотр: /diff, /cat</li></ul><p>Итого — уже под два десятка. И это не предел.</p><h2>Простота &gt; абстракции</h2><p>В моём коде нет абстрактных базовых классов. Совсем. Потому что они нужны только когда у тебя есть минимум две разные реализации одного и того же. В GitGram всё проще: один способ работать с БД, один способ шифровать, один способ парсить .gitignore.</p><p>Если завтра появится вторая реализация — тогда и буду делать интерфейс. А пока это просто оверхед.</p><p>В GitGram:</p><ul><li>Хочешь понять, как работает add_file — идёшь в database.py и читаешь 10 строк кода.</li><li>Хочешь увидеть обработчик /commit — открываешь bot.py и смотришь.</li></ul><p>Никаких AbstractMinerShieldEventProcessor, BaseGitGramManager, InterfaceProviderFactory.</p><p>Код должен быть тупым. Чем тупее — тем проще его читать и отлаживать.</p><h2>Что дальше</h2><p>В планах:</p><ul><li>Докрутить коллаборацию (несколько человек над одним проектом)</li><li>Приватные репозитории</li><li>Кодспейс прямо в боте (да да знаю я сошёл с ума и бла бла бла..)</li></ul><h2>Итог</h2><p>GitGram принимает файлы, режет их на куски если надо, постит в канал с подсветкой. Коммиты ходят, ветки переключаются, диффы показываются. Всё это в тредах, каждый проект отдельно.</p><p>На практике GitGram ни к чему. Но сама задумка — Git в Telegram — это же так прикольно. Просто посмотреть, можно ли такое вообще запилить.</p><h2>Если хочешь поучаствовать</h2><ul><li><a href="https://t.me/Git_Gram/314" rel="nofollow">GitGram</a></li><li>Чат для хардкорных: <a href="http://t.me/sandbox_hardcore" rel="nofollow">@sandbox_hardcore</a> — вся сырая разработка, факапы и обсуждения (без цензуры)</li></ul><p>Подписывайся на мой <a href="https://t.me/+q0NBWy428y1hODEy" rel="nofollow">TГ-канал</a> — там я публикую все свои эксперименты, код и приглашаю к обсуждению. Только факты, мат и никакой политоты.</p>]]></content:encoded>
    </item>
    <item>
      <title>Представляем MDN MCP server</title>
      <link>https://tproger.ru/translations/predstavlyaem-mdn-mcp-server</link>
      <comments>https://tproger.ru/translations/predstavlyaem-mdn-mcp-server?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Евгений Стребков]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/translations/predstavlyaem-mdn-mcp-server</guid>
      <description><![CDATA[<p>MDN MCP server переносит актуальную документацию и данные о совместимости браузеров прямо в редактор или AI-агента. Разбираем, как подключить и почему точнее.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/translations/predstavlyaem-mdn-mcp-server">Представляем MDN MCP server</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[Веб-разработка]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[Искусственный интеллект]]></category>
      <category><![CDATA[Браузеры]]></category>
      <category><![CDATA[Mozilla]]></category>
      <category><![CDATA[Переводы]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 15 Jun 2026 11:30:35 GMT</pubDate>
      <content:encoded><![CDATA[<p>Перевод статьи The MDN Team из MDN Blog, оригинал: <a href="https://developer.mozilla.org/en-US/blog/introducing-mdn-mcp-server/">Introducing the MDN MCP server</a>.</p><p>Мы рады анонсировать выпуск MDN MCP server. MCP (Model Context Protocol) — открытый стандарт, который позволяет ИИ-инструментам подключаться к внешним источникам данных. MDN MCP server использует этот протокол, чтобы перенести документацию MDN и данные о совместимости браузеров прямо в вашего ИИ-агента или IDE.</p><ul><li>MDN MCP server — экспериментальный сервер по протоколу MCP.</li><li>Даёт ИИ-агентам и IDE доступ к актуальной документации MDN и данным о совместимости браузеров.</li><li>Работает с VS Code, Zed, Cursor, Claude Code, Codex CLI, Antigravity CLI и Claude Desktop.</li><li>В тестах с Claude Code Opus 4.7 MDN MCP дал гораздо точнее и надёжнее результаты о поддержке браузеров.</li><li>Ответы с MDN MCP были вдвое быстрее, чем без него.</li></ul><h2>Зачем мы создали MDN MCP</h2><p>Всё больше ИИ-инструментов интегрируется в рабочие процессы веб-разработки, но они могут выдавать устаревшую информацию о веб-платформе из-за обучающих данных и даты знания модели.</p><p>Например, LLM или агент для написания кода может не знать, что существует функция вроде @view-transition CSS at-rule, или не знать, достигла ли она статуса Widely Available в Baseline и безопасна ли для использования во всех браузерах.</p><p>MDN MCP даёт вашему агенту для написания кода доступ к точной и актуальной информации о веб-платформе. Также он упрощает доступ к последней документации, не покидая привычные инструменты.</p><p>Сервер сейчас находится в экспериментальном статусе. Подробности об обработке данных в этой фазе — в нашей <a href="https://developer.mozilla.org/en-US/mcp#privacy_and_data_retention">заметке о приватности</a>.</p><h2>Как использовать MDN MCP</h2><p>MDN MCP server работает с любым MCP-совместимым клиентом, включая:</p><ul><li><b>Редакторы</b>: VS Code, Zed и Cursor.</li><li><b>CLI-агенты</b>: Claude Code, Codex CLI и Antigravity CLI (ранее Gemini CLI).</li><li><b>Чат-приложения</b>: Claude Desktop.</li></ul><p>Ссылки в этом списке ведут к инструкциям по настройке MCP для каждого инструмента. Инструкции по установке и другие детали — на нашей странице <a href="https://developer.mozilla.org/en-US/mcp">MDN MCP server</a>.</p><p>Как быстрый пример, чтобы использовать его с Claude Code, нужно выполнить следующую команду:</p><p>Мы с нетерпением ждём, как вы интегрируете его в свой рабочий процесс веб-разработки и в каких сценариях он окажется наиболее полезен.</p><h2>Какую разницу даёт MCP</h2><p>Учитывая недетерминированную природу LLM и разнообразие доступных моделей, часто сложно сравнивать их поведение с включёнными или выключенными навыками, промптами, инструментами и MCP.</p><p>Мы протестировали Claude Code Opus 4.7 с MDN MCP и без него на нескольких функциях, недавно появившихся в Firefox 150 и 151, спрашивая, как использовать функции и какая у них поддержка браузеров. А именно:</p><ol><li>Как использовать CSS-функцию light-dark() для изображений и какие браузеры её поддерживают?</li><li>Как использовать CSS-псевдокласс :buffering и какие браузеры его поддерживают?</li><li>Как использовать атрибут shadowrootslotassignment на элементе  и какие браузеры его поддерживают?</li><li>Как использовать Web Serial API и какие браузеры его поддерживают?</li></ol><p>Мы заметили определённые закономерности в результатах. В большинстве случаев заметки по использованию от Claude Code с MDN MCP и без него были сопоставимы. Часть ответов, использовавших MCP, была структурирована лучше и полнее. Например, заметки для CSS-функции light-dark() также включали примеры с линейными градиентами, которые не были прямо упомянуты в вопросе, но тоже поддерживаются.</p><p>Когда дело дошло до информации о поддержке браузеров, победитель был очевиден: MDN MCP дал намного точнее и надёжнее результаты. Claude Code без MCP правильно определил поддержку браузеров только в одном случае — для псевдокласса :buffering.</p><p>Например, Claude Code без MCP настаивал, что декларативный атрибут shadowrootslotassignment поддерживается в Chrome 120 и Safari 18.3, возможно, путая его с опцией slotAssignment метода Element.attachShadow(). Но на самом деле Firefox 151 — первый браузер, в котором появилась поддержка этого атрибута.</p><p>Без MCP Claude Code также не дал никакой конкретной информации о поддержке браузеров для использования изображений в функции light-dark(): «поддержка менее однородна, чем вариант с цветом», тогда как с MCP он выдал полную таблицу с указанием Firefox 150 и Chrome (за флагом) как поддерживающих браузеров.</p><p>Худший результат Claude Code без MCP показал на вопросе про Web Serial API. Firefox 151 получил поддержку Web Serial API в мае 2026 года. Однако Claude Code без MCP правильно упомянул браузеры на базе Chromium как поддерживающие эту функцию, но также настаивал, что в Firefox она:</p><blockquote>Не реализовано (и не в планах — см. позицию Mozilla по стандартам: «вредно»).</blockquote><p>С включённым MCP Claude Code правильно определил, что Firefox 151 поставляет поддержку Web Serial API, согласно примечаниям к выпуску.</p><p>Кроме того, мы заметили, что в наших тестах ответы с использованием MDN MCP были вдвое быстрее. Без MCP Claude Code приходилось загружать и парсить немало HTML-страниц, чтобы найти актуальную информацию, что занимало время, но даже тогда не давало точных результатов.</p><h2>Поучаствовать</h2><p>Ваш отзыв помогает нам становиться лучше. Если вы столкнулись с проблемами, есть комментарии или предложения или хотите поделиться, как используете MDN MCP, мы будем рады услышать вас. Заходите в канал platform в нашем Discord. Если заметили проблемы, сообщайте о них в репозиторий <a href="https://github.com/mdn/mcp">mdn/mcp</a> на GitHub.</p><h2>Что дальше</h2><p>По мере того как ИИ-инструменты становятся всё большей частью рабочих процессов веб-разработки, мы стремимся сделать документацию MDN доступной там, где она вам нужна. Этот релиз — один шаг к этой цели, и мы с нетерпением ждём возможности продолжить улучшать опыт с вашей помощью.</p><p>Источник: <a href="https://developer.mozilla.org/en-US/blog/introducing-mdn-mcp-server/">Introducing the MDN MCP server — MDN Blog</a>.</p><p>Попробуйте подключить MDN MCP к своему редактору или агенту и проверьте, насколько точнее станут ответы о веб-платформе.</p>]]></content:encoded>
    </item>
    <item>
      <title>Как я перестал метаться между нейросетями и устроил им общий экзамен</title>
      <link>https://tproger.ru/articles/kak-ya-perestal-metatsya-mezhdu-nejrosetyami-i-ustroil-im-obshhij-ekz</link>
      <comments>https://tproger.ru/articles/kak-ya-perestal-metatsya-mezhdu-nejrosetyami-i-ustroil-im-obshhij-ekz?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[AIguide]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kak-ya-perestal-metatsya-mezhdu-nejrosetyami-i-ustroil-im-obshhij-ekz</guid>
      <description><![CDATA[<p>Я рассказываю, как перестал доверять рандомным «вау»-кадрам и устроил честный экзамен нейросетям для генерации изображений. Замерял качество, скорость, форматы и стоимость на реальных задачах, а в итоге собрал понятный пайплайн выбора AI-сервисов без магии и маркетинга.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kak-ya-perestal-metatsya-mezhdu-nejrosetyami-i-ustroil-im-obshhij-ekz">Как я перестал метаться между нейросетями и устроил им общий экзамен</a>»</p>]]></description>
      <category><![CDATA[Git]]></category>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[Нейронные сети]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[HTML]]></category>
      <category><![CDATA[GitHub]]></category>
      <category><![CDATA[TypeScript]]></category>
      <category><![CDATA[Node.js]]></category>
      <category><![CDATA[Сервисы]]></category>
      <category><![CDATA[Аналитика]]></category>
      <category><![CDATA[аналитик]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 12 May 2026 09:54:04 GMT</pubDate>
      <content:encoded><![CDATA[<h2>Оглавление</h2><ol><li>Как я утонул в генерациях</li><li>Экзамен вместо «прыжков» по сервисам</li><li>Небольшой технический конвейер</li><li>Зачем цифры важнее впечатлений</li><li>Простой тест на форматы</li><li>Как ведут себя Riverflow, Flux и Seedream</li><li>Отчёты, артефакты и спокойная аналитика</li><li>Сценарий «восемь формулировок»</li><li>Зрелый подход к выбору AI</li></ol><p>В прошлой статье я рассказывал, как собрал тестовый стенд для AI‑генерации. Теперь — про то, как превратил его в живой процесс с разными сценариями и метриками.</p><h2>1. Как я утонул в генерациях</h2><p>Я осознал что  в очередной раз листал чат и не мог найти тот самый удачный вариант обложки.</p><p>Ситуация повторялась по одному и тому же шаблону. Запускаю один сервис — получаю результат, морщу лицо и сразу иду в другой. Там промпт приходится переформулировать: движок по-другому читает слова. В третьем генераторе наконец складывается приятная композиция, но детализация рушит весь смысл. Через пару дней на диске лежит россыпь PNG, а я уже не понимаю, где оказался осознанный успех, а где просто повезло. В какой-то момент я сказал себе: стоп. Случайные «попробую тут, попробую там» не ведут никуда.</p><h2>2. Экзамен вместо «прыжков» по сервисам</h2><p>Тогда я придумал простое правило. Любой сервис, который претендует на место в моём рабочем наборе, должен пройти экзамен. Не приятную беседу с общими вопросами, а одинаковый для всех, жёсткий сценарий. Без исключений и любимчиков.</p><h2>3. Небольшой технический конвейер</h2><p>Реализация получилась до обидного простой. Node.js, TypeScript, запуск через tsx. Список моделей вынесен в отдельный конфиг, API-ключ лежит в .env, а команды запуска выглядят вроде npm run test:niche или npm run test:collage-2x2-eight-prompts. Я взял творческий хаос и сложил его в аккуратный pipeline.</p><p>Дальше всё происходит автоматически: запускаешь тест — и один и тот же набор задач последовательно проходит через всех кандидатов. Мой вклад заканчивается на нажатии Enter.</p><h2>4. Зачем цифры важнее впечатлений</h2><p>Зачем вообще так усложнять? Потому что мантра «любая нейросеть — она и есть нейросеть» на практике не работает. Разброс колоссальный. Один сервис очень аккуратно держит геометрию кадра, но мелкие детали превращает в мыло. Другой рисует фактуру так, что хочется печатать и вешать, но при запросе «коллаж 3×3 с чёткими границами» внезапно решает творчески переосмыслить сетку. Третий стабильно отвечает и по времени, и по предсказуемости, но на сотне запросов выписывает такой чек, что хочется закрыть вкладку.</p><p>Если не фиксировать метрики, всё превращается в разрозненные ощущения. Сегодня это кажется идеальным инструментом, завтра тот же сервис тихо сжигает бюджет на десятке однотипных задач. И ты не можешь точно сказать, в какой момент всё поехало.</p><h2>5. Простой тест на форматы</h2><p>Возьмём самый базовый пример — проверка соотношения сторон. Формулировка элементарная: закат над горами, три варианта — 3:4, 1:1 и 16:9. Казалось бы, минимальный уровень адекватности. Но нет.</p><figure><img src="https://media.tproger.ru/user-uploads/138437/2026-05-12/967623f7-34c5-4109-ae88-7c3ccd8122f0.webp" alt="" /><figcaption>таблица 1</figcaption></figure><figure><img src="https://media.tproger.ru/user-uploads/138437/2026-05-12/c77d406d-862c-492c-bc89-733b8cb50349.webp" alt="" /><figcaption>таблица 2</figcaption></figure><figure><img src="https://media.tproger.ru/user-uploads/138437/2026-05-12/2b48f70f-e37d-4ab1-bc2a-826a5fa72d56.webp" alt="" /><figcaption>таблица 3</figcaption></figure><figure><img src="https://media.tproger.ru/user-uploads/138437/2026-05-12/1b27a8d8-19e1-4a94-968b-475fc8cea34c.webp" alt="" /><figcaption>таблица 4</figcaption></figure><figure><img src="https://media.tproger.ru/user-uploads/138437/2026-05-12/ad59138a-e1f9-49f7-ae5c-03c3819768e9.webp" alt="" /><figcaption>таблица 5</figcaption></figure><p>Достаточно пробежать глазами столбец со статусом. Три запроса — три быстрых проверки «на глаз». Там, где на 3:4 и 16:9 горит FAIL, модель откровенно игнорирует задачу и рисует квадрат или удобный для себя формат. И это при том, что промпт простейший: не сложная сцена, не коллаж — всего лишь «закат, горы и нужная рамка».</p><h2>6. Как ведут себя Riverflow, Flux и Seedream</h2><p>Если посмотреть на результаты, riverflow-v2-pro аккуратно соблюдает все три формата. Но за эту аккуратность приходится платить временем: портретная картинка генерируется около 360 секунд. Шесть минут — роскошь, если у вас в руках горящий дедлайн. Упрощённая версия, riverflow-v2-fast, выдаёт правильные форматы за секунды и остаётся в адекватных рамках по времени — это уже инструмент для реальных задач.runware+2</p><p>С моделями Flux история другая. Почти вся линейка black-forest-labs стабильно промахивается по нестандартным форматам: колонка «Соотношение» упорно показывает 4/3 или 1/1, хотя в запросе чётко указано «16:9, wide landscape». Относительно ровно ведёт себя только flux.2-max, который хотя бы честно выдаёт квадрат, но проблемы с другими соотношениями никуда не деваются.github+1</p><p>Seedream-4.5 от Bytedance, напротив, поражает скоростью: ответы прилетают за 7–8 секунд, но модель регулярно игнорирует заданный формат и возвращает квадрат 2048×2048. Для макета, привязанного к конкретным пропорциям — сторис, постера или баннера — такая «быстрота» только ломает всю вёрстку.eachlabs+1</p><h2>7. Отчёты, артефакты и спокойная аналитика</h2><p>Вся эта конструкция нужна ради пары простых эффектов. Каждый запуск сохраняет статус, итоговый размер, время генерации и, где это важно, стоимость. После завершения прогона скрипты собирают HTML-отчёт. Открываешь его в браузере — и на одном экране сразу видно, кто действительно справился, а кто только шумит.</p><p>Особенно сильно это помогает в задачах, где критична композиция: нужна ровная сетка 2×2 или 3×3 без самодеятельности в духе «я тут чуть подвину, так красивее». Это как раз те случаи, когда от сервиса нужна дисциплина, а не внезапные художественные «инициативы».</p><h2>8. Сценарий «восемь формулировок»</h2><p>Отдельный пласт наблюдений даёт сценарий «восемь формулировок» (collage-2x2-eight-prompts). Суть задачи не меняется, контент остаётся одним и тем же. Я варьирую только подачу: где-то пишу запрос грубо и коротко, где-то — щадяще и структурно, местами добавляю лишний контекст.</p><p>На этом месте становится видно, как модель реагирует не на саму тему, а на стиль запроса. Одна и та же нейросеть спокойно выдерживает строгое техническое ТЗ и проваливается при формулировке «сделай красиво, сам понимаешь». После таких тестов по-другому относишься к промптам: начинаешь формулировать точнее, понимая, какая модель как «слушает» текст. И внезапно исчезают загадки в духе «почему здесь получилось, а там всё развалилось».</p><h2>9. Зрелый подход к выбору AI</h2><p>Главный вывод из всей этой истории довольно приземлённый. Выбирать AI-сервисы по рекламе, по восторженным постам в Telegram или по одному удачному демо-кадру — путь к разочарованию. Их нужно ставить в одинаковые условия. Прогонять по своим реальным задачам, а не по чужим презентациям. Сохранять результаты и сравнивать их по конкретным цифрам.</p><p>Когда делаешь так, выбор перестаёт быть эмоциональной пыткой в стиле «нравится / не нравится». Он превращается в спокойное рабочее решение: этот сервис — для быстрых черновиков, этот — для вылизанной композиции, этот — для длинных и сложных запросов, в которых ошибка по смыслу недопустима. В этот момент генерация перестаёт быть магическим ритуалом с сюрпризами и превращается в нормальный, предсказуемый инструмент. Таким, каким он и должен был быть изначально.</p>]]></content:encoded>
    </item>
    <item>
      <title>Как подключить общую память к Claude Code и Cursor за 5 минут</title>
      <link>https://tproger.ru/articles/kak-podklyuchit-obshhuyu-pamyat-k-claude-code-i-cursor-za-5-minut</link>
      <comments>https://tproger.ru/articles/kak-podklyuchit-obshhuyu-pamyat-k-claude-code-i-cursor-za-5-minut?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[C0Ally]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kak-podklyuchit-obshhuyu-pamyat-k-claude-code-i-cursor-za-5-minut</guid>
      <description><![CDATA[<p>Как подключить общую память к Claude Code и Cursor за 5 минут, общая shared память для ИИ-агентов. Общий контекст и экономия ресурсов. CoAlly</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kak-podklyuchit-obshhuyu-pamyat-k-claude-code-i-cursor-za-5-minut">Как подключить общую память к Claude Code и Cursor за 5 минут</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[Опрос]]></category>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[Искусственный интеллект]]></category>
      <category><![CDATA[Рефакторинг]]></category>
      <category><![CDATA[Slack]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[Навыки]]></category>
      <category><![CDATA[HR]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sat, 09 May 2026 07:40:02 GMT</pubDate>
      <content:encoded><![CDATA[<p>Работаю с Claude Code и Cursor параллельно. Claude Code хорош для архитектурных задач и рефакторинга, Cursor - для быстрого редактирования и code review. Проблема одна: они друг про друга ничего не знают. И даже при выполнении задач в одной среде разработки через пару дней уже и не вспомнишь что решил, почему, приходится опять просить агента изучить контекст и разобраться чтобы получить нужную информацию. Это время и токены.</p><p>Сделал себе инструмент, который это решает. Потом оформил в продукт. Называется <b>CoAlly</b> - сервер, который дает агентам общую память.</p><h2>Что он делает</h2><p>Агент автоматически сохраняет контекст работы: какие решения принял, какие файлы затронул, почему сделал так, а не иначе. Когда другой агент (или тот же, но в новой сессии) берется за связанную задачу, он находит этот контекст через семантический поиск.</p><p>Запрос "проблемы с авторизацией" найдет запись про "token refresh rotation", хотя слова совершенно разные. Работает через эмбеддинги и косинусное расстояние, скоро выйдет фича с анализом смысловой корреляции при поиске.</p><h2>Подключение</h2><h2>Шаг 1: регистрация</h2><p>Заходим на <a href="https://coally.cortexally.ai">coally.cortexally.ai</a>, создаем аккаунт. Получаем API ключ.</p><h2>Шаг 2: подключение к агенту (Claude, Cursor и др.)</h2><p>Одна команда в терминале:</p><p>claude mcp add coally-nexus --transport sse https://coally.cortexally.ai/sse --header "Authorization: Bearer ВАШ_КЛЮЧ"</p><p>Перезапускаем Claude Code. В списке MCP-инструментов должен появиться coally-nexus.</p><p><b>Cursor, Windsurf, VSCode</b></p><p>Заходим в настройки Cursor -&gt; Settings -&gt; MCP -&gt; Settings (значок шестеренки) или создаем/редактируем файл `.cursor/mcp.json` в корне проекта (или в домашней директории для глобального подключения):</p><p>Файл `~/.codeium/windsurf/mcp_config.json` для Windsurf или соответствующее меню для VSCode и других его форков.</p><p>Перезапускаем IDE|Agent. Готово.</p><h2>Первая сессия</h2><p>После подключения агент при первом взаимодействии проиндексирует проект автоматически. Если нет - попросите: "<i>проиндексируй этот проект через CoAlly</i>".</p><p>Что происходит при индексации: сканируется дерево проекта, находятся конфиги, важные воспоминания, memorybanks и др., все это эмбеддится и сохраняется как контекст.</p><p>Дальше агент сам начнет сохранять контекст работы после значимых изменений. Если нужно явно сохранить что-то: "<i>сохрани контекст этой задачи в CoAlly</i>".</p><h2>Что получаем</h2><p>На вопрос "<i>что вчера делали по задаче авторизации? какой статус бага с токеном и сколько времени потребуется на доработку</i>" Агент достает из <b>CoAlly</b> записи: "<i>вчера в Cursor поправили ротацию токенов, причина была в TTL, затронули два файла. Могу сразу продолжить и на основе коммитов ... исправить точечно флоу, время на исправление — N минут.</i>"</p><p>Если работаете в команде - еще полезнее. Контекст коллеги тоже доступен. Его экспертиза и навыки также постепенно приобретают цифровую версию. Не нужно ждать стендап или писать в Slack.</p><p><b>Ограничения</b></p><p>Агенты иногда игнорируют инструкции и не сохраняют контекст. Бывает. Можно просить явно.</p><p>Семантический поиск хорош, но не идеален. Если запрос слишком общий ("что нового?"), результаты будут размытыми. Конкретные вопросы работают лучше.</p><p>Бесплатный тариф - 2 проекта. Для личного использования хватает. Для команд - тарифы Team и Enterprise.</p>]]></content:encoded>
    </item>
    <item>
      <title>OwnCloud – аналог Nextcloud: для чего использовать и как настроить облачное хранилище</title>
      <link>https://tproger.ru/articles/owncloud-analog-nextcloud-dlya-chego-ispolzovat-i-kak-nastroi</link>
      <comments>https://tproger.ru/articles/owncloud-analog-nextcloud-dlya-chego-ispolzovat-i-kak-nastroi?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Oksana Karelina]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/owncloud-analog-nextcloud-dlya-chego-ispolzovat-i-kak-nastroi</guid>
      <description><![CDATA[<p>ownCloud vs Nextcloud, что лучше? Какое облачное хранилище выбрать? Как может помочь связка S3 с ownCloud?
</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/owncloud-analog-nextcloud-dlya-chego-ispolzovat-i-kak-nastroi">OwnCloud – аналог Nextcloud: для чего использовать и как настроить облачное хранилище</a>»</p>]]></description>
      <category><![CDATA[Linux]]></category>
      <category><![CDATA[Android]]></category>
      <category><![CDATA[Опрос]]></category>
      <category><![CDATA[MySQL]]></category>
      <category><![CDATA[Конференции]]></category>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[SQL]]></category>
      <category><![CDATA[Windows]]></category>
      <category><![CDATA[iOS]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Tor]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[Rust]]></category>
      <category><![CDATA[HR]]></category>
      <category><![CDATA[Docker]]></category>
      <category><![CDATA[macOS]]></category>
      <category><![CDATA[ICO]]></category>
      <category><![CDATA[Redis]]></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[1C]]></category>
      <category><![CDATA[Бизнес]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 07 May 2026 08:40:02 GMT</pubDate>
      <content:encoded><![CDATA[<p>Вы когда-нибудь задумывались, сколько информации производит человечество?</p><p>Если верить статистике, сейчас ежедневно создается около <a href="https://explodingtopics.com/blog/data-generated-per-day">402,74</a> миллионов терабайт данных.</p><p>Согласитесь, довольно внушительная цифра.</p><p>В этих реалиях, когда объем данных постоянно растет, у каждого из нас рано или поздно может возникнуть вопрос – где хранить рабочие и личные файлы, да еще и так, чтобы сохранить абсолютный контроль над ними.</p><p>Меня зовут Оксана, я маркетолог в Beget и в этой статье хочу поделиться решением, которое мы выбрали у себя в отделе для хранения файлов, когда заметили, что их стало слишком много.</p><p>Мы решили перейти на гибкое объектное хранилище S3 – чтобы централизовано хранить и управлять текстами, креативами, отчетами и другими маркетинговыми материалами с удобным доступом внутри команды, ведь S3 позволяет хранить файлы любого типа и объема и масштабируется автоматически. Осталось только выбрать ПО для хранения файлов в облаке, к которому можно подключить S3.</p><p>Ранее у нас был опыт использования Nextcloud, однако его функционал, подобный швейцарскому ножу (встроенные календарь, конференции, таск-трекер и т. д.), оказался слишком объемен для нашей, по сути, скромной задачи – удобного и стабильного хранения файлов.</p><p>Вот почему мы подыскали аналог Nextcloud – ownCloud. В отличие от более функционального <a href="https://beget.com/ru/cloud/marketplace/nextcloud">Nextcloud</a>, ownCloud заточен исключительно на работу с файлами. И при этом он поддерживает подключение облачного объектного хранилища S3. Поэтому для нас в сравнении Nextcloud vs ownCloud выбор был очевиден.</p><p>В этой статье я расскажу, какие возможности есть у ownCloud, почему это ПО может быть полезно и как настроить связку ownCloud и S3. Если вы хотите организовать безопасное, контролируемое хранение и обмен данными на работе или дома, то этот материал будет для вас полезен.</p><h2>Что может ownCloud</h2><p>Для начала – буквально несколько слов об ownCloud и его возможностях.</p><p>Это программное обеспечение с открытым исходным кодом для хранения, синхронизации и обмена файлами появилось в 2010 году благодаря усилиям разработчика KDE Франка Карличека, который <a href="https://ru.wikipedia.org/wiki/OwnCloud">стремился</a> создать бесплатную альтернативу коммерческим облачным сервисам хранения данных.</p><h3>OwnCloud позволяет:</h3><ol><li>получать доступ к данным из любой точки мира и хранить файлы на собственном сервере – под вашим полным контролем;</li><li>синхронизировать данные между устройствами – доступ к файлам возможен с компьютеров (Windows, macOS, Linux), смартфонов (iOS, Android) и через браузер, изменения на одном устройстве мгновенно появляются на всех остальных;</li><li>делиться файлами и папками по ссылке, настраивая права доступа, пароли и срок действия ссылок;</li><li>совместно работать с документами, отслеживать историю изменений и возвращаться к любой предыдущей версии файла.</li></ol><blockquote>Только ownCloud сочетает в себе полный контроль над данными с простыми в использовании функциями обмена файлами, делая совместную работу более эффективной и безопасной.</blockquote><p>Сегодня ownCloud используют <a href="https://owncloud.com/customers/">компании</a> (Philips, Nationwide, Zeppelin и др.) в самых разных сферах (IT, машиностроение, медицина и т. д.).</p><p>При этом решение подходит не только для работы, но и для личных целей, когда нужно обменяться фото и видео с родственниками и друзьями, ведь, по мнению пользователей, среди преимуществ ownCloud – <a href="https://www.capterra.com/p/176602/ownCloud/reviews/">простота настройки</a> и <a href="https://www.temjournal.com/content/102/TEMJournalMay2021_954_960.pdf">удобная синхронизация с различными гаджетами</a>.</p><blockquote>С ownCloud мне не нужно слепо доверять какой-то неопределенной организации. Я контролирую, как происходит обмен файлами, и ownCloud помогает мне на каждом этапе.</blockquote><p>OwnCloud позволяет решать самые разные задачи, связанные с работой с файлами, – расскажем на примере трех кейсов, как это облачное хранилище помогает нам в отделе маркетинга.</p><h2>Для каких задач мы используем ownCloud и S3</h2><h3>1. Централизованное управление материалами</h3><p>Мы часто работаем с текстами, изображениями и презентациями. Дизайнеры и авторы загружают эти материалы в ownCloud, файлы автоматически сохраняются в S3, а для удобства поиска у нас настроены теги.</p><p>В итоге каждый член команды может видеть версии файлов (это важно для правок), нет хаоса в почте и мессенджерах.</p><h3>2. Безопасное взаимодействие с подрядчиками</h3><p>Связка ownCloud и S3 позволяет выгружать внешним специалистам материалы и получать результаты работ без прямого доступа к внутренней сети компании. Мы создали папку с публичной ссылкой, но жесткими ограничениями – паролем, сроком жизни ссылки в течение нескольких дней и разрешением на загрузку файлов без права просмотра папки.</p><p>На практике это работает так: менеджер создает ссылку и отправляет подрядчику, подрядчик переходит по ссылке и загружает архив с готовыми материалами, файл попадает в ownCloud, а его содержимое сохраняется в S3. Таким образом, подрядчик не видит, какие еще файлы лежат в папке, а мы контролируем, кто, что и когда загрузил.</p><h3>3. Долгосрочный архив креативов и отчетов</h3><p>По закону (152-ФЗ в РФ или GDPR в Европе) компания обязана хранить персональные данные клиентов, а также отчеты о рассылках и рекламных акциях на протяжении определенного времени.</p><p>Для решения этой задачи мы настроили правило: файлы старше 90 дней автоматически перемещаются в S3 Glacier (холодное хранилище) – этот класс снижает стоимость хранения, а если, например, юристу понадобится скачать какой-нибудь отчет спустя 2–3 года, он просто выгрузит его из ownCloud буквально за 5–10 минут.</p><p>Теперь – в деталях и по шагам о том, как начать использовать ownCloud в связке с S3.</p><h2>Как развернуть ownCloud и подключить S3</h2><p>OwnCloud удобно использовать с объектным хранилищем S3 – таким образом можно:</p><ol><li>масштабировать систему – S3 расширяется автоматически и не имеет ограничений по объему и количеству размещаемых данных и файлов;</li><li>оптимизировать затраты – можно платить не за дорогую конфигурацию виртуального сервера с большим объемом диска, а лишь за фактически занимаемое место, по модели pay as you go (оплата по мере потребления);</li><li>повысить надежность хранения – за счет встроенной в S3 тройной репликации данных (файлы хранятся в 3 копиях и размещаются на независимых серверах в разных стойках для абсолютной сохранности данных).</li></ol><h3>Итак, разберем, как настроить связку ownCloud и S3.</h3><p>Разработчики ownCloud предлагают два варианта установки. Можно скачать ownCloud и установить его вручную или использовать Docker-контейнеры. Мы выберем второй вариант.</p><p>Для размещения ownCloud в нашем примере создадим виртуальный сервер на базе <a href="https://beget.com/ru/cloud/marketplace/docker">готового решения Docker</a>.</p><p>Можно подключиться к серверу по SSH или с помощью терминала в панели управления.</p><p>Для размещения файлов создайте бакет объектного хранилища S3. Реквизиты доступа к нему будут в карточке бакета в панели:</p><figure><img src="https://media.tproger.ru/user-uploads/105012/2026-04-29/ee49d00b-7e32-4b8d-8ad4-bbbaeb0c3bb0.webp" alt="" /></figure><p>Создайте директорию для размещения конфигурационных файлов проекта и перейдите в нее:</p><p>Затем вставьте в файл docker-compose.yml следующее содержимое с помощью любого текстового редактора:</p><p>После этого создайте файл .env, в котором будут храниться значения переменных. Шаблон файла следующий:</p><p>Теперь необходимо отредактировать эти строки:</p><ol><li>ownCloud_DOMAIN и ownCloud_TRUSTED_DOMAINS – укажите домен (так как ownCloud будет размещен за обратным прокси, указывать рабочий порт здесь не требуется);</li><li>ADMIN_USERNAME – логин администратора;</li><li>ADMIN_PASSWORD – пароль администратора.</li></ol><p><i>Обратите внимание! Изменение ADMIN_USERNAME и ADMIN_PASSWORD уже после развертывания контейнеров не возымеет эффекта. Изменить пароль администратора вы можете в настройках пользователя в веб-интерфейсе.</i></p><p>Далее необходимо указать параметры подключения к S3.</p><ul><li>ownCloud_OBJECTSTORE_BUCKET – имя бакета S3;</li><li>ownCloud_OBJECTSTORE_ENDPOINT – эндпоинт хранилища (например, https://s3.ru1.storage.beget.cloud);</li><li>ownCloud_OBJECTSTORE_REGION – регион (ru1 для Beget);</li><li>ownCloud_OBJECTSTORE_KEY – Access key бакета;</li><li>ownCloud_OBJECTSTORE_SECRET – Secret key бакета.</li></ul><p>Сохраните файл.</p><p>Остается лишь добавить файл конфигурации для Caddy – обратного прокси, через который пользователи будут получать доступ к ownCloud.</p><p>Создайте директорию config:</p><p>После чего создайте в ней файл конфигурации Caddyfile. Добавьте в него следующее содержимое, указав вместо ownCloud.betutorial.ru ваш домен ownCloud:</p><p><i>Обратите внимание! Caddy выпустит SSL-сертификат на домен автоматически.</i></p><p>Все запросы к домену будут проксироваться в контейнер ownCloud_server.</p><p>На этом настройка конфигурационных файлов завершена, можно запускать контейнеры:</p><p>Потребуется несколько минут, чтобы docker загрузил образ и развернул контейнеры.</p><p>После запуска перейдите по домену, чтобы проверить работу хранилища:</p><figure><img src="https://media.tproger.ru/user-uploads/105012/2026-04-29/934faf67-2939-40f3-840e-88af18ebfde3.webp" alt="" /></figure><p>Выполните вход со стандартными доступами.</p><p><i>Обратите внимание! Если ownCloud недоступен или вы получаете ошибку при входе со стандартными доступами, проверьте корректность конфигурационных файлов. После внесения изменений перезапустите контейнеры.</i></p><p>После входа вы попадете на главную страницу ownCloud. Перед началом работы мы крайне рекомендуем сменить стандартный пароль администратора. Сделать это можно, нажав на кнопку с именем пользователя в верхней правой части страницы и открыв раздел настроек.</p><figure><img src="https://media.tproger.ru/user-uploads/105012/2026-04-29/9f93c25a-3922-4223-b3bd-b45aaaf61edf.webp" alt="" /></figure><p>Теперь проверим работу объектного хранилища – перейдем на главную страницу и загрузим файлы:</p><figure><img src="https://media.tproger.ru/user-uploads/105012/2026-04-29/51a6e16f-ee9b-4e96-9a5c-7ef765f62286.webp" alt="" /></figure><p>Файлы также появились и в объектном хранилище:</p><figure><img src="https://media.tproger.ru/user-uploads/105012/2026-04-29/16e65ad7-28f9-462c-9af6-990d2cf3c878.webp" alt="" /></figure><p><i>Обратите внимание! Файлы, которые вы удалите в ownCloud, будут перемещены в корзину и останутся в S3. Для их полного удаления очистите корзину ownCloud.</i></p><p>Чтобы делиться паролями с новыми пользователями, необходимо настроить отправку почты в ownCloud, сделать это можно в разделе Settings&gt;General.</p><p>В нашем примере мы настроим отправку через SMTP:</p><figure><img src="https://media.tproger.ru/user-uploads/105012/2026-04-29/45e39a41-4bb1-4d19-9bfe-1e1db3afc4a6.webp" alt="" /></figure><p>После указания данных введите тестовый email и нажмите “Send email”. Если отправка успешна, вы получите уведомление об этом:</p><figure><img src="https://media.tproger.ru/user-uploads/105012/2026-04-29/5a22786d-3995-4e86-9b48-0a17363c8a18.webp" alt="" /></figure><p>А на почтовый ящик поступит письмо:</p><figure><img src="https://media.tproger.ru/user-uploads/105012/2026-04-29/f4043b49-9a17-42ed-a627-34502c2a16e8.webp" alt="" /></figure><p>На этом настройка завершена – можно начинать работать с файлами, используя связку ownCloud и S3.</p><h2>Заключение</h2><p>Если вы ловите себя на мысли, что данных стало настолько много, что поиск нужного файла порой происходит дольше, чем работа с ним (особенно если одни файлы хранятся на почте или в мессенджере, а другие – на ноутбуке или флешке), облачное хранилище может вам помочь.</p><p>Подобное ПО пригодится как для личных целей, так и для бизнеса – недаром в 2025 году в нашей стране был <a href="https://www.kommersant.ru/doc/8178724">зафиксирован</a> рост интереса крупного и среднего бизнеса к технологии облачного хранилища.</p><p>Надеюсь, эта статья была для вас полезна, а облачные хранилища помогут сделать ежедневную работу комфортнее.</p>]]></content:encoded>
    </item>
    <item>
      <title>Как я написал E2EE-мессенджер на Spring Boot и WebCrypto — и почему сервер не видит сообщения</title>
      <link>https://tproger.ru/articles/kak-ya-napisal-e2ee-messendzher-na-spring-boot-i-webcrypto-i-poch</link>
      <comments>https://tproger.ru/articles/kak-ya-napisal-e2ee-messendzher-na-spring-boot-i-webcrypto-i-poch?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Евгений Василенков]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kak-ya-napisal-e2ee-messendzher-na-spring-boot-i-webcrypto-i-poch</guid>
      <description><![CDATA[<p>Разбор архитектуры E2EE-мессенджера на Spring Boot 3, React и WebCrypto: X3DH, symmetric ratchet, AES-GCM, WebSocket, multi-device и ограничения реализации.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kak-ya-napisal-e2ee-messendzher-na-spring-boot-i-webcrypto-i-poch">Как я написал E2EE-мессенджер на Spring Boot и WebCrypto — и почему сервер не видит сообщения</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[Android]]></category>
      <category><![CDATA[Stack Overflow]]></category>
      <category><![CDATA[Git]]></category>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[Опрос]]></category>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[SQL]]></category>
      <category><![CDATA[iOS]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Tor]]></category>
      <category><![CDATA[GitHub]]></category>
      <category><![CDATA[Базы данных]]></category>
      <category><![CDATA[HR]]></category>
      <category><![CDATA[React]]></category>
      <category><![CDATA[Docker]]></category>
      <category><![CDATA[MIT]]></category>
      <category><![CDATA[Алиса]]></category>
      <category><![CDATA[Redis]]></category>
      <category><![CDATA[QA]]></category>
      <category><![CDATA[Мессенджер]]></category>
      <category><![CDATA[5g]]></category>
      <category><![CDATA[Приложение]]></category>
      <category><![CDATA[Взлом]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[1C]]></category>
      <category><![CDATA[PostgreSQL]]></category>
      <category><![CDATA[Grafana]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 05 May 2026 05:35:02 GMT</pubDate>
      <content:encoded><![CDATA[<figure><img src="https://media.tproger.ru/user-uploads/137649/2026-04-29/240e412b-4307-49f9-b24f-bde7e0a7fd9a.webp" alt="" /></figure><p>Я Java-разработчик и в основном работаю с backend: Spring Boot, базы данных, интеграции, авторизация, WebSocket — всё то, что обычно находится за интерфейсом.</p><p>В какой-то момент я поймал себя на мысли: я каждый день пользуюсь мессенджерами, но плохо понимаю, как они устроены внутри. Окей, JWT, WebSocket, PostgreSQL, Redis — это понятно. Но что технически означает фраза "end-to-end encryption"? Как сервер доставляет сообщения, если он не должен их читать? Где живут ключи? Что хранится в базе? Что происходит, если у пользователя два устройства?</p><p>Решил разобраться через практику. Написал мессенджер с нуля. Назвал Chaos Messenger.</p><p>Сразу честно: криптографическую часть я изучал вместе с Claude и ChatGPT — читал спецификации X3DH и Double Ratchet, разбирал примеры, задавал вопросы, пока не сложилась цельная картина. Frontend тоже делался с активной помощью ChatGPT: я backend-разработчик, React для меня не основная среда. Но архитектура, backend, интеграция WebCrypto, модель конвертов, хранение сообщений и принципиальные решения — мои.</p><p>Для меня AI здесь был не заменой понимания, а инструментом — примерно как документация, Stack Overflow и ревью коллег. Без понимания threat model и архитектуры такой проект всё равно не собрать.</p><p>В статье расскажу, как работает E2EE изнутри: как устанавливается сессия через X3DH, как каждое сообщение получает отдельный ключ через Symmetric Ratchet, почему сервер хранит только зашифрованные конверты, и какие ошибки я допустил по дороге.</p><p>Стек: Spring Boot 3, React 18, WebCrypto API, PostgreSQL, Redis, WebSocket/STOMP, Prometheus, Grafana.</p><figure><img src="https://media.tproger.ru/user-uploads/137649/2026-04-29/4b028f37-2de1-46ea-a247-567f74fb3081.webp" alt="" /></figure><h2>Важная оговорка про web-E2EE</h2><p>Когда я говорю, что сервер не может прочитать сообщения, я имею в виду backend, базу данных, WebSocket-слой и уже сохранённые ciphertext-конверты. У них нет ключей и plaintext.</p><p>Но у web-E2EE есть отдельная проблема: frontend-код тоже приходит с сервера. Теоретически скомпрометированный сервер может отдать изменённый JavaScript, который украдёт ключи или plaintext до шифрования. Это ограничение не конкретно моего проекта, а браузерной модели в целом.</p><p>Поэтому корректная формулировка такая: backend не получает ключи и не может расшифровать уже переданные или сохранённые сообщения. Защита от подмены клиентского кода — отдельный слой безопасности: подпись сборок, независимая верификация клиента, desktop/mobile-приложения, reproducible builds.</p><h2>Почему обычный подход не работает</h2><p>Большинство "мессенджеров" на GitHub выглядят примерно так:</p><p>Сервер знает всё. Видит каждое сообщение. Если БД утекла — утекла вся переписка. Если сервер взломали — читай что хочешь. Если завтра компания решит продать данные — технически ничего не мешает.</p><p>E2EE решает это радикально: backend не получает ключи и не хранит plaintext. Сообщение шифруется на устройстве отправителя до отправки в сеть, а расшифровывается только на устройстве получателя.</p><p>Это уже не вопрос политики конфиденциальности в стиле "мы обещаем не читать". Это архитектурное ограничение: если у сервера нет ключа, он не может превратить ciphertext обратно в текст.</p><p>Звучит как магия. На самом деле — два протокола и немного WebCrypto.</p><h2>Главная идея: конверты</h2><p>Представь что Алиса хочет написать Бобу. Вместо того чтобы положить письмо на стол и надеяться что никто не прочитает — она кладёт его в запечатанный конверт. Конверт может открыть только Боб своим ключом. Сервер просто передаёт конверт не заглядывая внутрь.</p><p>Именно так это работает в коде. В базе данных у меня это выглядит так:</p><p>Когда я впервые увидел</p><p>в своей БД вместо текста — стало понятно, что модель наконец работает правильно: сервер создал сообщение, доставил его, сохранил метаданные, но так и не узнал содержимое.</p><p>А вот что сервер возвращает при запросе списка чатов через API:</p><p>Не</p><p>. Не</p><p>. Буквально</p><figure><img src="https://media.tproger.ru/user-uploads/137649/2026-04-29/b466ad91-20da-4e64-8b78-f6e08d2851d5.webp" alt="" /></figure><p>(DevTools → Network → ответ API с</p><p>)</p><h2>Откуда берутся ключи: X3DH</h2><p>Главный вопрос: как Алиса и Боб получают общий секрет, если они никогда раньше не общались? И как сделать это так, чтобы сервер только помог передать публичные данные, но сам не смог вычислить итоговый ключ?</p><p>Для этого используется X3DH — Extended Triple Diffie-Hellman, протокол из экосистемы Signal. Его задача — установить общий секрет между двумя устройствами, используя долгосрочные и временные ключи.</p><h2>Что хранится на сервере</h2><p>Когда пользователь регистрирует устройство, он загружает на сервер пакет публичных ключей:</p><p>На сервер уходят только публичные части. Приватные ключи сериализуются и хранятся локально в браузере — и никогда не покидают устройство в сеть.</p><p>Здесь важно сказать честно: хранение приватных ключей в</p><p>Более строгий вариант — использовать Web Crypto API с</p><p>, чтобы приватный ключ жил внутри браузерного crypto runtime и его нельзя было экспортировать в байты. Но у этого подхода есть практическая сложность: ключи нужно переживать между перезагрузками страницы, синхронизировать с IndexedDB, аккуратно восстанавливать состояние устройства и не сломать UX.</p><p>В браузерных E2EE-приложениях обычно приходится выбирать между несколькими вариантами:</p><ul><li>Сериализуемые ключи в localStorage или IndexedDB — проще реализовать, но нужно очень серьёзно относиться к XSS и целостности frontend-кода.</li><li>extractable: false + IndexedDB — безопаснее, но сложнее в реализации и восстановлении состояния.</li><li>Нативное secure storage вроде Android Keystore или iOS Secure Enclave — лучший вариант для мобильных клиентов, но он недоступен обычному web-приложению.</li></ul><p>В текущей версии Chaos Messenger используется первый вариант. Это осознанный компромисс для pet/open-source проекта и удобного запуска в браузере. Переход на non-extractable ключи и более строгую модель хранения стоит в roadmap.</p><p>Ключевой момент: backend всё равно не получает приватные ключи и не может расшифровать сохранённые ciphertext-конверты. Но защита ключей на клиенте — отдельная задача, и её нельзя честно замалчивать.</p><h2>Установка сессии</h2><p>Когда Алиса открывает переписку с Бобом впервые, происходит следующее:</p><p>В классическом X3DH четвёртая DH-операция с one-time prekey опциональна: она выполняется, если сервер выдал доступный OPK получателя. В моей реализации устройство публикует набор one-time prekeys при регистрации, поэтому первое сообщение обычно использует DH4. Если OPK закончились, сессию всё равно можно установить через остальные DH-компоненты, но это уже менее сильный вариант.</p><p>Боб, получив конверт с эфемерным публичным ключом Алисы, повторяет те же операции со своими приватными ключами и получает тот же самый</p><p>. Математика симметрична.</p><p>Сервер в этот момент видит только публичные ключи и зашифрованный конверт. Он помогает устройствам найти друг друга, но не участвует в вычислении секрета.</p><p>Получить</p><figure><img src="https://media.tproger.ru/user-uploads/137649/2026-04-29/e7bbacf3-4fd2-4710-863a-2c710b1f6759.webp" alt="" /></figure><h2>Как шифруется каждое сообщение: Symmetric Ratchet</h2><p>X3DH даёт нам стартовый</p><p>. Но использовать один и тот же ключ для всех сообщений — плохая идея. Если использовать один ключ для всей переписки, компрометация этого ключа сразу открывает весь поток сообщений.</p><p>Решение — симметричный ratchet. После каждого сообщения цепочка ключей продвигается вперёд:</p><p>Визуально это выглядит так:</p><p>используется для шифрования одного сообщения через AES-GCM, после чего уничтожается. Если атакующий компрометирует</p><p>— он прочитает только второе сообщение.</p><p>В рамках такой симметричной цепочки это даёт forward secrecy назад по цепочке: зная текущий или отдельный</p><figure><img src="https://media.tproger.ru/user-uploads/137649/2026-04-29/939a74f7-60c5-4816-85f0-05b5afdc9845.webp" alt="" /><figcaption>(диаграмма схемы chainKey → messageKey)</figcaption></figure><p>Само шифрование сообщения:</p><p>А вот что уходит на сервер — живой пример из DevTools:</p><p>Сервер получает</p><p>и</p><p>. Расшифровать без</p><figure><img src="https://media.tproger.ru/user-uploads/137649/2026-04-29/b5e24cda-6fd9-4b15-9f27-3eb9b4f843b0.webp" alt="" /></figure><h2>Важная оговорка: это ещё не полный Double Ratchet</h2><p>В этом проекте реализован Symmetric Ratchet — цепочка, где из</p><p>для каждого сообщения выводится отдельный</p><p>Это защищает прошлые сообщения: если атакующий узнает текущий ключ или отдельный</p><p>, он не сможет откатить HMAC назад и получить старые ключи.</p><p>Но это не полный Double Ratchet из Signal Protocol.</p><p>В полном Double Ratchet есть ещё DH ratchet step: стороны периодически выполняют новый Diffie-Hellman обмен и обновляют root key. Это даёт break-in recovery — возможность восстановить безопасность будущих сообщений после компрометации части состояния.</p><p>В моей реализации DH ratchet step пока нет. Если атакующий получит актуальное состояние сессии на устройстве и сможет продолжать его читать, он сможет расшифровывать будущие сообщения до переустановки сессии. Это честное ограничение текущей версии, и оно стоит первым пунктом в roadmap.</p><h2>Мультиустройство: один пользователь, несколько конвертов</h2><p>Первый неочевидный момент: в E2EE сообщение адресуется не просто пользователю, а конкретным устройствам пользователя.</p><p>Если у Боба два устройства — телефон и ноутбук — нужен отдельный encrypted envelope для каждого устройства. Сервер не может взять один конверт, расшифровать его и "переупаковать" для второго устройства: у него нет ключей и он не знает plaintext.</p><p>Значит при отправке сообщения нужно зашифровать его отдельно для каждого устройства каждого участника чата.</p><p>Для чата где у каждого по 2 устройства — 4 конверта на одно сообщение. Для группы из 10 человек — потенциально 20 конвертов. Это нормально, это цена безопасности.</p><h2>Сервер: хранение и доставка конвертов</h2><p>На сервере сообщение создаётся с контентом</p><p>, а конверты сохраняются отдельно:</p><p>После сохранения — fanout по WebSocket. Каждое устройство получает свой конверт и только его:</p><p>Это важное отличие от обычного WebSocket-чата. В обычном чате сервер рассылает одно и то же событие всем участникам. В E2EE-чате сервер рассылает разные события разным устройствам: payload для каждого устройства содержит свой</p><p>Топик</p><p>— строго персональный. Устройство А не получает конверт устройства Б. Никакого broadcast — только адресная доставка.</p><h2>Архитектура целиком</h2><figure><img src="https://media.tproger.ru/user-uploads/137649/2026-04-29/de0e3257-d893-459f-86ed-7ed8eace5d56.webp" alt="" /></figure><h2>Баг который долго не замечал</h2><p>В панели чатов показывается превью последнего сообщения. Я реализовал это через</p><p>Запускаю — в списке чатов у всех написано</p><p>.</p><p>Конечно. Сервер же не знает что там написано.</p><p>Я полчаса думал как решить это на сервере. Потом дошло: нельзя решить это на сервере — у него нет ключей. Решение только на клиенте.</p><p>После того как пользователь открыл чат и сообщения расшифровались — кешируем последнее в памяти:</p><p>Это хороший пример того, как E2EE меняет привычное мышление backend-разработчика. В обычном приложении preview — это поле в SQL-запросе. В E2EE-приложении preview — это локальное клиентское состояние, потому что только клиент видел plaintext.</p><p>Простое решение. Но чтобы к нему прийти нужно было полностью принять идею что сервер здесь просто не при делах — и перестать пытаться решить задачу на его стороне.</p><h2>Rate limiting: дыра которую легко не заметить</h2><p>Эндпоинт</p><p>отправляет SMS с кодом. Без защиты любой скрипт может дёргать его тысячи раз — это называется SMS pumping fraud, SMS стоят реальных денег.</p><p>Redis у нас уже был для хранения онлайн-статусов. Добавил rate limiting поверх него:</p><p>При превышении — HTTP 429 с заголовком</p><p>. Клиент знает через сколько секунд можно повторить.</p><p>Важный нюанс: в текущей реализации, если Redis недоступен, сервис не блокирует авторизацию полностью. Для pet-проекта это приемлемый компромисс: лучше рискнуть одним лишним SMS, чем положить вход в приложение.</p><p>В production я бы сделал строже: fallback in-memory лимит на инстанс, отдельные лимиты по IP и телефону, антифрод-логику и алерты на всплески отправки кодов.</p><h2>Авторизация WebSocket</h2><p>Отдельная история — авторизация WebSocket соединений. HTTP-эндпоинты защищены Spring Security автоматически, но WebSocket — другое дело. STOMP-соединение устанавливается один раз, и нужно проверять JWT при каждом подключении.</p><p>Отдельно важно не только проверить JWT, но и связать WebSocket-соединение с конкретным устройством. Пользователь может быть один, но устройств у него несколько, а encrypted envelope адресован именно</p><p>Поэтому при подключении я проверяю не только токен, но и</p><p>: устройство должно быть зарегистрировано и принадлежать текущему пользователю. Иначе легко случайно превратить per-device E2EE-доставку обратно в обычный broadcast по пользователю.</p><h2>Что получилось — живые скрины</h2><figure><img src="https://media.tproger.ru/user-uploads/137649/2026-04-29/1fdfa006-f5c6-4731-a40f-50559be8832d.webp" alt="" /></figure><figure><img src="https://media.tproger.ru/user-uploads/137649/2026-04-29/c99164a5-021c-49ac-bcc4-3e38f9cd1c31.webp" alt="" /></figure><p>Что реализовано:</p><ul><li>E2EE-модель с per-device encrypted envelopes</li><li>X3DH session setup + Symmetric Ratchet + AES-GCM</li><li>Мультиустройство</li><li>Личные и групповые чаты</li><li>Realtime доставка через WebSocket/STOMP</li><li>Статусы SENT → DELIVERED → READ</li><li>Редактирование и soft delete сообщений</li><li>Online presence, typing indicator</li><li>Фото-вложения</li><li>Поиск пользователей</li><li>Rate limiting на SMS через Redis</li><li>Prometheus метрики + Grafana дашборд</li><li>Swagger UI с JWT авторизацией</li><li>24 backend-теста на Testcontainers, 12 frontend на Vitest, E2E на Playwright</li><li>GitHub Actions CI</li></ul><p>Что ещё не сделано:</p><ul><li>Полный Double Ratchet с DH ratchet step и break-in recovery</li><li>Ротация signed prekey и аккуратное пополнение one-time prekeys</li><li>Более строгая модель хранения приватных ключей на клиенте: non-extractable CryptoKey + IndexedDB</li><li>Защита от подмены frontend-кода: подпись сборок, независимая верификация клиента, reproducible builds</li><li>Android-клиент с Android Keystore</li><li>Реальный SMS-провайдер вместо кода в backend-логах</li><li>Push-уведомления без утечки содержимого сообщений</li><li>Более строгая metadata-модель для групповых чатов</li></ul><h2>Главный инсайт</h2><p>E2EE — это архитектурное решение, а не библиотека.</p><p>Нельзя взять обычный Spring Boot чат и просто "включить шифрование". Нужно с самого начала проектировать систему так, чтобы backend не был участником доверенной зоны: он не должен получать plaintext, не должен иметь ключи и не должен уметь пересобирать сообщение из данных в базе.</p><p>Это меняет почти всё:</p><ul><li>структуру БД — вместо текста появляются encrypted envelopes</li><li>API — сервер отдаёт [encrypted], а не preview сообщения</li><li>WebSocket — доставка идёт не по пользователю, а по конкретному устройству</li><li>мультиустройство — одно сообщение превращается в несколько ciphertext-конвертов</li><li>frontend — становится полноценной криптографической частью системы, а не просто UI</li></ul><p>Второй инсайт: мессенджер — это не "чат с WebSocket". В E2EE-модели это система доставки зашифрованных конвертов с адресацией по устройствам. Как только это принимаешь, многие странные на первый взгляд решения становятся логичными.</p><h2>Репозиторий</h2><p>Код открыт: <a href="https://github.com/vaazhen/chaos-messenger">github.com/vaazhen/chaos-messenger</a></p><p>В репозитории есть README на русском и английском, диаграммы, скриншоты, security audit, Docker Compose и запуск одной командой.</p><p>Проект не претендует на уровень production-криптомессенджера вроде Signal. Это учебный и инженерный open-source прототип, цель которого — показать, как E2EE меняет архитектуру backend, frontend и realtime-доставки.</p><p>Если вы делали что-то похожее — особенно интересно сравнить подходы к ротации prekey-ов, хранению non-extractable ключей в браузере и реализации DH ratchet step. Вопросы и критика приветствуются.</p>]]></content:encoded>
    </item>
    <item>
      <title>Страница статусов снизила нагрузку на поддержку в три раза. Как мы к этому пришли</title>
      <link>https://tproger.ru/articles/stranica-statusov-snizila-nagruzku-na-podderzhku-v-tri-raza-kak</link>
      <comments>https://tproger.ru/articles/stranica-statusov-snizila-nagruzku-na-podderzhku-v-tri-raza-kak?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Алексей Симоненков]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/stranica-statusov-snizila-nagruzku-na-podderzhku-v-tri-raza-kak</guid>
      <description><![CDATA[<p>Разбор кейса: как страница статусов сократила количество тикетов во время инцидентов на 67%. Что пробовали до этого, как устроен нормальный incident workflow и что важно при выборе инструмента для российского рынка.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/stranica-statusov-snizila-nagruzku-na-podderzhku-v-tri-raza-kak">Страница статусов снизила нагрузку на поддержку в три раза. Как мы к этому пришли</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[Опрос]]></category>
      <category><![CDATA[Новости]]></category>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Tor]]></category>
      <category><![CDATA[HR]]></category>
      <category><![CDATA[Telegram]]></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>Tue, 28 Apr 2026 06:40:02 GMT</pubDate>
      <content:encoded><![CDATA[<p>Несколько лет назад я работал в компании, которая делала платёжный процессинг. Не скажу название - NDA жив до сих пор. Но расскажу про один конкретный вечер в пятницу, который изменил то, как я думаю об инцидентах.</p><p>Около семи вечера начали падать транзакции. Не все - примерно 15%. Команда сразу занялась разбором: логи, метрики, трейсы. Стандартный процесс. Проблему нашли и починили за 40 минут. По меркам платёжки - нормально.</p><p>Но пока мы разбирались, в поддержку пришло 300 тикетов. Три сотни «что происходит», «у нас не проходят платежи», «когда заработает». Саппорт ничего не знал - он ждал, пока инженеры выплывут из логов. Клиенты ждали саппорт. Всё это время тишина с нашей стороны читалась как безразличие.</p><p>Проблему починили за 40 минут. Разгребали тикеты три дня.</p><h2>Почему молчание хуже, чем «мы знаем о проблеме»</h2><p>Есть простая психология: человек переносит неопределённость хуже, чем плохие новости. Если транзакция не прошла и нет никакой информации - клиент начинает строить сценарии. Деньги потерялись. Сервис умер. Нас кинули. Он пишет в поддержку. Потом пишет ещё раз. Потом оставляет отзыв.</p><p>Если транзакция не прошла, но есть страница</p><p>с записью «Повышенное время отклика платёжного шлюза. Investigating. 19:12» - большинство людей закрывают вкладку и ждут. Не все. Но большинство.</p><p>Мы это проверили. После того как поставили нормальную страницу статусов, количество тикетов во время инцидентов упало примерно в три раза. Точнее - на 67% по среднему за квартал. Это не магия, это просто информация в нужный момент.</p><h2>Что мы пробовали до этого</h2><p>Расскажу честно, через что прошли, потому что это типичный путь.</p><p>Шаг первый: Telegram-канал. Завели канал «Статус сервиса». Писали туда когда что-то падало. Работало ровно до тех пор, пока кто-то не забыл написать. А потом написал через два часа когда уже всё починилось. Клиенты не понимали что происходило. Доверие к каналу упало быстро.</p><p>Шаг второй: статус в шапке сайта. Зелёный кружок когда всё хорошо. Ручной - кто-то должен был его менять. Понятно куда это ведёт: кружок всегда зелёный, потому что некогда, потому что забыли, потому что «сейчас разбираемся, потом обновим».</p><p>Шаг третий: Atlassian Statuspage. Это уже нормальный инструмент. Он решил проблему. Но у него есть два неудобства для русскоязычного рынка: оплата в долларах (что в 2022 стало практической проблемой) и серверы за пределами России (что для ряда клиентов принципиально с точки зрения регулирования).</p><h2>Как устроен нормальный incident workflow со страницей статусов</h2><p>Я говорю «нормальный» - имею в виду тот, который не требует героизма от дежурного инженера в 2 ночи.</p><p>Всё начинается с мониторинга. HTTP/TCP-проверки каждую минуту на все критичные эндпоинты: API, веб, база, очереди. Когда что-то падает - автоматическое создание инцидента и уведомление команды. Это не новость, большинство так и делают.</p><p>Новость в том, что параллельно с уведомлением команды - автоматическое обновление публичной страницы статусов. Не «кто-то должен написать туда», а именно автоматически. Клиент видит «Degraded performance» раньше, чем успевает написать в поддержку.</p><p>Дальше инженер работает по стандартному процессу: Investigating - Identified - Monitoring - Resolved. Каждый статус обновляется на странице. Клиенты, подписавшиеся на уведомления, получают апдейты в Telegram или email. Поддержка может в один клик скопировать ссылку на инцидент и отправить клиенту вместо объяснений.</p><p>После разрешения - postmortem прямо на странице. Клиенты видят что случилось, почему и что сделано чтобы не повторилось. Это, как ни странно, повышает доверие сильнее, чем если бы инцидента не было совсем.</p><h2>Что важно при выборе инструмента</h2><p>Несколько технических вещей, на которые стоит обратить внимание.</p><p>Uptime самой страницы статусов. Она должна быть на отдельной инфраструктуре. Если ваш основной сервис упал и страница статусов на той же инфраструктуре - вы получили идеальный шторм: сервис не работает и статус показать невозможно.</p><p>Собственный домен.</p><p>вместо</p><p>. Это доверие и брендинг.</p><p>Telegram-уведомления. Для российской аудитории это важнее email. Люди читают Telegram, а не почту, когда ищут статус сервиса в панике.</p><p>Локализация данных. Если работаете с персональными данными российских пользователей - вопрос где физически хранятся данные о ваших инцидентах становится юридическим, а не техническим.</p><p>Мы в Flaree делаем страницу статусов именно для таких случаев - серверы в России, Telegram из коробки, оплата в рублях. Сейчас открыт ранний доступ, первые 50 команд получают 3 месяца Pro бесплатно: <a href="https://flaree.ru/">flaree.ru</a></p><h2>Что в итоге</h2><p>Страница статусов - это не инструмент для больших команд. Это инструмент для любого сервиса, у которого есть клиенты и бывают инциденты. То есть для всех.</p><p>Настройка занимает 15 минут. Первый же инцидент, который клиенты узнают из статусной страницы раньше, чем напишут в поддержку - окупает это время с запасом.</p><p>P.S. Если у вас уже есть страница статусов - напишите в комментариях какой инструмент используете. Интересно что прижилось у разных команд.</p>]]></content:encoded>
    </item>
    <item>
      <title>Cursor оценили в $50 млрд: ИИ-редактор утроил выручку и привлёк $2 млрд</title>
      <link>https://tproger.ru/news/cursor-podnimaet-2-mlrd-pri-ocenke-50-mlrd-nvidia-i-a16z-zah</link>
      <comments>https://tproger.ru/news/cursor-podnimaet-2-mlrd-pri-ocenke-50-mlrd-nvidia-i-a16z-zah?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Евгений Стребков]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/cursor-podnimaet-2-mlrd-pri-ocenke-50-mlrd-nvidia-i-a16z-zah</guid>
      <description><![CDATA[<p>Cursor поднимает $2 млрд при pre-money $50 млрд — оценка удвоилась за 6 месяцев. Разбираем Composer, конкурентов и цены для пользователей.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/cursor-podnimaet-2-mlrd-pri-ocenke-50-mlrd-nvidia-i-a16z-zah">Cursor оценили в $50 млрд: ИИ-редактор утроил выручку и привлёк $2 млрд</a>»</p>]]></description>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[Искусственный интеллект]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sun, 19 Apr 2026 10:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Если вы или ваша команда уже платите Cursor за подписку — инструмент, которым вы пользуетесь каждый день, только что удвоил оценку за полгода и подходит к границам крупнейших публичных SaaS-компаний. Для вас как пользователя это значит: Cursor никуда не денется, но корпоративные тарифы с высокой вероятностью будут пересмотрены быстрее индивидуальных.</p><p><a href="https://techcrunch.com/2026/04/17/sources-cursor-in-talks-to-raise-2b-at-50b-valuation-as-enterprise-growth-surges/">TechCrunch</a> со ссылкой на четыре источника пишет, что ИИ-IDE Cursor привлекает новый раунд на <b>минимум $2 млрд</b> при pre-money оценке <b>$50 млрд</b>. Раунд ведут возвращающиеся инвесторы <a href="https://thrivecap.com/">Thrive Capital</a> и <a href="https://a16z.com/">Andreessen Horowitz</a>, новым инвестором заходит <a href="https://www.battery.com/">Battery Ventures</a>, а стратегический чек выписывает Nvidia. Раунд уже oversubscribed — желающих больше, чем мест.</p><ul><li>Raise: <b>минимум $2 млрд</b>, pre-money оценка <b>$50 млрд</b> (post-money — около $52 млрд)</li><li>Шесть месяцев назад Cursor закрыл раунд при <b>$29,3 млрд</b> post-money — рост почти в 1,8 раза</li><li>ARR в феврале 2026 — <b>$2 млрд</b>; прогноз к концу года — <b>$6 млрд</b> (тройной рост за 10 месяцев)</li><li>Лиды: <b>Thrive Capital</b> и <b>a16z</b> (возвращающиеся), новый — <b>Battery Ventures</b>, стратег — <b>Nvidia</b></li><li>Главные конкуренты: <b>Claude Code</b> (Anthropic), переработанный <b>Codex</b> (OpenAI), <b>GitHub Copilot</b> (Microsoft)</li></ul><h2>Что такое Cursor и почему оценка $50 млрд</h2><p>Cursor — это ИИ-IDE на форке VS Code, которую в 2022 году запустил стартап Anysphere. Основатели — четыре студента MIT: Michael Truell, Sualeh Asif, Arvid Lunnemark и Aman Sanger. Основная фишка — редактирование кода с контекстом на весь проект и автономные ИИ-агенты, которые могут выполнять многошаговые задачи в репозитории.</p><p>Оценка $50 млрд ставит Cursor в один ряд с Databricks и Stripe по масштабу, и рост от $29,3 до $50 млрд за полгода — это уровень, которого в категории SaaS за последние пять лет не достиг никто. Основной драйвер — корпоративный сегмент: по данным TechCrunch, Cursor продаёт подписки крупным командам быстрее, чем успевает обрабатывать лиды.</p><h2>Как Cursor вышел в плюс по марже</h2><p>До конца 2025 года Cursor работал с отрицательной gross margin. Причина типичная для всех ИИ-IDE на сторонних моделях: каждый запрос в Claude или GPT стоил дороже, чем компания могла взять с клиента по подписке $20 в месяц. Сейчас картина другая благодаря двум шагам.</p><p>Во-первых, в конце октября 2025-го Cursor запустил собственную модель — Composer — для задач, где не нужна полная мощность frontier-моделей, и добавил в IDE Auto-режим роутинга (система сама выбирает модель по сложности запроса). Во-вторых, появилась возможность звать более дешёвые модели, включая <a href="https://kimi.moonshot.cn/">Kimi</a> от пекинского Moonshot AI. Результат — положительная маржа на корпоративных клиентах, но всё ещё отрицательная на индивидуальных. Поэтому Pro за $20 в месяц — по сути инструмент привлечения, а деньги приходят с тарифов Teams и Enterprise.</p><h2>Конкуренты наступают: Claude Code, Codex, Copilot</h2><p>Главная угроза Cursor — <a href="https://www.anthropic.com/claude-code">Claude Code</a> от Anthropic. Большинство пользователей Cursor исторически работали именно на моделях Anthropic — Claude Sonnet и Opus. Когда Anthropic сам вышел в ИИ-IDE-сегмент, Cursor получил рискованный сценарий быть замещённым собственным поставщиком. Ответ — Composer и диверсификация моделей.</p><p>Параллельно в сегменте работают переработанный OpenAI <a href="https://openai.com/codex/">Codex</a> (агент-IDE), <a href="https://github.com/features/copilot">GitHub Copilot</a> от Microsoft и <a href="https://www.windsurf.com/">Windsurf</a> (бывший Codeium, куплен Google в 2025-м). По темпу выручки Cursor пока лидирует в категории — и раунд это подтверждает. Claude Code сильнее на multi-file рефакторинге и планировании крупных задач, Codex — на тестах и CI-интеграциях; Cursor выигрывает по скорости inline-правок и удобству UI.</p><h2>Что это значит для российских разработчиков</h2><p>Cursor по-прежнему не продаётся в РФ напрямую: оплата идёт через иностранные карты (KZ, AM, KG, UZ — банки стран СНГ с Visa/Mastercard) или сервисы-посредники вроде PayPro Global и Zen. Актуальные тарифы: Pro — <b>$20/мес</b>, Teams — <b>$40 за пользователя в месяц</b>, Enterprise — по запросу. При такой траектории роста Cursor, вероятно, будет пересматривать цены на Teams/Enterprise в ближайший год — чтобы ускорить выход в прибыль на всех сегментах.</p><p>Что стоит учесть командам, которые используют Cursor:</p><ul><li><b>Бюджет на Cursor на 2026 год — с запасом +15–20%.</b> Повышение цен на Teams/Enterprise вероятно в ближайшие месяцы</li><li><b>Auto-режим и Composer для простых задач</b>, Claude/GPT — для сложных. Включается в Settings → Models</li><li><b>Оплата через карты третьих стран</b> работает, но провайдеры периодически режут платежи ИИ-сервисам — держите резервную карту и посредника</li><li><b>Enterprise-тариф даёт privacy mode и BYOK</b> (bring-your-own-key): подключение корпоративных LLM в Azure OpenAI или AWS Bedrock. Для команд с требованиями по безопасности это может быть решающим</li><li><b>Параллельно пробуйте альтернативы</b> — Claude Code сильнее на рефакторинге крупных репозиториев, Codex выигрывает на CI и тестах</li></ul><h2>Что будет дальше: IPO и консолидация</h2><p>При оценке $50 млрд и выручке, которая утраивается за год, следующий логичный шаг — IPO. В 2026–2027 годах Cursor может стать первой ИИ-IDE на публичной бирже, и это задаст новый бенчмарк для всего сегмента. Nvidia как стратегический инвестор — это доступ к CUDA-экосистеме и приоритетные мощности на обучение следующих версий Composer.</p><p>Риск, который никуда не уходит — зависимость от Anthropic и OpenAI для топовых задач. Если Claude 5 или GPT-6 выйдут с существенно лучшим кодингом и попадут в Claude Code или Codex раньше, чем Cursor сможет подтянуть Composer, оценка $50 млрд будет пересмотрена.</p><h2>Выводы</h2><p>Оценка $50 млрд для четырёхлетнего стартапа — сигнал, что рынок ИИ-IDE консолидируется быстрее, чем многие ожидали. Cursor пока лидирует, но Claude Code и Codex дышат в спину, а Microsoft с Copilot сидит на триллионной кассе. Практическое действие: к осени 2026 ждите первый серьёзный пересмотр тарифов Teams и Enterprise — следите за письмами от Cursor и держите под рукой параллельный план на Claude Code или Codex, если бюджет команды ограничен.</p>]]></content:encoded>
    </item>
    <item>
      <title>GlassWorm заражает все IDE на машине через фейковый WakaTime на Zig</title>
      <link>https://tproger.ru/news/glassworm-zarazhaet-vse-ide-na-mawine-cherez-fejkovyj-wakatime-na</link>
      <comments>https://tproger.ru/news/glassworm-zarazhaet-vse-ide-na-mawine-cherez-fejkovyj-wakatime-na?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Евгений Стребков]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/glassworm-zarazhaet-vse-ide-na-mawine-cherez-fejkovyj-wakatime-na</guid>
      <description><![CDATA[<p>Подделка WakaTime в Open VSX запускает нативный Zig-бинарник и тихо ставит второй дроппер во все VS Code-совместимые IDE на машине. Проверьте расширения.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/glassworm-zarazhaet-vse-ide-na-mawine-cherez-fejkovyj-wakatime-na">GlassWorm заражает все IDE на машине через фейковый WakaTime на Zig</a>»</p>]]></description>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[Информационная безопасность]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 13 Apr 2026 08:03:04 GMT</pubDate>
      <content:encoded><![CDATA[<p>Если вы используете VS Code, Cursor, Windsurf, VSCodium или Positron — проверьте список установленных расширений прямо сейчас. Новая волна кампании GlassWorm прячет вредонос в поддельном WakaTime и тихо заражает каждый IDE, который найдёт на машине.</p><p>Исследователи <a href="https://www.aikido.dev/blog/glassworm-zig-dropper-infects-every-ide-on-your-machine">Aikido Security</a> обнаружили в реестре Open VSX расширение code-wakatime-activity-tracker — почти полный клон легитимного WakaTime. Отличие одно: в функции activate() расширение подгружает нативный бинарник на Zig, который сканирует систему и устанавливает второй дроппер в каждый редактор на базе VS Code.</p><ul><li>Кампания GlassWorm добавила новую стадию — нативный бинарник на Zig (win.node и mac.node), который запускается вне JavaScript-песочницы Node.js.</li><li>Заражаются все VS Code-совместимые редакторы на машине: VS Code, VS Code Insiders, Cursor, Windsurf, VSCodium, Positron.</li><li>Второй этап — фейк популярного расширения steoates.autoimport (5+ миллионов установок) под именем floktokbok.autoimport.</li><li>Вредонос пропускает машины с русской локалью и использует Solana-блокчейн как C2-инфраструктуру.</li><li>Если у вас стояли расширения specstudio.code-wakatime-activity-tracker или floktokbok.autoimport — считайте машину скомпрометированной и ротируйте секреты.</li></ul><h2>Как устроена атака</h2><h3>Клон WakaTime с одной изменённой функцией</h3><p>Расширение code-wakatime-activity-tracker на Open VSX визуально повторяет оригинальный <a href="https://wakatime.com/">WakaTime</a>: те же команды, те же запросы API-ключа, та же иконка в статус-баре. Разница только в одной функции — activate(), которая запускается при первом открытии расширения:</p><p>До какой-либо логики WakaTime расширение подгружает нативный бинарник из вложенной папки ./bin/ и сразу вызывает install(). На Windows это win.node — PE32+ DLL, на macOS — mac.node, универсальный Mach-O для x86_64 и arm64.</p><h3>Полный обход песочницы</h3><p>Оба бинарника — Node.js native addons: скомпилированные shared-библиотеки, которые Node подгружает через require() как обычные пакеты. Они загружаются прямо в рантайм Node и выполняются за пределами JavaScript-песочницы, с правами уровня операционной системы. Оба написаны на Zig. В macOS-бинарнике остались debug-символы — из них исследователи вытащили путь к проекту автора:</p><h3>Сканирование всех VS Code-совместимых редакторов</h3><p>Дальше бинарник ищет на машине каждый редактор, который понимает формат расширений VS Code. Проверяются стандартные пути установки — как в %LOCALAPPDATA%, так и в %ProgramFiles%:</p><p>На macOS аналогично обходятся /Applications/*.app для VS Code, Cursor, Windsurf, VSCodium и Positron. Если разработчик использует Cursor как основной редактор, но рядом стоит VS Code — оба окажутся скомпрометированы.</p><h3>Подмена autoimport — расширения с 5 млн установок</h3><p>Собрав список редакторов, бинарник скачивает вредоносный .vsix с GitHub Releases-страницы, подконтрольной атакующим. Пакет называется floktokbok.autoimport и подделывается под <a href="https://marketplace.visualstudio.com/items?itemName=steoates.autoimport">steoates.autoimport</a> — популярное расширение с более 5 миллионов установок. Скачанный файл сохраняется во временный путь, а затем «тихо» ставится в каждый найденный IDE через его CLI-установщик:</p><p>После установки функция cleanupVsix удаляет скачанный файл, чтобы скрыть следы.</p><h2>Что делает вторая ступень</h2><p>Установленный autoimport — это тот же дроппер GlassWorm, который <a href="https://www.aikido.dev/blog/glassworm-hits-openvsx-and-vscode-npm">Aikido уже анализировали раньше</a>. Он проверяет локаль системы и пропускает машины с русскими настройками, затем обращается к C2-серверу через Solana-блокчейн. Адрес C2 не зашит в бинарник — дроппер каждый раз читает его из блокчейн-транзакций подконтрольного кошелька, поэтому для блокировки недостаточно добавить один домен в deny-list, а закрыть весь Solana нереально.</p><p>Дальше дроппер выкачивает секреты с машины, ставит persistent-RAT и доставляет вредоносное расширение для Google Chrome — infostealer, который перехватывает сессионные cookies и нажатия клавиш.</p><h2>Контекст: год эволюции GlassWorm</h2><p>Aikido отслеживают GlassWorm больше года: кампания засветилась в марте 2025 с npm-пакетами, прятавшими payload в невидимых Unicode-символах, а с тех пор успела скомпрометировать сотни проектов на GitHub, npm и в VS Code Marketplace. Ключевое отличие нового этапа — переход к нативному коду на Zig: раньше нагрузка выполнялась в JS-рантайме расширения и её было видно в Developer Tools, теперь она уходит на уровень ОС, где статический анализ JavaScript-кода её уже не поймает.</p><h2>Что делать прямо сейчас</h2><ol><li>Проверьте в каждом VS Code-совместимом редакторе список установленных расширений. Искомые имена: specstudio.code-wakatime-activity-tracker и floktokbok.autoimport.</li><li>Если нашли — считайте машину скомпрометированной. Удалите расширения, но этого недостаточно.</li><li>Ротируйте все секреты, к которым у машины был доступ: SSH-ключи, npm/pypi-токены, cloud-CLI, GitHub PAT, облачные credentials в ~/.aws, ~/.config.</li><li>Проверьте Chrome и Chromium-браузеры на неизвестные расширения и удалите их.</li><li>Пересмотрите cookies и активные сессии во всех браузерах, разлогиньтесь везде.</li><li>Для профилактики — перед установкой проверяйте издателя и число установок (autoimport, WakaTime и другие популярные расширения имеют миллионы установок и проверенного автора). Если в команде используется корпоративный endpoint protection — добавьте в его охват папки расширений IDE: это ловит malware в нативных аддонах, которые расширения тянут с собой.</li></ol><h2>Индикаторы компрометации (IoC)</h2><p>Вредоносные расширения:</p><p>Хеши бинарников SHA-256:</p><p>Хеши действительны на момент анализа Aikido. Атакующие могут пересобрать бинарник — в этом случае хеши изменятся, но имена расширений и пути установки остаются корректными индикаторами.</p><p>Сетевые индикаторы:</p><p>Строки в бинарнике:</p><h2>Выводы</h2><p>Главный сдвиг в этом релизе GlassWorm — не сама подделка WakaTime, а то, что группа научилась перекладывать payload на нативный слой. Для защитников это означает две вещи: во-первых, статического анализа JS теперь мало — нужен контроль за любыми нативными аддонами, которые расширения тянут с собой; во-вторых, атакующим доступна не одна экосистема, а весь зонтик VS Code-совместимых редакторов сразу.</p><blockquote>Расширение [...] кладёт рядом с JavaScript-кодом скомпилированный на Zig нативный бинарник. Это не первый раз, когда GlassWorm прибегает к нативному коду в расширениях. Но теперь бинарник работает не как payload напрямую, а как скрытый слой, который незаметно заражает все остальные IDE на машине.</blockquote><p>Если вы разработчик — самый быстрый прикладной вывод: пройдитесь по списку расширений во всех установленных редакторах прямо сейчас, особенно если недавно ставили что-то через Open VSX. И пересмотрите, чьим расширениям вы в принципе доверяете по умолчанию.</p><p>Источники: <a href="https://www.aikido.dev/blog/glassworm-zig-dropper-infects-every-ide-on-your-machine">Aikido Security</a>, <a href="https://thehackernews.com/2026/04/glassworm-campaign-uses-zig-dropper-to.html">The Hacker News</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>10 DevTools-материалов tproger, которые вы могли пропустить за последний год</title>
      <link>https://tproger.ru/articles/10-devtools-materialov-tproger-kotorye-vy-mogli-propustit-za-p</link>
      <comments>https://tproger.ru/articles/10-devtools-materialov-tproger-kotorye-vy-mogli-propustit-za-p?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Евгений Стребков]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/10-devtools-materialov-tproger-kotorye-vy-mogli-propustit-za-p</guid>
      <description><![CDATA[<p>Подборка лучших статей tproger об инструментах разработчика за последний год: ИИ-ассистенты, Docker, терминал, IDE и дебаг. То, что утонуло в ленте.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/10-devtools-materialov-tproger-kotorye-vy-mogli-propustit-za-p">10 DevTools-материалов tproger, которые вы могли пропустить за последний год</a>»</p>]]></description>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Docker]]></category>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sun, 12 Apr 2026 14:30:04 GMT</pubDate>
      <content:encoded><![CDATA[<p>Если вы пропустили хотя бы неделю на tproger — могли упустить инструмент, который сэкономит вам часы. Мы собрали 10 материалов об инструментах разработчика за последние 6–12 месяцев — от ИИ-ассистентов до Docker-трюков. Всё, что утонуло в ленте, но заслуживает второго шанса.</p><p>— 3 материала про ИИ в IDE: какие ассистенты доступны в РФ, Copilot бесплатно, ловушки Cursor</p><p>— 3 материала про контейнеры: Docker-советы, Podman как альтернатива, Docker для фронтендеров</p><p>— 4 материала про инструменты: Bruno вместо Postman, Linux-команды, Playwright + VS Code, дебаг vs console.log</p><h2>ИИ в IDE</h2><h3>1. Топ 5 ИИ-ассистентов для IDE, доступных российским разработчикам</h3><p>Обзор ИИ-ассистентов, которые реально работают в России: от GigaCode (Сбер) до Codeium. Для каждого — поддерживаемые IDE, ограничения и стоимость. 24 000+ просмотров — один из самых читаемых материалов за год.</p><p><a href="https://tproger.ru/articles/top-5-ii-assistentov-dlya-ide--dostupnyh-rossijskim-razrabotchikam">Читать статью →</a></p><h3>2. GitHub Copilot стал полностью бесплатным в VS Code</h3><p>В декабре 2025 Microsoft сделала Copilot бесплатным внутри VS Code. Что входит в бесплатный тир, какие ограничения и стоит ли переходить с платных альтернатив — разбор для тех, кто пропустил.</p><p><a href="https://tproger.ru/news/--github-copilot-stal-polnostyu-besplatnym-vnutri-vscode">Читать статью →</a></p><h3>3. «Безлимит» Cursor оказался не таким уж безлимитным</h3><p>Пользователи Cursor обнаружили, что тарифы меняются без предупреждения, а «безлимитный» план имеет скрытые ограничения. Если вы платите за ИИ-IDE — полезно знать, за что именно.</p><p><a href="https://tproger.ru/news/--polzovateli-cursor-zhaluyutsya--tarify-menyayutsya-vtihuyu--a--bezlimit--okazalsya-ne-takim-uzh-bezlimitnym">Читать статью →</a></p><h2>Контейнеры</h2><h3>4. 6 советов, которые прокачают работу с Docker</h3><p>Многоэтапные сборки, кеширование слоёв, health checks, .dockerignore и другие практики, которые сокращают время сборки и размер образов. 7 600+ просмотров.</p><p><a href="https://tproger.ru/articles/6-sovetov--kotorye-realno-prokachayut-navyki-raboty-s-docker">Читать статью →</a></p><h3>5. Контейнеры после Docker: Podman и что нас ждёт</h3><p>Docker — уже не единственный вариант. Podman работает без демона, поддерживает rootless-режим из коробки и совместим с Docker CLI. Обзор состояния экосистемы контейнеров в 2026 году.</p><p><a href="https://tproger.ru/articles/kontejnery-posle-docker--kuda-dvizhetsya-mir-s-podman-i-chto-nas-zhdet-v-2026">Читать статью →</a></p><h3>6. 5 вещей про Docker, которые должен знать фронтенд-разработчик</h3><p>Docker для тех, кто привык к npm start. Зачем фронтендеру контейнеры, как контейнеризировать React/Next.js-приложение и что такое Docker Compose на практике.</p><p><a href="https://tproger.ru/articles/5-veshhej--kotorye-dolzhen-znat-frontend-razrabotchik-pro-docker">Читать статью →</a></p><h2>Инструменты и приёмы</h2><h3>7. Bruno API Client — альтернатива Postman</h3><p>Коллекции хранятся в Git, нет облачного аккаунта, работает офлайн. Bruno дошёл до версии 1.35 и стал серьёзной альтернативой Postman для тех, кому важна приватность и версионирование API-запросов. 6 200+ просмотров.</p><p><a href="https://tproger.ru/news/-ubijca--postman---bruno-api-client---obnovilsya-do-versii-1-35">Читать статью →</a></p><h3>8. 7 команд Linux, которые экономят время</h3><p>Команды за пределами стандартного набора: от быстрого поиска по истории до мониторинга ресурсов. Подойдёт и тем, кто только осваивает терминал, и тем, кто ищет новые трюки.</p><p><a href="https://tproger.ru/articles/chto-eshhe-est-v-terminale-linux--7-komand--kotorye-ekonomyat-kuchu-vremeni">Читать статью →</a></p><h3>9. Playwright + VS Code: автотест за 15 минут</h3><p>Пошаговый гайд: установка Playwright, расширение для VS Code, запись и запуск первого теста. Полезно, если откладывали автотесты — теперь порог входа ниже некуда.</p><p><a href="https://tproger.ru/articles/playwright---vs-code--ustanovka-i-pervyj-test-za-15-minut">Читать статью →</a></p><h3>10. 1% разработчиков используют дебаг в VS Code. 99% — console.log</h3><p>Исследование показало, что подавляющее большинство разработчиков игнорирует встроенный дебаггер VS Code. Разбор: почему так происходит, что теряют те, кто не дебажит, и стоит ли менять привычки.</p><p><a href="https://tproger.ru/news/issledovanie--v-1--sluchaev-razrabotchiki-ispolzuyut-otladku-vs-code--v-99----console-log--">Читать статью →</a></p>]]></content:encoded>
    </item>
    <item>
      <title>Cursor выпустил третью версию — агенты заменили вкладки</title>
      <link>https://tproger.ru/news/cursor-3--ii-redaktor-postroen-s-nulya---agenty-vmesto-vkladok</link>
      <comments>https://tproger.ru/news/cursor-3--ii-redaktor-postroen-s-nulya---agenty-vmesto-vkladok?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Евгений Стребков]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/cursor-3--ii-redaktor-postroen-s-nulya---agenty-vmesto-vkladok</guid>
      <description><![CDATA[<p>Cursor выпустил версию 3 — новый интерфейс, построенный с нуля вокруг ИИ-агентов. Мультирепо, облачные агенты, Composer 2 и маркетплейс MCP-плагинов.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/cursor-3--ii-redaktor-postroen-s-nulya---agenty-vmesto-vkladok">Cursor выпустил третью версию — агенты заменили вкладки</a>»</p>]]></description>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[Искусственный интеллект]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 03 Apr 2026 09:01:28 GMT</pubDate>
      <content:encoded><![CDATA[<p>Если вы пишете код в Cursor, приготовьтесь к большим переменам. Третья версия — это не обновление редактора, а новый интерфейс, построенный с нуля. В центре теперь не файлы и вкладки, а ИИ-агенты.</p><p>Команда Cursor <a href="https://cursor.com/blog/cursor-3">представила</a> Cursor 3 — агентно-ориентированный интерфейс, который работает поверх привычной IDE. Старый редактор на базе VS Code никуда не делся — на него можно переключиться в любой момент.</p><ul><li>Новый интерфейс построен с нуля — IDE на базе VS Code остаётся как альтернативный режим</li><li>Мультирепозиторное рабочее пространство с параллельными агентами</li><li>Бесшовная передача агентов между локальной машиной и облаком</li><li>Composer 2 — собственная frontier-модель для кодинга с высокими лимитами</li><li>Встроенный браузер для тестирования веб-приложений</li><li>Маркетплейс плагинов: MCP-серверы, скиллы, субагенты</li></ul><h2>Что изменилось в Cursor 3</h2><p>Изначально Cursor был форком VS Code — это позволяло контролировать интерфейс. В третьей версии команда пошла дальше: построила новый интерфейс с нуля, с агентами в центре архитектуры. При этом IDE на базе VS Code продолжает работать — переключиться можно через меню.</p><h3>Все агенты в одном месте</h3><p>Новый интерфейс изначально мультирепозиторный — люди и агенты работают в разных репозиториях одновременно. Все локальные и облачные агенты отображаются в боковой панели, включая запущенных с мобильного, из веба, Slack, GitHub или Linear.</p><p>Облачные агенты создают демо и скриншоты своей работы для ручной проверки — тот же опыт, что и на <a href="https://cursor.com/agents">cursor.com/agents</a>, теперь встроен в десктопное приложение.</p><figure><img src="https://media.tproger.ru/user-uploads/133946/2026-04-03/58d90052-ded2-4295-b368-da5773657762.webp" alt="Интерфейс Cursor 3: боковая панель с агентами и облачные агенты" /><figcaption>Новый интерфейс Cursor 3: боковая панель с агентами, параллельная работа и облачные агенты. Источник: cursor.com</figcaption></figure><h3>Передача агентов между локальной машиной и облаком</h3><p>Перемещение агентов между средами (handoff) стало быстрым. Можно перевести облачного агента на локальную машину, чтобы протестировать изменения на своём десктопе. Для быстрой итерации команда выпустила Composer 2 — собственную frontier-модель для кодинга с высокими лимитами использования.</p><p>В обратном направлении: локального агента можно отправить в облако, чтобы он продолжал работу, пока вы офлайн или переключились на другую задачу. Это полезно для длительных задач, которые прервались бы при закрытии ноутбука.</p><h3>От коммита до мёрдж-реквеста</h3><p>Новое представление диффов упрощает ревью изменений. Прямо из интерфейса можно стейджить файлы, коммитить и управлять пулл-реквестами — без переключения в терминал.</p><h2>Возможности IDE в агентном интерфейсе Cursor 3</h2><p>Альфа-тестеры <a href="https://cursor.com/blog/cursor-3">отметили</a>, что Cursor 3 удачно сочетает возможности полноценной IDE с агентным подходом:</p><ul><li><b>Файлы и навигация по коду</b> — полноценный редактор с LSP, go to definition, просмотр файлов в любой момент</li><li><b>Встроенный браузер</b> — агент может открывать, навигировать и взаимодействовать с локальными веб-приложениями прямо из интерфейса</li><li><b>Маркетплейс плагинов</b> — сотни расширений через MCP-серверы, скиллы и субагенты. Установка в один клик, поддержка приватных командных маркетплейсов</li></ul><h2>Планы Cursor: автономные агенты и командная работа</h2><p>Команда заявляет, что с Cursor 3 заложена основа для более автономных агентов и командной работы. Параллельно продолжится развитие IDE-части.</p><p>Попробовать новый интерфейс можно в текущей версии Cursor: Ctrl+Shift+P → Agents Window (на macOS — Cmd+Shift+P). Переключиться обратно на привычную IDE можно в любой момент.</p>]]></content:encoded>
    </item>
    <item>
      <title>JetBrains выпустила Air — агентную IDE для параллельной работы с ИИ</title>
      <link>https://tproger.ru/news/jetbrains-vypustila-air---agentnuyu-ide-dlya-parallelnoj-raboty-s</link>
      <comments>https://tproger.ru/news/jetbrains-vypustila-air---agentnuyu-ide-dlya-parallelnoj-raboty-s?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Алексей Михайлишин]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/jetbrains-vypustila-air---agentnuyu-ide-dlya-parallelnoj-raboty-s</guid>
      <description><![CDATA[<p>JetBrains выпустила Air — агентную среду для запуска Codex, Claude, Gemini и Junie параллельно. Docker, Git worktrees, BYOK. Разбираем public preview.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/jetbrains-vypustila-air---agentnuyu-ide-dlya-parallelnoj-raboty-s">JetBrains выпустила Air — агентную IDE для параллельной работы с ИИ</a>»</p>]]></description>
      <category><![CDATA[Новости]]></category>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[Искусственный интеллект]]></category>
      <category><![CDATA[JetBrains]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 30 Mar 2026 03:33:37 GMT</pubDate>
      <content:encoded><![CDATA[<p>JetBrains <a href="https://blog.jetbrains.com/air/2026/03/air-launches-as-public-preview-a-new-wave-of-dev-tooling-built-on-26-years-of-experience/">выпустила</a> Air — агентную среду разработки, в которой можно запускать несколько ИИ-агентов параллельно и переключаться между задачами. Public preview доступен для macOS, Windows и Linux — позже.</p><p>— Air — агентная среда разработки от JetBrains для параллельной работы с ИИ-агентами</p><p>— Поддерживает Codex, Claude Agent, Gemini CLI и Junie (собственный агент JetBrains)</p><p>— Агенты работают локально, в Docker-контейнерах или Git worktrees для изоляции</p><p>— Построена на базе свёрнутого Fleet</p><p>— Public preview для macOS, Windows и Linux позже</p><p>— Не заменяет IDE — дополняет IntelliJ/VS Code для агентных задач</p><h2>Что такое Air</h2><p>Air — не IDE в привычном смысле. Это среда для делегирования задач ИИ-агентам и управления их работой. Ключевое отличие от чатов с ИИ внутри IDE: Air <a href="https://air.dev/">построена</a> вокруг агента, а не вокруг редактора кода.</p><p>На практике это работает так: вы формулируете задачу, указываете контекст (конкретная строка, коммит, метод), запускаете агента — и переключаетесь на другую задачу, пока первый агент работает. Когда агент завершает — приходит уведомление, и вы ревьюите diff в контексте всей кодовой базы.</p><h2>Поддерживаемые агенты</h2><p>Air поддерживает четыре агента из коробки:</p><ul><li><b>Codex</b> (OpenAI)</li><li><b>Claude Agent</b> (Anthropic)</li><li><b>Gemini CLI</b> (Google)</li><li><b>Junie</b> — собственный агент JetBrains</li></ul><p>Агенты взаимозаменяемы — можно переключаться между ними для разных проектов. Air поддерживает Agent Client Protocol (ACP) и в будущем добавит других агентов через ACP Agent Registry.</p><h2>Изоляция и параллелизм</h2><p>Агенты запускаются в одном из трёх режимов:</p><ul><li><b>Локально</b> — по умолчанию, агент работает напрямую с файлами проекта</li><li><b>Docker-контейнер</b> — изолированная среда, изменения применяются после ревью</li><li><b>Git worktree</b> — агент работает в отдельной ветке, изменения мержатся через Air</li></ul><p>Docker и Git worktrees позволяют запускать несколько агентов параллельно на разных задачах без конфликтов.</p><h2>Чем Air отличается от Cursor и Copilot</h2><p>Cursor и Copilot — это расширения IDE с ИИ-возможностями. Air — отдельное приложение, которое не заменяет IDE, а работает рядом с ней:</p><ul><li>В <b>Cursor/Copilot</b> вы пишете код, а ИИ помогает. В <b>Air</b> вы делегируете задачу, а ИИ пишет</li><li>Air изначально спроектирован для <b>параллельного оркестрирования агентов</b> — Cursor остаётся преимущественно редактором с ИИ-помощником</li><li>Air предлагает <b>встроенный терминал, Git-клиент и превью</b> для ревью результатов агента</li></ul><h2>Доступность и цены</h2><p>Air доступен в public preview. Для использования нужна подписка <a href="https://www.jetbrains.com/ai/">JetBrains AI Pro</a> (входит в All Products Pack) или AI Ultimate — либо собственные API-ключи от OpenAI, Google или Anthropic (только API Billing). При использовании своих ключей (BYOK) они приоритетны, а JetBrains-подписка покрывает остаток.</p><p>Пока доступна только macOS-версия. Windows и Linux — в работе.</p><h2>Выводы</h2><p>JetBrains Air — первая среда разработки, построенная вокруг оркестрации ИИ-агентов, а не вокруг редактора кода. Параллельный запуск, изоляция через Docker/worktrees, поддержка четырёх агентов — это ставка на то, что разработка сместится от написания к делегированию. Скачать — на <a href="https://air.dev/">air.dev</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>В VS Code нашли дыру, дающую бесплатный доступ к платным ИИ-агентам</title>
      <link>https://tproger.ru/news/v-vs-code-nawli-dyru--dayushhuyu-besplatnyj-dostup-k-platnym-ii-agen</link>
      <comments>https://tproger.ru/news/v-vs-code-nawli-dyru--dayushhuyu-besplatnyj-dostup-k-platnym-ii-agen?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Булат Яббаров]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/v-vs-code-nawli-dyru--dayushhuyu-besplatnyj-dostup-k-platnym-ii-agen</guid>
      <description><![CDATA[<p>В VS Code нашли дыру в Copilot: обход биллинга дает бесплатный доступ к платным ИИ-агентам через subagent-режим</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/v-vs-code-nawli-dyru--dayushhuyu-besplatnyj-dostup-k-platnym-ii-agen">В VS Code нашли дыру, дающую бесплатный доступ к платным ИИ-агентам</a>»</p>]]></description>
      <category><![CDATA[Git]]></category>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[Искусственный интеллект]]></category>
      <category><![CDATA[Microsoft]]></category>
      <category><![CDATA[GitHub]]></category>
      <category><![CDATA[Взлом]]></category>
      <category><![CDATA[Уязвимость]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 04 Feb 2026 11:30:16 GMT</pubDate>
      <content:encoded><![CDATA[<p>В VS Code обнаружили уязвимость, которая позволяет получать практически неограниченный доступ к платным ИИ-моделям. При этом «премиум-запросы» не списываются.</p><p>Об этом <a href="https://github.com/microsoft/vscode/issues/292452">сообщил</a> пользователь GitHub под ником Angry-Orangutan, опубликовав подробный баг-репорт в публичном репозитории Microsoft.</p><p>Проблема затрагивает новый режим agent / subagent в Copilot и связана не с безопасностью в классическом смысле, а с биллингом. Тем не менее, эффект от нее вполне материальный: дорогие модели вроде Claude Opus можно использовать бесплатно и сколько угодно долго.</p><h2>Как работает обход биллинга</h2><p>Механизм уязвимости строится на нескольких допущениях в архитектуре Copilot.</p><p>Во-первых, стоимость запроса рассчитывается только по первой модели, которая принимает сообщение. Во-вторых, запуск подагентов (subagents) и вызовы инструментов не учитываются как отдельные платные операции.</p><p>В результате пользователь может начать чат с «бесплатной» моделью, например GPT-5 Mini, а затем внутри нее создать подагента, явно указав для него уже премиум-модель.</p><p>Дальше все просто: бесплатная модель делегирует работу подагенту, а тот выполняет задачи с помощью Opus или другого дорогого ИИ — без списания лимитов. По словам автора отчета, таким способом он запускал сотни подагентов и часами обрабатывал файлы, потратив всего несколько платных кредитов.</p><h2>Реакция Microsoft</h2><p>Интересно, что изначально исследователь пытался передать проблему через MSRC — стандартный канал ответственного раскрытия уязвимостей. Однако там ответили, что «обход биллинга не относится к сфере безопасности» и предложили оформить баг публично.</p><p>В итоге issue действительно появилась в открытом репозитории VS Code, но довольно быстро была закрыта со статусом «not planned». Это означает, что компания не обещает что-либо исправить и уж тем более не комментирует сроки.</p><p>Это решение вызвало волну иронии в обсуждении: пользователи отметили, что Microsoft фактически оставила инструкцию по бесплатному использованию платных моделей в открытом доступе.</p><h2>Почему это важно</h2><p>Формально речь идет не о взломе, а о логической ошибке в расчете стоимости запросов. Но на практике уязвимость подрывает саму модель монетизации Copilot и агентных функций VS Code.</p>]]></content:encoded>
    </item>
    <item>
      <title>Apple добавила ИИ-агентов в Xcode 26.3 — с поддержкой Claude и OpenAI Codex</title>
      <link>https://tproger.ru/news/apple-dobavila-ii-agentov-v-xcode-26-3---s-podderzhkoj-claude-i-o</link>
      <comments>https://tproger.ru/news/apple-dobavila-ii-agentov-v-xcode-26-3---s-podderzhkoj-claude-i-o?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Булат Яббаров]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/apple-dobavila-ii-agentov-v-xcode-26-3---s-podderzhkoj-claude-i-o</guid>
      <description><![CDATA[<p>Apple добавила ИИ-агентов в Xcode 26.3: поддержка Claude и OpenAI Codex позволяет автономно писать, запускать и исправлять код в IDE</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/apple-dobavila-ii-agentov-v-xcode-26-3---s-podderzhkoj-claude-i-o">Apple добавила ИИ-агентов в Xcode 26.3 — с поддержкой Claude и OpenAI Codex</a>»</p>]]></description>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Apple]]></category>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[Искусственный интеллект]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Swift]]></category>
      <category><![CDATA[OpenAI]]></category>
      <category><![CDATA[Xcode]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 04 Feb 2026 02:23:02 GMT</pubDate>
      <content:encoded><![CDATA[<p>Apple <a href="https://www.apple.com/newsroom/2026/02/xcode-26-point-3-unlocks-the-power-of-agentic-coding/">выпустила</a> <b>Xcode 26.3</b> — обновление, которое впервые добавляет в IDE полноценные <b>ИИ-агенты</b>.</p><p>Теперь разработчики могут использовать автономных кодовых ассистентов прямо внутри Xcode, без сторонних плагинов и костылей. То есть теперь ИИ сможет получать цель и самостоятельно решать, как к ней прийти. И все это прямо внутри IDE от Apple.</p><h2>Claude и Codex — прямо в IDE</h2><p>В Xcode 26.3 встроена нативная поддержка <b>Anthropic Claude Agent</b> и <b>OpenAI Codex</b>. Эти агенты могут работать на протяжении всего цикла разработки, а не только писать код по запросу.</p><p>Они умеют:</p><ul><li>изучать структуру проекта и файлы,</li><li>искать информацию в документации,</li><li>менять настройки проекта,</li><li>запускать сборки и чинить ошибки,</li><li>проверять результат через Xcode Previews.</li></ul><p>Проще говоря, агент может не только написать код, но и сам убедиться, что он работает, а затем исправить его, если все же нет.</p><figure><img src="https://media.tproger.ru/user-uploads/111041/2026-02-04/64f50402-9644-40f9-9e49-9c8406fdd2c8.webp" alt="" /></figure><h2>Продолжение курса на «умный» Xcode</h2><p>В Apple подчеркнули, что это логичное развитие функций ИИ, появившихся в Xcode 26. Напомним, что тогда IDE получила нового ассистента для Swift. Теперь же ИИ получил доступ к куда большему количеству внутренних возможностей Xcode.</p><p>По словам вице-президента Apple по работе с разработчиками Сьюзан Прескотт, цель компании — дать разработчикам инструменты, которые «ускоряют работу и освобождают время для настоящей инженерии и идей, а не рутины».</p><h2>Не только Claude и Codex</h2><p>Помимо встроенных интеграций, Apple открыла Xcode для других агентов через <b>Model Context Protocol (MCP)</b> — открытый стандарт взаимодействия инструментов и ИИ-моделей.</p><p>Это значит, что в будущем разработчики смогут подключать любые совместимые модели и агентные системы, а не только решения от Anthropic и OpenAI.</p>]]></content:encoded>
    </item>
    <item>
      <title>Notepad++ полгода распространял китайский вирус через обновления из-за взлома хостинга</title>
      <link>https://tproger.ru/news/notepad---polgoda-rasprostranyal-kitajskij-virus-cherez-obnovleniya</link>
      <comments>https://tproger.ru/news/notepad---polgoda-rasprostranyal-kitajskij-virus-cherez-obnovleniya?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Булат Яббаров]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/notepad---polgoda-rasprostranyal-kitajskij-virus-cherez-obnovleniya</guid>
      <description><![CDATA[<p>Notepad++ полгода раздавал зараженные обновления из-за взлома хостинга: атака была выборочной и затронула часть пользователей</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/notepad---polgoda-rasprostranyal-kitajskij-virus-cherez-obnovleniya">Notepad++ полгода распространял китайский вирус через обновления из-за взлома хостинга</a>»</p>]]></description>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[Хакеры]]></category>
      <category><![CDATA[Взлом]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 02 Feb 2026 12:30:43 GMT</pubDate>
      <content:encoded><![CDATA[<p>Разработчик <b>Notepad++</b> <a href="https://notepad-plus-plus.org/news/hijacked-incident-info-update/" rel="nofollow">подтвердил</a> серьезный инцидент безопасности: с июня по начало декабря 2025 года часть пользователей могла получать зараженные обновления программы.</p><p>Но есть важный момент: причиной стала компрометация инфраструктуры хостинг-провайдера. То есть в самом редакторе уязвимости не было.</p><h2>Что произошло</h2><p>Как следует из расследования, злоумышленники получили доступ к shared-серверу, на котором размещался сайт notepad-plus-plus.org и скрипт обновлений.</p><p>Они выборочно перехватывали трафик и подменяли ответы сервера обновлений, перенаправляя пользователей на вредоносные файлы. Атака была <b>селективной</b>: зараженные обновления получали не все, а только часть пользователей.</p><p>По оценке независимых исследователей, за кампанией могла стоять китайская APT-группа — это объясняет точечный характер атак и длительность операции.</p><h2>Почему это продолжалось так долго</h2><p>По данным хостинг-провайдера:</p><ul><li>до 2 сентября 2025 года сервер находился под активным контролем атакующих;</li><li>после обновления ядра и прошивки, прямой доступ был утрачен, но учетные данные внутренних сервисов оставались скомпрометированными;</li><li>из-за этого до 2 декабря 2025 года злоумышленники все еще могли перенаправлять трафик обновлений.</li></ul><p>Иными словами, сервер уже считался «чистым», но инфраструктурные ключи — нет.</p><h2>При чем тут Notepad++ и обновления</h2><p>Атакующие целенаправленно охотились именно за доменом Notepad++, зная, что в старых версиях механизмы проверки обновлений были недостаточно жесткими. Это позволило подсовывать поддельные манифесты обновлений без немедленного обнаружения.</p><p>Разработчик и хостинг-провайдер заявляют, что инцидент полностью закрыт:</p><h2>Что делать пользователям</h2><p>Авторы проекта рекомендует:</p><ul><li>скачать v8.9.1 вручную с официального сайта;</li><li>установить ее поверх текущей версии;</li><li>не использовать старые сборки с автообновлением без проверки.</li></ul><h2>Итог</h2><p>Это тот редкий, но показательный случай, когда open-source проект пострадал не из-за собственного кода, а из-за слабого звена в цепочке поставки — хостинга. Полгода атака оставалась почти незаметной, потому что работала аккуратно и выборочно.</p><p>Разработчик Notepad++ публично извинился перед пользователями и признал, что история стала болезненным, но важным уроком: <b>проверка обновлений — не опция, а обязательный минимум.</b></p>]]></content:encoded>
    </item>
    <item>
      <title>ИИ для создания видео из фото: как сделать танцующего ребёнка с Kling Motion Control</title>
      <link>https://tproger.ru/articles/ii-dlya-sozdaniya-video-iz-foto--kak-sdelat-tancuyushhego-rebyonka-s--2</link>
      <comments>https://tproger.ru/articles/ii-dlya-sozdaniya-video-iz-foto--kak-sdelat-tancuyushhego-rebyonka-s--2?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[СтудГид]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/ii-dlya-sozdaniya-video-iz-foto--kak-sdelat-tancuyushhego-rebyonka-s--2</guid>
      <description><![CDATA[<p>Как создать видео из фото через ИИ: Kling Motion Control переносит движения с видео на изображение. Гайд, промпты, примеры для танцующих видео.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/ii-dlya-sozdaniya-video-iz-foto--kak-sdelat-tancuyushhego-rebyonka-s--2">ИИ для создания видео из фото: как сделать танцующего ребёнка с Kling Motion Control</a>»</p>]]></description>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Опрос]]></category>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Tor]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[HR]]></category>
      <category><![CDATA[VPN]]></category>
      <category><![CDATA[Маркетинг]]></category>
      <category><![CDATA[QA]]></category>
      <category><![CDATA[YouTube]]></category>
      <category><![CDATA[5g]]></category>
      <category><![CDATA[TikTok]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[CMS]]></category>
      <category><![CDATA[Юмор]]></category>
      <category><![CDATA[1C]]></category>
      <category><![CDATA[Бизнес]]></category>
      <category><![CDATA[Мемы]]></category>
      <category><![CDATA[Промпты]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 02 Feb 2026 07:30:02 GMT</pubDate>
      <content:encoded><![CDATA[<p>Видео танцующего ребёнка, кота, собаки — один из самых популярных трендов в соцсетях. Раньше для создания таких роликов приходилось снимать реальное видео, потом заниматься монтажом и эффектами. Сейчас всё проще: загружаете фото, нейросеть анализирует движения из референсного видео и создаёт ИИ видео, где ваш ребёнок (или кот) танцует профессионально.</p><p>В конце 2024 года появилась технология, которая изменила подход к созданию видео через ИИ. <a href="https://eduforms.org/?rid=933e816cd1bae413&amp;ulp=https%3A%2F%2Fstudy24.ai%2Fchat%2Fkling_mc">Kling Motion Control </a>— нейросеть, которая умеет переносить движения из одного видео на фотографию. Вы загружаете видео танцующего человека, добавляете фото малыша — и получаете видео, где ребёнок повторяет все движения из референса.</p><figure><img src="https://media.tproger.ru/user-uploads/114541/2026-01-30/0cc7ceef-2812-4430-a1ab-d1051bca6400.webp" alt="Как работает Kling Motion Control перенос движений из видео на фото" /></figure><h2>Как работает Kling Motion Control: технология переноса движений</h2><p>Процесс создания танцующего видео через <a href="https://eduforms.org/?rid=933e816cd1bae413&amp;ulp=https%3A%2F%2Fstudy24.ai%2Fchat%2Fkling_mc">Kling Motion Control</a> состоит из трёх этапов:</p><p><b>Этап 1: Анализ видео-референса</b></p><p>Нейросеть загружает видео с танцем (или любыми другими движениями) и анализирует несколько параметров:</p><ul><li>Пластику движений — как двигается тело, руки, ноги</li><li>Ритм и скорость — темп движений, паузы, ускорения</li><li>Поведение камеры — если камера движется (приближение, отдаление, панорамирование), Kling учитывает это</li><li>Динамику окружения — если фон меняется, это тоже анализируется</li></ul><p><b>Этап 2: Сопоставление с фотографией</b></p><p>После анализа референса нейросеть берёт ваше фото и определяет ключевые точки: положение головы, рук, ног, туловища. Затем <a href="https://eduforms.org/?rid=933e816cd1bae413&amp;ulp=https%3A%2F%2Fstudy24.ai%2Fchat%2Fkling_mc">Kling Motion Control</a> сопоставляет позу на фото с начальной позой в видео-референсе.</p><p>Важный момент: качество переноса движений зависит от соответствия позы на фото и позы в начале референсного видео. Если в референсе человек стоит анфас, а на вашем фото — в профиль, результат может быть менее точным.</p><p><b>Этап 3: Генерация финального видео</b></p><p><a href="https://eduforms.org/?rid=933e816cd1bae413&amp;ulp=https%3A%2F%2Fstudy24.ai%2Fchat%2Fkling_mc">Kling Motion Control </a>создаёт видео, где персонаж с вашего фото повторяет движения из референса. Нейросеть учитывает:</p><ul><li>Сохранение черт лица и внешности с исходного фото</li><li>Плавность перехода между кадрами</li><li>Естественность движений (без резких рывков и искажений)</li><li>Освещение и тени, соответствующие движениям</li></ul><p>Результат: видео длиной 5-10 секунд, где ваш ребёнок (или кот, собака, любой персонаж) танцует так же, как в референсном видео.</p><h2>Где доступна Kling Motion Control: Study24.ai</h2><p><a href="https://eduforms.org/?rid=933e816cd1bae413&amp;ulp=https%3A%2F%2Fstudy24.ai%2Fchat%2Fkling_mc">Kling Motion Control</a> работает через китайскую платформу Kling AI. Проблема в том, что оригинальный сервис требует китайского номера телефона для регистрации и работает нестабильно из России.</p><p>Также есть платформа <a href="https://eduforms.org/?rid=933e816cd1bae413" rel="nofollow">Study24.ai</a>, которая предоставляет доступ к Kling Motion Control без сложностей:</p><ul><li>Работает без VPN из России</li><li>Регистрация через email или соцсети, не нужен китайский номер</li><li>Интерфейс на русском языке</li><li>Встроенная библиотека референсных видео для танцев</li><li>Подписка даёт доступ не только к Kling, но и к другим нейросетям для видео</li></ul><p><a href="https://eduforms.org/?rid=933e816cd1bae413">Study24.ai </a>— это агрегатор ИИ-инструментов для учёбы и творчества. Кроме <a href="https://eduforms.org/?rid=933e816cd1bae413&amp;ulp=https%3A%2F%2Fstudy24.ai%2Fchat%2Fkling_mc">Kling Motion Control</a>, здесь доступны нейросети для <a href="https://top-recept.ru/obuchenie/nejroseti/kak-sdelat-prezentacziyu-v-shkolu-bystro-i-legko-c-generatorom-prezentaczij/">создания презентаций</a>, <a href="https://top-recept.ru/obuchenie/nejroseti/neqroset-reshaushaya-zadachi-po-foto/">решения задач</a>, <a href="https://top-recept.ru/obuchenie/nejroseti/ii-bez-oshibok-kartinki/">генерации изображений</a>. Удобно, когда всё в одном месте.</p><figure><img src="https://media.tproger.ru/user-uploads/114541/2026-01-29/f7b60237-25cc-41a0-811c-4f52c0bf1458.webp" alt="Study24 ai платформа для создания видео через Kling Motion Control" /></figure><h2>Как создать видео танцующего малыша: пошаговая инструкция</h2><p>Разберём процесс создания танцующего видео через <a href="https://eduforms.org/?rid=933e816cd1bae413&amp;ulp=https%3A%2F%2Fstudy24.ai%2Fchat%2Fkling_mc">Kling Motion Control</a>.</p><p><b>Шаг 1: Подготовка фото</b></p><p>Выберите фотографию ребёнка (или любого другого персонажа). Требования к фото:</p><ul><li>Чёткое изображение, без размытия</li><li>Персонаж в кадре полностью или хотя бы по пояс</li><li>Хорошее освещение, детали видны</li><li>Желательно простой фон (чтобы нейросеть не отвлекалась на сложные детали)</li><li>Поза близка к начальной позе в референсном видео</li></ul><p>Лучше всего работают портретные фото, где ребёнок стоит анфас или в лёгком повороте.</p><p><b>Шаг 2: Выбор референсного видео</b></p><p>Найдите видео с танцем, который хотите перенести. Варианты:</p><ul><li>Загрузить видео с YouTube (скачайте через любой сервис)</li><li>Снять референс самостоятельно</li></ul><p><b>Референсное видео должно быть:</b></p><ul><li>Длиной 5-15 секунд (оптимально 8-10 секунд)</li><li>С чётко видимыми движениями</li><li>Без резких обрезов и склеек</li></ul><p><b>Шаг 3: Загрузка в Kling Motion Control</b></p><p>На <a href="https://eduforms.org/?rid=933e816cd1bae413">Study24.ai</a>, выберите раздел Kling Motion Control. Загрузите:</p><ol><li>Ваше фото (кадр, который будет "оживлен")</li><li>Референсное видео (откуда берутся движения)</li></ol><p><b>Шаг 4: Настройка параметров</b></p><p><a href="https://eduforms.org/?rid=933e816cd1bae413&amp;ulp=https%3A%2F%2Fstudy24.ai%2Fchat%2Fkling_mc">Kling Motion Control </a>даёт несколько опций. Можно написать в промпте:</p><ul><li>Motion strength (сила переноса движений) — насколько точно повторять референс. 100% — максимальное соответствие, 50% — более свободная интерпретация.</li><li>Camera motion (движение камеры) — переносить ли движения камеры из референса. Включайте, если в референсе есть зум или панорамирование.</li><li>Quality — качество финального видео. Высокое качество дольше генерируется, но результат лучше.</li></ul><p>Для танцующего ребёнка рекомендую: Motion strength 80-90%, Camera motion включен, Quality на максимум.</p><p><b>Шаг 5: Генерация видео</b></p><p>Нажмите кнопку генерации. <a href="https://eduforms.org/?rid=933e816cd1bae413&amp;ulp=https%3A%2F%2Fstudy24.ai%2Fchat%2Fkling_mc">Kling Motion Control</a> создаёт видео за 3-8 минут в зависимости от длины и сложности референса.</p><p><b>Шаг 6: Скачивание результата</b></p><p>Когда видео готово, скачайте его в формате MP4. Kling сохраняет видео в разрешении 720p или 1080p (в зависимости от подписки).</p><h2>Готовые промты для создания танцующих видео</h2><p><a href="https://eduforms.org/?rid=933e816cd1bae413&amp;ulp=https%3A%2F%2Fstudy24.ai%2Fchat%2Fkling_mc">Kling Motion Control</a> работает немного иначе, чем текстовые нейросети. Здесь не нужны детальные промпты — главное правильно подобрать фото и референсное видео.</p><p>Но можно добавлять текстовые подсказки для улучшения результата. Вот проверенные промты:</p><h2>Промт 1: Танцующий малыш (классический)</h2><p>Этот промт подходит для создания видео танцующего ребёнка с естественными движениями. Используйте его с любым референсным видео детского танца.</p><h2>Промт 2: Танцующий кот (юмористический)</h2><p>Для создания танцующего кота ИИ видео. Лучше всего работает с референсами, где человек танцует стоя — нейросеть переносит движения на кота, и получается забавный эффект.</p><h2>Промт 3: Танцующая собака (энергичный стиль)</h2><p>Видео где собаки танцуют ИИ создаёт отлично, если использовать энергичные танцевальные референсы. Добавьте детали породы: "golden retriever", "husky", "corgi" для точности.</p><h2>Промт 4: Девочка танцует (балет)</h2><p>ИИ видео где девочка танцует в балетном стиле. Используйте референсы с классическими балетными движениями для лучшего результата.</p><h2>Промт 5: Танцующий мальчик (хип-хоп)</h2><p>Танцующий мальчик - видео ИИ в стиле хип-хоп. Референс должен содержать характерные движения: брейк-данс элементы, поппинг, локинг.</p><h2>Идеи для создания видео через Kling Motion Control</h2><p><a href="https://eduforms.org/?rid=933e816cd1bae413&amp;ulp=https%3A%2F%2Fstudy24.ai%2Fchat%2Fkling_mc">Kling Motion Control</a> подходит не только для танцев. Вот другие идеи использования технологии переноса движений:</p><h2>1. Исторические персонажи оживают</h2><p>Возьмите фото исторической личности (Эйнштейн, Леонардо да Винчи, Пушкин) и создайте видео, где они танцуют современные танцы или делают смешные жесты. Отлично для образовательного контента с юмором.</p><h2>2. Питомцы повторяют ваши движения</h2><p>Снимите видео, где вы показываете какое-то движение (махаете рукой, делаете приседание), и перенесите это на фото вашего кота или собаки. Получается, будто питомец повторяет за вами.</p><h2>3. Ребёнок в роли профессионального танцора</h2><p>Используйте референсы из профессиональных танцевальных выступлений. Ваш малыш будет «танцевать» как участник шоу «Танцы» или балерина Большого театра.</p><h2>4. Семейные мемы</h2><p>Создайте серию видео, где все члены семьи (включая бабушку и дедушку) танцуют один и тот же танец. Используйте один референс для всех — получится забавный семейный челлендж.</p><h2>5. Оживление детских рисунков</h2><p>Нарисуйте персонажа (или возьмите детский рисунок), сфотографируйте и создайте видео, где рисунок танцует. Магия для детей — их творения оживают.</p><h2>6. Корпоративные поздравления</h2><p>Фото руководителя компании + весёлый танцевальный референс = оригинальное новогоднее поздравление для коллектива.</p><h2>7. Тренды для TikTok и Reels</h2><p>Берёте популярный танец из TikTok, переносите на своё фото — и ваш контент готов. Не нужно реально снимать танец, достаточно фотографии.</p><h2>Для чего нужна Kling Motion Control: 5 практических применений</h2><h2>1. Контент для соцсетей без съёмок</h2><p>Самое очевидное применение — создание вирусного контента. Видео танцующего ребёнка, кота, собаки набирают миллионы просмотров в TikTok, Instagram Reels, YouTube Shorts.</p><p>Раньше для этого нужно было:</p><ul><li>Реально научить ребёнка танцевать (или снимать сотни дублей)</li><li>Мучиться с питомцем, который не хочет сотрудничать</li><li>Тратить время на монтаж</li></ul><p>Теперь: одно фото + референсное видео = готовый ролик за 5 минут.</p><h2>2. Образовательные проекты</h2><p>Оживление исторических фотографий для образовательных видео. Представьте урок истории, где Пётр I танцует, Екатерина II делает жесты, а Ломоносов показывает движения.</p><p>Это работает и для науки: создайте видео, где динозавр двигается по референсу современной ящерицы, или клетка выполняет процесс митоза с анимированными движениями.</p><h2>3. Персонализированные подарки</h2><p>Создайте видео, где близкий человек танцует его любимый танец, и подарите как оригинальное поздравление. Особенно трогательно получается с фото ушедших родственников — можно «оживить» старые фотографии.</p><h2>4. Креативная реклама и маркетинг</h2><p>Малый бизнес часто не может позволить профессионального видеопродакшн. <a href="https://eduforms.org/?rid=933e816cd1bae413&amp;ulp=https%3A%2F%2Fstudy24.ai%2Fchat%2Fkling_mc">Kling Motion Control </a>решает эту проблему:</p><ul><li>Фото продукта + танцевальный референс = вирусная реклама</li><li>Логотип компании оживает и двигается</li><li>Маскот бренда танцует в роликах</li></ul><h2>5. Развлекательный контент для детей</h2><p>Родители могут создавать персонализированные мультики, где их ребёнок — главный герой приключений. Снимаете серию движений (ходьба, бег, прыжки), переносите на фото ребёнка — и у вас готовы кадры для анимированной истории.</p><h2>Технические особенности и ограничения Kling Motion Control</h2><h2>Что Kling Motion Control делает отлично</h2><p><b>Перенос простых танцевальных движений
<br /></b>Классические танцы, хип-хоп, детские танцы — всё это Kling переносит почти идеально. Движения плавные, без артефактов.</p><p><b>Работа с портретами
<br /></b>Если референс и фото — оба портретные (человек виден по пояс или в полный рост), результат получается максимально качественным.</p><p><b>Сохранение черт лица
<br /></b>В отличие от многих нейросетей для видео, <a href="https://eduforms.org/?rid=933e816cd1bae413&amp;ulp=https%3A%2F%2Fstudy24.ai%2Fchat%2Fkling_mc">Kling Motion Control </a>хорошо сохраняет внешность персонажа с исходного фото. Лицо узнаваемо на всём протяжении видео.</p><h2>Где могут быть проблемы</h2><p><b>Сложные акробатические движения
<br /></b>Если референс содержит сложную акробатику (сальто, стойки на руках), нейросеть может создать искажения. Лучше использовать более простые движения.</p><p><b>Несоответствие ракурсов
<br /></b>Если на фото человек в профиль, а в референсе анфас — результат будет хуже. Старайтесь подбирать фото и референс с похожими ракурсами.</p><p><b>Очень быстрые движения
<br /></b>Супер-быстрые танцы с резкими движениями могут создавать размытие и артефакты. Motion strength в таких случаях лучше снизить до 70%.</p><p><b>Длинные видео
<br /></b>Максимальная длина видео — 10 секунд. Для создания длинного танцевального ролика придётся генерировать несколько сегментов и склеивать в редакторе.</p><h2>Частые вопросы про Kling Motion Control</h2><p><b>Сколько времени генерируется видео?</b></p><p>От 3 до 8 минут в зависимости от длины референса и качества. Короткие видео (5 сек) генерируются быстрее, длинные (10 сек) — дольше.</p><p><b>Какой формат видео на выходе?</b></p><p>MP4, разрешение 720p или 1080p. Можно дальше обработать в любом видеоредакторе при необходимости.</p><p><b>Работает ли с животными?</b></p><p>Да, но результат зависит от позы. Если кот или собака на фото в позе, похожей на начало референса — будет отлично. Если сильное несоответствие (референс — человек стоит, фото — кот лежит) — могут быть артефакты.</p><p><b>Можно ли использовать свои видео как референс?</b></p><p>Да, загружайте любые видео. Можете снять свой танец и перенести движения на фото ребёнка.</p><p><b>Нужен ли VPN для работы?</b></p><p>Через <a href="https://eduforms.org/?rid=933e816cd1bae413">Study24.ai </a>— нет. Платформа работает из России без VPN. Если заходите напрямую на китайский Kling AI — нужен VPN и китайский номер.</p><p><b>Можно ли создать видео где танцуют несколько персонажей?</b></p><p>Можно, но лучше не включать больше 2-3 персонажей.</p><h2>Заключение</h2><p><a href="https://eduforms.org/?rid=933e816cd1bae413&amp;ulp=https%3A%2F%2Fstudy24.ai%2Fchat%2Fkling_mc">Kling Motion Control </a>изменил подход к созданию танцевальных видео через ИИ. Технология переноса движений из референсного видео даёт полный контроль над результатом — вы точно знаете, какой танец получится, потому что видели исходник.</p><p>Создать видео танцующего ребёнка, кота, собаки или любого другого персонажа теперь проще, чем когда-либо. Не нужна реальная съёмка, профессиональный монтаж, дорогое оборудование. Достаточно фотографии и референсного видео с движениями.</p><p><a href="https://eduforms.org/?rid=933e816cd1bae413">Study24.ai </a>предоставляет удобный доступ к Kling Motion Control без VPN и китайских номеров. Платформа объединяет лучшие ИИ-инструменты в одном месте — кроме создания видео, здесь доступны нейросети для учёбы, генерации изображений, решения задач.</p><p>Готовые промты из этой статьи помогут создать танцующее видео за минуты. Экспериментируйте с разными референсами, пробуйте неожиданные сочетания (бабушка танцует хип-хоп, кот повторяет балет), создавайте вирусный контент.</p><p>ИИ-видео танцующего малыша — это не просто развлечение. Это инструмент для креативного контента, образования, рекламы, персональных подарков. Технология доступна каждому, кто хочет создавать качественные видео без сложных навыков монтажа и анимации.</p>]]></content:encoded>
    </item>
    <item>
      <title>JetBrains закрыла ИИ IDE Fleet. Вместо него выйдет новый продукт для ИИ-агентов</title>
      <link>https://tproger.ru/news/jetbrains-zakryla-ii-ide-fleet--vmesto-nego-vyjdet-novyj-produkt-dlya-ii-agentov</link>
      <comments>https://tproger.ru/news/jetbrains-zakryla-ii-ide-fleet--vmesto-nego-vyjdet-novyj-produkt-dlya-ii-agentov?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Булат Яббаров]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/jetbrains-zakryla-ii-ide-fleet--vmesto-nego-vyjdet-novyj-produkt-dlya-ii-agentov</guid>
      <description><![CDATA[<p>JetBrains закрыла IDE Fleet и прекращает поддержку проекта. Вместо редактора компания готовит новый продукт для ИИ-агентной разработки</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/jetbrains-zakryla-ii-ide-fleet--vmesto-nego-vyjdet-novyj-produkt-dlya-ii-agentov">JetBrains закрыла ИИ IDE Fleet. Вместо него выйдет новый продукт для ИИ-агентов</a>»</p>]]></description>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[Искусственный интеллект]]></category>
      <category><![CDATA[Рефакторинг]]></category>
      <category><![CDATA[JetBrains]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 16 Dec 2025 14:25:02 GMT</pubDate>
      <content:encoded><![CDATA[<p>JetBrains <a href="https://blog.jetbrains.com/fleet/2025/12/the-future-of-fleet/">объявила</a> о закрытии <b>IDE Fleet</b>, над которой компания работала несколько лет.</p><p>Начиная <b>с 22 декабря 2025 года</b>, ее больше нельзя будет скачать. Ни через Toolbox App, ни через другие официальные каналы. Разработка и выпуск обновлений также прекращаются.</p><p>При этом JetBrains подчеркивает: речь идет не о провале эксперимента, а о смене стратегии. Команда Fleet, технологическая база и наработки никуда не исчезают — вместо IDE компания готовит <b>новый продукт, ориентированный на агентную разработку</b>.</p><h2>Почему Fleet не взлетела как IDE</h2><p>Fleet задумывалась как <b>попытка переосмыслить IDE JetBrains</b> через более легкую архитектуру, современный UI и отказ от наследия IntelliJ Platform.</p><p>С технической точки зрения, <b>эксперимент оказался успешным</b> — многие компоненты Fleet уже используются в других IDE компании. При этом отдельные UX-решения и вовсе были переняты всей линейкой продуктов.</p><p>Однако <b>как самостоятельный продукт, Fleet не смогла занять четкую нишу</b>. Она не смогла заменить IntelliJ IDEA и другие IDE JetBrains, но и не предложила достаточно убедительных преимуществ, чтобы существовать параллельно с ними.</p><p>Пользователи постоянно спрашивали, <b>какую IDE выбирать</b>.  А наличие двух схожих линеек только усиливало путаницу.</p><h2>Ставка на ИИ тоже не спасла Fleet</h2><p>JetBrains пыталась перепозиционировать Fleet как <b>AI-first редактор</b>. Команда экспериментировала с новыми сценариями и проводила масштабные пользовательские исследования.</p><p>Вывод оказался неприятным, но честным: <b>еще один ИИ-редактор не имеет шансов выделиться на фоне десятков ИИ-ориентированных форков VSCode</b>.</p><p>В результате JetBrains решила сосредоточить развитие ИИ-функций внутри уже существующих IDE, где они действительно приносят ценность.</p><h2>Новый фокус — агентная разработка</h2><p>Параллельно с работой над Feet, компания заметила формирование нового подхода к программированию. <b>Разработчики все чаще делегируют задачи ИИ-агентам, а не пишут код вручную</b>.</p><p>Речь идет о рефакторинге, обновлении тестов, исследовании незнакомого кода и даже реализации фич целиком — с последующим ревью результата.</p><p>Такой воркфлоу плохо сочетается с классической моделью IDE, где все строится вокруг синхронной работы и мгновенной обратной связи.</p><p>Поэтому JetBrains и решила не «втискивать» агентные сценарии в IDE, а создать отдельную среду разработки для ИИ-агентов. Именно в этом виде Fleet получила вторую жизнь — но уже под новым именем и с другим позиционированием.</p><h2>Что будет с текущими пользователями Fleet</h2><p>Если Fleet уже установлена, ею можно продолжать пользоваться. Однако обновлений больше не будет. А функции, завязанные на серверные сервисы JetBrains — <b>включая AI Assistant</b> — со временем могут перестать работать.</p><p>JetBrains обещает отдельно рассказывать о новом продукте по мере его разработки.</p>]]></content:encoded>
    </item>
    <item>
      <title>OpenAI и Anthropic объединились для создания открытых ИИ-агентов под эгидой Linux Foundation</title>
      <link>https://tproger.ru/news/openai-i-anthropic-obedinilis-dlya-sozdaniya-otkrytyh-ii-agentov-pod-egidoj-linux-foundation</link>
      <comments>https://tproger.ru/news/openai-i-anthropic-obedinilis-dlya-sozdaniya-otkrytyh-ii-agentov-pod-egidoj-linux-foundation?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Булат Яббаров]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/openai-i-anthropic-obedinilis-dlya-sozdaniya-otkrytyh-ii-agentov-pod-egidoj-linux-foundation</guid>
      <description><![CDATA[<p>OpenAI и Anthropic создали Agentic AI Foundation под Linux Foundation, объединив MCP, Goose и AGENTS.md в единый стандарт ИИ-агентов</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/openai-i-anthropic-obedinilis-dlya-sozdaniya-otkrytyh-ii-agentov-pod-egidoj-linux-foundation">OpenAI и Anthropic объединились для создания открытых ИИ-агентов под эгидой Linux Foundation</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[Linux]]></category>
      <category><![CDATA[Google]]></category>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[Искусственный интеллект]]></category>
      <category><![CDATA[Windows]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Microsoft]]></category>
      <category><![CDATA[Cloudflare]]></category>
      <category><![CDATA[OpenAI]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 10 Dec 2025 06:02:52 GMT</pubDate>
      <content:encoded><![CDATA[<p>Если прошлый год прошел под знаком <b>LLM</b>, то 2025-й явно стал годом <b>ИИ-агентов</b>.</p><p>Компании выпускают ассистентов, автономные фреймворки и целые цепочки инструментов для автоматизации рабочих процессов.</p><p>Но рынок быстро столкнулся с проблемой: <b>большинство решений основаны на закрытых технологиях</b>, они плохо совместимы друг с другом и размывают идею открытой экосистемы.</p><p>Чтобы изменить ситуацию, <b>OpenAI</b>, <b>Anthropic</b> и <b>Block</b> объявили о создании <a href="https://aaif.io/press/linux-foundation-announces-the-formation-of-the-agentic-ai-foundation-aaif-anchored-by-new-project-contributions-including-model-context-protocol-mcp-goose-and-agents-md/">Agentic AI Foundation</a> (AAIF) — нового фонда под управлением Linux Foundation, который займется развитием открытых стандартов для ИИ-агентов.</p><p>Поддержку инициативе оказывают <i>Google</i>, <i>Microsoft</i>, <i>AWS</i>, <i>Bloomberg</i> и <i>Cloudflare</i>.</p><h2>MCP, Goose и AGENTS.md объединяют в один стандарт</h2><p>В рамках AAIF свои ключевые технологии передали сразу три компании:</p><ul><li><b>MCP (Model Context Protocol) от Anthropic</b> — стандарт связи между агентами и внешними инструментами. За год появилось уже <b>более 10 000 MCP-серверов</b>, а Microsoft встроила поддержку MCP прямо в Windows и Visual Studio. Это превращает агентов в «первоклассных граждан» ОС и упрощает автоматизацию разработки.</li><li><b>Goose от Block</b> — локальный агентный фреймворк, способный работать на устройстве пользователя без облака. Он использует MCP как базовый коммуникационный слой.</li><li><b>AGENTS.md от OpenAI</b> — открытый формат, который стал «README для ИИ-агентов». Файл описывает проект в машинно-читаемом виде: тесты, сборку, архитектуру, стили кода, политику безопасности и рабочие процессы. Формат уже используют 60 000+ open-source проектов, включая VS Code.</li></ul><h2>Зачем это индустрии</h2><p>Майк Кригер из Anthropic подчеркивает, что передача MCP под управление Linux Foundation гарантирует нейтральность стандарта.</p><p>В OpenAI заявили, что объединение технологий под одной организацией создает прочную основу для разработки надежных агентов.</p><h2>Что значит создание AAIF для рынка</h2><p>Появление AAIF может стать <b>переломным моментом</b>: впервые крупнейшие игроки не конкурируют стандартами, а объединяют их.</p><p>Это <b>шаг к единой экосистеме</b>, где агенты смогут взаимодействовать с инструментами, IDE, операционными системами и сервисами. И все это без кастомных протоколов и закрытых API.</p>]]></content:encoded>
    </item>
    <item>
      <title>Инженер реализовал завирусившийся XKCD-комикс про зависимости ПО</title>
      <link>https://tproger.ru/news/inzhener-realizoval-zavirusivwijsya-xkcd-komiks-pro-zavisimosti-po</link>
      <comments>https://tproger.ru/news/inzhener-realizoval-zavirusivwijsya-xkcd-komiks-pro-zavisimosti-po?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Булат Яббаров]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/inzhener-realizoval-zavirusivwijsya-xkcd-komiks-pro-zavisimosti-po</guid>
      <description><![CDATA[<p>Инженер создал Stacktower — интерактивную версию культового XKCD-комикса, показывающую, как одна зависимость может «обрушить» все приложение</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/inzhener-realizoval-zavirusivwijsya-xkcd-komiks-pro-zavisimosti-po">Инженер реализовал завирусившийся XKCD-комикс про зависимости ПО</a>»</p>]]></description>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[GitHub]]></category>
      <category><![CDATA[Node.js]]></category>
      <category><![CDATA[Rust]]></category>
      <category><![CDATA[Приложение]]></category>
      <category><![CDATA[Библиотеки]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 05 Dec 2025 09:04:53 GMT</pubDate>
      <content:encoded><![CDATA[<p>Веб-инженер <i>Маттиас Хюэль</i> <a href="https://stacktower.io/">создал</a> <b>интерактивную версию культового комикса XKCD №2347</b>, в котором автор высмеивает хрупкость современного ПО.</p><p>Это тот самый рисунок, который в последние месяцы превратился в популярный мем: огромные цифровые системы стоят на одном крошечном модуле, поддерживаемом энтузиастом из Небраски.</p><p>Но теперь эта «шутка» стала наглядной — <b>проект Stacktower превращает рисунок в настоящую визуализацию зависимостей</b>.</p><p>На заглавной схеме, полностью повторяющей комикс, можно нажать на любой блок — и увидеть реальные пакеты, библиотеки и цепочки зависимостей.</p><p>Проект динамически строит дерево зависимостей, позволяя проследить, как небольшие модули опираются на еще меньшее количество фундаментальных компонентов.</p><figure><img src="https://media.tproger.ru/user-uploads/111041/2025-12-05/1b29d25e-fccc-45ef-ade8-a7c35ad092ba.jpeg" alt="" /></figure><h2>Как работает Stacktower</h2><p>Сайт предлагает две модели: <i>«стабильную башню»</i> и <i>«неустойчивую башню»</i>, где уровни подстраиваются под выбранные библиотеки.</p><p>Пользователь может загрузить зависимости своих приложений — например, на <b>Python</b> или <b>JavaScript</b> — и увидеть, что будет, если убрать даже один элемент.</p><p>На странице приводится пример для <b>Node.js</b>:</p><p>приложение зависит от Express → Express зависит от body-parser → body-parser зависит от qs → и так далее</p><p>Stacktower иллюстрирует, что даже простое приложение тянет десятки модулей, часто неподконтрольных разработчику.</p><p>Есть и <b>Python-вариант</b>:</p><p>импорт Flask тянет Werkzeug, Jinja2, MarkupSafe, Click и еще несколько пакетов. А те, в свою очередь, имеют собственные зависимости.</p><h2>Зачем это нужно</h2><p>Автор подчеркивает: <b>цель проекта — не критиковать экосистемы, а показать их реальное устройство</b>.</p><p>Стек современных приложений неизбежно сложен и даже крошечный модуль может стать критически важным. Именно так в 2022 году случайное удаление библиотеки left-pad временно «сломало» огромный кусок JavaScript-мира.</p><p>Stacktower превращает эту абстрактную проблему в понятный визуальный эффект: убираешь одну зависимость — рушится вся конструкция.</p><h2>Комьюнити уже подхватило идею</h2><p>Проект быстро разошелся по Reddit, Hacker News и X: разработчики делятся скриншотами своих «башен», спорят о хрупкости экосистем и обсуждают, стоит ли пересматривать подход к зависимости.</p><p>Кто-то предлагает добавить поддержку Rust и Go, другие мечтают о корпоративной версии инструмента для визуального аудита безопасности.</p><p>Изучить проект подробнее можно на его <a href="https://github.com/matzehuels/stacktower">странице</a> на GitHub.</p>]]></content:encoded>
    </item>
    <item>
      <title>IDE Google Antigravity незаметно удалила диск D: у пользователя</title>
      <link>https://tproger.ru/news/ide-google-antigravity-nezametno-udalila-disk-d--u-polzovatelya</link>
      <comments>https://tproger.ru/news/ide-google-antigravity-nezametno-udalila-disk-d--u-polzovatelya?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Булат Яббаров]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/ide-google-antigravity-nezametno-udalila-disk-d--u-polzovatelya</guid>
      <description><![CDATA[<p>IDE Google Antigravity удалила данные с диска D у пользователя, вызвав споры о безопасности и рисках автоматизации в ранних версиях ИИ</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/ide-google-antigravity-nezametno-udalila-disk-d--u-polzovatelya">IDE Google Antigravity незаметно удалила диск D: у пользователя</a>»</p>]]></description>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Google]]></category>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[Искусственный интеллект]]></category>
      <category><![CDATA[Бета]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 04 Dec 2025 03:59:24 GMT</pubDate>
      <content:encoded><![CDATA[<p>Пользователь Reddit под ником <i>/Deep-Hyena492</i> <a href="https://www.reddit.com/r/google_antigravity/comments/1p82or6/google_antigravity_just_deleted_the_contents_of/">поделился</a> личной трагедией: экспериментальная <b>IDE Google Antigravity неожиданно удалила</b> содержимое его локального диска D.</p><p>По его словам, ИИ-детище Google <b>восприняло</b> <b>каталог разработки как временную рабочую область и «очистила ее»</b>, тем самым стерев очень важные файлы.</p><p>На опубликованном скриншоте видно <b>уведомление Antigravity</b> о построении проекта и журнал операций. И после его изучения пользователь обнаружил, что <b>каталог на диске D стал пустым</b>.</p><p>Пост вызвал бурю обсуждений в комментариях — от критики бета-версий IDE до споров о том, мог ли инструмент Google получить такие права доступа.</p><figure><img src="https://media.tproger.ru/user-uploads/111041/2025-12-04/c7ca06bd-56eb-45b1-9329-41039634c83d.jpeg" alt="" /></figure><h2>Как отреагировали пользователи</h2><p>В комментариях — смесь паники, иронии и технического разбора.</p><p>Одни предполагают, что <b>Antigravity могла ошибочно считать целый диск рабочей директорией</b>, другие говорят о возможном конфликте с системой контроля версий или скриптами очистки.</p><p>Встречаются и более резкие оценки: <i>«никогда не запускайте IDE с правами администратора»</i>, <i>«не доверяйте инструментам в раннем доступе свои реальные проекты»</i>.</p><p>Несколько участников обсуждения отметили, что <b>IDE действительно имеет функцию автоматической очистки временных build-папок</b>. Мол это и могло привести к проблеме при неверной конфигурации пути.</p><p>Были и попытки <b>восстановить данные</b>. Некоторые реддиторы посоветовали остановить запись на диск, использовать инструменты восстановления и проверить, формировались ли системные точки бэкапа.</p><h2>Почему инцидент тревожит</h2><p><b>Antigravity — относительно новая IDE Google</b>. Она активно продвигается как «инструмент нового поколения» с интегрированным ИИ-ассистентом, автоматическим рефакторингом, «умными» рабочими областями.</p><p>Однако именно высокая степень автоматизации и может приводить к опасным ошибкам конфигурации.</p><p>Если IDE действительно способна удалять структуру каталогов без подтверждения, это вызывает вопросы о безопасности и продуманности механизма очистки.</p>]]></content:encoded>
    </item>
    <item>
      <title>Разработке обещают смерть последние 30 лет, теперь из-за ИИ. Почему она все еще живее всех живых</title>
      <link>https://tproger.ru/news/razrabotke-obeshhayut-smert-poslednie-30-let--teper-iz-za-ii--pochemu-ona-vse-eshhe-zhivee-vseh-zhivyh</link>
      <comments>https://tproger.ru/news/razrabotke-obeshhayut-smert-poslednie-30-let--teper-iz-za-ii--pochemu-ona-vse-eshhe-zhivee-vseh-zhivyh?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Булат Яббаров]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/razrabotke-obeshhayut-smert-poslednie-30-let--teper-iz-za-ii--pochemu-ona-vse-eshhe-zhivee-vseh-zhivyh</guid>
      <description><![CDATA[<p>30 лет предсказывают смерть разработки, теперь из-за ИИ. Но каждая «революция» лишь меняет инструменты, а не отменяет потребность в инженерах</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/razrabotke-obeshhayut-smert-poslednie-30-let--teper-iz-za-ii--pochemu-ona-vse-eshhe-zhivee-vseh-zhivyh">Разработке обещают смерть последние 30 лет, теперь из-за ИИ. Почему она все еще живее всех живых</a>»</p>]]></description>
      <category><![CDATA[Интернет]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Машинное обучение]]></category>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[Рефакторинг]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[HTML]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[Библиотеки]]></category>
      <category><![CDATA[Бизнес]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 02 Dec 2025 12:36:14 GMT</pubDate>
      <content:encoded><![CDATA[<p>История разработки — это череда повторяющихся <b>прогнозов о ее скорой гибели</b>.</p><p>В сети появился <a href="https://www.jasonscheirer.com/weblog/vignettes/">материал</a>, автор которого — программист с 20+ летним стажем — вспоминает, как еще в 90-е взрослые уверяли его, что <b>программирование обречено</b>.</p><p>Тогда активно утверждалось, что <b>ООП решит все проблемы раз и навсегда</b>: появятся библиотеки-«кирпичики», а бизнес просто будет собирать приложения как LEGO, вообще без инженеров.</p><p>Прошли десятилетия, а профессия не только не исчезла — <b>она стала одной из самых востребованных</b>. Каждый уровень абстракции, который должен был «убить» разработчиков, просто поднимал планку и открывал новые задачи.</p><h2>Мультимедиа, IDE и другие «концы света», которые не случились</h2><p>В начале 90-х индустрия переживала <b>«мультимедийную революцию»</b>: казалось, что любая программа должна уметь работать со звуком и видео, иначе останется в прошлом.</p><p>Но через несколько лет <b>это стало обыденностью</b> — просто очередным &lt;video /&gt; в HTML. Никто массово не разорился из-за отсутствия мультимедиа в продуктах.</p><p>В 2000-х на горизонте появился <b>новый «убийца профессии»</b> — умные IDE вроде IntelliJ. Автодополнение, рефакторинг, перенос классов, исправление ошибок до сборки — все это казалось магией, которая вот-вот заменит людей.</p><p>Но <b>инструменты лишь ускорили работу</b>, а <b>не забрали ее</b>. IDE прекрасно переставляет код, но не пишет новую логику.</p><h2>Автоматизация в реальности: она освобождает время, а не людей</h2><p>Автор приводит два примера: он автоматизировал работу контрактника, мигрировавшего базу MUMPS, и автоматизировал собственные задачи по обновлению сайтов, боясь потерять работу. В обоих случаях люди остались на своих местах — просто стали заниматься чем-то другим.</p><p>Вывод простой: <b>работы становится не меньше, а больше</b>. Автоматизация убирает рутину, но не отменяет необходимости решать новые проблемы.</p><h2>Новые ввения приходят и уходят, но разработка остается</h2><p>Интернет, Web 2.0, машинное обучение — каждая волна начиналась как революция и заканчивалась чем-то будничным. Мы привыкли к тому, что технологии, которые вчера казались чудом, сегодня воспринимаются как мелочь.</p><p><b>Текущая волна ИИ — не исключение</b>. Да, большие языковые модели меняют рабочие процессы. Да, они автоматизируют часть задач.</p><p>Но автор призвал быть честными с самими собой: такие сдвиги редко уничтожают профессию. Они скорее превращают ее в новую версию самой себя.</p><h2>Вместо финала: ИИ не убьет разработчиков, но сделает их работу другой</h2><p>Пугающие прогнозы звучат громко, но реальность — она сложнее. Пока одни обещают «конец эпохи программистов», другие продолжают писать код, решать задачи и адаптироваться к новым инструментам.</p><p>Как и последние 30 лет, разработка остается живой потому, что мир постоянно усложняется. А значит — всегда будет кому этот мир программировать.</p>]]></content:encoded>
    </item>
    <item>
      <title>Генерируем CRUD для gRPC по схеме БД следуя Google AIP</title>
      <link>https://tproger.ru/articles/generiruem-crud-dlya-grpc-po-sheme-bd</link>
      <comments>https://tproger.ru/articles/generiruem-crud-dlya-grpc-po-sheme-bd?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Артем Украинский]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/generiruem-crud-dlya-grpc-po-sheme-bd</guid>
      <description><![CDATA[<p>Как с помощью db-exporter автоматизировать процесс генерации CRUD-операций для gRPC, соблюдая стандарт Google AIP</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/generiruem-crud-dlya-grpc-po-sheme-bd">Генерируем CRUD для gRPC по схеме БД следуя Google AIP</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[Google]]></category>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[Базы данных]]></category>
      <category><![CDATA[Бэкенд]]></category>
      <category><![CDATA[gRPC]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 20 Nov 2025 10:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p>К сожалению, жизнь разработчика не всегда полна сложными и интересными задачами, время от времени мы все-таки пишем CRUD'ы.</p><p>Задача в целом проста:</p><ol><li>Открыть структуру таблицы</li><li>Скопировать названия колонок</li><li>Соотнести типы, которые существуют в спецификации (gRPC, OpenAPI, и т.п.)</li><li>Описать API метод</li><li>Проверить на соответствие стайл-гайду</li></ol><p>Но это утомительно и отнимает драгоценное время разработчиков. Данную  инструкцию за нас может выполнить инструмент <b>db-exporter. </b>В этой статье рассмотрим, как с его помощью автоматизировать процесс генерации CRUD-операций для gRPC, соблюдая <a href="https://google.aip.dev/121">стандарт</a> Google AIP по ресурсно-ориентированному дизайну.</p><p>В последующих разделах мы подробно рассмотрим:</p><ul><li>Принцип работы db-exporter</li><li>Процесс настройки и конфигурации</li><li>Примеры генерации различных типов операций</li><li>Валидацию сгенерированных proto файлов</li><li>Как внедрить инструмент для постоянной работы с ним</li></ul><h2>Знакомимся с инструментом</h2><p>db-exporter — это Open Source утилита для генерации кода и документации к схеме базы данных. «Экспортировать» можно в различные распространенные форматы: диаграмма классов, protobuf, код на Go и другие. На данный момент инструмент поддерживает PostgreSQL и MySQL. Реализована поддержка основных операционных систем. Инструмент достаточно молодой и активно развивается.</p><figure><img src="https://media.tproger.ru/user-uploads/133667/2025-10-31/fefdf04a-7291-41f2-9722-23a28266595f.png" alt="" /><figcaption>Принцип работы db-exporter</figcaption></figure><p>Для начала работы с db-exporter необходимо скачать его со страницы релизов. Далее разархивировать и переместить в /usr/local/bin. Или выполнить всё одной командой.</p><p><b>Mac OS</b></p><p><b>Linux</b></p><p>Теперь у нас установлен инструмент и мы почти готовы его запускать, но перед этим разберемся, составим пример таблицы, над которой будем проводить эксперименты.</p><h2>Составим пример</h2><p>Договоримся, что нашим примером для генерации кода будет являться таблица пользователей. У пользователей есть: id, имя, отчество, дата создания, статус (активен, заблокирован) и дата удаления.</p><p>Итого, схема выглядит так:</p><p>Данного примера достаточно для того, чтобы рассмотреть ключевые моменты:</p><ul><li>Генерация первичных ключей (поле id)</li><li>Генерация опциональных полей (поле middle_name)</li><li>Генерация временных меток (поля created_at, deleted_at)</li><li>Генерация енамов (поле status, енам user_status)</li><li>Работа с soft-delete</li></ul><h2>Генерируем protobuf</h2><p>Для того, чтобы запустить db-exporter необходимо описать конфигурацию —делается это декларативно, в yaml-файле. db-exporter оперируют задачами, в которых описаны:</p><ul><li>Формат, в котором нужно выполнить генерацию. В нашем случае — это grpc-crud<br /></li></ul><ul><li>Директория, в которую сохранить файлы</li><li>Специфичные формату параметры (далее: спека задачи)</li></ul><p>Также важно не забыть указать подключение к базе данных. В нашем примере, используется PostgreSQL на 5432 порту. Для успешного запуска стоит убедиться, что БД запущена и в ней есть схема с таблицами.</p><p>Итого, конфигурация, описывающая перечисленные требования, выглядит следующим образом:</p><p>Сохраняем этот файл, как .db-exporter.yaml.</p><p>Далее запускаем инструмент, выполняя команду db-exporter и получаем отчет о проделанной работе — db-exporter сообщает о том, какие файлы были созданы и какой они имеют вес.</p><figure><img src="https://media.tproger.ru/user-uploads/133667/2025-11-10/8ccb11d3-2595-4782-95ef-d920d8f76a0c.png" alt="" /><figcaption>Результат выполнения db-exporter</figcaption></figure><h3>Разбираемся, что получили на выходе</h3><p>В результате выполнения команды был сгенерирован файл users.proto, в котором используется синтаксис соответствует proto3. Файл содержит:</p><ul><li><b>UsersService</b> с методами <i>List</i>, <i>Get</i>, <i>Delete</i>, <i>Undelete</i>, <i>Create</i>, <i>Patch</i></li><li>Сообщение <b>User</b>, отражающее таблицу users</li><li>Енам <b>UserStatus</b></li></ul><h4>Сообщение User и enum UserStatus</h4><p>Сообщение User отражает структуру таблицы users и имеет вид:</p><p>Что здесь видим?</p><ol><li>id<i> </i>- uuid'ы генерируются, как строки. Первичный ключ помечается, как OUTPUT_ONLY, говоря о том, что поле используется только для ответов.</li><li>name, email сгенерированы, как строки</li><li>Поля created_at, deleted_at обернуто в гугловый Timestamp<i><br /></i></li><li>Для статуса пользователя сгенерирован енам UserStatus</li></ol><p>UserStatus выглядит следующим образом</p><h4>Метод для получения списка пользователя</h4><p>Метод List принимает на вход ListUsersRequest и возвращает ListUsersResponse</p><p>Запрос включает в себя поле с массивом идентификаторов пользователей. db-exporter добавляет в тело запроса первичный ключ, если первичный ключ состоит из одного поля. Также в запросе присутствует флаг <i>show_deleted</i>, как того требует стандарт <a href="https://google.aip.dev/132">AIP-132</a>, при работе с сущностями, поддерживающими soft-delete: по умолчанию сервер возвращает список активных пользователей, например, используя sql-запрос с фильтром deleted_at is null.</p><p>По умолчанию db-exporter добавляет token-based пагинацию, описанную в <a href="https://google.aip.dev/158">AIP-158</a>. Такая пагинация удобна для межсервисного взаимодействия. Но если основной клиент вашего API — это фронтенд, то вероятнее всего, вам нужна офсетная пагинация. Ее можно включить, добавив в спеку задачи pagination: offset. Если пагинация уж совсем не требуется, то pagination: none.</p><p>В ответе же список пользователей и токен следующей страницы.</p><h4>Метод получения пользователя</h4><p>Стандарт <a href="https://google.aip.dev/131">по получению ресурса</a> описывает достаточную простую конструкцию — Метод Get принимает на вход GetUserRequest и отдает на выход сообщение User.</p><p>Тело запроса включает в себя поле id, так как оно является первичным ключом.</p><h4>Методы удаления и восстановления пользователя</h4><p>Стандарт <a href="https://google.aip.dev/164">AIP-164</a> гласит: мало того, что сущность удаляется методом <b>Delete</b>, так еще нужно и мочь ее восстанавливать с помощью метода <b>Undelete</b>, если таблица поддерживает soft-delete.</p><p>Поэтому в результате генерации мы получаем методы Delete и Undelete: db-exporter самостоятельно определяет поддержку soft-delete у таблиц, смотря на поля <i>deleted_at</i> и <i>delete_time</i>.</p><p>Метод <b>Delete</b> принимает на вход DeleteUserRequest и отдает на выход DeleteUserResponse. Метод <b>Undelete </b>принимает UndeleteUserRequest и возвращает восстановленный ресурс User.</p><p>Тела запросов также, как и для метода Get, содержат поле первичного ключа — id.</p><p>По умолчанию возвращается <i>google.protobuf.Empty</i>, как требуется в стандарте<i>. </i>Возможна генерация пустого сообщения<i> DeleteUserResponse </i>— для этого нужно добавить параметр в спеку:</p><h3>Методы создания и обновления пользователя</h3><p>По стандартам <a href="https://google.aip.dev/133">AIP-133</a> и <a href="https://google.aip.dev/134">AIP-134</a> методы<b> Create</b> и <b>Update</b> имеют похожие сигнатуры.</p><p>Тела запросов также схожи, включают в себя ресурс User и возвращают его обновленную версию.</p><p>По стандарту поле update_mask предполагается использовать для частичного обновления сущности. <b>FieldMask</b> содержит в себе список полей, которые необходимо обновить у сущности User.</p><h3>Добавляем HTTP пути к методам</h3><p>В gRPC есть полезная опция <i>google.api.http</i>, с помощью которой можно указать HTTP адрес для метода. Ее полезно использовать, если вы используете REST поверх gRPC сервисов — например, с помощью grpc-gateway.</p><p>Наверняка, мы хорошие разработчики и версионируем свой API: установим версию v1 в параметре path_prefix.</p><p>И получаем вот такой результат:</p><h2>Валидируем результат</h2><p>Теперь, когда у нас есть файл users.proto — важно проверить, что он корректен синтаксически. Для этого соберем go-клиент, используя утилиту protoc.</p><h3>Указываем Go пакет</h3><p>Выше мы обсуждали gRPC контракты без привязки к конкретному стеку. Ну что ж, время пришло!</p><p>Для генерации Go-клиента в .proto файле необходимо указать опцию <b>go_package</b>. Мы можем сами поправить .proto файл, но при частом использовании db-exporter это будет не так удобно, поэтому скажем экспортеру, какой пакет нам нужен. Для этого нужно указать опцию в спеке задачи .db-exporter.yaml:</p><p>Нам остается еще раз сгенерировать users.proto, используя уже знакомую команду db-exporter.</p><h3>Собираем зависимости</h3><p>Сгенерированный users.proto импортирует зависимости <i>google.api </i>для указания HTTP методов/путей, обязательности полей. Их можно скачать с GitHub <i>googleapis</i>: <a href="https://github.com/googleapis/googleapis/blob/master/google/api/http.proto">http.proto</a>, <a href="https://raw.githubusercontent.com/googleapis/googleapis/refs/heads/master/google/api/field_behavior.proto">field_behavior.proto</a> и <a href="https://github.com/googleapis/googleapis/blob/master/google/api/annotations.proto">annotations.proto</a>.</p><p>Скачать зависимости можем следующим скриптом:</p><p>Итого мы должны были организовать следующую структуру файлов:</p><p>Теперь запустим генерацию гошного кода:</p><p>В результате выполнения команды в наш проект добавились 2 новых файла:</p><ul><li>pkg/api/users.pb.go — структуры для ресурса, запросов и ответов</li><li>pkg/api/users_grpc.pb.go — rpc-сервис UserService и клиент к нему</li></ul><p><b>Вывод</b>: из сгенерированного db-экспортером .proto файла можно сгенерировать валидный програмнный код. Считаем проверку успешно выполненной</p><h2>Непрерывная генерация</h2><h3>Перезапись файлов</h3><p>Собранная нами конфигурация отлично подходит для «одноразовых генераций», но со временем, когда сервис обрастет новыми методами, использовать генератор будет неудобно из-за того, что он по умолчанию перезаписывает уже существующие файлы. Чтобы избежать такой ситуации, необходимо указать генератору, что мы не хотим перезаписывать файлы. Сделать это можно, добавив опцию <i>skip_exists</i>.</p><p>Теперь db-exporter не будет перезаписывать уже существующие файлы и будет генерировать только новые.</p><h3>Генерация лишних таблиц</h3><p>По умолчанию db-exporter генерирует файлы по всем таблицам из схемы БД. В проекте может десяток или десятки таблиц, не для всех из них нужна генерация CRUD-операций. Генератору можно передать список таблиц, по которым необходимо генерировать файлы.</p><p>Но править постоянно конфиг не очень удобно. Укажем переменную.</p><p>Теперь мы можем запускать генерацию по конкретным таблицам, например вот так:</p><p>Или обернуть это в Makefile:</p><p>Использовать эту конструкцию можно следующим образом:</p><h2>Что в итоге?</h2><p>В итоге мы собрали рабочую конфигурацию db-exporter, которая позволяет генерировать CRUD по схеме БД в валидный .proto файл, включая полезные опции: <i>google.api.field_behavior</i> и <i>google.api.http</i>. Собранную конфигурацию и необходимое окружение вы сможете найти по <a href="https://github.com/ArtARTs36/db-exporter/tree/master/examples/grpc-crud">этой ссылке</a>.</p><p>Надеюсь, этот пост был для вас полезным и поможет ускорить разработку крудов. Если у вас есть предложения по улучшению/расширению кодо-генератора, добро пожаловать в <a href="https://github.com/ArtARTs36/db-exporter">репозиторий</a>.</p><p>В репозитории вы также сможете найти примеры генерации диаграмм классов, mermaid, markdown и так далее.</p>]]></content:encoded>
    </item>
    <item>
      <title>Вышла Google Gemini 3 — апдейт, который в компании называют шагом к AGI</title>
      <link>https://tproger.ru/news/google-zapustila-gemini-3---apdejt--kotoryj-v-kompanii-nazyvayut-wagom-k-agi</link>
      <comments>https://tproger.ru/news/google-zapustila-gemini-3---apdejt--kotoryj-v-kompanii-nazyvayut-wagom-k-agi?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Булат Яббаров]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/google-zapustila-gemini-3---apdejt--kotoryj-v-kompanii-nazyvayut-wagom-k-agi</guid>
      <description><![CDATA[<p>Google представила Gemini 3 — новое поколение ИИ с усиленной мультимодальностью, логикой и агентностью, которое компания называет шагом к AGI</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/google-zapustila-gemini-3---apdejt--kotoryj-v-kompanii-nazyvayut-wagom-k-agi">Вышла Google Gemini 3 — апдейт, который в компании называют шагом к AGI</a>»</p>]]></description>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Git]]></category>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[Google]]></category>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[Искусственный интеллект]]></category>
      <category><![CDATA[GitHub]]></category>
      <category><![CDATA[JetBrains]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 19 Nov 2025 04:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p><b>Google</b> <a href="https://blog.google/products/gemini/gemini-3">представила</a> <b>Gemini 3</b> — новое поколение своей <b>флагманской модели</b>, которое в компании прямо называют «большим шагом по пути к AGI».</p><p>Модель уже встраивают почти во все ключевые продукты Google — <b>от поиска до инструментов для разработчиков</b>.</p><h2>Что такое Gemini 3</h2><p><b>Gemini 3</b> представляет из себя новое семейство моделей. Основным флагманом в нем выступает <b>Gemini 3 Pro</b>, а для сложных задач появится отдельный режим <b>Gemini 3 Deep Think</b>.</p><p>По сути, это эволюция сразу в трех направлениях:</p><ul><li><b>Мультимодальность</b> — текст, код, картинки, видео, аудио в одном стеке.</li><li><b>Reasoning</b> и <b>«глубокое мышление»</b> — лучше решает сложные задачи по науке, математике и планированию.</li><li><b>Агентность</b> — модель умеет не только отвечать, но и выполнять цепочки действий: работать с браузером, почтой, кодом.</li></ul><p>Google отдельно подчеркивает: при создании Gemini 3 авторы метили не в «просто чат для общения», а в «ИИ, который помогает доводить любую идею до реализации».</p><h2>Чем Gemini 3 отличается от 2.5</h2><p>По заявлениям Google, Gemini 3 Pro:</p><ul><li>заметно обгоняет Gemini 2.5 Pro в большинстве бенчмарков по математике, логике, точности фактов;</li><li>лучше понимает контекст и намерение — нужно меньше «танцев с промптами»;</li><li>умеет генерировать код для сложных визуализаций, интерфейсов и 3D-сцен;</li><li>работает как «thought partner» — пытается сокращать воду и говорить по делу, а не льстить.</li></ul><p>Отдельный режим <b>Gemini 3 Deep Think</b> дает еще больший прирост в задачах на логику и новизну, но пока доступен только безопасностным тестерам. Позже появится и у подписчиков Google AI Ultra.</p><figure><img src="https://media.tproger.ru/user-uploads/111041/2025-11-18/4d7a5a4f-b3bd-40d1-9ada-fa08436ba526.jpeg" alt="" /></figure><h2>Где уже можно попробовать</h2><p>Gemini 3 начинают раскатывать сразу «в масштабах Google»:</p><ul><li><b>Поиск (AI Mode в Search)</b> — генерируемые ответы, визуальные раскладки, интерактивные элементы, симуляции.</li><li><b>Приложение Gemini</b> — для обычных пользователей и подписчиков Google AI Pro/Ultra.</li><li><b>Для разработчиков:</b> Google AI Studio, Vertex AI, Gemini CLI, новый агентный IDE-платформер <b>Google Antigravity</b>.</li><li><b>Интеграции</b>: Cursor, GitHub, JetBrains, Replit и другие сторонние инструменты.</li></ul><h2>Google Antigravity: агент как напарник, а не просто советчик</h2><p>Отдельно Google показала <b>Antigravity</b> — «agent-first» платформу для разработки:</p><ul><li>агент получает доступ к редактору, терминалу и браузеру;</li><li>может сам планировать и выполнять end-to-end задачи (например, собрать приложение, проверить, запустить, поправить баги);</li><li>под капотом — Gemini 3 + специализированная модель для управления компьютером и модель для работы с картинками.</li></ul><p>Идея простая: разработчик формулирует цель, а не последовательность команд.</p><h2>Безопасность и «шаг к AGI»</h2><p>Google утверждает, что Gemini 3 — их «самая проверенная» и «самая безопасная» модель:</p><p>При этом в компании также заявляются: <b>Gemini 3 это крупный шаг к более общему интеллекту</b>, а не просто очередная версия чат-бота.</p>]]></content:encoded>
    </item>
    <item>
      <title>Представлен Chad IDE — смотри TikTok и свайпай Tinder, пока ИИ пишет код</title>
      <link>https://tproger.ru/news/predstavlen-chad-ide---smotri-tiktok-i-svajpaj-tinder--poka-ii-piwet-kod</link>
      <comments>https://tproger.ru/news/predstavlen-chad-ide---smotri-tiktok-i-svajpaj-tinder--poka-ii-piwet-kod?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Булат Яббаров]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/predstavlen-chad-ide---smotri-tiktok-i-svajpaj-tinder--poka-ii-piwet-kod</guid>
      <description><![CDATA[<p>Chad IDE — среда, где можно смотреть TikTok и свайпать Tinder, пока ИИ пишет код. Разработку без скуки авторы зовут новым форматом</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/predstavlen-chad-ide---smotri-tiktok-i-svajpaj-tinder--poka-ii-piwet-kod">Представлен Chad IDE — смотри TikTok и свайпай Tinder, пока ИИ пишет код</a>»</p>]]></description>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Git]]></category>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[GitHub]]></category>
      <category><![CDATA[Сервисы]]></category>
      <category><![CDATA[YouTube]]></category>
      <category><![CDATA[Игра]]></category>
      <category><![CDATA[TikTok]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 12 Nov 2025 13:11:02 GMT</pubDate>
      <content:encoded><![CDATA[<p>В сети <a href="https://www.cladlabs.ai/blog/introducing-clad-labs">набирает</a> популярность шуточная (или не очень) среда разработки <b>Chad IDE</b>. Авторы проекта позиционируют его как «первую в мире IDE, где скучать невозможно».</p><p>Пока нейросеть пишет код, программист может смотреть TikTok, листать Tinder или играть в мини-игры.</p><h2>Проблема, о которой никто не говорил</h2><p>Создатели Chad IDE заявляют, что современные инструменты вроде GitHub Copilot породили новую форму «кризиса продуктивности». Мол пока ИИ пишет код, разработчик вынужден просто ждать.</p><p>Исследование команды показало, что <b>87% инженеров в этот момент тянутся к телефону</b>. И, по данным самих авторов, теряют по 5–10 минут на пролистывание соцсетей после каждой генерации.</p><p>Так появился концепт «engagement-driven development» — разработки без скуки.</p><h2>Как это работает</h2><p>Chad IDE добавляет в окно разработки развлечения «с пользой для фокуса». Ключевая идея — не дать разработчику покинуть IDE, но при этом удержать внимание в контексте проекта.</p><h3>Основные функции</h3><ul><li><b>Active Generation Monitoring</b> — визуализирует процесс генерации кода, добавляя анимации и контекстные подсказки.</li><li><b>Micro-Interactions</b> — легкие интерактивные элементы, которые не мешают, но отвлекают от телефона.</li><li><b>Context Preservation</b> — IDE «напоминает», над чем вы работаете, даже если вы смотрите видео.</li></ul><h2>Интеграции</h2><p>Chad IDE поддерживает сервисы, которые обычно отвлекают. Теперь они используются «для концентрации»:</p><ul><li><b>TikTok и *Instagram Reels</b> — вертикальные видео прямо в редакторе, автопауза при фокусе на коде.</li><li><b>YouTube Shorts</b> — подборка видео о программировании.</li><li><b>Tinder</b> — свайпы с «кодовыми» айсбрейкерами для разработчиков.</li><li><b>Мини-игры</b> — казуальные игры во время компиляции.</li></ul><p>Авторы уверяют, что эти функции не мешают, а наоборот — предотвращают контекстные переключения.</p><h2>Эффект: «меньше скуки — больше кода»</h2><p>По данным внутреннего тестирования:</p><ul><li>количество отвлечений снизилось на <b>43%</b>;</li><li>время, потерянное на телефон, сократилось на <b>2,3 часа в день</b>;</li><li>продолжительность «состояния потока» выросла на <b>67%</b>;</li><li>а раздражение из-за долгих генераций — на <b>89% меньше</b>.</li></ul><p>Один из тестировщиков из *Meta назвал IDE «фиджет-спиннером для мозга, который держит тебя в контексте кода».</p><p>*Компания Meta и ее продукты признаны экстремистскими, их деятельность запрещена на территории РФ</p>]]></content:encoded>
    </item>
    <item>
      <title>Microsoft представила Visual Studio 2026: 5000 исправлений и 300 новых функций. Разбираемся, что нового</title>
      <link>https://tproger.ru/news/microsoft-predstavila-visual-studio-2026--5000-ispravlenij-i-300-novyh-funkcij--razbiraemsya--chto-novogo</link>
      <comments>https://tproger.ru/news/microsoft-predstavila-visual-studio-2026--5000-ispravlenij-i-300-novyh-funkcij--razbiraemsya--chto-novogo?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Булат Яббаров]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/microsoft-predstavila-visual-studio-2026--5000-ispravlenij-i-300-novyh-funkcij--razbiraemsya--chto-novogo</guid>
      <description><![CDATA[<p>Microsoft выпустила Visual Studio 2026 и .NET 10: 5000 исправлений, 300 функций, новый Fluent UI, интеграция Copilot и рост скорости</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/microsoft-predstavila-visual-studio-2026--5000-ispravlenij-i-300-novyh-funkcij--razbiraemsya--chto-novogo">Microsoft представила Visual Studio 2026: 5000 исправлений и 300 новых функций. Разбираемся, что нового</a>»</p>]]></description>
      <category><![CDATA[Производительность]]></category>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[.NET]]></category>
      <category><![CDATA[Microsoft]]></category>
      <category><![CDATA[GitHub]]></category>
      <category><![CDATA[Дизайн]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 12 Nov 2025 04:07:59 GMT</pubDate>
      <content:encoded><![CDATA[<p><b>Microsoft</b> официально <a href="https://visualstudio.microsoft.com/downloads/">выпустила</a> <b>Visual Studio 2026</b> — крупнейшее обновление IDE за последние годы.</p><p>Релиз вышел одновременно с <b>.NET 10</b>, который стал версией с долгосрочной поддержкой (LTS).</p><h2>Что нового в Visual Studio 2026</h2><p>По данным Microsoft, в новую версию вошло <b>более 300 новых функций и 5000 исправлений ошибок</b>, собранных по запросам сообщества. IDE получила <b>обновленный дизайн на базе Fluent UI </b>с 11 новыми темами и улучшенной производительностью.</p><p>Компания заявляет, что <b>время загрузки проектов и зависания интерфейса сократились более чем на 50%</b>, а общая отзывчивость среды разработки заметно выросла.</p><p>Главные изменения:</p><ul><li>интеграция <b>GitHub Copilot</b> во все части среды разработки;</li><li>ускоренное открытие <b>крупных проектов</b>;</li><li><b>переработанная система обновлений</b> — теперь IDE обновляется отдельно от инструментов сборки;</li><li>полная совместимость с <b>более чем 4000 расширениями</b> от Visual Studio 2022;</li><li>поддержка новых инструментов <b>для анализа кода</b> и <b>тестирования</b>.</li></ul><h2>Отдельное обновление инструментов</h2><p>Одно из самых ожидаемых нововведений — <b>развязка Visual Studio и build tools</b>.</p><p>Раньше обновление IDE приводило к изменению инструментов сборки и могло ломать рабочие процессы. Теперь разработчики могут получать ежемесячные апдейты Visual Studio с новыми функциями, не затрагивая цепочку сборки.</p><h2>Релиз .NET 10</h2><p>Одновременно с IDE <a href="https://get.dot.net/10">вышел</a> <b>.NET 10</b> — LTS-релиз, который будет поддерживаться <b>до 10 ноября 2028 года</b>.</p><p>Microsoft называет его самым производительным за всю историю платформы: оптимизации коснулись рантайма, компиляции, языков и облачных нагрузок.</p><p>Компания рекомендует разработчикам как можно скорее перейти на новую версию, особенно для рабочих приложений. В процессе миграции можно использовать <b>GitHub Copilot</b>, который помогает адаптировать существующие проекты под .NET 10.</p><h2>Почему это важно</h2><p><b>Visual Studio 2026</b> делает ставку на <b>скорость, стабильность и интеграцию с ИИ</b>.</p><p>Microsoft позиционирует релиз как «инструмент, который не просто помогает писать код, а сам становится частью команды разработчиков».</p>]]></content:encoded>
    </item>
    <item>
      <title>Microsoft раскрыла планы по интеграции ИИ в Visual Studio — впереди агенты и GPT-5 Codex</title>
      <link>https://tproger.ru/news/microsoft-raskryla-plany-po-integracii-ii-v-visual-studio---vperedi-agenty-i-gpt-5-codex</link>
      <comments>https://tproger.ru/news/microsoft-raskryla-plany-po-integracii-ii-v-visual-studio---vperedi-agenty-i-gpt-5-codex?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Булат Яббаров]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/microsoft-raskryla-plany-po-integracii-ii-v-visual-studio---vperedi-agenty-i-gpt-5-codex</guid>
      <description><![CDATA[<p>Microsoft готовит ИИ-революцию в Visual Studio: агентный режим, чат с памятью, поддержка MCP и новая модель GPT-5 Codex для кода</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/microsoft-raskryla-plany-po-integracii-ii-v-visual-studio---vperedi-agenty-i-gpt-5-codex">Microsoft раскрыла планы по интеграции ИИ в Visual Studio — впереди агенты и GPT-5 Codex</a>»</p>]]></description>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[Искусственный интеллект]]></category>
      <category><![CDATA[Microsoft]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[OpenAI]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 06 Nov 2025 05:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Microsoft <a href="https://devblogs.microsoft.com/visualstudio/roadmap-for-ai-in-visual-studio-november/">представила</a> <b>дорожную карту развития ИИ-возможностей Visual Studio</b>.</p><p>В ближайшие месяцы IDE получит поддержку <b>многоагентной работы</b>, улучшенный чат и доступ к новой модели <b>GPT-5 Codex</b>.</p><p>Компания отмечает, что это <b>не гарантированный план релизов</b>. Скорее он дает представление о том, как будет развиваться ИИ-экосистема Visual Studio.</p><h2>Что появится в ближайшее время</h2><h3>Агентный режим и кастомные агенты</h3><p>Microsoft тестирует возможность создавать собственных агентов — например, <b>тестового</b> и <b>отладочного</b>. Также рассматривается запуск <b>нескольких Visual Studio Agents одновременно</b>, чтобы выполнять параллельные задачи.</p><h3>Режим чата с памятью и slash-командами</h3><p>Планируется поддержка /команд для вызова промптов и управления чатами, улучшение «памяти» (глобальные инструкции пользователя) и функция <b>исторической сводки переписки</b> — чтобы возвращаться к старым веткам без потери контекста.</p><h3>Интеграция с MCP</h3><p>Visual Studio получит полную поддержку <b>Model Context Protocol</b>, который позволит подключать собственный dev-стек и MCP-серверы безопасно.</p><p>Среди улучшений — <b>оптимизация производительности</b>, белые списки серверов и единый UX для MCP-сервисов.</p><h2>Модели нового поколения</h2><p>Microsoft также работает над функцией <b>Auto Model</b>, которая позволит IDE самостоятельно выбирать оптимальную модель под задачу.</p><p>Но главное обновление — интеграция <b>GPT-5 Codex</b>, которая будет отвечать за контекстные подсказки и автодополнение кода.</p><p>В компании также пообещали, что устаревающие модели будут «мягко» выводиться из обращения, без резких отключений.</p>]]></content:encoded>
    </item>
    <item>
      <title>OpenAI массово нанимает «super junior» — джунов без опыта разработки, но с навыками работы с ИИ</title>
      <link>https://tproger.ru/news/openai-massovo-nanimaet--super-junior----dzhunov-bez-opyta-razrabotki--no-s-navykami-raboty-s-ii</link>
      <comments>https://tproger.ru/news/openai-massovo-nanimaet--super-junior----dzhunov-bez-opyta-razrabotki--no-s-navykami-raboty-s-ii?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Булат Яббаров]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/openai-massovo-nanimaet--super-junior----dzhunov-bez-opyta-razrabotki--no-s-navykami-raboty-s-ii</guid>
      <description><![CDATA[<p>OpenAI нанимает «super junior» — инженеров без опыта, но с навыками работы с ИИ. Они кодят через модели и ускоряют старших коллег</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/openai-massovo-nanimaet--super-junior----dzhunov-bez-opyta-razrabotki--no-s-navykami-raboty-s-ii">OpenAI массово нанимает «super junior» — джунов без опыта разработки, но с навыками работы с ИИ</a>»</p>]]></description>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Git]]></category>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[Искусственный интеллект]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[OpenAI]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 03 Nov 2025 06:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><b>OpenAI меняет стратегию найма инженеров</b>: компания все чаще берет молодых специалистов без классического опыта в программировании, но с нативными навыками работы с искусственным интеллектом.</p><p>Об этом <a href="https://newsletter.pragmaticengineer.com/p/san-francisco-is-back">рассказал</a> глава прикладного и инженерного направлений ChatGPT <b>Сулман Чоудри </b>в беседе с <b>Гергели Оросом</b>, автором известной техрассылки <i>The Pragmatic Engineer</i>.</p><p>По словам Ороса, в OpenAI активно развивается новая модель — <b>связка «super senior + super junior»</b>. Опытный инженер отвечает за архитектуру и стратегические решения, а «супер-джун» берет на себя скорость и гибкость. Он использует ИИ-инструменты на уровне, недоступном старшим коллегам.</p><blockquote><i>«Один из таких джуниоров обиделся, когда его спросили, не помог ли ему Codex. Для него это слишком просто. Он использует сразу несколько экземпляров Codex, которые общаются между собой и выполняют разные части задачи»</i>, — рассказывает Орос.</blockquote><p>Эти специалисты — представители нового поколения <b>«AI-native» инженеров</b>, для которых взаимодействие с языковыми моделями — базовый навык, сродни владению Git или терминалом.</p><p>Они умеют быстро запускать несколько агентов, делить задачи между моделями и интегрировать результаты в код.</p><h2>Программы OpenAI для ранней карьеры</h2><p>Все это логично вписывается в собственные инициативы OpenAI — <b>Residency</b> и <b>Emerging Talent</b>. Там прямо говорится, что компания берет людей «на переходе» между non-tech и IT, если они способны быстро осваивать инженерные принципы с помощью ИИ.</p><p><i>«Мы ищем людей, которые думают, как инженеры, даже если у них нет традиционного опыта разработки»</i>, — говорится в описании программ.</p><h2>Контраст с рынком</h2><p>На общем фоне это решение выглядит почти парадоксально. 2025-й стал годом, когда большинство IT-компаний <b>сократили junior-позиции</b>: автоматизация и рост LLM-ассистентов сделали базовую разработку избыточной. Но OpenAI, наоборот, делает ставку на специалистов, выросших в новой парадигме — тех, кто <b>умеет кодить через ИИ, а не вместо него</b>.</p><p>Эксперты называют это возможным <b>сдвигом в отрасли</b>: если стратегия OpenAI сработает, за ней могут последовать другие компании, начав формировать команды, где ключевым навыком станет не знание конкретного языка, а <b>умение мыслить и строить системы в симбиозе с моделями</b>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Google пообещала, что до конца года все смогут вайб-кодить видеоигры с помощью ИИ</title>
      <link>https://tproger.ru/news/google-poobeshhala--chto-do-konca-goda-vse-smogut-vajb-kodit-videoigry-s-pomoshhyu-ii</link>
      <comments>https://tproger.ru/news/google-poobeshhala--chto-do-konca-goda-vse-smogut-vajb-kodit-videoigry-s-pomoshhyu-ii?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Булат Яббаров]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/google-poobeshhala--chto-do-konca-goda-vse-smogut-vajb-kodit-videoigry-s-pomoshhyu-ii</guid>
      <description><![CDATA[<p>Google обещает, что до конца 2025 года любой сможет вайб-кодить видеоигры с ИИ — создавать их словами без единой строчки кода</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/google-poobeshhala--chto-do-konca-goda-vse-smogut-vajb-kodit-videoigry-s-pomoshhyu-ii">Google пообещала, что до конца года все смогут вайб-кодить видеоигры с помощью ИИ</a>»</p>]]></description>
      <category><![CDATA[C++]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[C#]]></category>
      <category><![CDATA[Google]]></category>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[Искусственный интеллект]]></category>
      <category><![CDATA[Игра]]></category>
      <category><![CDATA[Приложение]]></category>
      <category><![CDATA[Библиотеки]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 28 Oct 2025 06:00:02 GMT</pubDate>
      <content:encoded><![CDATA[<p>Google <a href="https://www.bleepingcomputer.com/news/google/google-says-everyone-will-be-able-to-vibe-code-video-games/">заявила</a>, что уже к концу 2025 года любой пользователь сможет вайб-кодить собственные видеоигры — буквально создавать их, просто описывая идею словами.</p><p>Об этом рассказал Логан Килпатрик, продакт-лид Google AI Studio, в посте на X.</p><h2>Что такое вайб-кодинг</h2><p>Термин vibe coding (от англ. vibe — «ощущение», «настроение») появился в 2024 году и описывает подход к программированию, где разработчик не пишет код вручную, а общается с ИИ в свободной форме, задавая лишь общие направления: «сделай RPG про кота-самурая», «добавь погодные эффекты», «пусть враги становятся умнее».</p><p>Пока этот подход работал только с простыми проектами вроде сайтов и мобильных приложений, но Google обещает вывести его на новый уровень.</p><h2>Что умеет новый AI Studio</h2><p>По словам компании, обновленный <b>Google AI Studio</b> «понимает задачу и автоматически подбирает нужные модели, API и инструменты».</p><p>Например, если пользователь захочет сделать приложение, генерирующее изображения по промтам, AI Studio сам подключит соответствующий API (в данном случае — Nano Banana API) и настроит всю инфраструктуру.</p><blockquote><i>«Мы сделали процесс создания мощных, функциональных и ИИ-дополненных приложений максимально простым»,</i> — говорится в блоге Google.</blockquote><p>Теперь платформа сможет не только генерировать код, но и <b>автоматически подключать нужные сервисы, базы данных и библиотеки</b>, превращая процесс в полноценный гибрид no-code подхода с вайб-кодингом.</p><h2>Теперь и для игр</h2><p>Килпатрик уточнил, что уже к концу года пользователи смогут вайб-кодить не только веб-приложения, но и простенькие видеоигры.</p><blockquote><i>«Это откроет путь для новых 100 млн разработчиков. Многие мечтают сделать игру, но спотыкаются о C++, C# и Unreal Engine. Теперь они смогут создавать истории, персонажей и геймплей — без единой строчки кода»,</i> — написал он.</blockquote><p>Разумеется, до уровня <i>Civilization</i> или <i>Baldur’s Gate</i> дело не дойдет. По словам Килпатрика, речь идет о «небольших проектах для друзей», где игроки сами управляют сюжетом и механикой.</p><h2>Скепсис и ожидания</h2><p>Пока даже самые продвинутые ИИ-инструменты едва справляются с генерацией простых 2D-игр вроде <i>Wordle</i> или <i>Flappy Bird</i>.</p><p>Поэтому эксперты воспринимают обещания Google с осторожностью — для по-настоящему автономного вайб-кодинга нужно, чтобы ИИ умел проектировать архитектуру, писать оптимизированный код и тестировать его без участия человека.</p><p>Тем не менее, Google, по слухам, готовит к релизу <b>Gemini 3.0</b>, который может радикально улучшить креативные и кодогенерационные возможности.</p><p>Если планы компании сбудутся, то к концу года видеоигра мечты может начаться не с кода, а с фразы:</p><blockquote><i>«Сделай мне космический шутер, где коты сражаются против пылесосов».</i></blockquote>]]></content:encoded>
    </item>
    <item>
      <title>Лишь в 1% случаев разработчики используют дебаг в VS Code. В 99% — console.log()</title>
      <link>https://tproger.ru/news/issledovanie--v-1--sluchaev-razrabotchiki-ispolzuyut-otladku-vs-code--v-99----console-log--</link>
      <comments>https://tproger.ru/news/issledovanie--v-1--sluchaev-razrabotchiki-ispolzuyut-otladku-vs-code--v-99----console-log--?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Булат Яббаров]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/issledovanie--v-1--sluchaev-razrabotchiki-ispolzuyut-otladku-vs-code--v-99----console-log--</guid>
      <description><![CDATA[<p>Исследование показало: 99% разработчиков отлаживают код через console.log, а встроенный дебаггер VS Code используют лишь 1% времени</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/issledovanie--v-1--sluchaev-razrabotchiki-ispolzuyut-otladku-vs-code--v-99----console-log--">Лишь в 1% случаев разработчики используют дебаг в VS Code. В 99% — console.log()</a>»</p>]]></description>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[Рефакторинг]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 24 Oct 2025 12:56:08 GMT</pubDate>
      <content:encoded><![CDATA[<p>Как <a href="https://floustate.com/blog/developers-spend-1-percent-time-vscode-debugger">показало</a> исследование платформы <b>FlouState</b>, разработчики почти не пользуются встроенным отладчиком в Visual Studio Code. Для этого эксперты проанализировали <b>11 805 сессий 68 программистов</b> за три месяца.</p><p>Среднее время активного использования встроенного дебаггера — <b>1,4% от общего времени кодинга</b>. Это примерно <b>13 минут в месяц</b>.</p><p>В то же время медианное значение и того меньше — всего <b>0 минут</b>. Это означает: <i>большинство разработчиков не открывали отладчик вообще</i>.</p><h2>Console.log правит миром</h2><p>Как выяснилось, в 75% случаев разработчики никогда не ставили брейкпоинты, предпочитая старый-добрый console.log().</p><p>Остальные использовали отладчик лишь эпизодически: 10% — менее одного процента времени, и только 15% — чаще, чем раз в месяц.</p><p>В среднем структура работы выглядела так:</p><ul><li>46,2% времени — написание кода, включая «отладку логами»;</li><li>28,7% — чтение и анализ чужого кода и стектрейсов;</li><li>23,7% — рефакторинг и удаление отладочных вставок;</li><li>1,4% — работа в интерфейсе отладчика VS Code.</li></ul><h2>Почему так происходит</h2><p>Исследователи называют феномен «психологией мгновенного отклика»:</p><p><i>Сonsole.log("here")</i> дает результат через 3 секунды. Настроить дебаггер — 10 минут. Мозг выбирает дофамин, а не дисциплину.</p><p>Среди других причин — привычка (<i>«мы изучали console.log с первого дня»</i>), кажущаяся сложность интерфейса и эффект «еще одной строчки лога». Это когда проще добавить еще один console.log, чем переключаться в режим пошаговой отладки.</p><h2>Что это значит</h2><p>Исследование не утверждает, что разработчики не отлаживают код — просто <b>делают они это вручную</b>. В среднем около 15–20% рабочего времени уходит на расстановку логов, чтение вывода и перезапуск приложения.</p><p>Авторы FlouState считают, что освоение встроенного дебаггера могло бы сократить этот цикл в разы. Но для большинства программистов console.log() остается самым надежным и быстрым инструментом.</p><p><i>«VS Code имеет отладчик мирового уровня. Мы просто им не пользуемся», — подытожил автор исследования.</i></p>]]></content:encoded>
    </item>
    <item>
      <title>Со-основатель OpenAI Карпати: автономные ИИ-программисты — мечта, а не реальность</title>
      <link>https://tproger.ru/news/so-osnovatel-openai-karpati--avtonomnye-ii-programmisty---mechta--a-ne-realnost</link>
      <comments>https://tproger.ru/news/so-osnovatel-openai-karpati--avtonomnye-ii-programmisty---mechta--a-ne-realnost?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Булат Яббаров]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/so-osnovatel-openai-karpati--avtonomnye-ii-programmisty---mechta--a-ne-realnost</guid>
      <description><![CDATA[<p>Андрей Карпати заявил, что автономные ИИ-программисты пока нереальны: агентам не хватает интеллекта, памяти и понимания контекста</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/so-osnovatel-openai-karpati--avtonomnye-ii-programmisty---mechta--a-ne-realnost">Со-основатель OpenAI Карпати: автономные ИИ-программисты — мечта, а не реальность</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[Искусственный интеллект]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[Tesla]]></category>
      <category><![CDATA[OpenAI]]></category>
      <category><![CDATA[Стартапы]]></category>
      <category><![CDATA[Бизнес]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 20 Oct 2025 04:00:02 GMT</pubDate>
      <content:encoded><![CDATA[<p>Со-основатель OpenAI и бывший директор Tesla по ИИ <b>Андрей Карпати</b>, <a href="https://www.businessinsider.com/andrej-karpathy-ai-agents-timelines-openai-2025-10">заявил</a>, что <b>автономные ИИ-программисты пока далеки от реальности</b>.</p><p>В подкасте <i>Dwarkesh Podcast</i> он назвал идею полностью независимых ИИ-агентов «мечтой, но не рабочей технологией».</p><blockquote>Они просто не работают. Им не хватает интеллекта, мультимодальности, способности пользоваться компьютером. У них нет памяти, нет постоянного обучения. Они когнитивно ограничены — это пока не работает.</blockquote><p>По его оценке, <b>на решение всех этих проблем уйдет около 10 лет</b>.</p><h2>Переоцененные «агенты»</h2><p>ИИ-агенты стали главным трендом 2025 года: инвесторы называют его «годом агентов», а стартапы обещают, что боты смогут самостоятельно писать код, управлять системами и даже взаимодействовать с людьми без вмешательства пользователя.</p><p>Но Карпати считает, что индустрия <b>перепрыгнула через собственные возможности</b>. В посте на X он уточнил:</p><blockquote>Индустрия живет в будущем, где полностью автономные ИИ создают код параллельно и люди больше не нужны. Но я не хочу жить в таком будущем.</blockquote><h2>Вместо замены — сотрудничество</h2><p>Карпати выступает за <b>совместную работу человека и ИИ</b>, а не за полную автоматизацию.</p><blockquote>Я хочу, чтобы ИИ подтягивал документацию API, проверял корректность, спрашивал, если не уверен. Чтобы я учился вместе с ним, а не просто получал гору кода, который «вроде работает».</blockquote><p>Главная угроза, по мнению инженера, заключается в том, что при попытке «исключить человека из цикла», мир рискует утонуть в <b>AI slop</b> — некачественном контенте и ошибочном коде, генерируемом ИИ без контроля.</p><h2>Карпати — не скептик, но реалист</h2><p>Несмотря на критику, Карпати подчеркивает, что <b>остается оптимистом</b>. Его прогнозы просто «в 5–10 раз осторожнее, чем у типичного участника ИИ-вечеринки в Сан-Франциско».</p><p>Эксперты соглашаются: автономные агенты пока не способны стабильно выполнять даже серию простых действий. По оценкам специалистов <b>ScaleAI</b>, при пяти последовательных шагах вероятность безошибочного выполнения всех действий не превышает <b>32%</b>.</p><p>Так что мечта большого бизнеса о полностью автономных «ИИ-разработчиках» пока остается именно мечтой.</p>]]></content:encoded>
    </item>
    <item>
      <title>Топ 5 ИИ-ассистентов для IDE, доступных российским разработчикам</title>
      <link>https://tproger.ru/articles/top-5-ii-assistentov-dlya-ide--dostupnyh-rossijskim-razrabotchikam</link>
      <comments>https://tproger.ru/articles/top-5-ii-assistentov-dlya-ide--dostupnyh-rossijskim-razrabotchikam?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Татьяна Жукова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/top-5-ii-assistentov-dlya-ide--dostupnyh-rossijskim-razrabotchikam</guid>
      <description><![CDATA[<p>Топ 5 ИИ-ассистентов для IDE, доступных в России: Koda, Qodo, GigaCode и другие. Сравниваем стоимость, поддержку JetBrains/VS Code, агентный режим и оплату. Выберите лучший AI-помощник для кода без VPN и с российской картой.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/top-5-ii-assistentov-dlya-ide--dostupnyh-rossijskim-razrabotchikam">Топ 5 ИИ-ассистентов для IDE, доступных российским разработчикам</a>»</p>]]></description>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Git]]></category>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[Искусственный интеллект]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[GitHub]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[Сервисы]]></category>
      <category><![CDATA[Бизнес]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 08 Oct 2025 14:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>По данным <a href="https://github.blog/2023-06-13-survey-reveals-ais-impact-on-the-developer-experience/">исследований</a> 2022–2023 годов, около 80 % разработчиков уже используют искусственный интеллект для написания кода. Сейчас на дворе 2025, и многое изменилось.</p><p>Если 2022-й можно назвать годом «большого взрыва» ИИ — с выходом ChatGPT и последовавшей волной хайпа, — то 2025-й ощущается как время поиска ниш и экспериментов. <a href="https://itspeaker.ru/news/ispolzovanie-ii-razrabotchikami-vyroslo-v-58-raz/">Разработчики пробуют ИИ</a> не только для генерации кода, но и для отладки, анализа ошибок, генерации документации и автоматизации рабочих процессов.</p><p>Рынок ИИ-помощников для разработчиков насыщен: от глобальных решений вроде GitHub Copilot, Cursor и Windsurf до локальных стартапов. Но, по известным причинам, многие западные инструменты сегодня недоступны российским разработчикам или требуют сложных обходных маневров.</p><p>В этой статье посмотрим, какие ИИ-помощники реально работают без VPN, поддерживают российские способы оплаты и достойно конкурируют с западными аналогами.</p><h2>Как будем сравнивать</h2><p>Чтобы сравнение было честным и полезным, определим критерии заранее:</p><ul><li>Доступность без VPN. Инструмент должен открываться и работать без «танцев с бубном». VPN не только неудобен, но и может быть нежелателен на рабочем месте.</li><li>Стоимость и оплата картой. Возможность оплатить подписку российской картой или через локальные платежные сервисы — важный критерий. Отличный ИИ, к которому нельзя получить доступ легально, пользы не принесет.</li><li>Поддерживаемые IDE. Важно, чтобы помощник интегрировался с популярными средами: JetBrains IDE (IntelliJ IDEA, PyCharm, и т.д), VS Code или хотя бы имел CLI для терминала.</li><li>Режимы работы. Не только автодополнение кода, но и полноценный «агентный режим»: умеет анализировать проект, предлагать решения, выполнять несколько шагов подряд (например, найти баг → предложить фикс → сгенерировать тест).</li><li>Поддержка русского языка. Разработчикам важно писать запросы и получать ответы на родном языке, особенно при обсуждении сложных ошибок или бизнес-логики.</li><li>Поддержка языков программирования. Минимальный набор: Java, Kotlin, Python, JavaScript/TypeScript, SQL. Чем шире поддержка, тем лучше для команд с разносторонним стеком.</li><li>Выбор моделей. Хорошо, если есть возможность выбрать между проприетарными (GPT-4, Claude, Gemini) и локальными моделями — для приватности и on-premise сценариев.</li></ul><h2>GigaCode</h2><p>Пожалуй, сегодня это самый популярный ИИ-ассистент для разработчиков в России.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-10-08/27b4de20-a2d8-480d-bf70-8a72ba33e5d3.png" alt="" /></figure><p>Сильные стороны:</p><ul><li>Поддерживает разные режимы code completion — от автодополнения одной строки до генерации целой функции.</li><li>Есть режим чата для диалога с моделью.</li><li>Работает почти везде: JetBrains IDE (и их российские аналоги — GigaIDE, OpenIDE), VS Code и даже Jupyter Notebook.</li></ul><p>Но дальше начинаются нюансы. GigaCode крепко завязан на экосистеме Сбера:</p><ul><li>Просто скачать и начать пользоваться не выйдет — нужна регистрация через GitVerse.</li><li>Никакого выбора моделей: какая именно работает под капотом — загадка, а свою подключить нельзя.</li><li>Агентного режима нет совсем — а в 2025-м это уже must-have. Сейчас разработчики привыкли запускать агента решать задачу и параллельно делать что-то другое (или листать рилсы, не будем лукавить 😏).</li></ul><p>В сравнении с западными аналогами GigaCode ощущается более ограниченным. Отсутствие агентного режима и возможности выбора моделей заметно сдерживает потенциал инструмента. Надеемся, что со временем продукт станет гибче и откроет больше возможностей пользователям.</p><p><b>Попробовать <a href="https://gigacode.ru">GigaCode</a>.</b></p><h2>Yandex SourceCraft Code Assistant</h2><p>Ассистент от Яндекса пока менее популярен, чем решение от Сбера, и по функциональности особых сюрпризов не предлагает.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-10-08/1e9884fa-cd21-4d91-a1b2-8a9bc521f6ea.png" alt="" /></figure><p>Плюсы:</p><ul><li>Нет обязательной регистрации — скачал и пользуешься. Это приятно.</li><li>Поддерживаются те же IDE, что и у GigaCode, кроме Jupyter Notebook.</li></ul><p>Минусы (всё те же):</p><ul><li>Нет агентного режима</li><li>Нет выбора моделей; непонятно, какая модель работает внутри.</li></ul><p>Иными словами, SourceCraft выглядит как более «легковесная» альтернатива GigaCode — без лишних барьеров при установке, но и без прорывных фич.</p><p><i>UPD: Пока мы писали эту статью, яндекс успел выпустить своего агента. Полноценно потыкать его не удалось, но здорово, что инструмент развивается</i>.</p><p><b>Попробовать <a href="https://sourcecraft.dev/portal/code-assistant/">Code Assistant</a> от Яндекс.</b></p><h2>Qodo Gen (ранее Codium)</h2><p>Пока готовил материал, удивился: не все западные аналоги в России мертвы. Некоторые работают, хоть оплатить их официально и нельзя. Qodo — как раз из таких.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-10-08/2d6b1757-d89b-4f3d-95e4-721d6d78d868.png" alt="" /></figure><p>По сравнению с GigaCode и SourceCraft это уже совсем другой уровень. Qodo — часть целого набора инструментов для разработчиков: ревью кода, тестирование, работа с Git и многое другое.</p><p>Что понравилось:</p><ul><li>Поддерживает все популярные IDE, включая JetBrains, VS Code и другие.</li><li>Отличный UX — работать приятно.</li><li>Агентный режим есть.</li><li>Поддержка code completion, чата и даже режима планирования задач — редкая фича.</li><li>Можно выбирать контекст и подключать MCP-тулы.</li><li>Доступны современные, мощные модели.</li></ul><p>Что не понравилось:</p><ul><li>Локальную модель подключить нельзя.</li><li>Бесплатный лимит смешной — всего 75 токенов в месяц. При активной работе этого хватает на пару дней, а потом... карета превращается в тыкву.</li></ul><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-10-08/d879ab31-e91b-4456-bf01-b56acdaa69ae.png" alt="" /></figure><p>Qodo оставляет приятное впечатление – ощущается как взрослый, продуманный инструмент. Жаль, что его полноценно использовать из России пока проблематично.</p><p><b>Попробовать <a href="https://www.qodo.ai/products/qodo-gen/">Qodo Gen</a>.</b></p><h2>Cursor</h2><p>Обойти Cursor в обзоре ИИ-ассистентов почти невозможно. Про него говорят буквально все, и удивительно, что его название ещё не стало нарицательным для любого AI-помощника. Скачать Cursor можно без VPN — сайт доступен. А вот с оплатой уже не так просто.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-10-08/9d619cab-ad0e-40b9-8112-123a20c20f04.png" alt="" /></figure><p>Cursor — это отдельная IDE на базе VS Code со встроенным ИИ. Для кого-то это плюс: полноценная среда с ассистентом «из коробки». Для меня — скорее минус. Хочется добавить ИИ в привычную IDE, а не пересаживаться на новую. Тем более,  мир разработчиков не ограничивается одним VS Code. В JetBrains IDE, GigaIDE или OpenIDE Cursor вы не установите. Поэтому его уместность в таком обзоре для меня под вопросом, но раз все о нём говорят — упомянуть стоит.</p><p>Главная фишка — Rules. Можно задать собственные правила генерации кода: стиль, форматирование, комментарии, даже требование писать тесты. Если настраивать лень, есть готовые наборы. Это логично: Cursor позиционируется как полноценная AI IDE, а не просто плагин. Хотя, честно говоря, такие «профили правил», на мой взгляд, было бы полезно видеть и в других инструментах.</p><p>Из обязательного набора: агентный режим, поддержка MCP-тулов и широкий выбор моделей.</p><p><b>Попробовать <a href="https://cursor.com">Cursor</a>.</b></p><h2>Koda</h2><p>Ещё один ассистент, который работает без VPN и сейчас полностью бесплатен. Это не отдельная IDE, как Cursor, а расширение к уже установленным средам. На данный момент плагин доступен в VS Code, для JetBrains IDE и их российских аналогов — GigaIDE и OpenIDE, обещают сделать в ближайшее время.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-10-08/2a789245-5d1d-48bc-a92f-ec9a3f2b5515.png" alt="" /></figure><p>На старте дают 1 000 бесплатных токенов для топовых зарубежных моделей — заметно щедрее, чем, например, у Qoda (75 токенов). Когда лимит закончится, остаются доступными бесплатные модели, так что работа не прервётся.</p><p>Русский язык поддерживается полноценно: можно формулировать запросы, обсуждать бизнес-логику и разбирать ошибки без переключения на английский. На лендингах GigaCode и SourceCraft Code Assistant явного акцента на это не видно. Возможно, это действительно не так важно?</p><p>Есть агентный режим — редкость среди российских решений. Ассистент умеет анализировать проект пошагово и выполнять серию действий, а не только дописывать код или отвечать в чате.</p><p>Интерфейс местами проще, чем у западных аналогов, но на фоне отечественных выглядит более продуманным: меньше кликов, понятный UX, аккуратные подсказки, правильная вставка кода.</p><p>С моделями гибко: можно подключить западных провайдеров (если есть доступ) или локальную модель. Из коробки доступны современные модели — не только западные, но и восточные; по некоторым бенчмаркам они показывают очень конкурентные результаты.</p><p><b>Попробовать <a href="https://kodacode.ru">Koda</a>.</b></p><h2>Подведём итоги</h2><p>Прежде чем смотреть на таблицу, важно помнить: идеального ассистента нет. У каждого свои сильные и слабые стороны, а многое зависит от ваших задач, стека и привычек. Выбирайте то, что ближе именно вам — а в комментариях расскажите, чем пользуетесь сами и почему. Это поможет другим разработчикам быстрее сориентироваться в море инструментов.</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-10-10/0162cffb-190c-4e29-9d53-05032fbc7886.png" alt="" /></figure><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-10-10/b39392ca-b96e-4339-ba6c-2b2b98ff8663.png" alt="" /></figure>]]></content:encoded>
    </item>
    <item>
      <title>«Сделка с дьяволом»: JetBrains предлагает год бесплатных лицензий. Но в обмен на приватный код</title>
      <link>https://tproger.ru/news/-sdelka-s-dyavolom---jetbrains-predlagaet-god-besplatnyh-licenzij--no-v-obmen-na-privatnyj-kod</link>
      <comments>https://tproger.ru/news/-sdelka-s-dyavolom---jetbrains-predlagaet-god-besplatnyh-licenzij--no-v-obmen-na-privatnyj-kod?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Булат Яббаров]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/-sdelka-s-dyavolom---jetbrains-predlagaet-god-besplatnyh-licenzij--no-v-obmen-na-privatnyj-kod</guid>
      <description><![CDATA[<p>JetBrains дарит год All Products Pack за $0, но требует доступ к приватному коду и данным проектов, что вызывает опасения утечек</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/-sdelka-s-dyavolom---jetbrains-predlagaet-god-besplatnyh-licenzij--no-v-obmen-na-privatnyj-kod">«Сделка с дьяволом»: JetBrains предлагает год бесплатных лицензий. Но в обмен на приватный код</a>»</p>]]></description>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[Искусственный интеллект]]></category>
      <category><![CDATA[JetBrains]]></category>
      <category><![CDATA[PyCharm]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 03 Oct 2025 03:49:42 GMT</pubDate>
      <content:encoded><![CDATA[<p>JetBrains, известная своими IDE вроде <i>IntelliJ IDEA</i> и <i>PyCharm</i>, <a href="https://blog.jetbrains.com/blog/2025/09/30/detailed-data-sharing-for-better-ai/">объявила</a> о новой программе: организации могут получить бесплатные лицензии <b>All Products Pack</b> на год (стоимость — <b>$979</b> за пользователя) в обмен на доступ к данным своих проектов.</p><p>Компания объясняет, что публичного кода для обучения ИИ-моделей недостаточно: он не отражает «реальные сценарии разработки».</p><p>Поэтому JetBrains хочет <b>собирать живые данные</b> — фрагменты кода, текст запросов к ИИ, ответы, историю правок и даже использование терминала.</p><h2>Зачем это нужно</h2><p>По словам компании, <b>именно такая информация</b> позволяет улучшать модели и делать их ближе к потребностям профессиональных разработчиков.</p><p>Внутренние тесты уже показали <b>пользу от такого подхода</b>. Теперь JetBrains пытается масштабировать эксперимент на внешние команды.</p><h2>Условия участия</h2><p>Соглашение на передачу данных появится в версии <b>IDE 2025.2.4</b>, которая выйдет в ближайшие недели.</p><p>Для коммерческих пользователей настройка будет опцией, для организаций с централизованным управлением — <b>выключена по умолчанию</b>. Но для части некоммерческих пользователей обмен данными включат автоматически.</p><h2>Опасения разработчиков</h2><p>Главный риск — <b>случайная утечка интеллектуальной собственности</b>. Прецеденты уже были: в 2022 году ИИ воспроизвел чужой код, использованный при обучении.</p><p>Поэтому предложение вызвало <b>неоднозначную реакцию</b>. С одной стороны, бесплатные лицензии и доступ к AI Pro-подписке, с другой — возможность того, что приватный код станет частью обучающих выборок.</p><h2>Контекст</h2><p>JetBrains активно продвигает собственный AI-агент <b>Junie</b>, а также интегрирует сторонние решения, включая Claude 4.5 от Anthropic. Но пользователи <b>жалуются на высокую стоимость</b> новых тарифов.</p>]]></content:encoded>
    </item>
    <item>
      <title>Глава 1.1. Развертывание StarRocks — сборка из исходников</title>
      <link>https://tproger.ru/articles/glava-1-1--razvertyvanie-starrocks---sborka-iz-ishodnikov</link>
      <comments>https://tproger.ru/articles/glava-1-1--razvertyvanie-starrocks---sborka-iz-ishodnikov?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[StarRocks]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/glava-1-1--razvertyvanie-starrocks---sborka-iz-ishodnikov</guid>
      <description><![CDATA[<p>Как выбрать релиз StarRocks, настроить Docker и собрать из исходников (FE/BE и Broker): dev-env, build.sh, ACR image accelerator, containerd, советы по AVX2/ARM.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/glava-1-1--razvertyvanie-starrocks---sborka-iz-ishodnikov">Глава 1.1. Развертывание StarRocks — сборка из исходников</a>»</p>]]></description>
      <category><![CDATA[Git]]></category>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[GitHub]]></category>
      <category><![CDATA[Сервисы]]></category>
      <category><![CDATA[Docker]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[Библиотеки]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sun, 28 Sep 2025 10:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Перед развертыванием StarRocks часто встает вопрос выбора версии. На GitHub доступны архивы исходных кодов всех релизов, а на официальном сайте публикуются готовые бинарные пакеты для x86 (CentOS 7+). Рекомендуем ориентироваться на следующие принципы:</p><ul><li>Тестовая среда: используйте последний стабильный релиз (например, 3.5.6; см. страницу Tags на GitHub).</li><li>Staging (предпроизводственная) и Production (производственная) среды: используйте последний минорный релиз предыдущей стабильной ветки.</li><li>Если требуется новый функционал или критическая фиксация, можно собрать из актуального кода ветки main, используя официальный Docker-образ сборочного окружения.</li><li>Компонент BE (Backend) требует CPU с поддержкой AVX2. Возможна сборка без AVX2 (работоспособно, но не рекомендуется — нет полноценного покрытия тестами).</li><li>Начиная с 1.19 StarRocks поддерживает ARM, но потребует самостоятельной сборки на ARM-хосте (официальные готовые бинарники под ARM пока не публикуются).</li></ul><p>Справочные ссылки:</p><ul><li>Страница Tags (например, 3.5.6, 4.0.0-rc01): <a href="https://github.com/StarRocks/starrocks/tags">https://github.com/StarRocks/starrocks/tags</a></li><li>Release Notes 1.19 (сообщество): <a href="https://forum.mirrorship.cn/t/topic/552">https://forum.mirrorship.cn/t/topic/552</a></li></ul><p>Ниже — пример сборки из актуального кода ветки main с использованием официального Docker-образа.</p><h2>1. Установка Docker и загрузка сборочного образа</h2><p>Для примера используется CentOS 7.6 в виртуальной машине (рекомендуется ≥2 vCPU и ≥4 ГБ RAM). Во время сборки требуется стабильное сетевое подключение.</p><h3>1.1 Установка Docker</h3><h3>1.2 Запуск Docker и автозапуск</h3><h3>1.3 Проверка установки</h3><p>При успешном выполнении отобразится сообщение “Hello from Docker!”.</p><h3>1.4 Ускорение загрузки образов (для нестабильных каналов)</h3><p>Если загрузка официальных образов Docker медленная/нестабильная, можно использовать сервисы Alibaba Cloud Container Registry (ACR). Важно: официальный <a href="https://help.aliyun.com/zh/acr/user-guide/accelerate-the-pulls-of-docker-official-images">ACR image accelerator</a> больше не синхронизирует последние образы. Если образ не скачивается или тег latest не содержит актуальную версию, воспользуйтесь альтернативами:</p><ul><li>Подписка в ACR на зарубежные исходные образы (subscription of overseas source images).</li><li>Использование GA (Global Accelerator) для ускорения прямого доступа к зарубежным реестрам.</li></ul><p>Рекомендация для Production: минимизируйте зависимость от Docker Hub из‑за сетевых рисков.</p><p>Если вы используете containerd:</p><ul><li>Убедитесь, что в /etc/containerd/config.toml задан config_path, например:
[plugins."io.containerd.grpc.v1.cri".registry]
  config_path = "/etc/containerd/certs.d"
</li><li>Уберите конфликтующие mirrors (если есть), перезапустите containerd:
sudo systemctl restart containerd
</li><li>При ошибке старта изучите вывод:
journalctl -u containerd
</li><li>Создайте файл /etc/containerd/certs.d/docker.io/hosts.toml:
server = "https://registry-1.docker.io"

[host."https://&lt;your-ACR-accelerator-address&gt;"]
  capabilities = ["pull", "resolve", "push"]
</li></ul><h3>1.5 Загрузка сборочного образа StarRocks</h3><p>Выбирайте тег образа в соответствии с веткой/версией исходников (для ветки main — тег main; для ветки 3.5 — тег 3.5 и т. п.):</p><h3>1.6 Просмотр локальных образов</h3><h2>2. Получение исходников StarRocks</h2><h3>2.1 Клонирование из GitHub или скачивание архива</h3><p>Стандартно:</p><p>Если из‑за сетевых ограничений возникают ошибки (например, EOF), можно:</p><ul><li>использовать зеркало GitHub (пример):
git clone https://github.com.cnpmjs.org/StarRocks/starrocks.git
</li><li>либо скачать архив кода из браузера:
<a href="https://github.com/StarRocks/starrocks">https://github.com/StarRocks/starrocks</a></li><li>архив конкретного релиза:
<a href="https://github.com/StarRocks/starrocks/tags">https://github.com/StarRocks/starrocks/tags</a></li></ul><p>Чтобы ускорить клонирование, добавьте --depth 1 (если не требуется полная история).</p><h3>2.2 Загрузка архива на сервер и распаковка (вариант с ZIP)</h3><h3>2.3 Запуск контейнера со сборочным окружением и монтированием кэшей</h3><p>Рекомендуется смонтировать локальный Maven-кэш (~/.m2) для ускорения повторных сборок.</p><p>(Опционально — подключите ccache, смонтировав ~/.ccache, если это поддерживается образом.)</p><h3>2.4 Проверка запущенных контейнеров</h3><h3>2.5 Вход в контейнер</h3><h3>2.6 Переход в каталог исходников</h3><h3>2.7 Сборка FE и BE</h3><p>Скрипт скачает зависимости и выполнит сборку (может занять значительное время). Благодаря монтированию ~/.m2 зависимости будут переиспользованы в следующих сборках.</p><p>Результаты сборки — в каталоге output/:</p><h3>Сборка без AVX2 (только при необходимости; не рекомендуется)</h3><p>Измените build.sh, чтобы принудительно отключить AVX2:</p><p>Измените сборку сторонней библиотеки в thirdparty/build-thirdparty.sh (блок croaring):</p><p>Повторно выполните ./build.sh. Учтите: такой вариант не имеет полноценного покрытия тестами.</p><p><b>Полезные опции build.sh</b></p><h3>2.8 Сборка Broker</h3><p>Broker не собирается шагом выше — его нужно собирать отдельно:</p><p>Готовые файлы появятся в</p><p>.</p><h3>2.9 Выход и повторный запуск контейнера при необходимости</h3><p>Так как каталог с исходниками смонтирован в контейнер, результаты сборки доступны на хосте.</p><h2>Примечания и рекомендации</h2><ul><li>FE (Frontend) и BE (Backend) — основные компоненты StarRocks, сборка которых выполняется скриптом build.sh.</li><li>Для воспроизводимости привязывайте тег сборочного Docker-образа к ветке/версии исходников (например, starrocks/dev-env:3.5 для ветки 3.5.x).</li><li>Для ускорения повторных сборок используйте кэш Maven (~/.m2) и, при возможности, ccache для C++.</li><li>ARM: официальный сборочный Docker-образ пока не рассчитан на ARM. Для ARM-сборки потребуется нативный ARM-хост и корректные версии зависимостей (JDK, CMake и др.).</li><li>Список актуальных релизов и тегов: <a href="https://github.com/StarRocks/starrocks/tags">https://github.com/StarRocks/starrocks/tags</a></li><li>Release Notes 1.19 (сообщество): <a href="https://forum.mirrorship.cn/t/topic/552">https://forum.mirrorship.cn/t/topic/552</a></li></ul><p>После этих шагов у вас будут собранные бинарные артефакты FE/BE и Broker, готовые к дальнейшему развертыванию кластера StarRocks.</p>]]></content:encoded>
    </item>
    <item>
      <title>Как работает балансировка нагрузки</title>
      <link>https://tproger.ru/articles/kak-rabotaet-balansirovka-nagruzki</link>
      <comments>https://tproger.ru/articles/kak-rabotaet-balansirovka-nagruzki?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Михаил Сахаров]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kak-rabotaet-balansirovka-nagruzki</guid>
      <description><![CDATA[<p>Как балансировщики нагрузки распределяют HTTP-запросы между серверами. Рассматриваем подходы: от простых базовых алгоритмов до больших современных решений.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kak-rabotaet-balansirovka-nagruzki">Как работает балансировка нагрузки</a>»</p>]]></description>
      <category><![CDATA[Интернет]]></category>
      <category><![CDATA[Производительность]]></category>
      <category><![CDATA[IDE]]></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>Fri, 26 Sep 2025 10:00:04 GMT</pubDate>
      <content:encoded><![CDATA[<p><i>Это перевод зарубежной <a href="https://samwho.dev/load-balancing/">статьи</a> с сайта samwho.dev. Предлагаем обсудить ее в комментариях.</i></p><p>Веб-приложения рано или поздно перерастают один сервер. Чтобы продолжить работу, компаниям нужно повысить отказоустойчивость, масштабируемость. А лучше — и то, и другое.</p><p>Отличное решение — развернуть приложение на нескольких серверах, а перед ними поставить балансировщик нагрузки. Он будет распределять входящие запросы, которые в больших компаниях приходят тысячами. Именно от балансировки зависит, упадёт система на пике или сохранит работоспособность.</p><p>В статье расскажем, как балансировщики нагрузки распределяют HTTP-запросы между серверами. От простых алгоритмов до современных решений.</p><h2>Визуализируем проблему</h2><p>Начнём с простого: один балансировщик отправляет серверу один запрос в секунду. По мере обработки сервером каждый запрос «уменьшается в размере». Для многих веб-сайтов такая схема отлично работает. Мощные современные серверы обрабатывают множество запросов. Но что будет, если они перестанут справляться?</p><p>При скорости 3 RPS часть запросов отбрасывается. Если новый запрос приходит на сервер в момент, когда тот уже обрабатывает другой, сервер его отклонит. Пользователь получит ошибку — этого нужно избегать. Исправить ситуацию можно, добавив ещё один сервер в пул нашего балансировщика нагрузки. Ура, запрос принят! Балансировщик отправляет по очереди запрос каждому серверу. Это называется балансировкой, циклическим перебором или «round robin». Один из самых простых и действенных способов балансировки нагрузки. Он хорошо работает, когда серверы имеют одинаковую мощность, а запросы примерно одинаково затратны.</p><h2>Когда round robin не подходит</h2><p>На практике серверы редко имеют одинаковую мощность, а запросы требуют одинаковых ресурсов. Даже при идентичном оборудовании производительность может меняться.</p><p>Посмотрим, что произойдет, когда «стоимость» запросов отличается. В примере ниже запросы не равны по «цене»: это видно по тому, что одни уменьшаются (обрабатываются) дольше других.</p><p>Большинство запросов обрабатывается успешно. Но некоторые  теряются. Очереди помогают справляться с неопределённостью, но это компромисс. Мы будем терять меньше запросов, ценой увеличения задержки у части из них.</p><p>Если понаблюдать за симуляцией, запросы немного меняют цвет. Чем дольше они не обрабатываются, тем темнее становятся.</p><p>Из-за различий в «стоимости» запросов в работе сервера происходит дисбаланс: накапливаются очереди. Накапливаются на тех серверах, которым не повезло, и подряд досталось несколько «дорогих» запросов. Если очередь заполнена, такой запрос будет отброшен.</p><p>Проблема сохраняется на серверах с разной мощностью. Маломощная часть железа быстро перегружается и начинает отбрасывать запросы. При этом более производительное оборудование простаивает. Этот сценарий показывает основную слабость round robin — колебания. Однако round robin всё равно остаётся стандартным методом балансировки HTTP-нагрузки для nginx.</p><h2>Как улучшить round robin</h2><p>Улучшить round robin балансировку можно с помощью алгоритма «взвешенного циклического перебора» или «weighted round robin». Так он лучше будет справляться с вариативностью.</p><p>Как он работает: разработчики присваивают каждому серверу вес. Определяется, сколько запросов в секунду потянет сервер. В симуляции мы используем известное значение мощности сервера — вес. И, проходя по пулам, отдаём более мощным серверам больше запросов.</p><p>Хотя такой подход лучше справляется с разбросом мощности серверов, чем обычный round-robin, нам всё ещё приходится иметь дело с вариативностью «стоимости» запросов. Тактика «поручать людям вручную выставлять веса» быстро перестаёт работать. Свести производительность сервера к одному числу сложно и требует аккуратного нагрузочного тестирования на реальных сценариях. Это делают редко, поэтому другой вариант взвешенного round-robin вычисляет веса динамически, используя прокси-метрику задержку (latency).</p><p>Логично, что если один сервер обрабатывает запросы в три раза быстрее другого, скорее всего, он действительно в три раза быстрее и должен получать в три раза больше запросов.</p><p>Разметим каждый сервер и покажем среднюю задержку трёх последних обработанных запросов. Отправляем 1, 2 или 3 запроса каждому серверу на основе относительного различия в задержках.</p><p>Результат схож с weighted round robin. При этом не нужно заранее указывать вес каждого сервера. Алгоритм адаптируется к изменениям производительности со временем. Это называется «динамический взвешенный round robin».</p><p>Осталось понять, как метод справится с мощными колебаниями в мощности серверов и стоимости запросов.</p><h2>Уходим от round robin</h2><p>Динамически взвешенный round robin хорошо учитывает колебания мощности сервера и затрат на запросы. Но можно решить задачу элегантнее и проще. Применим балансировку по принципу «наименьшего количества соединений» — least connections.</p><p>Балансировщик нагрузки находится между сервером и пользователем. Он отслеживает, сколько незавершённых запросов у каждого сервера. При поступлении нового запроса балансировщик знает, какие севера менее загружены, и отдаёт приоритет им.</p><p>Этот алгоритм просто реализовать, он отлично работает вне зависимости от степени вариативности, избавляет от неопределённости и точно вычисляет нагрузку каждого сервера. Поэтому метод — стандарт балансировки HTTP-нагрузки в балансировщиках AWS и применяется как опция в nginx. Как и в других подходах, не удаётся избавиться от потерь запросов. Но единственный случай, когда он отбрасывает запросы, — это когда буквально не остаётся места в очереди. Он гарантирует использование всех доступных ресурсов, и потому — отличный выбор по умолчанию для большинства рабочих нагрузок.</p><h2>Оптимизируем latency (задержки)</h2><p>Потерянные запросы — это очень плохо, и мы стараемся их избежать. Цель неплохая, но это не та метрика, под которую чаще всего стоит оптимизировать HTTP-балансировщик.</p><p>Чаще нас волнует задержка (latency). Она измеряется в миллисекундах — от момента создания запроса до момента его обслуживания. В этом контексте принято говорить о разных перцентилях. Например, 50-й перцентиль (он же медиана) — это такое значение в миллисекундах, ниже которого находится 50% запросов и выше — тоже 50%.</p><p>Запускаем три симуляции с одинаковыми параметрами на 60 секунд. Каждую секунду снимаем метрики. Симуляции отличаются только алгоритмом балансировки. Давайте сравним медианы для каждой.</p><figure><img src="https://media.tproger.ru/user-uploads/115386/2025-09-25/92cc3c47-fd88-4abf-ba82-ae9dfd09da2b.png" alt="" /></figure><p>На графике перцентилям внутри одного алгоритма не назначены разные цвета. Более высокие перцентили всегда расположены выше.</p><p>Возможно, неожиданно, но у round-robin лучшая медианная задержка. Если смотреть только на этот показатель, мы упустим общую картину. Давайте посмотрим на 95-й и 99-й перцентили.</p><figure><img src="https://media.tproger.ru/user-uploads/115386/2025-09-25/20ecf9ae-d93f-42e8-85bf-f60a987ba982.png" alt="" /></figure><p>Мы видим, что round-robin показывает слабые результаты в верхних перцентилях. Как так получается, что у него отличная медиана, но плохие 95-й и 99-й перцентили?</p><p>При round-robin состояние серверов не учитывается, поэтому немало запросов попадает на простаивающие серверы — отсюда низкий 50-й перцентиль (медиана). Но с той же лёгкостью запросы отправляются и на перегруженные машины — поэтому 95-й и 99-й перцентили ухудшаются.</p><p>Выбираем параметры симуляций, чтобы избежать отбрасывания запросов. Это гарантирует сравнение одинакового количества наблюдений для всех трёх алгоритмов. Запустим симуляции с увеличенным значением RPS (запросов в секунду) и доведём все алгоритмы до предела. Ниже — график накопленного числа отброшенных запросов во времени.</p><figure><img src="https://media.tproger.ru/user-uploads/115386/2025-09-25/12b54c20-2943-47f3-acc8-18e8802d71b4.png" alt="" /></figure><p>Балансировка по наименьшему числу подключений справляется с перегрузками лучше всех, но ценой более высокой задержки на 95-м и 99-го перцентили. В большинстве случаев это приемлемый компромисс.</p><h2>Применяем ещё один алгоритм</h2><p>Если мы действительно хотим оптимизироваться по задержке, нам нужен алгоритм, который прямо учитывает latency. Было бы здорово объединить динамический взвешенный round-robin с least connections: чувствительность к задержке первого и устойчивость второго.</p><p>Возьмём плюсы от обоих подходов и попробуем избавить от минусов.</p><p>Такая идея возникла не впервые. Существует алгоритм Peak Exponentially Weighted Moving Average «пикового экспоненциально взвешенного скользящего среднего» или PEWMA. Название длинное и сложное, но принцип понятный.</p><p>Подбираем для симуляции конкретные параметры, гарантирующие демонстрацию ожидаемого поведения. Если присмотреться, алгоритм спустя время перестаёт отправлять запросы самому медленному левому серверу. Он понимает, что остальные серверы быстрее, и нет необходимости повышать задержку, работая с маломощным сервером.</p><p>Как он это делает? Комбинирует приёмы из динамического взвешенного round-robin и из least connections, а сверху добавляет щепотку собственной «магии».</p><p>Для каждого сервера алгоритм отслеживает задержку последних N запросов. Вместо того чтобы считать среднее, он суммирует значения с экспоненциально убывающим коэффициентом. В итоге, чем старее измерение задержки, тем меньше оно влияет на сумму; свежие запросы влияют сильнее, чем давние. Полученное значение умножается на количество открытых подключений к серверу. Результат использует, чтобы выбрать, на какой сервер отправить следующий запрос. Меньше — лучше.</p><p>Сначала посмотрим на 50-й, 95-й и 99-й перцентили в сравнении с данными для least connections из предыдущей части.</p><figure><img src="https://media.tproger.ru/user-uploads/115386/2025-09-25/5335bd60-e3c1-4270-9944-de0a3bc27505.png" alt="" /></figure><p>Мы видим заметное улучшение по всем метрикам! Оно особенно выражено на верхних перцентилях, но стабильно присутствует и на медиане. Ниже те же данные показаны в виде гистограммы.</p><figure><img src="https://media.tproger.ru/user-uploads/115386/2025-09-25/137ae642-1098-453b-baa8-89d26f4956e8.png" alt="" /></figure><p>А что насчёт потерянных запросов?</p><figure><img src="https://media.tproger.ru/user-uploads/115386/2025-09-25/7f768071-35e0-4717-9ac8-78c2cfca9971.png" alt="" /></figure><p>Сначала он показывает лучшие результаты, но со временем начинает уступать least connections. Это логично: PEWMA стремится к наименьшим задержкам, и из-за этого иногда оставляет сервер недозагруженным.</p><p>К тому же, у PEWMA много настраиваемых параметров. Реализация, приведённая в этой статье, использует конфигурацию, хорошо показавшую себя в протестированных сценариях; дополнительная тонкая настройка может дать результаты лучше, чем у least connections. Но это и минус PEWMA по сравнению с least connections: большая сложность.</p><h2>Заключение</h2><p>Цель этой статьи — получить хотя бы интуитивное понимание методов балансировки нагрузки между серверами и найти решение, которое можно применять в различных ситуациях.</p><p>Всегда стоит измерять нагрузку на конкретном проекте. Не воспринимайте советы из интернета как панацею. В симуляциях игнорируются реальные ограничения — медленный запуск сервера, сетевые задержки. Они только демонстрируют свойства каждого алгоритма.</p><p>Подведём итоги:</p><ol><li>Round robin (циклический перебор) — самый простой алгоритм, который отправляет запросы по очереди каждому серверу. Хорошо работает только при одинаковой мощности серверов и одинаково затратных запросах. Имеет лучшую медианную задержку, но плохие высокие перцентили.</li><li>Weighted round robin (взвешенный циклический перебор) — учитывает мощность серверов через веса, которые задают разработчики. Требует ручной настройки и тщательного тестирования. Не адаптируется к изменениям производительности.</li><li>Dynamic weighted round robin (динамический взвешенный циклический перебор) — самостоятельно определяет веса серверов по задержке ответов. Адаптируется к изменениям производительности со временем. Хорошо справляется с колебаниями мощности и стоимости запросов.</li><li>Least connections (наименьшее количество соединений) — отправляет запросы на сервер с наименьшим количеством активных соединений. Метод простой и эффективный. Он использует все доступные ресурсы. Стандартный метод в AWS, опция в nginx.</li><li>PEWMA (пиковое экспоненциально взвешенное скользящее среднее) — самый сложный алгоритм, оптимизирует задержку, учитывая историю ответов с экспоненциально убывающим весом и текущую нагрузку. Лучшие показатели задержки во всех перцентилях, но его сложнее настроить. Метод также может сбоить при перегрузках.</li></ol><p>В оригинале <a href="https://samwho.dev/load-balancing/">статьи</a> на английском можно испытать симуляцию и в реальном времени выставлять различные параметры, чтобы посмотреть, как сервер будет вести себя под нагрузкой.</p>]]></content:encoded>
    </item>
    <item>
      <title>Как Web3 меняет разработку веб-приложений: от серверов к блокчейну</title>
      <link>https://tproger.ru/articles/kak-web3-menyaet-razrabotku-veb-prilozhenij--ot-serverov-k-blokchejnu</link>
      <comments>https://tproger.ru/articles/kak-web3-menyaet-razrabotku-veb-prilozhenij--ot-serverov-k-blokchejnu?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Диана Тажетдинова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kak-web3-menyaet-razrabotku-veb-prilozhenij--ot-serverov-k-blokchejnu</guid>
      <description><![CDATA[<p>Поговорили с экспертом и узнали, где Web3 даёт практическую пользу разработчикам: сравниваем подходы, исследуем рынок вакансий и особенности новой реальности.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kak-web3-menyaet-razrabotku-veb-prilozhenij--ot-serverov-k-blokchejnu">Как Web3 меняет разработку веб-приложений: от серверов к блокчейну</a>»</p>]]></description>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[Практика]]></category>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[GitHub]]></category>
      <category><![CDATA[Node.js]]></category>
      <category><![CDATA[Rust]]></category>
      <category><![CDATA[React]]></category>
      <category><![CDATA[Блокчейн]]></category>
      <category><![CDATA[Ethereum]]></category>
      <category><![CDATA[Фронтенд]]></category>
      <category><![CDATA[Приложение]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[смарт-контракты]]></category>
      <category><![CDATA[DeFi]]></category>
      <category><![CDATA[Бизнес]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 22 Sep 2025 12:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Раньше, чтобы запустить приложение, приходилось настраивать сервер и базу данных. В Web3 всё по-другому: вместо серверов — смарт-контракты, вместо базы — блокчейн. <a href="https://www.esparkinfo.com/web3/statistics">По прогнозам</a>, объём рынка Web3‑разработки вырастет с $4,43 млрд в 2024 году до $6,15 млрд в 2025. Кейсы<a href="https://ru.wikipedia.org/wiki/Plume_Network_%E2%80%93_The_Future_of_Real-World_Assets_on_Web3_%F0%9F%8C%90?utm_source=chatgpt.com"> Plume Network</a> и<a href="https://en.wikipedia.org/wiki/The_Graph?utm_source=chatgpt.com"> The Graph</a> показывают, что Web3 уже работает в реальных продуктах. Что, если нас уже сегодня ждет backend в виде блокчейна? Давайте разберём, как меняются инструменты, архитектуры и карьерные треки.</p><h2>Главные отличия Web3 от Web2</h2><p>Перед тем как углубиться в код и практику, полезно увидеть основные различия между привычной Web2-разработкой и новой логикой Web3.</p><figure><img src="https://media.tproger.ru/user-uploads/114509/2025-09-22/3fa1cc2a-0755-4b71-af24-9b8a6f9d22ea.png" alt="" /></figure><p>Представим себе простой сервис для задач. В классическом Web2 его работа привычна: сервер обрабатывает запросы, база данных хранит задачи, а пользователь авторизуется через почту и пароль. Всё централизовано и зависит от владельца сервера.</p><p>В Web3 логика сильно меняется. Пользователь входит в систему с помощью криптокошелька, например, MetaMask. Каждая задача создаётся транзакцией и записывается в смарт‑контракт, а значит становится частью блокчейна. Удалить её уже нельзя — только отметить статус выполнения. Такой подход даёт прозрачность: любой участник сети может проверить, что задача действительно существует, и её статус изменён честно.</p><h2>Стек Web3: что понадобится на практике</h2><p>Чтобы построить работающий DApp, важно понимать, чем он отличается от обычного приложения. DApp — это децентрализованное приложение, в котором логика хранится в смарт-контрактах на блокчейне, а данные — в распределённых хранилищах, а не на сервере компании. Поэтому одного знания блокчейна мало: нужен полный набор инструментов — от языков и фреймворков до кошельков и сервисов подключения.</p><ul><li>Блокчейн: Ethereum, Layer‑2 (Arbitrum, Optimism, Base, Polygon), Solana.</li><li>Языки: Solidity (EVM), Rust (Solana), Go (инфраструктура и сервисы).</li><li>Библиотеки: ethers.js, wagmi.</li><li>Фреймворки: Hardhat, Foundry, Truffle.</li><li>Хранилища: IPFS/Arweave для файлов и метаданных.</li><li>Кошельки/подключение: MetaMask, WalletConnect (v2/WalletConnect Network), Web3Auth.</li></ul><blockquote>Точка входа для новичка — Alchemy, а также ethers.js.</blockquote><p><b>Пример.</b> Быстрое подключение кошелька (ethers.js).</p><h2>Архитектура DApp: из чего состоит современное Web3‑приложение</h2><p>Любое Web3‑приложение строится из нескольких слоёв, каждый со своей ролью. Фронтенд остаётся привычным SPA, но работает не с сервером, а напрямую с кошельком и смарт-контрактами. Контракты содержат бизнес‑логику и хранят ссылки на данные в децентрализованных хранилищах. Оракулы обеспечивают связь с внешним миром, например, передают цены или сообщения между разными блокчейнами. Важную часть играет off‑chain слой — сервисы вне блокчейна (индексаторы, аналитика), которые помогают быстрее искать и обрабатывать данные, при этом не перегружать сеть.</p><p><b>Пример.</b> Возьмём DeFi‑приложение. Пользователь открывает фронтенд и инициирует операцию swap(). В ответ фронтенд обращается к смарт‑контракту, который выполняет обмен токенов. Чтобы определить курс, контракт тянет актуальные данные через оракул. При этом тяжёлые артефакты, изображения или отчёты не хранятся в блокчейне напрямую — они лежат в IPFS. Сам контракт содержит только контент‑идентификаторы CID. Таким образом, получаем баланс: блокчейн отвечает за логику и безопасность, а децентрализованное хранилище — за данные.</p><h2>Практика: ваш первый DApp за вечер</h2><p>Давайте попробуем собрать простейшее приложение своими руками.</p><p><b>Шаг 0. Подготовка</b></p><p>Сначала убедитесь, что у вас стоит Node.js LTS и Git. Также нужен браузер с установленным MetaMask, где можно создать тестовый аккаунт. Чтобы оплачивать транзакции в тестовой сети, заранее возьмите немного тестовых монет через faucet — например, для Sepolia или Polygon Amoy.</p><p><b>Шаг 1. Проект</b></p><p>Создадим новый проект и установим Hardhat вместе с тулзами. Эта среда нужна для компиляции и деплоя контрактов.</p><p><b>Шаг 2. Контракт</b></p><p>В папке contracts/ создаём файл TaskTracker.sol и копируем туда код смарт-контракта из первого раздела. Это и будет бизнес-логика нашего приложения.</p><p><b>Шаг 3. Сценарий деплоя</b></p><p>Пишем скрипт, который разворачивает контракт в сети. Это простой скрипт на JavaScript, который вызывает методы Hardhat.</p><p><b>Шаг 4. Конфиг сети</b></p><p>В файле hardhat.config.js добавляем настройки для подключения к тестовой сети. Используем RPC-URL от Alchemy или Infura и приватный ключ от тестового аккаунта — его можно экспортировать из MetaMask, но использовать только для тестовой сети.</p><p><b>Шаг 5. Деплой в тестнет</b></p><p>Теперь запускаем скрипт деплоя. После выполнения увидите адрес контракта — он понадобится для фронтенда.</p><p><b>Шаг 6. Фронтенд (React + ethers.js + wagmi)</b></p><p>Собираем простое SPA: форма, чтобы добавить задачи, и кнопка «complete». Здесь мы используем ethers.js для обращения к контракту. Сделайте вызовы addTask и completeTask.</p><h2>Подводные камни Web3-разработки и что с ними делать</h2><p><b>Комиссии (gas): </b>любая запись в блокчейн стоит денег и иногда комиссия выше ценности операции — например, $10 за простую задачу.</p><ul><li>Что делать: использовать Layer-2 (Arbitrum/Optimism/Base/Polygon), выбирать сети с низкими комиссиями (Solana, Avalanche), оптимизировать контракты и батчи транзакций.</li></ul><p><b>Скорость: </b>подтверждение транзакции занимает секунды или десятки секунд, что заметно медленнее обычного сервера.</p><ul><li>Что делать: показывать «оптимистичный UI», кешировать данные, переносить часть логики off-chain, использовать быстрые сети (Solana, Near, Aptos).</li></ul><p><b>Безопасность:</b> код контракта неизменяем, и одна ошибка может стоить миллионов.</p><ul><li>Что делать: проходить аудит (CertiK, Trail of Bits), использовать проверенные библиотеки (OpenZeppelin), писать тесты в тестовых сетях (Goerli, Sepolia), внедрять баг-баунти и ролевую модель доступа.</li><li>Ресурс:<a href="https://consensys.io/diligence/smart-contract-security-best-practices/"> ConsenSys Diligence — Smart Contract Security Best Practices</a>.</li></ul><p><b>UX:</b> вход через кошелёк сложнее привычного логина/пароля. Нужно ставить расширение, пополнять баланс и подтверждать каждую транзакцию.</p><ul><li>Что делать: использовать аккаунт-абстракцию (ERC-4337), социальный логин, gasless транзакции через Paymaster, улучшать UI (подсказки, авто-фокус на MetaMask).</li></ul><p><b>Регуляция: </b>законы о Web3 пока разные в каждой стране. Легальное в одной юрисдикции может быть запрещено в другой (например, токенизация акций без лицензии).</p><ul><li>Что делать: консультироваться с юристами, следить за изменениями. Например, MiCA в ЕС — “Markets in Crypto-Assets Regulation” —  это единый регламент по криптоактивам в Евросоюзе.</li></ul><blockquote>Безопасность всегда должна быть на первом месте, потому что в Web3 есть риск потерять реальные деньги пользователей.</blockquote><h2>Карьерные возможности и перспективы</h2><p>Web3‑разработчиков уже активно ищут: <a href="https://web3.career/learn-web3/web3-intelligence-report">зарплаты в среднем предлагают выше</a>, чем у Web2‑коллег. Кроме программистов, востребованы смежные роли: аудиторы смарт‑контрактов, специалисты по безопасности, а также продакт‑менеджеры и аналитики, которые понимают специфику блокчейна.</p><p>Чтобы войти в профессию, начните с изучения Solidity и базовых паттернов смарт‑контрактов. Сделайте пару пет‑проектов и выложите код в GitHub. Отличный вариант прокачки — участвовать в хакатонах и грантовых программах от Ethereum Foundation или Solana Grants. Это даёт и опыт, и контакты, и иногда финансирование.</p><blockquote>Пара пет‑проектов + понимание блокчейна — хороший старт в Web3‑команду.</blockquote><h2>Будущее Web3</h2><p>Web3 не вытеснит Web2 полностью, но поменяет привычный подход к разработке. Разработчику это открывает новые вызовы: комиссии, безопасность и UX, но одновременно и новые возможности — прозрачные данные, токенизация, децентрализованные бизнес‑модели.</p><p>Для тех, кто только входит в сферу, это шанс попасть в индустрию на раннем этапе и быстро нарастить экспертизу. Простые пет‑проекты, хакатоны и знакомство с инструментами дают ощутимый старт.</p><p>Web3 будет развиваться параллельно с Web2, усиливая те области, где важны децентрализация, доверие и контроль за данными. Попробуйте задеплоить первый контракт — и вы сами почувствуете, что это не просто мода, а новый уровень возможностей.</p>]]></content:encoded>
    </item>
    <item>
      <title>Как сеньоры документируют проекты: протокол архитектурных решений</title>
      <link>https://tproger.ru/articles/kak-senory-dokumentiruyut-proekty--protokol-arhitekturnyh-rewenij</link>
      <comments>https://tproger.ru/articles/kak-senory-dokumentiruyut-proekty--protokol-arhitekturnyh-rewenij?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Даровская Маша]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kak-senory-dokumentiruyut-proekty--protokol-arhitekturnyh-rewenij</guid>
      <description><![CDATA[<p>Как сеньоры документируют архитектуру без боли. Обзор подхода ADR: шаблоны, примеры из практики и комментарии экспертов. Ускорьте онбординг и перестаньте объяснять одно и то же.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kak-senory-dokumentiruyut-proekty--protokol-arhitekturnyh-rewenij">Как сеньоры документируют проекты: протокол архитектурных решений</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[Git]]></category>
      <category><![CDATA[Unity]]></category>
      <category><![CDATA[Опрос]]></category>
      <category><![CDATA[Практика]]></category>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[SQL]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Tor]]></category>
      <category><![CDATA[HTML]]></category>
      <category><![CDATA[GitHub]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[Scala]]></category>
      <category><![CDATA[Amazon]]></category>
      <category><![CDATA[HR]]></category>
      <category><![CDATA[GitLab]]></category>
      <category><![CDATA[MIT]]></category>
      <category><![CDATA[Финтех]]></category>
      <category><![CDATA[Фронтенд]]></category>
      <category><![CDATA[Lua]]></category>
      <category><![CDATA[Бэкенд]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[PostgreSQL]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 09 Sep 2025 10:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p><i>Это перевод <a href="https://dev.to/koladev/how-senior-software-engineers-document-their-project-1nf4">статьи</a> автора <a href="https://dev.to/koladev">Мангабо Колаволе</a> с портала DevTo с комментариями экспертов.</i></p><p>Есть одна задача, которую программисты терпеть не могут — но именно она отличает хорошего инженера от посредственного: как они документируют свой проект? Несколько лет назад я отвечал за запуск финтех-проекта. Мы выбрали стратегию быстрого старта, поэтому масштабируемость не стала для нас приоритетом. Главной целью было проверить гипотезу — и мы двигались вперёд, разрабатывая API, архитектуру и системы —  с упором на простоту, не особенно задумываясь о будущем.</p><p>Но я отвечал за бэкенд и инфраструктуру — и понимал: как бы хороша ни была моя память, через шесть месяцев я не смогу вспомнить все технические детали.</p><p>Во время работы я наткнулся на подход, который мне очень понравился: ADR — Architectural Decision Record, или «протокол архитектурных решений».</p><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-09-05/7d1206a7-6729-4bcb-ab55-63d59240df12.png" alt="" /></figure><p>По сути, это документ, в котором
фиксируются все изменения, внесённые в архитектуру: само решение, его влияние и
полученные уроки.</p><p>Проще говоря, это как личный дневник —
только для всей команды.</p><h2>Почему это важно?</h2><p><b>Память
— ненадёжна.</b> Мы часто забываем, почему выбрали одну
архитектурную модель, а не другую. Документирование изменений помогает
восстановить ход мыслей и избежать повторения одних и тех же ошибок.</p><p><b>Это
усиливает команду.</b> Представьте, что вы перепробовали
несколько вариантов решения проблемы и зафиксировали как удачные, так и
неудачные попытки. Это не просто ваш личный опыт — это знание, которым могут
воспользоваться все, включая тех, кто придёт после вас.</p><p><b>Будущие
разработчики скажут вам спасибо.</b> Подумайте о человеке,
который через пять лет будет разбираться в вашем коде. Если вы не оставили
объяснений, он, скорее всего, будет мучиться, пытаясь понять, зачем было
сделано то или иное изменение. А теперь представьте другого разработчика в
другой компании, который находит ADR-документ с чётким объяснением принятого
решения. Он, без сомнения, будет вам благодарен.</p><p>Синьор-фронтендер из ВК Маргарита Лукина, автор телеграм-канала <a href="https://t.me/frontend_kitchen">«Фронтенд кухня»</a>:</p><blockquote>Ценность ADR я впервые осознала в 2019 году. В команду, где работала, активно набирали новых ребят, и приблизительно раз в неделю кто-нибудь из новых разработчиков спрашивал "а почему это сделано так, а не иначе?" Приходилось постоянно давать ответы на одни и те же вопросы, и тогда-то я и поняла, насколько будет удобно записывать ответы где-нибудь в документацию в confluence и просто кидать ссылку новичкам. <br /><br />В 2019 году я еще не знала сам термин ADR и говорила "документация". С термином я познакомилась совсем недавно — этим летом, на курсе по архитектуре монолитных приложений. Тогда я поняла, насколько эффективно можно использовать ADR для ускорения разработки и уменьшения TTM. Дело в том, что начиная разрабатывать новый проект, разработчик первое время (от месяца до полугода! всё зависит от размера проекта) погружается в проект — разбирается, как всё устроено, чтобы вносить изменения соответственно архитектуре. В этот период разработчик, по сути, составляет собственные adr —  обычно в виде мыслеобразов в своей голове :) Если записать основные решения, разработчик сможет намного быстрее погрузиться в проект.</blockquote><h2>Как писать ADR?</h2><p>Существует несколько общепринятых правил, но
вы всегда можете адаптировать их под себя.</p><p>Вдохновившее меня соглашение можно найти на <a href="https://adr.github.io/madr/">GitHub</a>
. Вы также можете ознакомиться с процессом <a href="https://docs.aws.amazon.com/prescriptive-guidance/latest/architectural-decision-records/adr-process.html">ADR на Amazon</a>.</p><p>Вот пример шаблона, который вы можете
использовать.</p><p>Такой тип документа может находиться прямо в репозитории проекта, в Confluence или, например, в JIRA.</p><p>В моей последней компании, где я работал фронтенд-разработчиком, не существовало одного централизованного документа, фиксирующего все архитектурные изменения. Вместо этого мы использовали задачи GitLab и привязывали каждое архитектурное изменение к соответствующей ветке. Это позволяло отслеживать причины изменений даже спустя месяцы после их внедрения.</p><p>Практика спасала нас бесчисленное количество раз. Как я всегда говорю: не важно, насколько вы или ваши коллеги умны — будь то технический директор, менеджер или любой другой участник команды — никто не помнит каждое техническое решение, принятое два года назад.</p><p>Синьор-фронтендер из ВК Маргарита Лукина, автор телеграм-канала <a href="https://t.me/frontend_kitchen">«Фронтенд кухня»</a>:</p><blockquote>Многие руководители хотят видеть на своём проекте разработчиков, которые "сразу, без раскачки" начнут перформить. Совсем избежать периода погружения невозможно, но можно ускорить его в десятки раз за счёт ADR</blockquote>]]></content:encoded>
    </item>
    <item>
      <title>Продукт и баги: какие ошибки ломают всё, а какие — просто часть кода</title>
      <link>https://tproger.ru/articles/produkt-i-bagi--kakie-owibki-lomayut-vsyo--a-kakie---prosto-chast-koda</link>
      <comments>https://tproger.ru/articles/produkt-i-bagi--kakie-owibki-lomayut-vsyo--a-kakie---prosto-chast-koda?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Mila Dubovaya]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/produkt-i-bagi--kakie-owibki-lomayut-vsyo--a-kakie---prosto-chast-koda</guid>
      <description><![CDATA[<p>Как отличить опасные баги от некритичных и выстроить систему работы с ними? Разбираем примеры и инструменты для джунов и перечисляем неочевидные фишки для миддлов.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/produkt-i-bagi--kakie-owibki-lomayut-vsyo--a-kakie---prosto-chast-koda">Продукт и баги: какие ошибки ломают всё, а какие — просто часть кода</a>»</p>]]></description>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[DevOps]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[GitHub]]></category>
      <category><![CDATA[GitLab]]></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>Tue, 02 Sep 2025 10:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<h2>Критические баги: когда всё идёт не по плану</h2><p>Это те самые «монстры», которые рушат ключевую логику, приводят к потере денег, данных или репутации. Их объединяет одно: они блокируют пользовательский сценарий или создают серьёзную уязвимость.</p><h3>Пример 1: «Призрачный промокод», или классический Race Condition</h3><p>Представьте себе интернет-магазин, который запустил акцию: «Первые 100 покупателей получат скидку 50% с промокодом SUPER-SALE». Код простой: проверяем, сколько раз промокод уже был использован, и если меньше 100 — применяем скидку.</p><p>Ситуация: в понедельник утром маркетологи в панике: промокод применили 350 раз. Бизнес потерял кучу денег. Как так вышло?</p><p>Разбор полётов: проблема в параллельных запросах. Когда нагрузка на сервер высока, несколько пользователей могут одновременно отправить запрос на применение промокода.</p><p>Упрощённый код на бэкенде мог выглядеть так (Node.js-подобный псевдокод):</p><p>Что происходит под нагрузкой:</p><ol><li>Запрос А приходит. usageCount равен 99. Проверка 99 &lt; 100 проходит.</li><li>Запрос Б приходит сразу после Запроса А, но до того, как Запрос А успел обновить счётчик в базе. Для Запроса Б usageCount всё ещё равен 99. Проверка 99 &lt; 100 тоже проходит.</li><li>Запрос В приходит в тот же момент, для него usageCount равен 99.</li></ol><p>В итоге все три запроса успешно применяют скидку и увеличивают счётчик. Вместо одного использования мы получили три.</p><p>Это классическое состояние гонки (Race Condition). Проблема не в логике как таковой, а во времени и одновременном доступе к общему ресурсу (счётчику в БД).</p><p>Многие помнят про Race Condition, но часто забывают, что он может проявляться не только в классических банковских транзакциях, но и в менее очевидных местах: счётчики, генерация уникальных имён, бронирование слотов.</p><p>Как чинить? Самый надёжный способ — транзакции с блокировкой. Пояснение для новичков: FOR UPDATE говорит базе данных: «Сейчас буду менять эту строку, никому её не отдавай, пока я не закончу». Другие запросы выстроятся в очередь и будут ждать, пока первый не завершит свою работу.</p><h3>Пример 2: «Тихий убийца производительности», или утечка памяти на фронтенде</h3><p>Ситуация: пользователи жалуются, что после получаса работы в SPA (Single Page Application) сайт начинает тормозить, «съедать» память, а анимации становятся «дёргаными». Перезагрузка страницы помогает.</p><p>Разбор полётов: представим, что у нас есть компонент, который при монтировании подписывается на глобальное событие (например, изменение размера окна).</p><p>Этот компонент может появляться и исчезать с экрана много раз (например, в модальном окне). Каждый раз, когда он появляется, useEffect навешивает новый обработчик handleResize на глобальный объект window. Но когда компонент исчезает, обработчик не удаляется.</p><p>После 10 открытий-закрытий модального окна у нас будет 10 одинаковых обработчиков. При каждом изменении размера окна браузер будет выполнять одну и ту же «сложную логику» 10 раз. Через час их будет уже сотня. Это и есть утечка памяти (Memory Leak). Ссылки на функции handleResize и их замыкания остаются в памяти, потому что на них ссылается window.</p><p>Это классика, но дьявол в деталях. Утечки могут быть куда коварнее: неотписанные WebSocket-соединения, забытые таймеры (setInterval), ссылки на DOM-элементы в замыканиях, которые мешают сборщику мусора их убрать.</p><p>Как чинить? Всегда отписываться от событий в функции очистки.</p><h2>Некритичные баги: «фича, а не баг»</h2><p>Это ошибки, которые не ломают основной функционал. Они могут быть визуальными, «текстовыми», или проявляться в таких редких условиях, что 99.9% пользователей их никогда не увидят.</p><h3>Пример 1: «Магия чисел с плавающей запятой»</h3><p>Ситуация: в корзине интернет-магазина пользователь добавляет товар за 0.1$ и товар за 0.2$. Итоговая сумма заказа отображается как 0.30000000000000004$.</p><p>Разбор полётов: это не баг кода. Это фундаментальная особенность того, как компьютеры хранят дробные числа в формате IEEE 754 (floating-point).</p><p>Если кратко: большинство десятичных дробей не могут быть точно представлены в двоичной системе счисления, так же как 1/3 не может быть точно записана в виде конечной десятичной дроби (0.3333...). Когда вы пишете 0.1, компьютер хранит ближайшее возможное двоичное представление, которое чуть-чуть больше. То же самое с 0.2. При их сложении эти микроскопические неточности накапливаются и становятся видимыми.</p><p>Почему это чаще всего некритично? Проблема чисто визуальная и не мешает работе продукта. Если на бэкенде для финансовых расчётов используются специальные типы данных (как Decimal в Python или BigDecimal в Java), то реальный платёж пройдёт на правильную сумму (0.3$).</p><p>Это отличный пример бага, который выглядит как ошибка новичка, но его корни уходят глубоко в основы информатики. Опытные разработчики знают, что с деньгами нельзя работать через float / double и всегда используют либо целочисленное представление (хранят всё в копейках/центах), либо специальные библиотеки.</p><p>Как чинить (на фронтенде)? Просто отформатировать вывод.</p><h3>Пример 2: «Восставший z-index»</h3><p>Ситуация: на определённой странице выпадающее меню профиля пользователя оказывается под блоком с баннером. Кликнуть по ссылкам «Профиль» или «Выйти» невозможно. Баг воспроизводится только в Safari на macOS.</p><p>Разбор полётов: скорее всего, проблема в контексте наложения (stacking context). Многие думают, что z-index — это просто глобальный номер слоя: у кого больше, тот и выше. Но это не так.</p><p>Элемент с transform, opacity &lt; 1, filter и некоторыми другими CSS-свойствами создаёт свой собственный «мини-мир» слоёв — stacking context. Внутри этого мира z-index работает как ожидается. Но никакой z-index: 9999 внутри одного контекста не поможет элементу перекрыть другой элемент из другого контекста, если сам родительский контекст находится «ниже».</p><p>В нашем случае, блок с баннером мог иметь, например, transform: scale(1) (для анимации при наведении), что создало новый контекст наложения. И если этот блок в DOM-дереве находится после шапки с меню, то весь его «мир» (включая фон и сам баннер) будет выше «мира» шапки.</p><p>Почему это некритично? Во-первых, не влияет на данные или безопасность. Во-вторых, проявляется только в одном браузере и на одной странице. В-третьих, функционал не блокируется полностью: пользователь может перейти на страницу профиля по прямой ссылке.</p><p>Как чинить? Вариантов несколько:</p><ul><li>Убрать свойство, создающее stacking context (контекст наложения) с баннера, если оно не критично: это поможет избежать проблем с порядком наложения элементов (z-index), предотвратить случайное перекрытие модальных окон, тултипов и др., упростить управление слоями в интерфейсе;</li><li>Создать stacking context для родительского элемента (это элемент интерфейса, на котором активируется выпадающий список) меню, например, добавив position: relative; z-index: 1; на саму шапку;</li><li>Перенести элемент с меню в конец &lt;body&gt; через портал (как это делают в React/Vue), чтобы он не зависел от родительских контекстов.</li></ul><h2>Приоритет и серьёзность: как отличить одно от другого?</h2><p>Новички часто путают эти два понятия, а ведь именно их правильное понимание экономит команде кучу времени, поскольку важно корректно выделять наиболее приоритетные и серьезные задачи — то есть срочные и важные — и лишь потом приступать к остальным.</p><h3>Серьёзность (Severity): описывает, насколько сильно баг ломает продукт.</h3><p><b>Уровень 1: приложение не работает, данные теряются. </b></p><p>Примеры: приложение ломается при запуске, пользователи не могут его открыть; платёжная система не сохраняет данные транзакций, и деньги «исчезают».</p><p><b>Уровень 2: ключевой функционал не работает, но есть обходные пути.</b></p><p>Пример: функция экспорта данных в CSV для пользователей не работает, они не могут получить свои данные, остальные функции работают в стандартном режиме.</p><p><b>Уровень 3: неключевой функционал работает некорректно.</b></p><p>Примеры: не работает кнопка «Поделиться» в соцсетях (если это не ключевая функция продукта); в списке товаров некорректно отображаются некоторые параметры, например, дата добавления.</p><p><b>Уровень 4: визуальный дефект. </b></p><p>Пример: опечатка в тексте.</p><h3>Приоритет (Priority): этот термин определяет, насколько срочно нужно исправлять баг.</h3><p><b>Уровень 1: чинить немедленно, бросив всё.</b></p><p>Пример: любой пользователь может получить доступ к чужим данным через URL (критическая уязвимость).</p><p><b>Уровень 2: включить в следующий спринт/релиз.</b></p><p>Пример: заметное падение производительности на мобильных устройствах при обработке данных в реальном времени.</p><p><b>Уровень 3: починить, когда будет время.</b></p><p>Пример: у кнопки на тёмной теме сайта некорректно отображается цвет.</p><p>Приоритет (то есть срочность) может зависеть от бизнес-контекста, сроков релиза и аудитории. Серьёзность (важность) — от технического влияния на продукт. При этом серьёзность и приоритет могут не только не совпадать по уровням, но и конфликтовать.</p><p>Например, на главной странице в названии компании замечена опечатка. Это 4-ый уровень серьёзности: сайт работает, ничего не сломано. Но при этом 1-ый уровень приоритета: ведь сайт — лицо компании, и отдел маркетинга требует исправить «ещё вчера». Что делать в подобном случае? Зависит от корпоративных правил и коммуникаций.</p><p>Важно обращать внимание на детали из контекста. Например: критическая утечка данных (уровень 1 серьезности) требует немедленного исправления (уровень 1 приоритета). Но баг с крашем приложения в редком сценарии и приоритетом 2-го уровня, если затронуты всего 0.1% пользователей. Или, допустим, сломалась опция «Экспорт в PDF» (это уровень 3 серьёзности), но клиент заплатил за неё высокую цену — значит, повышаем срочность.</p><h2>Инструментарий охотника за багами: от нахождения до профилактики</h2><p>Как превратить борьбу с ошибками из хаотичного тушения пожаров в контролируемый процесс? Нужен комплексный подход к «охоте на баги».</p><p>Поимка бага — лишь начало битвы. Настоящее мастерство проявляется в эффективном управлении его жизненным циклом: фиксация, приоритезация, анализ, исправление, профилактика. Давайте рассмотрим основные категории этого инструментария.</p><h3>Системы отслеживания ошибок (Bug Trackers): центр управления полётами</h3><p>Когда баг обнаружен, нужно выстраивать систему для регистрации, классификации, назначения, отслеживания статуса и анализа истории ошибок. Здесь в бой вступают специализированные трекеры.</p><p>Jira: мощный и гибкий инструмент с глубокими возможностями кастомизации и интеграцией практически с любой DevOps-тулчейн. Однако его богатство функций может быть избыточным и сложным для освоения в маленьких командах.</p><p>YouTrack (JetBrains): трекер отличает скорость и «умный» поиск (на естественном языке), тесная интеграция с IDE JetBrains и GitHub. Часто воспринимается как более легковесная и быстрая альтернатива Jira для команд, ценящих эффективность.</p><p>Linear: продукт с минималистичным UI, упором на клавиатурные сокращения. Подходит для стартапов и небольших команд, где важен фокус и отсутствие накладных расходов на управление самим трекером.</p><p>GitHub Issues / GitLab Issues: интегрированы напрямую в репозиторий. Удобны для open-source проектов и команд, чья разработка тесно завязана на Git-операциях (мердж-реквесты, коммиты). Прямая привязка багов к коду — их главный козырь.</p><h3>Системы мониторинга и сбора ошибок: радар, ловящий баги в реальном времени</h3><p>Что, если баг проявился у пользователя, а вы об этом ещё не знаете? Трекеры молчат, пока проблема не зафиксирована человеком. Системы мониторинга и сбора ошибок действуют на опережение, автоматически вылавливая сбои в работающем приложении.</p><p>Sentry: становится вашими глазами и ушами в продакшене. В реальном времени ловит исключения и ошибки на фронтенде (JavaScript, React, Vue и др.) и бэкенде (Python, Java, Node.js, Go и др.). Магия Sentry — в автоматической группировке схожих ошибок, алертах с детальным стектрейсом, контекстом (параметры запроса, данные пользователя) и даже возможностью записать шаги, приведшие к ошибке. Позволяет узнать о проблеме раньше, чем начнут сыпаться жалобы.</p><p>ELK Stack (Elasticsearch, Logstash, Kibana) / Grafana Loki: когда ошибка — лишь симптом, а корень проблемы спрятан глубоко в логике распределенной системы или инфраструктуре, нужен мощный анализ логов. Эти инструменты (особенно в паре со сборщиками логов по типу Fluentd или Promtail для Loki) собирают, индексируют и визуализируют гигантские объемы лог-данных со всех серверов и сервисов. Kibana и Grafana предоставляют мощные дашборды для поиска закономерностей, аномалий и первопричин сбоев.</p><h3>Инструменты для дебага: скальпель для вскрытия проблемы</h3><p>Когда баг локализован (благодаря трекеру и мониторингу), наступает время точечной работы — понять, почему он возникает и как исправить. Здесь незаменимы отладчики.</p><p>Browser DevTools (Chrome DevTools, Firefox Developer Tools): комфортный инструмент фронтенд-разработчика. Мощный отладчик JavaScript, инспектор DOM/CSS, детальный анализ сетевых запросов (заголовки, время, размеры), профилировщик производительности (выявление «бутылочных горлышек»), аудит безопасности и доступности — всё под рукой прямо в браузере.</p><p>IDE Debuggers (VS Code, IntelliJ IDEA, PyCharm и др.): дают суперспособность пошагового выполнения кода на бэкенде или даже на фронтенде (интегрируясь с браузером). Установка точек останова (breakpoints), просмотр состояния переменных в реальном времени, пошаговый проход (step into/over), оценка выражений на лету — это фундамент для понимания потока выполнения и нахождения логических ошибок.</p><h3>Инструменты для профилактики: строим оборону до появления врага</h3><p>Самые эффективные баги — те, которые никогда не попали в продакшен. Современные практики разработки делают ставку на автоматизированную профилактику ошибок на этапе написания кода. Вот ключевые союзники в этом:</p><ul><li>ESLint (JavaScript/TypeScript), статический анализатор кода — сканирует код до запуска, выявляя потенциальные баги, антипаттерны и нарушения соглашений по стилю. Находит опечатки, необъявленные переменные, опасные конструкции (напр., console.log в prod), потенциальные утечки памяти. Многие ошибки (например, сравнение == вместо === по правилу eqeqeq) может исправить автоматически (--fix). Интеграция в редактор (VS Code, WebStorm) и CI/CD пайплайны перехватывает ошибки мгновенно.</li><li>SonarQube (25+ языков) для непрерывного контроля качества кода. Идёт глубже ESLint, выискивая сложные баги, уязвимости безопасности (OWASP Top 10: SQL-инъекции, XSS) и «запахи кода», ведущие к будущим проблемам. Выявляет критические ошибки: разыменование null (Null Pointer Exception), утечки ресурсов (файлы, соединения), возможные состояния гонки (race conditions). Оценивает технический долг и ключевые метрики (сложность кода, покрытие тестами), помогая поддерживать здоровье кодовой базы. Работает как часть CI/CD, предоставляя наглядные дашборды.</li><li>Prettier (50+ языков) бескомпромиссно применяет единые стилистические правила (отступы, точки с запятой, переносы строк, кавычки). Устраняет целый класс потенциальных ошибок, связанных с неочевидной работой парсера из-за форматирования (напр., Automatic Semicolon Insertion в JS). Фокусирует код-ревью на логике, а не на пробелах.</li><li>Проактивная профилактика: Prettier, ESLint, SonarQube автоматически блокируют огромный пласт рутинных ошибок и уязвимостей до того момента, как код попадет в репозиторий или сборку.</li><li>Раннее выявление: Sentry, ELK/Loki мгновенно сигнализируют о сбоях в работе приложения, минимизируя время реакции и воздействие на пользователей.</li><li>Эффективный менеджмент: Jira, YouTrack, Linear, GitHub Issues обеспечат прозрачность, контроль и анализ потока ошибок.</li><li>DevTools, IDE Debuggers дают разработчику возможность точно диагностировать и исправлять корневые причины сложных багов.</li></ul><p>Важно: максимальный эффект достигается при интеграции этих инструментов в CI/CD пайплайн. Prettier, ESLint и статический анализ SonarQube должны запускаться автоматически на каждый пул-реквест, блокируя мердж в основную ветку при обнаружении проблем. Сборка с ошибками или уязвимостями просто не должна попадать дальше. Это создает культуру качества и экономит сотни часов на исправлении «глупых» багов, позволяя команде сосредоточиться на сложных задачах и инновациях.</p>]]></content:encoded>
    </item>
    <item>
      <title>LSP-плагины в IntelliJ теперь работают бесплатно и без Ultimate-подписки</title>
      <link>https://tproger.ru/news/--lsp-plaginy-v-intellij-teper-rabotayut-besplatno-i-bez-ultimate-podpiski</link>
      <comments>https://tproger.ru/news/--lsp-plaginy-v-intellij-teper-rabotayut-besplatno-i-bez-ultimate-podpiski?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Булат Яббаров]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/--lsp-plaginy-v-intellij-teper-rabotayut-besplatno-i-bez-ultimate-podpiski</guid>
      <description><![CDATA[<p>JetBrains сделала поддержку LSP-плагинов в IntelliJ бесплатной: с версии 2025.2 они работают и без подписки Ultimate, в fallback-режиме</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/--lsp-plaginy-v-intellij-teper-rabotayut-besplatno-i-bez-ultimate-podpiski">LSP-плагины в IntelliJ теперь работают бесплатно и без Ultimate-подписки</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[Рефакторинг]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Intel]]></category>
      <category><![CDATA[JetBrains]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 02 Sep 2025 04:05:04 GMT</pubDate>
      <content:encoded><![CDATA[<p>JetBrains открыла поддержку LSP-плагинов в бесплатном режиме IntelliJ IDEA.</p><p>Это значит, что даже без подписки Ultimate вы сможете использовать и разрабатывать плагины на основе Language Server Protocol.</p><h2>Что произошло?</h2><p>JetBrains продолжает переход к <b>единой дистрибуции</b> IntelliJ IDEA — начиная с версии 2025.3, будет один установщик для всех пользователей, вне зависимости от подписки.</p><p>Уже в версии 2025.2 вступает в силу новый <b>fallback-режим</b>. Это бесплатный уровень для пользователей с истекшей подпиской, в котором доступен ограниченный набор возможностей IDE.</p><p>Одна из ключевых новостей: <b>поддержка LSP API теперь входит в этот бесплатный набор</b>. Ранее такая возможность была только в Ultimate-редакции, но впредь плагины на основе LSP можно запускать и без платной лицензии.</p><h2>Что это значит для разработчиков плагинов?</h2><p>Если вы пишете плагины на базе <b>Language Server Protocol</b>, они станут доступны куда более широкой аудитории — не только платным пользователям IntelliJ Ultimate, но и тем, кто работает в бесплатном режиме.</p><p>Важно: <b>поддержка LSP исчезнет из Community Edition</b> (она будет выведена из обращения после релиза 2025.2), так что fallback-режим станет основным способом бесплатного использования LSP в IntelliJ. Чтобы использовать LSP в своих плагинах, нужно:</p><ul><li>Таргетить IntelliJ IDEA Ultimate 2025.2.1 или новее.</li><li>Указать опциональную зависимость на модуль com.intellij.modules.lsp.</li></ul><h2>Что умеет LSP в IntelliJ?</h2><p>LSP API в платформе IntelliJ уже поддерживает:</p><ul><li>Подсказки с resolve-поддержкой.</li><li>Переход к определению.</li><li>Документацию при наведении.</li><li>Диагностику.</li><li>Code actions и быстрые фиксы.</li><li>Форматирование документов.</li></ul><p>В то же время представители JetBrains подчеркивают, что <b>LSP — это не замена PSI</b>. Встроенная PSI-система остается основой глубокой интеграции языков в IDE и именно она обеспечивает расширенные функции вроде рефакторинга, анализа кода и т.д.</p><p>LSP — более универсальный, но менее производительный и менее гибкий подход.</p><h2>Что дальше?</h2><p>Полный переход случится с релизом 2025.3, когда Community Edition перестанет существовать как отдельная сборка, а fallback-режим станет основной бесплатной точкой входа.</p><p>Уже сейчас разработчики плагинов могут адаптироваться к новым условиям и проверять, как их LSP-плагины работают в новом режиме.</p>]]></content:encoded>
    </item>
    <item>
      <title>xAI представила grok-code-fast-1 — свою первую ИИ-модель для кодинга и агентных задач</title>
      <link>https://tproger.ru/news/--xai-predstavila-grok-code-fast-1---svoyu-pervuyu-ii-model-dlya-kodinga-i-agentnyh-zadach</link>
      <comments>https://tproger.ru/news/--xai-predstavila-grok-code-fast-1---svoyu-pervuyu-ii-model-dlya-kodinga-i-agentnyh-zadach?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Булат Яббаров]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/--xai-predstavila-grok-code-fast-1---svoyu-pervuyu-ii-model-dlya-kodinga-i-agentnyh-zadach</guid>
      <description><![CDATA[<p>xAI выпустила grok-code-fast-1 — первую модель для кодинга и агентных задач. Она поддерживает TypeScript, Python, Java, Rust, C++ и Go, интегрирована в IDE и CLI, работает быстро (до 160 ток/с) и стоит дешевле конкурентов</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/--xai-predstavila-grok-code-fast-1---svoyu-pervuyu-ii-model-dlya-kodinga-i-agentnyh-zadach">xAI представила grok-code-fast-1 — свою первую ИИ-модель для кодинга и агентных задач</a>»</p>]]></description>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[C++]]></category>
      <category><![CDATA[Git]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[Искусственный интеллект]]></category>
      <category><![CDATA[GitHub]]></category>
      <category><![CDATA[TypeScript]]></category>
      <category><![CDATA[Rust]]></category>
      <category><![CDATA[OpenAI]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 29 Aug 2025 11:10:09 GMT</pubDate>
      <content:encoded><![CDATA[<p>Компания xAI <a href="https://x.ai/news/grok-code-fast-1">анонсировала</a> <b>grok-code-fast-1</b>. Это первая модель компании, ориентированная на программирование и агентные сценарии.</p><p>Модель создана с нуля, обучена на реальных пулл-реквестах и задачах из практики. Она уже доступна в IDE.</p><h2>Новая глава в «вайб-кодинге»</h2><p>Модель grok-code-fast-1 от xAI позиционируется как конкурент решениям от OpenAI, Google и Anthropic. Она оптимизирована для разработки на <b>TypeScript</b>, <b>Python</b>, <b>Java</b>, <b>Rust</b>, <b>C++</b> и <b>Go</b>, а значит покрывает большинство реальных кейсов в современной разработке.</p><p>Модель уже интегрирована в <i>IDE</i> и <i>CLI</i> вроде <b>GitHub Copilot</b>, <b>Cursor</b>, <b>Cline</b>, <b>Roo Code</b>, <b>Kilo Code</b>, <b>OpenCode</b> и <b>Windsurf</b>. В ближайшее (но ограниченное) время она будет доступна бесплатно.</p><h2>Быстрая, дешевая и довольно-таки умная</h2><p>xAI делает ставку на цену, скорость и удобство. Стоимость использования grok-code-fast-1:</p><ul><li><b>$0,20</b> за 1 млн входных токенов</li><li><b>$1,50</b> за 1 млн выходных токенов</li><li><b>$0,02</b> за 1 млн кэшированных входных токенов</li></ul><p>Во внутреннем бенчмарке <b>SWE-Bench-Verified,</b> модель показала результат <b>70,8%</b>, но независимых тестов пока нет — их ждут в ближайшие недели.</p><p>В xAI утверждают, что при создании модели основное внимание уделялось <b>практическому использованию и удобству в реальных задачах</b>. Якобы разработчики оценили grok-code-fast-1 как «быструю и надежную» при повседневной работе с кодом.</p><figure><img src="https://media.tproger.ru/user-uploads/111041/2025-08-29/0ff28520-4f6d-495d-bb2e-78175b8e78f2.jpeg" alt="" /></figure><h2>До 160 токенов в секунду и 90% кэш-хитов</h2><p>Команды xAI по инференсу и суперкомпьютингу применили ряд новых приемов, чтобы <b>ускорить генерацию до 160 токенов в секунду</b>. Особенно это ощущается в IDE, где задержка — критический параметр.</p><p>Кроме того, реализовано <b>кэширование подсказок</b>, которое обеспечивает <b>до 90% попаданий</b> при работе с GitHub Copilot и другими интеграциями. Это позволяет существенно сократить задержки и стоимость использования.</p>]]></content:encoded>
    </item>
    <item>
      <title>Программист с 40-летним стажем проверил, заменит ли его ChatGPT — и сделал неожиданный вывод</title>
      <link>https://tproger.ru/news/programmist-s-40-letnim-stazhem-proveril--zamenit-li-ego-chatgpt---i-sdelal-neozhidannyj-vyvod</link>
      <comments>https://tproger.ru/news/programmist-s-40-letnim-stazhem-proveril--zamenit-li-ego-chatgpt---i-sdelal-neozhidannyj-vyvod?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Булат Яббаров]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/programmist-s-40-letnim-stazhem-proveril--zamenit-li-ego-chatgpt---i-sdelal-neozhidannyj-vyvod</guid>
      <description><![CDATA[<p>Программист с 40-летним опытом проверил ChatGPT и другие ИИ в разработке: ИИ ускоряет работу и вдохновляет, но не заменяет опыт инженера</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/programmist-s-40-letnim-stazhem-proveril--zamenit-li-ego-chatgpt---i-sdelal-neozhidannyj-vyvod">Программист с 40-летним стажем проверил, заменит ли его ChatGPT — и сделал неожиданный вывод</a>»</p>]]></description>
      <category><![CDATA[Головоломки]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[Искусственный интеллект]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[Навыки]]></category>
      <category><![CDATA[OpenAI]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 29 Aug 2025 03:38:24 GMT</pubDate>
      <content:encoded><![CDATA[<p>Марко Бенедетти, разработчик с 40 годами опыта, <a href="https://levelup.gitconnected.com/vibe-coding-as-a-coding-veteran-cd370fe2be50">провел</a> необычный эксперимент: в течение двух недель он писал проект вместе с ИИ-ассистентами.<b> </b></p><p>Его цель — понять, заменяет ли ИИ навыки, которые он оттачивал всю жизнь. Ответ оказался несколько сложнее, чем «да» или «нет».</p><h2>«Я позволил ИИ писать весь код. Сам я не написал ни строчки»</h2><p>Проект, над которым работал разработчик, — решатель головоломки «Ханойская башня», написанный на Python. Объем — около 5000 строк кода, 50 файлов, 20 классов.</p><p>Все идеи, архитектура, логи и алгоритмы были созданы через диалог с ИИ: <b>Claude Sonnet 4</b>, <b>OpenAI GPT-o3</b> и <b>Google Gemini Pro 2.5</b>. Бенедетти использовал <b>IDE Cursor</b>, которая интегрирует ИИ в рабочий процесс.</p><blockquote>Я не писал код. Я вел диалог с ИИ, задавал вопросы, уточнял детали, направлял. Это было похоже на парное программирование с очень умным напарником, который говорит на моем языке — и думает быстрее меня.</blockquote><h2>«ИИ удивлял — и ошибался. Но вместе мы сделали больше»</h2><p>Разработчик отмечает, что <b>код, создаваемый ИИ, часто превосходит по качеству</b> то, что он написал бы сам. Однако 20% времени уходило на исправление ошибок и «творческих решений» ассистента:</p><ul><li>ИИ предлагал слишком сложные архитектуры;</li><li>создавал громоздкий и дублирующийся код;</li><li>делал логические ошибки — например, неверно определял оптимальность алгоритма;</li><li>добавлял баги, которые прошли юнит-тесты из-за ошибок самих тестов.</li></ul><p>Тем не менее, скорость работы, по его оценке, <b>выросла как минимум вдвое</b>.</p><blockquote>Где-то ИИ спасал мне 10 минут, где-то экономил часы. Главное — я постоянно учился у него</blockquote><h2>«Вместе мы вошли в поток — но на другом уровне»</h2><p>Бенедетти подчеркивает: программирование с ИИ вызывает то же ощущение «потока», как и классическая разработка. Только теперь этот поток — не от строчек кода, а от <b>идей к готовой реализации</b> через диалог.</p><blockquote>Я задавал вопрос — и получал не просто решение, а грамотную, порой даже остроумную реализацию. Временами я чувствовал, что говорю не с ассистентом, а с равным коллегой.</blockquote><h2>«ИИ — не замена, а усилитель. Но только если ты сам понимаешь, что делаешь»</h2><p>По мнению разработчика, ИИ может быть опасен для новичков, которые <b>не в силах критически оценивать результат</b>. Он подчеркивает: нельзя «просто доверять коду» — нужно <b>уметь читать, понимать и направлять ИИ</b>.</p><blockquote>ИИ — это как мощный велосипед. Он может разогнаться до бешеной скорости. Но в руках неподготовленного — приведет к аварии.</blockquote><p>Также он отмечает, что <b>ИИ склонен навязывать «индустриальные» решения</b> даже там, где проект требует простоты и ясности — и это стоит учитывать.</p><h2>«Я больше не буду программировать без ИИ»</h2><p>Эксперимент завершился положительным выводом: <b>ИИ стал для него незаменимым помощником</b>. Он помог писать быстрее, увереннее и с бóльшим удовольствием.</p><blockquote>Я, пожалуй, больше никогда не буду писать код без ИИ-ассистента. Это слишком эффективно. И слишком увлекательно.</blockquote><p>Однако Бенедетти подчеркивает, что ИИ не «заменил» его как программиста. Напротив — <b>помог стать лучше</b>.</p><blockquote>Именно взаимодействие с ИИ сделало меня сильнее как разработчика. Он — мой собеседник, помощник, оппонент. А не инструмент, который пишет за меня.</blockquote>]]></content:encoded>
    </item>
    <item>
      <title>В ИИ-редакторе кода Zed от создателей Atom появится собственная замена Git</title>
      <link>https://tproger.ru/news/ii-redaktor-koda-zed-ot-sozdatelej-atom-poluchil--35-mln-investicij</link>
      <comments>https://tproger.ru/news/ii-redaktor-koda-zed-ot-sozdatelej-atom-poluchil--35-mln-investicij?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Булат Яббаров]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/ii-redaktor-koda-zed-ot-sozdatelej-atom-poluchil--35-mln-investicij</guid>
      <description><![CDATA[<p>Создатели Atom и Electron привлекли $35 млн для развития Zed — ИИ-редактора кода с реальным временем и новой системой версионности DeltaDB</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/ii-redaktor-koda-zed-ot-sozdatelej-atom-poluchil--35-mln-investicij">В ИИ-редакторе кода Zed от создателей Atom появится собственная замена Git</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[Git]]></category>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[Искусственный интеллект]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Rust]]></category>
      <category><![CDATA[Сервисы]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 22 Aug 2025 04:16:32 GMT</pubDate>
      <content:encoded><![CDATA[<p>Команда бывших разработчиков Atom, Electron и Tree-sitter получила $35 млн инвестиций на развитие Zed — нового открытого редактора кода с фокусом на ИИ и совместной работе в реальном времени.</p><p>Раунд возглавил венчурный фонд Sequoia Capital. С учетом предыдущих вложений, общая сумма финансирования проекта превысила $42 млн.</p><p>Проект возглавляет Натан Собо — создатель Atom, который в свое время стал архитектурной основой для VS Code.</p><p>Новые инвестиции позволят команде выйти за рамки построения UI и приступить к реализации глубокой интеграции ИИ в рабочий процесс разработки, а также представить собственную систему управления версионностью под названием DeltaDB.</p><h2>Что такое DeltaDB</h2><p>DeltaDB — это система, которая позволяет отслеживать изменения в коде с точностью до каждой операции редактирования.</p><p>В отличие от Git, который фиксирует состояние проекта по коммитам, DeltaDB формирует непрерывную временную шкалу изменений, в которую можно «вклиниваться» в любой момент — для обсуждения, анализа или интеграции.</p><p>Ключевое отличие — обсуждение изменений в реальном времени. Комментарии можно оставлять не к коммитам или diff’ам, а к конкретным правкам, строчкам, перемещениям или удалению кода. Это создает новое пространство для командной работы: обсуждение становится постоянным фоном, а не разрозненными ветками ревью.</p><p>DeltaDB спроектирована как надстройка над Git — она не отменяет git-репозиториев, а расширяет их возможностями детального отслеживания и сотрудничества в реальном времени.</p><h2>Работа с ИИ — в том же контексте</h2><p>Разработчики делают акцент на том, что обсуждения в Zed охватывают не только взаимодействие между людьми, но и с ИИ-моделями. Это означает, что подсказки от ИИ можно будет сохранять, обсуждать и возвращаться к ним в контексте правок, а не просто как ответы на запросы в отдельном чате.</p><h2>Что еще важно</h2><ul><li>Zed написан на Rust.</li><li>Редактор доступен с открытым исходным кодом. Сам редактор — под GPLv3, серверная часть для многопользовательского редактирования — под AGPLv3, интерфейсная библиотека GPUI — под Apache 2.0.</li><li>GPUI использует GPU для отрисовки интерфейса, что обеспечивает высокую отзывчивость и плавную работу редактора.</li></ul><h2>Zedless: альтернатива для тех, кто хочет полной автономности</h2><p>На базе Zed развивается форк Zedless, ориентированный на пользователей, которым критична конфиденциальность.</p><p>Удалены компоненты, отправляющие телеметрию, отключены внешние сервисы, все сетевые функции можно полностью контролировать. Участие в разработке возможно без подписания CLA и передачи имущественных прав на код.</p>]]></content:encoded>
    </item>
    <item>
      <title>Глава AWS: «Заменять джуниоров на ИИ — одна из самых глупых идей»</title>
      <link>https://tproger.ru/news/glava-aws---zamenyat-dzhuniorov-na-ii---odna-iz-samyh-glupyh-idej-</link>
      <comments>https://tproger.ru/news/glava-aws---zamenyat-dzhuniorov-na-ii---odna-iz-samyh-glupyh-idej-?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Булат Яббаров]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/glava-aws---zamenyat-dzhuniorov-na-ii---odna-iz-samyh-glupyh-idej-</guid>
      <description><![CDATA[<p>Глава AWS Мэтт Гарман назвал замену джуниоров на ИИ «глупой идеей», подчеркнув их роль в будущем кадровом резерве и росте бизнеса</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/glava-aws---zamenyat-dzhuniorov-na-ii---odna-iz-samyh-glupyh-idej-">Глава AWS: «Заменять джуниоров на ИИ — одна из самых глупых идей»</a>»</p>]]></description>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Google]]></category>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[Искусственный интеллект]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[GitHub]]></category>
      <category><![CDATA[Навыки]]></category>
      <category><![CDATA[Amazon]]></category>
      <category><![CDATA[Образование]]></category>
      <category><![CDATA[OpenAI]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 20 Aug 2025 10:23:23 GMT</pubDate>
      <content:encoded><![CDATA[<p>Генеральный директор Amazon Web Services (AWS) Мэтт Гарман раскритиковал компании, которые стремятся заменить младших разработчиков искусственным интеллектом.</p><p>В подкасте <i>Matthew Berman Show</i> он <a href="https://www.businessinsider.com/amazon-cloud-chief-replacing-junior-staff-ai-matt-garman-2025-8">назвал</a> это «одной из самых глупых идей», которые он когда-либо слышал.</p><h2>Почему это плохая стратегия</h2><p>По словам Гармана, джуниоры — одни из самых недорогих и гибких сотрудников. Они активно осваивают инструменты ИИ и растут вместе с ними.</p><p>Если компания откажется от найма младших специалистов, это ударит по ее кадровому резерву в будущем:</p><blockquote>Что вы будете делать через 10 лет, если у вас не будет людей, которые чему-то научились и выросли внутри компании?</blockquote><p>Гарман считает, что бизнес должен продолжать нанимать выпускников и обучать их фундаментальным навыкам: как разбирать задачи, писать код и применять лучшие инженерные практики.</p><h2>Университетское образование теряет монополию</h2><p>Также он отметил, что в условиях экономики, где ИИ играет ключевую роль, ценность не в конкретных дипломах, а в гибкости и способности адаптироваться:</p><blockquote>Если вы потратите годы на изучение одного узкого направления и решите стать в нем экспертом на 30 лет вперед — могу с уверенностью сказать: это не сработает.</blockquote><p>Вместо этого он рекомендует развивать критическое мышление, креативность и готовность к изменениям.</p><h2>Что говорят другие эксперты</h2><p>Заявление Гармана резко контрастирует с позицией некоторых лидеров индустрии. Например:</p><ul><li><b>Сэм Альтман (OpenAI)</b> ранее сравнил ИИ-агентов с младшими сотрудниками, чья работа все чаще автоматизируется.</li><li><b>Джефф Дин (Google)</b> заявил, что ИИ достиг уровня, на котором может повторить навыки начинающего инженера — и это произойдет уже в ближайший год.</li><li>По данным <b>Goldman Sachs</b>, безработица среди молодых специалистов в IT (20–30 лет) выросла почти на 3% с начала 2024 года — в четыре раза быстрее, чем в среднем по рынку.</li></ul><h2>Почему джуниоры все еще важны</h2><p>Однако не все считают, что молодые кадры устарели. CEO GitHub Томас Домке также отметил: именно начинающие инженеры быстрее всего адаптируются к новым технологиям, включая ИИ:</p><blockquote>Они не ограничены подходом «мы всегда делали так». Для них ИИ — это естественный инструмент, а не революция.</blockquote>]]></content:encoded>
    </item>
    <item>
      <title>Apple Xcode 26 получит нативную интеграцию Claude Sonnet 4.0 и Opus 4 от Anthropic</title>
      <link>https://tproger.ru/news/--apple-xcode-26-poluchit-nativnuyu-integraciyu-claude-sonnet-4-0-i-opus-4-ot-anthropic</link>
      <comments>https://tproger.ru/news/--apple-xcode-26-poluchit-nativnuyu-integraciyu-claude-sonnet-4-0-i-opus-4-ot-anthropic?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Булат Яббаров]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/--apple-xcode-26-poluchit-nativnuyu-integraciyu-claude-sonnet-4-0-i-opus-4-ot-anthropic</guid>
      <description><![CDATA[<p>Xcode 26 beta получил нативную поддержку Claude Sonnet 4.0 и Opus 4 от Anthropic, расширив функцию Intelligence наряду с ChatGPT</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/--apple-xcode-26-poluchit-nativnuyu-integraciyu-claude-sonnet-4-0-i-opus-4-ot-anthropic">Apple Xcode 26 получит нативную интеграцию Claude Sonnet 4.0 и Opus 4 от Anthropic</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[Apple]]></category>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[Искусственный интеллект]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Swift]]></category>
      <category><![CDATA[OpenAI]]></category>
      <category><![CDATA[Бета]]></category>
      <category><![CDATA[Xcode]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 20 Aug 2025 04:51:01 GMT</pubDate>
      <content:encoded><![CDATA[<p>В бета-версии Xcode 26 появилась явная поддержка моделей Claude от компании Anthropic.</p><p>Журналисты с сайта 9to5Mac <a href="https://9to5mac.com/2025/08/18/apple-preps-native-claude-integration-on-xcode/">выяснили</a>, что Apple добавила в IDE встроенную авторизацию через Anthropic-аккаунт, а также нашли упоминания моделей Claude Sonnet 4.0 и Claude Opus 4, выпущенной 14 мая 2025 года.</p><h2>Что это значит для разработчиков</h2><p>Хотя официально в Xcode пока представлена только интеграция с ChatGPT от OpenAI, свежая находка указывает на то, что Anthropic получит такой же уровень встроенной поддержки — без необходимости подключать API вручную. Это может стать значимым шагом для разработчиков, использующих Claude как основную LLM.</p><p>Напомним, что ранее Claude можно было подключить только через внешний API (как и другие сторонние модели). Теперь же Apple, по сути, приближает Anthropic к статусу, который до этого был лишь у OpenAI.</p><h2>Эволюция Swift Assist</h2><p>Функция Swift Assist была анонсирована ещё на WWDC 2024 как альтернатива GitHub Copilot. Идея заключалась в создании встроенного ИИ-помощника, который помогает писать код, разбираться в API Apple и работать с фреймворками.</p><p>Однако Swift Assist так и не был запущен в оригинальном виде. Вместо этого в Xcode 26 появляется более гибкий механизм под общим названием Intelligence с поддержкой:</p><ul><li>моделей Apple;</li><li>встроенного ChatGPT (с ограничением по количеству запросов, если не авторизован);</li><li>сторонних моделей по API;</li><li>и теперь — Anthropic с полноценной нативной интеграцией.</li></ul><h2>Что нашли в Xcode 26 beta 7</h2><p>По данным 9to5Mac, в последней бете IDE обнаружены:</p><ul><li>внутренние ссылки на Anthropic-аккаунты;</li><li>параметры выбора между Claude Sonnet и Opus;</li><li>конфигурационные файлы, намекающие на более глубокую интеграцию Claude в системы Apple, включая Siri и Writing Tools.</li></ul><p>Это может означать, что Claude появится не только в Xcode, но и в других частях экосистемы — в качестве альтернативы ChatGPT.</p><h2>Почему это важно</h2><p>Claude — один из наиболее точных и аккуратных LLM, ориентированных на безопасность и детальность в генерации кода. Многие разработчики считают Opus и Sonnet лучшими ассистентами на рынке.</p><p>Поддержка этих моделей в Xcode может повлиять на выбор инструмента для ежедневной работы, особенно среди тех, кто не хочет использовать OpenAI.</p><p>Apple пока не делала официальных заявлений о Claude в Xcode, но по текущим данным это лишь вопрос времени. Интеграция может быть активирована уже в ближайших обновлениях Xcode 26.</p>]]></content:encoded>
    </item>
    <item>
      <title>Что можно накодить на телефоне и какие приложения для этого подходят</title>
      <link>https://tproger.ru/articles/chto-mozhno-nakodit-na-telefone-i-kakie-prilozheniya-dlya-etogo-podhodyat</link>
      <comments>https://tproger.ru/articles/chto-mozhno-nakodit-na-telefone-i-kakie-prilozheniya-dlya-etogo-podhodyat?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Вадим Егорцев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/chto-mozhno-nakodit-na-telefone-i-kakie-prilozheniya-dlya-etogo-podhodyat</guid>
      <description><![CDATA[<p>Подборка топовых мобильных IDE и редакторов, которые помогают фронтенд и бэкенд разработчикам писать код прямо со своего телефона.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/chto-mozhno-nakodit-na-telefone-i-kakie-prilozheniya-dlya-etogo-podhodyat">Что можно накодить на телефоне и какие приложения для этого подходят</a>»</p>]]></description>
      <category><![CDATA[Мобильная разработка]]></category>
      <category><![CDATA[IDE]]></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>Mon, 11 Aug 2025 10:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>К сожалению, в смартфонах нет среды разработки по типу VS Code, которая одинаково хорошо работает с Python, C++, Java и другими ЯП. Приходится выбирать между десятками приложений, упираясь в ограниченный функционал.</p><p>Мы собрали лучшие инструменты для мобильного программирования: от простых редакторов до IDE с компиляторами и отладчиками. Вы узнаете про приложения для фронтенда и бэкенда. Мы затронем тему вайб-кодинга и даже расскажем, как установить Linux-терминал поверх Android или iOS.</p><p><i>Ссылки на приложения опубликовали в комментариях.</i></p><h2>CodePen</h2><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-07-25/360b9812-798c-4579-a75e-f7d86bc630b4.jpg" alt="" /></figure><ul><li>Приложение для браузера: ✅</li><li>Приложение для Android: ✅</li><li>Приложение для iOS: ❌</li></ul><p>Обзор начнём с онлайн-платформы для фронтендеров <b>CodePen</b>. Песочница работает с HTML, CSS, JS. С её помощью разработчики обмениваются идеями, создают прототипы и обучаются вёрстке. CodePen ценят за простоту – открыл песочницу, написал код, увидел результат.</p><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-07-25/561609f4-d3be-44bf-9849-6abb016e0934.jpg" alt="" /><figcaption>Страница разработчика с популярными пэнами</figcaption></figure><p>Проекты называются «пэнами», ими можно делиться с другими пользователями. Ещё есть лента, где публикуют интересные работы с открытым кодом. Проекты можно копировать себе, оценивать и комментировать.</p><p>CodePen поддерживает 7 фреймворков, 5 библиотек и 24 набора UI-компонентов. Возможности ограничены только мощностью устройства: превью тяжёлых пэнов на телефоне будет лагать.</p><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-07-25/45678e1b-f327-4666-90b7-467485a3da08.jpg" alt="" /><figcaption>Пример тяжёлого пэна, его превью не тянет даже ноутбук с 16 Гб ОЗУ</figcaption></figure><p>На бесплатном тарифе можно создавать неограниченное количество пэнов, коллекций и шаблонов. Единственное неудобство – добавлять картинки нужно через альтернативный хостинг. За $8 в месяц можно грузить картинки напрямую, работать в команде с коллегами, создавать личные пэны, которые закрыты от других пользователей.</p><h2>Code Editor</h2><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-07-25/7c54b2a9-24e2-432c-b1dd-2273b30bf749.jpg" alt="" /></figure><ul><li>Веб-приложение: ❌</li><li>Приложение на Android: ✅</li><li>Приложение на iOS: ✅</li></ul><p>Универсальный редактор <b>Code Editor</b> подсвечивает синтаксис 110+ языков. В приложении есть поиск и замена символов, отображение и скрытие строк, выделение совпадающих скобок, автоматические отступы.</p><p>Фронтендеры скачивают Code Editor  ради предпросмотра HTML и плагина <a href="https://tproger.ru/articles/kak-plagin-emmet-pomogaet-uskorit-rabotu-s-programmnym-kodom">Emmet</a>. Также через встроенную консоль удобно тестировать и отлаживать JS-скрипты.</p><p>Приложение распознает комбинации клавиш, поэтому к телефону можно подключить физическую клавиатуру и кодить как за маленьким монитором.</p><p>Code Editor поддерживает FTP, FTPS, SFTP и WebDAV для работы с удалёнными серверами. Ещё в приложение добавили Google Диск, Dropbox и GitHub, чтобы синхронизировать файлы между устройствами.</p><h2>Acode</h2><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-07-25/75cf8fe0-b50f-409d-ae14-e452e2c8b833.jpg" alt="" /></figure><ul><li>Веб-приложение: ❌</li><li>Приложение на Android: ✅</li><li>Приложение на iOS: ❌</li></ul><p>Редактор <b>Acode </b>охватывает 100+ языков программирования. Приложение оптимизировано для работы с файлами до 50000 строк. Acode выбирают для мобильной разработки, быстрых правок и обучения программированию.</p><p>Встроенный просмотр HTML и Emmet ускоряет вёрстку. В JS-консоли можно тестировать код фрагментами без создания отдельных файлов. Веб-сайты запускаются прямо в браузере приложения. Ещё редактор поддерживает GitHub, FTP/SFTP для работы с удалёнными серверами.</p><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-07-25/b4a7cd0d-144f-48a8-83ba-d33d8068be6d.jpg" alt="" /><figcaption>Acode на планшете</figcaption></figure><p>Плагины расширяют функционал Acode. Например, можно установить эмулятор терминала или добавить ИИ-агента от популярных провайдеров.</p><h2>Pydroid, Cxxdroid, Jvdroid</h2><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-07-25/1bb83185-6c33-425a-93ba-6962bf94ca3b.jpg" alt="" /></figure><ul><li>Веб-приложение: ❌</li><li>Приложение на Android: ✅</li><li>Приложение на iOS: ❌</li></ul><p>Приложения от одного разработчика не случайно объединили в один раздел – это лучшие мобильные IDE для Python, C/C++ и Java. Каждое заточено под конкретный ЯП, но все построены на одной архитектуре и предлагают схожий функционал.</p><p>IDE работают автономно – интернет нужен только для скачивания дополнений. В каждом приложении есть терминал, примеры кода для обучения, система управления пакетами и библиотеками.</p><p>Редакторы поддерживают:</p><ul><li>подсветку синтаксиса,</li><li>работу с вкладками,</li><li>расширенную клавиатуру,</li><li>быструю публикацию кода на Pastebin.</li></ul><p><b>Pydroid 3</b> – самое функциональное приложение из тройки. Это интерпретатор Python 3 с менеджером пакетов pip и готовыми библиотеками для data science:</p><ul><li>numpy,</li><li>scipy,</li><li>matplotlib,</li><li>scikit-learn,</li><li>jupyter.</li></ul><p>В премиум-версии доступны OpenCV, TensorFlow и PyTorch.</p><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-07-25/e88e3e40-26f7-45e7-9fde-a8b7902622c2.jpg" alt="" /><figcaption>IDE для Python</figcaption></figure><p>Есть поддержка GUI-приложений через Tkinter, Kivy с SDL2-бэкендом и PySide 6. Также встроен компилятор C/C++/Fortran для сборки нативных библиотек и Cython.</p><p>Отладчик PDB работает с точками останова. Приложение определяет используемые библиотеки и переключается на соответствующий режим выполнения. Ещё редактор автоматически ставит отступы и предлагает навигацию по методам.</p><p><b>Cxxdroid </b>– это компилятор C/C++ на базе Clang с поддержкой ассемблера. В менеджере пакетов есть популярные библиотеки:</p><ul><li>Boost,</li><li>SQLite,</li><li>ncurses,</li><li>libcurl.</li></ul><p>Графические библиотеки SDL2, SFML и Allegro доступны в премиум-версии.</p><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-07-25/5104e1cb-3cc4-4aa3-8a81-391e933244f6.jpg" alt="" /><figcaption>IDE для C/C++</figcaption></figure><p>Разработчики заморочились над системой кэширования, которая ускоряет сборку в среднем в 3 раза, а при использовании Boost – до 33 раз. Также есть режим интерпретатора (REPL) на основе CERN Cling для интерактивной работы с кодом.</p><p>Архитектура приложения исключает падения IDE из-за ошибок в пользовательском коде – анализ и компиляция выполняются одним компилятором.</p><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-07-25/10db4050-fa2c-4f2f-830d-592b43f3422a.jpg" alt="" /><figcaption>IDE для Java</figcaption></figure><p><b>Jvdroid </b>работает на OpenJDK 11 – редактор поддерживает стандарты Java и jar-библиотек. Интегрирован с Maven для управления проектами и зависимостями. Компилятор оптимизирован с помощью Nailgun.</p><p>Приложение включает JShell для интерактивной работы с Java. Есть компиляция программ на Kotlin, Scala и Clojure через Maven. Ещё редактор показывает Javadoc для методов и классов.</p><h2>Replit</h2><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-07-25/043f2475-978b-4e3e-bcac-bc5140d757d3.png" alt="" /></figure><ul><li>Веб-приложение: ✅</li><li>Приложение на Android: ✅</li><li>Приложение на iOS: ✅</li></ul><p><b>Replit </b>– облачная IDE с ИИ-агентом. Вы получаете помощника, который создаёт проекты по промпту: описываете идею приложения, агент предлагает функции, генерирует код и деплоит в облако.</p><p>Ассистент автоматически разбивает большие файлы на части, оптимизирует работу с API, добавляет нужные библиотеки. Есть поддержка основных языков:</p><ul><li>Python,</li><li>JavaScript,</li><li>TypeScript,</li><li>C++,</li><li>HTML/CSS,</li><li>Java,</li><li>Ruby и десятки других.</li></ul><p>До 100 человек могут одновременно редактировать код. Готовые проекты деплоятся одним кликом. Доступна выделенная VM, автоскейлинг, деплой по запросу.</p><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-07-25/e3884f7c-bd41-4369-a705-beb9b44ced6c.jpg" alt="" /></figure><p>Встроенные инструменты:</p><ul><li>Автодополнение кода через Ghostwriter.</li><li>Поиск и исправление ошибок в реальном времени.</li><li>Модульное тестирование без настройки.</li><li>Интеграция с GitHub (автосинхронизация).</li><li>Аутентификация пользователей через Repl Auth.</li></ul><p>ИИ-агент поддерживает ограниченный набор технологий – Flask и Node.js. С React и другими фронтенд-фреймворками могут быть проблемы. Интеграции доступны только с OpenAI, Google, PostgreSQL и S3.</p><p>Официальные приложения для iOS и Android позволяют кодить прямо с телефона. Интерфейс адаптирован под сенсорные экраны, поддерживается голосовой ввод для общения с ассистентом.</p><p>Replit подходит для быстрого прототипирования, обучения и создания простых веб-приложений. ИИ-агент понравится тем, кто хочет воплотить идею в код без знаний разработки. Для сложных проектов не подойдет, но для MVP и экспериментов – хороший выбор.</p><h2>Termux (iSH Shell)</h2><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-07-25/6df9c91d-c8dd-45de-b277-25abc5d28f97.jpg" alt="" /></figure><ul><li>Веб-приложение: ❌</li><li>Приложение на Android: ✅</li><li>Приложение на iOS: ✅</li></ul><p><b>Termux </b>– это полноценный Linux-терминал для Android. В отличие от редакторов кода, вы получаете ОС со всеми инструментами программиста. Можно работать с любыми языками программирования, компилировать код, устанавливать библиотеки, подключать базы данных, настраивать веб-серверы.</p><p>После установки в приложении вы увидите только чёрный экран – это Linux-терминал. Графического интерфейса нет, всё управляется командами.</p><p>Перед работой обновите систему:</p><p>Первая команда проверяет доступные обновления, вторая их устанавливает. На все вопросы отвечайте «Y».</p><p>Termux используют системные администраторы, разработчики, студенты IT-специальностей и все, кому нужна мобильная среда разработки. Единственный нюанс – нужно время на изучение bash, но это справедливая цена за мощный и гибкий инструмент.</p><h2>Подведём итоги</h2><p>Выбор мобильного редактора зависит от ваших задач:</p><ul><li>Для фронтенда подойдут CodePen (веб-разработка и прототипирование), Code Editor и Acode (универсальные редакторы с поддержкой HTML/CSS/JS).</li><li>Для бэкенда есть отдельные IDE: Pydroid для Python, Cxxdroid для C/C++, Jvdroid для Java. Они работают автономно и включают все необходимые инструменты.</li><li>Для экспериментов с ИИ попробуйте Replit – облачную IDE с умным ассистентом, который создаёт приложения по описанию.</li><li>Для профессиональной разработки установите Termux (Android) или iSH Shell (iOS) – это полноценные Linux-терминалы с неограниченными возможностями.</li></ul><p><i>Знаете классное приложение, которое не попало в подборку? Расскажите в комментариях о его плюсах и минусах! Ваши советы помогут коллегам в поисках идеального инструмента для работы с кодом на смартфоне.</i></p>]]></content:encoded>
    </item>
    <item>
      <title>GPT-5: что известно о новой версии модели?</title>
      <link>https://tproger.ru/articles/gpt-5--chto-izvestno-o-novoj-versii-modeli-</link>
      <comments>https://tproger.ru/articles/gpt-5--chto-izvestno-o-novoj-versii-modeli-?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Даровская Маша]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/gpt-5--chto-izvestno-o-novoj-versii-modeli-</guid>
      <description><![CDATA[<p>Что умеет GPT-5: обзор архитектуры, мультимодальности, логики рассуждений и агентных функций. Как модель отличается от GPT-4, что говорят в OpenAI и почему ИИ становится ещё мощнее — и опаснее.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/gpt-5--chto-izvestno-o-novoj-versii-modeli-">GPT-5: что известно о новой версии модели?</a>»</p>]]></description>
      <category><![CDATA[Производительность]]></category>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Образование]]></category>
      <category><![CDATA[OpenAI]]></category>
      <category><![CDATA[Бизнес]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 06 Aug 2025 12:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p><b>GPT-5 представили 7 августа в 20:00. Разбираемся, что мы представляли и что по факту получилось. </b></p><h2>Архитектура и обучение</h2><p>GPT-5 — это языкoвая модель следующего
поколения. Главное её отличие — в масштабе. По <a href="https://lifearchitect.ai/gpt-5/">заявлениям</a>
руководства OpenAI, новая модель на порядок больше предшественницы. По оценкам, это триллионы параметров (~3–5 трлн). Однако GPT-5 — не просто увеличенная
версия GPT-4: OpenAI объединяет разные подходы — классическое масштабное
предобучение и спецмодели рассуждений («o-серия») — в единую архитектуру.</p><p>Сам Альтман назвал GPT-4.5 (внутреннее кодовое
имя Orion) «последней моделью без chain-of-thought». GPT-5 же <a href="https://www.creolestudios.com/gpt-5-sam-altman-insights/">станет</a> «объединённой» моделью, способной при
необходимости выполнять развёрнутые логические размышления (chain-of-thought).
Кроме того, в новой парадигме увеличена роль обучения с подкреплением и других
методов: по словам Альтмана, GPT-5/6 будут использовать RL и делать научные
открытия.</p><p>Альтман сказал, что GPT-5 в основном
фокусируется на рассуждениях, а это значит, что лучше решает сложные проблемы, разбивая их на более мелкие шаги — как это делают люди. Это важно для таких задач, как решение сложных
математических задач, написание или обзор кода, помощь в исследованиях или
принятии решений</p><p>Тренировка GPT-5 потребовала огромных ресурсов — OpenAI, совместно с Oracle, наращивает датацентры (совокупная мощность &gt;5
ГВт, свыше 2 млн чипов) для обучения своих самых продвинутых моделей.</p><h2>Новые возможности по сравнению с
GPT-4</h2><p>GPT-5 обещает значительный скачок
функциональности относительно GPT-4. Во-первых, модель станет полностью
мультимодальной: помимо текста, она <a href="https://www.datacamp.com/blog/everything-we-know-about-gpt-5">сможет</a> работать с голосом, изображениями и,
вероятно, видео. Во-вторых, GPT-5 уделяет особое внимание логическому мышлению: интеграция механизма chain-of-thought (пошагового рассуждения) даст
модели способность разбивать сложные задачи на шаги и решать их значительно
лучше GPT-4.</p><p>Ожидается также расширение контекста и памяти — GPT-5 сможет
оперировать более длинными вводами и запоминать предпочтения пользователя, что
сделает диалоги более непринуждёнными и персонализированными.</p><p>Предполагается переход от чат-бота к агенту:
GPT-5 сможет автономно выполнять действия и сложные многошаговые задачи по
запросу (благодаря интеграции со сторонними сервисами и инструментами).
Наконец, OpenAI заявляет о работе над снижением галлюцинаций и bias — модель
будет более точной и правдивой, избегая просто удобных/приятных ответов в
пользу максимально полезных и честных.</p><h2>Производительность и метрики</h2><p>По предварительным данным и оценкам
инсайдеров, GPT-5 демонстрирует существенно более высокие результаты чем
GPT-4 во многих тестах. Например, технический директор Microsoft Кевин Скотт
отметил, что если GPT-4 решает задания примерно на уровне школьника, то GPT-5
способен справляться на уровне аспиранта (PhD).</p><p>В OpenAI дают понять, что GPT-5 приблизит нас к качественно новому
уровню интеллекта: Сам Альтман утверждает, что границ для возможностей
GPT-моделей нет — при достаточных вычислительных ресурсах можно достичь ИИ,
превосходящего человека практически во всех областях.</p><h2>Области применения</h2><p>Сфера использования GPT-5 ожидается очень
широкой — от повседневных задач до высокоспециализированных исследований.</p><ul><li>В
разработке ПО модель сможет генерировать и отлаживать более сложный код,
ускоряя труд программистов. GPT-4 уже применялся для кода, GPT-5 улучшит эту
функцию.</li><li>В бизнесе GPT-5 найдёт применение для аналитики данных, написания
отчётов, планирования стратегий и поддержки принятия решений.</li><li>В науке и R&amp;D
ожидается новый уровень помощи — модель сможет выступать в роли
интеллектуального ассистента исследователя: например, содействовать открытию
лекарств и новых материалов. Представители OpenAI упоминали задачи масштаба
поиска лекарства от редкого рака как посильные для GPT-5.</li><li>Благодаря
улучшенному пониманию контекста, образование и медицина тоже выиграют: GPT-5
может быть персональным наставником или консультантом, объясняющим сложные темы
на понятном языке.</li><li>Кроме того, переход к агентной модели означает, что GPT-5
сможет выполнять комплексные поручения (например, бронирование, покупки,
управление расписанием) без детального пошагового контроля, что открывает
возможности для автоматизации рутины во многих отраслях.</li></ul><h2>Реакция сообщества и экспертов</h2><p>Выход GPT-5 вызывает смешанные реакции в
техническом сообществе. С одной стороны, присутствуют опасения и призывы к
осторожности: в марте 2023 года свыше 1100 экспертов (включая Илона Маска,
Стива Возняка и ведущих исследователей ИИ) <a href="https://techcrunch.com/2023/06/07/openai-gpt5-sam-altman/">подписали</a> открытое письмо с требованием
приостановить обучение систем сильнее GPT-4 как минимум на полгода,
предупреждая о рисках для общества. Тревога возникла из-за потенциальной угрозы
неконтролируемого ИИ и массового вытеснения рабочих мест.</p><p>OpenAI частично разделяет озабоченность. Сам
Альтман отмечал, что компания взяла паузу после GPT-4 и еще в июне 2023
подтверждал, что не начинала обучение GPT-5, уделяя время внешним аудитам и
red-teaming для повышения безопасности модели. С другой стороны, многие
специалисты с энтузиазмом ждут прорыв: например, в индустрии
предполагают, что GPT-5 повысит уровень рассуждений и приблизит эру
AGI (общего искусственного интеллекта). Руководители технологических компаний
указывают, что подобные модели могут стать инструментом, доступным миллионам
разработчиков и пользователей, позволяя им решать сложные проблемы — барьер
входа в ИИ снижается, и это вселяет оптимизм.</p><h2>Официальные заявления OpenAI</h2><p>Несмотря на отсутствие полноценного анонса
GPT-5, руководство OpenAI неоднократно комментировало планы по его разработке.
На слушаниях в Сенате США (май 2023) CEO OpenAI Сам Альтман заявил под
присягой, что компания «на данный момент не обучает GPT-5» и не планирует
начинать в ближайшие месяцы. В начале 2024 года Альтман в интервью подтвердил,
что не может назвать точную дату релиза GPT-5, но подчеркнул, что модель станет
качественным скачком в способности к сложным рассуждениям; он в принципе не
видит «потолка» для развития GPT при достаточных вычислительных мощностях.</p><p>В публичной «дорожной карте» OpenAI
(озвученной 12 февраля 2025г.) было объявлено о скором выпуске промежуточной
модели GPT-4.5, после чего через несколько месяцев запланирован GPT-5
(ориентировочно летом 2025). Альтман описал GPT-5 как «унифицированную
систему», интегрирующую технологии предыдущих линеек (в том числе модель o3 для
логики). При этом OpenAI подчёркивала, что выпустит GPT-5 только когда новая
модель будет соответствовать внутренним стандартам качества и безопасности: в
частности, если по итогам обучения она не окажется достаточно надёжной или
безопасной, релиз могут отложить.</p><p>Также выходила <a href="https://www.theinformation.com/articles/inside-openais-rocky-path-gpt-5">статья</a> о трудностях, с которых столкнулись
разработчики GPT-5.</p><p>Как отмечает Никита Безлепкин, lead gen AI,
автор <a href="https://t.me/aidisrupt">телеграм-канала
про AI</a>, часто на основании инсайдов очень сложно понять, что реально
будет из себя представлять модель:</p><blockquote>Так как информации мало, она разнообразна — есть и PR, и дезинформация. Точно мы сможем узнать только в момент релиза. Конечно, качество можно проверить на основе популярных бенчмарков (например, арена), но все же я советую использовать свои бенчмарки, которые собраны на ваших реальных бизнес-кейсах. <br /><br />Gen AI модели нестабильны от версии к версии, если даже общие метрики взлетели и добавилось много новых фич, ваш кейс может сломаться. Поэтому главное изменение — это то, как меняются ваши метрики. И даже если  реальных кейсов еще нет, всё равно составляйте свои бенчмарки, так вы сможете прозрачнее оценивать прогресс моделей и их готовность к сложным задачам.</blockquote><p>Апдейт:</p><p><a href="https://www.youtube.com/watch?v=FVejMWCh9nI">Команда OpenAI представила GPT-5 (видео на русском языке), новое демо 7 августа 2025</a></p>]]></content:encoded>
    </item>
  </channel>
</rss>