Regular Expressions: Alternative Syntax und Builder

Von Karim Geiger — unter Development am 21.08.2016

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._%+-])+@[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._%+-])+@[A-Z0-9.-]+\.[A-Z]{2,}$/i';
if (preg_match($regex, 'me@example.com') === 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('me@example.com')) { }

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

Von Karim Geiger — unter Bank, Firmen am 27.07.2016

Cover

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

Von Karim Geiger — unter Deutschland am 05.07.2016

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.

Passwörter

Von Karim Geiger — unter Ideas, Internet am 30.05.2016

Cover

Wer kennt sie nicht? Passwörter wie “123456”, “password” und “qwerty”. Dass das unsicher ist, muss man keinem sagen. Trotzdem werden sie so häufig verwendet, wie sonst keine.

Wieso? Ganz einfach. Weil den meisten Leuten Passwörter egal sind. Der Aufwand, sich ein komplexes Passwort zu merken, ist zu hoch, und die Daten, die sie schützen, sind es – ihrer Meinung nach – nicht wert geschützt zu werden. Ergo werden unsichere Passwörter verwendet, meist sogar eines für alle Dienste, bei denen man sich registriert.

Ein weiteres Problem bei den Passwörtern ist, dass Maschinen einfach viel zu gut im Raten sind. Früher war ein Schloss mit ein paar Zahlenkombinationen recht sicher, weil es Monate dauern würde jede Kombination auszuprobieren, und man dafür im Besitz des Gegenstands sein musste. Aber Computer sind dabei selbstverständlich schneller. In ein paar Minuten haben aktuelle Systeme einige Passwörter entschlüsselt. Und damit ist das Konzept des Passwortes meiner Meinung nach veraltet. Etwas Neues muss her.

Deswegen gibt es Two-Factor-Auth. Selbstverständlich bietet dieser Mechanismus einen weiteren Sicherheits-Layer, da nicht nur ein Passwort benötigt ist, sondern auch noch ein Einmalpasswort, welches meist per E-Mail oder SMS zugesandt wird. Toll! Zwei Passwörter, die man eingeben muss! Somit wird Two-Factor-Auth auch, sofern nicht Pflicht, nur von den Leuten verwendet, die sowieso schon ein sicheres Passwort vergeben. Gewonnen hat man dadurch also nicht wirklich viel, außer eine zusätzlich verschwendete Minute bei jedem Login.

Die Zeit ließe sich etwas verkürzen, wenn das Ganze per Push realisiert würde. Etwas, das für mich selbstverständlich ist. Ich verstehe einfach nicht, wieso Twitter die einzige Firma ist, die eine entsprechende Funktion implementiert hat. Während alle anderen Firmen einen meist sechsstelligen Code versenden, den man dann umständlich in die Login-Maske eintippen muss, sendet Twitter ganz einfach eine Benachrichtigung an das Smartphone mit der Meldung “xyz versucht, sich in Ihren Account einzuloggen. Zulassen? [Ja] [Nein]”. Klickt man auf Ja, wird die Login-Seite aktualisiert und man ist eingeloggt. Ein Wunder? Nein. Technik. Das Ganze ließe sich sogar per SMS in Verbindung mit einem Einmallink realisieren. Wieso also nicht? Ich verstehe es nicht.

Und dieser Punkt bringt mich einen Schritt weiter: Lasst das Passwort ganz weg. “OMG! IST DAS NICHT TOTAL UNSICH…” Nein. Lasst uns folgendes Szenario durchspielen: Ich habe ein unglaublich sicheres Passwort für meinen E-Mail-Account. Trotzdem wurde dieser gehackt und der Angreifer hat Zugriff darauf. Jetzt möchte er sich bei Service X anmelden. Das Passwort ist nicht das gleiche, und Two-Factor-Auth ist deaktiviert. Er drückt auf “Passwort zurücksetzen” und bekommt prompt eine Mail, mit der er das Passwort ganz einfach zurücksetzen kann. Der Angreifer kann sich nun bei Service X anmelden.

Jetzt dasselbe Szenario ohne Passwort, dafür aber mit Bestätigung des Logins via E-Mail: Der Angreifer, welcher Zugang zum E-Mail-Konto hat, gibt den Benutzernamen bei Service X ein, und bekommt einen Einmal-Link per E-Mail zugesandt, wodurch er sich nun einloggen kann. Im Endeffekt ist der Ablauf also genau gleich, nur muss der Angreifer nicht vorher noch ein neues Passwort vergeben. Sicherer wird es, wenn wir den Login-Request auf das Smartphone auslagern. Eine universelle App – ähnlich dem Google Authenticator – bekommt von Service X bei jedem Login-Request eine Push-Benachrichtigung, um den User zu fragen. Über das Interface der App kann man nun – nachdem man sich per Fingerprint authentifiziert hat – den Login bestätigen oder ablehnen. So muss der Angreifer Zugriff auf das Smartphone haben, und auch das gekaperte E-Mail-Postfach hilft hierbei nichts.

Die Vorteile:

  • Brute-Force-Angriffe auf Accounts können nicht mehr stattfinden
  • Gehackte Services können keine (gehashten) Passwörter mehr leaken
  • Social Engineering funktioniert nicht mehr
  • Der Nutzer kann keine unsicheren Passwörter mehr vergeben

Und wenn nicht jeder sein eigenes Süppchen kocht und es eine zentrale App dafür gibt:

  • Verliert man das Smartphone, könnte man sofort alle Zugriffe revoken.
  • Alle aktiven Logins können zentral in einer App eingesehen werden.

Die Nachteile:

  • (Smartphone benötigt/ließe sich aber auch per E-Mail oder SMS realisieren)
  • Wenn das Smartphone gehackt wird, und man es nicht merkt, ist es halt kacke
  • Obligatorische German Angst
  • Single Point of Failure

Anmerkung:

Ja, dieses Konzept ist nicht mit Two-Factor-Auth gleichzusetzen, da ein (gutes) Passwort selbstverständlich zusätzliche Sicherheit bietet. Allerdings wird Otto Normalverbraucher im Durchschnitt wesentlich seltener angegriffen werden können, da die Komponente des unsicheren Passworts einfach wegfällt. Selbstverständlich wäre es möglich, das Konzept entsprechend zu erweitern, um OPTIONAL noch ein Passwort pro Service zu fordern. Damit wäre man dann wieder bei Two-Factor-Auth, jedoch mit dem Passwort als optionalem Parameter. Das würde dann einen gewissen Basisschutz für alle bieten mit einer Option zur zusätzlichen Sicherheit für die Paranoiden unter euch.

Co-Anmerkung:

Dadurch würde auch die Anzahl der Promi-Leaks deutlich sinken, da diese meist nur durch Brute-Force-Angriffe oder Social Engineering stattfinden. Und selbstverständlich wären Hacker-Angriffe auf einzelne Services weniger dramatisch.

Bildquelle: Mr Wallpaper

Harman/Kardon – Die waren mal gut?

Von Karim Geiger — unter Firmen am 24.04.2016

Cover

Harman/Kardon ist nicht ganz unbekannt. Angeblich stand die Marke früher für Qualität und war ihren Preis wert. Heute kann ich das leider absolut nicht bestätigen. Ich habe mittlerweile den zweiten AVR von Harman/Kardon bei mir daheim stehen und bin mehr als enttäuscht.

Was darf man von einem AV-Receiver für 900 Euro erwarten? Gute Qualität? Guten Sound und gutes Bild? Features? Eine App, um das Gerät zu steuern? Support, der einen versteht? Software, die intuitiv ist? Eine Fernbedienung, die ohne Infrarot auskommt? Nun. Der Ton ist in Ordnung, und das automatische Justierungssystem funktioniert. Auch das Bild wird per HDMI einwandfrei übertragen. Aber das war es dann im Großen und Ganzen auch schon.

Kommen wir zu den einfachen Sachen, die für ein Gerät dieser Preisklasse selbstverständlich sein sollten. Wie sieht es aus mit WLAN? Ja, hat es. Allerdings nur 802.11b/g und das auch nur, wenn der Router direkt neben dem Gerät steht. Schon auf 4 Meter Entfernung im selben Raum ist die Verbindung so schwach, dass eine WLAN-Verbindung nicht mehr aufgebaut werden kann. Immerhin bietet das Gerät auch einen LAN-Port, womit sich die mangelhafte WLAN-Unterstützung umgehen lässt. Dazu gibt es sogar eine App für Android und iOS, welche es ermöglicht, den AVR zu steuern. Auf dem Papier klingt das natürlich toll. Leider ist die App nur eine Fernbedienung, welche nicht einmal dessen volle Funktionalität bietet. Außerdem ist es über die App weder möglich, einen Zustand abzufragen, wie z.B. die Lautstärke oder den aktuellen Kanal, noch den AVR einzuschalten. Nach einer Stunde im Standby-Modus schaltet das Gerät den Webserver, welcher für die API-Anbindung der App zuständig ist, nämlich vollständig ab. Das hat zur Folge, dass das Gerät nur noch per Infrarot-Fernbedienung eingeschaltet werden kann. Und wie das bei Infrarot üblich ist, funktioniert das nur, wenn man mit der Fernbedienung genau auf den Empfänger zeigt.

Ist der AVR dann aber einmal an, und die Verbindung zur App hergestellt, fehlt wie bereits erwähnt der Zustand. So kann man die Lautstärke nicht per Regler anpassen, sondern nur Schritt für Schritt per Knopfdruck. 10x auf “Leiser” gedrückt, sendet also 10x das Signal “Leiser” an den AVR. Da kommt Freude auf. Zumal das Verarbeiten der Anfrage vom AVR etwa eine halbe Sekunde in Anspruch nimmt. 10 Stufen leiser bedeuten somit also, wenn alles optimal läuft, 5 Sekunden lang auf den “Leiser”-Knopf wie ein Irrer zu hämmern.

Da ich aktuell dabei bin, meine Geräte in meiner Wohnung zu vernetzen, um ein Smart Home zu etablieren, muss selbstverständlich auch der AVR 370 von Harman/Kardon mit von der Partie sein. Mit der Prämisse, dass ja eine App existiert, begann ich also, die API des AVR in meine Heimautomatisierung zu implementieren. Leider ist die API nirgends dokumentiert (wie sich herausstellte aus gutem Grund). Somit blieb mir also nichts anderes übrig, als die App auseinanderzunehmen und die Requests per Wireshark abzufangen, um meine eigene API zu schreiben. Die API ist allerdings so schlecht implementiert, dass noch nicht einmal der HTTP-Standard vollständig eingehalten wurde, was die Entwicklung etwas schwieriger gestaltete. Zudem gibt sie wie eingangs erwähnt keinen Zustand zurück. Nicht einmal eine Antwort des Servers kommt. Man kann also weder feststellen, ob der Befehl ausgeführt wurde, geschweige denn auf welchem Kanal/auf welcher Lautstärke der AVR steht, oder ob er überhaupt an oder im Standby-Modus ist.

Nach kürzester Zeit fanden sich im Netz weitere Interessenten, welche ebenfalls Geräte von Harman/Kardon besaßen. Sie probierten aus, ob meine Implementierung der API bei ihrem Gerät funktionierte. Teilweise war das auch der Fall. Allerdings führten manche Befehle auf unterschiedlichen Geräten unterschiedliche Dinge aus. “sleep” führt auf BDS-Geräten z.B. zu einem sofortigen Standby, bei meinem AVR jedoch setzt es einen Sleep-Timer auf 10 Minuten. Beständigkeit hat also bei der Entwicklung dieser API keine Rolle gespielt.

Da eine API relativ wenig bringt, wenn man das Gerät nicht anschalten kann, fragte ich beim Support nach, was denn der Grund für das Abschalten des Webservers nach einer Stunde sei. Nach einigem Hin- und Her, weil man meine Anfrage eingangs nicht verstand, kam letzten Endes nur die Antwort, dass eine EU-Richtlinie es verbiete, im Standby mehr als 0,5 Watt zu verbrauchen und es technisch daher nicht möglich sei, den Webserver laufen zu lassen. Zumindest war das die Antwort, die ich verstand, da sie in fehlerhaftem Deutsch formuliert war und ich mir nicht sicher bin, ob man mich überhaupt komplett verstanden hat. Seltsam allerdings, dass unzählige Geräte keine Probleme mit einem Always-On-Webserver haben und auch Wake On LAN ist nicht unbedingt die neuste Erfindung.

Ich gab nicht auf, und dachte, dass vielleicht ein Firmware-Update das Problem lösen könnte. Doch dann kam der endgültige Grund für das Schreiben dieses Artikels: Nicht nur scheint ein Firmware-Update keine Lösung zu sein, nein, man bekommt es bei einem 900 Euro-Gerät anscheinend nicht einmal hin, ein einfaches Migrations-Script zu schreiben, welches die aktuellen Nutzereinstellungen auf die neue Software-Version anhebt. Denn: Installiert man ein Firmware-Update werden alle Einstellungen auf den Werkszustand zurückgestellt. Halleluja.

Mein Fazit lautet also: Finger weg von Harman/Kardon. Ever.

Bildquelle: Shaun Owyeong

Die richtige Programmiersprache

Von Karim Geiger — unter Development, Privat am 15.04.2016

Alles scheiße.

Aber was ist am wenigsten scheiße? Das hier soll kein Blogpost werden, der für irgendjemanden außer mir informativ oder weiterführend sein soll. Es ist lediglich ein Blogpost darüber, wie ich versuche eine neue Programmiersprache zu finden. Wenn ihr also eine Programmiersprache habt, von der ihr genau wisst, dass sie mir gefallen wird, dann gerne her damit. Entweder als Kommentar oder auf Twitter.

Folgende Programmiersprachen kommen für mich (wahrscheinlich) nicht infrage:

  • PHP – Verwende ich aktuell.
  • C# und alles mit .NET – Leider zu Microsoft-Lastig und damit für mich nicht geeignet.
  • Objective-C – Zu “besonders”.
  • Java – Zu unperformant und inkonsequent.
  • JavaScript/NodeJS – Ja genau :D
  • Python – Wirklich schön. Leider ist die Objektorientierung einfach total lieblos integriert.
  • Ruby – Syntaktisch nicht meins, außerdem zu modular.
  • Perl – Zu alt, syntaktisch unschön.
  • C und C++ – Zu systemnah.

Folgende Programmiersprachen könnten eventuell infrage kommen, ganz überzeugt bin ich aber nicht:

  • Go – Die Projektverwaltung gefällt mir nicht, und auch die enge Verknüpfung mit Modulen sieht nicht unbedingt vorteilhaft aus.
  • Swift – ???
  • Rust – ???
  • TypeScript – Frontend…

Und was soll das jetzt?

Weiß ich auch nicht. Aber ist das wirklich relevant?

Acer: Da kann man schon mal klatschen

Von Karim Geiger — unter Firmen am 06.04.2016

Cover

Normalerweise sind solche Überschriften bei mir ja sarkastisch gemeint. Heute aber nicht. Ich meckere gerne mal, wenn eine Firma inkompetent ist oder der Support den Namen mal wieder nicht verdient hat. Aber ich kann auch loben. Und das möchte ich heute tun.

Vor etwa viereinhalb Jahren habe ich mir von Acer einen Projektor gekauft, der seitdem ordentlich bei mir daheim im Einsatz ist. Er hat schon die zweite Lampe hinter sich und bisher immer gute Dienste geleistet. Plötzlich passierte dann jedoch das Unvermeidliche. Der DLP-Chip fing an in die Jahre zu kommen und innerhalb weniger Wochen gleichte eine Hälfte des Bildes einem Sternenhimmel. Die Pixelfehler zeigten, dass die Tage des Beamers gezählt sind.

Ohne große Hoffnungen kontaktierte ich daraufhin den Acer-Support und fragte nach, ob sich bei dem 4,5 Jahre alten Gerät noch etwas auf Kulanz machen lässt oder ob man mir eventuell auf ein Neuprodukt Rabatte geben könne. Zu meiner Überraschung fand der nette Support-Mitarbeiter heraus, dass der DLP-Chip selbst 5 Jahre Garantie Seitens des Herstellers Texas Instruments hat und ich das Gerät einschicken könne.

Gesagt, getan. Obwohl mir beim Beantragen des Retourenscheins gemeldet wurde, dass die Garantie des Projektors abgelaufen sei und man mit einem Kostenvoranschlag auf mich zukommen würde, sobald das Gerät im Reparaturcenter eingetroffen ist, wurde mein Projektor ohne Umschweife repariert. Komplett kostenlos. Auch der Versand wurde von Acer übernommen. Doch auch die Bearbeitungszeit war erstaunlich. Nach nur zwei Tagen im Acer-Center machte sich das Gerät schon wieder auf den Weg heim und leistet mittlerweile wieder einwandfreie Dienste.

Abschließend bleibt also nur zu sagen, dass ich von Acer sehr positiv überrascht bin. Mit dieser Aktion haben sie somit einen weiteren Kunden gewonnen, der auch in Zukunft bei Acer-Produkten bleiben wird.

Google Kalender Self-Hosted?

Von Karim Geiger — unter Google, Internet am 10.02.2016

Kennt ihr den Google Kalender? Höchstwahrscheinlich. Es ist ein simpler Web-Kalender, welcher sich über das Google-Konto mit sämtlichen Clients synchronisieren lässt.

Möchte man nun aber nicht so abhängig von Google sein, liegt es nahe, eine solche Lösung auf dem eigenen Server zu implementieren. Die erste Software, die einem dazu einfällt, dürfte ownCloud sein. Diese unterstützt nicht nur das Speichern von Dateien, sondern auch die Verwaltung von Kontakten, sowie Kalendern, inklusive WebDAV, CalDAV und CardDAV-Sync, sowie einer Web-Oberfläche.

Leider fehlt bei der Kalender-Komponente eine (für mich) wichtige Sache. Interessanterweise ist mir kein Programm bekannt (und ich habe in letzter Zeit einige durchprobiert), welches diese Problematik aufs Korn nimmt. Wenn du also nach dem Lesen dieses Posts eine Alternative für den eigenen Server kennst, wäre ich dir über einen Kommentar sehr dankbar.

Stellt euch folgendes Szenario vor: Ihr habt einen Kalender für eure privaten Termine, und einen Kalender für berufliche Termine. Soweit lässt sich selbstverständlich alles über ownCloud und co. abbilden. Nun kommen aber zwei weitere Kalender hinzu: Der ical-Feed für die Feiertage in eurem Bundesland, sowie der ical-Feed der Firma. Diese können entweder ganz einfach über den Google Kalender abonniert werden, oder müssen bei jedem Client einzeln aktiviert werden. ownCloud und co. bieten keine Möglichkeit, externe Kalender zu abonnieren, und diese per CalDAV weiterzureichen. Das hat zur Folge, dass ich, nachdem ich einem weiteren Kalender beigetreten bin, diesen an all meinen Geräten synchronisieren muss.

Meine Frage ist daher: Warum kann Google das, und warum gibt es keine Alternative? Es kann doch nicht sein, dass ich der erste bin, den das stört.

Auf gut Glück!

Von Karim Geiger — unter Google, Internet am 05.12.2015

Cover

Google hatte mal ein Feature, das zur damaligen Zeit von etwa einem Prozent der Nutzer verwendet wurde. Die Rede ist von I’m feeling lucky – oder auf Deutsch: Auf gut Glück!

In Zeiten von JavaScript und AJAX hat natürlich auch Google das Angebot angepasst. Wenn man überhaupt über die Startseite des Suchdienstes sucht, fängt dieser schon ab dem ersten Buchstaben an die Ergebnisseite zu laden. Die Funktionen der beiden Buttons ist damit nur noch theoretisch gegeben und auch nur aus diesem Grund noch präsent. Sie bilden und repräsentieren die Marke Google. Die Website mit dem Logo, dem Suchfeld und den zwei Buttons.

Doch mal im Ernst: Wer hat den Button wirklich verwendet, als er noch funktionierte? Der ein oder andere hat ihn vielleicht für Spielereien wie “elgoog” eingesetzt, aber das dürfte es dann auch schon gewesen sein. Statistiken zufolge haben nur etwa 1% aller Google-Nutzer diese Funktion verwendet. Somit ist es nur einleuchtend, dass besagtes Feature nicht mehr wirklich existiert.

Allerdings ist das nicht ganz richtig. Auch, wenn der Button nicht mehr verwendbar ist, existiert die Funktion intern bei Google noch. Aufgebaut ist das Ganze so: Wenn sich der Algorithmus sicher ist, dass das Ergebnis vielversprechend ist und die erste Seite dem Nutzer zusagt, wird dieser automatisch auf den entsprechenden Treffer weitergeleitet. Man spart sich somit also die Suchergebnisse und den Klick auf den ersten Link. Sollte Google aber keinen genauen Treffer erzielen, so hat man kein “Glück” und landet dennoch auf der Seite mit den Suchergebnissen.

Dank der Chrome-Erweiterung Lucky Strike, welche nichts mit der gleichnamigen Zigarettenmarke zu tun hat, wird der Auf gut Glück!-Button wieder zum Leben erweckt. Leider wurde sie, vermutlich aufgrund des Namens, aus dem Google Web Store entfernt, weswegen man die Erweiterung nun manuell laden muss. Nach der Installation hat man aber dann die Möglichkeit, die dazugekommene Suchmaschine als Standard für die Omnibox-Suche festzulegen. Und dann kann es auch gleich schon losgehen. Die Suchresultate werden ab jetzt bei einem Treffer sofort übersprungen und man selbst wird auf die richtige Website geleitet. Und sollte Google doch einmal mit dem Raten des Ergebnisses falsch liegen, wie etwa, wenn man nach “Lucky Strike” sucht, dann bietet die Erweiterung einen ganz einfachen Trick:

Durch drücken der Tastenkombination Alt+L, oder des Icons der Erweiterung, wird die vorherige Suchanfrage einfach ganz normal an Google gesendet und man bekommt wie gewohnt eine Auflistung der Ergebnisse.

Aber das klappt bei mir nicht. Ich drücke meistens nicht auf das erste Ergebnis.
Du musst nicht mein Wort dafür nehmen. Probieren geht über studieren. Du wirst überrascht sein. Auf gut Glück!

Bild: JovicaSmileski

Von Bussen und Taxis – Netzneutralität erklärt

Von Karim Geiger — unter Deutschland, Internet, Provider am 29.10.2015

Cover

“Das ist mir alles zu hoch. Die machen das schon.” – Diese Sätze hört man immer wieder, gerade wenn es um das Neuland Internet geht. Und das ist verständlich. Das Internet ist kompliziert, existiert vergleichsweise seit einer sehr kurzen Zeit und ist immer noch in der Entwicklungsphase, in der sich sehr schnell sehr viel ändert.

Da ist es nur normal, wenn sich der Durchschnittsbürger zurückzieht. Mehr als E-Mail, ein bisschen Surfen und Netflix macht er ja sowieso nicht. Ich würde genau so handeln. Es gibt sehr viele Bereiche, für die ich mich nicht interessiere und mit denen ich mich nicht beschäftige. Schließlich kann ich auch nicht alles wissen und überall auf dem aktuellen Stand bleiben. Das ist für eine Person einfach nicht möglich. Als professioneller Nerd ist mir allerdings gleichzeitig auch wichtig, dass sich der normale Mensch mit dem Internet auseinandersetzt. Es ist mittlerweile keine Trenderscheinung, die bald wieder Geschichte ist und auch nicht mehr nur eine Randgeschichte. Das Internet ist überall und ohne würde nichts mehr funktionieren. In den folgenden Zeilen möchte ich daher die Vor- und Nachteile der Netzneutralität und des neuen EU-Entschlusses verständlich erklären, da es in Zukunft jeden treffen wird.

Nicht umsonst wird das Internet oft mit einer Daten-Autobahn verglichen. Vorstellen kann man sich das als ein großes Netz aus vielen Straßen und Abzweigungen. Jeder Computer ist mit jedem verbunden. Der eine kann schneller erreicht werden, der andere ist etwas weiter entfernt. Zur Veranschaulichung existieren aktuell, im neutralen Netz nur Busse, die jede Person gleich schnell an das Ziel bringen. Ganz egal, ob diese Person nun wenig Geld für den Internetanschluss zahlt, oder viel. Natürlich ist die Anzahl der verfügbaren Busse je nach Anbindung unterschiedlich. So stehen einem Heim-Anschluss mit 16 Mbit/s weniger Busse gleichzeitig zur Verfügung als einem Firmen-Anschluss mit 1000 Mbit/s.

Mit dem neuen Entschluss des EU-Parlaments, welcher vor ein paar Tagen etabliert wurde, kommen zu unserem Modell nun auch Taxis hinzu. Diese haben selbstverständlich den Vorteil schneller an das Ziel zu kommen, ganz unabhängig von der Quantität. Im Internet wird das durch eine Priorisierung erzielt. Sind die Autobahnen zu Stoßzeiten, zum Beispiel abends, wenn alle von der Arbeit heim kommen, voll, kommt es zu einem Stau. Fährt nun ein Taxi vor, so müssen die Busse rechts ranfahren und das Taxi durchlassen, bevor sie weiterfahren dürfen. Dadurch verzögert sich die Ankunftszeit des Busses selbstverständlich.

Durch dieses Konstrukt haben wir nun die aktuelle und zukünftige Lage des Internets aufgebaut. Nun betrachten wir einmal die Vor- und Nachteile der jeweiligen Situationen. Der erste Unterschied dürfte ganz klar sein. Mit dem ersten Konstrukt ist jeder gleichberechtigt. Egal, ob es eine kleine Firma ist, oder ein großes Unternehmen. Jeder kommt gleich schnell an sein Ziel. Im zweiten Modell ist das schon anders. Wer mehr Geld hat, kann sich mehr Taxis kaufen, die er dem Nutzer, der seinen Dienst besuchen möchte, vorbeischicken kann. Dadurch kommt dieser dann schneller an sein Ziel. Andersrum funktioniert das natürlich auch: Mit einem Aufpreis kann der Nutzer selbst Taxis bestellen, welche ihn ebenfalls schneller an das Ziel bringen.

Hier scheiden sich die Geister. Während die eine Gruppe einen Vorteil in den Taxis sieht, ist die andere gegen eine Bevorzugung der Besserbezahler. Gerade bei kleinen Unternehmen könnte das zu einem Problem werden: Angenommen ein relativ kleiner Dienst, wie zum Beispiel Watchever, möchte sich gegen Netflix etablieren. Aktuell bekommt jeder Nutzer die Videos gleich schnell zugestellt. Egal, ob man nun auf Netflix einen Film ansieht, oder sich auf Watchever eine Serie anguckt, beide Filme werden gleichschnell geladen. Zu Stoßzeiten kann es nun zu Staus kommen, was bedeutet, dass das Video bei beiden Anbietern ruckelt und immer wieder pausiert wird. Mit der Abschaffung der Netzneutralität könnte nun zum Beispiel Netflix reihenweise Taxis für seine Nutzer kaufen, welche ein ruckelfreies Video auch zu Stoßzeiten garantieren, während Watchever sich das vielleicht nicht leisten kann. Andersrum könnte Watchever aber auch einen Deal mit dem Internet-Anbieter vereinbaren, welcher für den Nutzer gegen einen Aufpreis Taxis garantiert, während Netflix keine Taxis bekommt und die Nutzer weiter per Bus angekarrt werden müssen. Das schafft je nach Geschäftslage ein Ungleichgewicht im Markt.

Aktuell ist dies sogar schon teilweise der Fall. So hat Spotify zum Beispiel einen Vertrag mit der Telekom geschlossen. Wer einen Aufpreis zahlt, bekommt das durch Spotify verbrauchte Datenvolumen nicht berechnet, während andere dafür bezahlen müssen. Da das neue Gesetz diese Taktik befürwortet, könnte dies allerdings nun die Regel werden. Selbstverständlich kann es nun auch sein, dass die Bus-Strecken absichtlich verkleinert werden, sodass Taxis noch schneller ankommen und Busse absichtlich lange warten müssen.

Die Gegenseite der Argumentationskette vertritt aktuell die Telekom. Dort schreibt man, dass es wichtig ist, kleine Unternehmen zu stärken. Und auch diese Seite hat selbstverständlich nicht ganz unrecht. Große Unternehmen können sich in jedem Land einen Standort leisten, um die Entfernung zum Nutzer, der mit Bussen fährt, zu verringern. Kleine Firmen jedoch haben nicht das nötige Kleingeld um sich diesen Luxus zu gönnen und müssen oft lange Strecken zum Nutzer in Kauf nehmen. Gegen einen kleinen Anteil am Umsatz des Unternehmens möchte Telekom daher für kleine Firmen Taxis anbieten, welche die lange Strecke durch erhöhte Priorität ausgleichen sollen.

Meiner Meinung nach ist die Aufhebung der Neutralität trotzdem ein sehr heikles Thema. Die Vergangenheit hat oft genug gezeigt, dass im Endeffekt immer die großen Firmen gewinnen und somit am meisten aus den Taxis profitieren werden, während kleine Unternehmen weiter mit den langsamen Bussen auskommen müssen. Im Einzelfall kommt es nun also darauf an, wie die Gerichte entscheiden. Vorausgesetzt die kleinen Firmen können sich große Anwälte leisten.

Titelbild: CC by Backbone Campaign @Flickr