Page 224 - Mironsoft Blog
-
Maxim Mironjuk
-
July 06, 2025
Running ten Magento shops with ten identical pipeline files is technical debt in its purest form. Every change to the deploy process has to be made ten times. GitLab templates with include and extends solve this problem: one central build standard, individually extensible per project.
-
Maxim Mironjuk
-
July 06, 2025
HTTP status codes and global response times say little about GraphQL APIs. Resolver latency, error classes, field usage and N+1 detection are the metrics that make real production problems visible.
-
Maxim Mironjuk
-
July 06, 2025
A Magento rollback is more than flipping a symlink. The database, queue messages, static content, and Elasticsearch indexes each follow their own rules. Anyone who rolls back only the files risks inconsistencies that are harder to fix than the original problem.
-
Maxim Mironjuk
-
July 06, 2025
A shell script that runs fine on a developer's MacBook fails inside an Alpine-based CI container, because macOS ships Bash 3.2 and Alpine only includes BusyBox sh. Understanding the line between portable POSIX shell and Bash-specific features is a prerequisite for shell code that works reliably across a team.
-
Maxim Mironjuk
-
July 06, 2025
A Common Table Expression names a subquery with the WITH clause and makes it referenceable in the main query like a table. Instead of nesting subqueries multiple levels deep, you get a query that reads top to bottom, states its logic once, and can be traced step by step, whether in PostgreSQL, MySQL, SQL Server, or Oracle.
-
Maxim Mironjuk
-
July 06, 2025
A careless git reset --hard or a botched rebase feels like a permanent loss, but rarely is. The reflog logs every movement of HEAD locally and makes vanished commits recoverable again within minutes in most cases. This article shows how the reflog works, how long entries survive, and how a clean recovery plays out in practice.
-
Maxim Mironjuk
-
July 06, 2025
Symbol.iterator is the best known well known symbol, but far from the only one. This article shows how Symbol.toPrimitive, Symbol.hasInstance and Symbol.toStringTag precisely control the behavior of custom objects during type conversion, instanceof checks and debug output, and how custom symbols enable collision free object keys.
-
Maxim Mironjuk
-
July 05, 2025
A Redis hash with three fields and a Redis hash with thirty thousand fields are stored internally in completely different ways, even though both are addressed through the same commands like HSET and HGET. Redis automatically chooses between a compact, memory-optimized listpack encoding for small collections and a classic hashtable structure for large ones, depending on configurable thresholds. Knowing this automatic switchover point makes it possible to deliberately design data models so Redis stays in the memory-efficient listpack encoding as long as possible. This article covers how the switch works technically and what practical consequences follow for memory planning.
-
Maxim Mironjuk
-
July 05, 2025
Attribute routing covers the vast majority of applications, but it hits its limits once routes need to come from a database at runtime, for example for CMS pages or redirects. This article shows how a custom loader covers those cases, how custom requirements validate parameters with regex right inside routing, and how to reliably control ordering when routes overlap.
-
Maxim Mironjuk
-
July 04, 2025
A kernel version upgrade without a plan can take down a production server if drivers go missing or DKMS modules stop building. With a clear baseline snapshot, an LTS strategy, GRUB as a rollback safety net and a test plan, the risk turns into a controlled, repeatable procedure.
-