Page 210 - Mironsoft Blog
-
Maxim Mironjuk
-
July 24, 2025
An offsite backup is the copy that survives a fire, theft, or ransomware infection at the local site. The 3-2-1 rule gives a simple but effective formula for this: three copies of the data, on two different media types, at least one physically separated from the main site. This article shows how to implement that rule on Linux servers in an automated, encrypted, and monitored way.
-
Maxim Mironjuk
-
July 24, 2025
Modeling application state with several independent boolean flags risks contradictory states at runtime, such as being loaded and failed at the same time. Discriminated unions solve this by giving TypeScript a shared tag field that automatically identifies the exact state, so impossible combinations are ruled out at compile time and the editor only suggests fields that are actually valid.
-
Maxim Mironjuk
-
July 23, 2025
Accessibility isn't an optional extra, it's a legal requirement and a quality mark. Alpine.js makes it easy to keep ARIA attributes reactively in sync with UI state: aria-expanded follows the toggle state automatically, aria-hidden gets set dynamically, and focus traps keep keyboard focus in the right context.
-
Maxim Mironjuk
-
July 23, 2025
Bash scripts quickly grow beyond the size of a single one-liner. Anyone who consistently uses functions, local scope with local and declare, libraries via BASH_SOURCE, and namerefs builds automation that remains understandable and extensible even a year later.
-
Maxim Mironjuk
-
July 23, 2025
A single call to htmlspecialchars() is often mistaken for complete XSS protection, yet safe output encoding always depends on where the value ends up: HTML body, HTML attribute, JavaScript string and URL each require their own escaping rules, and mixing them up leaves open exactly the gap that was supposed to be closed.
-
Maxim Mironjuk
-
July 23, 2025
Alpine.js debugging feels different from React or Vue because there is no dedicated component tree panel out of the box. With browser DevTools, the Alpine DevTools extension and a few console techniques, you can still see, change and trace the state of any component live, before a bug ever reaches production.
-
Maxim Mironjuk
-
July 23, 2025
Off-the-shelf rule sets catch generic problems, but every mature codebase accumulates conventions that only a custom rule can enforce mechanically. This article walks through the anatomy of an ESLint rule, from syntactic and typed linting through fixer functions, testing with RuleTester, and wiring everything into an ESLint 9 flat config.
-
Maxim Mironjuk
-
July 23, 2025
An E2E test that, while loading a page, inevitably also waits on a real tracking script, an embedded chat widget, or an external payment script, automatically inherits the entire instability, load time, and rate limiting of these foreign systems the team doesn't control, even though the actual test case usually has nothing substantively to do with these third-party services. Deliberately blocking, or where genuinely necessary, deliberately mocking external scripts decouples test stability from the reliability of these foreign systems and measurably speeds up test runs.
-
Maxim Mironjuk
-
July 22, 2025
Transparent Huge Pages sound like a free performance win, since the kernel forms larger memory pages on its own without requiring any application changes. On database and cache servers, that very automation regularly turns out to be a source of unpredictable latency spikes, while statically reserved huge pages offer a very different, far more controllable behavior.
-
Maxim Mironjuk
-
July 22, 2025
Featured snippets sit above the classic first organic result and hand users the answer right inside the results page. Understanding which format Google favors for which type of query lets you target position zero deliberately instead of hoping for it.
-