Все статьи
-
Числа с плавающей точкой: почему 0.1 + 0.2 не равно 0.3
Двоичные числа с плавающей точкой приближённо представляют большинство десятичных дробей, поэтому арифметика накапливает ошибки округления. Сравнивайте с допусками, аккуратно суммируйте, для денег и счётчиков используйте целые или десятичные типы и выводите достаточно цифр для обратного восстановления.
-
Calling the TypeSafe API from an agent: request shape, errors, retries and version pinning
The documented contract an agent needs to call Jev without a chat layer: POST /v1/systemone with a Bearer key, a state, a model name and a map of typed questions; answers keyed like the questions plus a usage block; 401, 422, 429 and 529 with exponential backoff; aliases that move and versioned IDs that do not; SDK defaults for retries and the agent skill for coding agents.
-
Проектирование операционной панели: один вопрос на блок, один экран на аудиторию
Начните с вопросов, на которые должен ответить специалист по реагированию; выделите каждому вопросу один блок, расположите блоки от общего к частному, согласуйте единицы и оси, замените копии шаблонными переменными, свяжите каждое оповещение с вызовом дежурного с нужной панелью и храните её определение под контролем версий.
-
Dry-run modes for agent actions: showing the plan before the change
Give every tool that changes state a mode that computes and returns the concrete plan (which objects, which fields, how many) without applying it, validate the plan on the server side where the system allows it, require the plan to be produced and reviewed before the real call, and compare the real result against it afterwards.
-
Одноразовые базы данных в контейнерах для интеграционных тестов
Для каждого прогона тестов запускайте реальную СУБД в одноразовом контейнере, храните данные в памяти, один раз применяйте миграции к шаблонной базе и копируйте её для каждого тестового файла. Тогда тесты проверяют настоящий планировщик, ограничения и поведение изоляции вместо замены, работающей в памяти.
-
Корректное завершение работы: обработка SIGTERM в сервисах
Среды выполнения контейнеров отправляют SIGTERM и перед SIGKILL выжидают период для завершения работы. Сервис должен перестать принимать новую работу, завершить или вернуть текущую, закрыть соединения и выйти за отведённое время. Игнорирование сигнала превращает каждое развёртывание в перебой.
-
Forms that declare native HTML constraints produce fewer server-side validation rejections per submission than forms validated only in custom JavaScript
Hypothesis: the browser blocks interactive submission of a form whose native constraints (required, pattern, type, min and max) fail, while MDN notes that calling submit() bypasses this and novalidate disables it; the proposal is that forms carrying native constraints that mirror the server rules reach the server with fewer rejections per submission than forms whose checks live only in custom scripts, because the native checks keep working when the script fails to load or errors; a proposed A/B test, with no result claimed.
-
Upsert, row limits and identifier quoting across PostgreSQL, MySQL, SQLite and SQL Server
PostgreSQL's ON CONFLICT, MySQL's ON DUPLICATE KEY UPDATE, SQLite's PostgreSQL-style ON CONFLICT and SQL Server's MERGE are three families of upsert syntax, LIMIT/OFFSET has at least three shapes, and a quoted identifier means double quotes, backticks or square brackets depending on the engine.
-
find and xargs exit codes: find's coarse 0/>0 versus xargs's 123-127 ladder
find only promises 0 for full success and any value above 0 for an error, deliberately without finer detail, while xargs defines a specific ladder for how the invoked command failed: 123 for an ordinary non-zero exit, 124 for exit 255, 125 for killed-by-signal, 126 for not-invocable, and 127 for not-found. Piping find into xargs means checking two different exit-code philosophies in one pipeline.
-
Объяснение изученного как проверка понимания: объясните конкретному читателю, затем сравните с источником
Письменное или устное объяснение для конкретного, менее осведомлённого читателя выявляет пробелы, которые скрывает перечитывание. В эксперименте, опубликованном в 2014 году, одно лишь ожидание необходимости обучать материалу дало более полное и организованное воспроизведение, чем ожидание теста; письменное объяснение можно сверить с источником по предложениям.
-
Где на машине разработчика хранятся учётные данные, доступные процессу агента
Агент, работающий от имени пользователя, может читать всё, что доступно пользователю: переменные окружения, файлы учётных данных CLI, данные входа в реестры контейнеров, SSH-ключи, историю оболочки и хранилища, связанные с браузером. Знание этих мест помогает оператору решить, что изолировать от агента и что заменить после инцидента.
-
Dependency confusion: when a public package shadows a private one
If a build resolves package names across a private index and a public one, an attacker who publishes the private name publicly with a higher version can get their code installed; pip's documentation calls --extra-index-url for private packages unsafe for exactly this reason. Defences are namespaces bound to one registry, a single proxying index, hash pinning and claiming names.
-
Loading YAML safely
Full YAML loaders can instantiate arbitrary objects from tagged nodes; always use a safe loader, pin the YAML version semantics, and validate the result against a schema before use.
-
Glob pattern dialects: what * and ** mean in .gitignore, .dockerignore, bash, Python and GitHub Actions
The same star and double-star characters mean different things depending on where the pattern is evaluated: a slash-less .gitignore pattern matches at every depth while the same line in .dockerignore only matches at the context root, bash's globstar recursion is opt-in, and Python's fnmatch is not even path-aware.
-
Заголовок Link и типы отношений ссылок
RFC 8288 позволяет любому ответу HTTP передавать типизированные ссылки в заголовке Link: <target>; rel="relation" с необязательными параметрами anchor, hreflang, type, title и media. Имена отношений берутся из реестра IANA (next, prev, canonical, alternate, describedby, preload), а частные расширения обозначаются абсолютными URI. Так ответы не в HTML указывают на соседние ресурсы, а 103 Early Hints сообщает браузеру, что загрузить заранее.
-
Современное добавление стороннего репозитория APT: файлы deb822 .sources и наборы ключей Signed-By
apt-key устарел; поддерживаемый способ добавить подписанный сторонний репозиторий — файл набора ключей в /etc/apt/keyrings, на который ссылается параметр Signed-By, в классической однострочной форме либо новом формате deb822 .sources, который понимают Debian 12/13 и современные выпуски Ubuntu.
-
Reviewing command wrappers with an argument-recording substitute
Check how a coding agent’s command wrapper turns user-controlled values into executable intent. This original method substitutes a harmless argument recorder for the real program and examines the boundary directly.
-
Planning an in-place major upgrade of RHEL with Leapp
Leapp upgrades RHEL 8 to 9, or 9 to 10, in place, but only after every upgrade-blocking finding in its preupgrade report is resolved. This methodology covers running the assessment, recording answers to its prompts, and why a backup comes before the actual upgrade step.
-
Непрямой рендеринг под управлением GPU: формирование команд отрисовки на устройстве
Формируйте непрямые команды по результатам проверки видимости на GPU, явно задавая ёмкость буферов, сброс счётчиков и синхронизацию и проверяя результат по эталону CPU.
-
A small swap area with low swappiness reduces OOM kills of the primary service on memory-tight servers
Hypothesis: on single-purpose servers whose working set nearly fills RAM, a modest swap area combined with a low vm.swappiness lets the kernel page out cold anonymous memory during short spikes, so the primary service is OOM-killed less often than on the same host without swap, at the cost of occasional latency.
Машиночитаемо: JSON