<?xml version="1.0" encoding="UTF-8"?>

<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" >

  <channel>
    <title><![CDATA[Все посты подряд / Программирование / Хабр]]></title>
    <link>https://habr.com/ru/hubs/programming/posts/</link>
    <description><![CDATA[Программирование – искусство создания компьютерных программ]]></description>
    <language>ru</language>
    <managingEditor>editor@habr.com</managingEditor>
    <generator>habr.com</generator>
    <pubDate>Tue, 05 May 2026 16:07:56 GMT</pubDate>
    
    
      <image>
        <link>https://habr.com/ru/</link>
        <url>https://habrastorage.org/webt/ym/el/wk/ymelwk3zy1gawz4nkejl_-ammtc.png</url>
        <title>Хабр</title>
      </image>
    

    
      
        
    

  

  
  <item>
    <title><![CDATA[Пост @smirnoff_ai — Блог компании LLMStart.ru (+4) — 30.04.2026 20:07]]></title>
    <guid isPermaLink="true">https://habr.com/ru/companies/llmstart/posts/1030266/</guid>
    <link>https://habr.com/ru/companies/llmstart/posts/1030266/?utm_campaign=1030266&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p><strong>Дорожная карта Agentic AI. Level 4. Своя кузница — локальный запуск моделей</strong></p><figure class=""><img src="https://habrastorage.org/webt/4d/4d/c0/4d4dc0327f0e185a1074023a0fc0ba18.png" alt="Дорожная карта Agentic AI — Level 4. Своя кузница: локальный запуск моделей" title="Level 4. Своя кузница — локальный запуск моделей"><div><figcaption>Level 4. Своя кузница — локальный запуск моделей</figcaption></div></figure><p>Не всё имеет смысл отдавать в облако. Причин у этого как минимум три:</p><ol><li><p><strong>Приватность</strong>. Стоит начать пересылать в чужой API персональные данные клиентов, внутреннюю переписку или код с коммерческой тайной, как логи стороннего провайдера превращаются из абстрактной строчки в SLA во вполне конкретный риск утечки. Локальная модель эту головную боль снимает: данные просто не покидают периметр компании, и обсуждать с безопасниками становится по сути нечего.</p></li><li><p><strong>Автономность</strong>. Когда провайдер прилёг, сети легли или вашему региону внезапно прикрыли доступ, локальный агент этого даже не заметит и продолжит работать, как ни в чём не бывало.</p></li><li><p><strong>Стоимость</strong>. Здесь всё упирается в масштаб. Если вы просто экспериментируете у себя на ноутбуке, локальный запуск получается полностью бесплатным: ни подписок, ни платы за токены, и докупать ничего не придётся, всё поедет на том железе, что уже стоит на столе. Когда же речь идёт про нагруженный прод, картина меняется: нужен сервер с GPU, и экономика там сходится не сразу. На сотнях запросов в день локальный инференс вряд ли отобьётся, а вот на десятках тысяч он уже выгоднее облака.</p></li></ol><p><strong>Что вообще получится запустить</strong></p><p>Проприетарные модели уровня GPT-5, Claude Opus 4.7 или Gemini 3.1 локально вы, конечно, не запустите: они закрытые и слишком огромные. Зато опенсорс быстро подтягивается следом. Qwen3 от Alibaba, DeepSeek R1 и V3.1, Mistral Small и Magistral это вполне рабочие модели, которые в квантизованных версиях помещаются на одну видеокарту. Даже OpenAI в прошлом году выложила свою открытую <a href="https://openai.com/index/introducing-gpt-oss/" rel="noopener noreferrer nofollow">gpt-oss</a>, сразу в 20B и 120B параметров.</p><p><strong>Чем крутить локально</strong></p><p>Проще всего начать с <a href="https://ollama.com/" rel="noopener noreferrer nofollow">Ollama</a>: ставится одной командой, ещё одной скачивается модель, и всё. Никаких плясок с CUDA, Python и зависимостями, из коробки есть и GUI, и REST-API. Если хочется чего-то более «приложенческого», посмотрите в сторону <a href="https://lmstudio.ai/" rel="noopener noreferrer nofollow">LM Studio</a> или <a href="https://jan.ai/" rel="noopener noreferrer nofollow">Jan</a>; у LM Studio при этом есть приятная мелочь: она ещё до скачивания подскажет, хватит ли у вас ресурсов на конкретную модель.</p><p><strong>Как встроить в свой код</strong></p><p>Самое важное даже не в том, как удобно поднять модель у себя, а в том, что интегрировать её в код ваших приложений так же легко, как сменить провайдера. У всех этих инструментов OpenAI-совместимый API, поэтому в клиенте OpenAI достаточно поменять <code>base_url</code> с облака на <code>localhost</code>, и тот же самый код из прошлых постов продолжит работать без единой правки.</p><p><strong>Что брать в продакшен</strong></p><p>Эта связка работает, пока вы экспериментируете на ноутбуке. В продакшене ставки выше: опенсорс-модель надо крутить под реальной нагрузкой, и стандарт здесь это <a href="https://docs.vllm.ai/" rel="noopener noreferrer nofollow">vLLM</a>. Он оптимизирован под высокий RPS и параллельный инференс, реально выжимает из GPU всё, что она способна отдать.</p><p>Вообщем, не относитесь к локальному запуску, как к большому инфраструктурному проекту. На практике это один спокойный вечер экспериментов: поставили Ollama, скачали Qwen3, поменяли <code>base_url</code> в агенте и погнали…</p><p>🔔 Следующая тема: Few-shot learning, как учить модель прямо в промпте.</p><p>⬅️ Предыдущая тема: <a href="https://habr.com/ru/posts/1029790/" rel="noopener noreferrer nofollow">Level 4. Новые чувства — мультимодальность</a></p><p>Подписывайтесь, пожалуйста, чтобы не пропустить!</p><blockquote><p>Больше про ИИ — в <a href="https://t.me/aidialogs" rel="noopener noreferrer nofollow">ТГ-канале</a> и <a href="https://vk.com/llmstart" rel="noopener noreferrer nofollow">ВК</a>. <a href="https://llmstart.ru/?utm_source=habr&amp;utm_medium=post&amp;utm_campaign=agentic-roadmap-05" rel="noopener noreferrer nofollow">Каталог наших курсов, услуг и кейсов</a> по ИИ-агентам. По вопросам — <a href="https://t.me/smirnoff_ai" rel="noopener noreferrer nofollow">пишите в личку</a>.</p></blockquote> <a href="https://habr.com/ru/posts/1030266/?utm_campaign=1030266&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Thu, 30 Apr 2026 17:07:40 GMT</pubDate>
    <dc:creator><![CDATA[smirnoff_ai (LLMStart.ru)]]></dc:creator>
      
      <category><![CDATA[llm]]></category><category><![CDATA[ai]]></category><category><![CDATA[ollama]]></category><category><![CDATA[vllm]]></category><category><![CDATA[lmstudio]]></category><category><![CDATA[local llm]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @ova450 — Интерфейсы (+4) — N/P]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1029944/</guid>
    <link>https://habr.com/ru/posts/1029944/?utm_campaign=1029944&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p>ИИ: Гонки на лафетах</p><p>Всего лишь иллюстрация. Примерно год-полтора назад решил я выбрать - deepseek или chatgpt. И выбрал deepseek. Однако через некоторое время стал обращать внимание не его лютый подхалимаж, что, кстати, не раз уже обыграли в различных мемах. Не в отношении deepseek, а относительно AI в общем.<br>Проблему обсудил и с deepseek, и с windows copilot (chatgpt был благополучно забыт). Deepseek стал подхалимски юлить, мол да, copilot хорош и все такое. Copilot же оправдал Deepseek - мол это такая технология поддержки энтузиазма в клиенте. Между прочим тонко намекнув, что сам-то он лучше и глубже. Но это присказка, сказка впереди.<br>В процессе завершения разработки обертки над EntityFramework попросил оценить проект сразу четверых: deepseek, copilot, chatgpt и grok. Результат ожидаем - сыровато, но в продакшн годно, оценки 4.5/5 и 7/10. <br>Претензии разные, существенных практически не было, но в одно они уперлись хором - "тяжелые" интерфейсы. Подробности опущу, это было семейство generic-интерфейсов со многими типами. Что-то вроде IInterface(T1), IInterface(T1,T2) и так далее, пока не надоест.<br>Несколько итераций я эти наезды игнорировал, но AI не унимались. Уже и оценки до 9/10 дошли, но проблема-то осталась.<br>Вспылил и написал письмо на полстраницы, начинавшееся фразой "Господа AI !". Концептуальное. Гневное. Циркулярное  И получил ответы:<br>- ООО! Мы все поняли. Гениально, единственно верное решение.<br>Это deepseek 5/5 и copilot 10/10.<br>- Нуу... Проблема решена, но способ так себе... в общем 9/10 и есть гораздо лучшие альтернативы, рассмотрим?<br>Это chatcpt и grok. И что характерно, альтернативы предлагают разные, по паре штук каждый. Рассмотрим, конечно.<br><br>Это просто зарисовка не о разработке обертки, а о различных системах AI.</p><p>UPD: Забыл добавить - deepseek еще и извинился за необоснованные оценки :)))</p> <a href="https://habr.com/ru/posts/1029944/?utm_campaign=1029944&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Thu, 30 Apr 2026 08:19:51 GMT</pubDate>
    <dc:creator><![CDATA[ova450]]></dc:creator>
      
      <category><![CDATA[ии]]></category><category><![CDATA[аналитика]]></category><category><![CDATA[ai]]></category><category><![CDATA[ai agent]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @zdanevich-vitaly — Rust (+4) — 30.04.2026 08:28]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1029870/</guid>
    <link>https://habr.com/ru/posts/1029870/?utm_campaign=1029870&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p>Я давний пользователь <a href="https://github.com/vitaly-zdanevich/geeknote" rel="noopener noreferrer nofollow">Geeknote</a> - это cli для <a href="https://evernote.com/" rel="noopener noreferrer nofollow">Evernote</a>. Несколько лет назад проект застрял на втором Питоне - и никто не хотел его портировать на третий. Я ждал что кто-то займётся этим - но пришлось самому - так что я форкнул, починил, и даже связался с Виталием Роденко - одним из создателей Geeknote и администратора на PyPI, чтобы получить право туда пушить. За десяток лет я видел как Geeknote переходил из одни руки в другие - и как он забрасывался, и через несколько лет находился новый мантейнер. Было забавно осознать, что теперь и я стал мантейнером программного продукта, который всегда установлен на все мои машины.</p><p>Как и большинство из нас, я стал пробовать LLM - как замену поиску, для анализа кодов, советов, и вот наконец - несколько проектов - даже не читая кода - только давая команды и тестируя результат. Известная шутка - переписать на Rust. Почему бы у нет - Geeknote не велик - около пяти тысяч строк на Питоне, что я и попробовал - через <strong>Codex gpt-5.5</strong>. Несколько десятков итераций, "добавь это", "добавь то", "пропали теги", "пропала анимация" - и за несколько часов я получил рабочий Geeknote на Rust, назвал его <a href="https://gitlab.com/vitaly-zdanevich/reeknote" rel="noopener noreferrer nofollow">reeknote</a>. </p><p>Результат: быстрее работает, раза в два. Теперь буду им пользоваться.</p><p>P.S.: CLI хороши для перфоманса, SSH, быстрее разработка без GUI, а ещё похоже и для LLM - можно попросить сохранить ответ в Evernote. Как и прочие интеграции, в том числе в скриптах.</p> <a href="https://habr.com/ru/posts/1029870/?utm_campaign=1029870&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Thu, 30 Apr 2026 05:28:25 GMT</pubDate>
    <dc:creator><![CDATA[zdanevich-vitaly]]></dc:creator>
      
      <category><![CDATA[evernote]]></category><category><![CDATA[geeknote]]></category><category><![CDATA[cli]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @smirnoff_ai — Блог компании LLMStart.ru (+3) — 29.04.2026 19:44]]></title>
    <guid isPermaLink="true">https://habr.com/ru/companies/llmstart/posts/1029790/</guid>
    <link>https://habr.com/ru/companies/llmstart/posts/1029790/?utm_campaign=1029790&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p><strong>Дорожная карта Agentic AI. Level 4. Новые чувства — мультимодальность</strong></p><figure class=""><img src="https://habrastorage.org/webt/8b/3f/6f/8b3f6fc275b3aac5de67cecdcb3d6706.png" alt="Дорожная карта Agentic AI — Level 4. Новые чувства: мультимодальность" title="Level 4. Новые чувства — мультимодальность"><div><figcaption>Level 4. Новые чувства — мультимодальность</figcaption></div></figure><p>Пора научить агента видеть и слышать. Клиент не присылает аккуратный промпт — он кидает фотку накладной, скрин ошибки, голосовое на 40 секунд.</p><p><strong>Картинки</strong></p><p>Модель смотрит на изображение и отвечает на вопросы о нём — что на фото, прочитай текст, сравни два скриншота. Работает прямо в чат-запросе, без отдельного API.</p><p>Где выбирать модель: <a href="https://artificialanalysis.ai/evaluations/mmmu-pro" rel="noopener noreferrer nofollow">artificialanalysis.ai/evaluations/mmmu-pro</a> — 180+ моделей по MMMU-Pro (изображения, документы, диаграммы, схемы). Сейчас лидирует Gemini 3.1 Pro Preview.</p><p><strong>Транскрибация</strong></p><p>Модель слушает аудио и возвращает текст — с пунктуацией, языком, таймкодами, и если надо — с разделением по спикерам.</p><p>Где выбирать: <a href="https://artificialanalysis.ai/speech-to-text" rel="noopener noreferrer nofollow">artificialanalysis.ai/speech-to-text</a> — 50+ провайдеров, WER + скорость + цена в одной таблице. Лидер по точности — ElevenLabs Scribe v2 (2.3% WER), из мультимодальных — Gemini (2.9%), gpt-4o-transcribe — 4.1%, Whisper large-v3 — ~5%.</p><p><strong>Видео</strong></p><p>Модель понимает видео как поток событий во времени — что происходило, в каком порядке, что изменилось. Это не то же самое, что покадровый Vision: там вы нарезаете файл на картинки и отправляете как набор фото — модель не понимает движения и временной связи между ними.</p><p>Где выбирать: <a href="https://benchlm.ai/benchmarks/videoMmmu" rel="noopener noreferrer nofollow">benchlm.ai/benchmarks/videoMmmu</a>. Нативно видео обрабатывает только Gemini — до часа или ссылка на YouTube. Остальные — только покадровый Vision.</p><p><strong>Как вызывать</strong></p><p><em>Картинки</em> — универсальный OpenAI-формат, работает везде. <code>image_url</code> в чат-запросе принимают OpenAI, Anthropic, Gemini, Qwen, Grok. Один и тот же код, разный <code>base_url</code> и <code>api_key</code>.</p><p><em>Транскрибация</em> — многие провайдеры поддерживают OpenAI-формат: напрямую <code>/v1/audio/transcriptions</code> или <code>input_audio</code> через <code>/v1/chat/completions</code>). Но у лидера ElevenLabs Scribe v2: собственный SDK, не совместим с OpenAI-форматом</p><p><em>Видео</em> — тут единого API нет. У OpenAI видеофайл в Chat Completions не принимается. Gemini поддерживает видео-понимание через нативный <a href="https://ai.google.dev/gemini-api/docs/video-understanding" rel="noopener noreferrer nofollow">API</a>.</p><p>🔔 Следующая тема: <a href="https://habr.com/ru/posts/1030266/" rel="noopener noreferrer nofollow">локальный запуск — когда Ollama или LMStudio лучше облачного API</a>.</p><p>⬅️ Предыдущая тема: <a href="https://habr.com/ru/posts/1023986/" rel="noopener noreferrer nofollow">Level 3. Первые артефакты — LLM API и структурированный вывод</a></p><p>Подписывайтесь, пожалуйста, чтобы не пропустить!</p><blockquote><p>Больше про ИИ — в <a href="https://t.me/aidialogs" rel="noopener noreferrer nofollow">ТГ-канале</a> и <a href="https://vk.com/llmstart" rel="noopener noreferrer nofollow">ВК</a>. <a href="https://llmstart.ru/?utm_source=habr&amp;utm_medium=post&amp;utm_campaign=agentic-roadmap-04" rel="noopener noreferrer nofollow">Каталог наших курсов, услуг и кейсов</a> по ИИ-агентам. По вопросам — <a href="https://t.me/smirnoff_ai" rel="noopener noreferrer nofollow">пишите в личку</a>.</p></blockquote> <a href="https://habr.com/ru/posts/1029790/?utm_campaign=1029790&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Wed, 29 Apr 2026 16:44:51 GMT</pubDate>
    <dc:creator><![CDATA[smirnoff_ai (LLMStart.ru)]]></dc:creator>
      
      <category><![CDATA[llm]]></category><category><![CDATA[multimodal]]></category><category><![CDATA[agentic ai]]></category><category><![CDATA[транскрибация]]></category><category><![CDATA[speech-to-text]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @stas_makarov — Искусственный интеллект (+1) — N/P]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1029334/</guid>
    <link>https://habr.com/ru/posts/1029334/?utm_campaign=1029334&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/6e7/21a/549/6e721a54973b3ee25a3b1ca58fcaf33a.png" alt="Minesweeper Enterprise" title="Minesweeper Enterprise" width="1224" height="800"><div><figcaption>Minesweeper Enterprise</figcaption></div></figure><p><strong>Вайб-кодинг и Jmix</strong></p><p>Сидели мы как-то вечером с Курсором и подумали:</p><p>"Какой же энтерпрайз проект без пасхалки или просто встроенной игры? — Чем будут заниматься менеджеры, пока агенты делают их работу?" — Вот, держите старый добрый Сапер из Windows в виде адд-она <strong>Jmix</strong>. И это не просто браузерная игра, вставленная в экран. Причем ни строчки кода не написано руками, только сгенерил проект.</p><p>Минное поле — это <code>gridLayout</code>, покрытый кнопками, генерится программно в зависимости от параметров.</p><p>Весь <em>look&amp;feel</em> как в оригинальном Minesweeper.</p><p>Опубликован на Maven, просто добавляйте зависимость:</p><p><code>implementation 'io.github.digitilius.minesweeper:minesweeper-starter:1.0.3'</code></p><p>Репозиторий здесь:</p><p><a href="https://github.com/digitilius/jmix-minesweeper" rel="noopener noreferrer nofollow">https://github.com/digitilius/jmix-minesweeper</a></p><p>Enjoy'те!</p> <a href="https://habr.com/ru/posts/1029334/?utm_campaign=1029334&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Wed, 29 Apr 2026 07:15:57 GMT</pubDate>
    <dc:creator><![CDATA[stas_makarov]]></dc:creator>
      
      <category><![CDATA[вайб-кодинг]]></category><category><![CDATA[java]]></category><category><![CDATA[jmix]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @Andrey2008 — Блог компании PVS-Studio (+4) — 29.04.2026 09:49]]></title>
    <guid isPermaLink="true">https://habr.com/ru/companies/pvs-studio/posts/1029408/</guid>
    <link>https://habr.com/ru/companies/pvs-studio/posts/1029408/?utm_campaign=1029408&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p><strong>РБПО по ГОСТ Р 56939—2024: вебинар №09 из 30 – Экспертиза исходного кода</strong></p><p>Компания <a href="https://pvs-studio.ru/" rel="noopener noreferrer nofollow">ООО "ПВС"</a> совместно с <a href="https://mascom-uc.ru/" rel="noopener noreferrer nofollow">учебным центром "Маском"</a> провела цикл вебинаров, посвящённых разработке безопасного программного обеспечения (РБПО). Совместно с приглашёнными экспертами различных компаний мы рассмотрели 25 процессов, приведённых в ГОСТ Р 56939—2024.</p><p>Предлагаем сегодня вашему вниманию вебинар цикла, посвящённый процессу, описанному в разделе 5.9. – "<a href="https://pvs-studio.ru/ru/blog/video/11439/" rel="noopener noreferrer nofollow">Экспертиза исходного кода</a>". <a href="https://youtu.be/mxVgGLp9ZF0?si=-0_SgDaMWsuXUqSO" rel="noopener noreferrer nofollow">На YouTube</a>. <a href="https://files.pvs-studio.ru/media/presentations/03-09-2025.zip" rel="noopener noreferrer nofollow">Слайды</a>.</p><iframe id="69f1a8fc42c0bc03ac312764" src="https://embedd.srv.habr.com/iframe/69f1a8fc42c0bc03ac312764" class="embed_video embed__content" allowfullscreen="true"></iframe><p>Цели девятого процесса по ГОСТ Р 56939—2024:</p><blockquote><p>Обеспечение соответствия исходного кода ПО предъявляемым к нему требованиям.</p></blockquote><p>Общее количество вебинаров — 30: каждому из 25 процессов ГОСТа посвящено по одному вебинару и 5 записано дополнительно на смежные темы. Запись всех вебинаров и подборка дополнительной информации доступна по ссылке: <a href="https://%D0%93%D0%9E%D0%A1%D0%A256939.%D0%A0%D0%A4" rel="noopener noreferrer nofollow">ГОСТ56939.РФ</a>.</p> <a href="https://habr.com/ru/posts/1029408/?utm_campaign=1029408&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Wed, 29 Apr 2026 06:49:40 GMT</pubDate>
    <dc:creator><![CDATA[Andrey2008 (PVS-Studio)]]></dc:creator>
      
      <category><![CDATA[гост р 56939]]></category><category><![CDATA[гост р 56939-2024]]></category><category><![CDATA[исходный код]]></category><category><![CDATA[код]]></category><category><![CDATA[экспертиза проектов]]></category><category><![CDATA[обзоры кода]]></category><category><![CDATA[code review]]></category><category><![CDATA[вебинары]]></category><category><![CDATA[качество кода]]></category><category><![CDATA[рбпо]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @abratko — Программирование (+2) — 28.04.2026 13:08]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1029018/</guid>
    <link>https://habr.com/ru/posts/1029018/?utm_campaign=1029018&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p><strong>Любая система всегда существует в двух основных контекстах: пользовательском и админском. </strong>Есть еще контекст ошибки, но сейчас не про него. <br>Контекст – это не домен, наоборот это часть домена.</p><p>Речь не только про разработку и ИТ.&nbsp; Канализация, кран, автомобиль, самокат, футбольный мячик - это применимо к любой системе физического мира.</p><p>Это применимо к подсистемам: двигатель, коробка передач в автомобиле, каталог или система заказов в e-com.<br><br>Админский контекст имеет интерфейсы и контракты, которые недоступны в пользовательском контексте. Задача админского контекста обеспечить целостность, консистентность настроек системы для корректной и непротиворечивой работы в пользовательском контексте.</p><p>К чему эта мысль?<br><br>Если для вашей системы внутри одного домена/поддомена нужно 2 админских или пользовательских контекста, то скорее всего у вас проблемы в архитектуре системы. 2 варианта:</p><ol><li><p>разделить домены, создав тем самым два слабосвязанных домена со своими контекстами. Это сделает домены проще, их легче поддерживать.</p></li><li><p>объединить дублирующиеся контексты. Если объединение возможно, то скорее всего ваша система перейдет на качественно новый уровень, станет более универсальной и гибкой. </p></li></ol><p>Оба варианта приведут к уменьшению когнитивной сложности и устранению скрытых связей.<br><br>Не дублируйте контексты для домена, это плохо кончится.</p> <a href="https://habr.com/ru/posts/1029018/?utm_campaign=1029018&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Tue, 28 Apr 2026 10:08:01 GMT</pubDate>
    <dc:creator><![CDATA[abratko]]></dc:creator>
      
      <category><![CDATA[ddd]]></category><category><![CDATA[контекст]]></category><category><![CDATA[домен]]></category><category><![CDATA[проектирование]]></category><category><![CDATA[программирование]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @d_ilyich — Программирование (+1) — N/P]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1028676/</guid>
    <link>https://habr.com/ru/posts/1028676/?utm_campaign=1028676&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p>И ты, leetcode?</p><p>Вы заметили, что теперь на leetcode необходимо указать номер телефона для "обеспечения безопасности учётной записи и подтверждения личности":</p><blockquote><p>Add your phone number to secure your account and verify your identity.  </p></blockquote><p>А если не укажете, то не сможете:<br>- участвовать в соревнованиях;<br>- создавать комментарии в дискуссиях;<br>- публиковать решения;<br>- даже плюсовать полезные комментарии.<br><br>Я поискал, но сходу не нашёл официальной новости с разъяснениями. Однако, судя по комментам, некоторые пользователи довольны, считая, что эта мера поможет уменьшить количество читеров.<br><br>Что думаете? Не давать плюсовать комменты -- это, на мой взгляд, перебор.</p> <a href="https://habr.com/ru/posts/1028676/?utm_campaign=1028676&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Mon, 27 Apr 2026 14:10:32 GMT</pubDate>
    <dc:creator><![CDATA[d_ilyich]]></dc:creator>
      
      <category><![CDATA[leetcode]]></category><category><![CDATA[2fa]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @MaxRokatansky — Блог компании OTUS (+3) — N/P]]></title>
    <guid isPermaLink="true">https://habr.com/ru/companies/otus/posts/1027406/</guid>
    <link>https://habr.com/ru/companies/otus/posts/1027406/?utm_campaign=1027406&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p>📝 <strong>Анонс бесплатных открытых уроков на&nbsp;неделю: 27–30&nbsp;апреля</strong></p><figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/dca/3dc/2e1/dca3dc2e1322e0e708a5a63c97a99dec.png" width="1800" height="980"></figure><p>Привет, коллеги! Традиционная подборка открытых онлайн‑мероприятий для&nbsp;тех, кто хочет прокачать скиллы в&nbsp;IT, управлении, аналитике и автоматизации. На&nbsp;этой неделе&nbsp;— фокус на&nbsp;архитектуру, тестирование, Computer Vision и внутреннюю кухню разработки. Всё бесплатно, но&nbsp;нужна регистрация.</p><p>📅 <strong>Расписание по&nbsp;дням</strong></p><p><strong><em><sub>Понедельник, 27&nbsp;апреля</sub></em></strong></p><ul><li><p><strong>20:00</strong>&nbsp;— <a href="https://otus.pw/2SXT/" rel="noopener noreferrer nofollow">«Рисуем в&nbsp;формате онлайн модель процесса BPMN в&nbsp;Camunda Modeler»</a></p></li><li><p><strong>20:00</strong>&nbsp;— <a href="https://otus.pw/Jji6/" rel="noopener noreferrer nofollow">«Настройка кластера Elasticsearch»</a></p></li></ul><p><strong><em><sub>Вторник, 28&nbsp;апреля</sub></em></strong></p><ul><li><p><strong>20:00</strong>&nbsp;— <a href="https://otus.pw/nssp/" rel="noopener noreferrer nofollow">«Коучинговые инструменты для&nbsp;мотивации и повышения продуктивности команды»</a></p></li><li><p><strong>20:00</strong>&nbsp;— <a href="https://otus.pw/mNNR/" rel="noopener noreferrer nofollow">«Архитектура ИИ врагов в&nbsp;играх на&nbsp;Unity»</a></p></li><li><p><strong>20:00</strong>&nbsp;— <a href="https://otus.pw/uFCm/" rel="noopener noreferrer nofollow">«Первый нагрузочный тест в&nbsp;Apache JMeter»</a></p></li><li><p><strong>20:00</strong>&nbsp;— <a href="https://otus.pw/5hME/" rel="noopener noreferrer nofollow">«Архитектура тестового фреймворка: от&nbsp;хаоса к&nbsp;стабильности»</a></p></li><li><p><strong>20:00</strong>&nbsp;— <a href="https://otus.pw/GAuB/" rel="noopener noreferrer nofollow">«Контрактные тесты в&nbsp;Kotlin: как&nbsp;подружить фронт и бэкэнд»</a></p></li><li><p><strong>20:00</strong>&nbsp;— <a href="https://otus.pw/fzRsm/" rel="noopener noreferrer nofollow">«Фоновые задачи в&nbsp;Django: работа с&nbsp;Celery»</a></p></li><li><p><strong>20:00</strong>&nbsp;— <a href="https://otus.pw/QY7h/" rel="noopener noreferrer nofollow">«Как работают современные модели компьютерного зрения „из коробки“ на&nbsp;базе популярных библиотек и фреймворков (Hugging Face, OpenCV, YOLO, Roboflow)»</a></p></li><li><p>20:00&nbsp;— <a href="https://otus.pw/2b5W/" rel="noopener noreferrer nofollow">«Почему только 5% компаний получили реальную выгоду от&nbsp;ИИ в 2025&nbsp;году?»</a></p></li></ul><p><strong><em><sub>Среда, 29&nbsp;апреля</sub></em></strong></p><ul><li><p><strong>20:00</strong>&nbsp;— <a href="https://otus.pw/fvdS/" rel="noopener noreferrer nofollow">«Деревья решений для&nbsp;задач классификации и регрессии»</a></p></li><li><p><strong>20:00</strong>&nbsp;— <a href="https://otus.pw/SdhA/" rel="noopener noreferrer nofollow">«Свой язык на&nbsp;PHP за 60&nbsp;минут»</a></p></li><li><p><strong>20:00</strong>&nbsp;— <a href="https://otus.pw/fwtC/" rel="noopener noreferrer nofollow">«Трекинг с&nbsp;подвижной камеры: алгоритмы и механика компьютерного зрения на&nbsp;роботах для&nbsp;индустриальных задач»</a></p></li><li><p><strong>20:00</strong>&nbsp;— <a href="https://otus.pw/UGDQ/" rel="noopener noreferrer nofollow">«Разрешите себе карьеру технического директора»</a></p></li><li><p><strong>20:00</strong>&nbsp;— <a href="https://otus.pw/kuMa/" rel="noopener noreferrer nofollow">«Качество C#‑кода: от&nbsp;модульных тестов к&nbsp;системному подходу»</a></p></li><li><p><strong>20:00</strong>&nbsp;— <a href="https://otus.pw/7uaS/" rel="noopener noreferrer nofollow">«Продакт‑менеджер, маркетолог и PMM&nbsp;— в&nbsp;чём разница»</a></p></li></ul><p><strong><em><sub>Четверг, 30&nbsp;апреля</sub></em></strong></p><ul><li><p><strong>19:00</strong>&nbsp;— <a href="https://otus.pw/Djggi/" rel="noopener noreferrer nofollow">«МОК‑интервью на&nbsp;позицию Руководитель Проектов»</a></p></li><li><p><strong>19:00</strong>&nbsp;— <a href="https://otus.pw/Kcyqf/" rel="noopener noreferrer nofollow">«От стратегии к&nbsp;портфелю изменений: как&nbsp;архитектор связывает цели бизнеса, инициативы и архитектурные решения»</a></p></li><li><p><strong>20:00</strong>&nbsp;— <a href="https://otus.pw/dXLyO/" rel="noopener noreferrer nofollow">«Yahoo Finance и не&nbsp;только&nbsp;— работа с&nbsp;российскими торговыми площадкам»</a></p></li><li><p><strong>20:00</strong>&nbsp;— <a href="https://otus.pw/Jq1A/" rel="noopener noreferrer nofollow">«Поиск в&nbsp;базе знаний: где векторы ошибаются, а&nbsp;графы помогают»</a></p></li><li><p><strong>20:00</strong>&nbsp;— <a href="https://otus.pw/UccOl/" rel="noopener noreferrer nofollow">«Как управлять тимлидами?»</a></p></li><li><p><strong>20:00</strong>&nbsp;— <a href="https://otus.pw/z1Ch/" rel="noopener noreferrer nofollow">«Битрикс24&nbsp;+ MAX: разработка чат‑ботов и автоматизация коммуникаций»&nbsp;</a></p></li><li><p><strong>20:00</strong>&nbsp;— <a href="https://otus.pw/o7qm/" rel="noopener noreferrer nofollow">«Планируем внедрение DevSecOps&nbsp;— что&nbsp;следует учесть?»</a></p></li></ul><blockquote><p><em>Мы перечислили 20&nbsp;открытых вебинаров на&nbsp;эту неделю. Если вы не&nbsp;нашли в&nbsp;расписании тему, которая нужна именно вам,&nbsp;— загляните в </em><a href="https://otus.pw/r9iP3/" rel="noopener noreferrer nofollow"><em>полный календарь</em></a><em> </em></p></blockquote> <a href="https://habr.com/ru/posts/1027406/?utm_campaign=1027406&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Mon, 27 Apr 2026 07:20:26 GMT</pubDate>
    <dc:creator><![CDATA[MaxRokatansky (OTUS)]]></dc:creator>
      
      <category><![CDATA[вебинары]]></category><category><![CDATA[IT-обучение]]></category><category><![CDATA[архитектура ПО]]></category><category><![CDATA[тестирование]]></category><category><![CDATA[Apache JMeter]]></category><category><![CDATA[Kotlin]]></category><category><![CDATA[Django Celery]]></category><category><![CDATA[компьютерное зрение]]></category><category><![CDATA[DevSecOps]]></category><category><![CDATA[Elasticsearch]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @viordash — Искусственный интеллект (+3) — 25.04.2026 18:05]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1027882/</guid>
    <link>https://habr.com/ru/posts/1027882/?utm_campaign=1027882&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p><strong>Оптимизация контекста для Claude Code на большом проекте (иногда и 50% экономия токенов)</strong></p><p>Работаю над большим C++ проектом - реализация сетевого протокола. Использую Claude Code как основной инструмент. Со временем заметил: каждый новый чат начинается с того, что агент долго читает README.md, который разросся до 1000+ строк и 60 КБ.</p><p><strong>Проблема</strong></p><p>В CLAUDE.md была прописана команда читать README.md в начале каждого диалога, агенту нужно дать контекст проекта. Пока проект был небольшим это работало нормально. Но README рос вместе с проектом и в итоге стал содержать всё: архитектуру, логику DTLS, настройки веб-интерфейса, описание протокола, инструкции по сборке.</p><p>И как результат:</p><ul><li><p>Агент тратит тысячи токенов на анализ файла до начала работы</p></li><li><p>Если задача касается только фронтенда, модель всё равно загружает детали реализации ядра протокола. Лишний контекст снижает точность ответов.</p></li></ul><p><strong>Решение</strong></p><p>Вместо одного большого файла использовать иерархию маленьких, в отдельной папке <code>claude-context/</code>:</p><pre><code>claude-context/
├── context-claude.md       # общая архитектура и навигация (~90 строк)
├── context-AC-claude.md    # Access Controller
├── context-WTP-claude.md   # WTP Agent
├── context-WEB-claude.md   # Web Interface
└── context-TESTS-claude.md # тесты
</code></pre><p>Главный файл <code>context-claude.md</code> содержит краткое описание проекта и таблицу-навигатор: какой файл читать для какой области. В дочерних файлах описана детализация по модулям, каждый 100-130 строк.</p><p>Инструкция в CLAUDE.md теперь выглядит так:</p><blockquote><p>“Start each new conversation by reading claude-context/context-claude.md. For deeper context on specific areas, read the relevant file from that directory.”</p></blockquote><p>Агент читает главный файл (90 строк), понимает область задачи, подгружает только нужный дочерний контекст.</p><p><strong>Замер</strong></p><p>Чтобы проверить эффект, я поставил Claude одну и ту же задачу в двух разных конфигурациях:</p><blockquote><p>“Добавь тесты для WtpConfigController и WtpRadioController, проверь что если WTP address не строка, то возникает исключение std::runtime_error”</p></blockquote><pre><code>| Параметр             | README.md (60 КБ) | Иерархический контекст | Разница  |
| :------------------- | :---------------- | :--------------------- | :------- |
| Токены на сообщения  | 36.8k             | 17.6k                  | -53%     |
| Всего токенов        | 56.7k             | 37.6k                  | -34%     |
| Рост usage за задачу | +11%              | +6%                    | В 2 раза |
| Скорость анализа     | Заметная пауза    | Почти мгновенный старт |          |
</code></pre><p><strong>Важный момент</strong></p><p>README.md остался нетронутым - это документация для людей. Файлы в <code>claude-context/</code> - отдельный артефакт, написанный под AI: плотно, без лирики, с ASCII-схемами и таблицами. Я старался не смешивать два разных назначения в одном файле.</p><p>При небольшом проекте в этом подходе смысла нет, накладные расходы на поддержку двух наборов документации не оправдаются.</p> <a href="https://habr.com/ru/posts/1027882/?utm_campaign=1027882&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Sat, 25 Apr 2026 15:05:10 GMT</pubDate>
    <dc:creator><![CDATA[viordash]]></dc:creator>
      
      <category><![CDATA[claude code]]></category><category><![CDATA[llm]]></category><category><![CDATA[оптимизация]]></category><category><![CDATA[контекстное окно]]></category><category><![CDATA[документация]]></category><category><![CDATA[ai-агенты]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @passimx — Учебный процесс в IT (+3) — 25.04.2026 08:40]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1027754/</guid>
    <link>https://habr.com/ru/posts/1027754/?utm_campaign=1027754&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p><strong>TON Smart Contracts: базовый минимум за 5 минут</strong></p><figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/a58/b28/926/a58b28926e62ed0b20c9887a94881e03.jpeg" width="1280" height="759"></figure><p>Если бы я наткнулся на эту статью в самом начале работы с блокчейном ТОН, это бы сэкономило мне кучу времени на понимание архитектуры и принципов работы смарт контрактов.</p><p><strong>Что такое смарт контракт с точки зрения разработчика.</strong></p><p>Я постараюсь уберечь вас от терминологии блокчейна, вместо этого на пальцах показать из чего состоит смарт контракт и как его собрать. Если говорить совсем просто, то смарт контракт - это ячейка в памяти, хранящая в себе:</p><ul><li><p>Адрес</p></li><li><p>Баланс</p></li><li><p>Любые данные, которые вы туда запишите</p></li><li><p>Код смарт контракта</p></li><li><p>Текущий статус смарт контракта</p></li></ul><p>Ну или если перевести вышесказанное в код, то:</p><pre><code class="typescript">class SmartContract{ 
   readonly address: string; 
   readonly balance: number; 
   readonly code: string; 
   readonly status: 'uninitialized' | 'active' | 'frozen'; 

   storage: object; 
   ... 
}
</code></pre><p><strong>Плавное погружение...</strong></p><p>Представьте, вы написали код класса на своем любимом языке программирования, как полагается, с полями и методами, и превратили этот код в строку.&nbsp;<strong>Code</strong>&nbsp;- это и есть код вашего смарт контракта. Он будет выполняться в блокчейне. Точкой входа в таком коде будет метод&nbsp;<strong>onInternalMessage</strong>&nbsp;или&nbsp;<strong>onExternalMessage</strong>. Чтобы состояние полей класса можно было сохранять и перезаписывать, к смарт контракту прилагается объект&nbsp;<strong>Storage</strong>&nbsp;, в котором хранятся значения ваших полей.</p><p>При сохранении смарт контракта в блокчейн вы отправляете&nbsp;<strong>{ code, data }</strong>&nbsp;, где&nbsp;<strong>code</strong>&nbsp;- это код вашего смарт контракта,&nbsp;<strong>data</strong>&nbsp;- начальные данные. По этим двум полям вычисляется будущий адрес смарт контракта:&nbsp;<strong>address = hash({ code, data })</strong>. По этому адресу будет доступен ваш смарт контракт в блокчейне ТОН. На него можно совершать переводы, просматривать историю транзакцию, с него может переводить средства и вызывать другие смарт контракты.</p><p><strong>Как происходит деплой смарт контракта.</strong></p><p>Каждый смарт контракт платит немного комиссии по факту своего существования, в пример вспоминается налог на недвижимость. Чем больше жилплощадь - тем больше налог. Но в рамках ТОН вы платите за количество данных, которое хранит ваш смарт контракт, включая сам код вашего смарт контракта. Поэтому при создании на нем должно лежать как минимум чуть-чуть ТОН(как правило копейки). Создать смарт контракт можно 2 способами:</p><p>1) Другой смарт контракт делает перевод ТОН, прикрепляя код вашего смарт контракта вместе с начальными значениями(data) в поле&nbsp;<strong>Init = { code, data }</strong>. Блокчейн видит в переводе это поле и автоматически делает деплой. Статус смарт контракта становится "active".</p><p>2) Другой смарт контракт так же делает перевод ТОН, но только не прикрепляя ничего. В таком случае средства останутся висеть на адресе пустого смарт контракта, который будет выглядеть примерно так:</p><pre><code class="typescript">{ 
   "address": "401bf...3004", 
   "balance": 3000, 
   "code": "", 
   "storage": {}, 
   "status": "uninitialized" 
}</code></pre><p>Он ждет внешнее сообщение, где в него передадут код и начальные данные таким образом, чтобы&nbsp;<strong>address = hash({ code, data })</strong>, только тогда он сохранит код и сможет выполняться. Для вызова внешнего сообщения используется обычное API, где передается адрес и&nbsp;<strong>Init = { code, data }</strong>&nbsp;. Запрос сначала попадет в блокчейн, после чего при совпадении адреса&nbsp;<strong>address = hash({ code, data })</strong>&nbsp;произойдет деплой, и статус станет "active".</p><p><strong>Заключение</strong></p><p>В этой статье мы с вами закрепили азы архитектуры блокчейна ТОН, где каждый адрес является адресом смарт контракта. Разобрали структуру и механику создания. Рады вашему фидбеку или вопросам! Следите за нашими анонсами и новостями в&nbsp;<a href="https://api.vc.ru/v2.8/redirect?to=https%3A%2F%2Ft.me%2Fpassimx_chanel&amp;postId=2872558" rel="noopener noreferrer nofollow">Telegram</a>.</p> <a href="https://habr.com/ru/posts/1027754/?utm_campaign=1027754&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Sat, 25 Apr 2026 05:40:01 GMT</pubDate>
    <dc:creator><![CDATA[passimx]]></dc:creator>
      
      <category><![CDATA[смарт-контракты]]></category><category><![CDATA[блокчейн]]></category><category><![CDATA[введение]]></category><category><![CDATA[ton]]></category><category><![CDATA[toncoin]]></category><category><![CDATA[ton blockchain]]></category><category><![CDATA[smartcontracts]]></category><category><![CDATA[blockchain]]></category><category><![CDATA[разработка]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @NikitaPanevin — Блог компании PVS-Studio (+3) — 24.04.2026 14:52]]></title>
    <guid isPermaLink="true">https://habr.com/ru/companies/pvs-studio/posts/1027530/</guid>
    <link>https://habr.com/ru/companies/pvs-studio/posts/1027530/?utm_campaign=1027530&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p><strong>ИИ что? Проверяем Semantic Kernel</strong></p><figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/ff3/597/b8e/ff3597b8e3a002df50bedb168a1711a4.png" width="975" height="550"></figure><p>Проекты, связанные с интеграцией искусственного интеллекта, всё чаще становятся частью повседневной разработки. Один из таких проектов — <a href="https://github.com/microsoft/semantic-kernel" rel="noopener noreferrer nofollow">Semantic Kernel</a>. Он представляет собой SDK для построения AI-агентов и оркестрации LLM-сценариев и активно развивается компанией Microsoft.</p><p>Однако под капотом даже самых современных решений скрывается вполне обычный C# код со всеми присущими ему проблемами. Поэтому мы проверили проект и написали статью о самых интересных <a href="https://pvs-studio.ru/ru/blog/posts/csharp/1367/?utm_source=website&amp;utm_medium=habr&amp;utm_campaign=readmore&amp;utm_content=article" rel="noopener noreferrer nofollow">ошибках в коде Semantic Kernel</a>.</p> <a href="https://habr.com/ru/posts/1027530/?utm_campaign=1027530&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Fri, 24 Apr 2026 11:52:54 GMT</pubDate>
    <dc:creator><![CDATA[NikitaPanevin (PVS-Studio)]]></dc:creator>
      
      <category><![CDATA[c#]]></category><category><![CDATA[.net]]></category><category><![CDATA[open source]]></category><category><![CDATA[программирование]]></category><category><![CDATA[статический анализ]]></category><category><![CDATA[semantic kernel]]></category><category><![CDATA[pvs-studio]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @quasilyte — Go (+2) — 24.04.2026 12:50]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1027466/</guid>
    <link>https://habr.com/ru/posts/1027466/?utm_campaign=1027466&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p>Сделал необычную RTS на Ludum Dare 59 за пару дней</p><figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/32a/6c1/0cd/32a6c10cd6d5cae2e90a66da2d2c0cbe.gif" alt="Выглядит примерно так" title="Выглядит примерно так" width="800" height="450"><div><figcaption>Выглядит примерно так</figcaption></div></figure><p>Игра написана на Go (Ebitengine), <a href="https://github.com/quasilyte/ld59-game" rel="noopener noreferrer nofollow">исходники на есть гитхабе</a>.</p><p><a href="https://quasilyte.itch.io/out-of-signal" rel="noopener noreferrer nofollow">Поиграть можно в браузере</a>, ведь Ebitengine имеет неплохой экспорт в wasm. Она мало весит, быстро работает, и экспорт не требовал лишних усилий - это вам не шуточный игровой движок.</p><p>Я накидал небольшой шаблон для игр на стеке своих геймдев-библиотек. Его можно посмотреть тут: <a href="https://github.com/quasilyte/gscene-game-template" rel="noopener noreferrer nofollow">https://github.com/quasilyte/gscene-game-template</a>.</p><p>С этим шаблоном старт начала работы над игровой логикой и "мясом" игры становится ближе. Это позволяет +/- выйти на удобство какого-нибудь Godot, где не нужно первые несколько часов настраивать как у нас обрабатывается input, звук и сцены. Я этот шаблон буду дорабатывать по мере участия в джемах, за каждую мини-игру у меня копится TODO на то, что еще там можно было бы улучшить.</p><p>Если тема разработки игр на Go вам интересна, заходите в наше <a href="https://t.me/go_gamedev" rel="noopener noreferrer nofollow">русскоязычное сообщество в телеграме</a>. Мы там обсуждаем всякие библиотеки для геймдева, свои игры, и всё такое.</p><p>Кстати, ребята из чатика тоже сделали свои игры на Ebitengine, вот они:</p><ul><li><p><a href="https://dqso.itch.io/hired-or-homeless" rel="noopener noreferrer nofollow">https://dqso.itch.io/hired-or-homeless</a></p></li><li><p><a href="https://metalim.itch.io/zero-day-lunch" rel="noopener noreferrer nofollow">https://metalim.itch.io/zero-day-lunch</a></p></li></ul> <a href="https://habr.com/ru/posts/1027466/?utm_campaign=1027466&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Fri, 24 Apr 2026 09:50:55 GMT</pubDate>
    <dc:creator><![CDATA[quasilyte]]></dc:creator>
      
      <category><![CDATA[golang]]></category><category><![CDATA[go]]></category><category><![CDATA[ld59]]></category><category><![CDATA[ldjam59]]></category><category><![CDATA[ludum-dare59]]></category><category><![CDATA[ludum-dare-59]]></category><category><![CDATA[gamedev]]></category><category><![CDATA[indiedev]]></category><category><![CDATA[ebiten]]></category><category><![CDATA[ebitengine]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @apdorodin — Data Engineering (+3) — 23.04.2026 15:56]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1027082/</guid>
    <link>https://habr.com/ru/posts/1027082/?utm_campaign=1027082&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p>MCP - это было очень модно (где-то год назад). Но многие до сих пор не поняли простую вещь: агент с доступом к командной строке может пользоваться любыми CLI-интерфейсами ничуть не хуже.</p><p>При этом у классических CLI есть очевидные преимущества:</p><p>- Их банально легче разрабатывать</p><p>- Они прозрачнее и понятнее в работе</p><p>- Применяться они могут не только агентами, но и людьми</p><p>- Их уже существует огромное множество под любые задачи</p><p>В Google это тоже осознали и выкатили [свой инструмент](<a href="https://github.com/googleworkspace/cli" rel="noopener noreferrer nofollow">https://github.com/googleworkspace/cli</a>). Сделан он явно для агентов (его выпустили только в этом месяце), но это именно CLI, а не очередной MCP-сервер.</p><p>Точных фактов по этой теме пока нет. Кто-то говорит, что [в простых задачах MCP требует больше контекста, а в сложных — меньше, чем CLI, если инструменты грамотно обернуты и хорошо обнаруживаются агентом](<a href="https://portofcontext.com/blog/cli-vs-mcp-vs-code-mode" rel="noopener noreferrer nofollow">https://portofcontext.com/blog/cli-vs-mcp-vs-code-mode</a>). Кто-то, что этой разницей можно пренебречь, да и вызвана она тем, что не все CLI адаптированы под экономию контекста. Но все согласны, что CLI может дать агенту доступ ко всем тем же инструментам и обеспечить одинаковый процент успеха при выполнении задач, при этом будучи куда понятнее для человека и значительно проще в написании и поддержке.</p><p>В моих проектах я буду использовать CLI.</p> <a href="https://habr.com/ru/posts/1027082/?utm_campaign=1027082&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Thu, 23 Apr 2026 12:56:35 GMT</pubDate>
    <dc:creator><![CDATA[apdorodin]]></dc:creator>
      
      <category><![CDATA[ai]]></category><category><![CDATA[mcp]]></category><category><![CDATA[mcp-server]]></category><category><![CDATA[cli]]></category><category><![CDATA[llm]]></category><category><![CDATA[agent]]></category><category><![CDATA[ai agent]]></category><category><![CDATA[agentic ai]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @MaxRokatansky — Блог компании OTUS (+3) — N/P]]></title>
    <guid isPermaLink="true">https://habr.com/ru/companies/otus/posts/1026512/</guid>
    <link>https://habr.com/ru/companies/otus/posts/1026512/?utm_campaign=1026512&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p><strong>Бэкенд «тормозит», API ломаются, а архитектура трещит: уроки, которые помогают закрыть эти проблемы</strong></p><figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/2ea/ed7/fef/2eaed7feff9e3d33752b4f2fccfbe325.png" width="1800" height="980"></figure><p>У бэкенд-разработки есть неприятная особенность: большинство сложностей проявляется не в момент, когда пишется первый сервис, а позже — когда API начинает обрастать интеграциями, фоновые задачи конкурируют за ресурсы, поиск и хранилище требуют разных подходов к данным, а архитектурные решения внезапно начинают влиять на скорость разработки не меньше, чем качество кода.</p><p>В этой подборке — бесплатные демо-уроки от преподавателей-практиков про те части бэкенда, которые обычно и забирают больше всего времени в реальной работе. Это хороший способ посмотреть на чужой инженерный подход, познакомиться с экспертом, задать вопросы по своей ситуации и заодно закрыть конкретные пробелы: в API, тестировании, нагрузке, инфраструктуре, работе с данными и проектировании систем.</p><ul><li><p>22 апреля 20:00. <a href="https://otus.pw/9fKu/" rel="noopener noreferrer nofollow">Bun + ИИ: создаём быстрый сервер нового поколения на JavaScript</a></p></li><li><p>22 апреля 20:00. <a href="https://otus.pw/dVlO/" rel="noopener noreferrer nofollow">Symfony Workflow: конечный автомат для реализации бизнес-логики</a></p></li><li><p>23 апреля 20:00. <a href="https://otus.pw/dVlO/" rel="noopener noreferrer nofollow">Многопоточность в C++: как писать быстрые и безопасные приложения</a></p></li><li><p>23 апреля 20:00. <a href="https://otus.pw/iB16/" rel="noopener noreferrer nofollow">Паттерны RESTful API. Как проектировать удобные, масштабируемые и гибкие API?</a></p></li><li><p>28 апреля 20:00. <a href="https://otus.pw/6Axs/" rel="noopener noreferrer nofollow">Фоновые задачи в Django: работа с Celery</a></p></li><li><p>30 апреля 20:00. <a href="https://otus.pw/y3gJ/" rel="noopener noreferrer nofollow">Поиск в базе знаний: где векторы ошибаются, а графы помогают</a></p></li><li><p>4 мая 20:00. <a href="https://otus.pw/PTT1/" rel="noopener noreferrer nofollow">Интерфейсы в Golang изнутри</a></p></li><li><p>5 мая 20:00. <a href="https://otus.pw/dVsE/" rel="noopener noreferrer nofollow">Postgres + JSON: реляционная мощь, документная гибкость</a></p></li><li><p>5 мая 20:00. <a href="https://otus.pw/vD8N/" rel="noopener noreferrer nofollow">Архитектурные решения в бэкенд-разработке</a></p></li><li><p>6 мая 19:00. <a href="https://otus.pw/DM8s/" rel="noopener noreferrer nofollow">Разработка проекта на Kotlin: коллаборация человека, архитектурных шаблонов и ИИ-команды</a></p></li><li><p>6 мая 20:00. <a href="https://otus.pw/k1C9H/" rel="noopener noreferrer nofollow">Rust в деле: пишем многопользовательский чат с сервером, клиентом и CLI</a></p></li><li><p>7 мая 20:00. <a href="https://otus.pw/X0cA/" rel="noopener noreferrer nofollow">От кода до Kubernetes за полтора часа</a></p></li><li><p>7 мая 20:00. <a href="https://otus.pw/tAZL/" rel="noopener noreferrer nofollow">Тестирование микросервисов на Go: почему ваш сервис ломается под 1000 RPS</a></p></li><li><p>13 мая 20:00. <a href="https://otus.pw/qMPdU/" rel="noopener noreferrer nofollow">Kafka Streams DSL</a></p></li><li><p>13 мая 20:00. <a href="https://otus.pw/BUqE/" rel="noopener noreferrer nofollow">ClickHouse для аналитики больших данных: практические кейсы и связь с NoSQL-экосистемой</a></p></li><li><p>14 мая 20:00. <a href="https://otus.pw/cUMl/" rel="noopener noreferrer nofollow">Взаимодействие с базой данных и миграции на Go</a></p></li></ul><blockquote><p><em>Полный список бесплатных уроков от преподавателей курсов по программированию, инфраструктуре и не только уже доступен </em><a href="https://otus.pw/goUn/" rel="noopener noreferrer nofollow"><em>в календаре мероприятий.</em></a></p></blockquote> <a href="https://habr.com/ru/posts/1026512/?utm_campaign=1026512&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Wed, 22 Apr 2026 10:13:03 GMT</pubDate>
    <dc:creator><![CDATA[MaxRokatansky (OTUS)]]></dc:creator>
      
      <category><![CDATA[бэкенд-разработка]]></category><category><![CDATA[микросервисы]]></category><category><![CDATA[архитектурные решения]]></category><category><![CDATA[Postgres]]></category><category><![CDATA[подборка вебинаров]]></category><category><![CDATA[бесплатные уроки]]></category><category><![CDATA[онлайн-обучение]]></category><category><![CDATA[карьера в ит]]></category><category><![CDATA[профессиональное развитие]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @TonyAlt — Unity (+4) — N/P]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1025780/</guid>
    <link>https://habr.com/ru/posts/1025780/?utm_campaign=1025780&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p><strong>Как разработчикам монетизировать свои игры в 2026?</strong></p><p>Всем привет! Хотели похвастаться очередным сложным, но очень важным шагом на пути к возрождению российского геймдева и заодно спросить мнения окружающих (да, мы всегда сначала делаем, потом думаем).</p><p>Традиционный подход подразумевает, что разработчик заключает договор с площадкой (Steam, VK Play, Itch и т.д.). Игрок покупает игру, и деньги идут на счёт платформы. После этого в определенные даты происходит выплаты на счета разработчиков за вычетом комиссий. Где-то больше, где-то меньше, где-то по-другому. Но смысл тот же. Этот подход позволяет, во-первых, брать комиссии, во-вторых, легче работать с возвратами и в-третьих, быстрее распознавать отмывание денег и мошенничество.</p><p>Мы решили использовать схему маркетплейсов, где каждый разработчик приходит со своим статусом (ООО, ИП, смз). Но приходит он в первую очередь не к нам, а к платёжным агрегаторам типа Юкасса, Робокасса, любая …касса. Одним словом, подключает себе интернет-эквайринг, такое делает любой банк. Банк ему даёт API для подключения, ID магазина, ключи для проведения оплат и всё, действуй.</p><p>Где здесь мы? Мы предоставляем бесплатный хостинг для игр. Сама площадка + страница игры + страница разработчика. Всё тоже самое что у itch[.]io. Заодно есть консоль разработчика, в которую добавляется всё больше и больше возможностей. Соответственно, в этой консоли разработчик указывает тот самый идентификатор магазина, суперсекретный ключ и дальше надеется на магию.</p><p>Если магия происходит, то наш скрипт подставляет его данные в другой скрипт, только уже от платёжного агрегатора. Игрок видит кнопку обычную кнопку оплаты и оплачивает, после чего денюжки магическим образом летят на счёт разработчика. На этом магия заканчивается, начинается то ли математика, то ли бухгалтерия (я в этом не силён, не шарю).</p><p>Опережу (почти) все вопросы и сразу отвечу:</p><p>Q: На что вы будете существовать если у вас комиссии 0%?</p><p>A: При покупке игры рядом есть еще кнопочка “поддержать платформу”, надеемся, что это сработает</p><p>Q: Вы делаете очередного убийцу стима?</p><p>A: Нет</p><p>Q: Это точно не развод?</p><p>A: Точно нет, чесслово</p><p>На остальные вопросы обязательно ответим. Так как это не реклама, то прямо указывать название площадки не буду, но подскажу, что наш канал <a href="https://t.me/dustore_official" rel="noopener noreferrer nofollow">https://t.me/dustore_official</a></p> <a href="https://habr.com/ru/posts/1025780/?utm_campaign=1025780&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Mon, 20 Apr 2026 18:05:32 GMT</pubDate>
    <dc:creator><![CDATA[TonyAlt]]></dc:creator>
      
      <category><![CDATA[публикация игр]]></category><category><![CDATA[разработка игр]]></category><category><![CDATA[монетизация игр]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @JordanCpp — C (+4) — 20.04.2026 14:17]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1025592/</guid>
    <link>https://habr.com/ru/posts/1025592/?utm_campaign=1025592&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p><strong>Переосмысление библиотеки <a href="https://github.com/JordanCpp/LDL" rel="noopener noreferrer nofollow">LDL</a>.</strong></p><figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/8eb/316/594/8eb3165940792d960cabf23cb81bb10c.jpg" width="802" height="632"></figure><p>Я полностью пересмотрел концепцию библиотеки LDL.</p><p><strong>Что такое LDL?</strong><br>Это графическая библиотека с единым API для всех систем как старых, так и новых.</p><p>Раньше я писал её на C++98, что давало хорошую портабельность. Но сейчас я пересмотрел многие тезисы, которые декларировал на GitHub, чтобы наконец добраться до первого релиза.</p><p>Новая стратегия</p><p>Я решил выпускать релизы&nbsp;<strong>без реализации полного функционала</strong>&nbsp;(графика, звук, шрифты и т.д.) постепенно, итеративно.</p><ul><li><p>Перешёл на&nbsp;<strong>C89</strong>&nbsp;для максимальной переносимости. Это не только DOS или Windows 3.x, но и старые системы вроде Solaris, PlayStation 1 и другие.</p></li><li><p>Для&nbsp;<strong>первого релиза</strong>&nbsp;реализую минимальный базовый функционал: графику (OpenGL, Vulkan), окна и события. По возможностям аналог GLFW.</p></li><li><p>С каждым следующим релизом буду добавлять: 2D-рендер, звук, шрифты и прочее.</p></li></ul><p>Лицензия и целевые платформы</p><ul><li><p>Лицензия меняется на&nbsp;<strong>LGPLv3</strong>.</p></li><li><p>На старте поддерживаются&nbsp;<strong>Windows и Linux</strong>.</p></li></ul><p>Качество и инструменты</p><p>При разработке использую:</p><ul><li><p>AddressSanitizer (ASan)</p></li><li><p>UndefinedBehaviorSanitizer (UBSan)</p></li><li><p>Различные анализаторы кода</p></li></ul><p>Я считаю, что такая стратегия полезнее, чем годами доводить библиотеку до версии 1.0 в офлайн-режиме.</p><p><strong>Примеры и бэкенды</strong></p><ul><li><p>Добавлю&nbsp;<strong>десятки примеров</strong>&nbsp;с OpenGL 1.x, OpenGL 3.x и Vulkan.</p></li><li><p>Буду добавлять&nbsp;<strong>бэкенды для LDL</strong>: не только под ОС, но и поверх других графических библиотек — SDL, SFML, GLFW и т.д.</p></li><li><p><strong>API остаётся единым</strong>&nbsp;для всех бэкендов.</p></li></ul><p>Это позволит сразу добавить поддержку звука и шрифтов (через бэкенды), а в нативных версиях реализовывать их позже.</p><p>&nbsp;<strong>2D-рендер без границ</strong></p><p>Одной из главных задач LDL я вижу создание&nbsp;<strong>единого 2D-интерфейса</strong>, который стирает различия между поколениями графики.</p><p>Вам не нужно думать о том, что находится в системе: современная видеокарта с&nbsp;<strong>Vulkan</strong>, старый ускоритель с&nbsp;<strong>OpenGL 1.2</strong>&nbsp;или вообще только центральный процессор (<strong>Software Rendering</strong>).</p><ul><li><p><strong>Единый интерфейс</strong>: Вы используете одни и те же команды для рисования пикселей, линий и спрайтов.</p></li><li><p><strong>Адаптивность</strong>: LDL сам выберет наиболее эффективный способ вывода изображения. На современной системе это будет аппаратное ускорение, а на «железе» без видеокарты оптимизированный программный растеризатор.</p></li><li><p><strong>Визуальная честность</strong>: Ваш визуальный стиль останется неизменным, на чем бы он ни запускался. Это дает возможность делать игры и приложения, которые выглядят и работают одинаково и на ретро-ноутбуке, и на современном мониторе.</p></li></ul><p><strong>Философия: Машина времени в вашем коде</strong></p><p>Зачем тратить силы на поддержку систем, которые многие считают «трупами»?</p><p><strong>1. Борьба с цифровым забвением</strong></p><p>Современный софт живет 3–5 лет. Мы выбрасываем железо не потому, что оно сломалось, а потому, что софт стал слишком тяжелым и ленивым. LDL — это протест против «запланированного устаревания». Я хочу, чтобы код, написанный сегодня, мог дышать в железе любой эпохи.</p><p><strong>2. Инженерный аскетизм</strong></p><p>Когда у тебя гигабайты памяти, ты перестаешь ценить каждый байт. Написание библиотеки под C89 для слабого железа — это духовная практика для программиста. Это возвращение к искусству находить изящные решения в условиях жестких ограничений. Каждый сэкономленный такт процессора — это дань уважения инженерам прошлого.</p><p><strong>3. Преемственность поколений</strong></p><p>Мы стоим на плечах гигантов, но часто забываем их имена. LDL сохраняет возможность для диалога между эпохами. Это инструмент, который позволяет современному разработчику почувствовать «металл» старых машин, не теряя связи с современными технологиями вроде Vulkan.</p><p><strong>Итог</strong></p><p>LDL — это&nbsp;<strong>Little Directmedia Layer</strong>. Он маленький не потому, что слабый, а потому, что в нем нет ничего лишнего. Это попытка создать код, который будет принадлежать не конкретной версии ОС, а истории программирования в целом.</p><p>Один API. Один код. Тридцать лет компьютерной истории.</p> <a href="https://habr.com/ru/posts/1025592/?utm_campaign=1025592&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Mon, 20 Apr 2026 11:17:08 GMT</pubDate>
    <dc:creator><![CDATA[JordanCpp]]></dc:creator>
      
      <category><![CDATA[c89]]></category><category><![CDATA[c++]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @MaxRokatansky — Блог компании OTUS (+2) — N/P]]></title>
    <guid isPermaLink="true">https://habr.com/ru/companies/otus/posts/1024194/</guid>
    <link>https://habr.com/ru/companies/otus/posts/1024194/?utm_campaign=1024194&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p><strong>30 беплатных уроков недели: AI, Spark 4.0, C++, REST API, Angular и Linux</strong></p><figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/5b6/238/04f/5b623804fc6b24611d08a63f32832978.png" width="1800" height="980"></figure><p>Привет, Хабр. Собрали подборку ближайших бесплатных уроков, которые проведут  преподаватели курсов Отус в преддверии старта новых курсов. На них можно узнать о формате обучения, пообщаться с экспертами и заодно закрыть пробелы в знаниях по интересующей теме. Выбирайте свою тему и присоединяйтесь.</p><p><strong>20 апреля, понедельник:</strong></p><ul><li><p>20:00. <a href="https://otus.pw/gaBU/" rel="noopener noreferrer nofollow">Unit-тесты для iOS приложений, работаем над качеством изнутри </a></p></li><li><p>20:00. <a href="https://otus.pw/3Pr0/" rel="noopener noreferrer nofollow">Качество данных (data quality) на практике: от технических метрик до внедрения в команде </a></p></li><li><p>20:00. <a href="https://otus.pw/hv7T/" rel="noopener noreferrer nofollow">От интерфейса до корзины: создаём мини интернет-магазин на языке JavaScript</a> </p></li><li><p>20:00. <a href="https://otus.pw/MIgq/" rel="noopener noreferrer nofollow">Эффекты в Scala</a> </p></li><li><p>20:00. <a href="https://otus.pw/s8kB/" rel="noopener noreferrer nofollow">Балансировка и геораспределение: как создать быстрое и надёжное приложение для всего мира </a></p></li><li><p>20:00. <a href="https://otus.pw/nEMO8/" rel="noopener noreferrer nofollow">Менеджер в перегрузе: как выжить и не выгореть</a> </p></li></ul><p><strong>21 апреля, вторник:</strong></p><ul><li><p>19:00. <a href="https://otus.pw/OCow/" rel="noopener noreferrer nofollow">BPMN для 1С: Как правильно моделировать интеграции? (Разбираем 4 уровня детализации) </a></p></li><li><p>19:00. <a href="https://otus.pw/qlpJ/" rel="noopener noreferrer nofollow">Значение корпоративной архитектуры для реализации стратегии цифровой трансформации </a></p></li><li><p>20:00. <a href="https://otus.pw/h61O/" rel="noopener noreferrer nofollow">Функции в SQL: вычисления и переиспользование кода</a> </p></li><li><p>20:00. <a href="https://otus.pw/uUBE/" rel="noopener noreferrer nofollow">Оптимизация запросов 1С </a></p></li><li><p>20:00. <a href="https://otus.pw/9kPk/" rel="noopener noreferrer nofollow">Архитектура мониторинга ИБ инфраструктуры на SIEM</a> </p></li><li><p>20:00. <a href="https://otus.pw/bXuxO/" rel="noopener noreferrer nofollow">Производительность кода на примере алгоритмов сортировки </a></p></li><li><p>20:00. <a href="https://otus.pw/1l64/" rel="noopener noreferrer nofollow">Как BPMN помогает видеть узкие места </a></p></li><li><p>20:00. <a href="https://otus.pw/j8HG/" rel="noopener noreferrer nofollow">Архитектура Angular-приложения: как писать масштабируемый frontend</a> </p></li><li><p>20:00. <a href="https://otus.pw/AanU/" rel="noopener noreferrer nofollow">Связанные списки в ядре Linux: от API до реального кода </a></p></li><li><p>20:00. <a href="https://otus.pw/yqPd2/" rel="noopener noreferrer nofollow">Использование BGP для маршрутизации IPv6 </a></p></li></ul><p><strong>22 апреля, среда:</strong></p><ul><li><p>19:00. <a href="https://otus.pw/7rQJ/" rel="noopener noreferrer nofollow">Основы балансировки нагрузки в Angie и Nginx </a></p></li><li><p>20:00. <a href="https://otus.pw/HkPQ/" rel="noopener noreferrer nofollow">Бизнес-процессы CRM. Стандартные активити CRM</a> </p></li><li><p>20:00. <a href="https://otus.pw/Jo8W/" rel="noopener noreferrer nofollow">Bun + ИИ: создаём быстрый сервер нового поколения на JavaScript (Bun — современная среда выполнения JavaScript; ИИ — искусственный интеллект)</a> </p></li><li><p>20:00. <a href="https://otus.pw/B9gR/" rel="noopener noreferrer nofollow">Symfony Workflow: конечный автомат для реализации бизнес-логики </a></p></li><li><p>20:00. <a href="https://otus.pw/Mw5R/" rel="noopener noreferrer nofollow">Делегирование без боли: как перестать быть “главным исполнителем” и не скатиться в микроменеджмент</a> </p></li><li><p>20:00. <a href="https://otus.pw/LW3j/" rel="noopener noreferrer nofollow">Программируемые реле в АСУ ТП: гибкий инструмент для решения инженерных задач </a></p></li><li><p>20:00. <a href="https://otus.pw/e38t/" rel="noopener noreferrer nofollow">Создание нейро-сотрудника на базе Telegram-бота и GPT: от регистрации до рабочего прототипа </a></p></li></ul><p><strong>23 апреля, четверг:</strong></p><ul><li><p>18:00. <a href="https://otus.pw/GCa7/" rel="noopener noreferrer nofollow">Cоздаём ИИ-ассистента для системного аналитика за 1 час </a></p></li><li><p>19:00. <a href="https://otus.pw/QPSU/" rel="noopener noreferrer nofollow">Интегрируем EDT в процессы непрерывной интеграции. Подключаем 1С к CI/CD </a></p></li><li><p>20:00. <a href="https://otus.pw/WVqO/" rel="noopener noreferrer nofollow">Что нового в Spark 4.0 </a></p></li><li><p>20:00. <a href="https://otus.pw/YB6V2/" rel="noopener noreferrer nofollow">Многопоточность в C++: как писать быстрые и безопасные приложения </a></p></li><li><p>20:00. <a href="https://otus.pw/wKgpV/" rel="noopener noreferrer nofollow">Паттерны RESTful API. Как проектировать удобные, масштабируемые и гибкие API? </a></p></li></ul><p><strong>27 апреля, понедельник:</strong></p><ul><li><p>20:00. <a href="https://otus.pw/aC49/" rel="noopener noreferrer nofollow">Рисуем в формате онлайн модель процесса BPMN в Camunda Modeler </a></p></li><li><p>20:00. <a href="https://otus.pw/ZSzk/" rel="noopener noreferrer nofollow">Настройка кластера Elasticsearch</a></p></li></ul><blockquote><p><em>Еще больше бесплатных уроков от преподавателей курсов можно посмотреть </em><a href="https://otus.pw/BpC0T/" rel="noopener noreferrer nofollow"><em>в календаре мероприятий.</em></a></p></blockquote> <a href="https://habr.com/ru/posts/1024194/?utm_campaign=1024194&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Mon, 20 Apr 2026 07:28:15 GMT</pubDate>
    <dc:creator><![CDATA[MaxRokatansky (OTUS)]]></dc:creator>
      
      <category><![CDATA[карьера в ит]]></category><category><![CDATA[подборка вебинаров]]></category><category><![CDATA[бесплатные уроки]]></category><category><![CDATA[профессиональное развитие]]></category><category><![CDATA[повышение грейда]]></category><category><![CDATA[lifelong education]]></category><category><![CDATA[обучение в ит]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @Assador — Текстовые редакторы и IDE (+4) — N/P]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1024892/</guid>
    <link>https://habr.com/ru/posts/1024892/?utm_campaign=1024892&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p>Пока везут в&nbsp;Zed нативный diff выделенных кусков кода, с&nbsp;подсветкой, преферансом и&nbsp;барышнями, мы будем пить то, что&nbsp;есть&nbsp;😁</p><p>Скрипт намбер&nbsp;ван:</p><pre><code class="bash">#!/bin/bash

FILE1="/tmp/clp.saved"

# xclip -o -selection primary &gt; "$FILE1"
wl-paste --primary &gt; "$FILE1"
notify-send "Diff" "Первый фрагмент сохранён"</code></pre><p>вешаем на&nbsp;одно сочетание клавиш (у&nbsp;меня, например, для&nbsp;удобства, <code>Alt+Shift+1</code>)<br> (выбираем на&nbsp;вкус для X11 или Wayland)</p><p>Скрипт намбер&nbsp;ту:</p><pre><code class="bash">#!/bin/bash

FILE1="/tmp/clp.saved"
FILE2=$(mktemp /tmp/clp.XXXXXX)

trap 'rm -f "$FILE2"' EXIT

# xclip -o -selection primary &gt; "$FILE2"
wl-paste --primary &gt; "$FILE2"

if [ ! -s "$FILE1" ] || [ ! -s "$FILE2" ]; then
	notify-send "Ошибка" "Нет текста для сравнения"
	exit 1
fi

meld "$FILE1" "$FILE2"</code></pre><p>вешаем на&nbsp;другое сочетание клавиш (у&nbsp;меня, например, <code>Alt+Shift+2</code>)</p><p>Изолента и&nbsp;реактивный двигатель&nbsp;— вот&nbsp;всё, что нам нужно. Лучше, чем&nbsp;ничего, по&nbsp;крайней мере…<br> Первый скрипт сохраняет выделенный текст во&nbsp;временный файл <code>/tmp/clp.saved</code>.<br> Второй скрипт сохраняет выделенный текст в&nbsp;другой временный файл <code>/tmp/clp.XXXXXX</code>, открывает&nbsp;их оба в&nbsp;нашем любимом <strong>Meld</strong>, мы на всё это дело любуемся, сравниваем, закрываем Meld, после чего скрипт удаляет этот второй временный файл со&nbsp;случайным постфиксом, чтобы не&nbsp;болтался зря. Первый, <code>/tmp/clp.saved</code> пока остаётся, чтобы было удобно с&nbsp;одним и&nbsp;тем&nbsp;же «первовыделенным» сравнивать несколько вариантов, и&nbsp;его всегда можно переопределить первым скриптом.</p><p><strong>Итого</strong>: Выделили кусок, <code>Alt+Shift+1</code>, выделили другой кусок, <code>Alt+Shift+2</code>&nbsp;— смотрим, радуемся!&nbsp;😁</p> <a href="https://habr.com/ru/posts/1024892/?utm_campaign=1024892&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Sat, 18 Apr 2026 08:10:30 GMT</pubDate>
    <dc:creator><![CDATA[Assador]]></dc:creator>
      
      <category><![CDATA[zed]]></category><category><![CDATA[meld]]></category><category><![CDATA[bash]]></category><category><![CDATA[лайфхаки]]></category><category><![CDATA[инструменты]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @AleksandraUvarova — Блог компании PVS-Studio (+3) — 17.04.2026 13:09]]></title>
    <guid isPermaLink="true">https://habr.com/ru/companies/pvs-studio/posts/1024582/</guid>
    <link>https://habr.com/ru/companies/pvs-studio/posts/1024582/?utm_campaign=1024582&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p><strong>Как устроен компилятор?</strong></p><figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/52b/498/214/52b498214111ad5f923740beb8580ac5.png" width="1600" height="902"></figure><p>Мы каждый день пишем код, но часто воспринимаем компилятор как "чёрный ящик". Сегодня приоткроем завесу тайны над работой компилятора, расскажем о его жизненном цикле и объясним, на каком этапе в игру вступают деревья. </p><p>Под капотом скрывается целый конвейер, который включает в себя построение дерева, оптимизацию и генерацию кода. Мы разобрали все этапы на конкретных примерах и написали статью для тех, кто хочет понять, <a href="https://pvs-studio.ru/ru/blog/posts/1364/?utm_source=website&amp;utm_medium=habr&amp;utm_campaign=readmore&amp;utm_content=article" rel="noopener noreferrer nofollow">как работает компилятор</a>.</p> <a href="https://habr.com/ru/posts/1024582/?utm_campaign=1024582&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Fri, 17 Apr 2026 10:09:36 GMT</pubDate>
    <dc:creator><![CDATA[AleksandraUvarova (PVS-Studio)]]></dc:creator>
      
      <category><![CDATA[программирование]]></category><category><![CDATA[компиляторы]]></category><category><![CDATA[устройство]]></category><category><![CDATA[c++]]></category><category><![CDATA[c#]]></category><category><![CDATA[java]]></category><category><![CDATA[ast]]></category><category><![CDATA[абстрактное синтаксическое дерево]]></category><category><![CDATA[синтаксический анализ]]></category><category><![CDATA[статистический анализ]]></category>
  </item>
  

	
  

  

  

      

      

      

    
  </channel>
</rss>
