Cryptowährung und Blockchain: Bitcoin, Ethereum und co. erklärt

In letzter Zeit ist die neue Technologie Blockchain in aller Munde. Die Nachrichtenportale sind voll davon und sogar in der Zeitung findet man den ein oder anderen Hinweis. Jede Firma macht jetzt Blockchain und überhaupt ist es das krasseste seit der Erfindung des Internets. Aber was ist denn Blockchain, Bitcoin und co. überhaupt? Ich möchte versuchen, das Thema so einfach wie möglich zu erklären. Sollte deswegen etwas nicht zu 100% technisch korrekt sein, dann ist das halt so.

Begrifflichkeiten

Zuerst einmal müssen die vielen, neuen Begriffe sortiert werden, damit es einen klaren Überblick geben kann. Müsste man Gruppen bilden, so ließen sich Cryptowährung, Bitcoin und Ethereum in eine, und Blockchain und Smart Contracts in eine andere packen lassen. Was die vier Begriffe bedeuten, erfahren wir gleich. Wichtig ist erst einmal, dass Gruppe A und Gruppe B nicht direkt etwas miteinander zu tun haben. Bei Bitcoin und Ethereum handelt es sich um Cryptowährung. Der Überbegriff ist hier also "Cryptowährung". Bitcoin und Ethereum sind eine Art davon.

Android - Auch in 2017 noch Mist

Ich mag Android nicht. Aber ich mag auch nicht, wenn Leute stur von ihrer Meinung überzeugt sind, die sie sich schon vor Jahren gebildet haben. Ich weiß, dass es schwer ist, von seiner Meinung abzulassen und ich weiß auch, dass ich ein Sturkopf bin. Trotzdem versuche ich, mich selbst immer wieder vom Gegenteil zu überzeugen um ein etwas offeneres Weltbild zu bekommen.

Deswegen - und weil iOS immer schlechter wird - lege ich mir alle paar Jahre ein Android-Smartphone zu, obwohl ich mein iPhone eigentlich mag. Aber da nach jeder neuen Android-Version immer von den Android-Fanboys behauptet wird "ja, früher wars kacke, aber Android X ist jetzt viel besser", denke ich mir "vielleicht ist es ja jetzt besser als iOS". Und das fände ich wirklich cool. Schließlich hat Android sehr viele Vorteile. Es ist offen, anpassbar und man hat gerade als Entwickler und Nerd sehr viele Möglichkeiten. Ich verkaufe also alle paar Jahre mein iPhone und lege mir ein Android-Flaggschiff zu. In der Vergangenheit waren das:

Higher Order Messaging: Arrays auf Steroiden

Seit ein paar Monaten gibt es in Laravel ein neues Feature: Higher Order Messaging in Collections. Um zu verstehen, was das ist und worum es sich hierbei handelt, muss erst einmal eine Collection erklärt werden.

Wer noch nicht mit Laravel gearbeitet hat, kennt sie vermutlich nicht. Aber im Endeffekt sind Collections einfach getunte PHP-Arrays. Also eine Wrapper-Klasse um ein normales Array mit einigen Zusatzfunktionen. Statt array_map($function, $array) kann man hier beispielsweise einfach $collection->map($function) ausführen. Und so gibt es einige zusätzliche Methoden: filter, sum, where, first, pull, etc. Die ganze Liste gibt es hier. Zusammenfassend lässt sich sagen: Collections vereinen alle Array-Funktionen von PHP in einem Objekt, und vereinfachen so die Arbeit mit Arrays enorm.

Das neuste Feature von Collections ist - wie eingangs erwähnt - das Higher Order Messaging. Das klingt erstmal kompliziert, und ist in der Tat auch relativ seltsam. Ein Beispiel erklärt das Ganze etwas besser. Angenommen wir haben eine Collection $employees, welche ein Array von Mitarbeiter-Objekten enthält. Ein Mitarbeiter hat die Methode sendPayment(), um eine Bezahlung zu senden.

Hackintosh - The Best of Both Worlds

Prolog

Mein MacBook Air von 2014 ist mittlerweile etwas in die Jahre gekommen und schafft es nicht, meine zwei 2560 x 1080 Monitore gleichzeitig anzusteuern. Deswegen war die Überlegung, einen neuen Mac anzuschaffen, welcher dann als Antriebskraft für die beiden Bildschirme dient.

Warum ein Mac? Weil ich finde - und das ist natürlich nur die eigene Meinung - dass macOS das beste Betriebssystem für die tägliche Arbeit und das Programmieren ist. Im Vergleich zu Linux muss das System weniger oft gewartet werden und es bleibt mehr Zeit für Produktivität. Im Vergleich zu Windows 10 sammelt macOS wesentlich weniger persönliche Daten und ist außerdem Unix-Basiert, was die Arbeit mit der Command Line vereinfacht.

Der Nachteil bei macOS ist, dass es nur auf der von Apple vertriebenen Hardware angeboten wird. Und das hat seinen Grund. Natürlich verdient Apple dadurch mehr Geld, aber auch aus technischer Sicht macht es Sinn: Da nur kontrollierte Hardware verwendet wird, kann das Betriebssystem damit getestet und darauf abgestimmt werden. Das verhindert komische Hardware-Konstellationen, die zu seltsamen Fehlern führen. Mit ein Grund, warum macOS sehr stabil läuft.

Trump findet: Weniger Geld für Frauen und Homosexuelle

Na, schon aufgebracht? Was fällt diesem Trump ein, sowas nur zu behaupten! Egal ob weiblich oder homosexuell, jeder sollte gleich viel Geld bekommen! Ich bin empört und werde diese Empörung kundtun!

Ich habe diesen Titel gewählt, weil ich eine gewisse Grundstimmung haben möchte, unter der dieser Beitrag gelesen wird. Der Titel sollte möglichst viele Filterblasen aufregen: Die Trump-Blase, die Frauenrechtler-Blase und die Gender-Blase. Denn gerade (aber nicht ausschließlich) diese drei Gruppen sind bekannt dafür, gerne mal etwas in den falschen Hals zu bekommen. Es gibt auf diversen sozialen Netzwerken und in den Massenmedien große Communities, die nichts weiter tun, als dafür zu sorgen, dass die unterschiedlichen Meinungen immer wieder aneinanderprallen.

In letzter Zeit nehmen es gerade die Medien nicht mehr so ernst mit dem Unterschied zwischen Realität und Kreativität, was dazu führt, dass das Wort Postfaktisch immer mehr in den Vordergrund wandert. Dabei handelt es sich um den Fakt, dass etwas nicht auf Tatsachen, sondern auf Gefühlen basiert. Ganz nach dem Motto: Wenn es gut klingt, muss ja irgendwas dran sein. Und zum Faktenchecken hat sowieso keiner mehr Zeit. Denn in der Welt des Internets heißt es: Wer zuerst kommt, mahlt zuerst.

Künstliche Intelligenz - Ein Blick in die Zukunft

Elon Musk weiß genau, wo er die Menschen in der Zukunft sieht. Er hat sich ganz klar positioniert mit PayPal, SpaceX und Tesla. Unternehmen, welche die Zukunft in greifbare Nähe bringen und brachten.

Und er hat Angst. Angst vor der Singularität. Der Punkt, an dem Computer sich so schnell selbst verbessern können, dass sie den Menschen in seinem Denken überholen. Deswegen investiert er gerne in Firmen, welche genau das als Ziel haben, damit er den vollen Überblick über den Ablauf hat. Und jetzt geht er sogar noch einen Schritt weiter.

Mit seiner neusten Firma, die gerade erst gestern angekündigt wurde, möchte er eine Schnittstelle zwischen Mensch und Maschine entwickeln, die direkt über das Gehirn geht. Computer sollen Gedanken lesen können, und Menschen Computer. Dadurch möchte Elon Musk den Menschen darauf vorbereiten, mit den künstlichen Intelligenzen mithalten zu können, wenn es denn soweit ist.

Ich finde das Thema Singularität immens spannend und ähnlich wie Elon Musk habe auch ich eine gehörige Angst davor. Um eins von Einsteins berühmtesten Zitaten zu erwähnen:

Du sollst deine Arbeit dokumentieren

Ich bin noch nicht sehr alt. Trotzdem habe ich eine wichtige Erfahrung in meinem Leben gemacht, welche meiner Meinung nach elementar für die berufliche Karriere als Informatiker ist.

Egal, ob du ein Entwickler, Sysadmin oder Supporter bist, dieser simple Tipp wird dein Leben verändern. Hier erfährst du ihn!

Entschuldigung. Das klang vielleicht etwas Clickbaitiger als gedacht. Aber nunja, es ist ein einfacher Trick, wie man sich das Leben und die berufliche Laufbahn einfacher gestalten kann: Dokumentiert, was ihr getan habt.

That's it. Danke fürs Lesen.


Ich denke ich muss nicht viel über Dokumentation sagen. Jeder ITler hat seine eigene Meinung dazu entwickelt. Manche lieben Dokumentation, die meisten aber hassen sie. Es macht keinen Spaß sie zu erstellen, durchlesen wird sie sowieso keiner und in drei Monaten ist sie sowieso wieder veraltet. Warum also überhaupt damit anfangen? Absolut verschwendete Zeit.

Produkt oder Code?

Es gibt zwei Entwickler-Typen. Die, die versuchen ihren Programmcode möglichst strukturiert und sauber aufzubauen und die, die möglichst schnell versuchen ein Produkt zu veröffentlichen. Man könnte sie also durch die folgende Frage definieren:

Ist dir das Produkt wichtiger, oder der Code?

Wem das Produkt wichtiger ist, der sieht das Programmieren selbst nur als Mittel zum Zweck. Der Entwickler kümmert sich nicht um Objektorientierung, Designpatterns, Testing und Ähnliches. Der Entwickler schreibt einfach seinen Code Zeile für Zeile herunter, packt ein paar Funktionen darum und nennt es dann Functional Programming. Am Ende kommt ein Produkt heraus, das mehr oder weniger gut funktioniert, dafür aber sehr viele Features bietet und vor allem in kürzester Zeit entstanden ist. Der Vorteil ist klar: Quantität.

Wer Wert auf guten Code legt, denkt bei jeder Zeile, die er schreibt, meist zweimal nach. Er formatiert um und strukturiert das Programm so, dass es auch in Zukunft einfach erweitert und gewartet werden kann. Er schreibt Tests und sorgt dafür, dass alle Features so funktionieren, wie sie sollen. Aber all das kostet Zeit, was zur Folge hat, dass das Produkt am Ende länger braucht und mit weniger Features auskommt. Für diesen Typ zählt also Qualität.

Amazon Echo (Dot) - Der erste Eindruck

Ich persönlich habe mich sehr lange auf Amazon Echo gefreut. Seit dem Release in den USA in 2014 warte ich gespannt auf einen Release in Deutschland, und mittlerweile ist es endlich soweit.

Wer Amazon Echo nicht kennt, kann sich darunter ein kleines, rundes Gerät vorstellen, welches irgendwo im Raum platziert wird, und dank der 7 Mikrofone immer mithört. Wird dann das Aktivierungswort "Alexa" gesagt, wird das Folgende an den Amazon Cloud Service gesendet und interpretiert. Anschließend fungiert das Gerät ähnlich wie Siri oder Google Now. Sprich: Ein virtueller Assistent, der Fragen beantworten und Aktionen durchführen kann. Der Vorteil: Das Gerät hört einen überall im Raum und muss nicht extra per Knopfdruck aktiviert werden.

Der erste Eindruck des Amazon Echo war direkt negativ. Bisher ist das Gerät nämlich nur per Einladung erhältlich. Nur wenige haben einen Tag nach offiziellem Release eine Einladung erhalten. Vorwiegend Leute mit Dialekt. Alle anderen dürfen laut Amazon sogar mehrere Monate warten, bis sie dann endlich ein Gerät bestellen können. Warum Amazon dies erst jetzt - eine Woche nach Veröffentlichung - kommuniziert und nicht sofort von Beginn an klar macht, ist für mich unverständlich. Auch verstehe ich nicht, warum überhaupt ein Veröffentlichungstermin angegeben wurde, wenn nur ein paar Wenige tatsächlich auch eine Einladung erhalten.

Regular Expressions: Alternative Syntax und Builder

Regular Expressions - oder zu Deutsch Reguläre Ausdrücke - sind gerade in der Softwareentwicklung ein mächtiges Hilfsmittel, wenn es um Filtern, Validieren, Suchen und Ersetzen geht. Leider sind sie eines ganz bestimmt nicht: Einfach zu lesen und zu schreiben. Eine simple Regular Expression zum Validieren einer E-Mail-Adresse könnte zum Beispiel so aussehen:

/^([A-Z0-9._%+-])[email protected][A-Z0-9.-]+\.[A-Z]{2,}$/i

Wer noch nie versucht hat, Regular Expressions zu verstehen, oder diese schlichtweg nicht kennt, schaltet nach einer solchen Zeile definitiv auf Durchzug. Sie ist kryptisch, unverständlich, hässlich und durcheinander. Nur, wer sich gut mit der Materie auskennt und genau weiß, wofür die einzelnen Zeichen stehen, kann - sofern er sich konzentriert in die Sache hineindenkt - verstehen, worum es geht. Aber warum so kompliziert? Es gibt in der heutigen Zeit viele einfachere Wege, einen regulären Ausdruck zu definieren. Letztendlich lässt sich ein solches Statement ja doch recht einfach in Worte fassen:

Beginne mit einem oder mehreren Zeichen zwischen A-Z, 0-9 oder ., _, %, + oder -. Dann erwarte ein @. Dann...

Und so weiter. Wer einen Schritt weiter denkt, kennt schon jetzt eine Sprache, die so aufgebaut ist: SQL. Die Sprache zum Kommunizieren mit den relationalen Datenbanken dieser Welt ist logisch und verständlich. Warum also kein SQL für Regular Expressions? Warum kein S"R"L?

SRL - Simple Regex Language

Das habe ich mich auch gefragt. Und es einfach gemacht. Darf ich vorstellen: SRL - Simple* Regex Language! Ein Beispiel gefällig? Ihr erinnert euch an das Beispiel mit der E-Mail-Validierung? In PHP würde das Ganze aktuell so aussehen:

$regex ='/^([A-Z0-9._%+-])[email protected][A-Z0-9.-]+\.[A-Z]{2,}$/i';
if (preg_match($regex, '[email protected]') === 1) { }

Hiermit lässt sich prüfen, ob die gegebene E-Mail-Adresse gültig ist. Wesentlich schöner geht es aber so:

$regex = new SRL('BEGIN WITH EITHER OF (NUMBER, LETTER, ONE OF "._%+-") ONCE OR MORE,
LITERALLY "@",
EITHER OF (NUMBER, LETTER, ONE OF ".-") ONCE OR MORE,
LITERALLY ".",
LETTER AT LEAST 2,
MUST END, CASE INSENSITIVE');
if ($regex->isMatching('[email protected]')) { }

Ohne Zweifel ist das SRL-Beispiel wesentlich länger, aber sind wir mal ehrlich... wer keine Ahnung von Regular Expressions hat, kann sich hier denken, was passiert. Besonders, wenn die Person es nicht geschrieben hat und es einen Bug geben sollte, kann dieser einfach behoben werden, da klar ist, worum es geht.

SRL Query Builder - LINQ für Regular Expressions

Doch das ist noch lange nicht alles. Wer Query Builder für MySQL und Co. kennt, wie zum Beispiel LINQ oder Laravels Query Builder, dürfte den SRL Query Builder gut verstehen. Dasselbe Beispiel wie oben, lässt sich hiermit wie folgt in PHP umsetzen:

$query = SRL::startsWith()
    ->eitherOf(function (Builder $query) {
        $query->number()
            ->letter()
            ->oneOf('._%+-');
    })->onceOrMore()
    ->literally('@')
    ->eitherOf(function (Builder $query) {
        $query->number()
            ->letter()
            ->oneOf('.-');
    })->onceOrMore()
    ->literally('.')
    ->letter()->atLeast(2)
    ->mustEnd()->caseInsensitive();

Wie ihr seht, ist die Syntax der SRL Syntax sehr ähnlich. Nur lässt sich damit relativ einfach eine dynamische Regular Expression aufbauen, wenn die Bedingungen erst zur Laufzeit bekannt werden. Am Ende purzelt bei beiden Versionen (SRL und Query Builder) ein Objekt heraus, welches viele tolle Features bietet, wie zum Beispiel das schon gezeigte "isMatching".

Capture Groups und Lookarounds

Wer sich mit Regular Expressions auskennt, der weiß, dass noch ein paar wichtige Features in SRL bisher nicht erwähnt wurden. Darunter Capture Groups, welche es ermöglichen, Resultate zu filtern, und Lookarounds, welche Bedingungen vor oder nach dem Filter erfüllen müssen. Doch selbstverständlich ist auch dies mit ein paar einfachen Worten zu definieren:

$regex = new SRL('CAPTURE (LITERALLY "foo", OPTIONAL "bi") AS "sample" IF FOLLOWED BY (LITERALLY "bar")');

Das CAPTURE-Keyword definiert eine Capture Group unter dem Namen "sample", welche auf die Sub-Expression in den Klammern matcht. Dies passiert jedoch nur, wenn auf diese Gruppe direkt die kommende Sub-Expression, nämlich "bar" folgt. Die folgenden Beispiele würden daraus also resultieren:

$regex->isMatching('foobar'); // true, da auf "foo" direkt "bar" folgt.
$regex->isMatching('foobiboo'); // false, da auf "foobi" kein "bar" folgt.

Da "foobibar" ebenfalls matchen würde, können wir uns mit der "getMatches"-Methode nun ein Array aller Matches ausgeben lassen. Unsere Capture-Group hat den Namen "sample" bekommen, weswegen wir unseren ersten Match nun über diesen Namen abrufen können:

$regex->getMatches('foobibar')[0]->get('sample'); // "foobi"

Auch Dinge wie Replace lassen sich ganz einfach abbilden:

$regex->replace('wunder', 'foobar'); // "wunderbar"

Neben Replace gibt es dann auch noch "filter" und "split", welche ähnlich funktionieren. Und wem das noch nicht genug ist, der darf sich gerne auch die im Hintergrund erstellte Regular Expression ausgeben lassen und damit alles anstellen, was mit normalen Regular Expressions auch möglich ist.

Viel Spaß

Wer das Ganze einmal selbst ausprobieren möchte, darf gerne das SRL GitHub-Projekt klonen, forken, kopieren, löffeln, runterladen, anpassen, mergen oder was euch sonst noch so alles einfällt. Natürlich sind auch Implementierungen in anderen Sprachen oder Contributions und Bugfixes sehr gerne gesehen.   * Jaja, das S in SQL steht für Structured, aber um ehrlich zu sein finde ich trifft es Simple im Falle der Regular Expressions einfach besser.