„Blade Runner“ befindet sich tief verwurzelt in meiner eigenen DNS. Dabei war mir der Film anfangs überhaupt nicht bekannt, ich kam 1997 durch das gleichnamige PC-Spiel von Westwood Studios auf den Geschmack. Ein auf der tiefen und düsteren Atmosphäre aufbauendes, vier CD-ROMs umfassendes Adventure mit 7 verschiedenen Endings. Ohne PC-Heft und einem entscheidenden Hinweis kam ich immerhin auf 6 von 7 Endings. Man könnte meinen, mit 15 hätte ich nichts anderes gemacht. Waren schöne PC-Zeiten. Das Spiel mit dem übergroßen Karton hüte ich noch heute wie einen kleinen Schatz.
Mit „Blade Runner 2049“ läuft nun nach 35(!) Jahren seit gestern die offizielle filmische Fortsetzung in den Kinos dieser Welt. Ich war drin. Um es kurz zu machen: kompromisslos & sensationell!
Woran es „Blade Runner“ nie mangelte war eine authentische Endzeit-Cyberpunk-Atmosphäre. Immerhin spielen die Handlungen der Filme und auch des Videospiels nach dem dritten Weltkrieg. Es regnet andauernd, die Sonne ist verschwunden. Es gibt kaum noch belebte Landstriche, selbst die erlaubte Reichweite der Spinner des LAPD sind begrenzt. In dieser Welt gibt es keine andere Möglichkeit als die Urbarmachung Maschinen zu überlassen. Im „Blade Runner“-Kosmos sind das die sogenannten „Haut-Jobs“, Nexus 6er im Original von 1982, Nexus 8er in der gegenwärtigen Verfilmung. Hinzu kommt ein Soundtrack gemeinsam arrangiert und (fast) perfekt zugeschnitten von Hans Zimmer und Benjamin Wallfisch. Und ja, es gibt auch wieder die unvergleichlichen mystischen Vangelis-Sounds.
Optik & Sound: 10 von 10
Bei der Handlung hat man sich einem ungewöhnlichen und weniger naheliegenden Thema bedient. Waren im Original die Nexus 6-Hautjobs noch an einer Verlängerung ihrer nur auf wenige Jahre konzipierten Lebenserwartung interessiert, lautet die Frage nun statt „träumen Androiden von elektronischen Schafen?“ (Original-Text von Philip K. Dick): „träumen Androiden eigentlich von Familie und eigenen Kindern?“
Ich persönlich war überrascht, der „Blade Runner“-Stoff lässt viele Fragen offen. Aber wohl eine der schwierigsten zu beantworten versucht man hier in der Fortsetzung „Blade Runner 2049“ tatsächlich. Und es wird ebenfalls versucht das in knapp unter drei Stunden zu schaffen. Ziemlich unmöglich. Was ein Irrsinn! Hollywood mit Mut im ersten Jahr Trump!? Wie erfrischend!
Wer bei aller Bild- und Soundgewalt eine solch anspruchsvolle Handlung versuchen will einem Millionenpublikum verständlich zu machen, braucht Feingefühl und Budget bei den dafür benötigten Schauspielern. Und ganz in Manier des Originals hat man es geschafft, zum großen Glück von „Blade Runner“-Kennern und Fans. Ich will zur Handlung daher keine Worte mehr verlieren (freut euch drauf!) und mich nun der Riege der Darsteller widmen.
Handlung: 9 von 10
So wichtig wie Harrison Ford als Deckard war natürlich auch: ist Sean Young als Rachael dabei? Ja, ist sie! Allerdings nicht „real“, sondern sie stand zur Verfügung für einen auf CGI-Technik basierenden Klon. Und: auch Gaff kommt kurz zurück, der grimmige Origami-Zocker! Allerdings in einem mental eher bescheidenen Zustand.
Seit „Drive“ bin ich überzeugt von Ryan Gosling, war also für mich von Anfang an der richtige Mann für die neue Hauptrolle. Jared Leto, naja. Geschmäcker sind verschieden. Doch „Requiem for a Dream“ ist für mich weiterhin einer der besten Filme aller Zeiten. Als blinder Niander Wallace macht er eine gute Figur.
Wären die „alten Hasen“ abgehakt, was mich allerdings mehr faszinierte war der superbe und internationale Cast!
Da spielt Ana de Armas aus Kuba eine sexy 3D-KI. Model Sylvia Hoeks aus Holland die eiskalte und subtil-erotische Handlangerin Luv von Niander Wallace. Mackenzie Davis aus Kanada eine Pris sehr ähnliche Prostituierte. Carla Juri aus der Schweiz die Biologin und [DarfIchNichtVerraten]. Lennie James aus England den Supervisor einer iPhone-Kinderfabrik. Barkhad Abdi aus Somalia den Typen vom Markt, der echte von unechten Tieren unterscheiden kann. Hiam Abbass aus Israel die Anführerin einer Replikanten-Armee. Und Tómas Lemarquis aus Island den Verwalter einer firmeninternen Hautjob-Hersteller-Datenbank.
Und was das Schönste ist: die wirken auch noch alle überzeugend! Also entweder hatten die wirklich alle Bock drauf oder es waren einfach sehr schöne Drehtage in Budapest!
Cast: 11 von 10
Der Kanadier Denis Villeneuve hat mit „Blade Runner 2049“ ein Science-Fiction-Meisterwerk geschaffen. Die Effekte und Sounds dieses Films sind heute sicher etwas einfacher herzustellen und umzusetzen, aber sicher nicht günstiger geworden. Man kann den Film daher beruhigt als sehr gelungenes Sequel anschauen, mit allen Stars, die man im Original schätzen und lieben gelernt hat, der selben düsteren Atmosphäre, dem selben unvergleichlichen Soundtrack. Einzig: die Fortsetzung ist härter, kompromissloser. Und auch emotional kälter.
Wer es wagt die audiovisuelle Faszination beiseite zu schieben, die schon alleine den Eintritt locker lohnt, bekommt eine der ungemütlichsten Fragen der KI-Forschung gestellt: was für Probleme könnten sich ergeben, wenn intelligente Roboter zur Fortpflanzung fähig wären? Philip K. Dick weilt seit 1982 nicht mehr unter uns. Ich denke diese Frage wäre seiner philosophischen Genialität durchaus würdig gewesen. Man muss dem Drehbuch hoch anrechnen, dass einem Popcorn-Publikum verkaufen zu wollen. Hut ab.
Drittens, wer ein Auge für so etwas hat: was ein geniales Timing! Schnitte, Szenen, kreuzende Charaktere und Objekte. Respekt! Im Gedächtnis geblieben ist einer der besten Filmschnitte seit Jahren, als man kurz nur noch Wasserfälle sieht. Und die musikalische Untermalung dazu. Gänsehaut. Szenenwechsel in Perfektion. Und auch keine Ahnung wie das mit Deckard, K an der Bar und dem Hund im Casino funktioniert hat. Ein wirklicher Hochgenuss und bei weitem nicht die einzigen.
Danke an die unfassbar talentierten und geduldigen Teams der beiden Hauptfilme!
Danke für die Möglichmachung eines Traums!
Danke, dass Ihr die Umsetzung einer Fortsetzung nicht verbockt habt!
Danke, dass ich nach vielen Jahren mal wieder einen Grund hatte ins Kino zu gehen. Und nicht enttäuscht wurde.
Danke für unfassbar wertvolle 163 Minuten.
„All those moments will be lost in time. Like tears in the rain.“ – Roy in „Blade Runner“ (1982)
Erst Mitte des Jahres habe ich „Homo Deus“ von Yuval Noah Harari gelesen, ein gutes und faszinierendes Buch (voller kleiner Detailfehler), worin auch eine neuere „Religion der Daten“ angesprochen wird. Die Jünger dieser Religion sind erkennbar an Smartwatches und diesen ominösen „Smart Fitness Armbändern“, permanent damit beschäftigt Puls, Blutzucker, Hormonspiegel, [DeinKörperattributHier], etc. zu messen.
Es geht aber noch eine Spur härter. Praktisch unausweichlich in diesen harten, „postfaktischen Zeiten“.
Voran geht ein berüchtigter Multimillionär namens Anthony Levandowski. Gegen Levandowski wird gerade ermittelt, denn er hat bei einem Stellenwechsel aus Versehen geheime Geschäftsdokumente von Googles Fahrdienst Waymo zum ominösen Konkurrenten Uber mitgenommen. Dass Multimillionäre auch dann zu viel Freizeit haben, wenn Verfahren gegen diese laufen, beweist sein neuestes „Projekt“: er gründete jüngst eine neue Religion, die er „Way of the Future“ (Weg der Zukunft) nennt. [via]
Sein „Weg der Zukunft“ erinnert schon vom Namen her stark an Scientology. Der Gott dieser neuen Religion ist aber noch stark „under construction“, denn Ziel ist, Zitat:
„eine Gottheit basierend auf künstlicher Intelligenz zu entwickeln und zu unterstützen“.
Die Anbetung dieser Gottheit soll ebenso „zur Verbesserung der Gesellschaft“ beitragen. Aber klar doch! Es geht hier nicht um C.R.E.A.M.! Ist alles nur zum Besten der Menschheit!1
Levandowski hat jetzt hier zwei grandioseste Aktionen im selben Jahr durchgeführt, für den ich ihn ehrfurchtsvoll vorschlage für den Titel „Vollpfosten des Jahres“.
Zudem kam mir dieser ganze KI-Gott-Schwachsinn irgendwie bekannt vor…
Im Videospiel-Blockbuster „Deus Ex: Mankind Divided“ aus dem Jahr 2016 gibt es haufenweise Ebooks und NPCs (nicht-spielbare Charaktere) zur Kirche des Maschinengotts, ein Fanatiker steht sogar gleich unten im Hof der allerersten Absteige der Hauptfigur Adam Jensen in Prag und verteilt Flugblätter:
Maschinengott-Fanatiker in „Deus Ex: Makind Divided“, © Eidos Montreal
Selbst im selben Apartment-Komplex gibt es eine kleine Sektierer-Wohnung, die Wand dort kann man exemplarisch für das sehen, was Levandowski in natura wohl unter seiner Schädeldecke versteckt:
„The Void Which Binds“ aus „Deus Ex: Makind Divided“, © Eidos Montreal
An der Wand steht das Gekrakel „The Void Which Binds“, also so viel wie „Die Leere, die verbindet“.
Worauf ich eigentlich hinaus wollte, ist: KI-Gott, hatten wir schon. Gääähhhnnnn…
Wer das Spiel gespielt hat, wird nicht nur sehr gut vorbereitet sein auf das, was Levandowski hier eigentlich vor hat (und nebenbei sehen, dass die Idee geklaut ist, Eidos sollte dagegen klagen), der wird auch erkennen, wie grandios die Idee scheitert und welche Konsequenzen das für die Menschen hat.
In „Mankind Divided“ weiß eigentlich niemand mehr so recht, warum sie/er sich dieser „Kirche des Maschinengotts“ angeschlossen hat. Der KI-Gott hier ist nicht greifbar (wie bei Gottheiten üblich), wird mal so interpretiert, man erlange den Zustand selbst durch „Aszension“ (50% Verschmelzung mit der Maschine, 50% mit Drogen), mal so, er zeige sich in den Charakteren, die geholfen haben ihn groß zu machen; wäre analog zu Levandowski natürlich Levandowski selbst, eine/r seiner ProgrammiererInnen und/oder Querdenker und Visionäre mit Ideen, die diesen KI-Gott (oder welcher periphere Kladaradatsch dazu auch immer) umsetzen halfen. Kurzum: man kann mit diesen Menschen nichts mehr anfangen. Human garbage.
Was wir im Jahr 2017 brauchen sind keine neuen Religionen: es gibt nach wie vor zu viele davon. Oder sagen wir besser, es gibt zu viele Menschen, die Religionen unterstützen. In meiner Weltsicht gibt es auf diesem Planeten aktuell keine 7,5 Milliarden Menschen. Zu „normalen Menschen“ zähle ich einfach, wer konfessionslos ist und das sind weltweit gerade mal 1,05 Milliarden Menschen. Die restlichen 6,45 Milliarden heute sind für mich nicht ganz dicht, haben einen gewaltigen Sprung in der Schüssel und hindern die Menschheit daran voranzukommen. Sie glauben an männliche Götter mit weißer Hautfarbe, steuern Flugzeuge in Gebäude und schreien „allahu akbar!“ als Erwachsene mit angezogenen Windeln, platzieren Nagelbomben in U-Bahnen oder propagieren die Weltsicht, der Planet Erde sei nur ein paar Tausend Jahre alt. Der ideale Nährboden zwar für KI- oder Maschinengötter. Aber nichts, was mich davon überzeugen würde eine Familie zu gründen und Nachwuchs in diese Welt zu setzen. Die Welt ist gefährlich, da draußen. Und Multimillionäre aus den USA sowieso.
Hinter Bitcoin ist Ethereum die Kryptowährung mit dem höchsten Marktwert. Wenngleich wir heute noch auf _die_ Killer-App warten, das Meiste sind doch nur Coin-Börsen & Wallets, so ist Ethereum in der Hinsicht vielversprechend, als dass die Währung als „turing complete“ gilt, man kann also im Gegensatz zu Bitcoin dafür und damit „richtig programmieren“.
Mit der folgenden Anleitung bauen wir uns heute ein eigenes privates Ethereum-Netzwerk!
WARNUNG: die Durchführung des Tutorials geschieht auf eigene Gefahr. Ich übernehme keinerlei Garantie dass irgendwas funktioniert! Auch solltet ihr darauf achten, dass ihr eure eigenen Ethereum von diesen erstellten Ethereum getrennt aufbewahrt. Das Tutorial soll dazu dienen, a) für Ethereum zu programmieren und richtet sich an Entwickler, b) einen einfachen „smart contract“ aufzusetzen, sowie c) das wohl Wichtigste, zu verstehen, wie Ethereum funktioniert.
Los geht’s! 🙂
—
1. Vorbereitungen
Ihr braucht Zugang zu einem eigenen Server-Bereich und den geth („Go Ethereum Client“). In dieser Anleitung nehmen wir mal an, ihr betreibt einen Ubuntu-Server. Hier findet ihr die Anleitung für die geth-Installation unter Ubuntu: geth installieren. Ferner solltet ihr um minen zu können mindestens 2GB RAM bereitstellen.
Das private Netzwerk wird „gizmeodoteu“ genannt. Es ist aufrufbar unter der Fake-IP-Adresse 101.102.103.104.
Öffnet nun ein Konsolenfenster, loggt euch über SSH in Ubuntu ein und erstellt ein Arbeitsverzeichnis:
ssh root@101.102.103.104
mkdir gizmeodoteu
cd gizmeodoteu
mkdir data
mkdir source
2. Generierung des Genesis-Blocks
Der Genesis-Block ist der allererste Block jeder Blockchain und die Parameter sind in der Datei genesis.json definiert. Die Datei speichern wir ab unter /root/gizmeodoteu/genesis.json. Hier der Inhalt der Datei:
{
"config": {
"chainId": 15,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
},
"alloc" : {
"0x0000000000000000000000000000000000000001": {"balance": "111111111"},
"0x0000000000000000000000000000000000000002": {"balance": "222222222"}
},
"coinbase" : "0x0000000000000000000000000000000000000000",
"difficulty" : "0x00001",
"extraData" : "",
"gasLimit" : "0x2fefd8",
"nonce" : "0x0000000000000209",
"mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp" : "0x00"
}
Hierbei steht chainId=1 für das Ethereum-Hauptnetzwerk. Daher ist es wichtig eine eigene chainId für euer privates Netzwerk zu nehmen, damit euer privates Netzwerk die Blockchain nicht mit der offiziellen verwechselt.
Zum Testen und für ein allgemein besseres Verständnis, setzen wir die Schwierigkeit auf einen niedrigen Wert. Auch sollte ein einzigartiger Wert für nonce gewählt werden. Über das Feld alloc werden Accounts mit Ether (die Ethereum-Währung) vorgefüllt.
Geht nun in euer Verzeichnis, wo ihr die genesis.json abgelegt habt und initialisiert den bootnode. Das ist der Knoten, mit welchem sich euer Client mit dem privaten Netzwerk verbinden und auch mit anderen Knoten kommunizieren kann:
cd /root/gizmeodoteu/data
geth --datadir=/root/gizmeodoteu/data init /root/gizmeodoteu/genesis.json
bootnode --genkey=boot.key
bootnode --nodekey=boot.key
3. Neuen Account erstellen und Kontostand prüfen
Öffnet ein neues Konsolenfenster und wechselt über SSH auf euren virtuellen Server:
ssh root@101.102.103.104
geth attach /root/gizmeodoteu/data/geth.ipc
> eth.accounts
Natürlich gibt es noch keine Adressen von Konten. Den ersten Account eröffnen wir nun. Ersetzt „meinPW“ mit einem starken Passwort, bewahrt dieses an einem sehr sicheren Ort auf. Ethereum vergibt nicht: ohne dieses Passwort werdet ihr niemals mehr Zugang zu eurem Account haben:
> personal.newAccount("meinPW")
> web3.fromWei(eth.getBalance(eth.accounts[0]), "ether")
Speichert eure Adresse gut ab, diese beginnt mit dem Präfix 0x. Auch gibt es noch keine Ether in diesem Account, dazu kommen wir noch. Natürlich ist das geminte Ether hier nur nützlich in eurem privaten Netzwerk.
4. Im privaten Netzwerk minen
Das Minen hier hat doppelten Zweck: Ether erzeugen um die Transaktion durch gas, eine Ethereum-Untereinheit, zu betreiben. Zudem führt das Minen eure Transaktionen in die Blockchain.
Öffnet ein neues Konsolenfenster und verbindet euch zu eurem privaten Server:
ssh root@101.102.103.104
geth --datadir=/root/gizmeodoteu/data --mine --minerthreads=1 --etherbase=0x...
Der Parameter etherbase hier spezifiziert die Zieladresse, wohin eure durch das Mining generierten Ether gesendet werden sollen. Hier steht eure Wallet-Adresse aus Schritt 3. Wenn ihr nun den Kontostand erneut checkt (siehe Schritt 3), solltet ihr eine große Zahl angezeigt bekommen. Gratulation! Ihr seid nun Ether-Milliardär!
Klar, diese generierten Ether sind nur wertvoll innerhalb eures privaten Netzwerks. Trotzdem geil! Ihr wisst nun, wie ihr für Ethereum entwickeln könnt und _das_ ist wirklich unbezahlbar.
5. Einen einfachen Vertrag kompilieren
Die offizielle Dokumentation zu Ethereum erwähnt nicht, dass das Kompilieren über solC nicht mehr via RPC möglich ist. Alle Tutorials, die darauf aufbauen, enden in einer Art Fass ohne Boden. Es gibt wohl 2 Wege Verträge zu kompilieren, es ist für das eigene Verständnis wichtig, beide mal versucht zu haben.
Als Erstes installiert ihr den Kommandozeilen-Compiler solC:
sudo add-apt-repository ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install solc
Öffnet nun erneut ein Konsolenfenster, verbindet euch über SSH mit eurem Server und navigiert zum Verzeichnis, wo euer Quellcode abgelegt wird:
cd /root/gizmeodoteu/source
Speichert den folgenden „Begrüssungs“-Vertrag in /root/gizmeodoteu/greeter.sol:
contract mortal {
/* Variable "owner" vom Typ address definieren */
address owner;
/* diese Funktion wird bei Initialisierung ausgeführt und setzt den Besitzer des Vertrags */
function mortal() { owner = msg.sender; }
/* Funktion, um die Investionen des Vertrags wiederherzustellen */
function kill() { if (msg.sender == owner) selfdestruct(owner); }
}
contract greeter is mortal {
/* Variable "greeting" vom Typ string definieren */
string greeting;
/* das hier wird ausgeführt, wenn der Vertrag aufgerufen wird */
function greeter(string _greeting) public {
greeting = "Hallo, Welt!";
}
/* Hauptfunktion */
function greet() constant returns (string) {
return greeting;
}
}
Jetzt kompilieren wir den Vertrag mit solC:
solc --bin --abi -o /root/gizmeodoteu/source /root/gizmeodoteu/source/greeter.sol
Das Setzen von bin und abi sagen dem Compiler, dass „Ethereum Virtual Machine (EVM)“-Bytecode und eine Datei Application Binary Inferface (ABI) erstellt werden sollen. Mit -o legt man wie üblich ein Ausgabeverzeichnis fest, welches mit der zweiten Angabe des Verzeichnisses mit einer *.sol-Datei abgeschlossen wird.
Die Kompilierung hier erzeugt zwei Dateien:
– eine EVM-Datei, erkennbar an der Endung *.bin. Diese entspricht dem Vertrags-Bytecode, der vom webbasierten Compiler generiert wird; dieser ist einfacher zu verwenden und wird weiter unten vorgestellt.
– eine ABI-Datei, erkennbar an der Endung *.abi: stellt euch das application binary interface als eine Art Vorlage für den Vertrag vor. Das erleichtert die Kommunikation von euch und anderen mit dem Vertrag, sobald er sich in der Blockchain befindet.
Öffnet beide Dateien nun mit nano oder einem anderen Texteditor eurer Wahl. Indem ihr versteht, was darin steht, werdet ihr weniger Mühe damit haben eure Verträge zu veröffentlichen und mit ihnen zu interagieren.
Alternativ dazu könnt ihr auch den Online-Compiler benutzen. Durch einfaches Copy&Paste nimmt dieser euch die Arbeit ein bisschen ab. Jedoch sind beide Methoden gleichwertig.
Kopiert dazu einfach den Text aus greeter.sol von oben in den Online-Compiler. Wartet einen Moment und klickt dann auf den Link „Contract details…“. Der Inhalt des Felds Bytecode sollte mit dem aus der Datei greeter.bin übereinstimmen. Das Selbe gilt für das Feld Interface aus der Datei greeter.abi.
6. Einen „Begrüssungs“-Vertrag in eurem privaten Netzwerk veröffentlichen
Kopiert den Inhalt des Feldes Web3 deploy in den Online-Compiler. Fügt den Inhalt in einen Texteditor eures PCs und achtet auf die hervorgehobenen Bereiche:
var _greeting = 'gizmeoDOTeu rockt!';
var browser_ballot_sol_greeterContract = web3.eth.contract([{"constant":false,"inputs":[],"name":"kill","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"greet","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"inputs":[{"name":"_greeting","type":"string"}],"payable":false,"type":"constructor"}]);
var browser_ballot_sol_greeter = browser_ballot_sol_greeterContract.new(
_greeting,
{
from: web3.eth.accounts[0],
data: '0x6060604052341561000f57600080fd5b6040516103dd3803806103dd833981016040528080518201919050505b5b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b6040805190810160405280600d81526020017f48656c6c6f2c20576f726c642100000000000000000000000000000000000000815250600190805190602001906100b99291906100c1565b505b50610166565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061010257805160ff1916838001178555610130565b82800160010185558215610130579182015b8281111561012f578251825591602001919060010190610114565b5b50905061013d9190610141565b5090565b61016391905b8082111561015f576000816000905550600101610147565b5090565b90565b610268806101756000396000f30060606040526000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806341c0e1b514610049578063cfae32171461005e575b600080fd5b341561005457600080fd5b61005c6100ed565b005b341561006957600080fd5b61007161017f565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156100b25780820151818401525b602081019050610096565b50505050905090810190601f1680156100df5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561017c576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b5b565b610187610228565b60018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561021d5780601f106101f25761010080835404028352916020019161021d565b820191906000526020600020905b81548152906001019060200180831161020057829003601f168201915b505050505090505b90565b6020604051908101604052806000815250905600a165627a7a7230582069d50e4318daa30d3f74bb817c3b0cb732c4ec6a493eb108266c548906c8b6d70029',
gas: '1000000'
}, function (e, contract){
console.log(e, contract);
if (typeof contract.address !== 'undefined') {
console.log('Contract mined! address: ' + contract.address + ' transactionHash: ' + contract.transactionHash);
}
})
Das oben abspeichern als myContract.js.
Bevor ihr fortfahrt prüfen, dass a) euer Kontostand nicht 0 ist und b) euer Account entsperrt ist. Ist der Kontostand zu niedrig oder der Account gesperrt, könnt ihr den Vertrag nicht veröffentlichen. Deshalb solltet ihr die obigen Schritte nochmals abarbeiten, um Ether zu minen und entsperrt dann euren Account wie folgt (ersetzt „meinPW“ mit eurem eigenen von oben):
Öffnet ein neues Konsolenfenster:
ssh root@101.102.103.104
geth attach /root/gizmeodoteu/data/geth.ipc
> web3.fromWei(eth.getBalance(eth.accounts[0]), "ether")
> personal.unlockAccount(eth.accounts[0], "meinPW")
Bitte nicht abschalten, denn es wird wichtig: auch hier gibt es kein Update der Dokumentation zu Ethereum, daher gibt es Verwirrungen, wie man Verträge kompiliert. Beachtet, dass die Funktion web3.eth.contract() ein Argument braucht. Das ist das selbe, wie die Datei greeter.abi, die wir mit dem solC erstellt haben. Das Feld data ist gleichbedeutend mit dem EVM-Bytecode der Datei greeter.bin. Der einzige Unterschied ist wieder das Präfix 0x.
Jetzt wird der Vertrag öffentlich gemacht:
loadScript(myContract.js)
Die Ausgabe sollte ungefähr so aussehen:
Contract mined! address: 0x4000737c8bd7bbe3dee190b6342ba1245f5452d1 transactionHash: 0x0a4c798467f9b40f2c4ec766657d0ec07c324659ea76fcc9c8ad28fc0a192319
Glückwunsch! Euer Vertrag „lebt“ und ist zu finden unter der Adresse 0x4000737c8bd7bbe3dee190b6342ba1245f5452d1 eurer privaten Blockchain.
Notiert euch diese, denn sowohl ihr oder auch andere werden diese brauchen, wenn ihr damit interagieren wollt.
Falls es nicht funktioniert hat: stellt sicher, dass ihr aktiv in einem anderen Fenster minet, damit die Transaktion in die Blockchain geführt werden kann.
7. Mit dem Vertrag interagieren
Auch hier gibt es noch keine Updates der offiziellen Ethereum-Doku. Die beschriebenen Funktionen werden schon nicht mehr benutzt. Startet erneut geth und versucht Folgendes:
> var abi = '[{"constant":false,"inputs":[],"name":"kill","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"greet","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"inputs":[{"name":"_greeting","type":"string"}],"payable":false,"type":"constructor"}]'
> var abi = JSON.parse(abi)
> var contract = web3.eth.contract(abi)
> var c = contract.at("0x4000737c8bd7bbe3dee190b6342ba1245f5452d1")
> c.greet()
Mit den ersten drei Eingaben legt ihr fest, wie der Vertrag laut ABI aussieht. Die Methode contract.at() braucht als Übergabeparameter die Adresse, wo euer Vertrag residiert. Ihr solltet nun die folgende Ausgabe sehen:
gizmeoDOTeu rockt!
Hinweis: geth bekommt Schnupfen, sobald eine eurer Eingaben illegale Zeichen beinhaltet, siehe:
“ (illegal) is not equal to " (legal)
und
‘ (illegal) is not equal to ' (legal)
9. Fazit
Wir haben nun mehr als nur kurz mal reingeschnuppert in Ethereum: wir haben ein eigenes (privates) Netzwerk aufgesetzt und sogar einen eigenen „smart contract“ kompiliert. Zudem haben wir Sackgassen der offiziellen Dokumentation vermieden. Wir haben ferner gesehen, wie man einen Vertrag veröffentlicht (deploy) und mit diesem interagiert.
Solltet ihr je Mist gebaut haben und müsst nochmals neu anfangen, startet „einfach“ euren Server neu und löscht eure Blockchain:
rm -R /root/gizmeodoteu/data/geth/chaindata
[via]
10. Ausblick
Die smart contracts sind, was Ethereum so stark macht. Durch diese Eigenschaft entfällt die Stelle des Vermittlers, Verträge werden dadurch fälschungssicher und günstig. Nicht nur Notare werden zukünftig dadurch überflüssig. smart contracts haben das Zeug dazu, ganze Institutionen, egal ob privat oder staatlich, zu ersetzen.
Ferner ist Ethereum „turing complete“: diese Eigenschaft besitzt das Bitcoin-Protokoll nicht. Dadurch kann man für Ethereum relativ leicht selbst Anwendungen entwickeln. Wer schonmal JavaScript programmiert hat, wird sich hier prima zurecht finden. Vielleicht hilft dieses Tutorial ja, mal mit einer anderen Anwendung an den Start zu gehen, als nur Wallets oder Coin-Börsen! 🙂
Falls euch das Tutorial gefallen hat, spendet mir doch ein paar Bitcoin! Die Adresse findet sich bei jedem Bitcoin-Button überall auf gizmeo.eu verstreut! Vielen Dank für die Aufmerksamkeit und happy hacking!
Der aktuelle Bitcoin-Kurs von 2.xxx€ beflügelt natürlich auch alternative Kryptowährungen. Trump und Brexit sei Dank! xD Es zahlt sich heutzutage aus, dass man herausragt mit ein bisschen Intelligenz in einem komplett verdummenden Westen. 😉
Soll aber gar nicht das Thema sein, denn eigentlich will ich kurz erzählen, wie man Monero mit Android minet.
Ihr braucht dafür die App Minergate. Minergate bietet ca. 7(?) Kryptowährungen an, die man mit einem Android-Gerät minen kann. Alle anderen angebotenen außer Monero sind allerdings meiner bescheidenen Meinung nach Schwachsinn.
Jedenfalls, ihr ladet die App, registriert euch bei den Kollegas online einen Account, loggt euch mit den Daten bei der App ein und könnt loslegen!
Im Schnitt sind es 1 Hash pro CPU-Kern. Sprich, habt ihr einen Quadcore in eurem Smartphone werkeln, macht das 4 Hashs/Sekunde. Habt ihr einen echten Octacore, macht das 8 Hashs/Sekunde. Usw.
Der aktuelle Monero-Kurs steht gerade irgendwo zwischen 30-40€. Es ist außerdem eines der am schnellsten wachsenden alternativen Kryptowährungen-Netzwerke. Und: wenn ihr ein Faible für Anonymous habt, ist DAS eure Kryptowährung! Warum, das könnt ihr in aller Ausführlichkeit oben im Wikipedia-Artikel nachlesen. Grob: es ist die zugrundeliegende Philosophie dieser Währung. Passt!
P.S.: es war reiner Zufall, dass ich herausgefunden habe, wie man Monero mit Android minet. Alle Währungen der App sagten mir gar nichts, ich empfehle auch nicht eine andere zu minen als Monero. Dank geht raus an meinen Wiener WG-Kollegen, der so durch war das letztes Jahr mal mit einem Octacore-Billig-Smartphone zu testen!
Google nimmt uns mobilen Webbrowser-Entwicklern seit Android 4.4 schon viel ab, indem wir seitdem standardmäßig auf die Chromium-Engine zurückgreifen dürfen, was bis zu dieser Version nicht der Fall war: da waren wir noch auf WebKit angewiesen. Seitdem unterscheiden sich unsere selbst entwickelten Apps im Funktionsumfang so gut wie nicht mehr vom großen Chrome/Chromium.
Dadurch sind wir auch automatisch „näher an Open-Source“, aber um den infantilen, jedoch sehr amüsanten Krieg zwischen Google (Chromium/Blink) und Apple (Safari/WebKit) soll es hier ohnehin nicht gehen. Die Spacken der Zunft brauchen auch noch was zum Schreiben diesen Sommer.
Als Entwickler für eine offene Plattform, die Android ist und das vielleicht vielversprechendste Open-Source-Projekt aller Zeiten darstellt, schaue ich persönlich gerne nach rechts und links. Waren wir mit unseren Browser-Engines vor Android 4.4 immer als „Android-Browser“ ausgewiesen, etwa in Google Analytics, Piwik, etc., sind wir seit 4.4 nur noch als Chrome bzw. Chrome Mobile sichtbar. Inklusive Icon.
Cool, denke ich, hey, Mozilla entwickelt doch mit Gecko auch eine eigene Engine, lass mich den Scheiß doch auch mal ausprobieren! Dann kommt immer ein Firefox-Icon! ^^
Ich muss dazu sagen, ich habe rein gar nichts gegen Chrome, doch meine persönliche Geschichte und auch meine (egoistische?) Ethik wollen es so, dass ich Firefox und dessen Derivaten eben „positiver“, zumindest aber enthusiastischer, gegenüberstehe. Hey, ich komme aus einer Zeit, da war IExplorer DER Standard! Und DAS war beileibe keine schöne oder angenehme Web-Welt! Wettbewerb und auch die Technik heute (Chrome ist ein technisch exzellenter Browser) sind mir da viel lieber und so ein bisschen Flaming, bei oder neben der Arbeit, schadet auch nicht.
Zurück zum Thema: Wie baue ich jetzt Gecko in meinen Browser anstatt Chromium?
Kurze Antwort: gar nicht. Zumindest nicht die nächste Zeit.
Auf meiner Suche nach irgendwas dazu fand ich über stack overflow (wo sonst :-D) diesen Beitrag: https://stackoverflow.com/questions/6352654/use-firefox-as-render-engine-for-android-webview. Ganz unten, ca. 2 Jahre alt, steht eigentlich alles was man dazu wissen muss.
Das offizielle Mozilla-Tutorial exisitert sogar noch unter diesem Link: https://wiki.mozilla.org/Mobile/GeckoView. Sieht alles machbar aus, aber der Satz hier feuert eben genau in den Rücken eines jeden Gecko-Mobile-Developers:
„Note that GeckoView is NOT ready to be used in a production environment. It is currently possible to load webpages, but that’s about it.“
Hinzu kommt, rein aus Neugier könnte man die zwei Jahre alte Idee ja mal ausprobieren, kein Thema. Doch die zwei essentiellen ZIPs, die man braucht, sind unter dem Link gar nicht mehr erhältlich und wenn man den richtigen findet bleibt ein Moment auf dem Zeitstempel, um zu begreifen, dass die Entwicklung hier absolut eingestellt wurde. Seht selbst: https://ftp.mozilla.org/pub/mobile/releases/27.0b1/android-armv6/multi/geckoview_library/. Also ab dem 17. Oktober 2015 war’s das mit Gecko als Engine für eigene mobile Web-Browser auf Android.
Schade.
Ich weiß, dass es einen shitload an Arbeit verursacht einen Web-Browser zu bauen: Firefox besteht wohl aus 9 Millionen Zeilen Code. Google Chrome aus 6-7 Millionen. Zum Vergleich: die Unreal 3-Engine, mit der massenhaft Blockbuster-Videospiele entwickelt wurden, besteht gerade mal aus 2 Millionen Zeilen Code. Und braucht damit fast das Dreifache, was ein Space Shuttle zur Programmierung brauchte.
Doch ich bin mir nicht sicher, ob sich Mozilla mit dem Nicht-Pflegen einer mobilen Gecko-Engine nicht ins eigene Knie schießt.
Mobile wird die nächsten 10 Jahre das komplette Game übernehmen, ob es uns passt oder nicht. Ich bin auch eher der Computer-Enthusiast und eigentlich ein Handy-Muffel. Und es sträuben sich mir die Nackenhaare, was mobil heute als „Videospiel“ verkauft wird; doch so geht es wohl jedem Videogamer, der noch die allererste PlayStation Made in Japan(!) sein Eigen nennt und so das erste Mal mit wettbewerbsfähiger 3D-Grafik in Berührung kam. Und ich befürchte fast, wer hier nicht mitzieht, mitziehen will, bleibt einfach auf der Strecke. Das ist kalter, harter, herzloser Kapitalismus da draußen, der uns diese tolle, bunte, unterhaltsame und wundervoll seichte Welt kaufbar macht, nachfolgende Generationen werden mit einem Debian, der „ethischsten Linux-Distribution“, überhaupt nichts mehr anzufangen wissen. Wer die Verdummung, sorry, „Vereinfachung“ live miterleben möchte, der kaufe sich bitte einen macOS-Computer oder gleich ein iPhone.
Das wird nichts für mich sein, Leute! Tut mir echt unfassbar leid!
tl;dr: Mein eigener Android-Webbrowser ist am Wochenende in Version 0.2.6 erschienen und kann jetzt auch Favicons. Hier spricht YAABy selbst. Und ich mache mir seitdem Gedanken, ob das alles unter einem Google-Chrome-Logo weiterlaufen soll.
In meinem Zockerleben kam „WipEout“ (Studio Liverpool) recht spät, doch richtig hart. Für mich definiert es bis heute nicht nur das Genre eines Future Racer, oder in dem Fall präziserweise eines Antigravitations-Racers, der mich bis heute mit fast Mitte 30 noch fasziniert, wie eigentlich zuvor nur „F-Zero“.
„WipEout“ ist cyberpunk in Reinform: schnell. Atemberaubend in seinen Locations. Bis aufs Kleinste durchdachtes Vehikel-Design. Untermalt mit den fettesten und angesagtesten (und auch passendsten!) elektronischen Sounds in der Geschichte der elektronischen Musik. Kurz: ein Gamer-Traum!
Die Serie ist so alt wie die PlayStation selbst und wird mittlerweile auch schon 21 Jahre. Im Zuge dessen steht eine Omega Collection als Veröffentlichung bevor; fragt mich nicht, was das sein soll, wahrscheinlich eine Zusammenfassung aller Titel. Oder der wichtigsten. Whatever.
Jedenfalls, es wird auch ein Artbook dazu geben und schon heute können wir bisher unveröffentlichtes Concept-Artwork daraus online finden, hier ein kleiner Vorgeschmack:
Der Link: „25 Unseen, Wallpaper-Friendly Pieces of Wipeout Concept Art“, via blog.us.playstation.com.
Der Clou: es reichte nicht, dass man hier etwas veröffentlicht, was es so noch nie zu sehen gab. Zu jedem Stück Konzeptkunst erzählen die Künstler selbst eine kleine Geschichte dazu. Supergeil!
Der Abschied: seit 2010/2011 ist Studio Liverpool nicht mehr. Und das, obwohl es scheinbar zwei PS4-Games in der Pipeline gegeben haben soll. So ein bisschen also fundiert sich meine Begeisterung auch in einer gewissen Melancholie, dass Piranha, Feisar, Assegai und Konsorten uns nie wieder begegnen werden.
Ich jedenfalls bin froh, auch wenn es recht spät war, noch Bombentitel durch die PS3 mitgekriegt zu haben. Und: tatsächlich kommen ein paar meiner seltensten PS-Trophies von WipEout.
Die Empfehlung: greift ab, was ihr noch abgreifen könnt! Und wenn ihr mal wieder von „future racern“ hören solltet, denkt einfach an WipEout! War alles schon da. Und es war: p.e.r.f.e.k.t.
!
Soundtrack zu einem gelungenen Wochenende in Elektronik:
Machine Love von ASC & Synkro aus 2013. Inside The Machine
eben.
Es gibt nur wenige Einzel-Tracks, die mich ewig flashen werden und da gehört dieses Schmuckstück dazu.
Es ist so eine Mischung aus früher „Space Night“ glotzen, kiffend durch die Gegend mit dem Auto fahren, sich fragen, mit welchem Equipment wohl die Klänge erzeugt wurden, einen neuen Rechner mit Lieblings-Hardware zusammenbauen, sich Physik von Harald Lesch erklären lassen und nebenher PlayStation zocken.
Davon mal abgesehen ist die EP eine wundervolle Zusammenarbeit von ASC und Joe McBride.
Wer möchte kann eine der seltenen Vinyl-Platten kaufen: discogs.com/ASC-Synkro-2-and-Sam-KDC-Machine-Love/release/4680767. Gab aber heute beim Stöbern nur noch vier Stück.
H4ppy h4ck1ng!
Viele Versuche Android mit Linux zu verheiraten gab es bisher nicht, umgekehrt sieht es noch viel schlimmer aus. Ich warte immer noch auf Apps wie Amarok oder Audacious oder GIMP. Auch einfach, weil diese Programme (wie viele andere von Linux auch) viel mehr Publikum verdient hätten und davon gäbe es auf Android mehr als genug.
Vielleicht ist das aber auch bald völlig egal, denn da ist etwas in Alpha
, was zumindest die eine Richtung abdecken würde:
Anbox steht einfach für Android in einer Box und läuft, ohne Emulation übrigens, in einem Linux Container (LXC) auf (jedem?) Desktop-Linux.
Der Clou ist, diese Alpha
läuft jetzt schon mit dem neuesten Android 7.1.1 (Nougat), wie man oben sehen kann.
Mehr dazu: http://anbox.io/. [via]
Den Play Store findet man erst einmal nicht, stattdessen werden Apps mit
adb install /path/to/.apk
installiert.
Um Anbox selbst auf Linux zu installieren wird die Nutzung von Snaps vorausgesetzt, das geht dann ganz einfach mit:
sudo snap install --classic anbox-installer && anbox-installer
Das Anbox-Projekt ist öffentlich und jeder kann mitmischen: Anbox auf GitHub. Auf IRC reicht #anbox
zum Mitreden.
Have fun! <3
Dieser adrett gekleidete junge Herr ist der Brite Neil Harbisson:
Neil Harbisson wird von der britischen Regierung als Cyborg anerkannt, da er ein Passfoto mit seiner Antenne in seinem Personalausweis abbilden lassen darf.
Neil hatte zu Lebzeiten ein Problem, denn er konnte nur schwarzweiß sehen. Das hatte einige Vorteile, denn Schwarzweiß-Kopien und -Fotos sind einfach günstiger. Aber das war auf Dauer doch irgendwie uncool.
Also beschloss Neil, es war ein selten sonniger Tag im April 2003, er will UV-Licht sehen und pflanzte sich diese Antenne in den Schädel. Damit läuft er jetzt rum, weiß wann er Sonnencreme auftragen muss, wo im Wald die lautesten Blumen stehen, wird manchmal von jungen Leuten für ein Pokemon gehalten (oder für einen Selfie-Stick-Süchtigen, von den älteren) oder wird in Italien auch gerne mal von Einheimischen gefragt, ob er damit Cappuccini zubereiten kann.
Das Meiste davon ist kein Witz, die Story geistert schon ein paar Jahre durch’s Internet, hier findet man ein Interview mit ihm:
Davon abgesehen, dass er nun seit Jahren wie ein Trottel aussieht, ist Moon Ribas eine ziemlich geile Sau. Aber lassen wir den Spaß mal kurz beiseite.
Tatsächlich ist Neil nämlich ein Cyborg per definitionem:
„…they posited the importance of adapting ourselves via technology, so we could not only explore space, but make it possible to live there. A combination of the words cybernetic and organism, these cyborgs would replicate animals’ abilities, organs, and senses to compensate for our biological limitations instead of interfering in the alien biome“
So formuliert in dem legendären Artikel aus den 1960er-Jahren des vorherigen Äons in „Cyborgs and Space“.
Soll also heißen: um hier weg zu kommen, raus zu kommen ins All, oder uns auch nur an eine sich verändernde Umwelt anzupassen, sollte man Technologie nutzen, die uns selbst modifiziert. Die berüchtigte „nächste Stufe der Evolution“. Wo sich Transhumanisten wie Neil mit KI-Entwicklern streiten, was sich wohl am Ende durchsetzen wird. Wer ab und zu IRC-Chats verfolgt, wird davon ein (Antennen-)Liedchen singen können.
Ich sehe hier mehrere Probleme, was Neil betrifft, die sollen und können aber nicht Teil dieses Artikels sein.
Was ich festhalten möchte ist, Neil ist sicher nicht der einzige Mensch der Welt (oder gar der erste), der sich auf diese Weise modifiziert (hat).
Und hier wird ferner ein zwischenmenschliches Problem stark: wer das erste Bild in dem Interview sieht, der weiß anhand der Gesichter der Teilnehmer im Raum, was sie von dieser Modifizierung halten. Da ist eher Mitleid, Unverständnis, Angst zu sehen. Weniger Bewunderung, Spaß, Zustimmung.
Ich selbst bin eher der Meinung, „es ist dein Körper, mach‘ was du willst!“. Aber werdet weniger wie Neil. Werdet bitte mehr wie Motoko. Und damit ist eigentlich a-l-l-e-s zusammengefasst, was ich zu diesem Thema sagen möchte. Ist doch auch mal geil!
Kein Witz. Wird aber nicht gut gehen:
Erstens kann im Jahr 2017 in einem 2-Stunden-Hollywood-Blockbuster nicht erzählt werden, was uns G.I.T.S.-Kennern seit 1995(!) über Animes und Anime-Serien erzählt wird. 22 Jahre schafft niemand, auch nicht Trump’s Hollywood.
Wir reden hier von zwei Anime-Spielfilmen („Ghost in The Shell“ 1995 und „Ghost in the Shell 2: Innocence“ aus 2004), sowie über zwei komplette Staffeln „Ghost in the Shell Stand Alone Complex“ mit jeweils 26 Folgen, sowie die strittige Mini-Serie „Arise“ aus 2013 mit 7 Folgen. Hier wurden keinerlei Spin-Offs und unnütze Videogames berücksichtigt.
Zweitens: Scarlett Johansson!? Eine der arrogantesten Prototyp-Arier spielt _den_ asiatischen Über-Cyborg?? O’RLY!? Titten!11
Ich wusste, dass 2017 schwer wird, aber so schwer…
Ja, die Japaner sind gemein. Was hier drin passiert, warum es passiert, wie es zu interpretieren ist; das hat über zwei Jahrzehnte jetzt nur (Netz-)Subkulturen interessiert. Lasst mich wissen, sollte die „Live-Action-Adaption“ etwas anderes sein als Effekthascherei, vielleicht bekommt ihr von mir dann einen Bitcoin!
Wer eine gute Stunde seiner wertvollen Zeit entbehren kann, und nicht allzu viel gegen ein bisschen Geschichte hat, dem sei der folgende Vortrag von Steve Blank empfohlen:
[via]
In „Die geheime Geschichte des Silicon Valley“ erklärt er anschaulich und oft auch mit Humor, worin diese weltverändernde Kolchose ihre Ursprünge hat. Für die Ungeduldigen, hier der SPOILER
: Zweiter Weltkrieg, elektronische Kriegsführung, Mikrowellen, Hewlett Packard. Ungefähr auch in der Reihenfolge.
Selbst wenn Opa nicht gerne erzählte, was er wirklich so trieb, manche Dinge konnte auch er nicht ins Grab mitnehmen. o.O
Gnädige Herren, werte Damen. Es ist Wochenende. Bitte schalten Sie jetzt Ihre Gänge herunter. Gönnen Sie sich etwas Gutes! Die Empfehlung des Tages unseres geschätzten Professors kommt genau zur rechten Stunde:
Ich warf heute seit gefühlten 50 Jahren mal wieder meinen Liferea an und bei FFFFOUND! findet man wohl auch nichts mehr als Titten, Titten, Titten. Da kommt eine wichtige, bunt-poppig verpackte Lebenslektion zwischendurch gerade recht. Nicht, dass ich etwas gegen Titten hätte, ich mag sie nur am liebsten mit meiner Banane in der Mitte und nicht in schwarzweiß und 2D auf einem viel zu kleinen Tische.
Mein Projekt der Woche ist das hier auf GitHub: https://github.com/Mte90/FB-Android-Crash.
An der Oberfläche: ein kleines Coding-Projekt, was durch permanenten Ärger mit dem In-App-Facebook-„Browser“ entstand und durch Raten und Rumprobieren (der Vergleich zur „Black Box“ IExplorer 6 kommt nicht von ungefähr) eben diesen zum Absturz bringt. Ich denke, über die Zeit soll auch nachverfolgt werden können, warum das genau geschieht. Derzeit gibt es noch zu wenig Lösungsansätze.
Unter der Oberfläche: tiefergehende Facebook– und Open Web-Kritik. Wie es ein kann, dass man sich eigentlich auf Web-Standards einigt und am Ende eh wieder jeder seine eigene graue, undurchsichtige Plörre kocht. Eben IExplorer-like. Und wofür Webentwickler solange gekämpft haben. Und wofür man debuggen, testen und dokumentieren konnte. Den Blick dafür schärfen, dass solche Gimmicks sicher kein Fortschritt sind.
„Think about it for a moment, okay.“ Dem ist nichts mehr hinzuzufügen. Ach, halt, stopp, da war noch das hier: „Is Facebook A Structural Threat To Free Society?“ Ja!