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

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

  <channel>
    <title><![CDATA[Комментарии / Профиль codebra]]></title>
    <link>https://habr.com/ru/users/codebra/comments/</link>
    <description><![CDATA[Хабр: комментарии пользователя codebra]]></description>
    <language>ru</language>
    <managingEditor>editor@habr.com</managingEditor>
    <generator>habr.com</generator>
    <pubDate>Mon, 13 Jul 2026 22:16:58 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>20.05.2026 13:49:55 </title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1036444/#comment_29997392</guid>
      <link>https://habr.com/ru/articles/1036444/#comment_29997392</link>
      <description><![CDATA[<p>Понял вас, спасибо за уточнения)</p><p>В любом случае, добавил в заметки, тема интересная.</p>]]></description>
      <pubDate>Wed, 20 May 2026 13:49:55 GMT</pubDate>
      <dc:creator><![CDATA[]]></dc:creator>
    </item>
  

  
    <item>
      <title>20.05.2026 13:19:33 </title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1036444/#comment_29997288</guid>
      <link>https://habr.com/ru/articles/1036444/#comment_29997288</link>
      <description><![CDATA[<p>Вы правы, создателям инструментов разработки эти знания пригодятся больше, чем разработчикам ПО.</p><p>Согласен с тем, что большая часть логики живёт в ld-linux. Но все же сначало работает ядро (парсит структуру, загружает программу и компоновщик).</p><p>Исходное предложение было написать свой код, который вручную парсит ELF, выделяет память, загружает библиотеки. И вот здесь без реализации «части ядра» действительно не обойтись, потому что:</p><ul><li><p>именно ядро первым читает ELF, находит .interp и загружает ld-linux;</p></li><li><p>именно ядро создаёт адресное пространство процесса и выполняет начальные mmap для сегментов;</p></li><li><p>ld-linux работает уже внутри этого пространства, доводя загрузку до конца.</p></li></ul><p>Так что если мы хотим написать свой «ручной» загрузчик в пользовательском пространстве (в существующей ОС), то нам всё равно не обойтись без системных вызовов ядра (<code>mmap</code>, <code>mprotect</code> и т.д.). А часть логики ядра (создание адресного пространства, загрузка интерпретатора) мы просто не можем взять на себя – это привилегия ядра.</p><p>Поэтому, соглашусь с вами, нам достаточно реализовать только компоновщик (ядро мы все равно не обойдем) в случае x86. Но если все же речь про голое железо контроллеров, то без реализации части ядра (небольшой ОС) уже не обойтись.</p><p>Или я вас неправильно понял?</p>]]></description>
      <pubDate>Wed, 20 May 2026 13:19:33 GMT</pubDate>
      <dc:creator><![CDATA[]]></dc:creator>
    </item>
  

  
    <item>
      <title>19.05.2026 15:29:50 </title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1036444/#comment_29992590</guid>
      <link>https://habr.com/ru/articles/1036444/#comment_29992590</link>
      <description><![CDATA[<p>У меня совсем скромный опыт работы с контроллерами. Делал с нуля электронику для управляемой машинки через Wi-fi на базе ESP-07. Только чтобы получить базовые навыки)</p><p>Можете написать мне в ВК, обсудим) а то здесь не по теме уже получается)</p>]]></description>
      <pubDate>Tue, 19 May 2026 15:29:50 GMT</pubDate>
      <dc:creator><![CDATA[]]></dc:creator>
    </item>
  

  
    <item>
      <title>19.05.2026 14:32:25 </title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1036444/#comment_29992294</guid>
      <link>https://habr.com/ru/articles/1036444/#comment_29992294</link>
      <description><![CDATA[<p>Согласен с вами. Для полноты картины обязательно нужно упомянуть вызов <code>fork</code>. С него все начинается.</p>]]></description>
      <pubDate>Tue, 19 May 2026 14:32:25 GMT</pubDate>
      <dc:creator><![CDATA[]]></dc:creator>
    </item>
  

  
    <item>
      <title>19.05.2026 14:26:35 </title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1036444/#comment_29992264</guid>
      <link>https://habr.com/ru/articles/1036444/#comment_29992264</link>
      <description><![CDATA[<p>Большое спасибо всем за обратную связь. Через месяц, когда закроется возможность комментирования, внесу сразу все уточнения и исправлю неточности, которые выявляются через наше обсуждение.</p>]]></description>
      <pubDate>Tue, 19 May 2026 14:26:35 GMT</pubDate>
      <dc:creator><![CDATA[]]></dc:creator>
    </item>
  

  
    <item>
      <title>19.05.2026 14:05:14 </title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1036444/#comment_29992130</guid>
      <link>https://habr.com/ru/articles/1036444/#comment_29992130</link>
      <description><![CDATA[<p>Ох, ну это очень сложная и глубокая тема. По сути, необходимо реализовать часть ядра (даже мини-ОС) и свой динамический компоновщик.</p><p>Боюсь этот материал не уберется даже в рамки одной статьи.</p><p>Но идея классная: максимальное погружение в тему загрузки программы в память для выполнения, через практическую реализацию этого механизма.</p><p>Такое глубокое понимание точно может пригодиться реверс-инженерам и разработчикам прикладного ПО (в меньшей степени).</p><p>Спасибо за идею, добавлю в заметки. Возможно, вернусь к этому позднее, когда сам буду более готовым.</p><p>В общем, готов подискутировать на эту тему, если неправильно вас понял)</p>]]></description>
      <pubDate>Tue, 19 May 2026 14:05:14 GMT</pubDate>
      <dc:creator><![CDATA[]]></dc:creator>
    </item>
  

  
    <item>
      <title>18.05.2026 17:18:06 </title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1036444/#comment_29987282</guid>
      <link>https://habr.com/ru/articles/1036444/#comment_29987282</link>
      <description><![CDATA[<p>Большое спасибо) </p><p>Думаю тему многопоточности лучше раскрывать в отдельной статье, а то эта и так перегружена.</p>]]></description>
      <pubDate>Mon, 18 May 2026 17:18:06 GMT</pubDate>
      <dc:creator><![CDATA[]]></dc:creator>
    </item>
  

  
    <item>
      <title>18.05.2026 17:16:32 </title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1036444/#comment_29987278</guid>
      <link>https://habr.com/ru/articles/1036444/#comment_29987278</link>
      <description><![CDATA[<p>Обязательно добавлю про особенность загрузки статических бинарников. Их загрузка не такая интересная, но для полноты картины стоит их упомянуть. Спасибо за дополнение!</p>]]></description>
      <pubDate>Mon, 18 May 2026 17:16:32 GMT</pubDate>
      <dc:creator><![CDATA[]]></dc:creator>
    </item>
  

  
    <item>
      <title>18.05.2026 17:11:58 </title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1036444/#comment_29987264</guid>
      <link>https://habr.com/ru/articles/1036444/#comment_29987264</link>
      <description><![CDATA[<p>Да, вы правы. Мы же сейчас рассматриваем запуск программы «под strace». Вот так будет корректнее?</p><p>Когда вы запускаете <code>strace ./empty_sleep</code>, утилита <code>strace</code> создаёт свою копию с помощью <code>fork()</code>, а затем эта копия вызывает системный вызов <code>execve()</code> для запуска вашей программы. Если бы вы запускали программу напрямую (<code>./empty_sleep</code>), тогда <code>execve()</code> вызывала бы копия оболочки bash.</p>]]></description>
      <pubDate>Mon, 18 May 2026 17:11:58 GMT</pubDate>
      <dc:creator><![CDATA[]]></dc:creator>
    </item>
  

  
    <item>
      <title>28.02.2026 12:24:14 </title>
      <guid isPermaLink="true">https://habr.com/ru/companies/timeweb/articles/984310/#comment_29600166</guid>
      <link>https://habr.com/ru/companies/timeweb/articles/984310/#comment_29600166</link>
      <description><![CDATA[<p>Двенадцать лет назад я не проверил как будет переводиться сокращенная версия названия, а потом менять было поздно) Во всяком случае спасибо за почетное второе место.<br><br>Кстати, полное название изначально было CodeBrain :)</p>]]></description>
      <pubDate>Sat, 28 Feb 2026 12:24:14 GMT</pubDate>
      <dc:creator><![CDATA[]]></dc:creator>
    </item>
  

  
    <item>
      <title>28.02.2026 10:57:04 </title>
      <guid isPermaLink="true">https://habr.com/ru/companies/timeweb/articles/984310/#comment_29599856</guid>
      <link>https://habr.com/ru/companies/timeweb/articles/984310/#comment_29599856</link>
      <description><![CDATA[<p>Полностью согласен. Думаю чтобы не объяснять коллегам, им нужно хотя бы раз попробовать реализовать модалку на dialog, чтобы понять всю их простоту.</p><p>На основе вашей статьи сделал <a href="https://codebra.ru/s/cwW1P4zGhaVGtZR2" rel="noopener noreferrer nofollow">небольшой интенсив</a>, в котором нужно переписать модалку без использования JavaScript.</p><p>Будем вместе искоренять страх перед новыми возможностями)</p>]]></description>
      <pubDate>Sat, 28 Feb 2026 10:57:04 GMT</pubDate>
      <dc:creator><![CDATA[]]></dc:creator>
    </item>
  

  
    <item>
      <title>28.02.2026 09:29:22 </title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1004772/#comment_29599558</guid>
      <link>https://habr.com/ru/articles/1004772/#comment_29599558</link>
      <description><![CDATA[<p>Спасибо за основательный разбор! Тема веб-сокетов обычно воспринимается как чёрный ящик: есть connect, есть send, а что там внутри уже не важно, если это работает. Но ровно до первого 1006 или странного поведения за прокси.</p><p>Особенно полезно, что вы прошлись по RFC, показали реальную структуру фрейма с битовыми масками и механизм маскирования. Вы хорошо объяснили про маскирование и то, что это не шифрование, а защита от атак на промежуточные прокси. Многие действительно думают, что маскировка нужна для конфиденциальности, хотя на самом деле история именно про то, чтобы вредоносный JS не мог сэмулировать HTTP-запрос и отравить кеш.</p><p>И отдельный респект за упоминание backoff при переподключении. Это та деталь, о которой часто забывают даже в коммерческих проектах, а потом сервер ложится от одновременной волны переподключающихся клиентов.</p><p>Единственное, что можно добавить для тех, кто хочет копнуть глубже: полезно заглянуть в исходники production-библиотек, например&nbsp;<code>websockets</code>&nbsp;для Python или реализацию в стандартной библиотеке&nbsp;<code>asyncio</code>. Там видно, как те же самые механизмы (фрейминг, контрольные сообщения, обработка закрытия) реализованы с учётом реальных случаев, таймаутов и правильной работы с памятью.</p><p>Ещё раз спасибо за качественный материал. Такие статьи помогают лучше понимать инструменты, которыми мы пользуемся.</p>]]></description>
      <pubDate>Sat, 28 Feb 2026 09:29:22 GMT</pubDate>
      <dc:creator><![CDATA[]]></dc:creator>
    </item>
  

  
    <item>
      <title>28.02.2026 04:42:04 </title>
      <guid isPermaLink="true">https://habr.com/ru/companies/otus/articles/994238/#comment_29598628</guid>
      <link>https://habr.com/ru/companies/otus/articles/994238/#comment_29598628</link>
      <description><![CDATA[<p>Отличный материал, Сергей! Как раз тот случай, когда бэкендер честно признаёт, что раньше не понимал, а теперь видит картину целиком.</p><p>Особенно зашла мысль про API как язык общения, который должен быть удобен обеим сторонам. Как раз думаю добавить на <a href="https://codebra.ru/s/9o4j0EkHs47qaApz" rel="noopener noreferrer nofollow">Codebra</a> задание, где нужно будет взаимодействовать с разными типами API, чтобы на практике показать эту проблему. Часто человек учит JavaScript, пишет код, но когда дело доходит до реального общения с бэкендом, начинаются танцы с бубном. Склеивание ответов от нескольких эндпоинтов, трансформация данных на клиенте, костыли с кешированием. Хочется в задании как раз подсветить, что проблема часто не в коде, а в том, как спроектировано API.</p><p>Про GraphQL и BFF отдельное спасибо. Многие до сих пор думают, что GraphQL является какой-то сложной штукой от Facebook, и проходят мимо. А на деле это просто инструмент, который в нужном месте даёт фронту дышать чуточку свободнее. Думаю в своих материалах сделать разборы когда и что лучше использовать: REST, GraphQL или BFF. Потому что джуны часто учат технологии, а надо учить выбирать инструмент под задачу.</p><p>И отдельное спасибо за примеры из реального мира: Netflix, Vercel, Shopify. Это не просто теория для собеседований, а то, как реально строятся современные высоконагруженные системы. Буду ссылаться на статью в своих материалах как на хороший обзор для тех, кто хочет копнуть глубже.</p>]]></description>
      <pubDate>Sat, 28 Feb 2026 04:42:04 GMT</pubDate>
      <dc:creator><![CDATA[]]></dc:creator>
    </item>
  

  
    <item>
      <title>27.02.2026 14:17:09 </title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1004246/#comment_29596326</guid>
      <link>https://habr.com/ru/articles/1004246/#comment_29596326</link>
      <description><![CDATA[<p>Отличная статья! С пунктом про placeholder вместо label в целом согласен, что это частая проблема, особенно в сложных формах. Но тут, мне кажется, всё же зависит от аудитории и контекста. Для простых полей (поиск, подписка по email) и молодой аудитории placeholder может быть достаточно, так как люди и так понимают, что вводить. А вот для пожилых пользователей, в сложных сценариях (оформление заказа и т.д.) или длинных анкетах думаю что label обязателен. Так что скорее нужно знать когда использовать, чем никогда не использовать.</p><p>А вообще статья заставила задуматься. Честно признаюсь, в своих курсах на Codebra я доступности не уделял должного внимания. Всё больше про «Как сверстать макет», а про то «Как сделать доступно для всех» как-то упускал. Ваши пять пунктов отличная затравка, теперь буду пересматривать программу и добавлять интенсив про доступность.</p><p>Спасибо за пинок в правильную сторону!</p>]]></description>
      <pubDate>Fri, 27 Feb 2026 14:17:09 GMT</pubDate>
      <dc:creator><![CDATA[]]></dc:creator>
    </item>
  

  
    <item>
      <title>26.02.2026 16:28:15 </title>
      <guid isPermaLink="true">https://habr.com/ru/companies/timeweb/articles/984310/#comment_29590832</guid>
      <link>https://habr.com/ru/companies/timeweb/articles/984310/#comment_29590832</link>
      <description><![CDATA[<p>Отличный обзор! Про&nbsp;<code>ToggleEvent.source</code>&nbsp;даже не задумывался, а ведь и правда элегантное решение для многих сценариев. Но&nbsp;<code>closedby</code>&nbsp;для меня лично главное открытие. Сколько кода писал, чтобы закрывать модалки по клику на оверлей, а тут просто атрибут в HTML и готово.</p><p>Такие статьи особенно ценны, когда показывают, как современные API сокращают код и убирают зависимость от JS.</p><p>Кстати, вдохновившись твоим примером, теперь думаю добавить на Codebra небольшое практическое задание как раз на отработку&nbsp;<code>closedby</code>&nbsp;и&nbsp;<code>ToggleEvent</code>. Хочется сделать пример, где нужно переделать старую модалку, которая висела на JS-костылях, на чистый HTML с новыми атрибутами и через событие&nbsp;<code>toggle</code>&nbsp;выводить, какой именно кнопкой её закрыли.</p><p>Спасибо за статью, буду ссылаться на неё в пояснениях к заданию, когда сделаю!</p>]]></description>
      <pubDate>Thu, 26 Feb 2026 16:28:15 GMT</pubDate>
      <dc:creator><![CDATA[]]></dc:creator>
    </item>
  

  
    <item>
      <title>26.02.2026 12:22:34 </title>
      <guid isPermaLink="true">https://habr.com/ru/companies/ruvds/articles/1001440/#comment_29589324</guid>
      <link>https://habr.com/ru/companies/ruvds/articles/1001440/#comment_29589324</link>
      <description><![CDATA[<p>Автору спасибо за разбор. Особенно за специфику современных псевдо-классов :where() и :is(), о которых реально многие забывают.</p><p>Судя по комментариям, главная проблема сейчас не в формулировке ответов, а в перенасыщении рынка. Люди годами учат теорию, проходят собесы, но так и не могут попасть на хорошие позиции. Просто заучить правильные ответы на 20 вопросов не поможет.  </p><p>Сейчас проходят только те, кто может не просто дать определение «специфичности», а сразу объяснить, как она поведет себя в реальном проекте с :nth-child и :has(), и зачем это вообще нужно.</p><p>Я последнее время вообще пришел к выводу, что заучивать теорию вообще нет смысла, главное знать как ее применить на практике. Что касается верстки, чтобы человек не просто прочитал про гриды, а сразу руками покрутил, как меняется распределение высоты при grid и при flex, и закрепил это на практике.</p><p>Если очень хочется на собеседовании проверить глубину знаний в верстке, то лучше, например, предложить сверстать <a href="https://codebra.ru/s/NuuABQsoFDTcCBbK" rel="noopener noreferrer nofollow">интерактивную карту солнечной системы</a> на чистом HTML/CSS. Это намного лучше покажет, на что способен человек.</p><p>Статья полезная. Но тем, кто реально хочет пройти собес в 2026 году, советую не читать ответы, а идти писать код.</p>]]></description>
      <pubDate>Thu, 26 Feb 2026 12:22:34 GMT</pubDate>
      <dc:creator><![CDATA[]]></dc:creator>
    </item>
  

      

      

    
  </channel>
</rss>
