Как собрать первый модуль ядра Linux и понять ошибки сборки
Минимальный модуль занимает 22 строки, но на машине автора сборка создала файл размером около 106 000 байт. После удаления отладочных данных осталось 4 864 байта. Точный размер зависит от компилятора, конфигурации ядра и даже пути к каталогу сборки.
Для эксперимента нужны компилятор и заголовки именно запущенного ядра. Makefile передаёт исходник в kbuild, систему сборки ядра. Она компилирует код, проверяет обращения к экспортированным символам и собирает модуль в файл
Если сборка не начинается, проверьте ссылку
Минимальный модуль занимает 22 строки, но на машине автора сборка создала файл размером около 106 000 байт. После удаления отладочных данных осталось 4 864 байта. Точный размер зависит от компилятора, конфигурации ядра и даже пути к каталогу сборки.
Для эксперимента нужны компилятор и заголовки именно запущенного ядра. Makefile передаёт исходник в kbuild, систему сборки ядра. Она компилирует код, проверяет обращения к экспортированным символам и собирает модуль в файл
.ko.Если сборка не начинается, проверьте ссылку
/lib/modules/$(uname -r)/build. Перед загрузкой также стоит проверить Secure Boot и режим блокировки ядра: они могут отклонить уже собранный модуль. Полный путь от hello.c до диагностики ошибок включает Makefile, устройство файла .ko, параметры модуля и причины несовместимости старых руководств.👍15❤4😁3😍3😢2
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🌚9❤8🤔6😢5💯5👾4❤🔥3😁3🎉3
Как правило против ложных срабатываний ослепило линтер
Автор линтера не проверял поле
В четырёх конфигурациях стояло
Разбор слепого пятна советует проверять исключения: нет ли внутри них ошибки, которую можно найти без внешних данных.
Автор линтера не проверял поле
tools: список допустимых инструментов меняется, и сохранённая копия быстро устаревает. Защита от лишних предупреждений скрыла ошибки синтаксиса, для которых список вообще не нужен.В четырёх конфигурациях стояло
tools: *. Документация не считает одиночную звёздочку допустимым шаблоном, а для доступа ко всем инструментам советует убрать поле. Четыре зелёных прогона ошибку не заметили, ручное чтение заметило.Разбор слепого пятна советует проверять исключения: нет ли внутри них ошибки, которую можно найти без внешних данных.
❤9👏5🙏4🔥3🎉2👾2⚡1❤🔥1👍1🌚1
This media is not supported in your browser
VIEW IN TELEGRAM
У Anthropic есть команда
/claude-api-prompt-audit
которая проверяет CLAUDE
.md, AGENTS.md, skills и промпты.Please open Telegram to view this post
VIEW IN TELEGRAM
❤19🔥8👍4😁4🌚4💯3👾2🥰1😢1
И мы решили открыть первое занятие всем — можно просто взять и посмотреть, что происходит внутри курса.
А дальше — практика на собственном проекте. Ваш код: контекст, планирование, subagents, тесты, ревью и PR.
По ходу работы разберёте MCP и научитесь контролировать расходы на модели.
Если хотите попасть в этот поток — ещё не поздно, присоединяйся
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤8🎉4🙏4🔥3🤩3😁2🤔2🌚2😍1
Как ускорить Quicksort на C, сократив ветвления
Процессор теряет время, когда ошибается в предсказании условий. Автор разбора переписал разбиение массива: элементы распределяются относительно опорного значения без условных переходов.
На Apple M1 сортировка 50 млн чисел заняла 1,70 секунды вместо 3,70. После дополнительных оптимизаций вариант показал 0,86 секунды против 1,19 у
В разборе с кодом на C показаны буфер, защита от неудачного разбиения и обработка малых участков.
Процессор теряет время, когда ошибается в предсказании условий. Автор разбора переписал разбиение массива: элементы распределяются относительно опорного значения без условных переходов.
На Apple M1 сортировка 50 млн чисел заняла 1,70 секунды вместо 3,70. После дополнительных оптимизаций вариант показал 0,86 секунды против 1,19 у
std::sort. На Intel Xeon соотношение другое, поэтому результат нужно проверять на своём процессоре.В разборе с кодом на C показаны буфер, защита от неудачного разбиения и обработка малых участков.
easylang.online
Branch-Avoidant Quicksort
👍14❤13🔥6😁5😍4🥰3👏3👾2
This media is not supported in your browser
VIEW IN TELEGRAM
LibreTranslate — переводчик, который живёт прямо на твоём ПК.
А значит, можно переводить даже если вырубили свет или заглушили связь
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23❤10😁7⚡3🙏3😍3💯3😢2🌚2👾1
Как модернизировать устаревшее приложение с ИИ без полного переписывания
ИИ может перенести старый код на новый стек вместе с неясными правилами и проблемами развёртывания. Получится та же система, только переписанная быстрее.
Сначала составьте карту кодовой базы: правила, зависимости, побочные эффекты и внешние вызовы. Затем зафиксируйте текущее поведение характеристическими тестами, чтобы видеть изменения после переработки.
Функциональность лучше переносить небольшими частями, а ИИ использовать для анализа, тестов и повторяющихся преобразований. Решения о том, что сохранять, остаются за инженером.
Полный процесс миграции разобран на TypeScript и Vitest.
ИИ может перенести старый код на новый стек вместе с неясными правилами и проблемами развёртывания. Получится та же система, только переписанная быстрее.
Сначала составьте карту кодовой базы: правила, зависимости, побочные эффекты и внешние вызовы. Затем зафиксируйте текущее поведение характеристическими тестами, чтобы видеть изменения после переработки.
Функциональность лучше переносить небольшими частями, а ИИ использовать для анализа, тестов и повторяющихся преобразований. Решения о том, что сохранять, остаются за инженером.
Полный процесс миграции разобран на TypeScript и Vitest.
❤9👏5😁5🌚5👍3🎉2🙏2👾2⚡1
Как сделать системную утилиту понятнее и приятнее
Системная утилита не должна молча выполнять команду и исчезать. Если программа не показывает ход работы и итог, пользователю сложнее понять результат и доверять ему.
Автор предлагает объяснять действие до запуска, показывать изменения по ходу процесса и завершать сценарий ясным результатом.
Подход команды MacPaw к служебным приложениям пригодится и для внутренних инструментов: человек должен понимать, что произошло.
Системная утилита не должна молча выполнять команду и исчезать. Если программа не показывает ход работы и итог, пользователю сложнее понять результат и доверять ему.
Автор предлагает объяснять действие до запуска, показывать изменения по ходу процесса и завершать сценарий ясным результатом.
Подход команды MacPaw к служебным приложениям пригодится и для внутренних инструментов: человек должен понимать, что произошло.
❤4🤔4🎉4🔥3💯3👍2😢2🙏2😍2❤🔥1
После Go 1.24 обычный map внутри работает уже не так, как раньше: вместо старой схемы с overflow buckets используется Swiss Tables.
И там довольно много интересного: хеш делится на части, поиск идёт группами по 8 слотов, SIMD сразу сравнивает несколько значений, а при росте таблица может дробиться.
Если хочется понять, почему Go map работает быстро, а не просто знать, что он O(1) — почитать стоит.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9🙏5❤🔥4👍4🤩2⚡1💯1
Почему Big O недостаточно для выбора структуры данных в C++
Автор создал hashbrowns, набор тестов для массивов, связных списков и хеш-таблиц. В замерах линейный поиск по массиву обгонял хеш-таблицу до примерно 150 элементов: вычисление хеша съедало выигрыш от быстрого доступа.
На создание тестов ушло четыре месяца: пришлось исключить влияние виртуальных вызовов, добавить прогрев процессора и фиксировать условия запуска.
Разбор устройства hashbrowns показывает, почему перед оптимизацией стоит измерять свою нагрузку: результат зависит от заполнения хеш-таблицы, ключей и удалений.
Автор создал hashbrowns, набор тестов для массивов, связных списков и хеш-таблиц. В замерах линейный поиск по массиву обгонял хеш-таблицу до примерно 150 элементов: вычисление хеша съедало выигрыш от быстрого доступа.
На создание тестов ушло четыре месяца: пришлось исключить влияние виртуальных вызовов, добавить прогрев процессора и фиксировать условия запуска.
Разбор устройства hashbrowns показывает, почему перед оптимизацией стоит измерять свою нагрузку: результат зависит от заполнения хеш-таблицы, ключей и удалений.
❤5🔥5🙏4😁1
git add --resolved — безопаснее закрывать merge-конфликтыmerge-base в некоторых репозиториях стал в десятки раз быстрееgit history drop — удалять коммиты из историиgit bisect теперь может сам вернуться после нахождения проблемного коммитаИ это только часть изменений
🔥 — пора обновляться
👾 — забираю новые команды
👍 — я всё ещё на Git 2.4
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17🔥7❤6👾5😁2🎉2❤🔥1🤔1🙏1😍1
Кодить — это хорошо, а разбираться в том, что происходит за кадром, тоже полезно. Что там анализируют, зачем нужны метрики, кто такой этот ваш UX, какие задачи решает дизайн? Материалы ниже как раз об этом. Вникать во всё на сто процентов, конечно, не нужно, но базовое понимание поможет находить общий язык с коллегами и видеть чуть дальше кодовой базы.
💵 Как один лотерейный билет превратился в несколько сотен требований, десятки интеграций и пять месяцев Discovery
👍 Очнуться от мрака метрик: три истории от продакта о том, как решать неочевидные проблемы бизнеса
👨🎓 Как проверять продукт на UX на примере личного кабинета студента
🟠 Как тестировать пуши и диплинки в финансовом приложении
🏨 Дизайн в маркетинге: как фирменный стиль решает бизнес-задачи
🐸 Библиотека программиста
👨🎓 Как проверять продукт на UX на примере личного кабинета студента
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7😢3🎉3🥰2👾1
Как спроектировать память ИИ-агента, а не склад контекста
Один индекс для диалогов, правил и предпочтений смешивает временные обходы с утверждёнными процедурами: агент помнит всё, но не понимает, чему доверять.
Рабочая память хранит состояние задачи, эпизодическая хранит прошлые случаи, семантическая — устойчивые факты, процедурная хранит проверенные действия. Записям нужны тип, источник, уровень уверенности и срок жизни.
Схема архитектуры памяти агента показывает, как проверять эпизоды перед превращением в знания и удалять устаревшие данные.
Один индекс для диалогов, правил и предпочтений смешивает временные обходы с утверждёнными процедурами: агент помнит всё, но не понимает, чему доверять.
Рабочая память хранит состояние задачи, эпизодическая хранит прошлые случаи, семантическая — устойчивые факты, процедурная хранит проверенные действия. Записям нужны тип, источник, уровень уверенности и срок жизни.
Схема архитектуры памяти агента показывает, как проверять эпизоды перед превращением в знания и удалять устаревшие данные.
1😁5❤4🤩3🌚3😍2👾2👍1🤔1💯1
AI уже пишет код. Теперь важнее научиться встраивать его в разработку так, чтобы он действительно экономил время.
На курсе «ИИ для разработчиков» собираете AI-workflow на своём проекте: от задачи и планирования до тестов, ревью и PR🤩
Разберёте AI-агентов, MCP, контекст проекта, безопасность и контроль расходов на модели.
Промокод:
LastcallAIPlease open Telegram to view this post
VIEW IN TELEGRAM
❤5😁4💯2👾2🙏1
Please open Telegram to view this post
VIEW IN TELEGRAM
😁34😢4👏3🔥2🤩2🌚2🎉1
Как защитить API от повторного выполнения операций
Клиент отправил POST, сервер выполнил операцию, но ответ потерялся из-за тайм-аута. Клиент повторяет запрос, и без защиты сервер может второй раз создать ресурс, изменить состояние или отправить письмо.
Идемпотентный эндпоинт связывает уникальный ключ операции с отпечатком тела запроса и сохранённым результатом. Первый обработчик атомарно резервирует ключ, поэтому параллельные запросы не запускают операцию заново. Повтор с тем же содержимым получает прежний результат, а тот же ключ с другим содержимым возвращает 409 Conflict.
Контракт идемпотентного API также охватывает статус незавершённой обработки, срок хранения ключей и внешние эффекты. Например, событие для очереди записывают вместе с результатом в одной транзакции, чтобы повторный запрос не породил второе действие.
Клиент отправил POST, сервер выполнил операцию, но ответ потерялся из-за тайм-аута. Клиент повторяет запрос, и без защиты сервер может второй раз создать ресурс, изменить состояние или отправить письмо.
Идемпотентный эндпоинт связывает уникальный ключ операции с отпечатком тела запроса и сохранённым результатом. Первый обработчик атомарно резервирует ключ, поэтому параллельные запросы не запускают операцию заново. Повтор с тем же содержимым получает прежний результат, а тот же ключ с другим содержимым возвращает 409 Conflict.
Контракт идемпотентного API также охватывает статус незавершённой обработки, срок хранения ключей и внешние эффекты. Например, событие для очереди записывают вместе с результатом в одной транзакции, чтобы повторный запрос не породил второе действие.
👍9🔥4❤3👾2🥰1👏1😁1🤔1