Corona – Tag 8

Nun am achten Tag in selbstgewählter sozialer Reduzierung… und mittlerweile muss ich ernsthaft sagen, dass es mich schon ein wenig annervt. Egal, was ich von den ganzen Verordnungen/Verfügungen und Maßnahmen halte, ich werde sie befolgen, in der Hoffnung, dass die Zahl der Infizierten nicht mehr so steil ansteigt, wie sie es zuvor getan hat…

Ich rede noch nicht mit meinen Katzen… Ok, vielleicht ein wenig und es ist bisher die sportlichste Woche gewesen, die ich bisher hatte. Warum? Weil Mittagspause und ich nach 4 Stunden HomeOffice auf dem Bürostuhl und verschiedenen Telkos das Bedürfnis habe mich deutlich zu bewegen.

Wie geht es nun weiter? Große Frage…

Aber eine These zu den „Hamsterkäufen“. Klar, es gibt einige Hamsterkäufe, aber ich habe festgestellt, dass es ja keine Kantine gibt und man jeden Tag zu Hause essen muss. Daher wird sich das Einkaufsverhalten doch massiv verändert haben, man frühstückt zu Hause, man geht nicht mehr in Restaurants, man hat keine Kantine…. Man muss sich vollständig aus dem Supermarkt oder Wochenmarkt ernähren. In meinen Augen auch einer der Gründe für die vielen leeren Regale…

Ok… Klopapier ist ein Hype, allerdings habe ich zuvor auch mehr die Arbeitszeit im Büro hierfür genutzt als zu Hause…. Mensch bleibt Mensch

Bleibt gesund.

DatenMeister 0.0.2.0

Die neue Version des DatenMeister ist verfügbar. Zum Großteil ist dies ein Stabilitäts-Update in dem wesentliche Elemente der Navigationsfindung neu konzipiert worden sind. Sichtbar für den Nutzer sind folgende Punkte:

  • Es werden automatisiert Formulare auf Basis der Objekteigenschaften erzeugt
  • Der gesamte Algorithmus zur Findung der Formulare wurde verbessert
  • Packages sind nun Standard-Elemente für Datenbanken
  • Neue Packages können schnell erstellt werden
  • Bei der Auswahl von Objekt-Typen wird die Eigenschaft der beinhaltenden Collection genutzt um Typen vorzuschlagen
  • HTML-Export im Standard-Format von Listen- und Detailansichten
  • Viele Weitere… (immerhin 119 Commits, was aber natürlich kein Qualitätsmerkmal ist)
  • 350 files changed, 9306 insertions(+), 5380 deletions(-)

Intern wird nun zum Teil auf .Net Core gesetzt, die Anwendung selbst läuft noch auf .Net Framework 4.6.2. Der Wechsel wird in der nächsten Version angeplant.

Wo? http://depon.net/downloads/datenmeister.zip oder https://github.com/mbrenn/datenmeister-new/releases/tag/datenmeister-wpf-v0.0.2.0

Quellcode: https://github.com/mbrenn/datenmeister-new/tree/datenmeister-wpf-v0.0.2.0

Katschberg

Ein Gruß aus dem Katschberg

Blick auf den Skilift

Immer wieder gut und das Skitraining verläuft planmäßig…. Heute geht’s auf die rote Piste und mal schauen wie gut das klappen wird.

Was hast du letzte Woche gemacht?

Nullable, nullable, nullable

Was sind denn nun Nullables? Eine Hint an den Compiler, der darlegt, ob erwartet wird, dass eine Variable den Wert ’null‘ haben könnte oder nicht.

Dieser wird nicht zur Optimierung des Codes genutzt, sondern um den Programmierer darauf hinzuweisen, dass er jetzt doch eine Variable mit null bedient hat oder keinen Null-Reference-Check eingebaut hat. Es gibt dann amüsante Compiler Warnings…

Eine bestehende Bibliothek auf nullables umzurüsten, kostet einiges an Fleißarbeit, aber man findet viele potentielle Lücken. Und nicht immer trivial, insbesondere bei Generics, die sowohl Werte- als auch Referenztypen beinhalten können.

https://docs.microsoft.com/de-de/dotnet/csharp/nullable-references

Busy Beaver

Der heutige Abend war geprägt von leichter Erkältung und dem Willen ein vollständiges Programm zu implementieren.

Daraus wurde die Implementierung einer Busy Beaver ‚Maschine‘. Eigentlich wollte ich nur mnochmal wissen, ob ich performant implementieren kann und hier bin ich soweit glücklich. 47.000.000 Runden werden innerhalb einer halben Sekunde berechnet.

var states = BeaverRuleParser.ParseRule("1RB 0LC 1RC 1RD 1LA 0RB 0RE 1RH 1LC 1RA", beaver);

Was ist der Busy Beaver… Am Besten hier beschrieben: htttps://en.wikipedia.org/wiki/Busy_beaver.

Ich finde es immer wieder beeindruckend, wie man aus einem ganz kleinen Satz an Regeln (10 Regeln) eine Beschäftigung über mehr als 47 Millionen Schritten erzeugen kann ohne dass eine unendliche Wiederholung eintritt. Der fleißige Bieber ist beschäftigt, er ist sehr lange beschäftigt, wird jedoch fertig!

Der Quellcode ist natürlich auch unter https://github.com/mbrenn/busybeaver-csharp abrufbar…

Paar Erkenntnisse habe ich auch mitgenommen:

  • bit[] ist ähnlich schnell wie int[]
  • BitArray brachte keinen Geschwindigkeitsvorteil, eher im Gegenteil
  • Properties {get;set;} haben einen deutlichen Geschwindigkeitsnachteil, auch wenn sie nur auf ein internes Feld gehen
  • JetBrains Performance Viewer ist brauchbar und hilft bei der punktuellen Optimierung
  • Der Unterschied zwischen ‚Debug‘ und ‚Release‘ liegt grob bei Faktor 5 bis 10.

2019 geht vorbei, 2020 kommt

Gibt hier kein Jahresrückblick, sondern nur ein Wunsch an euch alle für ein erfolgreiches, amüsantes, abwechslungsreiches und herausforderndes Jahr 2020.

Meine Pläne für 2020:

  • Mehr Plastikmodellbau, eventuell mit ein wenig Elektronik
  • Klavier lernen… soweit der Plan
  • Weniger Arbeiten, mehr Freizeit
  • Weniger Ernsthaftigkeit… ja, sollte klappen
  • Der DatenMeister wird erwachsen und nutzbar…

Meine Wünsche 2020 für das Land:

  • Normalisierung der Debattenkultur
  • Einen erfolgreichen Anfang der Mobilitäts- und Energieversorgungswende
  • Weniger ‚Shitstorms‘ und gelenkte Empörung
  • Mehr Kuchen für alle… Gerne auch Knäckebrot

Projekt Katzenwohnhaus

Nachdem wir zwei schöne Katzen haben, Flamiau (wie das Pokémon) und Rocky, steht natürlich die Frage: Freigänger (damit Vogelmörder oder platt vom Auto) oder kein Freigänger. Problem: Im Sommer sind die Türen offen…

Daher: Die Katzen brauchen ein Katzenhaus draußen. Eindeutig. Sonst frieren die armen Katzileins.

Der Grobplan steht… bin gespannt, wie gut die Umsetzung klappen wird. Habe auch auf einen Projekt- und Verifikationsplan verzichtet.

Morgen geht es erstmal zum Bauhaus

Docker, Jenkins and Asciidoctor

The today’s afternoon was highly occupied by Jenkins, Docker and Asciidoctor. I never used any of them before but I have a local server „left over“, so I tried to build up an automatic builder and deployer.

Continuous deployment as a hype… Hyper, hyper.

So… What was done?

  1. Fighting against Docker and understanding how Jenkins can be installed…
  2. Fighting again against Docker to figure out how Asciidoctor can be ‚injected‘ into the docker. Ok… using ‚docker exec‘ is not the correct way. I should have created my own Dockerfile… But where is the application data stored? Is it resetted whenever I create a new docker file?
  3. Now, everything is running up and the fights against Asciidoctor began
  4. By the way: The SCP plugin for Jenkins is also a mess.

There is a mess on several levels:

  • SCP plugin does not like default crypto of the sshd server… Now, I did some changes… but Security on a public server… I should know, what I have introduced in sshdconfig. Probably, I will get rid of the SCP plugin and use the scp being delivered with the Docker Container. When I learn how I get the Jenkins user account aware of my SSH keys.
  • Asciidoctor is a mess regarding relative directories. Now I put everything into two folder… The .adoc files and the images… Flat as flat…
  • SCP plugin is again a mess since it is not capable to copy with hierarchy, but a relative hierarchy to the target file

So… What is achieved:

  • Docker runs
  • Jenkin runs
  • Whenever I publish to ‚develop‚ on Github, the website is updated… Yeahaa…
    • Ok… not really… Jenkins pulls every 10 minutes whether a new update on Github was done. I did not manage to figure out how a push notification from Github to my local server in my house is done… Probably also not possible since the server is not reachable from the outside (at least I hope so).

Yeahaa… I’m happy. Time to get some cheese.

Finished: SUCCESS