Erste Benchmarks für Apples M1 Prozessor sind da

Da hat Apple mit dem M1 was ziemlich heftiges rausgehauen. Die ersten Benchmarks zeigen, dass das Macbook Air (passiv gekühltes Einsteigergerät) mit dem neuen M1 Chip das am besten ausgestattete Macbook Pro 16″ in nahezu allen Kategorien schlägt. Man kann sich ausmahlen was dann die neuen Macbook Pros die hoffentlich im Frühjahr kommen leisten werden 😱

Quelle: https://browser.geekbench.com/v5/cpu/compare/4652635?baseline=4648107

curl output anpassen

Wenn du den Output von Curl anpassen willst, um z.B. nur zu schauen, welcher http Code zurückgeben wird oder nur schauen möchtest, wie lange das laden der Seite gedauert hat, dann kannst du mit der Option “-w” genau das tun:

curl -s -w "%{http_code} - %{time_total}\n" -o /dev/null [URL]

In diesem Beispiel war der http Status 200 und die Seite hat 0.08s zum Laden benötigt.

docker-compose Setup ist von anderen Containern nicht erreichbar

Folgende Situation:

Du hast auf einem Docker Host diverse Container laufen, die teilweise auch untereinander kommunizieren. Nun möchtest du per docker compose ein paar weitere Container hinzufügen. Und dann bemerkst du, dass diese Container von den “alten” Containern (z.B. einem nginx Proxy) nicht erreichbar sind, weil docker-compose diese automatisch in ein eigenes Network packt.

Um das Problem zu lösen, ist die einfachste (wenn auch nicht schönste) Variante, dass die docker-compose container auch im “default” Netzwerk (“bridge”) teilnehmen. Dazu muss man einfach für jeden Container/Service der Eintrag

network_mode: bridge

Damit die Container aus der docker-compose Datei sich auch noch untereinander sehen können, kann man sie ganz klassisch per

link:

Annotation zusammenführen.

Fotorealismus mit der Unreal Engine 4

Mir fehlen die Worte! Dieses Video wurde mit der unreal engine 4 gerendert. Sprich, theoretisch könnten spiele zukünftig so aussehen.

Die Landschaft wurde auf Island mittels 3D Scanner erfasst, und dann wurde mit den Engine nachgebaut. Ein Meisterwerk!

 

Pinch Geste in iTerm2 deaktivieren

Im großartigen MacOS Terminal Programm iTerm2 gibt es ein sehr lästiges Feature, mit welchem man mittels Trackpad-Pinch-Geste (also die aufziehende Geste zum Vergrößern von Bildern z.B.) die Schriftgröße des aktuellen Terminals verändert. Leider gibts dafür auch keine direkte Einstellung, aber wenigstens ein hidden Setting. Und das aktivierst du so:

  1. Öffne die “terminal” Applikation
  2. gib folgenden Befehl ein:
    defaults write com.googlecode.iterm2 PinchToChangeFontSizeDisabled -bool true

     

Grundlagen zu Blockchain und Bitcoin für Einsteiger

Als Informatiker beschäftige ich mich sehr vielen verschiedenen Themen und habe natürlich auch ein sehr breites Interessengebiet. Ich belese mich ständig, aber natürlich kann man sich nicht überall zu 100 % auskennen. Und an diesem Punkt driften wir in das sehr gefährliche Gebiet des Halbwissens ab.

So ging es mir auch beim Thema Blockchain und im genaueren Bitcoin. Nun, da es in aller Munde ist und selbst Taxifahrer mittlerweile zu Investitionsexperten in diesem Gebiet mutiert sind, möchte ich diesen Artikel nutzen, um selbst ein bisschen Licht ins Dunkel zu bringen und damit mein Halbwissen zu beseitigen.

Wichtig: ich schreibe diesen Text nach bestem Wissen und Gewissen, kann aber keine Garantie für die Richtigkeit meiner Angaben geben. Wenn ihr Korrekturen habt, dann schreibt doch bitte einen Kommentar und ich versuche das dann zeitnah auch im Artikel zu korrigieren.

Warum braucht man Bitcoin und was hat die Blockchain Technologie damit zu tun?

Zu Beginn der Geschichte waren alle Menschen Selbstversorger. Nach einiger Zeit begann man, sich in Gruppen zusammenzurotten, in der jeder verschiedene Aufgaben übernahm. Das entwickelte sich über große Zeitspannen zu Städten, in denen man statt direkter Zusammenarbeit irgendwann Tauschhandel betrieb. Sprich: „ich gebe dir eine Ladung Mehl, dafür bekomme ich von dir eine Fuhre Äpfel“ usw.

Prinzipiell klappte das ganz gut, allerdings hatte dieses System große Nachteile für Hersteller saisonaler Waren, die nicht das ganze Jahr über tauschen konnten. Zusätzlich kam die Schwierigkeit dazu, dass man bestimmte Dinge benötigte, der entsprechende Tauschpartner allerdings keine Verwendung für die eigenen Güter hatte.

So begannen sich Schuldscheine zu etablieren, mit einem großen Vorteil: der Schein könnte wiederum auch gegen Waren eingetauscht werden. Und all das basierte auf einem ÄUßERST wichtigen Prinzip: Vertrauen. Nur, weil alle das Vertrauen hatten, dass der Schuldschein auch eingelöst werden kann, konnten diese überhaupt weitergereicht werden.

Auf diesem Prinzip basiert auch heute noch unser komplettes Bankensystem. Statt die Schuldscheine tatsächlich einzulösen, wurden diese irgendwann mehr oder weniger dauerhaft als Sicherheit für weitere Tauschgeschäfte genutzt. Aus diesem Prinzip ist letztendlich das Geld geworden, wie wir es heute kennen.

Papiergeld und Münzen sind letztendlich nichts anderes als Schuldscheine auf Gold. Als sich Banken etablierten, lagerten diese Gold in ihren Tresoren ein und gaben so viel Geld aus, wie im Gegenwert Gold im Keller lag. So stellen sich die meisten Leute noch immer das Bankensystem vor, jedoch sind wir an irgendeiner Stelle zu einer sehr kritischen Wendung gekommen: die Banken fingen an, mehr Geld auszugeben als Sicherheiten im Keller vorhanden wahren. Sie taten und tun das noch immer auf der Grundannahme, dass ja nie alle Leute gleichzeitig kommen würden, sich Ihr Geld in Gold umtauschen zu lassen.

Somit wurde praktisch das unendliche Geld erfunden. Vielleicht mag das in der heutigen Zeit notwendig zu sein, aber ist bringt auch viele Nachteile mit sich. Zum einen ist man grundsätzlich von einzelnen Institutionen sowie dem Staat abhängig. Diese entscheiden, wie viel Geld im Umlauf ist und steuern damit auch dessen Wert – Stichwort Inflation. Hinzu kommen natürlich auch die Sicherheit sowie freier Zugang zum eigenen Geld. All dies liegt in den Händen weniger.

Und nun kommen wir endlich zu Bitcoin bzw. Cryptowährungen im Allgemeinen. Das ganz große Versprechen, dass diese mit sich bringen, ist Unabhängigkeit und ganz wichtig: Dezentralität. Mittels der Blockchain Technologie wird ermöglicht, dass das System der Cryptowährungen nicht auf wenigen zentralen Systemen liegt, sondern auf sehr viele Systeme verteilt wird. Denn das funktioniert nur, wenn man sicherstellen kann, dass keine Daten auf einzelnen Systemen verändert werden können, ohne dass die anderen Teilnehmer des Netzwerks das mitbekommen.

Und nun möchte ich ins Detail gehen:

Blockchain

Das Internet an sich war das erste echte große und globale dezentrale Netz. Die Idee dahinter war immer, dass es so robust ist, selbst einen Atomkrieg zu überstehen und eben nicht von wenigen zentralen Systemen abhängig zu sein.

So gut die Idee auch war, so hatten die Macher scheinbar nicht damit gerechnet, dass innerhalb dieses dezentralen System dann doch wieder zentrale Systeme wie Facebook, Amazon, Google und co entstehen. Diese Art von System wachsen so lange an, bis sie eine derart kritische Masse an Usern oder auch Gütern beinhalten, dass niemand mehr um sie herum kommt. Diese Art von Größe kann man nur mit entsprechenden Mitteln und technischem Know How umsetzen.

Die Blockchain Technologie wurde entwickelt, um ähnlich große Systeme umsetzen zu können, dabei aber komplett dezentral zu sein.

Wie der Name schon sagt, besteht das Ganze aus einer Kette von Blöcken. Innerhalb eines solchen Blockes können beliebige Daten liegen. Zusätzlich hat jeder Block einen sogn. Header, sprich so eine Art Kopfzeile. Dieser Header enthält einen Hash, also eine Checksumme, des Blocks um zu verifizieren, dass beide zusammen gehören.

Dazu ein kurzer Exkurs zu Hashes bzw. Checksummen: Einfach gesagt nimmt man z.B. Text oder beliebige binäre Daten/Dateien, führt darauf eine mathematische Operation aus, die dann z.B. in einem 40 Zeichen langen Text endet. Diese Operation kann man beliebig oft wiederholen, beim gleichen Ausgangs-Inhalt wird immer wieder der gleiche Hash herauskommen. Sobald man nur ein einzelnes Zeichen im Ausgangstext/Inhalt ändert, kommt ein komplett anderer Hash heraus. Aber: in der Regel wird nie bei zwei verschiedenen Ausgangsinhalten der exakt gleiche Hash herauskommen. Sprich, ein Hash ist einmalig.

Diese mathematische Methode wird also auf den Inhalt des Blocks angewandt und das berechnete Ergebnis im Header gespeichert. Somit kann man immer zweifelsfrei beweisen, dass der zugehörige Block unverändert ist – denn das Ergebnis der Berechnung wird immer wieder exakt diesen Wert ergeben, sofern nichts verändert wurde. Anschließend wird für den Header auch noch ein Hash erzeugt.

Nun haben wir das erste Element der Kette. Fügt man dieser nun einen zweiten Block hinzu, wird wieder der Hash für den Inhalt berechnet, ein neuer Header inkl. des Hashes angelegt und, das ist jetzt wichtig, ausserdem ein Hash für den VORHERIGEN Header im neuen Header hinterlegt.

Von nun an wird jeder hinzugekommene Block in der gleichen Art und Weise angelegt. Um das Ganze zu visualisieren, hier die entsprechende Grafik aus dem Blockchain Wikipedia Artikel:


(via https://de.wikipedia.org)

Die Magie an der ganzen Sache ist, dass jeder Block-Header den Hash des vorherigen Headers enthält. Sobald man nun versucht, die Reihenfolge der Blöcke zu ändern oder den Inhalt eines Blockes modifiziert, fällt dies sofort durch die Hashes auf, die nun nicht mehr stimmen. Dieses Prinzip ist eigentlich relativ simpel aber dennoch genial.

Nun besteht noch ein Problem: wer hat Recht? Oder sagen wir es deutlicher: Wer darf etwas an die Blockchain anhängen, wenn wir uns in einem dezentralen Netzwerk befinden, das keine zentrale Einheit kennt? Um den dafür nötigen „Konsens“ zwischen allen Teilnehmern des Netzwerks zu erreichen, gibt es mehrere Methoden, wie z.B. Proof-Of-Work, Proof-of-Stake, Proof-of-Activity und noch einige mehr. Jede der Methoden hat unterschiedliche Ansätze. Für Bitcoin wird z.B. die Proof-of-Work Methode verwendet, das sogn. Mining – welches sehr rechenintensiv ist. Dazu gleich mehr.

Wurde der Konsens erreicht, wird der neue Block an die Chain angehangen und es geht von vorne los.

Das ist mehr oder weniger die Blockchain Technologie, wie sie prinzipiell funktioniert.

Mining

Zurück zum Problem des Konsens: mit sehr vielen Teilnehmern in der Blockchain besteht natürlich das Bedürfnis, eine Art Sicherheit zu haben, dass nicht jeder wild Daten an Sie anhängen kann. Die Entscheidung, wer das gerade darf, bringt der sogn „Konsens“. Im Falle von Bitcoin wird das Proof-of-work Prinzip verwendet. Dazu wird eine bestimmte Anzahl von Bitcoin Transaktionen genommen, in einen Block gepackt und dann ein entsprechender Hash erzeugt.

Damit die Berechnung mit den Jahren und somit schnelleren Computern nicht einfach schneller erledigt werden kann, ist das Regelwerk der Bestätigung eines Transaktionsblocks variabel gestaltet. Sprich, der Aufwand, um einen validen Block zu erzeugen, wird größer.

Einfach gesagt funktioniert es bei Bitcoin so: der Inhalt des Blocks plus einem zu berechnenden Zusatztext muss einen Hash ergeben, bei dem die erste x Stellen eine 0 sind. Mit der erforderlichen Anzahl dieser Nullen kann man den Schwierigkeitsgrad und somit die Dauer der Berechnung beeinflussen.

Der erste Miner, der den richtigen Zusatztext gefunden hat, wird mit Bitcoins belohnt, und alle anderen Teilnehmer der Chain können seine Lösung sehr schnell und einfach verifizieren. Und das ist eine sehr wichtige Eigenschaft bei Proof-of-Work: dass die Berechnung an sich sehr kompliziert und aufwändig, die Verifizierung dafür extrem schnell möglich ist.

Probleme von Cryptowährungen und Blockchains

Eines der Hauptargumente für die Blockchain ist im Bereich Finanzen auch gleichzeitig ein riesiger Nachteil: die Unveränderbarkeit. Menschen nutzen das System, Menschen machen Fehler. Kann man im „normalen” Bankenwesen Transaktionen rückgängig machen, so ist das in der Blockchain nur dann möglich, wenn alle bzw. ein sehr großer Teil der Beteiligten zustimmt, nämlich mindestens 51%. In diesem Fall muss ein „Fork“ der Chain zum Zeitpunkt vor dem entsprechenden Fehler durchgeführt werden und alle später geschehenen Transaktionen sind ungültig bzw. werden vergessen. Es liegt auf der Hand, dass man diesen Aufwand nur äußerst selten durchführen kann und nicht bei jeder beliebigen Fehlüberweisung.

Ein weiteres Problem sind die Datenmengen und der zugehörige Stromverbrauch. Aktuell beträgt die Dateigröße der Datenbank aller Bitcoin ca. 150gb. Aufgrund des sehr hohen Berechnungsaufwandes schafft das Netzwerk aktuell ca. 4 Transaktionen pro Sekunde. Zum Vergleich: alleine „Visa“ erledigt in der gleichen Zeit ca. 1600 Transaktionen. Sprich, wenn wirklich ein großer Teil des Zahlungsverkehrs über Bitcoin laufen würde, dann müsste man ziemlich lange auf die Bestätigung warten.

Aber nehmen wir mal an, man bekommt das Geschwindigkeitsproblem in den Griff, dann schafft man aber das nächste Problem. Die Größe der Datenbank wird entsprechend schnell mit wachsen. Da die Blockchain nie vergisst und man immer alles vorhalten muss, wird dies schnell ein Problem werden. Denn alle aktiven Teilnehmer der Chain müssen ja immer die komplette Datenbank vorhalten.

Und letztlich besteht noch immer das Problem des immensen Strombedarfes. Bereits jetzt, wo Bitcoin eher Spekulationsobjekt als wirklich aktives und verbreitetes Zahlungsmittel sind, liegen Schätzungen für 2018 bei bis zu 140 Terawattstunden Stromverbrauch, was etwa 0,6 Prozent des weltweiten Stromverbrauchs entspräche. Aktuell kann sich das System nur tragen, weil besonders in China durch Stromsubvention überhaupt das Mining im großen Stil möglich ist.

Fazit

An sich muss ich sagen, dass die Technologie absolut faszinierend und sicher auch wegweisend ist. Unabhängig von gesellschaftlicher Akzeptanz sehe ich jedoch aus technischer Sicht absolut keine Zukunft für Bitcoin als generelles Zahlungsmittel. Andere Cryptowährungen, die auf andere Arten der Konsens-Herbeiführung basieren, haben hier schon eher Chancen.

Auf jeden Fall bleibt es spannend 🙂