Blog: Latest Entries (15):


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


Ender 3: Spulenhalterung mit Kugellagern

Wer mal gesehen hat, wie viel Kraft der Einzugsmotor braucht, um etwas Filament von der Spule abzurollen, gerade wenn etwas Dreck sich abgelagert hat, wird sich gedacht haben: Warum nichts wo es einfach leicht geht.. also eine stink normale und passende Halterung, wie man sie sonst so kennt.

Hier gibt es eine, die ich mir dann auch ausgedruckt habe.

bbcode-image


Nun rollt die Spule geschmeidig, ruhig und leise sich ab und der Motor muss nicht mehr groß dran ziehen. Außerdem verdreckt kaum noch etwas dabei.

bbcode-image


API Platform: Workflows und Resourcen erweitern

In den wenigsten Fällen, nutzt meine REST-API für einfache CRUD-Operationen. Oft muss man auf die Operationen auch reagieren. Z.B. will man, wenn eine neue Bestellung angelegt wird, auch eine Lager-Reservierung oder einen Export an das ERP anstoßen. Oder man hat Felder die übersetzt werden müssen. Auch will man bei bestimmten Resourcen wie Artikeln noch Metriken mitgeben, wie oft er verkauft wurde und ob er damit zu einem Top-Seller wird.

Für diese Anwendungsfälle stellt API Platform zwei verschiedene Konzepte zur Verfügung.

Data-Provider/Data-Persister
Wenn man wirklich Daten an der Resource ändern möchte, ist das hier der richtige Weg. Man greift hier direkt in die Persistierung ein. Der Data-Provider ist für das Laden und der Data-Persister, wie der Name schon sagt, für das Speichern zuständig. Damit man nicht die gesamte Grundlogik jedes Mal neu schreiben muss, kann man hier die vorhandenen Services dekorieren und den Ursprünglichen Service als Parent per Injektion mit rein reichen. Also klassisches Symfony. Wenn nun also Custom-Fields oder eine Sprache in der übergebenen Resource (in transient Fields) definiert sind, kann man die im Persister sich heraus picken und selber sich um die Speicherung
kümmern. Im Provider eben das selbe nur anders herum.

Nun kann man sich denken: "Ich will den Artikel mit seinen Änderungen gerne in einem ElasticSearch-Index haben, damit die Suche auch gleich aktuell ist." Aber dafür ist das der falsche Weg.

Events
Wie in Shopware sind hier Events der richtige Weg. Man greift dabei nicht in den Peristierungsvorgang ein und es kann weniger schief laufen. Jeder Subscriber arbeitet unabhängig und wenn einer fehlschlägt, sind die anderen Subscriber nicht eingeschränkt. Gerade bei den POST_WRITE-Events erhält man eine Kopie der Resource und sollte diese nicht ändern. Falls irgendwie der Entity-Manager in Zusammenhang mit der Resource verwendet wird.. sollte man zu den Persistern wechseln. Events nutzen nur die Daten und Ändern sie nicht. XML-Exports, Emails, Metriken... genau hier sind Events die ideale Lösung.

Wie in Shopware!

IR-Kamera DIY

Ich hatte bei einer USB-Kamera mit M12-Objektiv ja den IR-Sperrfilter vom Objektiv entfernt, um ein scharfes Bild zu bekommen. Dadurch hatte ich zwar Falschfarben im Bild, aber erst so wurde die Kamera brauchbar.

Nun habe ich mal getestet wie sich die Kamera zusammen mit einem IR72 Filter verhält. Also so zusagen als reine IR-Kamera. Das Bild ist erstaunlich gut und sollte in voller 720p Auflösung nochmal sehr viel besser sein.

bbcode-image


Man kann sich also relativ günstig eine IR-Kamera für verschiedene Zwecke bauen.

Ender 3: Under-Extrusion, Klick, Klack.. Knubbel

Wenn der Druck so aussieht, dann kommt zu wenig Filament aus der Nozzle. Zu wenig ist noch schlechter als zu viel, was man Over-Extrusion nennt.

bbcode-image


Dazu kommt ein Klicken oder Klacken, wenn der Motor versucht mehr Filament nachzuschieben und es nicht geht. Der Motor springt wieder zurück und oft rutscht wieder ein bisschen Filament zurück aus dem Schlauch. Wenn jetzt nicht das Filament schlecht aufgewickelt ist auf der Spule oder sogar sich verhakt hat, dann liegt es vielleicht an einer verstopften Nozzle.

Bei mir war es jeden Falls so und die Ersatz-Nozzle hat geholfen, da solche Nozzles auch so gut wie nichts kosten, ist das säubern in härteren Fällen auch überflüssig. Jetzt läuft der Druck wieder normal und Oberflächen sind auch wieder geschlossen und nicht löchrig.

bbcode-image


Nun geht es darum das Abrollen des Filaments zu verbessern. Dieses Plastik auf Plastik halte ich für zu schwer gängig... ist mein Gefühl. Wenn dann alles gut läufig, wäre eine Kamera (kleine IP-Kamera) zum Überwachen des Drucks noch sehr schön.

Older posts:

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