Page 3 - Monthly Archives: March 2025
-
Maxim Mironjuk
-
March 29, 2025
A penetration test uncovers real attack paths that automated scanners miss, but it requires written permission upfront, a clear scope, and a team that actually acts on the results. This article explains testing approaches, authorization requirements, how development teams prepare, and the difference between an internal security review and hiring external pentesters, illustrated with concrete practical examples.
-
Maxim Mironjuk
-
March 29, 2025
Anyone migrating an application between PostgreSQL and MySQL, or running both systems side by side, quickly runs into syntax differences that look harmless at first glance but can delay an entire migration. This article compares data types, auto increment, JSON support, pagination, and upsert syntax between PostgreSQL and MySQL using runnable examples.
-
Maxim Mironjuk
-
March 29, 2025
Squash merge promises a spotless main history with one commit per pull request, but that convenience comes at a cost. Collapsing granular commits too eagerly sacrifices bisect precision, authorship, and the documented path behind large refactors. This article explains how squashing works mechanically, when it genuinely helps teams, and when rebase merge or merge commits remain the better choice.
-
Maxim Mironjuk
-
March 29, 2025
A Claude Code team workflow rarely fails because of the AI itself, but because of missing shared rules. This article shows how a shared CLAUDE.md, clear review expectations for AI-assisted changes, and structured onboarding prevent every developer from using Claude Code differently, which erodes code quality and traceability.
-
Maxim Mironjuk
-
March 29, 2025
Linux capabilities split the traditional root privilege into more than forty individual bits, so a process gets exactly one right, for example binding a privileged port, without inheriting everything else that comes with root. That is the difference between a least privilege design and a server that instantly loses full root access whenever a single compromised service goes wrong.
-
Maxim Mironjuk
-
March 29, 2025
When a hundred servers start the same backup job at exactly 00:00, the shared database or the shared storage backend collapses under the load spike, even though each individual job would be harmless on its own. Deliberate scheduling jitter spreads out such start times randomly across a time window and prevents exactly this thundering herd effect. This article shows how jitter is applied in cron and systemd timers.
-
Maxim Mironjuk
-
March 29, 2025
A correlated subquery differs from a normal subquery in that it references a column of the outer query and therefore has to be logically re-evaluated for every single outer row. This one difference explains both its expressive power for row-by-row logic and its biggest performance risk, when the optimizer cannot turn the repeated execution into an efficient join.
-
Maxim Mironjuk
-
March 29, 2025
Nullish Coalescing (??) and Optional Chaining (?.) are the most important additions to JavaScript since ES2020. They replace fragile && chains and || fallbacks with precise, readable operators, with the crucial difference that they react only to null and undefined, not to every falsy value.
-
Maxim Mironjuk
-
March 29, 2025
For years, a transition to or from an auto value in CSS simply did not work, because the browser had no way to compute a numeric intermediate value for auto. calc-size() and the interpolate-size property change that fundamentally: the browser can now resolve a numeric start or end value for auto itself and animate cleanly between them, with no JavaScript measurements and no fixed pixel values.
-
Maxim Mironjuk
-
March 28, 2025
Redis Cluster deterministically assigns every key to one of 16384 hash slots, which makes horizontal scaling possible without a central coordinator. Understanding the CRC16 slot calculation, the CROSSSLOT error on multi-key commands, and the targeted use of hash tags helps you avoid distribution problems and runtime errors before they hit production.
-