Page 15 - Monthly Archives: September 2025
-
Maxim Mironjuk
-
September 07, 2025
When people talk about image SEO, compression and loading speed are usually the first thing that comes to mind. That matters, but it only covers half the picture, because whether an image shows up in Google Image Search at all, and how high it ranks, is mostly decided by content relevance signals. This article walks through the factors that matter beyond performance and why image search traffic tends to be an underrated channel.
-
Maxim Mironjuk
-
September 07, 2025
A soft delete marks a row as deleted without physically removing it, sounds like a single extra column, and turns out in practice to be a source of unique constraint conflicts, bloated indexes, and forgotten WHERE clauses. This post shows three established models for soft deletes and explains when each one truly fits.
-
Maxim Mironjuk
-
September 07, 2025
Anyone validating a checkout form with shipping and billing addresses, payment data, and contact fields against a single global error object quickly loses the overview. A well designed validation group per business section makes errors visible per area, keeps Alpine components maintainable, and helps screen reader users orient themselves inside the form.
-
Maxim Mironjuk
-
September 07, 2025
Magento maintenance scripts in Bash make the difference between manual deploy chaos and reliable automation. The right sequence of bin/magento commands, rsync backups, cache flushing and log rotation prevents the errors that creep in when deploy steps are run manually in the wrong order.
-
Maxim Mironjuk
-
September 07, 2025
Different execution times in string comparisons can let attackers guess secret values, such as API keys or HMAC signatures, byte by byte. We explain the underlying mechanism, show hash_equals() as the fix in PHP, and cover which comparisons are actually timing sensitive.
-
Maxim Mironjuk
-
September 07, 2025
Hover info, an AST tree, version comparison, and shareable permalinks: the official Playground solves type puzzles faster than a local IDE.
-
Maxim Mironjuk
-
September 07, 2025
Every form of persistence in Redis costs latency, whether through fsync calls on every write or through the fork process behind a snapshot. Anyone who does not understand this tradeoff ends up choosing either a configuration that causes latency spikes in production, or one that loses more data than planned when something actually breaks.
-
Maxim Mironjuk
-
September 06, 2025
The schema.graphqls file is the contract between backend and frontend. A poorly designed schema is hard to extend, hard to version, and hard to document. This article shows which patterns have proven themselves in Magento modules and which anti-patterns regularly cause problems.
-
Maxim Mironjuk
-
September 06, 2025
On a server, twenty kilobytes per response is a footnote, on a smartphone with a weak connection and a limited battery it's a noticeable difference. GraphQL can make mobile data transfer significantly leaner than classic REST endpoints, but only when query design, persisted queries, batching and polling are deliberately tuned for mobile conditions.
-
Maxim Mironjuk
-
September 06, 2025
Anyone who wanted to resolve a promise from the outside, from an event handler, a callback API, or some other asynchronous context, had to smuggle resolve and reject out of the constructor scope. Promise.withResolvers() solves this in a single line: { promise, resolve, reject } as a structured object, clear and without boilerplate.
-