Page 9 - Monthly Archives: May 2025
-
Maxim Mironjuk
-
May 18, 2025
Redis handles two fundamentally different jobs in Magento 2: write-heavy session storage and read-heavy caching, often on the same server without any clean separation. This article shows how to calculate the memory needs for Redis sessions, configure env.php and redis.conf for separate instances, and use monitoring to catch it early when Redis sizing hits its limits.
-
Maxim Mironjuk
-
May 18, 2025
@nuxtjs/i18n is the de facto standard module for shipping a Nuxt application in multiple languages, and it covers far more than plain text translation: it decides the URL structure per language, lazy-loads translation files on demand, and automatically generates the hreflang tags needed for international SEO. Getting the routing strategy wrong early on often means migrating the entire URL structure of the site later, which is why a deliberate decision at the start of a project pays off.
-
Maxim Mironjuk
-
May 17, 2025
Claude Code, Cursor, and Windsurf solve the same underlying problem with very different architectures: the Claude Code CLI agent works independently of any editor, straight from the terminal, Cursor is a VS Code fork built around deep tab completion, and Windsurf leans on its Cascade agent inside its own editor surface. Knowing the differences means picking the right tool for a given workflow instead of relying on marketing claims.
-
Maxim Mironjuk
-
May 17, 2025
A type change that turns consumer code into a compile error is a breaking change, even without any change to runtime behavior at all. Backwards compatibility for type changes means deliberately using overloads, deprecation comments, API reports and Semantic Versioning so a TypeScript library can grow without surprising existing consumers on every release.
-
Maxim Mironjuk
-
May 17, 2025
A TypeScript type that compiles without errors is not automatically correct. Complex generic and conditional types can silently widen to any, accept an invalid shape they should reject, or narrow incorrectly inside a conditional branch. Tools like tsd, expect-type, and Vitest's expectTypeOf make exactly this behavior testable, purely at compile time, without a single runtime test.
-
Maxim Mironjuk
-
May 16, 2025
Negative grid line numbers count backwards from the end of the grid, so grid-column: 1 / -1 always spans the full width, whether the grid has three, six, or twelve columns. Hardcode positive line numbers instead, and every change to the column count forces you to chase down and fix every placement by hand. Negative lines make the layout robust against exactly that change.
-
Maxim Mironjuk
-
May 16, 2025
The Digital Services Act (DSA) is a new EU regulation that has applied since 17 February 2024 to nearly all online shops with customer reviews, comment sections or marketplace offerings. Among other things, it requires an easily reachable point of contact, a simple way to report illegal content, and a ban on manipulative interface designs. This article explains in plain language who is affected and what you should do now.
-
Maxim Mironjuk
-
May 16, 2025
Shell scripts without tests are a black box in your automation. The Bash Automated Testing System (BATS) brings structured unit tests, fixtures, and mocking to the shell world, and it integrates seamlessly into GitHub Actions, GitLab CI, and Jenkins without any external runtime dependencies.
-
Maxim Mironjuk
-
May 16, 2025
Once more than one php-fpm process is running, the default file-based session storage quickly becomes a problem, at the latest once you scale horizontally across multiple servers. SessionHandlerInterface offers exactly six methods to store session data in Redis, a database, or any other backend instead, without any framework at all. This article walks through the implementation in detail, including the locking strategy that protects parallel requests for the same session from data loss.
-
Maxim Mironjuk
-
May 16, 2025
Scroll, resize, and input events fire hundreds of times per second and can bring the main thread to a crawl if every call triggers an expensive function unchecked. Debouncing and throttling tame this flood deliberately, with clear timer mechanics, rAF-based patterns for visual updates, and ready-made Alpine.js modifiers for Hyva themes.
-