Библиотека программиста
78.3K subscribers
4.7K photos
295 videos
98 files
7.83K links
Все самое полезное для программиста в одном канале.

Наши курсы: https://clc.to/Jil6fg

По рекламе: @tproger_sales_bot

Для обратной связи: @proglibrary_feeedback_bot

РКН: https://gosuslugi.ru/snet/67a5ba2901234b69883a4d46

Заявка: 8137611477
Download Telegram
Как собрать первый модуль ядра Linux и понять ошибки сборки

Минимальный модуль занимает 22 строки, но на машине автора сборка создала файл размером около 106 000 байт. После удаления отладочных данных осталось 4 864 байта. Точный размер зависит от компилятора, конфигурации ядра и даже пути к каталогу сборки.

Для эксперимента нужны компилятор и заголовки именно запущенного ядра. Makefile передаёт исходник в kbuild, систему сборки ядра. Она компилирует код, проверяет обращения к экспортированным символам и собирает модуль в файл .ko.

Если сборка не начинается, проверьте ссылку /lib/modules/$(uname -r)/build. Перед загрузкой также стоит проверить Secure Boot и режим блокировки ядра: они могут отклонить уже собранный модуль. Полный путь от hello.c до диагностики ошибок включает Makefile, устройство файла .ko, параметры модуля и причины несовместимости старых руководств.
👍15❤4😁3😍3😢2
💻 Если Kubernetes пока выглядит как набор терминов, вот удобная шпаргалка:

🟡 Services — как Pod’ы находят друг друга
🟡 Networking — как устроен трафик
🟡 Storage — где и как хранятся данные
🟡 Scheduling — как Kubernetes выбирает Node для Pod

🐸 Библиотека программиста
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
🧹 Claude Code умеет чистить старые промпты

У Anthropic есть команда

/claude-api-prompt-audit


которая проверяет CLAUDE.md, AGENTS.md, skills и промпты.

📍 Она находит старые конструкции, которые больше не помогают моделям: лишние MUST/ALWAYS, think step by step, устаревшие примеры и конфликтующие правила.

🐸 Библиотека программиста
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 у std::sort. На Intel Xeon соотношение другое, поэтому результат нужно проверять на своём процессоре.

В разборе с кодом на C показаны буфер, защита от неудачного разбиения и обработка малых участков.
👍14❤13🔥6😁5😍4🥰3👏3👾2
This media is not supported in your browser
VIEW IN TELEGRAM
⌨️ Google Translate, подвинься

LibreTranslate — переводчик, который живёт прямо на твоём ПК.

⬆️ ~40 языков
⬆️ без интернета
⬆️ бесплатно
⬆️ open source

А значит, можно переводить даже если вырубили свет или заглушили связь 😈

🔗 Ссылка на GitHub

🐸 Библиотека программиста
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23❤10😁7⚡3🙏3😍3💯3😢2🌚2👾1
Как модернизировать устаревшее приложение с ИИ без полного переписывания

ИИ может перенести старый код на новый стек вместе с неясными правилами и проблемами развёртывания. Получится та же система, только переписанная быстрее.

Сначала составьте карту кодовой базы: правила, зависимости, побочные эффекты и внешние вызовы. Затем зафиксируйте текущее поведение характеристическими тестами, чтобы видеть изменения после переработки.

Функциональность лучше переносить небольшими частями, а ИИ использовать для анализа, тестов и повторяющихся преобразований. Решения о том, что сохранять, остаются за инженером.

Полный процесс миграции разобран на TypeScript и Vitest.
❤9👏5😁5🌚5👍3🎉2🙏2👾2⚡1
Как сделать системную утилиту понятнее и приятнее

Системная утилита не должна молча выполнять команду и исчезать. Если программа не показывает ход работы и итог, пользователю сложнее понять результат и доверять ему.

Автор предлагает объяснять действие до запуска, показывать изменения по ходу процесса и завершать сценарий ясным результатом.

Подход команды MacPaw к служебным приложениям пригодится и для внутренних инструментов: человек должен понимать, что произошло.
❤4🤔4🎉4🔥3💯3👍2😢2🙏2😍2❤‍🔥1
👩‍💻 Что на самом деле происходит внутри Go map?

После Go 1.24 обычный map внутри работает уже не так, как раньше: вместо старой схемы с overflow buckets используется Swiss Tables.

И там довольно много интересного: хеш делится на части, поиск идёт группами по 8 слотов, SIMD сразу сравнивает несколько значений, а при росте таблица может дробиться.


📍 В статье всё это разбирают буквально по шагам — от m["cow"] = 4 до устройства directory и таблиц.

Если хочется понять, почему 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 показывает, почему перед оптимизацией стоит измерять свою нагрузку: результат зависит от заполнения хеш-таблицы, ключей и удалений.
❤5🔥5🙏4😁1
🖥 Git ускорили и добавили несколько полезных фишек:

🟡 git add --resolved — безопаснее закрывать merge-конфликты
🟡 поиск merge-base в некоторых репозиториях стал в десятки раз быстрее
🟡 git history drop — удалять коммиты из истории
🟡 массовая очистка уже смерженных веток
🟡 git bisect теперь может сам вернуться после нахождения проблемного коммита
🟡 Git умеет подсказывать очевидные ошибки в командах

И это только часть изменений 🔗

🔥 — пора обновляться
👾 — забираю новые команды
👍 — я всё ещё на 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 на примере личного кабинета студента

🟠 Как тестировать пуши и диплинки в финансовом приложении

🏨 Дизайн в маркетинге: как фирменный стиль решает бизнес-задачи

🐸 Библиотека программиста
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, контекст проекта, безопасность и контроль расходов на модели.

📍 Только сегодня, 30 сентября — скидка 10 000 ₽

Промокод: LastcallAI

🤩 ⁠Присоединиться к курсу
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5😁4💯2👾2🙏1
This media is not supported in your browser
VIEW IN TELEGRAM
Вот почему оперативная память стоит так дорого 🙄🙄🙄

🐸 Библиотека программиста
Please open Telegram to view this post
VIEW IN TELEGRAM
😁34😢4👏3🔥2🤩2🌚2🎉1
Как защитить API от повторного выполнения операций

Клиент отправил POST, сервер выполнил операцию, но ответ потерялся из-за тайм-аута. Клиент повторяет запрос, и без защиты сервер может второй раз создать ресурс, изменить состояние или отправить письмо.

Идемпотентный эндпоинт связывает уникальный ключ операции с отпечатком тела запроса и сохранённым результатом. Первый обработчик атомарно резервирует ключ, поэтому параллельные запросы не запускают операцию заново. Повтор с тем же содержимым получает прежний результат, а тот же ключ с другим содержимым возвращает 409 Conflict.

Контракт идемпотентного API также охватывает статус незавершённой обработки, срок хранения ключей и внешние эффекты. Например, событие для очереди записывают вместе с результатом в одной транзакции, чтобы повторный запрос не породил второе действие.
👍9🔥4❤3👾2🥰1👏1😁1🤔1