Page 110 - Mironsoft Blog
-
Maxim Mironjuk
-
December 11, 2025
Data modeling with entity-relationship diagrams is the step that comes before every single CREATE TABLE statement: entities, attributes and relationships get defined conceptually first, before being translated into actual tables and foreign keys. This post explains entities, attributes, relationship types and cardinality notation through one continuous example, a library system, and shows the complete path from a diagram to SQL DDL.
-
Maxim Mironjuk
-
December 11, 2025
The automatic property-by-property comparison of assertEquals() fails for value objects with their own business definition of equality. assertObjectEquals() and custom comparator classes solve this by using the class's own real comparison logic.
-
Maxim Mironjuk
-
December 11, 2025
The Claude Code memory system automatically creates structured notes about projects and user preferences that persist across individual sessions, independent of the current context window. Unlike a manually maintained CLAUDE.md file, memory often emerges incidentally from feedback and recurring corrections, which makes control, traceability, and privacy central questions.
-
Maxim Mironjuk
-
December 11, 2025
Git Flow and GitHub Flow solve the same problem in different ways: how a team works on features in parallel without blocking each other. This article explains both branching strategies in detail, shows real Git commands for everyday work, and gives a clear recommendation for which model fits small teams and which fits large ones.
-
Maxim Mironjuk
-
December 10, 2025
A button with 30 Tailwind classes in the template is not a Tailwind problem, it is an architecture problem. Vue and Tailwind can be combined so that class logic lives in computed properties, variants are managed through cva and templates stay readable, without sacrificing the expressiveness of Tailwind.
-
Maxim Mironjuk
-
December 10, 2025
A single disk is always just a matter of time. RAID with mdadm spreads data redundantly across multiple disks, so a disk failure does not immediately take the server down but can be fixed while the system keeps running.
-
Maxim Mironjuk
-
December 10, 2025
When multiple users change the same record at the same time, the choice between Optimistic Locking and Pessimistic Locking determines whether your application reliably prevents lost updates or gets stuck waiting under load. This article explains both locking strategies in MySQL with real SQL and PHP code, walks through SELECT FOR UPDATE and version columns in detail, and helps you decide which model fits which use case.
-
Maxim Mironjuk
-
December 10, 2025
A GraphQL resolver that combines database queries, validation, permission checks and transformation logic in a single class is no longer a resolver, it is an unbounded mini-service. This article shows how to keep resolvers thin, introduce clear layers, and move business logic to where it actually belongs.
-
Maxim Mironjuk
-
December 09, 2025
API keys unlock interfaces for partners, marketplaces, and internal services, yet poorly managed keys remain one of the most common entry points for data breaches. This article shows how to generate API keys with sufficient entropy, scope them to minimal permissions, rotate them without downtime, and revoke them immediately on suspected compromise, with practical guidance for Magento backends.
-
Maxim Mironjuk
-
December 09, 2025
Claude Code only speeds up bug fixing when the bug is reproduced first and backed by real logs and stack traces. This article walks through a solid debugging workflow where hypotheses are actively tested against the actual codebase instead of accepting the first plausible-sounding explanation from the AI as the confirmed cause.
-