Sinatra auf Uberspace
Dsnblog auf uberspace zu testen bedeutet, dort Sinatra zum Laufen zu kriegen. Daran bin ich prompt erstmal gescheitert, und ich sitze immer noch daran (Dateien aus public werden nicht bereitgestellt). Aber ein erster Schritt war, diesen drei Anleitungen zu folgen:
- Ruby einrichten
- FastCGI mit Sinatra einrichten (übertragen von Rails)
- Mit Christians Blogartikel kontrollieren
Christians Artikel muss nicht immer nötig sein, war bei mir aber scheinbar kritisch: Statt über config.ru und rackup
startete ich sinatra direkt per bundler, mit
bundle exec ruby server.rb
Das führt hier aber dazu, dass nur eine generische Serverfehlermeldung erscheint. Stattdessen die config.ru eingerichtet:
require 'rubygems' require 'bundler' Bundler.require require './server.rb' run Sinatra::Application
und den Startbefehl (in der fcgi-bin/dsnblog) umgestellt:
exec rackup -E production
Nun wird was ausgegeben. Auf zur nächsten Baustelle!
Edit: Die nicht bereitgestellten Dateien war ein Pfadproblem, dafür kann uberspace wohl nicht. Hab ich jetzt gelöst, indem der Blog per .htaccess unter / läuft, statt unter /dsnblog. Christians Artikel hat die passende Regel.
Bash statt Grunt
Für dsnblog benutze ich ein paar moderne Techniken und Tools, z.B. Sprockets zur automatischen Minifizierung und Konkatenierung der Javascript und CSS-Dateien. Wenn man schon den tausendsten Blog baut, dann muss man es auch richtig machen, und irgendwann muss ich das ja lernen. Als ich nun vor dem Problem stand, dass diese Javascriptdateien auch einfach geupdatet werden sollen, wollte ich das natürlich ebenfalls richtig machen. Ich erinnerte mich an Yellowleds Bower-Artikel, recherchierte nach Alternativen, und entschied mich dann tatsächlich für Bower.
Ich bin gescheitert.
Zuerst funktionierte npm nicht. All diese Javascript-Paketverwaltungen basieren auf node (warum eigentlich?) und benutzen npm. Das jedoch hat in meiner Version noch den Zertifikatsfehler und musste erst umständlich entfernt und dann von außerhalb des Paketsystems neu installiert werden. Es gab dann noch ein paar andere Fehlermeldungen, die umschifft werden mussten, dann konnte schließlich bower tatsächlich installiert werden. Aber da war ich schon genervt und hatte mehr Zeit investiert, als ich wollte.
Und natürlich funktionierte bower dann nicht. Wahrscheinlich ist meine nodejs-Version zu alt, aber ich gehe jetzt nicht noch hin und update auch die, nur für ein Skript, das mir ein paar Dateien von Github zieht und in einen Ordner legt. Das ist der Fehler:
node.js:201 throw e; // process.nextTick error, or 'error' event on first tick
Und das ist meine Lösung:
#!/bin/sh script_dir="designs/default/js/" echo "update pace" curl -o "$script_dir"/pace.js https://raw.githubusercontent.com/HubSpot/pace/master/pace.js # don't update snack, as it would need to be build echo "update done"
Ein einfaches Bashskript, das die bisher eine Datei, die so aktualisiert werden kann, von Github zieht und in den Skriptordner legt.
Das hätte ich auch gleich so machen können.
Hacker News Colors für Firefox
Das Addon, anlässlich dessen Bau ich gestern über Firefox-Addons geschrieben habe, ist übrigens dieses: Hacker News Colors. Es ist ein simples Addon, das auf Hacker News unter den Votebutton und der Punktzahl mit einem farbigen Balken anzeigt, wieviele Punkte diese News schon hat. Das hilft meiner Meinung nach bei der Übersicht, um schnell zu erkennen, welche News besonders wichtig (weil tiefrot) oder besonders schnell nach oben gerutscht (weil hohe Position, aber noch gelb) ist.
Zusammen mit meinem userstyle sieht die Seite dann so aus:
Das Original ist nicht von mir, sondern von Martin Lissmats und für Chrome.
Firefox Erweiterungen
Ich habe heute meine erste Firefox-Erweiterung (noch nicht reviewed) hochgeladen und ich bin ein bisschen beeindruckt davon, wie einfach das war. Natürlich habe ich das Addon-SDK benutzt, wahrscheinlich wäre es sonst auch ein bisschen schwieriger gewesen.
Man lädt also das SDK herunter und führt das bin/activate-Skript aus, um es zu laden. Dann einen Ordner erstellen, ein
cfx init
ausführen und schon ist das Grundgerüst da. Die lib/main.js ist der Startpunkt des Codes, und so einfach zeichnet man mit ihr ein Widget:
var widgets = require("sdk/widget"); var tabs = require("sdk/tabs"); var widget = widgets.Widget({ id: "mozilla-link", label: "Mozilla website", contentURL: "http://www.mozilla.org/favicon.ico", onClick: function() { tabs.open("http://www.mozilla.org/"); } });
Für mich war relevanter, wie einfach mit JS die Zielseite manipuliert werden kann:
var data = require("sdk/self").data; var pageMod = require("sdk/page-mod"); pageMod.PageMod({ include: "*.ycombinator.com", contentScriptFile: [data.url("jquery-2.1.0.min.js"), data.url("hn-colors.js")]
Wobei data/hn-colors.js den seitenspezifischen jQuery-Code enthält, der einfach runtergeschrieben werden kann.
Ziemlich simpel, und - ich hab mal einen Blick in die API geworfen - dabei trotzdem recht mächtig. Und ich fühl mich jetzt, als hätte ich eine tolle neue Fähigkeit erlernt.
Elder Scrolls Online Beta
Ich durfte die Beta (GamersGlobal sei Dank) im Stresstest am Wochenende spielen. Wirklich weit kam ich nicht, was nur halb an anderen Aktivitäten liegt - sondern mehr daran, dass es mir nicht wirklich gefiel.
Gut, es ist eine Beta, und einiges was mir nicht gefiel könnte noch verbessert werden. Zum Beispiel die Grafik, die nämlich eher nach Morrowind (ohne Grafikmods) aussieht als nach einem Titel von 2014. Und klar, ich habe sie hochgeregelt. Nach dem Tutorial wurde sie zwar etwas besser, die dunkle Höhlenwelt wirkt einfach wesentlich hässlicher als die Oberwelt. Trotzdem, hübscher als Witcher 2 ist das nicht. Bei dem Bitmap-Gras bin ich mir allerdings ziemlich sicher, dass das ein Platzhalter sein muss. Sowas ist mir das letzte mal in Mario Kart 64 aufgefallen, und das ist fast 20 Jahre her. Gott, ich werd alt.
Das grundsätzlichere Problem dagegen werden sie nicht fixen können. Es ist ein MMO im Elder-Scrolls-Universum. Was ich haben wollte war ein normales CRPG im Elder-Scrolls-Universum mit Multiplayerfunktion. Und zwar seit Morrowind, denn dort gab es diesen Außenposten vor dem Aschenland, in dem sich die NPC-Abenteurer aufhielten und aus ihren Abenteuern erzählten. Die perfekte Lobby für einen Multiplayermodus, von dem aus dann eine kleine Gruppe zusammen aufbrechen könnte, oder einige wenige Spieler in die gleichen Instanz geschickt werden könnten.
ESO dagegen ist ein MMORPG, mit all dem Unsinn, der mir solche Spiele verdirbt. Wenn ich einen dunklen Skelettlord besiege, dann ist es zwar eventuell ok, wenn eine Gruppe wildfremder Abenteurer mir dabei hilft. Aber es ist eben nicht ok, wenn 20 Sekunden danach eine neue Gruppe ankommt und den gleichen Skelettlord wieder beschwört. Überhaupt, wildfremde Abenteurer: Was machen die hier? Während viele herumlaufende Spielerfiguren im Tutorial noch von der Geschichte angelegt sind, ist die nächste Stufe ein angeblich abgelegenes Dorf mit vermissten Personen, das von einem einzigen Schiff bedroht wird. Und dann rennen da Tausende Spieler herum und laufen zu den gleichen Orten wie ich, knieen an den gleichen Altaren, besiegen die gleichen Bossgegner. Von denen kann keiner den Vermissten sagen, dass sie heimkommen sollen, obwohl sie offensichtlich auch mit ihnen sprechen? Die Masse kann nicht einfach mal eben die zehn Banditen besiegen, die vor der Mine herumlaufen?
Natürlich könnte sie, die ganze Geschichte funktioniert so eben nicht mehr.
Denn dazu kommen andere MMO-Sünden. Gegner, durch die man einfach durchlaufen kann, zerstören für mich viel Immersion. Genauso wie Gegner, die aus dem Nichts spawnen, immer wieder. Das ganze Kampfsystem mit seinen Spezialfähigkeiten auf den Zahlentasten gefällt mir nicht, es fühlt sich nicht nach Morrowind/Oblivion an. Und warum kann ich meinem Diebcharakter nicht einen Flammenball in den (nichtvorhandenen) Magieslot legen, wie ich das in Oblivion tun durfte?
Das führt zu den anderen Brüchen mit den TES-Spielen, von den rigideren Klassen mal abgesehen. Ich kann damit leben, dass die Klippenläufer mich nicht mehr angreifen, die hab ich auch aus Morrowind herausgemoddet (aber müssen sie dann immer noch so schreien? Ich schreck jedes mal auf). Aber warum hat mein Argonier andere Rasseneigenschaften, bzw eben keine bis zu einer bestimmten Stufe? Und absolut inakzeptabel ist, dass Fähigkeiten eben nicht bei Benutzung verbessert werden, sondern bei erhaltener Erfahrung. Dadurch steigt beispielsweise der Skill Schwere Rüstung im Gespräch bei Questabgabe, nur weil gerade ein entsprechendes Rüstungsitem getragen wird, was einfach absurd ist. Und das Versprechen von Morrowind, jedes sichtbare Ausrüstungsitem zu bekommen, wenn ein Gegner besiegt oder ein NPC gemeuchelt wird, das wird auch nicht gehalten. Stattdessen trägt jeder Bandit ein einzelnes Goldstück mit sich herum.
ESO könnte immer noch ein gutes MMORPG sein. Aber das ist nicht, was ich wollte, und ich sehe nicht, dass es mich trotzdem interessieren würde. Und ganz sicher ist es kein Spiel, wofür ich Abogebühren bezahlen würde. Aber dafür kann es wenig, das kommt nämlich überhaupt nicht in Frage, selbst wenn es das beste Spiel auf Erden wäre.