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.

N26 (Number26) - Die Bank der Zukunft

Number26, bzw. seit ein paar Tagen nur noch N26 genannt, ist die modernste Bank Deutschlands. Leider ist nicht alles Gold, was glänzt, und auf die hübsche Hülle kein Verlass.

Ich wollte wirklich, dass es funktioniert. N26 hat eine wunderschöne App und WebApp, womit sich das gesamte Konto steuern lässt, und sie bietet alle Funktionen, die man sich wünschen kann. In der Kontoübersicht wird in Kategorien aufgelistet, wofür das Geld ausgegeben wurde, eine Überweisung kann mit ein paar einfachen Klicks getätigt werden, und die Bestätigung bei Überweisungen am PC erfolgt per Push-Benachrichtigung an die Smartphone-App.

Kapitalanlagen sind auch ganz einfach per Klick in der App möglich, und die Verwaltung von Kontodaten, PIN, und Karten lässt sich ebenfalls ganz locker und einfach handhaben. Das Erlebnis ist rundum begeisternd. Sogar ein Dispo-Kredit wird angeboten. Nach einer SCHUFA-Abfrage wird dann berechnet, wie viel Budget einem zur Verfügung steht, und dann kann es auch schon losgehen. Mit einem einfachen Schieberegler kann der Kreditrahmen dann angepasst werden, je nachdem, wie viel man gerade benötigt, sodass man nicht aus Versehen überzieht.

Bei einer Bank ist die Funktion und das Aussehen aber natürlich längst nicht alles. Wichtige Faktoren sind auch Zinssätze, Zuverlässigkeit und Support. In all diesen drei Punkten versagt N26 komplett. Die Zinssätze sind beim Girokonto nicht vorhanden, beim Dispo, welcher bis maximal 2000 Euro geht, beträgt der Zinssatz 8,9%.

Zuverlässigkeit ist so eine Sache. Die lässt sich meist nur feststellen, wenn es dann zu spät ist. Und für knapp 400 Kunden der noch sehr jungen Bank war es dann auch so. Diese wurden plötzlich aus heiterem Himmel ohne Vorwarnung gekündigt. Einen Grund kommunizierte N26 erst eine Woche später. Zur gleichen Zeit wurde übrigens bei mir ein SCHUFA-Check von N26 angeordnet. Damals, als die Kündigungen durchgeführt wurden, blieb ich unversehrt. Ich dachte mir, man würde schon seine Gründe haben und ließ mich dadurch nicht beirren. Langsam habe ich mein Primärkonto immer weiter zu N26 umgezogen. Eingerichtet war bei mir ein Dispo-Kredit von 500 Euro. Testweise habe ich den auch, da ich ein wenig skeptisch war, ausgereizt.

Für ein paar Wochen war also Minus auf dem Konto, bis ich den Dispo dann wieder getilgt habe. Heute kommt dann plötzlich die Nachricht per E-Mail, dass mein Dispo-Kredit gekündigt wurde, und ich bitte in einem Monat alle noch offenen Schulden decken müsse. Sogar gleich zweimal. Einmal auf Englisch, mit folgendem Inhalt:

Screen Shot 2016-07-27 at 17.27.32

Und ein paar Minuten später dann auf Deutsch:

Screen Shot 2016-07-27 at 17.28.56

Diesmal immerhin mit richtigem Text. Ich müsse also keine 0 Euro mehr zurückzahlen, und selbst gekündigt habe ich ihn auch nicht. Immerhin nennt man einen Grund: "Verschlechterung meiner Kreditwürdigkeit"

Okay, dann sehen wir doch mal nach... Die letzte SCHUFA-Abfrage von N26 war am 1. Juni. Der letzte Score, welcher in der Tat schlechter ist (weil N26 meinen Kredit gemeldet hat), wurde am 6. Juli berechnet. Davor, also am 1. Juni, war alles beim Alten. Eine Verschlechterung ist also de facto falsch. Warum wurde mir der Kredit also gekündigt? Man weiß es nicht. Vermutlich, weil ich ihn verwendet habe.

¯\(ツ)

Bleibt also nur noch eins zu klären: Der Support. Eine Antwort auf meine Fragen per Twitter habe ich nicht erhalten, auch vor ein paar Tagen nicht, als ich netterweise auf einen Bug hingewiesen habe. Stattdessen sieht man auf deren Twitter-Account nur eins: Unzufriedene Kunden, die sich über mehrere Wochen Wartezeit beim E-Mail-Support aufregen und vertröstende Antworten, dass man "aktuell" ein hohes Support-Aufkommen habe, welches nicht ganz bewältigt werden könne.

Tja, soviel dazu. Den Platz in der Hall of Shame haben sie sich damit natürlich verdient.

Meine Kündigung ist raus. Schade eigentlich.

Update 30. August: Tja. Das scheint die N26-Bank aber nicht weiter zu interessieren. Sie haben jetzt schon meine dritte Kündigung abgelehnt. Zuletzt mit der Begründung (immerhin kam mal eine), dass meine Unterschrift anscheinend abweiche. Sehr interessant auf jeden Fall. Wenn man raus will, darf man nicht, aber wer bleiben will, muss gehen. Vielleicht hebe ich einfach mal ein paar Euro ab...

Postfächer - Die Nachteile

Postfächer kennt jeder. Und sie bieten auf den ersten Blick eigentlich nur Vorteile: Wer eins hat, kann es an einigen Stellen angeben um Post zu erhalten, ohne die richtige Adresse der Wohnung preisgeben zu müssen. Aber Postfächer haben auch Nachteile. Gravierende, wie ich finde.

Nach dem Anmelden zum Postfach-Service der Deutschen Post bekommt man einen Schlüssel zu seinem Postfach, sowie eine eindeutige Adresse, unter der man Post an das Postfach schicken lassen kann. Selbstverständlich. Irgendwo muss die Post ja auch ankommen. Was die Post allerdings nicht kommuniziert ist, dass nicht nur Post, die an das Postfach adressiert ist dort landet, sondern auch Post, die eigentlich an die private Adresse gerichtet ist.

Ohne bestimmtes Muster, sondern einfach nach Lust und Laune landen also sporadisch Briefe von unterschiedlichsten Unternehmen und Personen im Postfach, auch, wenn sie nicht dort hin geschickt wurden. Das hat zur Folge, dass man, wenn man sein Postfach nicht wirklich jede Woche leert, gerne mal eine Zahlungsfrist überschreitet. Es kommt einem in der Tat so vor, als wäre die Post manchmal zu faul um die Briefe auszuliefern. Stattdessen packt sie diese dann einfach ins Postfach, sofern eins registriert wurde. Eine Benachrichtigung per SMS oder E-Mail wie bei der Packstation bekommt man nach Erhalt eines Briefes ebenfalls nicht.

Bevor ihr also ein Postfach registriert, seid euch im klaren, dass ihr um eine Leerung pro Woche nicht herumkommt. Auch, wenn ihr eigentlich keine dringliche Post unter der Postfachadresse erwartet. Schade.