tag:blogger.com,1999:blog-47229055796990859602024-03-13T17:34:02.041+01:00ProgrammingPrivater Blog: Performance, Load, Robustness, ProgrammingMirko Eberthttp://www.blogger.com/profile/14029003405055594429noreply@blogger.comBlogger243125tag:blogger.com,1999:blog-4722905579699085960.post-41350107258515706062024-01-04T12:26:00.002+01:002024-01-10T08:45:16.917+01:00Erfahrungen mit einem Linux Laptop Aura von Tuxedo<h3 style="text-align: left;">Motivation</h3><p>Seit ueber 15 Jahren benutze ich Macbook Pros. Brilliante Laptops mit gut funktionierender Software, OS und einem Paketmanager. Ein Premium-Produkt zu einem Premium-Preis Seit mehreren Jahren bin ich sehr frustriert, die Qualitaet sowohl der Hardware als auch des OS wurden immer schlechter. Am meisten stoerten mich die defekten Keyboards (und es gab da noch andere Probleme, Display, Akku, Ladegeraete, Camera, Controller, fehlschlagende OS Upgrades) und die immer fragwuerdiger werden OS Features. Es wurdeZeit etwas Neues zu probieren. Also auf gehts, Linux heisst der Kandidat. Mal wieder.<br /></p><p> Mein Linux Laptop ist ein Tuxedo Aura 15 Gen 1. Die Aura Serie ist die guenstigste Serie von Tuxedo. Der Preis lag unter 1T Euro also kein Premium-Geraet.<br /></p><p>Hardware Details: </p><ol style="text-align: left;"><li>AMD Ryzen 7 4700U, Mobile CPU mit 8 Kernen und Boost<br /></li><li>16 GB RAM</li></ol><p>Als OS benutze ich das Standard Tuxedo OS 2. Dabei handelt es sich um ein Ubuntu 22 mit KDE, Plasma, dem Tuxedo Control Center und einigen Design Anpassungen, alles sehr nett.</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheugdpvhSM_P-ZMbXkvcS7m6ov1i5PS5Q9R4BhpsyjNoqr2kEApEvGBtbV0T-2fQrjbMlKjD8sMu0jSsgpXosutruRugHE-bF07YsYKkUZwjqSipn9QwUpK6e6cc55rXFQEvHr9HRBbKVzOJmGUg1CIMJx-pA-qREvmV8x95sEFeIqXER1XeJkpQ2KVgTK/s1920/Screenshot_20240103_231453.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1080" data-original-width="1920" height="225" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheugdpvhSM_P-ZMbXkvcS7m6ov1i5PS5Q9R4BhpsyjNoqr2kEApEvGBtbV0T-2fQrjbMlKjD8sMu0jSsgpXosutruRugHE-bF07YsYKkUZwjqSipn9QwUpK6e6cc55rXFQEvHr9HRBbKVzOJmGUg1CIMJx-pA-qREvmV8x95sEFeIqXER1XeJkpQ2KVgTK/w400-h225/Screenshot_20240103_231453.png" width="400" /></a></div><br /><p>Meine Erfahrungen nach einem halben Jahr intensiver Nutzung.</p><p>Positiv:</p><ol style="text-align: left;"><li>Das Meiste funktioniert gut, nicht perfekt aber gut.</li><li>Tastatur funktioniert gut, im Gegensatz zu Tastaturen bei diversen Apple Macbook Pros</li><li>Akku kann ueber den mitgelieferten Charger oder USB-C geladen werden, alte Macbbok Netzteile funktionieren. Die Kapazitaet ist nicht ueberragend aber gerade noch OK.</li><li>Schnelle Versorgung mit Software Updates, Ubuntu sei Dank.</li><li>Gutes WIFI 6, schnell und stabil<br /></li><li>Bluetooth: stabiler Verbindungsaufbau<br /></li><li>Ausreichend Rechenpower</li><li>Gute Lueftersteuerung, viel besser als auf meinem Lenovo mit Windows.</li><li>Die Kamera ist nur OK, 1280*720, besser als die im Lenovo aber schlechter als die eines MacBook Pro.</li><li>Tux-Taste - meine Frau findet sie niedlich.</li><li>Touchpad is gut.</li><li>SD Card Slot, HDMI Port, Ethernet Port, ausreichend USB-A Schnittstellen. <br /></li><li>Modularer Aufbau, interne Komponenten koennen getauscht werden.</li><li>Tuxedo stellt Ersatzteile bereit.</li><li>Tuxedo Support<br /> </li></ol><p>Negativ:</p><ol style="text-align: left;"><li>Der Ton aus den Stereo Lautspraechern ist fruehe 90er</li><li>Die Farben und die maximal Helligkeit des Display sind so lala, bei der Softwarentwicklung ist das kein Problem.</li><li>Der Akku hat nach einem halben Jahr nur ein Heath-Wert von 74%, das ist miess. Einer der Gruende koennte sein, dass das optimierte Laden im Bios nicht aktiviert war. Tuxedo hat mit dem neuen Control Center hier wohl nachgebsssert.</li><li>Bluetooth fuehrt manchmal zu Problemen beim Aufwachen.</li><li>Luefter wenn sie voll laufen, was selten ist, sind dann laut.</li><li>Die Tasttaturbeleuchtung vergisst machmal die Einstellungen.</li><li>Dis Tastatur hat keine abgesetzten Pfeiltasten. Man kann die Pfeiltasten nicht greifen ohne auf die Tastatur zu schauen.</li><li>Ein Fingerprint Sensor ist vorhanden wird aber nicht unterstuetzt<br /></li><li>Bruch in der Body Oberschale, weil eine Schraube sich auf der Unterseite geloest hatte.</li><li>Nur eine USB-C Schnittstelle.<br /></li></ol><h3 style="text-align: left;">Fazit:</h3><p>Der Tuxedo Aura 15 Gen 1 ist eine gutes Arbeitstier mit einem gut funktionierenden Linux Desktop zu einem guten Preis aber mit ein paar Macken und Maengeln. Teilweise gehen sie (Display) auf den guenstigen Preis zurueck. Ist er besser als mein Lenovo, ja, ist es besser als ein MacBook Pro, nein, wuerde ich mir wieder einen Tuxedo Aura kaufen, wahrscheinlich. Das Gesamtpaket aus preiswerter und solider Harware, Software und Preis sind durchaus gut. Vor allem wuensche ich mir ein verbessertes Tatstatur-Layout fuer die Pfeiltasten und bessere Lautsprecher. Ein bisschen erinnert mich der Tuxedo Aura an die Polycarbonat MacBooks.<br /></p><p><br /></p>Mirko Eberthttp://www.blogger.com/profile/14029003405055594429noreply@blogger.com0tag:blogger.com,1999:blog-4722905579699085960.post-79226817515540741102023-12-22T11:26:00.001+01:002024-01-04T12:51:01.714+01:00Low Level IT Sicherheit fürs Handy<p> </p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHEV4cAwrn97RWMhyphenhyphenYx0dAMWMJqCq5MpPzUdHzOIUZo9SvzNR5Y_zfvdBGtOV-HkZsCQtuBjPU3sx1DwkHKQA1HCoIHXmxlTuksg6y1UYkv-gH-gd7gkXv0HjdI1Vcj7GNszG-sFgF_xhVPatAGc0eMki6ZFa_vOUDDrz3eyazlDq2WeMUx97EFvwcfZUW/s1600/adapter.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1200" data-original-width="1600" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHEV4cAwrn97RWMhyphenhyphenYx0dAMWMJqCq5MpPzUdHzOIUZo9SvzNR5Y_zfvdBGtOV-HkZsCQtuBjPU3sx1DwkHKQA1HCoIHXmxlTuksg6y1UYkv-gH-gd7gkXv0HjdI1Vcj7GNszG-sFgF_xhVPatAGc0eMki6ZFa_vOUDDrz3eyazlDq2WeMUx97EFvwcfZUW/s320/adapter.jpg" width="320" /></a></div>Diese kleinen USB-Adapter, hier die von Porta Pow, schützen dich und dein Handy vor Angriffen beim Laden. Die Ladebuchse ist ein von Benutzer unterschätztes Einfallstor. So kann man sein Handy auch an unsicheren Orten sicher Laden. Das Laden des Handies ist möglich, Datenübertragung aber nicht.<p></p><p>Die Ladegeschwindigkeit sinkt auf den Normalwert, d.h. schnelles Laden ist nicht möglich.<br /></p>Mirko Eberthttp://www.blogger.com/profile/14029003405055594429noreply@blogger.com0tag:blogger.com,1999:blog-4722905579699085960.post-79186459065004354612023-09-13T22:23:00.010+02:002023-09-13T22:23:00.139+02:00JMeter never gets old<p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://raw.githubusercontent.com/jmeter-maven-plugin/jmeter-maven-plugin/master/images/full_logo.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="336" data-original-width="800" height="168" src="https://raw.githubusercontent.com/jmeter-maven-plugin/jmeter-maven-plugin/master/images/full_logo.png" width="400" /></a></div><br /> <p></p><p> Now it's much simpler to run system test or load and performance test. You can integrate the good old JMeter into Maven and run the test in the build pipeline. Great.</p><p>Biggest advantage: You don't a JMeter installation. JMeter is loaded and run as Maven plugin.<br /></p><p> </p><p>Look at the <a href="https://github.com/jmeter-maven-plugin/jmeter-maven-plugin">https://github.com/jmeter-maven-plugin/jmeter-maven-plugin</a></p><p><br /></p><p><br /><br /></p>Mirko Eberthttp://www.blogger.com/profile/14029003405055594429noreply@blogger.com0tag:blogger.com,1999:blog-4722905579699085960.post-4811388787129015902023-06-20T15:54:00.005+02:002023-06-21T20:11:06.799+02:00The outcome of tech debt.<blockquote class="twitter-tweet"><p dir="ltr" lang="en">Software Bugs are the result of tech debt.</p>— Mirko Ebert (@mirkoebert) <a href="https://twitter.com/mirkoebert/status/1671052066133876737?ref_src=twsrc%5Etfw">June 20, 2023</a></blockquote><p> </p><p>Es gibt zwei Gründ für Software Bugs</p><ol style="text-align: left;"><li>Tech debt</li><li>Komplexität <br /></li></ol><p>Komplexität ist auch nur eine Form von Tech debt. Baue technische Schulden ab sonst errecihst den Softwarestand wo die ganze Entwicklerkapazität für das Fire Fighting aufgezerrt wird und es keine Resourcen für die Weiterentwicklung gibt. Dann ist die Software tot. <br /></p><p>Technische Schulden sind ein oder sogar der Grund für Fehler. <br /></p> <script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script> Mirko Eberthttp://www.blogger.com/profile/14029003405055594429noreply@blogger.com0tag:blogger.com,1999:blog-4722905579699085960.post-61877605256552950732023-05-07T13:24:00.003+02:002023-05-07T13:26:19.385+02:00ChatGPT ist keine kuenstliche Intelligenz (KI)<p>ChatGPT ist keine kuenstliche Intelligenz sondern eine praechtiges Beispiel fuer maschine learning und Computer Linguistik. Jedem Informatiker ist das klar.</p><p> </p><p>Um das zu illustrieren, hier ein lustiger Chat mit ChatGPT. Der Chat ist nicht von mir, er wurde mir aus vertrauenswuerdiger Quelle zugeschickt und hat sich Anfang Mai 2023 ereignet. </p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxlrDA2Kw5oGq41CJexWSZcp2uMYnhgMcmL8U5pTAOrYEihz8KPqtHb2VrAxWzopun_uePlvimm2omauUQP_AwsMUlxR5YSgSsTBOTYFRoW1dGf9JZdq8kAA18rmGVvV-3kwTb3GTo1GwA8hkX1oxDeCOW3jQPqnCIH0CcbYfgbY_oc-uY5Mem7RPQsQ/s3072/queen1.jpeg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1920" data-original-width="3072" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxlrDA2Kw5oGq41CJexWSZcp2uMYnhgMcmL8U5pTAOrYEihz8KPqtHb2VrAxWzopun_uePlvimm2omauUQP_AwsMUlxR5YSgSsTBOTYFRoW1dGf9JZdq8kAA18rmGVvV-3kwTb3GTo1GwA8hkX1oxDeCOW3jQPqnCIH0CcbYfgbY_oc-uY5Mem7RPQsQ/w640-h400/queen1.jpeg" width="640" /></a></div><br /><p>Und weiter gehts.</p><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCrH7BR3yKEAm4nhNL5moPGun7tgOye4XAXHiMoRGmqJsvDphjirIbXOfhRWW2YkZOQElFok6QJW68AbbkZIR_BK9p1MzWL2AC1I0-fB17-mGeEnpmISyhzQuMd6UeFsvFYyr5aSe-L-8P150TleJTM4sB_jo81U0TZ9f9PkXCK4wq84-dAl-v_-CrqA/s3072/queen2.jpeg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1920" data-original-width="3072" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCrH7BR3yKEAm4nhNL5moPGun7tgOye4XAXHiMoRGmqJsvDphjirIbXOfhRWW2YkZOQElFok6QJW68AbbkZIR_BK9p1MzWL2AC1I0-fB17-mGeEnpmISyhzQuMd6UeFsvFYyr5aSe-L-8P150TleJTM4sB_jo81U0TZ9f9PkXCK4wq84-dAl-v_-CrqA/s320/queen2.jpeg" width="320" /></a></div><br /><p>Und zu guter letzt.</p><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKEsZ9UKy03H0QePglRCUrfj2CYve0oJhVeHVI5pYlstsgwoHzm806j9asEmV0zfRxQywyOJKYEfRJVcusGk_0uTCpP45N0zqBY00Z_OX0HtQJ0_6zqQ5DTKsxKygaaER1sjtSEcsdCnBVWmzcKOzJTWJa6P2T3hzNaxg8em_3rOAOvj84Q17w3M5tYw/s3072/queen3.jpeg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1920" data-original-width="3072" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKEsZ9UKy03H0QePglRCUrfj2CYve0oJhVeHVI5pYlstsgwoHzm806j9asEmV0zfRxQywyOJKYEfRJVcusGk_0uTCpP45N0zqBY00Z_OX0HtQJ0_6zqQ5DTKsxKygaaER1sjtSEcsdCnBVWmzcKOzJTWJa6P2T3hzNaxg8em_3rOAOvj84Q17w3M5tYw/s320/queen3.jpeg" width="320" /></a></div><br /><p>Wer jetzt ChatGPT fuer intelligent haelt, tja dann weiss ich auch nicht mehr.<br /></p>Mirko Eberthttp://www.blogger.com/profile/14029003405055594429noreply@blogger.com0tag:blogger.com,1999:blog-4722905579699085960.post-28397263749629187282023-02-02T21:16:00.004+01:002023-02-09T10:37:41.158+01:00Managing Dependencies for Micro Services<p>Dependency Hell, das kennen viele Softwareentwickler oft aus <b>mature</b> Projekten. Was bedeutet das fuers Projekt?</p><ol style="text-align: left;"><li>Es kann nicht auf aktuelle Versionen von Libs migriert werden, Java eingeschlossen. Dadurch bleiben nuetzliche Funktionen verschlossen.</li><li>Das Projekt ist statisch wie Beton und nur unter sehr grossem Zeitauswand aenderbar.</li><li>CVEs koennen nicht behoben werden.</li></ol><p>Um Dependencies effiktiv zum meisten und obige Schwaechen zu umschiffen, hier ein paar Best Pracices im Umgang mit Dependencies.</p><ol style="text-align: left;"><li>Goldene Regeln</li><ol><li>Less is more</li><li>Convention over configuration<br /></li></ol><li>Versuche mit moeglichst wenig Konfigurationen auszukommen.</li><li>Versiuche moeglichst wenig Dependencies zu benutzen. <br /></li><li>Benutze <i>Parents</i> wenn moeglich.</li><li> Benutze Dependeny Management (Maven) wenn es moeglich ist.<br /></li><li>Benutze nur fixe Versionen von Libs wenn sie nicht im Parent verfuegbar sind.</li><li>Wenn du Excludes/Includes brauchst z.B. um CVEs zu fixen, dann hinterlasse einen entsprechenden Kommentar mit der CVE Nummer. So kann diese Konfiguration spaeter sehr einfach entfernt werden.</li><li>Update regelmaessig deine Dependencies um keinen Wartungsstau aufkommen zu lassen. Du kannst leicht einen Check Step in der Build Pipeline einbauen die dir Anzahl der outdated Libs ausgibt.</li><li>Aktuelle Libs verbessern die Sicherheit, aktuelle Libs haben weniger CVEs. </li><li>Pruefe ob Dependencies noch benutzt werden</li><ol><li>Grep isy dein Freunf fuer Compile Scope Dependencies: <span style="font-family: courier;">grep -r com.strange-package src/</span></li><li>Organize your imports<br /></li></ol><li>Das Build file ist genauso ein Teil deines Softwareprojetes wie der Code selbst.</li></ol><p> </p>Mirko Eberthttp://www.blogger.com/profile/14029003405055594429noreply@blogger.com0tag:blogger.com,1999:blog-4722905579699085960.post-52889758972605396232023-01-03T17:53:00.000+01:002023-01-03T17:53:12.017+01:00Model Driven Architecture ist tot<p> Model Driven Architecture (MDA) und alle Verwandte sind seit den fruehen 2000er tot. Trotz viel Energie, Enthusiasmus, Zeit und Geld die in MDA Projekte geflossen sind, gibt es zwei Erkenntnisse: MDA ist sicher tot und UML ist sinnvoll zur Beschreibung von Software-Konzepten.</p><p>Weil es scheinbar zu wenige Senior Software Developer gibt, gibt es Heute MDA Zombies. MDA ist von den Toten auferstanden in Form der Generierung von Klasssen aus YAML Schnittstellenbeschreibungen die dann z.B. über Micro Services geteilt werden.</p><p>Bei genauerem Hinsehen sieht man, dass dieser Ansatz auch nicht funktioniert. Er hat folgende Nachteile:</p><ol style="text-align: left;"><li>Aenderungen an der Schnittstelle fuehren zu aufwendigen Abstimmungsprozessen die multiple Teams, oft das ganze Projekt, einbeziehen. Das ist sehr, sehr teuer.</li><li>Kein Team ist in der Verantwortung, shared whatever sind gut Beispiele fuer Verantwortungsdiffusion. <br /></li><li>Selbst wenn ein Team Zeit fuer die Wartung aufwenden moechte, so werden die Kommunikationskosten zur Aufgabe fuehren.</li><li>Weil sich die Softwareanforderungen aendern die
Schnittstelle aber in Beton gegossen ist, fangen die Entwicklerteams an
der 'offizielle' Schnittstelle vorbei zu arbeiten. Sie haben gar keinen
anderen Weg. <br /></li></ol><p>Was lernen wir daraus:</p><ol style="text-align: left;"><li>MDA in allen Varianten ist teuer und ineffizient.</li><li>MDA ist das Gegenteil von agiler Softwareentwicklung .<br /></li><li>Share Nothing ist und bleibt eine Grundlage fuer agile Softwareentwicklung</li><li>Die Entwicklung von (shared) Bibliotheken ist deutlich anders zur Entwicklung normaler Micro Services.<br /></li></ol>Mirko Eberthttp://www.blogger.com/profile/14029003405055594429noreply@blogger.com0tag:blogger.com,1999:blog-4722905579699085960.post-54806703162581072362022-12-15T21:51:00.001+01:002022-12-15T21:52:35.866+01:00Golf: Clubmeister im Team 2022<p>Dieses Jahr haben wir die Dominaz der <b>guten</b> Teams gebrochen. Und wir, die Aussemseiter haben es geschaft, mit weitem Abstand.</p><p><br /></p><p style="text-align: center;"><b>Clubmeister mit dem Team 2022</b></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbWJz3vB15rlQXYhID0k3WRBRz8mZA-vRfBh8X1t7f6gqA4ZaKF2WkD4Vnl0TLQJjXF7VlFxsIAQqOGl3slAh0issknHT5Kbe5CW_uemY7LozWAaw2xeTtc55yyQKVL6NcBQKc6YUzNJQf-hK1xq6JaGB9KeRg8flVKyGRtxmnn-9PTfS2p5M5My5-Sw/s2016/team-cup.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="2016" data-original-width="1512" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbWJz3vB15rlQXYhID0k3WRBRz8mZA-vRfBh8X1t7f6gqA4ZaKF2WkD4Vnl0TLQJjXF7VlFxsIAQqOGl3slAh0issknHT5Kbe5CW_uemY7LozWAaw2xeTtc55yyQKVL6NcBQKc6YUzNJQf-hK1xq6JaGB9KeRg8flVKyGRtxmnn-9PTfS2p5M5My5-Sw/s320/team-cup.jpg" width="240" /></a></div><br /><p><br /></p><p><a href="https://golfclub-fischland.de/">https://golfclub-fischland.de/</a></p><p><br /></p>Mirko Eberthttp://www.blogger.com/profile/14029003405055594429noreply@blogger.com0tag:blogger.com,1999:blog-4722905579699085960.post-55519310551586003062022-09-22T21:16:00.006+02:002022-09-22T21:19:59.196+02:00Versenden von E-Mails via CURL<p> </p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZO2RFDx6hXFnoS78lgUuPtt5TlNlirQup4EvAWfTxRwM3H0RvqOyQ8tKJHMhHcscURD0xxBbW9LUM8jMCJchKsOJipP6gr7A254IE9NIeIXJK7fc8IxNFvU-rd4EBGa8ltzi5Wvt2-B2bOMAx-NzrhWaY5yTyXj7AZXGjRxu-RATtONt6kSfO1ozRWA/s4032/IMG_2122.jpeg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3024" data-original-width="4032" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZO2RFDx6hXFnoS78lgUuPtt5TlNlirQup4EvAWfTxRwM3H0RvqOyQ8tKJHMhHcscURD0xxBbW9LUM8jMCJchKsOJipP6gr7A254IE9NIeIXJK7fc8IxNFvU-rd4EBGa8ltzi5Wvt2-B2bOMAx-NzrhWaY5yTyXj7AZXGjRxu-RATtONt6kSfO1ozRWA/s320/IMG_2122.jpeg" width="320" /></a></div><p>Ich war erstaunt wie universell CURL doch ist. Hier ein Beispiel zum Versenden von Emails.</p><p><span style="font-family: monospace;"><span style="background-color: white; color: black;">from="service.accout.1@xyz.com"</span></span><span style="font-family: monospace;"><span style="background-color: white; color: black;"> </span></span></p><p><span style="font-family: monospace;"><span style="background-color: white; color: black;">mail_template_text="Hello!\n</span>"</span></p><p><span style="font-family: monospace;"> </span><span style="font-family: monospace;"><span style="background-color: white; color: black;"> </span><br /></span><span style="font-family: monospace;"><span style="background-color: white; color: black;">file=$(echo -e "From: $from\nTo: mirko@xyz.com\nSubject: Dringend\n\n $mail_template_text\n")
</span><br /><br />
<br />curl --url "smtp://mail.xyz.com:587" \
<br />--mail-from "$from" \
<br />--mail-rcpt "mirko@xyz.com" \
<br />--mail-rcpt "mirko.ebert@xyz.com" \
<br />--mail-rcpt "other.guy@xyz.com" \
<br />--user "$from:smtpPassword" \
<br />-sS \
<br />-T - <<<"$file"</span></p><p><span style="font-family: monospace;"><br /></span></p><p>Zuerst wird ein String für die Email zusammengebaut. Dann wird dieser String per CURL an mehrere Empfänger verschickt. <br /></p><p></p>Mirko Eberthttp://www.blogger.com/profile/14029003405055594429noreply@blogger.com0tag:blogger.com,1999:blog-4722905579699085960.post-65735555156937372732022-07-27T20:02:00.002+02:002022-08-20T12:27:04.876+02:00Der Big Mac Index für die Company IT.<p>Ich denke Einigen ist der Big Mac Index als Indikator für die Kaufkraft in verschiedenen Ländern. ein Begriff. Sicher dieser Wert ist nicht perfkt aber er ist sehr einfach zu ermitteln und ist sehr aussagekräftig. </p><p>Einen ähnlichen Indikator oder Index habe ich für die Effiziens der Firmen IT gefunden - Wenn ich als externer Mitarbeiter bei einer neuen Firma anfange, wie lange dauert es in Tagen, bis ich voll einsatzbereit bin, d.h. bis mein Computer voll funktioniert und alle Zugänge funktionieren so dass ich den ersten Code commiten könnte.<br /></p><ul style="text-align: left;"><li>Der bisher beste Wert liegt bei <b>0,5</b> Tagen. </li><li>Der Durchschnitt liegt bei 2-3 Tagen.</li><li>Der whorts case liegt bei 7,5 Tagen (Arbeitstagen). <br /></li></ul><p> Was sind eure Erfahrungen? Hinterlasst bitte einen Kommentar.</p><p><br /></p><p>Noch einb Anmerkung, der beste Wert, dort wurde das Onboarding durch das Entwicklerteam komplett organisiert. Der Worst Case Fall, dort gab es eine sehr stark zentralisierte IT. Zentralisierte IT ist ineffizient im Vergleich zu selbst organisierten Teams.<br /></p>Mirko Eberthttp://www.blogger.com/profile/14029003405055594429noreply@blogger.com0tag:blogger.com,1999:blog-4722905579699085960.post-13389662228069976592022-03-15T08:44:00.007+01:002022-03-15T08:44:59.308+01:00Pi Day<p> Es ist wieder Pi Day, der 14.3. oder im amerikanischen auch 3-14. Lasst es euch schmecken!<br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEinyIHqLO4jvbtBQfAxLGHqAZkTRBFkmix2TlQtrDZmVz5dohQcoQ-DyUwUmhdBxQeFuGESSQDY5IbbwW_FMILY7iyY5f89o7NS8iy2ZMoIwrJD2QGLWfE8ez-QTyb60JLA5aBUTr_uqIHbRcMTszn4RVMyDKep6gUU64NbBa_OMC5CL1FiLzSqG2Odww=s4032" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3024" data-original-width="4032" height="300" src="https://blogger.googleusercontent.com/img/a/AVvXsEinyIHqLO4jvbtBQfAxLGHqAZkTRBFkmix2TlQtrDZmVz5dohQcoQ-DyUwUmhdBxQeFuGESSQDY5IbbwW_FMILY7iyY5f89o7NS8iy2ZMoIwrJD2QGLWfE8ez-QTyb60JLA5aBUTr_uqIHbRcMTszn4RVMyDKep6gUU64NbBa_OMC5CL1FiLzSqG2Odww=w400-h300" width="400" /></a></div><br /><p><br /></p>Mirko Eberthttp://www.blogger.com/profile/14029003405055594429noreply@blogger.com0tag:blogger.com,1999:blog-4722905579699085960.post-71542975827655343862021-10-21T20:30:00.005+02:002021-10-21T20:30:00.247+02:00Digital Self Defence Pi-hole ein schwarzes Loch für Werbung und Tracker<p>Digital Selfdefence ist nicht nur ein neuer Trend, eigentlich gibt dieses Thema schon sein vielen Jahren. Heute, hier: das Pi-hole - das schwarze Loch unter den Werbeblockern.<br /></p><p>Werbeblocker für den Webbrowser gibt seit Jahren, neuerdings versuchen auch die Browser die Tracker und Werbcookies einzudämmen. Aber nicht nur die normalen Webbroser senden diese Spione, nein auch Betriebssysteme wie MacOSX, iOS, Adroid, Office, ... Fernseher, Soundbars, ... senden ungefragt deine Daten in die Welt. Wer dies nicht mehr möchte, dem sei das <a href="https://pi-hole.net/" target="_blank">Pi-hole</a> empfohlen. Das ist eine kleine Software die als Nameserver Proxy arbeitet und dadurch alle unliebsammen Tracker daran hindert meine Daten in die Welt zu verschicken.</p><p>Pi-hole kann z.B einfach auf einem Raspberry Pi installiert werden und dann ins Netzwerk integrieren. Einmal installiert braucht man sich nicht mehr darum kümmern. Der interessierte Nutzer kann die Pi-hole Logs benutzen und sich auf die Suche nach den Quellen machen und diese dann eleminieren.<br /></p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-14vWtcX9ij4/YXEMXa8cWpI/AAAAAAAAA9w/R_mJkgGug5AVEV0z6agsTArAZcJ4uYodACLcBGAsYHQ/s2048/Screenshot%2B2021-10-21%2Bat%2B08.31.44.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1352" data-original-width="2048" height="422" src="https://1.bp.blogspot.com/-14vWtcX9ij4/YXEMXa8cWpI/AAAAAAAAA9w/R_mJkgGug5AVEV0z6agsTArAZcJ4uYodACLcBGAsYHQ/w640-h422/Screenshot%2B2021-10-21%2Bat%2B08.31.44.png" width="640" /></a></div><br /><p><br /></p>Mirko Eberthttp://www.blogger.com/profile/14029003405055594429noreply@blogger.com0tag:blogger.com,1999:blog-4722905579699085960.post-61383871956664910922021-04-19T18:38:00.004+02:002021-04-19T18:38:52.828+02:00Softwarearchitektur: Micro Service oder Monolith<p>Micro Service oder Monolith: Welches ist die besser Software Architektur?</p><p>Klarte Antwort, it depends.</p><p>Mirco Services sind seit ca. zehn Jahren die vorherrschende Software-Architektur, wenn es um Server-Anwendungen geht. Die meisten stellen sich nur die Frage, wie gross darf oder kann ein Micro Service sein. Aber gibt es Alternativen zu Micro Services? Ja und zwar mindesten zwei:</p><p></p><ol style="text-align: left;"><li>Serverless</li><li>Monolith</li></ol><div>Zum ersten Punkt der Serverless Architektur kommen wir später. Punkt 2 der Monolith gilt als überholt und wird mit der Softwarekrise in den 90er Jahren in Verbindung gebracht, nicht ganz zu unrecht, waren damals doch fast alle Softwareprodukte Monolithen.</div><div><br /></div><div>Seit den 90er hat sich allerdings einiges getan, wie Software entwickelt wurde. Agile Softwareentwicklung hat mehr oder weniger zu den Micro Services geführt. Ein grosser Vorteil der Micro Services war und ist, das man durchaus in der Lage ist die Softwareentwicklung horizontal, also mit der Anzahl der Entwicklerteams, zu skalieren. Aber offen gesagt, ist dies auch mit Monolithen möglich. Mit der aktuellen Technik, ein paar alten bewährten Software Regeln ist auch möglich Monolithen mit multiplen Teams parallel mit der selben Geschwindigkeit zu entwickeln wie Micro Services. Dazu benötigt man nur zwei Regeln:</div><div><ol style="text-align: left;"><li>Share Nothing</li><li>Dinge, die zusammengehören sind im selben Package</li></ol><div>Eine Anmerkung zu Punkt 2, das bedeutet nicht das ein Package mit Controller und eins mit Services und so weiter hat. Diese Packetierung ist falsch, das ist so als würde man die Pflanzen nach ihr Blütenfarbe klassifizieren. In einem Packet befindet sich Controller, Service, Model, Repository die zusammen einen Anwendungsfall implementieren. Pakete selbst sind unabhängig von einander und benutzen keine Klassen aus anderen Paketen. Und fertig ist der skalierbar programmierte Monolith.</div></div><div><br /></div><div><br /></div><div><br /></div><div>PS: Fehlende Buchstaben im Text sind verursacht durch Apples grandiosen Versuchen Tastaturen für MacBooks neu zu erfinden.</div><div><br /></div><div>PS 2: Die Paketierugsstrategie vieler Domain Driven Ansätze ist komplett falsch.</div><p></p>Mirko Eberthttp://www.blogger.com/profile/14029003405055594429noreply@blogger.com0tag:blogger.com,1999:blog-4722905579699085960.post-9611962511647136182021-03-14T11:50:00.004+01:002021-03-14T11:51:27.495+01:00Suchbild - Pi Day 2021<p> Wer findet Pi auf dem Kuchen?</p><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-ki5dpx4-Trc/YE3qSlJRfWI/AAAAAAAAA7Q/x7vVPdoqr7gR4Ocb4T2fihUYeji8zVxtQCLcBGAsYHQ/s2048/IMG_1035.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="2048" data-original-width="1536" height="640" src="https://1.bp.blogspot.com/-ki5dpx4-Trc/YE3qSlJRfWI/AAAAAAAAA7Q/x7vVPdoqr7gR4Ocb4T2fihUYeji8zVxtQCLcBGAsYHQ/w480-h640/IMG_1035.JPG" width="480" /></a></div><br /><p><br /></p>Mirko Eberthttp://www.blogger.com/profile/14029003405055594429noreply@blogger.com0tag:blogger.com,1999:blog-4722905579699085960.post-82668951597748572412020-11-02T21:00:00.003+01:002020-11-02T21:00:01.903+01:00Was ist Chaos Engineering?<p> <a href="https://1.bp.blogspot.com/-pT1nshiBWAo/X6AU2bqKOKI/AAAAAAAAA4Q/NW0FDx9By9w-ZHQELukKf6C_jXoam7mugCLcBGAsYHQ/s227/logo.png" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="227" data-original-width="225" src="https://1.bp.blogspot.com/-pT1nshiBWAo/X6AU2bqKOKI/AAAAAAAAA4Q/NW0FDx9By9w-ZHQELukKf6C_jXoam7mugCLcBGAsYHQ/s0/logo.png" /></a></p><br /><p><br /></p><p>Chaos Engineering ist ein Disziplin um Software zu Testen. Dabei wird das zu untersuchende Software System auf bekannte und unbekannte Fehler getestet. Das Ziel ist es, die Fehlertoleranz oder Robustheit von Software oder Software Systemen zu erhöhen und die Auswirkung von Fehlern zu begrenzen. Gesteht wir in der Regel das Produktionssystem oder äquivalente Produktions-ähnliche Systeme.</p><p><br /></p><h2>Geschichte</h2><p>Mit dem Aufkommen von verteilten Software-Systemen und anderen komplexen Micro-Service-Systemen war es notwendig, die Zuverlässigkeit dieser Systeme zu erhöhen. Das war die Geburtsstunde des Chaos Testens. Bekanntester Vorreiter war Netflix 2011. Das Chaos Testen ist ein Vorläufer des Chaos Engineerings. Bekanntester Vertreter ist der Chaos Monkey von Netflix. Parallel zu diesen Entwicklungen wurde seit 2013 auch in Deutschland Chaos Engineering eingesetzt (Otto Group).</p><p><br /></p><h2>Systeme</h2><p>Auswahl:</p><p></p><ol><li><a href="https://github.com/Netflix/chaosmonkey" target="_blank">Chaos Monkey</a></li><li><a href="https://github.com/shopify/toxiproxy" target="_blank">Toxi Proxy</a></li><li><a href="https://github.com/chaos-mesh/chaos-mesh" target="_blank">Chaos Mesh</a></li></ol><p></p><p><br /></p><h2>Literatur</h2><p></p><ol><li>Casey Rosenthal, Lorin Hochstein, Aaron Blohowiak, Nora Jones, Ali Basiri: <i>Chaos Engineering. Building Confidence in System Behavior through Experiments</i>, O’Reilly Media, Inc, 2017</li><li>Mikolaj Pawlikowski: <i>Chaos Engineering. Site reliability through controlled disruption</i>, Manning Publications, 2021 (angekündigt)</li><li>Laine Campbell, Charity Majors: <i>Database Reliability Engineering</i>, O’Reilly Media, 2107</li></ol><p></p><p><br /></p><h2>Links</h2><div><ol><li><a href="http://principlesofchaos.org/" target="_blank">Principles of Chaos Engineering</a></li><li><a href="https://www.google.com/patents/US20120072571" target="_blank">Validating the resiliency of networked applications</a></li><li><a href="http://blog.d2-si.fr/2015/12/08/architecture-cloud/ ">Infrastructure : quelles méthodes pour s'adapter aux nouvelles architectures Cloud</a></li><li><a href="https://medium.com/netflix-techblog/netflix-chaos-monkey-upgraded-1d679429be5d" target="_blank">Netflix Chaos Monkey Upgraded</a><br /></li><li><a href="https://venturebeat.com/2018/09/28/gremlin-raises-18-million-to-expand-failure-as-a-service-testing-platform/" target="_blank">Gremlin raises $18 million to expand 'failure-as-a-service' testing platform</a><br /></li><li><a href="https://mikro-on-software.blogspot.com">https://mikro-on-software.blogspot.com</a></li></ol></div><p><br /></p><p><br /></p>Mirko Eberthttp://www.blogger.com/profile/14029003405055594429noreply@blogger.com0tag:blogger.com,1999:blog-4722905579699085960.post-19316070399693716262020-08-18T19:51:00.002+02:002020-08-19T10:03:34.439+02:00Tools die auf keinem Mac von Softwareentwicklern fehlen sollten<p></p><ol style="text-align: left;"><li>brew</li><li>clamav</li><li>gpg</li><li>docker desktop</li><li>vim o. ä. </li><li>jq</li><li>yq</li></ol><div><a href="https://brew.sh" target="_blank">Brew</a> - der nicht vorhandenen Paketmanager, ohne ihn geht auf Mac keine Softwareentwicklung.</div><div>Installation im Terminal: <span style="font-family: courier;">/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"</span></div><div><br /></div><div><br /></div><div>ClamAV - Freier Viren- und Malware Scanner, ein Klassiker auf seinem Gebiet mit guter Erkennungsleistung. Am besten einfach einen CRON einrichten.</div><div><br /></div><div>GPG aka PGP der Standard, wenn es um Verschlüsselung geht.</div><div><br /></div><div>Docker Desktop - Docker ist Teil der meisten Backend-Projekte. Hier sollt man nicht den Docker von Brew verwenden, der bereitet nur Probleme. Stabiler ist die Alternative Docker Desktop.</div><div>Installation: <a href="https://hub.docker.com/editions/community/docker-ce-desktop-mac/">https://hub.docker.com/editions/community/docker-ce-desktop-mac/</a></div><div><br /></div><div>VIM - oder ein vergleichbarer reiner Texteditor ist Tipp für schnelles Arbeiten jenseits einer IDE.</div><div><br /></div><div>JQ - Json Query, ein Tool um schnell JSON Dateien zu prüfen oder zu parsen. JSON Nodes lassen sich einfach aus JSON Dokumente filtern. JQ beherrscht selber auch Pipelining. JQ ist quasi ein Art JSON grep.</div><div><br /></div><div>YQ - Yaml Query, analoges Tool zu JQ nur für YAML Dateien.</div><div><br /></div><p></p>Mirko Eberthttp://www.blogger.com/profile/14029003405055594429noreply@blogger.com0tag:blogger.com,1999:blog-4722905579699085960.post-19912512879118740642020-08-12T21:48:00.003+02:002020-11-08T12:09:52.831+01:00Welche Tools sollten auf keinem sicheren Mac fehlen.<p> </p><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-njHKVoqnoEs/X6fR50VjBpI/AAAAAAAAA4k/RgCbmPj9clge2-AJMlXQIV4ly7IMMMFZQCLcBGAsYHQ/s1986/Bildschirmfoto%2B2020-11-08%2Bum%2B12.09.01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="866" data-original-width="1986" height="175" src="https://1.bp.blogspot.com/-njHKVoqnoEs/X6fR50VjBpI/AAAAAAAAA4k/RgCbmPj9clge2-AJMlXQIV4ly7IMMMFZQCLcBGAsYHQ/w400-h175/Bildschirmfoto%2B2020-11-08%2Bum%2B12.09.01.png" width="400" /></a></div><br /><p></p><ol><li>ClamAV</li><li>GPG</li><li>Privacy Badger</li><li>TOR</li></ol><div><br /></div><div><b>ClamAV</b> - Freier Viren- und Malware Scanner, ein Klassiker auf seinem Gebiet mit guter Erkennungsleistung. ClamAV lässt sich sehr bequem per <span style="font-family: courier;">brew</span> installieren. Am Besten ClamAV regelmässig per CRON updaten und ausführen.</div><div><div><br /></div><div><span style="font-family: courier; font-size: x-small;">2 12 * * * /usr/local/bin/freshclam --log=/Users/</span><span style="font-family: courier; font-size: small;">avaragejoe</span><span style="font-family: courier; font-size: x-small;">/logs/clam.log</span></div><div><span style="font-family: courier; font-size: x-small;">17 12 * * * /usr/local/bin/clamscan -i --log=/Users/</span><span style="font-family: courier; font-size: small;">avaragejoe</span><span style="font-family: courier; font-size: x-small;">/logs/clam.log -r ~/Downloads</span></div><div><span style="font-family: courier; font-size: x-small;">47 12 * * * /usr/local/bin/clamscan -i --log=/Users/avaragejoe/logs/clam.log -r ~/Desktop</span></div></div><div><br /></div><div><br /></div><div><br /></div><div><b>GPG</b> aka PGP der Standard, wenn es um Verschlüsselung geht. GPG verschlüsselte Na hrihteno können nicht mitgelesen werden, auch nicht von Regierungen.</div><div><br /></div><div style="text-align: left;"><b>Privacy Badger</b> ist ein Browser Plugin der <a href="https://www.eff.org/de" target="_blank">EFF</a> der Web Tracking unterbindet. Das Plugin gibt es für Firefox, Edge, Opera und Chrome. Bei TOR ist er standardmässig mit dabei.</div><div><br /></div><div><b>TOR</b> - der sichere Browser für alle denen der Privacy Badger alleine noch nicht reicht. Der Tor TOR Browser basiert auf Firefox und basiert ein Onion Routing um seinen Standort zu verschleiern.</div><div><br /></div><div>Zusätzlich noch als Tipp eine Alle die Tiefen einstiegen wollen: </div><div><a href="https://github.com/drduh/macOS-Security-and-Privacy-Guide">https://github.com/drduh/macOS-Security-and-Privacy-Guide</a></div>Mirko Eberthttp://www.blogger.com/profile/14029003405055594429noreply@blogger.com0tag:blogger.com,1999:blog-4722905579699085960.post-31943512987642910742020-08-01T09:39:00.046+02:002020-11-08T12:16:08.098+01:00Java StreamsIch habe mich lange gedrückt um einen Artikel über Java Streams zu schreiben, jetzt nach Jahren ist es so weit. <div><br /></div><div>Als ich das erste Mal Java Streams sah, ich glaube es war in einem Meetup, kamen mir zwei Gedanken:</div><div><ol style="text-align: left;"><li>Wow, cool</li><li>Welches Problem wird durch Java Streams gelöst.#</li><li>Parallelisierung für lau</li></ol><div>In den nächsten Jahren sickerten die Streams so in die allgemeine Java Programmierung. Streams waren ja nicht Neues, ich habe Streams (Pipes) exzessiv mit BASH and Splunk eingesetzt. </div><div><br /></div><div>Meine anfänglich Begeisterung sank recht schnell auf den Nullpunkt. Java Streams schienen in der Praxis mehr neue Probleme zu verursachen, als sie lösten, und welches Problem sollten Streams nochmal lösen.</div></div><div><br /></div><div>Jetzt nachdem der Hype weitergezogen ist, hier in aller Ruhe ein paar Tipps und Antworten zu Java Streams. </div><div><br /></div><h2 style="text-align: left;">Frage: Welches Problem löst Java Streams?</h2><div>Streams sind eine weitere From oder Alternative zu Schleifen (for, while). Sie bieten zwei Vorteile gegenüber den normalen Schleifen. Bei grossen Datenmengen kann man Streams parallelisieren, was auf Multi-Prozessorsystemen einen Geschwindigkeitsvorteil bringt. Dazu zwei Anmerkungen, in Cloud Umgebungen ala Marathon, Kubernetes, AWS - schaut in euere Configs ob ihr Überhaupt mehr als eine CPU habt, wenn nicht, bringt die Parallelisieren von Streams nichts. Die zweite Anmerkung, nur bei grossen Datenmengen ist die Parallelisieren sinnvoll, weil sonst der Overhead durch die Verteilung des Codes und der Daten über mehrere Cores die Geschwindigkeitsgewinn der Parallelisieren aufrisst.</div><div><br /></div><div>Hier ein Beispiel für eine super simple Parallelisierung mit Java Streams: <a href="https://www.adam-bien.com/roller/abien/entry/java_8_from_ordinary_for">https://www.adam-bien.com/roller/abien/entry/java_8_from_ordinary_for</a></div><div><br /></div><div><br /></div><div>Das zweite Vorteil von Java Streams gegenüber normalen Schleifen ist, das die Abarbeitung strukturierter erfolgt (stream -> (filter -> map)* -> collect). Das war für mich eher selten das Problem, aber es eindeutig ist das ein Vorteil von Java Streams. Das Problem sind nicht die Streams, das Problem sind die Programmier die mit Java vertraut sind. Sie fangen jetzt an das bekannte Exception Handling und Verzweigungen in den Streams einzubauen. Das ist generell ein Fehler oder besser der Fehler beim Umgang mit Streams. </div><div><br /></div><div>Streams behandeln nur positive Fälle. Ein Exception Handling oder ein Handling von Alternativen führt zu extrem schwierig zu lesendem Code. So etwas sollte in einem zweiten Stream gemacht werden. Streams sind verzweigungslos. Das macht sie so elegant und verständlich. </div><div><br /></div><div>Java Entwickler die es gewohnt sind Exceptions nahe am Ursprung zu behandeln, müssen umdenken und diese Funktionen in Filter und einem zweiten Stream auslagern.</div><div><br /></div><div><br /></div><h2 style="text-align: left;">Zusammenfassung:</h2><div><ol style="text-align: left;"><li>Streams sind ein sinnvolles Pattern für die Softwareentwicklung</li><li>Wer Pipes toll fand wird Streams lieben</li><li>Streams sind verzweigungsfrei zu bauen, entsprechende Filter, ggf. Mappings und alternative Streams sind umzusetzen</li></ol></div>Mirko Eberthttp://www.blogger.com/profile/14029003405055594429noreply@blogger.com0tag:blogger.com,1999:blog-4722905579699085960.post-19967814051705374672020-07-25T20:02:00.000+02:002020-07-25T20:02:01.032+02:00Video: The Future of Programming von Robert C. MartinRobert C. Martin aka Mister Clean Code von seiner besten Seite. Ein schönes Video über die Vergangenheit, den aktuellen Stand und die Zukunft der Sofwareentwicklung. Aber ich will nicht spoilern, seht selbst.<div><br /></div><div>
<iframe allowfullscreen="" frameborder="0" height="270" src="https://www.youtube.com/embed/ecIWPzGEbFc" width="480"></iframe></div>Mirko Eberthttp://www.blogger.com/profile/14029003405055594429noreply@blogger.com0tag:blogger.com,1999:blog-4722905579699085960.post-85782794601436414892020-07-25T18:16:00.001+02:002020-07-25T18:16:29.000+02:00Default ValuesUm Default Values gibt es immer wieder Diskussion unter Softwareentwicklern und oft sieht man das es scheinbar nicht ausreichend darüber nachgedacht wurde. Bezüglich der Default Values haben sich folgende zwei Regeln bewährt:<div><ol style="text-align: left;"><li>Ein guter Name, der keinen Interpretationsspielraum lässt.</li><li>Less Surprising Value</li></ol><div>Hier ein Beispiel, in Kafka gibt es ein <font face="courier">Replaction-Factor=1</font> der dazu benutzt wird die Replikation der Kafka Topics zu konfigurieren um so eine robuste Umgebung zu erhalten.</div></div><div><br /></div><div>Was ist daran nun sub-optimal?</div><div><ol style="text-align: left;"><li>Schnellen Programmierern werden leicht übersehen das es sich um den Faktor und nicht die Anzahl der Replikas handelt. So könnte man annehmen das es mindesten ein Replika gibt. Diese Annahme trügt, beim Wert 1 gibt keine Topic Replikation, weil 1 * 1 = 1 ist . Besser wäre wenn das Property nicht Replica-Factor heissen würde sondern Replica-Count. Der Softwareentwickler muss nicht die Hürde der Multiplikation überwinden. Je weniger mentale Barrieren, desto besser.</li><li>Der Wert ist 1, das klingt erstmal gut. Trotzdem würde ich erwarten, das wenn man Kafka einsetzt, das die Replikation aktiv ist und das ist hier nicht der Fall. Besser wäre also hier der Wert 2 als Default Value.</li></ol></div>Mirko Eberthttp://www.blogger.com/profile/14029003405055594429noreply@blogger.com0tag:blogger.com,1999:blog-4722905579699085960.post-38830991028364720692020-07-13T11:44:00.001+02:002020-07-13T11:44:44.201+02:00Gitlab Badges for Maven Jacocoo Test Coverage<ol><li>Integrate Jacoco into your Maven pom.xml.</li><li>Add into your file <i>.gitlab-ci.yml</i>: <b>echo -n "Total:" ; cat target/site/jacoco/index.html | grep -o 'Total[^%]*%' | grep -o -E '[0-9]+%$</b></li><li>Add Badge in Gitlab under Setting.</li><li>Gitlab scan the console for the Regex you given in Point 3.</li></ol><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-iK-46D2Natw/Xwws6tBC3OI/AAAAAAAAA2Q/vceBvShExgcCvz-sHVOhODDGZ0CLlM5RwCLcBGAsYHQ/s320/Bildschirmfoto%2B2019-01-11%2Bum%2B14.12.35.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="77" data-original-width="320" src="https://1.bp.blogspot.com/-iK-46D2Natw/Xwws6tBC3OI/AAAAAAAAA2Q/vceBvShExgcCvz-sHVOhODDGZ0CLlM5RwCLcBGAsYHQ/s0/Bildschirmfoto%2B2019-01-11%2Bum%2B14.12.35.png" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-WXkkS_tee6w/Xwws6mXzeZI/AAAAAAAAA2M/54YWfKcmWG4euA5qWp_15T00M8zL2bZ8gCLcBGAsYHQ/s200/Bildschirmfoto%2B2019-01-11%2Bum%2B14.12.41.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="198" data-original-width="200" src="https://1.bp.blogspot.com/-WXkkS_tee6w/Xwws6mXzeZI/AAAAAAAAA2M/54YWfKcmWG4euA5qWp_15T00M8zL2bZ8gCLcBGAsYHQ/s0/Bildschirmfoto%2B2019-01-11%2Bum%2B14.12.41.png" /></a></div><div><br /></div>Mirko Eberthttp://www.blogger.com/profile/14029003405055594429noreply@blogger.com0tag:blogger.com,1999:blog-4722905579699085960.post-36576427364366261132020-02-25T20:20:00.004+01:002021-10-21T08:54:32.108+02:00Datenschutz ist FreiheitAus gegebene Anlass (<a href="https://heise.de/-4647383" target="_blank">Heise Online</a>), weil demnächst der deutsche Saat alle Passwörter abfangen darf und damit nicht nur die Kommunikation aller Bürger mitlesen kann sondern auch gezielt falsche Informationen verbreiten kann hier ein Hinweis auf die <b>Electronic Frontier Foundation</b>, kurz EFF. Die EFF hat eine Seite zum Thema <b><a href="https://ssd.eff.org/" target="_blank">Survillance Self-Defence</a></b> mit kurzen Anleitung zu sicheren Benutzung von Diensten übers Internet.<br />
<br />
<b>Unnützes Wissen:</b><br />
Die EFF, bzw. ein EFF Aufkleber ist in der brillanten britischen Serie <b>The IT Crowd</b> zu sehen.Mirko Eberthttp://www.blogger.com/profile/14029003405055594429noreply@blogger.com0tag:blogger.com,1999:blog-4722905579699085960.post-65181698566556254492020-01-30T12:45:00.003+01:002020-01-30T12:45:47.365+01:00Git house keepingÜber die Entwicklungszeit eines Projektes sammeln sich im Git viele Feature Branches, die man oft vergisst wegzuräumen. So geht es:<br />
<br />
Löschen von lokalen Branches:<br />
<br />
<ol>
<li>git checkout master</li>
<li>git branch -l | grep --color=never -v master | xargs git branch -D</li>
</ol>
<br />
<br />
Löschen von remote Branches:<br />
<br />
<ol></ol>
<br />
<ol>
<li>git branch -r | grep --color=never -v master | xargs git push origin --delete</li>
</ol>
<div>
<br /></div>
<div>
<br /></div>
<br />Mirko Eberthttp://www.blogger.com/profile/14029003405055594429noreply@blogger.com0tag:blogger.com,1999:blog-4722905579699085960.post-19390031794866417752020-01-22T21:03:00.000+01:002020-01-22T21:03:01.410+01:00Kurz und Gut: Software Metriken Metriken helfen den Zustand von laufender Software zu überwachen (Monitoring) und Fehler frühzeitig zu erkennen. Das passiert dann mittels Alerts, die meist auf Metriken aufsetzen. Man kann in der Regel drei grundsätzlichen Arten von Metriken unterscheiden:<br />
<ol>
<li>Counter</li>
<li>Meter bzw. Histogramm</li>
<li>Gauge</li>
</ol>
<div>
Aber wo ist der der Unterschied zwischen den Metrik Typen? </div>
<div>
<br /></div>
<div>
<b>Hier ein Real Word Beispiel:</b></div>
<div>
Ein Gauge gibt an wie hoch der Wasserstand in deiner Badewanne ist.</div>
<div>
Ein Counter dagegen gibt an, wie oft jemand mit einem Eimer Wasser die Badewanne befüllt.</div>
<div>
<br /></div>
<div>
<b>Hier jetzt das Software Beispiel:</b></div>
<div>
Ein Gauge gibt an wie viele Einträge in deiner Datenbank sind.</div>
<div>
Ein Counter gibt an wie viele Elemente hinzugefügt wurden.</div>
<div>
<br />
<br />
<ul>
<li>Gauges:</li>
<ul>
<li>Benutzter Speicherplatz (RAM, Heap, Disk, ...)</li>
<li>CPU Usage</li>
<li>Anzahl von Einträgen in einer Datenbanktabelle</li>
<li>Load</li>
</ul>
<li>Counter:</li>
<ul>
<li>Requests</li>
<li>Laufzeit</li>
<li>Fehler</li>
<li>Transaktionen</li>
<li>Logzeilen </li>
</ul>
</ul>
<br />
<br /></div>
<div>
Kurz gesagt:</div>
<div>
Ein Gauge zeigt einen Zustand an, ein Counter zählt Events.</div>
<div>
<br />
Ich empfehle die Benutzung von Countern und Gauges.</div>
<h3>
Warum ich den dritten Metriktyp Meter und Histogramm nicht empfehle.</h3>
<div>
Meter neigen dazu zu lügen, oft werden die zusätzlichen Informationen nicht gebraucht und sie erhöhen den Aufwand. </div>
<div>
Das Hauptproblem ist aber das die oft wenigen Daten die in einem Metrikpunkt akkumuliert werden. Sie erzeugen bei den verwendeten Aggregationen wie in Histogramm und Meter ein falsches Bild von den Daten. Ein ist Quantilberechnung über 5 Werte ist 95% Sinn frei.</div>
<div>
<br /></div>
<h3>
Zusammenfassung </h3>
<div>
<ol>
<li>KISS: Keep it simple an stupid - eine Metrik ist nur ein Float Wert und ein Name. So sollte auch der Code aussehen.</li>
<li>Benutzt Counter und Gauge, je nach Anwendungskontext.</li>
<li>Vermeidet die Metrik-Typen Meter und Histogramm, es sei denn ihr wisst genau was ihr tut.</li>
<li>Metriken helfen den Zustand von laufender Software zu überwachen und Fehler frühzeitig zu erkennen.</li>
<li>Metriken ersetzen kein Logging.</li>
<li>Metriken sind nicht mit Observability zu verwechseln.</li>
</ol>
<div>
<br /></div>
</div>
Mirko Eberthttp://www.blogger.com/profile/14029003405055594429noreply@blogger.com0tag:blogger.com,1999:blog-4722905579699085960.post-56531949425490736752019-12-27T11:53:00.001+01:002019-12-27T21:26:26.068+01:00Einfache Bewegungserkennung auf dem Raspberry PiMit dem Thema Bewegungserkennung wird gerne KI in Verbindung gebracht, aber Bewegungserkennung geht auch mit normalen Computer Vision Mitteln.<br />
<br />
Es ist sehr einfach möglich, Bewegungserkennung mit einfachen UNIX Programmen durchzuführen. Ich benutze hier ImageMagic. Folgend ein Beispiel, das auf einem Raspberry Pi Zero W läuft. Hier ein Auszug aus dem BASH Script:<br />
<br />
<div style="font-family: Menlo; font-size: 11px; font-stretch: normal; line-height: normal;">
<span style="font-variant-ligatures: no-common-ligatures;">raspistill -o camImages/$DATE.jpg</span></div>
<div style="font-family: Menlo; font-size: 11px; font-stretch: normal; line-height: normal;">
<span style="font-variant-ligatures: no-common-ligatures;">
</span></div>
<div style="font-family: Menlo; font-size: 11px; font-stretch: normal; line-height: normal;">
<span style="font-variant-ligatures: no-common-ligatures;">convert -normalize -blur 0x8 camImages/$DATE.jpg blur/$DATE.jpg</span></div>
<div style="font-family: Menlo; font-size: 11px; font-stretch: normal; line-height: normal;">
<span style="font-variant-ligatures: no-common-ligatures;">compare -fuzz 8% -metric RMSE nb3.jpg nb4.jpg x.jpg</span></div>
<br />
<ol>
<li>Zuerst muss ein Bild aufgenommen werden.</li>
<li>Dann wir das Bild bzgl. des Histogramms normalisiert und mit dem Weichzeichen wird das Bildrauschen des Kamerasensors eliminiert.</li>
<li>Zuletzt wird das aktuelle Bild mit dem Vorgängerbild verglichen. Die Metrik gibt an, wie stark sich die Bilder unterscheiden, hier muss ein passender Schwellwert (-fuzz 8%) eingestellt werden.</li>
</ol>
<div>
<br /></div>
<div>
Mit dieser Lösung werden Bewegungen in Bildern zuverlässig erkannt. Hier ein Beispiel für ein Differenzbild.</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-bgTtRQZ2OPc/XgXgtoFr4cI/AAAAAAAAAzA/Ba63f0bgLd0pohUtY1CBlMUNH6DNE-QiwCLcBGAsYHQ/s1600/x.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1200" data-original-width="1600" height="150" src="https://1.bp.blogspot.com/-bgTtRQZ2OPc/XgXgtoFr4cI/AAAAAAAAAzA/Ba63f0bgLd0pohUtY1CBlMUNH6DNE-QiwCLcBGAsYHQ/s200/x.jpg" width="200" /></a></div>
<div>
<br /></div>
<div>
Die Nachteile:</div>
<div>
<ol>
<li>Dieser Lösung ist die hohe Laufzeit von ca. 75 sec auf Raspberry Zero W. </li>
<li>Die Normalisierung ist noch nicht optimal, Änderungen in der Beleuchtung werden häufig als Bewegung erkannt, das kann zur Zeit nur durch ein Anhaben des Schwellwertes kompensiert werden.</li>
</ol>
<div>
Update:</div>
<div>
Einige Optimierungen wie die Verringerung der Bildauflösung führen zur einer Reduktion der Laufzeit von 90 sec auf 75 sec auf 23 sec. Durch die jetzt kürzeren Abstände zwischen den Bildern werden Fehlerkennungen noch weiter reduziert.</div>
</div>
Mirko Eberthttp://www.blogger.com/profile/14029003405055594429noreply@blogger.com0