Der Einzigste in China
Gedanken sind der Ort im Gehirn, wo Sprache nicht prozessiert wird.
Ich mag diesen Gedanken. Ihn formuliert, wenn das Impressum stimmt, Daniel Scholten auf Belles Lettres in einem Podcast namens Der einzigste und der Ober(st)e. Ich mag den Gedanken, weil er der Sprache die wohl richtige Bedeutung zuweist: Instrument und von Menschen in der Benutzung geformtes Etwas, mit dem sie sich Dinge mitteilen. Darüber kommt man schnell zum von ihm nebenbei erwähnten Primat der gesprochenen Sprache, was mir gut passt, weil es mich in meiner Abneigung gegen die durch FGdI eingeflößte Informatikerangewohnheit bestärkt, Sprache als Logik zu verstehen und dann künstlich so zu tun, als könnte man verneint gestellte Fragen nicht mehr richtig beantworten.
Außerdem stimmt die Beobachtung, gesprochene Sprache sei voller notwendiger Redundanzen, darüber wunderte ich mich erst kürzlich beim Transkribieren meiner Nutzertests.
Womit ich Belles Lettres immer verbinden werde: Ziemlich am Anfang meines Master-Studiums saß ich mit einer kleinen Gruppe in der Mensa und irgendwie startete einer die Diskussion, wie China und Chemie ausgesprochen wird. Ch als K gesprochen ist richtig und alles andere peinlich falsch, davon war er überzeugt und auch nicht von abzubringen, weil er in seinem vorherigen Studium mal extra einen Sprachkurs von echten Sprachwissenschaftlern mitgemacht hat, in dem ihm das so erklärt wurde. Nun hatte ich gerade diese Erklärung dazu gelesen und war daher keineswegs so einfach davon zu überzeugen. Meine Uneinsichtigkeit seiner offensichtlichen Überlegenheit in solchen Fragen plus seine nicht zu übergehende laute Möchtegern-Bestimmtheit ergab ein unschönes Tischgespräch und den Beginn einer anhaltenden Abneigung, die sich spätestens bei seinen rassistischen Witzeleien im - jawohl - China-Restaurant zum offenen Zerwürfnis verfestigte.Trotzdem oder vielleicht auch gerade deshalb gefällt mir der Artikel auch jetzt noch sehr gut, denn schon seine Einleitung ist eine schöne Gegenposition zum "So wurds mir erklärt und so ist es richtig":
Fangen wir mit dem Wesentlichen an: Welche Aussprache Ihnen auch immer eigen ist, Sie liegen damit richtig. Denn für die drei Varianten /?/, /ç/ und /k/ finden sich jeweils so viele Sprecher, daß man von keiner Standardform durch Mehrheit sprechen darf.
Mir ist bewusst, dass auch dies eine Erklärung ist, die man erklärt bekommen und dann für richtig halten kann - der Unterschied ist der verifizierbare Inhalt, der die Engstirnigkeit unmöglich macht.
Und jetzt also ein Podcast zu der einzigste. Die Argumentation beginnt bei alt-ägyptischen Vergleichsformen, es geht weiter mit Definition durch Lage im Raum (bei der obere), mit dem Beispiel der zweite, der zwanzigste und endet mit: Der Einzigste ist Determinierung, nicht überflüssige Steigerung. Ich lese da keine Empfehlung raus, so zu schreiben, die stilistische Kritik an der Redundanz wird ja nicht verworfen, aber ich werde mir merken, die Verwendung von der einzigste im Gespräch nicht mehr als Fehler anzusehen (was ich bisher tat, den Sprecher manchmal auch entsprechend korrigierte). Ich verkürze stark und konnte auch an einer Stelle nicht folgen (der Folgerung, dass vom Prinzip die Leute in Griechenland, die póteros sagen, die gleichen Leute sind, die bei uns der einzigste sagen), sondern ließ mich erst später überzeugen, deshalb würde ich empfehlen, die Erklärung selbst anzugucken.
Was ich an Belles Lettres übrigens nicht mag ist der Effekt, dass ich nach so einem Video erstmal weniger frei schreibe, mehr darauf achte, was für einen Unsinn ich hier fabriziere, ohne das Gefühl zu haben, dass der Text davon wesentlich profitiert.
IndexedDB als Cache
Die IndexedDB als großer Datenspeicher eignet sich meiner Meinung nach ziemlich gut als generischer Cache. Localstorage ist nett, um einzelne Dinge zu speichern, z.B. den Inhalt eines einzigen Textfeldes oder die Position der Scrollbar eines Multiselect-Feldes, aber mit 2,5 MB ist der Nutzen begrenzt. IndexedDB, mit 50 MB im Firefox - mehr mit Nutzererlaubnis - und 20% des verfügbaren Speicherplatzes in Chrome - was die Hälfte der Festplatte sein dürfte, wenn ich das richtig lese - eignet sich da schon für mehr.
Beispielweise cache ich damit die Lyrics im music-streamer, und wenn der Browsersupport das hergibt, möchte ich damit die Lieder selbst cachen (das geht noch nicht).
Leider ist die indexedDB-Api meiner Meinung nach hässlich und kompliziert. Sie ist beherrschbar, aber ich musste mich da ein bisschen durchkämpfen. Herausgekommen ist folgender Code:
var indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB; function cache(id, data) { var request = indexedDB.open("cache", 1); request.onupgradeneeded = function (event) { event.target.result.createObjectStore("cache"); }; request.onsuccess = function(event) { var db = event.target.result; var transaction = db.transaction(["cache"], 'readwrite'); transaction.objectStore("cache").put(data, id); }; } function getCached(id, success) { var request = indexedDB.open("cache", 1); request.onupgradeneeded = function (event) { event.target.result.createObjectStore("cache"); }; request.onsuccess = function(event) { var db = event.target.result; var transaction = db.transaction(["cache"], 'readwrite'); transaction.objectStore("cache").get(id).onsuccess = function (event) { success(event.target.result); }; }; }
Damit kann nun beliebiges gecached und wieder geholt werden:
getCached(id, function(res) { if (res == undefined) { res = getData(id); cache(id, res); } useData(res); });
Die Datei liegt als cache.js auf github.
Wächst das Internet exponentiell?
Die Telekom will Trafficbegrenzungen für normale DSL-Anschlüsse einführen, so geht es derzeit durch die Medien. Und auf dem Telekom-Blog wird dazu ein Nicht-Dementi veröffentlicht, das nur sagt, dass solche Tarife noch nicht eingeführt wurden, ohne Distanzierung von diesen Plänen. Verwiesen wird dabei auf einen Spiegel-Artikel mit den Worten:
Auf der einen Seite wächst das Datenvolumen exponentiell.
Doch stimmt das? Der Spiegel-Artikel gibt das gar nicht so einfach einfach her.
Definition: Wachstum
Was bedeutet exponentielles Wachstum überhaupt? Bei exponentiellem Wachstum wächst etwas immer stärker, je mehr da ist, um einen festen Prozentsatz. 2^x wäre eine solche Wachstumsfunktion: 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024 ... Man muss sich klarmachen, dass dies bei großen Werten im realen Leben extrem katastrophal sein kann - z.B. beim Ölverbrauch. Hätten wir einen festen Ölvorrat und wüchse unser Verbrauch exponentiell, stünden wir irgendwann an dem Punkt, an dem am nächsten Tick der gesamte verbliebene Ölvorrat verbraucht würde - genau das macht das Peak-Oil-Szenario so erschreckend.
Lineares Wachstum ist einfacher. Wächst etwas immer um den gleichen Wert, wächst es linear - beispielsweise wenn jemand jeden Tag eine Liegestütze mehr macht.
Polynomiales (kubisches) Wachstum (meine Vermutung: Internetwachstum entspricht eher sowas) sieht exponentiellem Wachstum ähnlich, hat aber nicht diese enorme Steigerung am Ende des Graphen. x³ ist das Beispiel im Graphen: 1, 8, 27, 64, 125, 216, 343, 512. Etwas, das immer mehr immer mehr wird, jedoch später mit immer geringerem prozentualem Wachstum.
Trafficentwicklung des Internets
Der Spiegel-Artikel gibt das exponentielle Wachstum also gar nicht so einfach her. Denn der fasst die Studie so zusammen:
Bis 2016 werde sich das durch die weltweiten Computernetze transportierte Datenvolumen vervierfachen
Eine Vervierfachung ist aber noch nicht exponentielles Wachstum. Exponentielles Wachstum ist irgendwas^x, eine Vervierfachung ist 4*x. Man sieht mein Problem auch schön auf dem (per Cisco-Tool) erstelltem Graph der Trafficprognosedaten:
Die Linie für z.B. Nordamerika sieht linear aus. Ist das im gesamten wirklich exponentielles Wachstum?
Hier noch die Daten des Gesamttraffics aus dem Whitepaper per Wolfram:
Das sind 30.734, 43.441, 54.812, 69.028, 87.331, 110.282 PB per Monat.
Und immerhin: Das Wachstum erhöht sich im Laufe der Zeit. Jährlich wächst der Traffic um 13, 11, 15, 18, 23 PB per Monat. Lineares Wachstum können wir also ausschließen. Aber ist das nun exponentiell oder polynomial?
Sieht man das am Steigungsgraph der Interpolation?
Ich nicht.
Exponentielles Wachstum ist Wachstum um einen festen Prozentsatz. Und prozentual ist das bei den gegebenen Werten Wachstum um 43%, 25%, 27%, 26%, 26%. Das ist also praktisch exponentielles Wachstum, abgesehen von der Abweichung im ersten und zweiten Jahr. Die prozentualen Wachstumswerte als Chart:
Nebenbei: Mathematisch erschlagen
Hier hatte ich zuerst die Interpolation genommen und mir mit großen x angesehen. Aber eine Interpolation per Polynom kann doch nur polynomiales Wachstum zeigen, oder? Und Wolfram kann auch nicht einfach die Fortsetzung dieser Reihe berechnen, was ich einfach mal als Hinweis auf nicht-exponentielles Wachstum nahm.
Man kann auch versuchen, das per Hand zu berechnen. Und vergessen wir dabei einfach mal den Wachstumsabfall - es geht also um das Wachstum 11, 15, 18, 23 der Werte 43, 54, 69, 87, 110.
"Es gibt ein m>1, so dass für n>=n_0 stets (a_n+1)/(a_n) >=m ist, dann liegt exponentielles Wachstum vor (man zeigt leicht a_n>= C m^n)"
-
- 54/43 >= m
- 69/54 >= m
- 87/69 >= m
- 110/87 >= m
Ja, ein solches m existiert:
Demnach wächst das Internet exponentiell. "Gibt es M>0 und p mit: für n>=n_0 ist stets a_n>M n^p, dann hat man mindestens polynomiales Wachstum."
Das ist auf deutsch die simple Überlegung: Finden wir ein Polynom, das weniger stark wächst als die gegebenen Werte?
Gut, prüfen wir das. Das zu lösende Gleichungssystem:- 43 > M * 1^p
- 54 > M * 2^p
- 69 > M * 3^p
- 87 > M *4^p
- 110 > M * 5^p
Und ja, solche p und M scheinen zu existieren:
"Gibt es M und p mit: für n>=n_0 ist stets a_n<=M n^p, dann hat man höchstens polynomiales Wachstum."
Finden wir ein Polynom, das stärker wächst als die gegebenen Werte?
- 43 <= M * 1^p
- 54 <= M * 2^p
- 69 <= M * 3^p
- 87 <= M *4^p
- 110 <= M * 5^p
Und ja, auch solche M und p gibt es:
Demnach wächst das Internet nicht exponentiell, sondern polynomial.
Und dadurch wird klar: Diese Formeln sind für echte Folgen, nicht für ein paar Werte, und helfen hier nicht weiter. Sie sagen nur, dass man die Werte sowohl exponentiell als auch polynomial fortsetzen kann.
Trafficentwicklung in Deutschland
Aber es geht in der Diskussion um Volumenbegrenzungen für DSL-Anschlüsse ja gar nicht um das ganze Internet. Es geht um DSL-Anschlüsse in Deutschland, und ohne mobiles Internet, ohne die Internetisierung der Entwicklungsländer, kann das alles ja schon wieder ganz anders aussehen. Oben im Cisco-Graph sah das Wachstum für Deutschland sehr linear aus.
Aber es geht ja ein bisschen genauer.
Aus der Advanced-Version des Cisco-Tools kommen die genauen Daten: Traffic bis 2016 ohne mobiles Internet und nur für Deutschland. Zugunsten der Telekom mische ich Business und Consumer-Segment, auch wenn es bei diesen Tarifen wahrscheinlich nur um Consumer gehen wird (so ganz sicher kann man sich eben nicht sein). Das sieht so aus
Die genauen Werte sind 1196.9, 1748.6, 2175.3, 2744.6, 3370.2, 4040.4. Das Wachstum also 552, 427, 569, 626, 670. Wieder sich steigerndes Wachstum, abgesehen von dem Einbruch auf 2013. So sieht die Ableitung der Interpolationsfunktion aus (interessante Abweichung):
Das ist Wachstum um 46%, 24%, 26%, 22%, 19%. Also: Nein, bei dem Wachstumsabfall am Ende ist das eher kein exponentielles Wachstum, sondern polynomiales.
Als Chart:
Fazit
Zuerst: Ja, die Cisco-Daten sagen aus, dass das Internet insgesamt exponentiell wächst (wenn Internet == Traffic). Nicht jedoch das deutsche Internet ohne Mobilfunk, um das es bei der DSL-Volumenbegrenzungsdiskussion geht. Aber auch das deutsche Internet wächst nicht linear, sondern es wächst der Prognose nach von 26% bis 19% im Jahr, was immer noch gewaltiges Wachstum ist. Das könnte für die Telekom tatsächlich eine Herausforderung sein - um das richtig zu bewerten müsste man die Kapazitäten kennen. Trotzdem deuten die Daten daraufhin, dass sich die Situation für die Telekom im DSL-Bereich in Zukunft eher entspannen wird, wenn das prozentuale Wachstum tatsächlich weiterhin abnimmt. Dementsprechend halte ich den simplen Hinweis auf exponentielles Wachstum des Internets für irreführend.
PS: Danke an Robert und Hartmut für eure Hilfe beim Erstellen des Artikels.
Bash: echo mit Umbrüchen
Weil ich es das nächste mal sicher wieder brauche:
So gibt man einen String in der Originalformatierung aus:
test="abc def" echo -e "$test" abc def
Genauso in Backticks:
test2=$(echo -e "$test" | sed 's/[ad]/z/g') echo -e "$test2" zbc zef
Wobei auch die doppelten Anführungszeichen gehen:
test2="$(echo -e "$test" | sed 's/[ad]/z/g')" echo -e "$test2" zbc zef
iCTF 2013 - { netflow: [] }
Ich komme gerade vom iCTF 2013.
Das Szenario war wie folgt: Auf einem isolierten Server liefen eine Reihe von (größtenteils Python-)Diensten, z.B. ein kleines Blogsystem und ein Spiel. Die Teams schreiben Exploits, um über die enthaltenen Sicherheitslücken an die Flaggen (spezielle Strings) zu kommen, führen diese aber nicht selbst aus, sondern übermitteln sie an die Spielleiter, die in einem eigenen Dienst die Exploits dann gegen die Dienste der anderen laufen lassen. Entdeckt ein Team, dass ein anderes gerade auf eine eigene Flagge zugegriffen hat, kann es das melden und so auch dafür Punkte bekommen.
Die Exploits zu finden war durchaus eine Herausforderung. Kurz vor Ende wurde noch ein echtes entdeckt, konnte aber nicht mehr rechtzeitig programmiert werden, ein anderes Exploit funktionierte unerklärlicherweise nicht und ein drittes wurde zwar übermittelt, aber nicht mehr ausgeführt. Das war durchaus schade.
Mich hat die Verteidigung gereizt. Relativ früh bemerkten wir, dass Flaggen aus dem Pseudo-Blogsystem ausgelesen wurden. Das Schema war relativ simpel: Flaggen lagen als Datei in blogsystem/flags, die Artikel des Blogsystems als Datei gespeichert in blogsystem/posts, und die Angreifer schafften es, in die blogsystem/posts.metadata Javascript einzuschleusen, das dann vom (node-)Server ausgeführt wurde und die Flaggen in die posts geschrieben hat. Also schrieb ich ein Bash-Skript, dass sekündlich alle Posts auf Flaggen durchsucht, bei entdeckter Flagge das Änderungsdatum der Datei protokolliert und an meinen Rechner schickte (per netcat). Dort lief dann ein Skript, das aus dem netflow-Protokoll die id desjenigen auslas, der zu dem Zeitpunkt des Angriffs auf den Port des Blogsystems zugegriffen hat. Wegen mechanize erledigten ruby-Skript das Ausfüllen der Formulare, wieder ein Bashskript steuerte die beiden Rubyskripte und nahm die Angriffszeitpunkte entgegen.
Das hat auch ganz gut funktioniert, obwohl es in dem Trubel unwahrscheinlich lang gedauert hat, die Skripte zum Laufen zu kriegen (mein letztes Bash-Skript ist ne Weile her). Oder es hätte ganz gut funktioniert, wenn nicht die ganze Zeit die Infrastruktur ausgefallen wäre. In den letzten Stunden sah das netflow-Log so aus:
{ "netflow": [] }
Das machte das Schreiben der Skripte nicht einfacher (json mit Bash parsen erfordert grep und sed, und das muss man schon wirklich gegen Livedaten testen) und machte die ganze Bemühungen für die Katz, weil das fertige Skript ohne Angreifer-Log dann ja auch nichts reporten konnte.
Trotzdem kamen aus dieser Ecke, vor dem Zusammenbruch der Infrastruktur, unsere Punkte, und das könnte man das nächste mal sicher noch verbessern (Intrusion-Detection-System verwenden und direkt Wireshark einrichten).
Speicherverbrauch kleiner Fenstermanager unter Precise
Wieder Daten, die nicht von mir sind (Quelle, via).
Die Werte sind klein, aber auch anders errechnet als die von mir damals, denn hier wurde nur der Speicherverbrauch der Fenstermanager selbst angeschaut, nicht des Gesamtsystems.
Für mich ist es interessant zu sehen, wie die Vermutungen und Trends von damals sich bewahrheitet und gehalten haben: XFCE ist immer noch deutlich speicherhungriger als die Alternativen, insbesondere LXDE, was wiederum deutlich größer ist als die echten kleinen Fenstermanager. Und E17 kann mit LXDE mithalten, was schön zu sehen ist - das war bei der letzten Messung nur zu erhoffen.
Sinatra 1.4.1: Method set not found
Für mein Blogsystem habe ich natürlich auch eine Möglichkeit vorgesehen, das Design zu wechseln. Dafür werden die Konfigurationsvariablen :views und :public_folder zum neuen Design umgebogen. Früher änderte das in der Datenbank die "design"-Option und rief danach einfach diese - außerhalb der helper definierte - Funktion auf, die auch beim Start von Sinatra ausgeführt wird:
def loadConfiguration() design = Database.new.getOption("design") set(:design_root) { File.join(File.dirname(app_file), "designs") } set(:views) { File.join(design_root, design) } set(:public_folder) { File.join(views, 'public') } end
Das funktioniert mit der neuen Sinatra-Version nicht mehr. Die Funktion funktionierte nur noch, wenn sie zu Beginn im configure aufgerufen wird - aber später, wenn sie in einer Route (post /setOption
) aufgerufen wird, findet Sinatra die set-Funktion nicht mehr:
#<NoMethodError: undefined method `set' for #<Sinatra::Application>
Da wurde wohl der Scope verändert - später, beim Befolgen der Route, ist man im Sinatra::Application-Objekt, beim Start jedoch in main. Entweder war das früher anders, oder die set-Funktion wurde früher dem Sinatra::Application-Objekt mitgegeben
Lösung für mich war, beim Start direkt den Code mit set auszuführen, später jedoch mit dem settings-Objekt zu arbeiten:
def loadConfiguration() design = Database.new.getOption("design") settings.design_root = File.join(File.dirname(settings.app_file), "designs") settings.views = File.join(settings.design_root, design) settings.public_folder = File.join(settings.views, 'public') end configure do design = Database.new.getOption("design") set(:design_root) { File.join(File.dirname(app_file), "designs") } set(:views) { File.join(design_root, design) } set(:public_folder) { File.join(views, 'public') } end
Die Lügen der Spielehersteller
Spieler sind dumme Kiddies. Zumindest scheinen das einige Spielehersteller zu glauben, wenn man sich so ansieht, mit welcher Leichtigkeit Lügen als Verteidigung benutzt werden. Drei Beispiele:
1. EA: SimCity rechnet in der Cloud
Eigentlich ein schöner Gedanke: Das Spiel vom Spielehersteller statt auf dem eigenen Rechner berechnen lassen und auf dem eigenen PC nur ein Video davon anzeigen. Mit solchen Streaming-Angeboten wurde vor kurzem noch massiv experimentiert, immer verbunden mit Abogebühren. Also richtig nett von EA, bei SimCity jedem Kunden teure Rechenleistung in der Cloud zur Verfügung zu stellen, um so die ungeheuer aufwändige Städtesimulation auf den lächerlich unterdimensionierten Core i7-Gamer-PCs überhaupt spielen zu können...
Dies behauptete Lucy Bradshaw gegenüber Polygon:
With the way that the game works, we offload a significant amount of the calculations to our servers so that the computations are off the local PCs and are moved into the cloud. It wouldn't be possible to make the game offline without a significant amount of engineering work by our team.
Natürlich ist das Quatsch. Rechenleistung in der Cloud ist viel zu teuer, um jedem Einmalkäufer unbegrenzt lange ein Spiel laufen zu lassen. Und die Serverfarmen können sowas auch gar nicht so ohne weiteres - Spiele sind tatsächlich anspruchsvolle Aufgaben, und die typischen Spiele-PCs sind entsprechend leistungsstarke Geräte. Da müsste schon hochoptimierte Soft- und Hardware laufen, um nicht jedem Nutzer praktisch einen kompletten Spieleberechnungsserver zur Seite stellen zu müssen - und auch dann wäre das noch zu teuer.
Nein, das war nur eine Schutzbehauptung, um das wahnwitzige, kundenfeindliche und nicht funktionierende Always-On-DRM zu rechtfertigen. Sonst wäre es nicht möglich, dass das Spiel auch zeitweise ohne Verbindung läuft. Später "enthüllte" ein Insider offiziell, dass die Server nicht notwendig sind. Trotzdem war die Lüge nicht völlig uneffektiv, da kein normaler Kunde die Behauptung prüfen kann - und seither wimmelt es in Diskussionen zum Spiel von Fanboys, die artig den Unsinn wiederholen.
2. Bioware: Menüs dynamisch? Können wir nicht
DLCs sind ein wichtiges Werkzeug im Kampf um das Geld der Spieler. Mit möglichst kleinen Preisen unter der Preisgrenze des Kunden bleiben ist die eine Seite dieser Taktik. Die andere ist eine Anhebung des Verkaufspreises des Spieles: Teile des Spiels werden zurückgehalten und nachher extra verkauft. So kann ein Spiel vermeintlich zum normalen Preis von ~49,99€ angeboten werden, obwohl der reale Preis - mit den DLCs gerechnet - deutlich teurer ist.
Nicht immer stimmt das. Manchmal sind DLCs tatsächlich einfach sehr kleine Addons, die nach Fertigstellung des Spieles entwickelt wurden und einen Teilbereich sinnvoll erweitern. Sicheres Zeichen für die geplante Verarschung der Kunden ist jedoch, wenn das DLC bereits fertig vorbereitet im Hauptspiel ist.
So geschehen bei Mass Effect 3: Das zusätzliche Teammitglied des DLCs From Ashes war bereits vor dem DLC im Hauptspiel enthalten. Die Lüge lieferte dann Michael Gamble mit der Behauptung, dass dies nötig gewesen sei, um im Charakterauswahlbildschirm ihn nach DLC-Installation anzeigen zu können:
We wanted Javik to be a fully featured squad member, with deep dialogue throughout the game – and we needed him to be accessible via the character selection GUI (which you cannot simply ‘overwrite’ with DLC).
Natürlich gelogen - für einen Programmierer ist es total normal, Menüs von einem Layoutmanager dynamisch, je nach Anzahl der Elemente, zeichnen zu lassen. Wieder eine Lüge als Schutzbehauptung, diesmal eine faktisch inkorrekte technische Tatsachenbehauptung, die der dumme Kunde schon glauben wird. Nicht unpassender Höhepunkt eines Spiels, das alle Erwartungen und Versprechungen als Ende einer Trilogie komplett nicht erfüllte.
3. Westwood/EA: So planten wir das zumindest
Command & Conquer - Tiberian Sun ist ein Beispiel, das mich betrifft. Damals kaufte ich das Spiel noch vor den Tests voller Begeisterung und nahezu unbesehen, und las auf der Rückfahrt mit freudiger Erwartung die Packung. Aber so ganz stimmte nicht, was da stand. Was man heute noch findet sind Berichte über die geschönten Screenshots - die hatten Explosionen, mehr Details und mehr Effekte. Aber auch die Beschreibungstexte stimmten nicht (und dazu finde ich inzwischen keine Quellen mehr): Von deformierbaren Terrains und der Bedeutung von Tag/Nacht war da die Rede, aber nichts davon war wirklich im Spiel.
Ich habe erst deutlich später realisiert, dass der Unterschied zwischen dem, was ich erwartete, und dem eigentlich Spiel nicht meinem übermächtigen Vorstellungsvermögen, sondern den falschen Versprechungen zuzuschreiben war. Die Lüge hier war ein Versuch, mit falschen Beschönigungen die Verkaufszahlen anzukurbeln - in einer Zeit, bevor im Internet deswegen die Woge der Empörung laut gewesen wäre. Es war an den Spieletestzeitschriften, ihre Leser rechtzeitig zu warnen - was EA durch eine damals ungewöhnlich späte Herausgabe des Testmusters effektiv verhinderte.
Sicher gibt es genug weitere Beispiele, um mit falschen Versprechungen und eiskalten Lügen von Spieleherstellern einen ganzen Blog zu füllen.
Die Wehwehchen der Anderen
Unity, Adware, Mir und Rolling Releases - es gab und gibt viel zu diskutieren und zu streiten im Ubuntuland. Vielleicht beruhigt da der Blick über den Tellerrand: Auch andere Distributionen und Projekte hatten in letzter Zeit ihre Probleme, und manche davon waren unschön. Unschön genug, um Mitleid zu haben, und sich darüber zu freuen, dass dieser Kelch bisher an uns vorbeigingen.
Fedora 18: Das Anaconda-Desaster
Vielleicht hätte eine Orientierung an den Qualitätskriterien des Wikigotts Dee das verhindert (na, wie komm ich darauf?), aber so hatte Fedora 18 nach Release wohl mehr als nur kleinere Qualitätsprobleme. So viele, dass sie ein äußerst spaßiges Review provozierten. Marke:
Desktop effects
Did not work, at all. Nothing.
Aber es war der Installer Anaconda, der so richtig missraten zu sein scheint. Unter der Abschnittsüberschrift "Installation - Worst ever" finden sich Fundstücke wie
You enter a world of smartphone-like diarrhea that undermines everything and anything that is sane and safe in this most important of software configuration steps.
Wer das für übertrieben hält - und nun gerade ansetzen will, mich für die Auswahl dieses doch offensichtlich verwerflichen Reviews zu flamen - dem seien die Screenshots und die ausführliche Beschreibung ans Herz gelegt. Von
Confirmation buttons show everywhere, text is spread about, the fonts size and placement is equally chaotic. I could not think of any way to make this any uglier or less friendly.
zu
It gets worse once you hit the installation destination nonsense. You get disks represented visually. That's it. Not by their names. By identical icons with labels that refer to actual disk models. Not /dev/sda or /dev/sdb, which is what you expect. No. You get the manufacturer's model strings. And I happen to have two identical disks. So which is which? I'll give you a hint, the two disks are shown in reverse order, /dev/sdb first, /dev/sda second. What moronity.
bis
Let us not forget bad alignment, fonts and all that. And then, it says below, before continuing to the next step, but there's no next step, no buttons. Look at the lost equity. Look at the stupidity of that whole deal. If software could contract disease, it would be suffering right now from Ebola, AIDS and Typhus, all at the same time.
ist alles dabei und wird alles gezeigt.
Der geneigte Ubuntunutzer mit vagen Wissen durch Hörensagen über Fedora mag sich nun wundern: "Dass Fedora früher Probleme mit dem Installer hatte ist mir neu, woher kommen die Probleme jetzt?" Und tatsächlich ist das eine Situation, die dem kritischen Ubuntunutzer bekannt vorkommen könnte: Er wurde neu designt. Von Designern. Über einen längeren Zeitraum wurde versucht, mit geballter Designpower Anaconda einfacher, sicherer und besser zu machen - insbesondere bei Máirín Duffy habe ich das aus der Ferne von Anfang an verfolgt. Und was auf dem virtuellen Papier noch halbwegs vernünftig klang, wurde mit einer falschen Annahme hier, einer vermeintlichen Erleichterung dort und insbesondere inkonsistenter Umsetzung zu einem weithin gescholtenen Projekt, das wohl sogar das Release verzögert hat.
Java: Die unsichere Sprache
So kritisch Usability-Probleme, Machtspiele und Technologiefragen auch sein mögen - es geht immer noch kritischer. Beispielweise könnte eine Programmiersprache dafür bekannt werden, inhärent unsicher zu sein. Auf dem besten Weg ist Oracles Java-Projekt: Da nutzen Super-kritische Java-Exploits gleich zwei Bugs, und das war nicht der erste in letzter Zeit. Da bekommt selbst eine extra Webseite zum Beantworten der Frage "How Long Is It Since The Last Java Zero Day Was Discovered?" eine echte Daseinsberechtigung.
Die Propagandawirkung wird verschärft durch Oracles Hintergrund. Oracle kaufte Sun, und auch wenn Sun durchaus selbst Probleme mit der Entwicklergemeinde hatte, wurde Java in den letzten Jahren eine weitgenutzte Programmiersprache - insbesondere auch im akademischen Umfeld. Trotz all der Kritik, welche die Sprache durch ihren Boilerplate-Lastigkeit immer wieder abbekommt. Doch Oracle tat einiges dafür, weiteren Wachstumserfolg zu verhindern: Direkt wurde Google für ihre Java-Nutzung in Android verklagt, was ein äußerst interessantes API-Copyright-Urteil gegen Oracle provozierte - und viele abschreckte, Java auch nur in Betracht zu ziehen. Als ob Oracle nicht schon für seine absurde Entscheidung, Solaris proprietär zu machen, verhasst genug wäre.
Die Zero-Days-Exploits jetzt passen da nur zu gut ins Bild des eben auch unfähigen, geldgierigen und unethischen Giganten.
Und sonst?
Welches Projekt hatte noch Ärger? Um ehrlich zu sein, an Streitthemen in der Linuxgemeinde ist in den News fast immer Ubuntu beteiligt. Vielleicht habe ich ja was übersehen? Wenn ja, ab in die Kommentare damit - Ubuntu ist manchmal fürchterlich, aber das wenigstens nicht alleine.
Chrome verbieten, Zoomen zu verbieten
Seiten können mit der CSS-Anweisung
-webkit-text-size-adjust: none
verhindern, dass Texte in Chrome beim Zoomen vergrößert werden. Mir ist nicht ganz klar, warum solch ein offensichtlich Accessibility-feindliches Feature in den Browser kommt. Gutes Beispiel war dieser ansonsten interessante Artikel über Ruby 2.0 (inzwischen wurde die Seite gefixt): Egal wie weit hineingezoomt wurde, der mit 13px definitiv zu kleine Text blieb immer gleich groß - besonders ungut, weil iReader - sonst die beste Lösung für solche Fälle - den Inhalt nicht erkennt.
Wie kommt man auf solchen Unsinn? Wie auch immer, natürlich gibt es eine Lösung - mehrere sogar. Die komfortabelste ist diese Erweiterung, die -webkit-text-size-adjust
einfach für alle Elemente auf auto !important
setzt (via).
Geanys/GTKs Copy & Paste reparieren
Wenn mich eine Sache an Geany störte, dann ist es das fehlerhafte Copy&Paste-Verhalten: Markierter Text wird aus dem Clipboard gelöscht, sobald der Cursor woanders hin bewegt wird, sodass Einfügen per mittlerer Maustaste anders als in jeder anderen Linuxanwendung nicht richtig funktioniert (ratet mal, in welchem Bugtracker seit 7 Jahren ein entsprechender Bug offen ist? Korrekt, Gnomes, genauer gtk+).
Die Lösung: Das Paket xfce4-clipman installieren und den gleichlautenden Befehl ausführen, am besten in den Autostart packen. Zumindest Geany funktioniert nun richtig, und auch andere defekte Programme sollten das Problem jetzt nicht mehr haben.
Erinnerungswürdige Geany-Funktionen
Ich programmiere lieber in einem Editor als in einer IDE. Und grundsätzlich darf ein Editor für mich so schlicht wie möglich sein - obwohl ich eine Weile emacs benutzt habe, was mir irgendwann zu kompliziert wurde. Genausowenig halte ich von vim und den absurden Tastaturverrenkungen dort (im Terminal meine Wahl: nano).
Aber Geany hat mich getäuscht und so langsam an einige Funktionen herangeführt, die ein einfacher Editor nicht hat. Beim ersten Ausprobieren gefiel mir Geany, weil es mir editorartig direkt den Text präsentierte - das Pluginsystem und integrierte Terminal konnte ich erst ignorieren, später deaktivieren. Die Tastaturbelegung war mir zugänglich, da standardkonform, und weil ich zu der Zeit gerade Eclipse nutzen musste, war die Funktions- und (inzwischen deaktivierte) Dateiübersicht - als IDE-Feature im vermeintlich schlichten Editor - auch kein Grund zur Verwunderung. Die Oberfläche lässt sich gut anpassen, so sieht meine inzwischen wirklich schlicht aus:
Trotzdem, Geany ist mehr als ein einfacher Editor. Und einige fortgeschrittenere Funktionen haben sich im Laufe der Zeit dann doch als praktisch herausgestellt:
Column select
- Mit "Shift + Alt + Pfeiltaste" kann Text spaltenweise markiert werden. Meine Quelle zeigt dafür ein schönes Beispiel: Will man aus einer Liste
/home/abc/* /home/abc/*
jeweils das /home/\w+/ entfernen, könnte man so den entsprechenden Teil markieren und löschen. Vorausgesetzt die Länge ist immer gleich. Nicht so schön wie die Sublime-Multicursor-Funktion und zugegeben selten benutzt, aber trotzdem gelegentlich praktisch.
Markierung setzen und hinspringen
Relativ oft arbeite ich in einer Datei an mindestens zwei Stellen gleichzeitig. Ist die Datei relativ klein ist das kein Problem, und ich versuche inzwischen wirklich, die LoC möglichst gering zu halten. Doch ist es ein fremdes Projekt oder auch ein älteres Serendipity-Plugin von mir (die Serendipity-Plugin-Struktur führte bei mir zu organisch wachsenden Ein-Datei-Codebasen, so hat die serendipity_event_spamblock_bayes.php immerhin 2000 Zeilen, und das ist bereits die smartifizierte Version), wird das schnell übersichtlich. Jeweils eine Markierung setzen und zwischen denen hin- und herspringen ist eine Funktion, die ich mir gewünscht habe bevor ich sie kannte: Auf den Rand neben der Zeilennummer die Markierung setzen, dann mit "Strg + ," oder "Strg + ." zur nächsten Markierung rauf- bzw runterspringen. Anker für Code, von mir noch zu selten benutzt.Zeilen duplizieren
Simpel: Ein "Strg+d" (ich hoffe, das ist die Defaultbelegung) fügt unter dem Cursor die Zeile ein, in welcher der Cursor gerade ist. Ist jedoch Text markiert, wird der markierte Text hinter den Cursor kopiert. Der Cursor bleibt jeweils genau da, wo er ist.
Eine der simplen Funktionen, die ich unter Eclipse praktisch fand und später vermisste habe, und deren Ausgestaltung unter Geany mir gut gefällt.Absatz formatieren
Bei Code hat das keinen Effekt, aber ich fand es praktisch als ich an Latex-Dokumenten gearbeitet habe: Mit "Strg+j" wird der momentane Absatz entsprechend der Zeilenlängenvorgabe umgebrochen. Verhindert, immer wieder Enter zu drücken weil die Zeile zu lang wird und das so manuell zu machen.
Suchen- und Ersetzen
Code muss manchmal überarbeitet werden, und Kleinkram wie automatische und codeweite Variablenumbenennung ist eine Stärke klassischer IDEs. Mit dem Suchen- und Ersetzen-Dialog, aufrufbar per "Strg+h", kann Geany das auch, sogar mit Regexpressions, also für wesentlich mehr als nur einfache Variablenumbennungen geeignet.
Dateiweise oder in allen geöffneten Dokumenten, schrittweise oder alle auf einmal, und wenn schrittweise, dann in unterschiedlichen Tempi - ich nutze immer noch manchmal sed für sowas, aber Geanys Funktion ist mächtig und nützlich genug, um sed desöfteren zu ersetzen. Und die Änderung schrittweise durchzuführen und so in der GUI prüfen zu können vermeidet Fehler.
Zusätzlich beherrscht Geany eine gut funktionierende Syntaxvervollständigung, die erwähnte Funktionenübersicht erweist sich immer wieder als praktisch, und wenn man wollte, könnte man mit dem Pluginsystem und dem Terminal sicher etwas anfangen. Man kann Geany aber auch als simplen Editor ohne weitere Fähigkeiten nutzen - er lädt schnell genug, um problemlos mal schnell eine Config-Datei anzupassen. Was man über Eclipse nicht gerade sagen kann.
LSR-Protest-Plugin
Möglichst gar nicht auf Verlagsprodukte zu verlinken - weniger noch als zuvor - ist mein Weg, der Absurdität des Leistungsschutzrechtes zu begegnen. Matthias Gutjahr hat dankenswerterweise ein dabei helfendes Wordpress-Plugin zu Serendipity portiert: Durch das LSR gefährlich gewordene Links zu Verlagsprodukten, die sich nicht deutlich vom LSR distanzieren, werden durch Links auf eine erklärende Blockseite ersetzt (von der aus dann ein Link doch zum Originalziel führt). So können Blogger sich vor Geldforderungen der Verlage schützen und gleichzeitig die Verlage durch Linkentzug bestrafen.
Das funktioniert für neue Artikel bei mir im Grunde einwandfrei. Links in älteren Artikeln wurden hier im Blog allerdings nicht automatisch ersetzt, das kollidiert wohl mit dem Cache des entryproperties-Plugins. Und die verwendete Blockliste irritiert mich etwas: Dort fehlt ausgerechnet spiegel.de, die bei mir meistverlinkte gewöhnliche Nachrichtenseite, obwohl spon keine klare Position gegen das Gesetz bezieht.
Das Plugin kann per Spartacus installiert werden
SimCity offline
Seit vorgestern ist SimCity für amerikanische Spieler geöffnet. Und natürlich brechen die Server zusammen (via).
SimCity hat einen Always-On-Kopierschutz, scheinbar recht fest in das das Spielprinzip eingebacken, mit Nachbarsstädten und Anreizen, mehrere kooperierende Städte zu bauen. Und so wie es sich anhört, leidet das Spiel darunter (zu wenig Platz pro Stadt). Klingt erstmal so, als wäre das abgesehen des Platzmangels der Versuch einer halbwegs sinnvollen Ausgestaltung, auch wenn das selbstverständlich eine reine Multiplayer-Option hätte werden können.
Aber dass die Server nicht halten ist so richtig lächerlich.
EA weiß genau, dass sie unter Beobachtung stehen. Aber wenn sie nichtmal genug Serverkapazitäten für den Start schaffen, interessiert sie das nicht. SimCity ist eine starke Marke, die Kunden werden das schon schlucken - und die Serverkapazitäten etwas geringer zu halten spart Geld. Nebenbeobachtung: Spielefirmen scheinen immer mit eigenen Servern zu arbeiten, nie frei skalieren zu können, wahrscheinlich wäre auch das zu teuer.
Das absurde: Schon der Name SimCity weckt bei mir Erinnerungen an viele Spielstunden mit SimCity 2000, verbracht zum einen an einem PC mit Modem und Kosten im Minutentakt, das natürlich aus war, und Jahre später nochmal an mehrere Sommernachmittage in einer Dachkammer gänzlich ohne Internet.
Mit Always-On-Kopierschutz gewinnt man nur die Kiddies, die ihrer Erinnerung nach Zeit ihres Lebens Internet hatten, die noch nie nach einem Umzug monatelang ohne dastanden, die noch nicht erlebt haben, wie bei anderen Spielen Server zusammenbrechen - oder solche, denen das alles scheißegal ist, für die 55 € kein Geld und eine Kaufentscheidung nie auch nur im entferntesten moralisch ist, die bei 30 Minuten Warteschlange eben auf Youtube rumtrollen. Willfährige Kunden, die schlucken was sie serviert bekommen.
Hallo OSBN
Liebe UU-Planetenleser, hier gibt es nichts zu sehen ;)
Den OSBN-Bloggern und Lesern möchte ich jedoch hiermit Hallo sagen, und testen ob die Feedeinbindung funktioniert.
onli blogging existiert seit Anfang 2008. Ich halte hier Dinge fest, die ich später wiederfinden will und versuche zu teilen, was mich interessiert - also findet sich hier Spielereview neben Codeschnipsel neben Vorstellungen von eigenen Programmen, oder was auch immer gerade meine Aufmerksamkeit fesselt. Nur von Politikthemen halte ich mich inzwischen fern.
In OSBN wird nur der Linux-Feed eingebunden, genauso wie im UU-Planeten, so sollte das thematisch immer passen.