Page 13 - Monthly Archives: September 2025
-
Maxim Mironjuk
-
September 09, 2025
Assertion functions let you declare runtime checks so the TypeScript compiler folds them into its control flow analysis. This article covers the asserts syntax, how it differs from classic type guards using is, and when writing your own assertion functions actually pays off in practice.
-
Maxim Mironjuk
-
September 09, 2025
Documentation that diverges from the code is worse than no documentation at all. Anyone who doesn't maintain OpenAPI schemas, validation rules, and example values in a structured way in Symfony builds up technical debt that discharges with every breaking change. This article shows how to keep schemas, examples, and validation permanently in sync.
-
Maxim Mironjuk
-
September 09, 2025
Database locks usually protect specific data rows or tables from concurrent, inconsistent access. Advisory locks serve a different purpose: they use the same robust locking infrastructure of the database to coordinate arbitrary application logic, without the lock being tied to any specific row or table. A typical use case is distributed locking for cron jobs or background processes that could run on multiple servers but must never execute the same operation at the same time.
-
Maxim Mironjuk
-
September 09, 2025
A single forgotten API key in a commit is enough to expose credentials permanently, even if the file gets deleted in a later commit. This article shows how gitleaks and git-secrets catch secrets before they are committed, why an additional CI check is necessary, and which order of operations determines the damage after a real leak.
-
Maxim Mironjuk
-
September 09, 2025
External libraries like typed.js add 15 KB for an animation that can be built entirely with Alpine.js and 30 lines of JavaScript. The typewriter effect with variable typing speed, realistic deletion and multiple text phrases looping continuously, without jQuery and without an NPM package.
-
Maxim Mironjuk
-
September 09, 2025
grid-auto-flow: dense automatically fills gaps in a CSS grid by searching backward on every placement. That produces a tight, gapless layout, but it can separate the visual order of elements clearly from their order in the markup, with direct consequences for keyboard navigation and screen readers.
-
Maxim Mironjuk
-
September 09, 2025
InnoDB is considered a row-level locking engine, yet table locks regularly occur in practice, for example during ALTER TABLE or explicit LOCK TABLES. This article explains how InnoDB technically implements row locks, when table locking becomes unavoidable, and how the lock modes S, X, IS and IX work together as intention locks.
-
Maxim Mironjuk
-
September 09, 2025
Hooks in Claude Code are shell commands that run automatically at precisely defined events such as a tool call, regardless of whether the model's context happens to recall a CLAUDE.md rule at that moment or not. While a prompt instruction only raises a probability, a hook enforces behavior deterministically, at the operating system level, not at the language model level.
-
Maxim Mironjuk
-
September 09, 2025
Anyone who suddenly sees two pipelines for the same commit in GitLab CI has usually run into the difference between branch pipelines and merge request pipelines: the former test the actual push state of a branch, the latter simulate what the code would look like after a merge. This article explains the difference in detail and shows how workflow:rules reliably prevents duplicate pipelines.
-
Maxim Mironjuk
-
September 09, 2025
Screen readers and other assistive technologies never read HTML directly, they consume a parallel structure computed by the browser called the accessibility tree. Understanding how DOM, semantic HTML, and ARIA attributes shape this tree lets you track down and fix missing or wrong accessible names with the right tools, instead of testing accessibility by guesswork.
-