Blockchain Bullshitbingo

Das heutige (für Euch gestrige) Bingowort lautet (mal wieder) „Blockchain“. In folgenden Beiträgen wurde es bislang entdeckt:

Nach der Probenahme muss ihm zufolge die Eischale nicht wieder verschlossen werden, da sich die innere Eimembran von selbst wieder zusammenzieht. Die Genauigkeit liege bei rund 98 Prozent, die lückenlose Rückverfolgbarkeit des Prozesses stellt eine Blockchain sicher.

Quelle: https://www.heise.de/newsticker/meldung/Per-Laser-gegen-den-Huehnertod-4312665.html?wt_mc=rss.ho.beitrag.rss

Dabei hätten die Rechteinhaber über die Blockchain konsequent mit wasserfesten Lizenzen versorgt werden können.

Quelle: https://www.heise.de/newsticker/meldung/Urheberrechtsreform-CDU-CSU-Digitalexperte-verreisst-EU-Kompromiss-4313266.html

Das es heise.de getroffen hat, Pech, vielleicht weniger mit Politik, mehr Technik unterbringen. Ist nur so ein Vorschlag 🙂

Im ersten Beitrag ging es um die Erkennung des hühnischen Geschlechts bereits im Ei, um keine geborenen Tiere töten zu müssen,  im zweiten Artikel um die Äußerung einer/nes PolitikerIns zu Artikel 13 der neuen EU-Urheberrechtsreform.  Aber auch sonst ist heute wieder Bullshitbingo in den News : „Blockchain-Unternehmer“, „Blockchain-Bundesverband“ und “ Smart Contracts“ natürlich mit Blockchain.

Logischerweise braucht keine dieser Anwendungen eine verteilte Datenbank, deren Inhalt manipuliert werden kann, wenn jemand nur genug Rechenleistung einsetzt. Ob ein Ei ein Hähnchen werden sollte, oder eine Henne, muß man kaum in einer verteilten Kryptodatenbank speichern, genauso wenig wie private Verträge in einer, ja von wem eigentlich, betriebenen Datenbank stehen müßten. Und natürlich müssen auch Lizenzvereinbarungen nicht in einer global verteilten Datenbank stehen, die kann man auch bequem in einer normalen Datenbank speichern, die nicht soviel Energie verbrennt wie eine Blockchain.

Und der Hype geht weiter, der österreichische Kurier nennt die Blockchain, die „disruptivste“ Technologie seit dem Internet. Stimmt 🙂 1700 Kryptocoins, meistens wertlos, und jede Menge schwachsinns Ideen sind natürlich genau, was einen Hype ausmacht 🙂 Wenn die Technik so gut für alles ist, wieso gibt es dann keine praktischen Lösungen, die über „Wir haben was altes in Blockchain neuerfunden“ hinausgehen. Wäre das die Technologie der Zukunft, würde es schlagartig Anwendungen geben, weil die Technik gibts ja locker schon 10 Jahre. Da ist genug Zeit, eine brauchbare Anwendung zu finden. Was haben wir stattdessen ? Bitcoin … ein riesen Geldtransfer von „gierig“ zu „clever“ 🙂

Wer/was befeuert eigentlich son Hype?

Na Geschäftsleute und Politiker, die nicht abgehängt werden wollen und jetzt händeringend nach Möglichkeiten suchen. Blöd nur, daß die ersten Blockchain-Unternehmen schon wieder weg sind vom Markt. Die EU DS GVO machte Ihnen den gar aus 😀 Ich liebe die GVO 😀

Die Luxenburger Börse hat jetzt übrigens den Wertpapiertransfer per Blockchaineintrag als legal erklärt. Auch hier Frage, wer führt diese Blockchain und muß die wirklich verteilt sein ? Warum hat man nicht schon vorher eine digitale Signatur einer Kette von Einträgen benutzt? Und vorallem, wie verhindere ich, daß in der Blockchain was steht, aber die realen Papiere dann physikalisch nochmal verkauft werden, so gegen Bargeld ? Kommt am Ende raus, muß doch wieder einer aufpassen 🙂 und dann gehts auch wieder ohne Chain.

 

 

MariaDB Bugfix sorgt für ein bisschen Ärger

Ein kleiner selbstverursachter Logikfehler bei Datenbankstrukturen macht kleinen Webanwendungen grade ein bisschen Stress. Damit Ihr damit keinen Stress habt, eine kurze Erklärung zum Thema und wie man das behebt und vermeidet.

MariaDB Update

Bis vor kurzem hatten wir auf den Servern noch die MariaDB 10.1.33 laufen, jetzt die 10.2.21 . Beim Wechsel von 10.1 auf  10.2 haben die Devs von MariaDB den globalen SQL-Modus umgestellt, daß er jetzt eher failed, statt tolerant zu sein.

Eine Beispieltabelle:

beispiel

#NameTypKollationAttributeNullStandardKommentareExtra
1 int(11) Neinkein(e)AUTO_INCREMENT
2 int(11) Nein2
3 text utf8_general_ciNein
4 int(11) Neinkein(e)

Jetzt führen wir diesen Insert aus:

INSERT INTO beispiel SET id=NULL, test = 3, name=“Fritz“, counter = 0;

Klappt. Kein Fehler. Nächster Insert :

INSERT INTO beispiel SET name=“Hans“, counter = 0;

Klappt.Tabelle sieht jetzt so aus :

testnamecounterid
3Fritz01
2Hans02

Nun der Insert hier:

INSERT INTO beispiel SET id=NULL, test=9,name=“Killer“;

und schon kommt die Meldung:

ERROR 1364 (HY000): Field ‚counter‘ doesn’t have a default value

Vollkommen zurecht, weil ich im Insert der Datenbank durch Auslassung gesagt habe, nimm den Defaultwert für das ausgelassene Feld.  Da es keinen Defaultwert für das Feld gibt, kann die Datenbank den auch nicht benutzen.

Jetzt ist das aber in MariaDB 10.1 noch möglich gewesen. Das lag daran, daß sich mit 10.2.4 die Defaults des Servermode geändert haben und der Modus „STRICT_TRANS_TABLES“ jetzt aktiv ist, wenn die  Webanwendung das nicht selbst anders haben will. Beweis:

MariaDB [msctest]> INSERT INTO beispiel SET id=NULL, test=9,name=“Killer“;
ERROR 1364 (HY000): Field ‚counter‘ doesn’t have a default value
MariaDB [msctest]> SELECT @@SQL_MODE;
+——————————————————————————————-+
| @@SQL_MODE |
+——————————————————————————————-+
| STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+——————————————————————————————-+
1 row in set (0.00 sec)

MariaDB [msctest]> set sql_mode = „ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION“;
Query OK, 0 rows affected (0.00 sec)

MariaDB [msctest]> INSERT INTO beispiel SET id=NULL, test=9,name=“Killer“;
Query OK, 1 row affected, 1 warning (0.00 sec)

Jetzt die spannende Frage, mit was die Datenbank den Wert aufgefüllt hat, von dem Sie nicht weiß, wie der aussehen müßte:

idtestnamecounter
13Fritz0
22Hans0
59Killer0

Mit „0“ , was bei einem INT ja auch naheliegend ist.

Klare Ansage

Bevor jetzt jemand den MariaDB Entwicklern die Schuld dafür geben will, daß die eigene Webseite nicht mehr so funktioniert: selbst Schuld!

Ihr habt von vornherein einen Logikbug in Eurer Datenbankstruktur + Weblogik gehabt, sich darüber zu beschweren ist heuchlerisch. Da die Webanwendung sich selbst den Modus setzen kann, mit dem die Datenbank mit Ihr arbeiten soll, hätte man das ja auch mal selbst explizit so setzen können, wie man es braucht. Defaults können sich ändern, damit muß man rechnen.

Abhilfe schaffen

  1. Datenbankstruktur so ändern, daß ein Default vorhanden ist.
  2. Im Insert keine Felder auslassen, sondern explizit setzen.
  3. vor der Anwendung set sql_mode = „ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION“;  absetzen, dann hat man wieder das alte Verhalten

Viel Spaß jetzt damit 🙂