Blog: Latest Entries (15):


PHPStorm mit Xdebug

Auf Wunsch hier nochmal eine kleine Anleitung wie man Xdebug in einem Docker-Container zusammen mit PHPStorm verwendet. Ich hatte ja schon eine Anleitung für VSCode geschrieben und dort am Ende angemerkt, dass es mit PHPStorm sehr viel einfacher geht. Vorhin nochmal getestet und es geht sehr viel einfacher.

Aber von Anfang an. Wir müssen erstmal das Docker-Image um Xdebug erweitern:


RUN pecl install xdebug-2.8.0 && docker-php-ext-enable xdebug
RUN echo 'zend_extension="/usr/local/lib/php/extensions/no-debug-non-zts-20151012/xdebug.so"' >> /usr/local/etc/php/php.ini
RUN echo 'xdebug.remote_port=9000' >> /usr/local/etc/php/php.ini
RUN echo 'xdebug.remote_enable=1' >> /usr/local/etc/php/php.ini
RUN echo 'xdebug.remote_host=host.docker.internal' >> /usr/local/etc/php/php.ini


Dann installieren wir uns "Xdebug Helper" für den Chrome oder eben die Kombination aus Addon und Browser, die man gerne hätte.

bbcode-image


Dann den Docker-Container starten. Die Seite im Chrome aufrufen und dort das Addon aktivieren. Einen Breakpoint in PHPStorm setzen und PHPStorm auf Debug Eingänge horchen lassen.

bbcode-image


F5 im Webbrowser drücken und dann das Mapping bestätigen.

bbcode-image


Das wars. Super einfach und schnell (abgesehen vom Docker-Container bauen) eingerichtet.

bbcode-image

DDD-Cluster.. ein Diagramm

Ich nenne diese Struktur DDD-Cluster, da es ein Cluster aus mehreren Domains ist, die auch unter einander kommunizieren können und auch die Hexagonale-Architektur abbilden.

bbcode-image


Jeder der schon mal in Java eine EJB3-Anwendung mit mehreren Modules gebaut hat, sollte das darin wieder erkennen können und weiß sicher das so ein Diagramm zwar schön sauber aussieht, aber die Realität schnell ganz anders ist. Abhängigkeiten wachsen schnell und schnell gibt es Module die fast alle anderen Module benötigen und schnell zyklische Abhängigkeiten entstehen. So eine Architektur entsteht, wenn man sauber und bewusst arbeitet. Die Anwendung wird nicht sauber und strukturiert, weil es die Theorie so einer Architektur gibt.

Also nichts neues aber mal nett anzugucken. Dann denkt man an die Realität und weiß wieder warum es Microservices gibt.

Composer: Eigene Libs mit Gitlab

Man kennt Systeme wie Satis oder Toran die sich aus einem Git bei Änderungen den aktuellen Stand holen und ihn in Versionen für die Libs umwandeln. Man darf nicht vergessen die System zu triggern, um immer die aktuellen Version zu haben. Sonst ändert man was und wundert sich, dass sich nichts ändert.

Mit Gitlab kann man alles in einem haben und das in sehr einfach. Auto DevOps ist aber diesmal nicht die Lösung. Aber man braucht nur ca. 1 Minute um alles einzurichten.

bbcode-image


1) Package Repository aktivieren (wenn noch nicht so)
2) Pipelines aktivieren (unwahrscheinlich dass es noch nicht ist)
3) auf der Startseite des Projekt "Setup CI" wählen
4) Bei den Templates "composer" auswählen und mergen
5) .. fertig

bbcode-image


Schon findet man beim nächsten Push eines Branches oder Tags in der Package-Registry einen Eintrag für einem Composer-Package.

bbcode-image

Commit-Messages: Was im Branch geschrieben wird, bleibt im Branch

Wie sollen Commit-Messages aussehen? Es gibt viele gute und durchdachte Konzepte dazu.

* Einfache mit wenig Formalitäten
* Sehr umfassende, die zur automatischen Generierung von Changelogs taugen

Aber man sollte sich auch klar machen, dass diese Commit-Messages nur bei Merge Commits zum tragen kommen. Wenn man in einem Branch ist commitet man häufig (mindestens einmal am Tag) und oft auch WIP Stände. Vieles was man commited ist ungetestet und enthält noch Fehler. Am Ende macht man alles noch mal hübsch und schreibt die README.
Also hier braucht es weder "feat" noch "fix" Prefixes. Was ist insgesamt ist, sagt ja schon der Branch. Wie es innerhalb des Branches aussieht interessiert nur 1-2 Entwickler. Die Commit-Message des Merges ist interessant und da braucht man an sich keine Message aus der man ein Changelog-Eintrag erzeugen kann sondern direkt einen Changelog-Eintrag. Also macht es sich an sich mehr Sinn über das Changelog, Versionierung und Change-Dokumentierung Gedanken zu machen. Ein Template für Merge-Commits wird da schon von alleine mit abfallen.

"clean up code" und "fixes while testing" sind im Branch also voll OK.


Govee TV LED vs. Ambilight

Philips TVs mit Ambilight sind ja echt schön (auch abgesehen von der Fernbedienung) aber auch entsprechend teuer. Grundig hat TVs mit eingebauten Fire TV aber leider ohne Ambilight. Nach etwas suchen und der Entscheidung nicht mit einer Webcam und einem Raspberry Pi selbst was zu basteln habe ich mich ein Set von Govee entschieden.

Die Installation geht echt einfach, auch wenn man vielleicht die LED-Strips später noch mal kleben muss, weil die unter Spannung doch mal abgehen. Die Plastikhalterungen, die für so einen Fall beiliegen, waren leider zu breit für unseren TV. Das USB-Kabel könnte länger sein, aber eine einfach USB-A Verlängerung (30cm) sollte das Problem lösen. Die Kamera hält erstaunlich gut.

bbcode-image
ganz viel 3M-Klebezeugs


bbcode-image
Aufkleber zur einfachen Kalibrierung


Die Installation geht mit einer Mischung aus Bluetooth und WLAN sehr einfach. Wichtig ist wirklich den Vorgaben zu folgen. Licht an und TV aus. Wir haben Ikea Tradfri LED Leuchten und die sorgen schnell dafür, dass alles was die Kamera durch die Spiegelung im TV sieht blau ist. Mit Licht aus sind die Ergebnisse dann wieder stimmig. Aber für 60 Euro und eine externe Lösung (die keinen HMDI Input benötigt) funktioniert es ziemlich gut.

bbcode-image
Mit Star Wars Episode 3


Die Govee Wasserdetektoren sehen auch lustig aus, sind aber wohl in Deutschland nicht zu bekommen.

Was ist 31.1. + ein Monat?

Was ist der 31.1. + ein Monat? Den 31.2. gibt es nicht also ist es der 27.2./28.2. oder ein Tag im März?
Von der reinen menschlichen Logik wäre der Xte Tag des Monats der selbe oder der nächstgelegenste mögliche Tag. Aber nie der Tag des nächsten Monats. Wie beim ISO-Kalenderjahr geht man vom Gefühl nicht davon aus dass das neue (Kalender-)Jahr im alten (gefühlten) Jahr anfängt.


/**
* @param DateTime $date
* @param int $months
*
* @return DateTime
* @throws Exception
*/
function addMonths(DateTime $date, $months = 0) {
$firstDayDate = clone $date;
$dayOfMonth = $firstDayDate->format('d');
$firstInterval = new DateInterval('P' . ($dayOfMonth - 1) .'D');
$firstDayDate->sub($firstInterval);
$firstDayDate->add(new DateInterval('P' . $months . 'M'));
$maxDay = $firstDayDate->format('t');
if($dayOfMonth > $maxDay) {
$dayOfMonth = $maxDay;
}
$restoreIntervall = new DateInterval('P' . ($dayOfMonth - 1) . 'D');
$firstDayDate->add($restoreIntervall);
return $firstDayDate;
}


Damit wäre der 31.1. + 3 Monate der 30.4. weil immer im Context eines bestimmten Monats gerechnet wird und dieser Context nicht verlassen werden darf.


3D-Druck: Externes Gehäuse für Bluray-Brenner

Ich gehöre noch zu den Leuten, die Optische Medien für Backups verwenden. 25GB pro Medium sind ausreichend und die Lagerung ist mit Blurays auch ganz einfach.
Jetzte wollte ich aber den Brenner der Optik wegen lieber extern haben und nicht ins Gehäuse einbauen.

Also druckt man sich schnell ein Gehäuse und dann sollte es ja passen... leider nicht. 5mm fehlten.

bbcode-image


Der einfache USB 3.0 SATA3 Adapter passt perfekt, aber das Laufwerk war 5mm zu lang. Die Öffnung hinten im Gehäuse ragt zu weit rein. Also da einfach kürzen, damit es passt. Hier (TinkerCAD) habe ich eine passende Version gebaut.

bbcode-image

Docker mit WSL 2... zu langsam

Ich habe einmal versucht Docker mit der WSL 2 based engine laufen zu lassen. Es war alles extrem langsam und alles dauerte ewig. Vorher lief Docker selbst auf einem langsameren Notebook ganz gut. Das hier beschreibt das Problem sehr genau. Am Ende bin ich auch wieder auf die Hyper-V Engine zurück gewechselt. Meine Daten in das WSL Dateisystem zu kopieren gefiel mir nicht wirklich, weil ich von Windows aus mit PHPStorm darin entwickel. Hyper-V deinstallieren klingt zwar auch interessant und ich könnte Virtual Box wieder verwenden.. aber so ganz traue ich dem nicht.

JavaScript Check

Manchmal muss man auch heute noch prüfen ob der Benutzer JavaScript
auf der Seite erlaubt hat oder ob ein Framework wie JQuery korrekt geladen und nicht geblockt wurde.

Prinzip ist einfach. Man versucht die Meldung mit JavaScript nach dem Laden der Seite auszublenden. Wenn es nicht klappt, liegt ein Problem vor und die Meldung ist für den Benutzer sichtbar.

Hier
wird erklärt wie man im Chrome bewußt JavaScript deaktiviert, damit man solche Fälle testen kann.

Eine Notice in HTML

<strong id="">Please activate/allow JavaScript</strong>


Vanilla-JS

setTimeout(function() {
document.getElementById('#noscript-marker').style.display = 'none';
}, 50);


JQuery (prüft auch mit ob JQuery geladen wurde)

setTimeout(function() {
$('#noscript-marker').hide();
}, 50);

Crucial BX500 2TB SATA SSD

Nach dem ich durch meinen neuen PC von einer 2TB SAS auf eine 2TB SATA HDD umgestiegen war, störten mich doch die Laufgeräusche sehr. DAs ist durch aus beachtlich da ich früher auch kein Problem mit 9GB Baracuda SCSI Festplatten hatte.. die 3,5 mit doppelter Bauhöhe.
Aber man wird älter und stört sich daran, wenn man die Festplatte beim Anlaufen hört.

bbcode-image


Die Crucial BX500 2TB ist ist relativ günstig. Aber man liest sehr viel negatives in den Kommentaren. Meine Benchmarks zeigen jetzt auch keine Werte wo man aus dem kleinen Haus wäre, aber als Ersatz für eine einfache Daten-Festplatte mehr als gut.

Das Kopieren der Daten von der HDD auf die SSD lief fast durchgehend konstant mit 200MB/s. Normales arbeiten mit PHPStorm läuft auch gut. Selbst das Project mit Shopware 5 und den paar wenigen Plugins lädt schnell genug. Am Ende fühlt sich einfach alles mehr "responsive" an.

bbcode-image
Für das 20 Jahre alte Gehäuse erstmal ein Adapter drucken...


bbcode-image


Die HDD wandert nun ins NAS.


Benchmark: Xeon E5-2658 v3

Ich habe meinen "neuen" PC von einem Xeon E5-2620 v3 auf ein Xeon E5-2658 v3 aufgerüstet. Nun habe ich wieder 12C/24T und das bei einem geringeren Stromverbrauch als mit 2x L5639. Auch nähere ich mich dem Leistungsniveau des Ryzen 7 1700X an. Mal sehen ob mir noch mal eine schnellere CPU der v3 oder v4 Serie irgendwann leiste.

bbcode-image
QS deswegen als Genuine Intel CPU bezeichnet


Zusätzlich fiel mir auch auf, wie viel Stromsparender die CPU im Vergleich zu meinen beiden L5639 ist, ob diese ja schon als L gekennzeichnet sind. Während beide Xeon im Idle nur auf je 25W runtergehen, geht der E5 auf fast 10W runter und bleibt auch insgesamt viel kühler.

Tonie Figuren

Wer mal mit den Tonie-Figuren zu tun hat, wird sich schnell fragen, ob die sich genau so gut kopieren lassen wie Nintendo Amiibos oder Amiibo-Karten. Antwort... es ist alles etwas anders und der Massenspeicher ist eine einfache SD-Karte.

Hier kann man mehr zu dem Thema erfahren.

bbcode-image

Older posts:

Möchtest Du AdSense-Werbung erlauben und mir damit helfen die laufenden Kosten des Blogs tragen zu können?