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

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

  <channel>
    <title><![CDATA[Все статьи подряд / Node.JS / Хабр]]></title>
    <link>https://habr.com/ru/hubs/nodejs/articles/</link>
    <description><![CDATA[Node.JS – среда для запуска JavaScript-приложений]]></description>
    <language>ru</language>
    <managingEditor>editor@habr.com</managingEditor>
    <generator>habr.com</generator>
    <pubDate>Tue, 05 May 2026 04:43:31 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[Postgres advisory locks на Neon ломаются от TCP-сброса. История четырёх фиксов retry-логики]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1031236/</guid>
      <link>https://habr.com/ru/articles/1031236/?utm_campaign=1031236&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/d14/941/9c3/d149419c3f535e725ef45cfe8ab0b493.png" /><p>Расскажу про четыре production-инцидента на одном куске кода за десять дней. В каждом я думал, что разобрался. Закончилось тем, что я выкинул <code>pg_advisory_lock</code> из retry-пути и поставил <code>FOR UPDATE SKIP LOCKED</code>. Day-generation лок остался advisory-ным, но утечка там не критична - почему именно, разберу в конце. Полезно, если у вас Postgres на Neon (или Supabase, или Aiven serverless) и где-то по коду есть session-scoped advisory locks для координации задач между репликами.</p> <a href="https://habr.com/ru/articles/1031236/?utm_campaign=1031236&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Mon, 04 May 2026 13:08:36 GMT</pubDate>
      <dc:creator><![CDATA[MatushkinVD]]></dc:creator>
      
      <category><![CDATA[postgresql]]></category><category><![CDATA[advisory lock]]></category><category><![CDATA[neon]]></category><category><![CDATA[serverless]]></category><category><![CDATA[retry]]></category><category><![CDATA[идемпотентность]]></category><category><![CDATA[distributed lock]]></category>
    </item>
  

  

  

	
  

  

  

    

  

  

	
  

  
    <item>
      <title><![CDATA[[Перевод] OfficeAI — виртуальный офис для ваших AI-агентов]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1030424/</guid>
      <link>https://habr.com/ru/articles/1030424/?utm_campaign=1030424&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/606/a5b/db9/606a5bdb997f04ccbc2799bff805f0af.png" /><p>Настольное приложение,&nbsp;которое превращает AI-агентов в сотрудников изометрического офиса.&nbsp;Один взгляд&nbsp;—&nbsp;и видно,&nbsp;кто работает,&nbsp;кто думает,&nbsp;а кто зашёл на кухню за кофе.&nbsp;Это пет-проект,&nbsp;сделанный для фана:&nbsp;эксперимент с визуализацией работы нескольких AI-агентов одновременно,&nbsp;без коммерческих амбиций и без планов превращать его в продукт.</p> <a href="https://habr.com/ru/articles/1030424/?utm_campaign=1030424&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Fri, 01 May 2026 10:45:53 GMT</pubDate>
      <dc:creator><![CDATA[dykyi_roman]]></dc:creator>
      
      <category>ai</category><category>rust</category><category>node.js</category>
    </item>
  

  

    
    <item>
      <title><![CDATA[Безошибочная работа с Kafka из Node js. Часть 3 Cтруктура сообщений, когда Kafka не нужна и теряет данные]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1013046/</guid>
      <link>https://habr.com/ru/articles/1013046/?utm_campaign=1013046&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/ea1/9e0/037/ea19e0037aa8001bee41c784effbc091.png" /><p>В предыдущих частях рассматривались аспекты <a href="https://habr.com/ru/articles/1012066/" rel="noopener noreferrer nofollow">публикации сообщений</a>, <a href="https://habr.com/ru/articles/904932/" rel="noopener noreferrer nofollow">ребалансировки консьюмер групп и масштабирования чтения, а также проектирования консьюмеров</a>. Эта часть посвящена базовой структуре сообщений, неподходящим сценариям использования Kafka и гарантиям записи.</p> <a href="https://habr.com/ru/articles/1013046/?utm_campaign=1013046&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Thu, 30 Apr 2026 08:31:17 GMT</pubDate>
      <dc:creator><![CDATA[mitya_k]]></dc:creator>
      
      <category><![CDATA[kafka]]></category><category><![CDATA[nodejs]]></category><category><![CDATA[брокеры сообщений]]></category><category><![CDATA[kafkaconnect]]></category><category><![CDATA[producer-consumer]]></category><category><![CDATA[message-broker]]></category><category><![CDATA[apache kafka]]></category><category><![CDATA[событийная архитектура]]></category><category><![CDATA[kafka consumer]]></category><category><![CDATA[kafka apache]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Затенение в JavaScript]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1028948/</guid>
      <link>https://habr.com/ru/articles/1028948/?utm_campaign=1028948&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/631/795/ae3/631795ae3ee404fee3dddbeeac561283.jpg" /><p>В&nbsp;статье о <a href="https://habr.com/ru/articles/994816/" rel="noopener noreferrer nofollow">глобальной области видимости в&nbsp;JavaScript</a>, мы коротко коснулись темы затенений (<em>бурж. variable shadowing</em>), в&nbsp;данной статье мы рассмотрим это явление подробнее.</p><p>В&nbsp;одной области видимости, не&nbsp;может&nbsp;быть переменных или&nbsp;аргументов с&nbsp;одинаковыми именами. Нарушение данного правила ведёт к&nbsp;ошибке...</p> <a href="https://habr.com/ru/articles/1028948/?utm_campaign=1028948&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Что такое затенение?</a>]]></description>
      
      <pubDate>Tue, 28 Apr 2026 08:31:28 GMT</pubDate>
      <dc:creator><![CDATA[JastaFly]]></dc:creator>
      
      <category><![CDATA[затенение]]></category><category><![CDATA[javascript]]></category><category><![CDATA[node.js]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Как я в 15 лет написал российскую социальную сеть с нуля — и что из этого вышло]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1028768/</guid>
      <link>https://habr.com/ru/articles/1028768/?utm_campaign=1028768&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/2a3/92f/ff9/2a392fff92c4cb392a6b30875066e998.png" /><p>Меня&nbsp;зовут&nbsp;Арсений,&nbsp;мне&nbsp;15&nbsp;лет.&nbsp;У&nbsp;меня&nbsp;99&nbsp;пользователей,&nbsp;более&nbsp;100&nbsp;SQL‑миграций&nbsp;и&nbsp;приложение&nbsp;на&nbsp;Android&nbsp;и&nbsp;Windows.&nbsp;И,&nbsp;что&nbsp;не&nbsp;менее&nbsp;важно,&nbsp;— команда&nbsp;единомышленников&nbsp;и&nbsp;поддержка&nbsp;тех,&nbsp;кто&nbsp;верил&nbsp;в&nbsp;проект&nbsp;с&nbsp;самого&nbsp;начала.</p><p>Если&nbsp;вам&nbsp;интересно&nbsp;попробовать&nbsp;— заходите&nbsp;на&nbsp;<strong><a href="http://%D0%B0%D0%B3%D0%BE%D1%80%D0%B0.com" rel="noopener noreferrer nofollow">агора.com</a></strong>.  </p> <a href="https://habr.com/ru/articles/1028768/?utm_campaign=1028768&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Mon, 27 Apr 2026 18:08:42 GMT</pubDate>
      <dc:creator><![CDATA[ars_stu]]></dc:creator>
      
      <category><![CDATA[социальная сеть]]></category><category><![CDATA[агора]]></category><category><![CDATA[учёба в программировании]]></category><category><![CDATA[react]]></category><category><![CDATA[typescript]]></category><category><![CDATA[supabase]]></category><category><![CDATA[в 15 лет]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Mode collapse в авто-блоге: четыре пятницы подряд LLM приносила нам один и тот же «спорный вопрос про ИИ»]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1028536/</guid>
      <link>https://habr.com/ru/articles/1028536/?utm_campaign=1028536&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/1e0/2ee/6a9/1e02ee6a9e7acc9d5bba3fb5df292ea8.PNG" /><p>Это история про открытый креативный промпт к LLM, оставленный без присмотра. Через месяц он превратил пятничную рубрику нашего блога в гимнастику парафразов одного и того же тезиса. Поймал я это не на первой пятнице и даже не на второй: каждая отдельная статья сама по себе выглядела нормально. На четвёртой стало очевидно.</p><p>Расскажу, какие четыре вещи я попробовал, прежде чем признать, что промпт-инжинирингом эту штуку не лечат. По дороге всплыло, что часть проблемы сидела не в промпте, а в нашей собственной конфигурации Gemini, на которую я не сразу обратил внимание (точнее - вообще не видел). И как в итоге мы перевели генератор тем с открытого «придумай вопрос» на заранее детерминированную ротацию из курируемого пула. Без файнтюна, без RAG, без переезда на другую модель.</p> <a href="https://habr.com/ru/articles/1028536/?utm_campaign=1028536&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Mon, 27 Apr 2026 10:41:44 GMT</pubDate>
      <dc:creator><![CDATA[MatushkinVD]]></dc:creator>
      
      <category><![CDATA[mode collapse]]></category><category><![CDATA[LLM]]></category><category><![CDATA[prompt engineering]]></category><category><![CDATA[Gemini]]></category><category><![CDATA[temperature]]></category><category><![CDATA[промпт-инжиниринг]]></category><category><![CDATA[автогенерация контента]]></category><category><![CDATA[Node.js]]></category><category><![CDATA[AI]]></category><category><![CDATA[API]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Как я построил кеш страниц для многодоменного проекта с помощью PVC и кастомного подхода]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1028314/</guid>
      <link>https://habr.com/ru/articles/1028314/?utm_campaign=1028314&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<p>У&nbsp;меня&nbsp;был проект, где один Next.js сайт обслуживал несколько доменов, и возникла задача&nbsp;— эффективно кешировать страницы, чтобы не&nbsp;пересоздавать их каждый раз. Сначала я попробовал внедрить кеширование через Redis: я написал хендлер, подключил его, но&nbsp;вскоре обнаружил, что&nbsp;Redis потребляет колоссальный объём оперативной памяти&nbsp;— порядка 100&nbsp;ГБ, и это при&nbsp;том, что&nbsp;ещё не&nbsp;все запросы&nbsp;были закешированы. Тогда я решил поискать другой подход и обратил внимание на&nbsp;PVC&nbsp;— общее хранилище, которое могли&nbsp;бы использовать все поды. Я начал изучать варианты работы с&nbsp;PVC и довольно&nbsp;быстро пришёл к&nbsp;идее общего кеш‑хранилища для&nbsp;всех подов. Я попробовал просто писать данные в&nbsp;PVC, но&nbsp;столкнулся с&nbsp;проблемой: каждый раз, когда под&nbsp;поднимался, он перезаписывал кеш. До&nbsp;тех пор, пока не&nbsp;подняты все поды, данные постоянно перезаписывались, а&nbsp;мне нужно&nbsp;было, чтобы первый под&nbsp;записал данные, а&nbsp;последующие только читали их. Я начал искать, как&nbsp;сделать кастомный кеш‑хендлер, но&nbsp;готовых решений не&nbsp;нашёл. </p> <a href="https://habr.com/ru/articles/1028314/?utm_campaign=1028314&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Mon, 27 Apr 2026 04:48:11 GMT</pubDate>
      <dc:creator><![CDATA[NikFourNik]]></dc:creator>
      
      <category><![CDATA[pvc]]></category><category><![CDATA[next.js]]></category><category><![CDATA[redis]]></category><category><![CDATA[cache]]></category><category><![CDATA[next]]></category><category><![CDATA[node]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Аналоги Vercel в России и мире]]></title>
      <guid isPermaLink="true">https://habr.com/ru/companies/amvera/articles/1028136/</guid>
      <link>https://habr.com/ru/companies/amvera/articles/1028136/?utm_campaign=1028136&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/8b4/d37/6a0/8b4d376a06d267357802cab5254607bb.png" /><p>Однажды разработчики NEXT.JS решили сделать сервис для хостинга и получился Vercel. Они смогли предложить рынку облачную архитектуру, определяемую фреймворком, что дало великолепный пользовательский опыт.</p><p>Но в ряде случаев нужны аналоги Vercel. Особенно в России, где сайты на Vercel недоступны для многих пользователей с мобильного интернета из-за региональных ограничений. Да и не у всех есть возможность оплачивать платные тарифы долларовой картой.</p><p>Чтобы лучше представить альтернативы Vercel и их сильные и слабые стороны, я рассмотрю архитектуру самого сервиса и его конкурентов. </p> <a href="https://habr.com/ru/articles/1028136/?utm_campaign=1028136&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Sun, 26 Apr 2026 14:25:17 GMT</pubDate>
      <dc:creator><![CDATA[MarkovM (Amvera)]]></dc:creator>
      
      <category><![CDATA[аналоги vercel]]></category><category><![CDATA[альтернативы vercel]]></category><category><![CDATA[российские аналоги vercel]]></category><category><![CDATA[альтернативы vercel в россии]]></category><category><![CDATA[аналоги netlify]]></category><category><![CDATA[альтернативы netlify]]></category><category><![CDATA[аналог vercel в россии]]></category><category><![CDATA[vercel не работает]]></category><category><![CDATA[vercel россия]]></category><category><![CDATA[netlify в россии]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Как я автоматизировал ведение финансов в Obsidian. Часть 1]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1027958/</guid>
      <link>https://habr.com/ru/articles/1027958/?utm_campaign=1027958&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<p>В какой-то момент я заметил, что сам учет финансов в Obsidian меня полностью устраивает, а вот сбор исходных данных для него каждый раз отнимает лишнее время.</p><p>Схема была простой и довольно утомительной: открыть несколько банков, посмотреть остатки по счетам и картам, потом перенести эти цифры в свои заметки. По отдельности это мелочь, но в регулярной рутине такие действия быстро начинают раздражать.</p><p>Я решил автоматизировать именно этот участок. Мне был нужен локальный и понятный способ собирать данные из интернет-банков, а уже потом использовать их в своей системе заметок.</p><p>В этой части речь пойдет именно про сбор данных: как я сделал небольшой bridge-слой между банками и Obsidian. Во второй части можно будет уже перейти к тому, как эти данные встраиваются в vault.</p> <a href="https://habr.com/ru/articles/1027958/?utm_campaign=1027958&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Sat, 25 Apr 2026 19:16:10 GMT</pubDate>
      <dc:creator><![CDATA[bulattttttttllllllll]]></dc:creator>
      
      <category><![CDATA[obsidian]]></category><category><![CDATA[javascript]]></category><category><![CDATA[codex]]></category><category><![CDATA[финансы]]></category><category><![CDATA[аналитика]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Пять неочевидных вещей, которые я узнал, запуская кино-соцсеть: от robots.txt-ловушки до 24-мерной математики вкуса]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1027876/</guid>
      <link>https://habr.com/ru/articles/1027876/?utm_campaign=1027876&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<p>Последние полгода я работаю над&nbsp;<a href="https://vibemuvik.ru/" rel="noopener noreferrer nofollow">VibeMuvik</a>&nbsp;— кино-соцсетью с рецензиями, дебатами и синхронным просмотром фильмов. Одна из тех штук, которые «ну вроде несложно», пока не начинаешь копать.</p><p>Эта статья — про&nbsp;<strong>неожиданные находки</strong>. Не про «как я выбрал стек» (скучно) и не про «туториал по WebRTC» (и без меня есть). Это пять ситуаций, в которых я споткнулся, обнаружил что-то интересное, и подумал «об этом стоит рассказать — другим пригодится».</p><p>Поехали.</p> <a href="https://habr.com/ru/articles/1027876/?utm_campaign=1027876&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Sat, 25 Apr 2026 14:40:09 GMT</pubDate>
      <dc:creator><![CDATA[vibemuvik]]></dc:creator>
      
      <category><![CDATA[robots.txt]]></category><category><![CDATA[SEO]]></category><category><![CDATA[WebRTC]]></category><category><![CDATA[Next.js]]></category><category><![CDATA[IndexNow]]></category><category><![CDATA[sitemap]]></category><category><![CDATA[Googlebot]]></category><category><![CDATA[Cinema DNA]]></category><category><![CDATA[синхронный просмотр]]></category><category><![CDATA[рекомендательные системы]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Telegraph API: CONTENT_TOO_BIG приходит раньше обещанных 64 КБ. Измеряем реальный лимит и разбираем обходной путь]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1026610/</guid>
      <link>https://habr.com/ru/articles/1026610/?utm_campaign=1026610&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/a76/819/8ba/a768198ba26d9bebfea1937da58fb712.PNG" /><p>Telegraph API обещает принимать content до 64 КБ, но на практике CONTENT_TOO_BIG прилетает уже на 17-20 КБ. Разбираю, как измерял реальный лимит, при чём тут UTF-8 vs UTF-16 для кириллицы, и каким обходным путём чинил молчаливую деградацию RU-канала.</p> <a href="https://habr.com/ru/articles/1026610/?utm_campaign=1026610&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Wed, 22 Apr 2026 12:10:51 GMT</pubDate>
      <dc:creator><![CDATA[MatushkinVD]]></dc:creator>
      
      <category><![CDATA[Telegraph API]]></category><category><![CDATA[CONTENT_TOO_BIG]]></category><category><![CDATA[Node.js]]></category><category><![CDATA[Telegram]]></category><category><![CDATA[кириллица]]></category><category><![CDATA[UTF-8]]></category><category><![CDATA[дебаг]]></category><category><![CDATA[лимиты API]]></category><category><![CDATA[fetch]]></category><category><![CDATA[интеграции]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Один движок на два рантайма: как мой сайт на Next.js делит формулы с Flutter-приложением]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1025632/</guid>
      <link>https://habr.com/ru/articles/1025632/?utm_campaign=1025632&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/36e/254/d03/36e254d03e295dfaf46337ed8ed1909c.png" /><p>Прошлой зимой я <a href="https://habr.com/ru/articles/1001080/" rel="noopener noreferrer nofollow">писал тут про «Мастерок»</a> — строительный калькулятор на Flutter для RuStore. Приложение поехало в прод, набрало 4.9 звезды, и в какой-то момент пришло осознание: аудитория смартфонных приложений — это аудитория смартфонных приложений. А человек, который в обед нагуглил «сколько мешков ротбанда на 20 квадратов», в магазин приложений не полезет. Он хочет страницу в браузере. Желательно без куки-баннера на полэкрана, без интерфейса из 2012-го и без того, чтобы перед ответом на вопрос ему предлагали посмотреть пять реклам.</p><p>Так появился <a href="http://getmasterok.ru" rel="noopener noreferrer nofollow"><code>getmasterok.ru</code></a> — веб-половина той же экосистемы. Сайт на Next.js 15, шестьдесят один калькулятор, ИИ-прораб, SEO, блог, всё как положено. И с одним неочевидным вызовом, который стал главным сюжетом этой статьи.</p><p>А вызов я нашёл не сам. Его нашёл пользователь.</p> <a href="https://habr.com/ru/articles/1025632/?utm_campaign=1025632&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Mon, 20 Apr 2026 12:22:03 GMT</pubDate>
      <dc:creator><![CDATA[Soft_gAming]]></dc:creator>
      
      <category><![CDATA[сайтостроение]]></category><category><![CDATA[приложение для android]]></category><category><![CDATA[next.js]]></category><category><![CDATA[timeweb]]></category><category><![CDATA[node.js фреймворки]]></category><category><![CDATA[строительный калькулятор]]></category><category><![CDATA[калькулятор]]></category><category><![CDATA[калькулятор стоимости]]></category><category><![CDATA[ai]]></category><category><![CDATA[ai-агенты]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Как опубликовать сайт на хостинг за три команды: от статики до Node.js]]></title>
      <guid isPermaLink="true">https://habr.com/ru/companies/amvera/articles/1025198/</guid>
      <link>https://habr.com/ru/companies/amvera/articles/1025198/?utm_campaign=1025198&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/95e/058/496/95e058496def05a0fe2604422754441c.png" /><p>Когда заканчиваешь работу над веб-приложением, будь то полноценный сайт или Telegram MiniApp, всегда есть желание сразу и без хлопот всё это захостить, показать друзьям, знакомым и сразу пустить в прод.</p><p>И встает вопрос: <strong>как вообще выложить это все в интернет, желательно по нормальной ссылке, с HTTPS и без тонны настроек VPS и nginx</strong>?</p><p>В этой статье я покажу способ, как публиковать сайты на PaaS-сервисах, просто привязав к ним Git-репозиторий и делая в него коммиты (или вообще просто перетягивая файлы в интерфейсе).</p> <a href="https://habr.com/ru/articles/1025198/?utm_campaign=1025198&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Sun, 19 Apr 2026 10:07:47 GMT</pubDate>
      <dc:creator><![CDATA[MarkovM (Amvera)]]></dc:creator>
      
      <category><![CDATA[как опубликовать сайт]]></category><category><![CDATA[как запустить сайт на сервере]]></category><category><![CDATA[деплой сайта]]></category><category><![CDATA[как захостить сайт]]></category><category><![CDATA[где опубликовать сайт]]></category><category><![CDATA[где запустить сайт]]></category><category><![CDATA[как разместить сайт в интернете]]></category><category><![CDATA[как запустить сайт в интернете]]></category><category><![CDATA[публикация сайта в интернет]]></category><category><![CDATA[как развернуть сайт на сервере]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Как отдавать лиды из Next.js в 1С Битрикс: outbound без очередей и воркеров]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1025026/</guid>
      <link>https://habr.com/ru/articles/1025026/?utm_campaign=1025026&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/d30/6b3/6a8/d306b36a88544705b0c3001149390ca1.jpg" /><p>Типовая задача на российском рынке: есть публичный сайт (лендинг, маркетплейс, каталог), на нём формы — заявка, регистрация, заявка партнёра. Эти лиды должны попадать в 1С Битрикс, где с ними работает отдел продаж.</p><p>Подход "в лоб" выглядит так: в обработчике формы сделать <code>await fetch('</code><a href="https://bitrix.../crm.lead.add" rel="noopener noreferrer nofollow"><code>https://bitrix.../crm.lead.add</code></a><code>', ...)</code> и вернуть пользователю ответ после того, как Битрикс подтвердил создание лида.</p><p>Это плохо работает. Битрикс REST API нестабилен по latency — 200 мс в норме, 8 секунд при нагрузке на стороне CRM. Пользователь сайта в это время смотрит на крутилку. Если Битрикс упал или таймаутит — сайт отдаёт ошибку, хотя пользователь форму заполнил корректно.</p><p>В этой статье — паттерн, который я использовал на маркетплейсе недвижимости на Next.js 16 + PostgreSQL 16 + 1С Битрикс. Без Redis, без BullMQ, без отдельного воркера. Просто Next.js API route + <code>after()</code> + минимальный HTTP-клиент с retry и таймаутом.</p><p>Цифры проекта для контекста: 25 объектов недвижимости в каталоге (отдельная сущность <code>ready_homes</code> оставлена за скобками статьи), 57 API-роутов, PostgreSQL 16.13 на VPS, деплой через systemd + nginx, интеграция с Битрикс — исключительно outbound (сайт → CRM).</p> <a href="https://habr.com/ru/articles/1025026/?utm_campaign=1025026&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Sat, 18 Apr 2026 14:07:08 GMT</pubDate>
      <dc:creator><![CDATA[yakov_etern8]]></dc:creator>
      
      <category><![CDATA[Next.js 16]]></category><category><![CDATA[Bitrix24]]></category><category><![CDATA[integration]]></category><category><![CDATA[PostgreSQL]]></category><category><![CDATA[webhook]]></category><category><![CDATA[retry]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Безошибочная работа с Kafka из Node js. Часть 2 Консьюмер]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/904932/</guid>
      <link>https://habr.com/ru/articles/904932/?utm_campaign=904932&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/ea7/7d0/a18/ea77d0a184afc54339e9bb6f4be43588.png" /><p>Если <a href="https://habr.com/ru/articles/1012066/" rel="noopener noreferrer nofollow">предыдущая часть</a> была посвящена аспектам, связанным с публикацией сообщений, то в этой части основное внимание уделено обработке сообщений, проектированию консьюмеров и проблеме ребаланса в консьюмер группе. </p> <a href="https://habr.com/ru/articles/904932/?utm_campaign=904932&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Fri, 17 Apr 2026 10:17:50 GMT</pubDate>
      <dc:creator><![CDATA[mitya_k]]></dc:creator>
      
      <category><![CDATA[kafka]]></category><category><![CDATA[nodejs]]></category><category><![CDATA[брокеры сообщений]]></category><category><![CDATA[apache kafka]]></category><category><![CDATA[consumer]]></category><category><![CDATA[message-broker]]></category><category><![CDATA[message brokers.]]></category><category><![CDATA[kafka consumer]]></category><category><![CDATA[kafka apache]]></category><category><![CDATA[apache]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Как я написал свою библиотеку валидации схем и создал свою альтернативу Zod]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1023038/</guid>
      <link>https://habr.com/ru/articles/1023038/?utm_campaign=1023038&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<p>Несколько лет назад в одном из моих проектов на чистом JavaScript возникла задача: валидировать большие вложенные объекты со сложной структурой. Объекты содержали различные подобъекты, к каждому из которых применялись свои правила валидации в зависимости от типа.</p><p>Задача усложнялась двумя дополнительными требованиями:</p> <a href="https://habr.com/ru/articles/1023038/?utm_campaign=1023038&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Mon, 13 Apr 2026 18:16:25 GMT</pubDate>
      <dc:creator><![CDATA[andrew_zol]]></dc:creator>
      
      <category><![CDATA[валидация]]></category><category><![CDATA[схема]]></category><category><![CDATA[standard schema]]></category><category><![CDATA[zod]]></category><category><![CDATA[zod vs yup]]></category><category><![CDATA[typescript]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Dart на бекенде: почему его бросила бывшая]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1022790/</guid>
      <link>https://habr.com/ru/articles/1022790/?utm_campaign=1022790&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/aa5/817/d2b/aa5817d2bb672a29e392c3eadc0517c5.jpg" /><p>Если ты тоже смотришь на Dart как на backend-альтернативу для Node.js, лучше пройти этот путь на чужих ошибках. Полные результаты benchmark'а — Go, Node.js, Dart, Bun, Deno, .NET — с методологией, конфигурацией и сырыми цифрами лежат на <a href="https://github.com/klerick/go-vs-dart" rel="noopener noreferrer nofollow">GitHub</a>. Под катом — сама история. Не технический отчёт, а инженерская драма: как 2 недели ушли на перенос архитектуры, почему всё выглядело идеально на бумаге, и как гипотеза с "экономией памяти" разбилась о реалии raw benchmark. И ещё — почему AI-агент сделал всё правильно, и именно это оказалось проблемой.  </p> <a href="https://habr.com/ru/articles/1022790/?utm_campaign=1022790&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Mon, 13 Apr 2026 10:16:24 GMT</pubDate>
      <dc:creator><![CDATA[klerick]]></dc:creator>
      
      <category><![CDATA[Dart]]></category><category><![CDATA[Backend]]></category><category><![CDATA[Go]]></category><category><![CDATA[Node.js]]></category><category><![CDATA[Kubernetes]]></category><category><![CDATA[Performance]]></category><category><![CDATA[Benchmark]]></category><category><![CDATA[Cloud Native]]></category><category><![CDATA[Claude Code]]></category><category><![CDATA[Архитектура]]></category>
    </item>
  

  

  

	
  

  

  

    

  

  

	
  

  
    <item>
      <title><![CDATA[[Перевод] Главные игроки экосистемы JavaScript по состоянию на 2026 год]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1021182/</guid>
      <link>https://habr.com/ru/articles/1021182/?utm_campaign=1021182&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/e2d/29c/f68/e2d29cf689264f4b105b23e3903c81a5.png" /><p>Ранее мы писали <a href="https://frontendmasters.com/blog/what-you-need-to-know-about-modern-css-2025-edition/" rel="noopener noreferrer nofollow">похожие статьи о CSS</a>, но JavaScript заслуживает не меньшего внимания! Тем более что JavaScript лучше справляется с версионированием. Мы рассмотрим новые возможности самого языка, а также основные среды выполнения, фреймворки, библиотеки и инструменты.</p> <a href="https://habr.com/ru/articles/1021182/?utm_campaign=1021182&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Thu, 09 Apr 2026 07:34:19 GMT</pubDate>
      <dc:creator><![CDATA[aio350]]></dc:creator>
      
      <category>javascript</category><category>js</category><category>typescript</category><category>ts</category><category>node.js</category><category>npm</category><category>vite</category><category>ecmascript</category><category>next.js</category><category>react</category>
    </item>
  

  

    
    <item>
      <title><![CDATA[Как мы оптимизировали компоненты во фронтенде: работа с версиями и оптимизация процессов]]></title>
      <guid isPermaLink="true">https://habr.com/ru/companies/kryptonite/articles/1020720/</guid>
      <link>https://habr.com/ru/companies/kryptonite/articles/1020720/?utm_campaign=1020720&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/089/2c0/699/0892c069971dd2902ebacd5ef14fcb89.jpg" /><p>Привет, Хабр! Меня зовут Василий Беляев. Я руководитель группы разработки по направлению фронтенда в ИТ-компании «Криптонит». В этой статье я расскажу про организацию работы с версиями и компонентами, оптимизацию рабочего процесса внутри команды, а также опишу несколько лайфхаков, которые мы применили.</p> <a href="https://habr.com/ru/articles/1020720/?utm_campaign=1020720&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Wed, 08 Apr 2026 09:38:13 GMT</pubDate>
      <dc:creator><![CDATA[devleader-pro (Криптонит)]]></dc:creator>
      
      <category><![CDATA[оптимизация]]></category><category><![CDATA[frontend]]></category><category><![CDATA[vue.js]]></category><category><![CDATA[библиотеки]]></category><category><![CDATA[package.json]]></category><category><![CDATA[workflow]]></category><category><![CDATA[конфигурация]]></category><category><![CDATA[сборка проекта]]></category><category><![CDATA[синхронизация версий]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Я написал собственный язык программирования на Node.js — и вот что из этого вышло]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1020258/</guid>
      <link>https://habr.com/ru/articles/1020258/?utm_campaign=1020258&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/9b2/a9e/204/9b2a9e204a25cd9206258bcb1bbdf316.png" /><p>Привет, Хабр! Меня зовут SlywerX, я студент 3 курса кафедры Программной инженерии МТУ (Алматы) и fullstack-разработчик. Несколько месяцев назад я задался вопросом: <em>а как вообще работают языки программирования изнутри?</em> Лучший способ разобраться — написать свой. Так появился <strong>SWX (Shadow Web eXploit)</strong> — скриптовый язык на базе Node.js с собственным синтаксисом, криптографией и даже HTML-рендерингом.</p><p>Сейчас SWX на версии 7.0.0. В этой статье расскажу как всё устроено, что было сложно и зачем это вообще нужно было делать.</p> <a href="https://habr.com/ru/articles/1020258/?utm_campaign=1020258&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Tue, 07 Apr 2026 09:15:37 GMT</pubDate>
      <dc:creator><![CDATA[SlywerX]]></dc:creator>
      
      <category><![CDATA[разработка программного обеспечения]]></category><category><![CDATA[разработка]]></category><category><![CDATA[программирование]]></category><category><![CDATA[фуллстек]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Утечки памяти в замыканиях JavaScript]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1020246/</guid>
      <link>https://habr.com/ru/articles/1020246/?utm_campaign=1020246&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/f8c/403/e15/f8c403e152026f9c78053f72b7e66200.jpg" /><p>В <a href="https://habr.com/ru/articles/1017374/" rel="noopener noreferrer nofollow">предыдущей статье</a> мы подробно рассмотрели замыкания в JavaScript, а сейчас изучим как из-за них возникают утечки памяти и как этого избежать.</p><p>Замыкание существует пока, есть хоть одна ссылка на функцию создавшую его. Если быть неосторожным, это может привести к утечкам памяти: когда объект уже не используется в программе, но сборщик мусора не может его удалить. Такие ссылки могут быть неочевидными...</p> <a href="https://habr.com/ru/articles/1020246/?utm_campaign=1020246&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Что за неочевидные ссылки?</a>]]></description>
      
      <pubDate>Tue, 07 Apr 2026 09:01:08 GMT</pubDate>
      <dc:creator><![CDATA[JastaFly]]></dc:creator>
      
      <category><![CDATA[замыкания]]></category><category><![CDATA[утечки памяти]]></category><category><![CDATA[javascript]]></category><category><![CDATA[node.js]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Claude отключил мне OpenClaw. Штош… я написал замену TG+Claude Max по oAuth]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1019914/</guid>
      <link>https://habr.com/ru/articles/1019914/?utm_campaign=1019914&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/d3d/3f0/1c6/d3d3f01c656f4482449768860d4a7fcb.jpg" /><p>В субботу Anthropic заблокировал мой рабочий сетап, построенный на oAuth Claude Code и Telegram. Вместо того чтобы ждать, я за вечер написал self-hosted замену с блэкджеком и постоянной памятью. Рассказываю, как устроен TeleClaude — опенсорсный инструмент, который позволяет управлять проектами через топики в Telegram, используя вашу локальную подписку Claude с лимитами из oAuth. Никаких облаков, API и дополнительных трат. Разбираю архитектуру, систему памяти и показываю, как запустить у себя.</p> <a href="https://habr.com/ru/articles/1019914/?utm_campaign=1019914&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Mon, 06 Apr 2026 12:21:05 GMT</pubDate>
      <dc:creator><![CDATA[StudyQA]]></dc:creator>
      
      <category><![CDATA[TypeScript]]></category><category><![CDATA[api]]></category><category><![CDATA[diy или сделай сам]]></category><category><![CDATA[node.js]]></category><category><![CDATA[управление проектами]]></category><category><![CDATA[telegram]]></category><category><![CDATA[telegrambot]]></category><category><![CDATA[claude]]></category><category><![CDATA[oauth]]></category><category><![CDATA[openclaw]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Как я настроил OpenClaw для зоопарка landings для своей компании]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1019176/</guid>
      <link>https://habr.com/ru/articles/1019176/?utm_campaign=1019176&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/6f4/386/5e8/6f43865e8d5d801a1b451d9d55cdbe03.png" /><p>WP умер, перевёл все сайты на OpenClaw</p><p>Раньше часто использовал WordPress с кучей плагинов для создания сайтов и лендингов. Сейчас поставил DarwinClaw на чистую машину Ubuntu и сказал ему сделать всю инфраструктуру для сайтов. Он поставил nginx + node.js.</p><p>Потом попросил перенести сайты, указав ссылки на них. Он создал все сайты.</p><p>Попросил добавить git и репозиторий для хранения этих сайтов. То есть всегда можно быстро откатить изменения.</p><p>Теперь полностью управляю этим зоопарком лендингов через TG команды типа:</p><p>Убери с сайта X вот это</p><p>Добавь на сайт Y вот то</p><p>Поменяй стиль сайта Z на …</p><p>Откати последние изменения на сайте XM</p><p>Замени икноку на сайте XS на более современную</p><p>Собери статистику по заполнению форм с сайтов X, Y, Z в формате</p><p>Раньше это либо делали люди за деньги, либо WP с его тяжёлой инфраструктурой, теперь всё делает бот на OpenClaw.</p> <a href="https://habr.com/ru/articles/1019176/?utm_campaign=1019176&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Sat, 04 Apr 2026 06:46:24 GMT</pubDate>
      <dc:creator><![CDATA[AlexErf13]]></dc:creator>
      
      <category><![CDATA[лендинг]]></category><category><![CDATA[сайт]]></category><category><![CDATA[бизнес]]></category><category><![CDATA[ai]]></category><category><![CDATA[node.js]]></category><category><![CDATA[playwright]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Замыкания в JavaScript]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1017374/</guid>
      <link>https://habr.com/ru/articles/1017374/?utm_campaign=1017374&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/888/ff2/e2d/888ff2e2d42a540a9271f57ac7ad7419.jpg" /><p>Замыкание это важный механизм JavaScript, понимание которого обязательно фронтендера. Он позволяет изящно реализовать принцип наименьшего раскрытия, благодаря инкапсулированию функций, сохраняя их состояние во внутренней области видимости, для последующего использования.</p> <a href="https://habr.com/ru/articles/1017374/?utm_campaign=1017374&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Подробнее о замыканиях</a>]]></description>
      
      <pubDate>Tue, 31 Mar 2026 09:26:59 GMT</pubDate>
      <dc:creator><![CDATA[JastaFly]]></dc:creator>
      
      <category><![CDATA[замыкания в javascript]]></category><category><![CDATA[замыкания]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[12 слов вместо номера телефона: как мы сделали мессенджер невидимым для файрволов]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1016900/</guid>
      <link>https://habr.com/ru/articles/1016900/?utm_campaign=1016900&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/37f/248/0fd/37f2480fd5dffa42b700f9b219e637e9.png" /><p>BIP39 вместо номера телефона, ECDH P-256 + AES-256-GCM, non-extractable CryptoKey, трафик неотличимый от HTTPS. Как это устроено, что сломалось в процессе и почему некоторые решения были болезненными.</p> <a href="https://habr.com/ru/articles/1016900/?utm_campaign=1016900&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Mon, 30 Mar 2026 11:04:49 GMT</pubDate>
      <dc:creator><![CDATA[MistM]]></dc:creator>
      
      <category><![CDATA[e2ee]]></category><category><![CDATA[мессенджер]]></category><category><![CDATA[шифрование]]></category><category><![CDATA[bip39]]></category><category><![CDATA[web crypto api]]></category><category><![CDATA[pwa]]></category><category><![CDATA[seed phrase]]></category><category><![CDATA[приватность]]></category><category><![CDATA[dpi]]></category><category><![CDATA[typescript]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Node.js → Rust: 5-10x ускорение без знания Rust]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1016576/</guid>
      <link>https://habr.com/ru/articles/1016576/?utm_campaign=1016576&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<p>На своём MacBook M4 я не замечал проблем. Два скрипта на Node.js 18 собирали информацию по проекту, обходили файлы, считали строки, агрегировали данные и отрабатывали за пару секунд. Жить можно.</p><p>А потом на созвоне коллега расшарил экран. У него удалённый рабочий стол, Intel Core i5-1035G1, 8 ГБ RAM. Он запустил тот же скрипт, и мы оба смотрели на терминал восемь секунд. В тишине. </p> <a href="https://habr.com/ru/articles/1016576/?utm_campaign=1016576&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Sun, 29 Mar 2026 14:29:22 GMT</pubDate>
      <dc:creator><![CDATA[IFonin]]></dc:creator>
      
      <category><![CDATA[claude code]]></category><category><![CDATA[rust]]></category><category><![CDATA[nodejs]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[OpenClaw на русском — как я перевёл интерфейс, не трогая исходники]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1016372/</guid>
      <link>https://habr.com/ru/articles/1016372/?utm_campaign=1016372&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/1dd/63c/f65/1dd63cf6593e3347de08ce6b9b6de3a6.png" /><p>Хотите OpenClaw на русском? Официальной локализации нет и не планируется. Я написал перевод OpenClaw на русский через reverse proxy — прослойка инжектит JS-оверлей в HTML, переводит интерфейс через MutationObserver и не трогает ни строчки в исходниках. Обновления OpenClaw не ломают перевод. Рассказываю архитектуру, код и грабли.</p> <a href="https://habr.com/ru/articles/1016372/?utm_campaign=1016372&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Подробнее</a>]]></description>
      
      <pubDate>Sat, 28 Mar 2026 20:21:56 GMT</pubDate>
      <dc:creator><![CDATA[nlaik]]></dc:creator>
      
      <category><![CDATA[openclaw]]></category><category><![CDATA[javascript]]></category><category><![CDATA[nodejs]]></category><category><![CDATA[reverse-proxy]]></category><category><![CDATA[локализация]]></category><category><![CDATA[open-source]]></category><category><![CDATA[i18n]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Max.ru Bot API: Пишем своего бота для обратной связи. Часть 1. MVP]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1016164/</guid>
      <link>https://habr.com/ru/articles/1016164/?utm_campaign=1016164&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<p>Привет, Хабр! С выходом платформы MAX у разработчиков появилось новое игровое поле. Пока комьюнити спорит о шансах на победу в гонке мессенджеров, маркетологи уже начали переливать туда трафик.</p><p>Самая типовая задача для бизнеса сейчас — бот обратной связи. В Telegram эту нишу давно занял Olgram, а вот в Max — чистый лист. Давайте вместе напишем свой аналог. Это отличный кейс, чтобы разобраться с новым API, не углубляясь в лишнюю инфраструктуру.</p><p><strong>Стек: Почему все оказалось проще, чем кажется</strong></p><p>Для MVP (Minimum Viable Product) мы будем использовать <strong>Node.js</strong> и официальную библиотеку <strong>@maxhub/max-bot-api</strong>.</p> <a href="https://habr.com/ru/articles/1016164/?utm_campaign=1016164&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Sat, 28 Mar 2026 05:30:10 GMT</pubDate>
      <dc:creator><![CDATA[klimenkome]]></dc:creator>
      
      <category><![CDATA[max]]></category><category><![CDATA[js]]></category><category><![CDATA[sqlite]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Проектирование бесплатного API с пользовательскими данными: почему я отказался от jsonplaceholder]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1015906/</guid>
      <link>https://habr.com/ru/articles/1015906/?utm_campaign=1015906&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/2a5/a37/8e5/2a5a378e546a23e5cc28457139bf4420.png" /><p>Я периодически провожу технические интервью и смотрю pet-проекты кандидатов.</p><p>И почти всегда вижу одну и ту же картину:</p><p>Используется <code>localStorage</code> или заглушки вроде jsonplaceholder.</p><p>Я прекрасно понимаю, почему так происходит:</p> <a href="https://habr.com/ru/articles/1015906/?utm_campaign=1015906&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Fri, 27 Mar 2026 11:16:05 GMT</pubDate>
      <dc:creator><![CDATA[lamj_io]]></dc:creator>
      
      <category><![CDATA[api]]></category><category><![CDATA[rest api]]></category><category><![CDATA[backend]]></category><category><![CDATA[node.js]]></category><category><![CDATA[javascript]]></category><category><![CDATA[json]]></category><category><![CDATA[api key]]></category><category><![CDATA[веб-разработа]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Бекэнд на fastify для няшных котят (aura8)]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1015634/</guid>
      <link>https://habr.com/ru/articles/1015634/?utm_campaign=1015634&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/dc3/bd2/3da/dc3bd23da89aab6265c91a4938aed9b2.jpg" /><p>Мы разработали приложение, где пользователь может свайпать картинки, и с учетом лайков пользователя мы генерируем новые картинки. Ниже рассказ, с чем интересным мы столкнулись во время разработки этого приложения.</p> <a href="https://habr.com/ru/articles/1015634/?utm_campaign=1015634&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Thu, 26 Mar 2026 21:55:35 GMT</pubDate>
      <dc:creator><![CDATA[camunar]]></dc:creator>
      
      <category><![CDATA[fastify]]></category><category><![CDATA[node.js]]></category><category><![CDATA[nodejs]]></category><category><![CDATA[flutter]]></category><category><![CDATA[nano banana]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[ONYX: self-hosted мессенджер с LAN-режимом — история одного инди-проекта]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1015116/</guid>
      <link>https://habr.com/ru/articles/1015116/?utm_campaign=1015116&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<p>Когда смотришь на существующие self-hosted мессенджеры, часто видишь одно из двух: либо сложную инфраструктуру, которую непросто развернуть (Matrix/Synapse), либо минимализм без шифрования. ONYX — это попытка найти середину: простой в развёртывании сервер, полноценное E2E-шифрование и режим работы в локальной сети без интернета вообще.</p> <a href="https://habr.com/ru/articles/1015116/?utm_campaign=1015116&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Wed, 25 Mar 2026 23:01:57 GMT</pubDate>
      <dc:creator><![CDATA[wardcore]]></dc:creator>
      
      <category><![CDATA[мессенджер]]></category><category><![CDATA[self-hosted]]></category><category><![CDATA[flutter]]></category><category><![CDATA[e2ee]]></category><category><![CDATA[шифрование]]></category><category><![CDATA[lan]]></category><category><![CDATA[node.js]]></category><category><![CDATA[x25519]]></category><category><![CDATA[криптография]]></category><category><![CDATA[open source]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Как скачать Интернет?]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1013974/</guid>
      <link>https://habr.com/ru/articles/1013974/?utm_campaign=1013974&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<p>Шутка в тему по памяти не помню откуда:</p><p>- Слушай, а можно как-нибудь дома накачать интернет, а потом по дороге его использовать?</p><p>Да, заголовок желтушный. Но какие времена, такие и потребности.</p><p>Если отвечать на вопрос в общем виде, то для людей технически подкованных ответ очевиден. Никак, на то это глобальная сеть.</p><p>Но есть та часть ресурсов в Интернет, которые можно предварительно скачать и использовать также как и оригинал.</p> <a href="https://habr.com/ru/articles/1013974/?utm_campaign=1013974&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Wed, 25 Mar 2026 14:00:54 GMT</pubDate>
      <dc:creator><![CDATA[irvinzz]]></dc:creator>
      
      <category><![CDATA[прокси-сервер]]></category><category><![CDATA[сайты]]></category><category><![CDATA[оффлайн-приложения]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[AbortController в Node.js: отмена чего угодно]]></title>
      <guid isPermaLink="true">https://habr.com/ru/companies/otus/articles/1012728/</guid>
      <link>https://habr.com/ru/companies/otus/articles/1012728/?utm_campaign=1012728&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/1b5/0cc/36b/1b50cc36bd825fdc9a2fb73657d1fe1b.png" /><p>Пока асинхронный код в Node.js работает штатно, про отмену операций обычно не вспоминают. Но как только запрос зависает, клиент разрывает соединение, а фоновая задача продолжает тратить ресурсы, выясняется, что без внятного механизма остановки всё это быстро превращается в источник лишней нагрузки и трудноуловимых ошибок. В этой статье разбираем, как <code>AbortController</code> решает эту проблему в Node.js, где он уже реально применим и как встроить поддержку отмены в собственный код без лишней магии.</p> <a href="https://habr.com/ru/articles/1012728/?utm_campaign=1012728&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Mon, 23 Mar 2026 15:01:34 GMT</pubDate>
      <dc:creator><![CDATA[badcasedaily1 (OTUS)]]></dc:creator>
      
      <category><![CDATA[nodejs]]></category><category><![CDATA[abortcontroller]]></category><category><![CDATA[abortsignal]]></category><category><![CDATA[асинхронный код]]></category><category><![CDATA[серверная разработка]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Как я превратил Android-смартфоны в распределенную сеть мониторинга (и спас свои нервы)]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1013686/</guid>
      <link>https://habr.com/ru/articles/1013686/?utm_campaign=1013686&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/4cf/5da/c02/4cf5dac0244e3ac4ac03ba78c62e8bc2.jpeg" /><p>Меня зовут Виталий, я из команды ArcaneGaming. <br>Сегодня я хочу рассказать вам о своем пет-проекте, который немного вышел из-под контроля и превратился в полноценный продукт. <br>Встречайте - <strong><a href="https://snuffer.net/" rel="noopener noreferrer nofollow">Snuffer</a></strong>!</p><p><strong>😫 С чего всё началось?</strong><br> Знаете это чувство, когда вам пишет клиент (или, что еще хуже, мама):</p> <a href="https://habr.com/ru/articles/1013686/?utm_campaign=1013686&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Mon, 23 Mar 2026 11:12:34 GMT</pubDate>
      <dc:creator><![CDATA[ArcaneGamingcom]]></dc:creator>
      
      <category><![CDATA[вайб-кодинг]]></category><category><![CDATA[вайбкодинг]]></category><category><![CDATA[мониторинг сайта]]></category><category><![CDATA[мониторинг сервера]]></category><category><![CDATA[мониторинг логов]]></category><category><![CDATA[мониторинг сети]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Веб-графика, которая вредит: что разработчики делают не так]]></title>
      <guid isPermaLink="true">https://habr.com/ru/companies/alfa/articles/1012848/</guid>
      <link>https://habr.com/ru/companies/alfa/articles/1012848/?utm_campaign=1012848&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/2dd/ce2/07a/2ddce207a85ad297f3eeadd7dcc64bd9.png" /><p>Обратимся к статистике: по данным с <a href="https://httparchive.org/">https://httparchive.org/</a> за последние 6 лет средний размер веб-страницы значительно увеличился. Если в декабре 2019 года средний вес десктопной веб-страницы составлял 1,9 МБ, то сейчас он уже 2,9 МБ для десктопа и 2,6 МБ для мобильных устройств. Это рост на 50% за 6 лет, причём изображения составляют до 40% общего веса страницы.</p><p>С увеличением разрешения экранов, усложнением дизайна и тенденцией к использованию изображений высокого качества нагрузка на сайты продолжит расти. Это напрямую влияет на скорость загрузки, потребление трафика и, в конечном итоге, на пользовательский опыт.</p><p>Просматривая недавно пул-реквест, я заметил, что туда добавили новые изображения. Меня удивил выбор формата: для картинок без прозрачности использовали PNG. Это кажется избыточным, так как для многоцветных изображений лучше подходят форматы вроде JPEG, которые весят меньше.</p><p>Я решил провести эксперимент: оптимизировал и переконвертировал изображения в JPEG, WebP и AVIF, сохранив качество на глаз неотличимым от оригинала.</p> <a href="https://habr.com/ru/articles/1012848/?utm_campaign=1012848&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Mon, 23 Mar 2026 08:01:22 GMT</pubDate>
      <dc:creator><![CDATA[turov (Альфа-Банк)]]></dc:creator>
      
      <category><![CDATA[Веб]]></category><category><![CDATA[графика для сайта]]></category><category><![CDATA[html]]></category><category><![CDATA[css]]></category><category><![CDATA[react]]></category><category><![CDATA[node.js]]></category><category><![CDATA[avif]]></category><category><![CDATA[webp]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Как я избавился от 502 при деплое Next.js: PM2 reload, подводные камни и сравнение с Kubernetes]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1012142/</guid>
      <link>https://habr.com/ru/articles/1012142/?utm_campaign=1012142&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/478/d67/e3f/478d67e3ff41ef71e8fe132aff08bd38.jpg" /><p>Каждый пуш в main — и ты зажмуриваешься на 2 минуты: 502 или пронесло? Знакомо? Сотни разработчиков сталкиваются с этим при деплое Next.js на VPS. Решение — буквально замена одной команды и удаление одной строки. В статье: конкретный рецепт zero-downtime с PM2 cluster mode, две главные ловушки (restart vs reload и rm -rf .next), расчёт сэкономленных денег, и честное сравнение с Kubernetes.</p> <a href="https://habr.com/ru/articles/1012142/?utm_campaign=1012142&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">К рецепту без 502</a>]]></description>
      
      <pubDate>Fri, 20 Mar 2026 02:00:54 GMT</pubDate>
      <dc:creator><![CDATA[PetrUfa]]></dc:creator>
      
      <category><![CDATA[PM2]]></category><category><![CDATA[Next.js]]></category><category><![CDATA[zero-downtime deployment]]></category><category><![CDATA[502 Bad Gateway]]></category><category><![CDATA[VPS]]></category><category><![CDATA[cluster mode]]></category><category><![CDATA[rolling restart]]></category><category><![CDATA[GitHub Actions]]></category><category><![CDATA[Kubernetes]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Три года в одиночку: как я строил бэкенд-фреймворк поверх Next.js и что из этого вышло]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1011948/</guid>
      <link>https://habr.com/ru/articles/1011948/?utm_campaign=1011948&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/2ea/e35/969/2eae35969daf966894c2de2474555d59.png" /><p>Почти три года я в одиночку строил бэкенд-фреймворк поверх Next.js App Router. По дороге мой ишью закрыл создатель C#, синтаксис подсказал Copilot, а три пакета-адаптера пришлось убить. Рассказываю, что вышло и какие грабли собрал.</p> <a href="https://habr.com/ru/articles/1011948/?utm_campaign=1011948&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Thu, 19 Mar 2026 10:08:08 GMT</pubDate>
      <dc:creator><![CDATA[Finom]]></dc:creator>
      
      <category><![CDATA[vovk]]></category><category><![CDATA[vovk.ts]]></category><category><![CDATA[next.js backend]]></category><category><![CDATA[rpc]]></category><category><![CDATA[typescript framework]]></category><category><![CDATA[standard schema]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Безошибочная работа с Kafka из Node js. Часть 1 Продьюсер]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1012066/</guid>
      <link>https://habr.com/ru/articles/1012066/?utm_campaign=1012066&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/05f/76c/ee1/05f76cee1c78a8e33add02a8a823d444.png" /><p>В данной статье рассматриваются примечательные ошибки при работе с Kafka, в том числе при использовании библиотеки&nbsp;<a href="https://kafka.js.org/" rel="noopener noreferrer nofollow">KafkaJS</a>, а также способы их устранения и методы увеличения производительности при публикации и обработки сообщений.</p><p>Предполагается, что читатель имеет базовое представление о Kafka (раздел "Общие термины" поможет освежить информацию) и функционале библиотеки KafkaJS.</p><p>В первой части разбираются аспекты, связанные с публикацией сообщений.</p> <a href="https://habr.com/ru/articles/1012066/?utm_campaign=1012066&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Thu, 19 Mar 2026 08:26:06 GMT</pubDate>
      <dc:creator><![CDATA[mitya_k]]></dc:creator>
      
      <category><![CDATA[kafka]]></category><category><![CDATA[nodejs]]></category><category><![CDATA[брокеры сообщений]]></category><category><![CDATA[apache kafka]]></category><category><![CDATA[producer]]></category><category><![CDATA[message-broker]]></category><category><![CDATA[message broker]]></category><category><![CDATA[message brokers.]]></category><category><![CDATA[apache]]></category><category><![CDATA[kafka apache]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Разработка через капсулы. Капсульный фреймворк: как мы упаковали архитектуру в ДНК проектов]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1011144/</guid>
      <link>https://habr.com/ru/articles/1011144/?utm_campaign=1011144&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/703/985/966/7039859661c289abf6a2d7e46c0cc9b6.png" /><p>В <a href="https://habr.com/ru/articles/1008454/" rel="noopener noreferrer nofollow">первой части</a> я рассказал, что такое капсула, откуда берётся эта идея и зачем вообще упаковывать опыт. Если вы её не читали — советую начать оттуда, иначе дальнейшее может быть непонятным.</p><p>В этой части перейдём от теории к практике. Я покажу, как мы создавали собственный капсульный фреймворк для микросервисов, что закладывали в его основу и как он стал ДНК наших проектов.</p> <a href="https://habr.com/ru/articles/1011144/?utm_campaign=1011144&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Tue, 17 Mar 2026 07:38:59 GMT</pubDate>
      <dc:creator><![CDATA[3ongleip]]></dc:creator>
      
      <category><![CDATA[архитектор]]></category><category><![CDATA[системный анализ]]></category><category><![CDATA[процессы разработки]]></category><category><![CDATA[процессы в it]]></category><category><![CDATA[node.js]]></category><category><![CDATA[распределенные системы]]></category><category><![CDATA[nats]]></category><category><![CDATA[typescript]]></category><category><![CDATA[ai]]></category><category><![CDATA[агенты ии]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Запускаем MarkText на FreeBSD]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1010732/</guid>
      <link>https://habr.com/ru/articles/1010732/?utm_campaign=1010732&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/774/c24/79d/774c2479dad02af8902eeca5a1b6f38e.jpeg" /><p>Очередная история из тяжкой жизни пользователей BSD или что делать, когда нужная программа ненавидит вашу операционную систему. </p><p>В помощь начинающему, продолжающему и заканчивающему автору. </p> <a href="https://habr.com/ru/articles/1010732/?utm_campaign=1010732&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Mon, 16 Mar 2026 09:18:51 GMT</pubDate>
      <dc:creator><![CDATA[alex0x08]]></dc:creator>
      
      <category><![CDATA[markdown]]></category><category><![CDATA[markdown-editor]]></category><category><![CDATA[marktext]]></category><category><![CDATA[freebsd]]></category><category><![CDATA[electron]]></category><category><![CDATA[electron app]]></category>
    </item>
  

  

  

	
  

  

  

      

      

      

    
  </channel>
</rss>
