Tag 152/2016: NoSQL? A Twitter hashtag to advertise a single meeting

Es muss ja nicht immer Tatort oder Bundesliga sein: Der allseits bekannte Martin Fowler über NoSQL auf der goto; conference:

Mitzunehmen: Die grobe Unterscheidung der Datenbanken in Hinsicht auf deren Orientierung auf Dokumente, Spalten-Familien, Graphen oder Schlüssel-Werte-Speicher; die Verwendung impliziter Schemata, trotz „Schemalosigkeit“; ihre Eignung vor allem in Cluster-Umgebungen; die Besonderheiten der Graphen-Datenbanken, deren Datenmodell nicht an Aggregaten orientiert ist, sondern an Beziehungen; die Entscheidung für oder gegen eine DB anhand der Art, wie man Abfragen gestalten wird bzw. gestalten muss; Graph-Datenbanken setzen ebenfalls das ACID-Konzept um; Version-Stamp-Ansatz um bei SQL- wie NoSQL-Datenspeichervorgängen Konflikte zu vermeiden; der Zielkonflikt zwischen Konsistenz und Verfügbarkeit auf partitionierten Systemen – Du kannst nicht beides haben; dies ist nicht nur eine technische, sondern auch geschäftliche Entscheidung.

Allgemeine Gründe für eine NoSQL-Entscheidung? Große Datenmengen, die sich nicht mehr gut auf nur einer Maschine speichern lassen (die Datenmengen werden zukünftig für Unternehmen und Projekte eher größer); viele Projekte profitieren davon, Beispiel „natürliches Aggregat Artikel-Objekt“, Versprechen eines einfacheren Entwicklungsansatzes; Maskieren/Verstecken der Datenbank hinter (Micro-)Services bzw. Applikationen, Wegfall der Datenbank als Integrations-Datenbank; Data-Warehouse versus Agile-Analytics-Ansätzen.

Werden die SQL-Datenbanken zugunsten der NoSQL-Datenbanken wegfallen? Vermutlich nicht. Es wird eher ein Nebeneinander spezialisierter Datenbanken für die verschiedenen Szenarien geben, z.B. Graph-Datenbank für das Empfehlungssystem, SQL für Finanztransaktionen, Dokument-orientierte NoSQL-DB für Produktkataloge usw.

Thanks Martin, nice talk.

Tag 150/2016: Link-Liste Blockchain

Das Blockchain-Konzept verspricht manipulationssichere Transaktionen, intelligente Verträge, fälschungssichere elektronische Wahlen und mehr –  auf verteilten, von allen Beteiligten einsehbaren Systemen. Die Auswirkungen der auf dem Konzept basierenden Erfindungen könnten „disruptiv“ sein, weil sie in fast allen Branchen bzw. Situationen den Mittelsmann und seine Dienstleistungen und Provisionen überflüssig machen. Fast alle großen Banken beschäftigen sich deshalb bereits mit dem Thema; aber auch für andere „Nachweisinstanzen“ wird es in naher Zukunft relevant werden, z.B. Makler, Notare oder Controller.

Eine willkürliche Sammlung von Links mit zum Thema:

 

Tag 144/2016: Google I/O 2016 Recap

Sagt Wikipedia:

Google I/O ist eine Entwicklerkonferenz von Google, die jährlich im Moscone Center in San Francisco, Kalifornien stattfindet. Erstmals fand die Google I/O im Jahr 2008 statt. I/O steht dabei sowohl für Innovation in the Open als auch für Input/Output (Eingabe und Ausgabe).

Aber lassen wir Marques Brownlee zu Wort kommen und uns die Kurzfassung vortragen:

Wer Zeit und Lust hat, hier sind alle Themen:

Tag 141/2016: Docker, Blitze

Docker für MAC, vorgestern Beta-Test-Einladung bekommen, heute kam der Invitation-Code dafür.

Sieht gut aus, soweit. Endlich Docker nativ laufen lassen! Zuerst die alten DOCKER_* Umgebungsvariablen aus der Bash entfernt, die noch aus den Boot2Docker-Zeiten stammen, danach funktioniert das docker-Kommando. Die nächsten Tage ein bisschen damit spielen und prüfen, wieviel „Beta“ im Beta-Produkt steckt.

Bildschirmfoto der Docker-Einstellungen

Yay, Lightning-Sensor! Auch kurz ans Verkabeln gemacht. Sensor ans Breadboard, ein paar Kabel raus und… erstmal googeln müssen, weil mir die Pin-Belegung nicht so ganz klar war. Aber, Glück auf, es hat auf Anhieb funktioniert. Sensor wurde erkannt, Demo-Script funktioniert. Jetzt fehlt nur noch ein echtes Gewitter. Und mir noch das Verständnis, warum viele der Anleitungen die Scripte immer mit Root-Rechten laufen lassen.

Tag 126/2016: Vatertag

Was für ein Vatertag! Bis auf das Wetter. Aber egal.

Beim Stöbern auf der 5. Mai-Seite auf Wikipedia fielen mir ein paar Nobel-Preisträger auf, u.a. Henryk Sienkiewicz, polnischer Schriftsteller, geboren am 5. Mai 1846. „Aufgefallen“, weil ich durch Zufall und 3 Umwege letzte Woche auf die API von nobelprize.org gestoßen bin.

Also kurz gegengecheckt:

#!/usr/bin/env python

import requests

r = requests.get('http://api.nobelprize.org/v1/laureate.json?bornDate=18460505')

for laureates in r.json()['laureates']:
 for k,v in laureates.iteritems():
   print k, ' --> ', v

Und Bingo:

surname --> Sienkiewicz
firstname --> Henryk
gender --> male
diedCity --> Vevey
diedCountryCode --> CH
diedCountry --> Switzerland
born --> 1846-05-05
bornCountry --> Poland
bornCity --> Wola Okrzejska
prizes --> [{u'category': u'literature', u'affiliations': [[]], u'motivation': u'"because of his outstanding merits as an epic writer"', u'share': u'1', u'year': u'1905'}]
id --> 575
died --> 1916-11-15
bornCountryCode --> PL

Because of his outstanding merits as an epic writer.

 

Tag 124/2016: Ansible auf Maschinen mit Ubuntu 16.04

Ansible benötigt Python 2.x. Bei neueren OS wie Ubuntu 16.04 ist aber Python 3.x per Default installiert.

Sagt Ubuntu:

Python2 is not installed anymore by default on the server, cloud and the touch images, long live Python3! Python3 itself has been upgraded to the 3.5 series.

Die Lösung liegt darin, vor dem eigentlichen Lauf des Playbooks ein adhoc-Kommando abzusetzen, das die benötigten Pakete für den Ansible-Lauf installiert:

ansible myhost --sudo -m raw -a "apt-get install python2.7 python-simplejson"

Hat man ein größeres Inventar (z.B. in Datei „my_inventory“), kann man diese Aktion natürlich auch für alle Server einer Gruppe machen, nennen wir diese z.B. „cluster“:

ansible -i my_inventory cluster -m raw -a "apt-get install python2.7 python-simplejson"

Die Core-Module von Ansible sollten damit dann laufen. Die eigenen Rollen bzw. Tasks müssen aber ggf. noch an das neue Betriebssystem-Release angepasst werden, d.h. mit ein paar „when“-Konditionen kann man die notwendigen Abweichungen konfigurieren:

- name: Do something specific on 16.04 machine
  ... Modul/Kommando ...
  when:
    (ansible_distribution == 'Ubuntu' and ansible_distribution_release == 'xenial')

Das Distribution-Release lässt sich auf der Konsole mit „lsb_release -a“ herausfinden (Ubuntu 16.04 „Xenial Xerus“, englisch für gastfreundliches Borstenhörnchen). ansible_distribution und ansible_distribution_release sind Variablen, die Ansible je Host zu Beginn im SETUP-Task setzt.

Oder gleich mehrere Tasks in einer Datei ausgelagert, indem die Abfrage mit dem include-Statement kombiniert wird:

- include: setup-Ubuntu1604.yml
  when:
    (ansible_distribution == 'Ubuntu' and ansible_distribution_release == 'xenial')

Finde ich stabiler, als den Namen der Include-Datei gleich aus den Variablen interpolieren zu lassen.

Tag 123/2016: Zeiten, Limits, Grenzen

Ted Mosby, Architekt, sagte einmal:

Nach 2 Uhr nachts passiert nichts Gutes.

Als wir in der Altstadt wohnten, gab es die Regel: Wenn du mit dem Auto 30 Minuten einen Parkplatz gesucht hast, musst du sofort die Suche einstellen, ins Parkhaus fahren und die teure Nachtgebühr bezahlen. Wenn nicht, kann die Suche auch 2-3 Stunden dauern. Und am Ende trotzdem im Parkhaus enden.

Beim Programmieren kristallisierte sich die letzten Jahre die goldene Stunde heraus: Wenn eine Aufgabe nicht innerhalb von einer Stunde lösbar ist, pfeif dir eins, denn an diesem Tag wirst du an nichts anderem mehr arbeiten.

Es kann helfen, die Aufgabe dann diametral anzugehen. Heute habe ich 2,5 Stunden versucht, aus einem PPA (Personal Paket Archive) eine neuere Paket-Version als die mitgelieferte des Betriebssystems zu installieren. Führte zu massig Folgefehlern. Hingegen dauerte es ungefähr genauso lange, gleich den ganzen Rechner mit Ansible und hunderten Klein-Konfigurationen auf das aktuelle Betriebssystem-Release zu hieven.

Good night and good luck, Dampfhammer.

 

Tag 120/2016: Ähnlichkeiten zu Slack sind rein zufällig

Slack („a messaging app for teams“) hat/haben ja gerade einen Lauf. Immer mehr Teams nutzen es, um ihre Kommunikation im Web, auf dem Desktop und Mobil zu erschlagen; darunter einige bekannte Namen.

Wer etwas mehr Kontrolle über seine Daten will, sollte sich Mattermost ansehen. Die betriebssystemübergreifende Desktop-App ist auch mit Electron verpackt, es gibt auch eine Smartphone-App und auch eine Webanwendung (3 x „auch“). Die Clients sehen sich sehr ähnlich.

Die Kontrolle über seine Daten erkauft man sich aber mit der Arbeit, selber alles zu installieren, abzusichern und aktuell zu halten. Wer das kann, für den ist es sicherlich eine interessante Alternative.

Tag 109/2016: Machine Learning Course CS 156

Ok, dieser Post dient mir nur als erweitertes Lesezeichen für versonnte Sommertage, an denen man sich am liebsten ins Hausinnere zurückziehen will (denn, wie mal jemand auf MTV gesagt hat: „Die Sonne ist so weit weg, aber mir ist trotzdem heiß“).

Dankenswerterweise hat die Technische Hochschule Kaliforniens einen Kurs zum Maschinellen Lernen ins Netz gestellt:

Tag 91/2016: Instant coding answers via the command line

Warum den Webbrowser bemühen, wenn man ein hilfreiches Ergebnis auch gleich von der Kommandozeile aus erhalten kann?

howdoi ist ein witziges Pythonscript, das per Default die erste Antwort auf die gestellte Frage auf Stackoverflow sucht und ausgibt.

Ok, ihr kennt es natürlich alle schon – aber falls nicht, einfach mal ausprobieren.

Es lohnt sich, die Frage zu variieren, um weitere Antworten zu erhalten, die Fragen werden ja auch auf Stackoverflow (leider) oft redundant gestellt. Das Argument -a gibt den ganzen Antworttext aus und -n 3 beispielsweise die ersten drei Antworten.