Page 24 - Monthly Archives: April 2025
-
Maxim Mironjuk
-
April 02, 2025
When a monorepo combines several largely independent sub-projects in a single repository, one monolithic .gitlab-ci.yml quickly becomes confusing and inefficient. Parent-child pipelines with the trigger keyword solve this by giving every sub-project its own, independently executable child pipeline that only runs when something in its area has actually changed.
-
Maxim Mironjuk
-
April 02, 2025
An external PIM with extra marketing attributes, or a separate review aggregation service, often holds exactly the data missing from the product schema, without justifying a second round trip for the client. This article shows how to cleanly attach a single external field to the existing ProductInterface through resolver delegation, including error handling for when the external service is unreachable, and batching so a product list does not trigger one HTTP call per node.
-
Maxim Mironjuk
-
April 02, 2025
Every time a page loads a script from an outside CDN, it silently trusts that the code delivered today is the exact code that got tested. If that CDN is compromised, the file's contents can change while the referenced URL stays identical, and the browser happily loads the tampered code anyway. Subresource Integrity addresses exactly this gap: a hash value embedded in the HTML compares the content actually received against the content expected, and blocks execution the moment they diverge.
-
Maxim Mironjuk
-
April 02, 2025
Naive entity iteration over millions of records reliably runs into a memory limit, because the UnitOfWork keeps every loaded entity in memory. EntityManager::clear(), toIterable() and bulk DQL updates solve this problem, each with its own trade offs.
-
Maxim Mironjuk
-
April 02, 2025
ROW_NUMBER, RANK and DENSE_RANK look almost identical at first glance, yet behave fundamentally differently as soon as two rows share the same value. Anyone who does not know the difference ends up with broken deduplication logic and incorrect leaderboards. This article shows the exact behavior of all three ranking functions using concrete tied-value examples.
-
Maxim Mironjuk
-
April 02, 2025
Once several microservices each offer their own REST API, the same cross-cutting logic repeats everywhere: checking authentication, enforcing rate limits, logging requests. An API gateway pulls that logic into one central place, with clear benefits but also new questions about resilience and latency.
-
Maxim Mironjuk
-
April 02, 2025
obj.hasOwnProperty(key) looks harmless, but it breaks with null prototype objects and with overridden prototype methods. Object.hasOwn(obj, key) is the static, robust alternative that avoids exactly these pitfalls and should be the default choice for property checks in modern code.
-
Maxim Mironjuk
-
April 02, 2025
Since ES2022, static class blocks allow real, multi step initialization logic for static class fields, including access to private fields and regular error handling. This article shows why the feature became necessary, how the syntax works in detail, and where it makes a practical difference.
-
Maxim Mironjuk
-
April 01, 2025
Queries like best bike shop near me follow a different logic than generic informational questions, because AI search engines need real time location data for these, not just solid topical content. Google Business Profile, LocalBusiness schema and consistent contact data become distinct GEO levers as a result, clearly separate from generic GEO strategy. This article covers how AI systems select sources for local queries, how the interplay with Google Business Profile works, and how to implement it practically in a Magento multi store setup with several branches.
-
Maxim Mironjuk
-
April 01, 2025
Forgetting to update Composer after every pull costs time chasing cryptic error messages. The post-merge hook handles routine tasks like that automatically, without anyone having to remember.
-