Page 13 - Monthly Archives: February 2025
-
Maxim Mironjuk
-
February 11, 2025
Screen reader users do not orient themselves by scrolling, but by jumping deliberately between landmarks like header, nav, main, aside and footer. Using these HTML5 elements correctly and sparingly gives blind and low vision visitors a fast overview of every page and direct access to content, while excessive or unlabeled landmarks do the opposite and make navigation noticeably harder.
-
Maxim Mironjuk
-
February 11, 2025
A form that only tells the user after submitting that the email address is already taken creates avoidable frustration. Professional form implementation in Vue 3 means detecting dirty state, showing validation at the right moment, and integrating asynchronous checks cleanly with debounce and a loading state.
-
Maxim Mironjuk
-
February 11, 2025
String hacks in Bash, file lists as whitespace-separated strings, configuration values as comma-separated fields, break systematically as soon as a value contains a special character. Arrays in Bash are the clean alternative: indexed arrays for ordered lists, associative arrays for key-value structures, slices for subsets and safe iteration for every use case.
-
Maxim Mironjuk
-
February 11, 2025
When Tailwind CSS meets Bootstrap, Bulma or grown legacy CSS, classes with identical names start overwriting each other. The Tailwind CSS prefix option solves this problem with minimal configuration and maximum isolation. This article explains how and when to use it.
-
Maxim Mironjuk
-
February 11, 2025
The restricted shell rbash blocks cd, PATH changes, and calling programs through a path containing a slash. That is enough for simple, benign restrictions like an SFTP replacement, but it can be bypassed with documented techniques relatively easily. Anyone using rbash should know exactly what it covers and what needs additional hardening.
-
Maxim Mironjuk
-
February 11, 2025
A direct fetch call that throws JSON at the template is not an API layer, it is a maintenance problem waiting to happen. DTOs, structured error mapping, and retry logic turn a Vue REST API integration into a stable layer you can actually rely on.
-
Maxim Mironjuk
-
February 11, 2025
Once the customer scrolls past the original add-to-cart button, a lean sticky add to cart bar takes over at the bottom of the screen. With x-intersect instead of a custom scroll listener, this pattern can be implemented performantly and without layout thrashing, in sync with variant selection and quantity in the main form.
-
Maxim Mironjuk
-
February 11, 2025
An assignment like $b = $a for a large PHP array looks at first glance like an expensive copy operation, but internally it initially only costs incrementing a reference counter. Copy-on-Write postpones the actual copy to the moment one of the two variables is actually modified, and this exact mechanism decides memory usage and performance for every array hand off in PHP.
-
Maxim Mironjuk
-
February 10, 2025
Server side rendering delivers visible content quickly, but hydration often makes that content interactive only after a delay. Lazy hydration shifts exactly that delay to where nobody notices it: to components that are not yet visible or are not currently needed.
-
Maxim Mironjuk
-
February 10, 2025
Mocking everything a class touches, indiscriminately, produces unit tests that break on every refactor even though the application's behavior never changed. Gerard Meszaros' taxonomy distinguishes dummy, stub, fake, spy and mock as five clearly separated roles, each with a different purpose, a different verification logic and a different degree of coupling to implementation details. This article walks through the theory behind every test double using hand-written PHP implementations, independent of any particular testing framework.
-