Page 290 - Mironsoft Blog
-
Maxim Mironjuk
-
April 03, 2025
SSH hangs, monitoring no longer reports any values, and the team is unsure whether an immediate hardware reset is the right move. This runbook delivers a clear escalation order for an unresponsive server: from a quick network check, through out-of-band access and Magic SysRq, to a controlled reset as the absolute last resort.
-
Maxim Mironjuk
-
April 03, 2025
The native JSON type lets you store semi-structured data directly in MySQL and query it efficiently with JSON_EXTRACT and JSON_TABLE. Without generated columns for indexing, however, JSON queries stay slow, and without clear criteria for its use, JSON quickly turns into an excuse for missing schema design.
-
Maxim Mironjuk
-
April 03, 2025
Shadow DOM encapsulates styles so completely by default that global Tailwind CSS never reaches a Web Component in the first place. With Constructable Stylesheets, adoptedStyleSheets and the ::part selector, this encapsulation can be opened up deliberately without giving up Shadow DOM's isolation guarantees. This article shows concrete patterns for Custom Elements that use Tailwind CSS consistently without shipping their CSS multiple times.
-
Maxim Mironjuk
-
April 03, 2025
Automatically generated factories for new objects, proxies for lazy loading of expensive services: both patterns explained together with concrete use cases and PHP 8.4.
-
Maxim Mironjuk
-
April 02, 2025
After every deployment and after every manual cache flush, a Magento store starts out with a completely empty full page cache, and it is exactly at that moment that the first real visitors hit a server that has to render every page fresh from PHP and the database. For a store with meaningful traffic, this creates a classic thundering herd problem, where many parallel requests hit the same uncached resource at once and put unnecessary load on the server. This article shows how critical pages like the homepage, top categories, and bestsellers can be systematically pre-heated by script before real visitors are affected, and where the difference between reactive and proactive cache warmup lies.
-
Maxim Mironjuk
-
April 02, 2025
Text wrap around geometric shapes was long an unfulfilled wish in web design. CSS shape-outside makes it possible: text flows around circles, ellipses, and polygons, using floats, without JavaScript, directly in CSS. shape-margin, shape-image-threshold, and clip-path complete the toolkit for editorial web design.
-
Maxim Mironjuk
-
April 02, 2025
A 2 MB JavaScript bundle is not rare, but it is almost always avoidable. Bundle analysis with Rollup and Vite makes invisible problems visible: tree-shaking gaps, duplicate dependencies, unnecessary polyfills, and provides the foundation for targeted optimization.
-
Maxim Mironjuk
-
April 02, 2025
In Magento projects with several developers working in parallel and regular module updates, a merge conflict in composer.lock is one of the most common Git problems, and also one of the most commonly resolved incorrectly. The file is machine generated, several thousand lines long, and contains a hash that must match the actual composer.json, which is why manually merging the conflict markers almost always produces a file that is inconsistent but looks superficially valid. This article walks through the correct resolution path and how such conflicts can be reduced across a team in the first place.
-
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.
-