Wenn der 3D Drucker auf einmal mit Licht zeichnen kann und wunderbare Videos zaubert

An dieser Stelle fehlen mir wirklich die Worte – so begeistert bin ich vom Projekt von Josh Sheldon. Er hat einen 3D Drucker so modifiziert, dass dieser in Langzeitaufnahmen mit Licht zeichnet. Und das in einem Automatisierungsgrad und einem Professionalitätslevel, der einen einfach nur sprachlos werden lässt. Aber schaut es euch selbst an:

python pip läuft nicht mehr wegen OpenSSL lib Fehler

Heute hat mich pip mit der Fehlermeldung

AttributeError: 'module' object has no attribute 'SSL_ST_INIT'

begrüßt. Da nach diesem Fehler sämtliche pip Operationen nicht mehr funktionieren, muss man etwas nachhelfen. Genauer gesagt: zwei Python OpenSSL Module müssen entfernt und nochmal neu installiert werden:

rm -rf /usr/lib/python2.7/dist-packages/OpenSSL
rm -rf /usr/lib/python2.7/dist-packages/pyOpenSSL-0.15.1.egg-info
sudo pip install pyopenssl

Danach sollte pip wieder wie gewohnt funktionieren.

PS: bitte achte drauf, dass du die korrekte Python Version bereinigst, das gleiche gilt für die pyOpenSSL Version!

Am einfachsten findest du die Version heraus, indem du dir per

which pip

den Pfad zu pip geben lässt, dann mit einem vi/nano /[PATH_TO_PIP]/pip in der obersten Zeile anschaust, welcher Interpreter verwendet wird, diesen Pfad kopierst und dann mit

/PATH_TO_PYTHON/python --version

die korrekte Version herausbekommst.

Homebrew müllt wahrscheinlich deine Festplatte voll

Vielleicht bin ich wirklich einfach zu dämlich, aber mir war nicht klar, wie sehr homebrew (der alternative Open Source Appstore für deinen Mac) die Festplatte vollmüllt. Ja, ich hatte schon verstanden, dass das Ding mit Symlinks arbeitet und somit die aktuelle Version markiert. Nicht offensichtlich wahr jedoch für mich, dass das Ding überhaupt keine Aufräumarbeiten durchführt.

Sprich: bei jedem Update kommt pro installierter App ein neuer Ordner dazu. Um das ganze korrekt aufräumen zu lassen und nur die aktuellste Version der jeweiligen App auf dem Rechner zu haben, muss man folgendes tun:

brew update
brew upgrade
brew cleanup

Bei mir hat das ganze satte 18GB an kostbarem SSD Speicher zurück gebracht 😱😱😱

Freenas s.m.a.r.t service (smartd) startet einfach nicht

In meiner Freenas Installation wurde ich vor kurzem darauf hingewiesen, dass der smartd Service nicht läuft. Ich dachte nach einem Reboot gibt sich das, war aber natürlich nicht der Fall.

Nachdem ich zunächst auf der Shell im Freenas ein

smartd -d

ausgeführt hatte, startete der smartd Service im Debug Modus und listete mir auf, was er tat. Und da war auch schon die entsprechende Fehlermeldung zu sehen:

Device: /dev/da0, unable to autodetect device type
Unable to register device /dev/da0 (no Directive -d removable). Exiting.

Mittels

camcontrol devlist

war dann schnell klar, dass die SD Karte, auf der mein Freenas System läuft, das Problem verursachte.

Die Problemlösung ist etwas unkonventionell, aber in meinem Fall ist sie ok: die SD Karte braucht keine SMART Überwachung.

Also einfach die Freenas Weboberfläche aufgerufen, und dort unter “Speicher –> zeige Festplatten” die Platte ausgewählt und per “Edit” Button das Häkchen bei “S.M.A.R.T aktivieren” raus nehmen:

Nach dem Speichern dieser Änderung lief der smartd sofort wieder 🙂

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 🙂

Wie man das 5 Sekunden boot Delay beim Digispark / Digistump attiny85 entfernt

Neben den ESP8266 Microcontrollern hatte ich mir zum Herumspielen auch ein Dreierpack attiny85 Microcontroller von Digispark bestellt. Diese sind sehr klein, stromsparend und können für verschiedenste kleine Aufgaben herangezogen werden. Der entsprechend installierte Bootloader macht die Entwicklung dabei besonders einfach, weil man mit der Arduino IDE arbeiten kann und das Gerät einfach nur anstecken muss und nicht irgendwelche Programmer benötigt oder so.

Diese Einfachheit hat allerdings einen Nachteil: immer, wenn man den attiny85 mit dem Strom verbindet, wartet der Bootloader 5-6 Sekunden lang, ehe das installierte Programm startet. Und hier möchte ich euch nun zeigen, wie ihr den Bootloader so modifizieren könnt, dass er direkt das Programm startet und statt der 5s Wartezeit mittels Jumper in den Programmier-Modus gebracht wird.

Dazu benötigt ihr:

Neuer Bootloader:
https://github.com/micronucleus/micronucleus/blob/v1.11/upgrade/releases/micronucleus-1.11-entry-jumper-pb0-upgrade.hex

Upload Software:
https://github.com/digistump/DigistumpArduino/tree/master/tools

Ladet euch das für euer Betriebsystem passende tar.gz herunter und entpackt es. In den entpackten Ordner könnt ihr der Einfachheit halber direkt die Hex Datei packen.

Der Upload ist dann eigentlich ganz leicht:

chmod +x micronucleus <-- die Binary ist nicht ausführbar, muss man also einmalig erledigen...
./micronucleus micronucleus-1.11-entry-jumper-pb0-upgrade.hex

Ihr werdet nun aufgefordert, den attiny85 anzustecken. Sobald das erledigt ist, wird der neue Bootloader gebrannt. Anschließend müsst ihr ca. 30s warten, dann das Gerät vom USB abziehen und den Pin GND mit Pin P0 verbinden. Nun zurück zur Arduino IDE wechseln, erneut den Upload des Programmes starten und wenn ihr aufgefordert werdet steckt ihr den attiny85 mit der GND-P0 Verbindung an. Nachdem die Firmware geschrieben wurde, zieht ihr das Teil wieder ab und trennt die Verbindung zwischen GND und P0. Wenn er nun wieder mit dem Strom verbunden wird, sollte der attiny85 sofort und ohne Pause das Programm starten.