Seite 22 - Maxim Mironjuk
-
Maxim Mironjuk
-
April 13, 2026
FROM orders o, customers c WHERE o.customer_id = c.id sieht auf den ersten Blick wie eine harmlose Abkürzung für einen Join aus, und syntaktisch ist es auch nichts anderes. Die implizite Komma-Syntax stammt aus einer Zeit vor dem heute üblichen JOIN-Schlüsselwort und funktioniert in den meisten Datenbanksystemen bis heute unverändert. Der entscheidende Unterschied zur expliziten JOIN-Syntax liegt nicht im Ergebnis einer korrekt geschriebenen Abfrage, sondern in dem, was passiert, wenn ein Entwickler einen Fehler macht: Bei der Komma-Syntax verwandelt sich eine vergessene WHERE-Bedingung ohne jede Fehlermeldung in ein kartesisches Produkt. Dieser Artikel erklärt, warum das strukturell riskanter ist, wo die Komma-Syntax noch auftaucht, und warum explizites JOIN bei komplexen Abfragen auch die Lesbarkeit deutlich verbessert.
-
Maxim Mironjuk
-
April 13, 2026
content bei ::before und ::after wird oft nur fuer leere dekorative Elemente genutzt, kann aber deutlich mehr: attr() liest HTML-Attribute direkt aus, counter() nummeriert Listen und Kapitel automatisch, und content: url() bindet Bild-Icons ein, ganz ohne zusaetzliches Markup. Wer diese Moeglichkeiten kennt, spart HTML-Elemente, muss dabei aber die Zugaenglichkeits-Grenzen von generiertem Inhalt genau verstehen.
-
Maxim Mironjuk
-
April 13, 2026
Der Symfony Configuration Tree Builder ist das Werkzeug, mit dem ein Bundle definiert, welche Konfiguration erlaubt ist, welche Werte Pflicht sind und wie fehlerhafte Eingaben abgefangen werden. Dieser Artikel geht durch Knotentypen, Default-Werte, Normalisierung und eigene Validierungsregeln anhand eines vollstaendigen Beispiels.
-
Maxim Mironjuk
-
April 13, 2026
Die häufigste Erfahrung in PHP-Projekten: Tests sind schwierig zu schreiben, weil der Produktionscode es schwierig macht. Neue Abhängigkeiten direkt instanziiert, globaler State, zu viele Aufgaben in einer Klasse. Testbarkeit ist kein Zufallsprodukt – sie ist das Ergebnis konkreter Designentscheidungen im Produktionscode.
-
Maxim Mironjuk
-
April 13, 2026
Ein Upload-Formular mit loading, error, success und retry als vier separate boolesche Flags erzeugt schnell unmögliche Kombinationen. Ein State-Machine-Pattern in Alpine.js ersetzt diese Flags durch einen einzigen, benannten Zustand mit klar definierten Übergängen und macht komplexe UI-Zustände dadurch vorhersagbar und wartbar.
-
Maxim Mironjuk
-
April 13, 2026
Sobald zwei oder mehr Module dieselbe Methode patchen, entscheidet die Plugin-Sortierreihenfolge über das tatsächliche Verhalten der Anwendung, oft ohne dass ein Entwickler das bemerkt. sortOrder-Konflikte zeigen sich selten als klarer Fehler, sondern als subtil falsches Verhalten, das sich erst mit dev:di:info und einem klaren Verständnis der Interceptor-Ausführung sauber diagnostizieren lässt.
-
Maxim Mironjuk
-
April 13, 2026
Wer Magento Shops auf mehreren Applikationsservern betreibt, kennt das Problem: Ein Fehler taucht irgendwo zwischen Loadbalancer, Nginx, PHP-FPM und Datenbankserver auf, und die relevanten Zeilen liegen verteilt auf drei oder vier verschiedenen Maschinen. rsyslog löst dieses Problem, indem es Logs mehrerer Server über das Netzwerk an einen zentralen Server weiterleitet, dort konsolidiert und für die Auswertung an einem einzigen Ort verfügbar macht, wahlweise verschlüsselt und mit Zustellgarantie.
-
Maxim Mironjuk
-
April 13, 2026
Ein Symfony-Major-Upgrade scheitert selten an Symfony selbst, sondern an Composer-Abhaengigkeiten, die noch nicht kompatibel sind. Mit composer why-not, gezielt gelockerten Constraints und einer sauberen CI-Pipeline lassen sich diese Konflikte systematisch aufloesen, statt sie mit riskanten --ignore-platform-reqs-Flags zu uebertuenchen.
-
Maxim Mironjuk
-
April 13, 2026
setup:di:compile ist einer der zeitintensivsten Schritte im Magento-Build-Prozess — und einer der am häufigsten falsch platzierten. Zu früh ausgeführt fehlt die vollständige Composer-Basis; zu spät ausgeführt verzögert es den Deploy. Dieser Artikel zeigt, wann und wie di:compile in einer GitLab-Pipeline am besten läuft.
-
Maxim Mironjuk
-
April 12, 2026
Datenbanksperren schützen üblicherweise konkrete Datenzeilen oder Tabellen vor gleichzeitigem, inkonsistentem Zugriff. Advisory Locks verfolgen einen anderen Zweck: Sie nutzen dieselbe robuste Locking-Infrastruktur der Datenbank, um beliebige Anwendungslogik zu koordinieren, ohne dass diese Sperre an eine konkrete Zeile oder Tabelle gebunden ist. Ein typischer Einsatzfall ist verteiltes Locking für Cron-Jobs oder Hintergrundprozesse, die auf mehreren Servern laufen könnten, aber niemals gleichzeitig denselben Vorgang ausführen dürfen.
-