hdparm nach suspend ausführen
Monday, 20. April 2015
Suspend to Ram hat den kleinen nervigen Bug, dass die Festplattenparameter verloren gehen. Zumindest gilt das auf meinem System, bei dem ich den Standby-Modus via s2ram und damit uswsusp nachgerüstet habe. Bei mir sind die per hdparm gesetzten Parameter wichtig, denn darüber werden die sonst zu lauten Festplatten nach kurzer Inaktivität schlafen geschickt (hpdarm -S 24
…).
Die einfache Lösung ist, den s2ram
-Befehl in ein Skript /usr/local/bin/standby zu wrappen, das nach dem Suspend hdparm ausführt:
#!/bin/sh s2ram hdparm -S 24 /dev/disk/by-uuid/AA38C5FE38C5C991 hdparm -S 24 /dev/disk/by-uuid/0be0233d-c885-4492-9e57-f81df851ca25
Dieses Skript per sudo ausführen, und 2 Minuten nach dem Start ist wieder Ruhe.
Dafür steht in meiner ~/.icewm/menu:
prog standby standby sudo /usr/local/bin/standby
Das Skript ist über sudo visudo
freigeschaltet, sodass kein Passwort benötigt wird.
Sinatra: Code im Hintergrund ausführen
Friday, 17. April 2015
Alles was länger dauert, z.B. Trackbacks zu verschicken, sollte eine Webanwendung besser im Hintergrund ausführen. Sinatra hat dafür aber keinen Mechanismus parat. Ruby kann zwar Threads starten, aber ein Thread in einem Webserverthread könnte am Ende der Anfrage abgewürgt werden. Beim von mir genutzten Webserver puma würde genau das passieren.
Es gibt natürlich Lösungen, Delayed::Job zum Beispiel. Aber das kommuniziert über die Datenbank, braucht seine eigene Tabelle, und sah sehr Rails-lastig aus. Sucker Punch klang erst perfekt, weil es innerhalb des Sinatra-Prozesses läuft. Aber es braucht angepasste Worker-Objekte, und die Objektstruktur wollte ich nicht anpassen.
Meine einfache Lösung basiert auf der Idee eines Worker-Threads im Sinatra-Prozess. Nur dass statt eines einzelnen Threads ein Threadpool aus dem Gem ruby-thread bereitgehalten wird, dem der Code übergeben werden kann. Das funktioniert so:
require 'sinatra/base' require 'thread/pool' class Threadexample < Sinatra::Application class << self; attr_accessor :pool end # thread pool as class variable @pool = Thread.pool(2) get '/' DoingSomething.new() end end class DoingSomething def initialize() Threadexample::pool.process { # send the normal code to the threadpool puts "send trackback now in the background, while the pageload is already finished" } end end
Der Threadpool läuft dauerhaft im Sinatra-Prozess, beim modularen Stil gespeichert als Klassenvariable. Der Code im von Sinatra aufgerufenen Objekt wird an den Pool gesendet. Das schöne an der Lösung ist, dass der Code und die Objektstruktur nicht verändert werden müssen. Und dass die Threads im Pool nacheinander bearbeitet werden, bestehende Threads werden nicht einfach überschrieben.
Blogparade Webspace-Inventar: Was ist auf deinem Webspace installiert?
Monday, 13. April 2015
Eine Blogparade. Mittlerweile ist es normaler für mich geworden, Software auf Servern laufen zu haben. Daher war mir die Gelegenheit ganz recht, das mal aufzulisten.
Es sind mehrere Server, nicht alle meine, und recht unterschiedliche Software, teils sogar welche von mir. Momentan läuft:
Das ist die klassische PHP-Blogsoftware, über die dieser Blog hier läuft. Es gab vor kurzem eine neue Version mit einem besseren Backend. Für diese wurden ein paar moderne Themes gebaut, auch zwei von mir. Nach wie vor hast s9y eine Vielzahl von Plugins, die einfach über den eingebauten Pluginmanager installiert werden können.
Mein Feedreader. Ich bin weiterhin sehr zufrieden mit ihm, er läuft auf digitalocean problemlos vor sich hin, und ich benutze ihn täglich. Der Kniff ist, dass das Feedholen auf superfeedr ausgelagert ist, was hervorragend und schnell funktioniert. Der Entwickler des Readers ist auch sehr nett (die Software ist von mir).
Das Dropbox zum selberhosten läuft nicht auf meinem regulären Webserver, sondern auf dem Heimserver, einem pogo. Seit der Einrichtung habe ich daran auch nicht weiter rumkonfiguriert und keine Probleme bemerkt. Gut, einmal wurde ein commit in der History eines git-repo zerschossen, aber das war zum Glück nichts kritisches.
Nochmal Software von mir, läuft ebenfalls auf dem pogo. Mir ist es wichtig, weiterhin Zugriff auf meine eigene Musiksammlung zu haben, dem von mir ebenfalls genutzten grooveshark und anderen Musikdiensten zum Trotz. Der music-streamer ist Ruby-Software und baut aus den Musikdateien eine Liste geordnet nach Künstler und Album, um dann das ausgewählte Album per HTML5 abzuspielen. Mittlerweile gibt es wahrscheinlich besser Alternativen, aber solange das Prinzip grundsätzlich funktioniert werde ich ihn weiter pflegen.
Vielleicht ist das nur halb Sinn der Blogparade - aber auf dem von mir genutzten Server läuft ebenfalls mein Hardwarempfehler, über dessen stetige Weiterentwicklung ich mich immer wieder freue.
Was mir noch fehlt ist ein guter Kalender, da scheint es nichts zu geben. Den Email-Client habe ich nicht aufgelistet, das läuft zwar mit roundcube auf einem Webspace, aber die Installation wird von uberspace gestellt.
Ein Blog für pc-kombo
Sunday, 12. April 2015
Ich präsentiere - voller Stolz ;) - den pc-kombo Blog, auf dem Artikel über den Hardwareempfehler und sein Umfeld erscheinen werden. Mindestens ist das die Zusammenfassung des monatlichen Updates, so wie der Artikel zum April-Update.
Zwei Blogs gleichmäßig zu befüllen, dafür fehlt es mir eigentlich an Zeit und Material. Aber für einen separaten Blog für den Hardwareempfehler sprach einfach, dass ich dort all die News zeigen kann, die ihn direkt betreffen - ohne hierher verwiesen zu müssen. Gleichzeitig kann ich dort auch Artikel hin auslagern, die hier nicht passen würden. Und was an beiden Stellen passt, das werde ich hier und dort veröffentlichen.
Ich suchte außerdem eine Möglichkeit, meine Blogsoftware in der Praxis zu testen. Das lohnt sich, schon ihn unter /blog/ statt unter / laufen zu lassen brachte ein paar Bugs zutage.
Wer dem Blog eine Chance geben mag, möge doch bitte den Feed abonnieren.
Servo mit Browser-Interface
Saturday, 11. April 2015
In meinem Artikel über moderne Browser war es am Ende Servo, der mich am meisten interessiert hat. So unfertig wie es ist, so interessant ist das Konzept. Und natürlich gibt es einen Weg, ihn schon jetzt als Browser zu nutzen: servo-shell.
Man muss nur Servo herunterladen, kompilieren (beides dauert lange) und dann mit der Shell starten:
git clone git@github.com:servo/servo.git --depth 1 git clone https://github.com/glennw/servo-shell --depth 1 cd servo ./mach build --release ./mach run --release ../servo-shell/index.html -e
Allerdings verwandelt die Shell Servo nicht in einen fertigen Browser. Es ist immer noch unfertig, und unfertig meint hier: Das Interface ist kaum benutzbar, Seiten werden falsch dargestellt, Eingaben funktionieren nicht und er stürzt reproduzierbar ab. Das ist nur zum Testen, was da kommen könnte.
The Incredible Adventures of Van Helsing
Monday, 6. April 2015
Von kaum einem Spiel habe ich beim Anspielen weniger erwartet als von The Incredible Adventures of Van Helsing. Ich wusste schlicht nichts darüber, es war Teil eines Humble Bundles, das ich mir für ein anderes Spiel geholt hatte. Stellt sich raus, Van Helsing ist ein ziemlich gutes Spiel.
Es ist ein Hack'n Slay, ein Diablo-Klon. Näher an Diablo 2 als 1 - statt eines einzigen Dungeons wird ein Gebiet bereist - hat es doch einige Alleinstellungsmerkmale:
- Die Welt ist keine reine Fantasy-Welt, sondern geht eher Richtung düsteren Steampunk mit Vampiren und Werwölfen
- Van Helsing ist nicht praktisch stumm, sondern spricht in allen Gesprächen selbst, mit einem bissigen Humor und gut vertont
- Die Begleiterin ist ein Geist, der ebenfalls spricht - und Lady Katarinas offensiverer Humor brachte mich mehrmals zum Lachen
- Die Level sind nicht zufallsgeneriert, und Monster spawnen nicht wieder
- Der Humor der Geschichte gleitet immer wieder ins Absurde ab, z.B. wenn der weiße Hase aus Ritter der Kokosnuss besiegt werden muss
Doch der Hauptunterschied ist, dass einer Geschichte gefolgt wird. Diablo konnte man auch so spielen, die Geschichte dort war ja sogar ziemlich ausgefeilt, aber beim Spielen selbst war sie weniger dicht. Sie motivierte das Handeln, aber über lange Etappen wurde Gebiet um Gebiet mit einem Questziel in der Ferne bereist. In Van Helsing geht es die ganze Zeit direkt um die Story, oder um die Nebenmissionen, die man in den Levels finden kann. Mir gefiel das gut, aber der Nachteil ist der fehlende Wiederspielwert. Diablo spielten alle einmal für die Story und dann mehrfach nochmal, um den bisherigen oder einen anderen Charakter hochzugrinden. Van Helsing ist nach 15 Stunden mit der Story dann auch fertig, der Charakter auf Max-Level 30.
Ansonsten ist es doch nah am Standard: Besiegte Gegner und Quest geben Erfahrungspunkte und Items. Bei Levelaustieg werden Skill- und Attributspunkte verteilt. Van Helsing nutzt Nah- oder Fernkampf, also Schwert oder Pistole, ergänzt mit Tricks wie dem Anhalten der Zeit oder etwa einem Heilzauber. Man kann sich aussuchen, ob man sich rein auf Schaden verlässt oder mit Zauberkraft skalierende Fähigkeiten mit Elementarschaden nutzen will. Es gibt zwei zusätzliche Charaktere per DLC (die beim Humble Bundle dabei waren), einen Thaumaturgen und einen Techniker, die ihre eigenen Spezialitems nutzen können - hier gibt es vielleicht doch etwas Wiederspielwert. Zusätzlich spezialisiert man den Charakter mit 10 Perks, die mit Reputationslevel durch Besiegen von Bossen und Champions gewonnen werden.
Absolut nicht genretypisch ist die integrierte Tower-Defence, eingebaut in die Geschichte als Verteidigung der versteckten Heimatbasis. Nicht übermäßig komplex, aber eine nette Auflockerung.
Das Folgende ist objektiv schwer zu begründen, aber ein Kritikpunkt ist, dass sich anfangs die Level etwas interessanter als am Ende anfühlten. Auch später gibt es noch Nebenquests und die Level werde nicht plötzlich hässlich, aber der Fokus verlagert sich ein bisschen auf das Besiegen der Monstergruppen, und damit auf das Spezialisieren und korrekte Ausrüsten der Spielfigur. Es wird auch schwerer, vielleicht war meine Taktik nicht optimal - obwohl das Spiel durchgängig ein gutes Fortschritt-Gefühl vermittelt.
Insgesamt aber hat mich das Spiel über seine kurze Dauer gut unterhalten. Ich wurde diesmal also positiv überrascht, und wer es ebenfalls ungespielt in der Sammlung hat oder es beim nächsten Sale erwerben kann, sollte es auf jeden Fall antesten - grundsätzliches Interesse am Genre vorausgesetzt.
Deutschland hilft in Mexiko beim Morden
Wednesday, 1. April 2015
Da steht er da, Michael Roth aus der SPD, liest von seinem Zettel ab, während er im Bundestag Fragen beantwortet. Ob er damals schon ahnte, dass er Aufhänger eines kleinen Skandals werden würde? Von diesem hat aber wahrscheinlich kaum ein Deutscher etwas gehört, denn diese Plenarsitzung wurde nicht in Deutschland diskutiert, sondern auf spanisch in der kleinen Szene politisch aktiver Mexikaner. Denn Michael Roth beantwortete Fragen zum geplanten Sicherheitsabkommen mit Mexiko.
Er zitiert den EU-Botschafter in Mexiko, der keine Notwendigkeit sieht, das Abkommen auszusetzen, weil die Bundesebene Mexikos nicht mit den Vorfällen in Iguala verstrickt sei. Er erwähnt weiter, dass lokale Stellen verwickelt seien, das aber vom Botschafter nicht gesagt wurde - aber auch nicht bestritten. Und dass die Erklärung des mexikanischen Parlaments gut gewesen sei. Später, und das ist wichtig, wird er argumentieren, dass doch gerade aufgrund der Verbrechen in Guerrero Deutschland das Sicherheitsabkommen fortführen müsse, um den Staat im Krieg gegen die Mafia zu unterstützen.
Es ist eine Darbietung von unerträglicher Arroganz und vollständiger Ahnungslosigkeit.
Deutschland hat 2006 H&K Waffen an Mexiko liefern lassen. Weil auch damals schon Mexiko kein stabiler Staat war, gab es dafür Auflagen: Die Waffen durften nicht an bestimmte besonders kritische Bundesstaaten geliefert werden. Diese Auflagen wurden ignoriert, derzeit läuft ein Strafverfahren. Aber man kann sich vorstellen, wie absurd diese Waffenlieferungen selbst bei Einhaltung der Auflagen gewesen wären: Das ist, als würde man Raketenwerfer an Baden-Württemberg liefern und gleichzeitig behaupten, dass sie niemals Schaden in Hessen und Bayern anrichten würden.
Diese Waffen landeten also natürlich auch im gebannten Bundesstaat Guerrero. Und als in Iguala Studenten von Polizisten und Mafia erst direkt auf der Straße erschossen, dann die Überlebenden verschleppt und später ermordet wurden - 43 Studenten sind bis heute verschwunden - da waren diese Polizisten mit 36 G36 bewaffnet. Unklar ist nur noch, ob mit diesen Waffen die Studenten direkt oder nur indirekt ermordet wurden.
Konsequenz daraus ist, dass Deutschland bei der Ermordung der mexikanischen Studenten durch Waffenlieferungen geholfen hat und eine Mitschuld trägt. Aber Konsequenz daraus ist nicht, dass Deutschland lernt. Im Gegenteil, die Bundesregierung will weiter beim Morden helfen.
Ihr Hilfsmittel dabei ist die von Michael Roth vorgetragene Position, der Staat in Mexiko sei vertrauenswürdig und brauche Hilfe. Deutschlands Hilfe. Denn diese Position ist falsch. Der Staat in Mexiko, die Regierung, ist korrupt - dem Präsident wird gerade jetzt erst wieder vorgeworfen, sich bereichert zu haben, die dies berichtende Journalistin Carmen Aristegui wurde umgehend gefeuert. Außerdem sind die staatlichen Organe nicht nur auf Länderebene, sondern auch auf Bundesebene von Mafia und Korruption unterwandert.
So hat sich der ach so vertrauenswürdige mexikanische Staat schlicht geweigert, die Morde in Iguala aufzuklären. Zuerst wurde ein junger Mann unter Folter dazu gebracht, die Morde zu gestehen. Das war selbst für Mexiko zu unglaubwürdig. In der neuen Version sind es jetzt drei junge Männer, die 43 Studenten von der Polizei übergeben bekamen, sie in Schach gehalten haben, sie alle ermordeten und in strömenden Regen auf einer Müllhalde innerhalb weniger Stunden mit ein paar Gummireifen restlos verbrannten. Damit wurde die Untersuchung geschlossen. Der federführende Staatsanwalt sagte, es reiche ja jetzt auch, er sei erschöpft (und lieferte mit seiner Aussage das Motto für eine Gegenkampagne).
Man muss sich klarmachen: Am Anfang der Suche nach den Studenten wurden immer wieder Massengräber gefunden, nur um etwas später festzustellen, dass die gefundenen Leichen gar nicht die gesuchten Studenten seien. Damit verschwanden diese Leichen dann auch aus dem Blickfeld. Kein einziges mal wurde bekannt, dass ihre Morde auch nur untersucht würden - der Gedanke kam gar nicht auf. In Mexiko sind in den letzten Jahren so viele Menschen getötet worden, in den entsprechenden Gegenden gibt es eben Massengräber. Reagiert wird daraufhin von Polizei und Justiz nicht - und Deutschland liefert ja trotzdem Waffen.
Sie ist generell schnell erschöpft, die mexikanische Justiz. Mexiko hat eine Aufklärungsrate von maximal 3%. Wenn ich in Mexiko meinen Nachbarn erschieße und mich nicht ganz bescheuert anstelle, wird mir nichts passieren. Denn Verbrechen werden grundsätzlich nicht aufgeklärt. Nun kann man sich auf die Position der Bundesregierung stellen und behaupten, das sei ein Problem mancher Bundesländer. Man verkennt dabei aber, dass die Bundepolizei und das Militär nicht besser sind. 2010 wurden wegen Korruption 4600 Beamte aus der Bundespolizei entlassen. Das Militär in seinem Krieg gegen die Drogen tötet regelmäßig Unschuldige - in Mexiko wird erzählt, wie das Militär ganze Dörfer einfach ausradiert. Ich weiß nicht, ob das stimmt, auch wenn ich es mir vorstellen kann - aber Fakt ist, dass in einer Studie zum Verschwindenlassen in Mexiko dieser organisierter Massenmord explizit auch dem Militär zur Last gelegt wird.
Und die letzte bekannte GPS-Position der 43 verschwundenen Studenten? Eine Militärbasis mit Müllverbrennungsanlage.
Es gibt zwei verschiedene, sich jedoch ergänzende Erklärungen, warum Deutschland trotzdem mit solch einem Staat zusammenarbeiten will.
- Das Sicherheitsabkommen ist verbunden mit einem Freihandelsabkommen. Wie bei den Waffenlieferungen geht es hier schlicht um Geld. Mexiko ist ein unregulierter Markt, hat natürliche Ressource, und ist der Armut des Großteils der Bevölkerung zum Trotz eine gewichtige Wirtschaftskraft.
- Menschen wie Michael Roth könnten ihre Version Mexikos schlicht glauben. Als deutsche Politiker - autoritätsgläubig, naiv und ohne einen Hauch von Wissen - glauben sie vielleicht wirklich, dass es nur nötig sei, die per Definition gute mexikanische Regierung zu stärken, sodass sie die Narkos töten und für Recht und Ordnung sorgen kann.
Gier oder Verblendung, positivere Erklärungen finde ich nicht.
Die Konsequenz beider ist: Indem Deutschland Mexiko mit Waffenlieferungen und durch Ausbildung der korrupten und mordenden Polizei hilft, macht sich Deutschland für ein paar Pesos zum Mitschuldigen am dort stattfindenden Massenmord. Einem Massenmord, der seit 9 Jahren praktiziert wird und die unvorstellbare Dimension von 100.000 Toten erreicht hat.
Der Browsermarkt 2015
Friday, 27. March 2015
Browser, da gibt es Firefox und Chrome, und unter Windows noch den Internet Explorer, um damit einen dieser beiden herunterzuladen, während auf Macs Safari ein schlechterer Chrome ist. Das wars. Nur: Das stimmt nicht mehr.
Es ist ein bisschen Bewegung in den Browsermarkt gekommen, den aktuellen Stand will ich hier auflisten.
Firefox
Besieger des IEs, lange führender freier Browser - Firefox ist ein Gigant. Dank neuer Oberfläche, Performance-Verbesserungen und tollen neuen Features gelten die negativen Aspekte dieser Beschreibung aber nicht wirklich für die Software selbst. In den letzten Jahren geriet Firefox unter Druck, wohl vor allem, weil Chrome schlicht der bessere Browser war. Jetzt aber hat Firefox wieder aufgeholt, ist schneller und hübscher geworden, ohne seine überlegene Anpassbarkeit durch Plugins zu verlieren. Natürlich nicht, ohne ewig-gestrige durch das bloße sanfte Ändern der Oberfläche zu verlieren.
Chrome & Chromium
Dem Browser und dem ihm zugrunde liegenden OS-Projekt von Google geht es immer noch gut. Aus dem kleinen, minimalistischen und zu Beginn unnutzbaren Experiment ist der Marktführer geworden. In den letzten zwei Jahren mit den Nachteilen, die ein solcher Status bringt: Nur für Chrome geschriebene Webseiten, nur für Chrome verfügbare Erweiterungen. In letzter Zeit hat sich ersteres entschärft, was wohl eher nicht an Einsicht der Webentwickler liegt, sondern am langsamen Wegfall der -webkit-Präfixe für experimentelle Features, und der Stabilisierung von HTML5.
Über den Browser selbst gibt es nichts neues zu sagen. Die Oberfläche ist weitestgehend wie zuvor, der Performancevorteil existiert dafür nicht mehr, und ich bin inzwischen wieder bei Firefox, auch weil Chromium unter Linux zu instabil war.
Opera
Es gibt ihn inzwischen wieder für Linux! Aber Berichten zufolge ist Opera kein Opera mehr, und da es nur eine 64-Bit-Version gibt kann ich ihn nicht testen.
Aus der Ferne kann ich sehen, dass Opera keine eigene Engine mehr hat, stattdessen wird Blink genutzt, ebenso wie bei Chrome. Eine Ähnlichkeit, die man Screenshots zufolge wohl auch in der Oberfläche wiederfindet - aber bei der Verbreitung, da scheint Opera auch nach dem Umbau bedeutungslos zu sein.
Vivaldi
Vivaldi versucht, den alten Opera-Browser wiederzubeleben, setzt dabei ebenso wie Neu-Opera auf die Blink-Engine. Anders als Opera gibt es eine 32-Bit-Version, ich kann mir die aktuelle Preview also sogar anschauen.
Eigentümliche Farbgebung, die sich an die besuchte Seite anpasst, separierte Suchleiste, die Tableiste kann umgestellt werden - Vivaldi macht keinen schlechten ersten Eindruck. Es fehlt ein Adblocker, der Mail-Client ist bisher nur eine in die UI eingebaute Absichtserklärung. Die UI würde ich schon nicht mehr als minimalistisch bezeichnen wollen, dafür ist sie zu auffällig und es gibt sie als Leisten überall. Trotzdem, die spürbare Zuneigung für die ersten Versionen ist nachvollziehbar, Vivaldi wirkt, als würde er eine valide Option werden. Und anders als früher bei Opera sollte die Webseitendarstellung kein Thema sein, denn mit Blink ist dafür eine massenbenutzte Engine da.
SeaMonkey
Ich war überrascht, SeaMonkey nicht in den Quellen zu finden. Das Projekt ist alt, der Browser ist alt, selbst das Konzept einer Web-Suite statt eines Browsers ist alt. Denn genau das ist SeaMonkey: Mehr als nur ein Browser, ist es ein Browser plus Mail-Client samt Editor und Adressbuch plus IRC-Client, und natürlich ist der Mail-Client gleichzeitig ein Newsgroup-Client.
Entsprechend präsentiert sich die Oberfläche. Lesezeichenleiste, große Buttons (samt einem zum Drucken und einen Spezialbutton zum Suchen), die Leisten sind einklappbar, die Tableiste erstmal versteckt. Das alles wirkt wie bei meiner Anfangszeit unter Ubuntu, als Firefox noch weit von der momentanen Oberfläche weg war, nur… älter. Anders gesagt: Die Oberfläche mit ihrem GTK-Design und Größenunterschieden ist wirklich nicht hübsch. Gleichzeitig aber schon anpassbar, auch wenn Dinge wie ein kombinierter Stop-Reload-Button zu Fehlen scheinen, Tabs nicht per mittlerer Maustaste schließbar sind - SeaMonkey für mich anzupassen wäre ein Kampf. Wer aber genau das sucht - die Oberflächen von damals, den integrierten Mail-Client - der könnte mit SeaMonkey glücklich werden.
Pale Moon
Pale Moon ist eine seltsame Mischung, man betrachtet ihn wohl am besten als ungewöhnlichen Firefox-Remix. Denn es ist ein Firefox mit der altbackenen Oberfläche, ohne WebRTC und ein paar anderen Features, dafür mit aggressiveren Performance-Voreinstellungen wie einer Kompilierung mit -O3
- hier gibt es eine Liste. Dazu kommen Voreinstellungen wie eine eigene Startseite und duckduckgo als voreingestellte Suchmaschine.
Kann man sich als UI-Konservativer wohl anschauen, für mich ist es dadurch keine Option.
Midori
Der Browser von elementaryOS und Xfce ist interessant, weil er tatsächlich eine valide Option zu sein scheint, ohne ein Firefox-Klon oder von einer Firma zu sein. Es ist eine GTK-Oberfläche mit Webkit als Engine, und es gibt ein paar Erweiterungen, z.B. den unbedingt notwendigen Werbeblocker.
Er hat aber auch dämliche Voreinstellungen wie die, bei mittleren Mausklick den Inhalt des Clipboard in die URL-Bar zu pasten und dorthin zu navigieren, und der "Nächstes oder Weiter"-Button der aktuellen Version sieht einfach kaputt aus. Mit ein paar Anpassungen wäre dieser Browser wohl völlig ok und könnte dann der kleine schnelle Browser mit minimaler Oberfläche sein, der er sein will.
rekonq
Rekonq gehört zum KDE-Projekt und ist dort eine Alternative zu Konqueror, dem alten Browser, der vor Dolphin gleichzeitig der Dateimanager war. Das letzte Release ist über ein Jahr alt, sodass die Version in den Quellen aktuell ist. Kein gutes Zeichen bei den normalerweise schnellebigen Browsers.
Allen KDE-Klischees entsprechend schafft es rekonq, beim ersten Start abzustürzen, um beim zweiten mich mit dem Hinweis zu begrüßen, dass keine Suchmaschine aktiv sei und also keine Suchvorschläge angezeigt würden, und dabei auf ein Konfigurationsmenü zu verweisen wo das geändert werden könne, das aber vollkommen unverständlich ist.
Es bleibt dann ein Browser mit einer reduzierten Oberfläche. Anders als Midori ist die Suchleiste in die URL-Eingabe integriert, trotzdem werden keine Suchergebnisse automatisch vorgeschlagen. Ein Adblocker ist integriert, filtert aber Werbung nicht von selbst und hat keine für mich auffindbare Konfiguration. Es gibt eine Browserseite für neue Tabs, bei der neben Favoriten auch der Verlauf und Downloads angezeigt werden können. Mich stören Kleinigkeiten, wie der seltsam ausgerichtete Button für neue Tabs, und der Platzhalter-Text in der URL-Eingabe, der ja wohl wirklich nicht nötig ist. Und dass der Browser sich langsam anfühlt.
Web
Der Preis für den bescheuertsten Namen, mit Sonderpunkten in der Kategorie Arroganz und Apple-Nachmache, geht an Web, vormals Epiphany, dem Browser des Gnome-Projekts. Ohne ihn getestet zu haben erwartete ich eine Reduzierung auf das Unbenutzbare. Ich teste allerdings nicht die neueste Version, denn die lässt sich auf meinem System nicht installieren und es gibt keine Binaries, sondern die aus den Quellen: 3.10, die aktuelle ist 3.16 - ein gutes Zeichen, das Projekt ist aktiv.
3.10 ist dann tatsächlich sehr reduziert und macht ein paar Dinge anders. Der (funktionierende) Adblocker ist nicht konfigurierbar und wird im Gegensatz jeder Konvention aktiviert, indem die Option "Werbung anzeigen" deaktiviert wird. Die Icons der Oberfläche sind weit auseinander und schwarz-weiß, die UI ist wirklich etwas eigenes. Unsympathisch: Mein Blog ist nicht erreichbar, aber den Fehler schreibe ich einfach mal der veralteten Version zu.
Ich bin mir unschlüssig, ob der Browser tatsächlich zu reduziert ist - mir gefällt zum Beispiel, dass die Suchleiste in die URL-Eingabe integriert ist und tatsächlich Suchvorschläge anzeigt, so wie es sein soll. Mich stört aber die gelbe und beim Hovern eines Links sofort aufpoppende Statusleiste, die natürlich auch nicht konfigurierbar zu sein scheint.
Immerhin interessiert es mich jetzt, wie die aktuelle Version ist. Und das ist besser als erwartet.
Servo
Servo ist nicht wirklich ein Browser. Es ist das wahrscheinlich anspruchsvollste aller Projekte dieser Liste, inklusive Chrome und Firefox. Servo ist eine parallelisierbare Browser-Engine. Das Ziel ist es, statt wie bisher einen Hauptthread zum Rendern der Seite zu haben, alles parallel in mehreren Threads zu rendern, sodass die vielen Kerne moderner Hardware genutzt werden. Geschrieben ist die Engine in Rust, eine Programmiersprache, die selbst nichtmal stabil ist. Noch dazu ist das Projekt mehr als Code, denn manchmal müssen Spezifikationen angepasst werden, wenn sie so geschrieben sind, dass sie nicht parallelisiert werden können. Gut, dass Mozilla dafür die nötigen Kontakte haben sollte.
Es geht hier also nicht um die Oberfläche oder Kleinigkeiten wie Adblocker. Die Frage ist vielmehr, ob Servo je eine valide Engine werden wird, die alle üblichen Webseiten anzeigen kann. Denn derzeit ist dem nicht so, und schlimmer noch, derzeit dauert die Installation Stunden und scheitert gerne mal, was am momentan laufenden DDoS gegen Github liegen kann.
Wenn es dann mal läuft, sieht servo so aus:
Keine UI, die Mausinteraktion funktioniert noch nicht, Anzeigefehler sind da - generell fehlt da noch viel. Andererseits wird die Seite angezeigt, die Grundlagen sind da. Gleichzeitig macht das Projekt auf Github einen aktiven und sympathischen Eindruck. Könnte was werden.
Fazit
Es gibt wirklich einige andere Optionen für den bevorzugten Browser. Und nicht nur dass, auch die großen Browser entwickeln sich stetig weiter, so bin ich beispielweise sehr zufrieden mit der Entwicklung von Firefox, nur dass mich web-feindliche Entwicklungen wie der Wegfall des RSS-Buttons ärgern. Die neuen Projekte, wie Midori und Vivaldi, sind echte Optionen, die durchaus für die alltägliche Nutzung geeignet scheinen.
Die vielen Browser sind möglich, weil ihre Engine nicht eigenständig ist. Davon gibt es im Grunde nur noch drei: Gecko, WebKit und Blink, wobei Blink auch noch aus Webkit hervorgegangen ist. Auch deswegen ist Servo so spannend, nicht nur, weil es eine neue Engine mit einer guten Mission ist, sondern weil Servo das kleine Engine-Ökosystem aufmischen könnte. So könnte 2015 für Browser ein gutes Jahr werden.
Sinatra-Anwendungen kombinieren
Saturday, 14. March 2015
Will man zwei mit Sinatra gebaute Webanwendungen gleichzeitig ausführen stellt sich zuerst die Frage: Geht das überhaupt? Die Antwort: Vielleicht.
Man kann natürlich immer zwei Ruby-Prozesse starten und auf verschiedenen Ports horchen. Hier geht es aber darum, zwei Anwendungen auf dem gleichen Port so zu kombinieren, dass zum Beispiel die eine auf / reagiert, die andere ab /blog/ übernimmt.
Das geht nicht, wenn beide Anwendungen dem klassischen Stil folgen, denn davon darf es nur eine pro Ruby-Prozess geben. Stackoverflow behauptet zwar etwas anderes, aber der Antwort zufolge haben Fragesteller wie Beantworter nicht verstanden, was der klassische Stil ist, denn mit App.new
kann man eine darin gebaute Anwendung nicht starten (oder ich habe da eine Lücke). Also muss entweder die zweite oder beide Anwendungen im modularen Stil gebaut sein. Glücklicherweise ist das Umwandeln vom klassischen Stil in den modularen einfach, und nochmal einfacher wenn Sinatra::Application statt Sinatra::Base benutzt wird.
Bei mir liegt die erste, die klassische Sinatra-Anwendung, im Hauptverzeichnis. Die modulare liegt in einem Unterverzeichnis dann. Den beiden Anwendungen kann ihr Startpunkt dann in der config.ru mittels Rack::URLMap
zugewiesen werden:
require 'rubygems' require 'bundler' Bundler.require require './static-server.rb' require './modularapp/modular-server.rb' run Rack::URLMap.new( '/' => Sinatra::Application, '/blog' => Moularapp::Modularapp.new # Modularapp also got a module to prevent collisions )
Es fehlen noch die gems. Denn die sollen per Bundler installiert werden, doch Bundler.require
würde ja normalerweise nur die erste Gemfile auslesen. Deshalb verweist man an deren Ende auf die zweite:
Dir.glob(File.join(File.dirname(__FILE__), 'modularapp, "Gemfile")) do |gemfile| eval(IO.read(gemfile), binding) end
Bundler installiert nun alles nötig, URLMap weist den Anwendungen den richtigen Startpunkt zu, und ein <cpde>rackup führt beide auf einmal aus. Es geht also.
PDFs komprimieren
Wednesday, 11. March 2015
Die PDFs eingescannter Dokumente, im Grunde ja nur in PDFs verpackte JPGs, sind mit mehreren MB zu groß, um sie einfach so per Mail zu verschicken. Bei mir waren das diesmal bei nur zwei Seiten 2,3 MB. Sie zu komprimieren ist gar nicht so ganz einfach: PDF-Betrachter bieten die Option gar nicht erst an, manche Tools in der Kommandozeile - imagemagicks convert beispielsweise - übertreiben es mit der Komprimierung und machen das Dokument unleserlich. Gut funktioniert hat bei mir dieser Tipp:
pdf2djvu -d [dpi-resolution] input.pdf -o temp.djvu djvups temp.djvu temp.ps ps2pdf temp.ps output.pdf
Das output.pdf ist 320 KB groß, die Bilder darin haben nicht merklich an Qualität verloren.
Das Serendipity-Treffen
Tuesday, 10. March 2015
Am Wochenende in Essen gewesen zu sein und mich mit den Mitstreitern von Serendipity zu treffen hat mir Spaß gemacht. Größtenteils haben wir einfach zusammen geredet, gegessen und getrunken, ein erstes Kennenlerntreffen außerhalb des Internets eben. Aber dann eben doch Zeit gefunden, strukturiert über Serendipity zu reden. Eine Zusammenfassung unserer Ergebnisse schrieb Garvin für den s9y-Blog, die Trackbacks dort und Matthias Bericht führen zu denen der anderen.
Zwei Anmerkungen:
- Wir kamen dazu zu definieren, was für ein Projekt wir sein wollen, was das Ziel ist. Das war davor diffus. Unser Ergebnis, s9y als klassisches Blogsystem zu definieren und so abzugrenzen, existierte auch vorher schon als Gedanke. Aber nun ist es Konsens des Kerns.
- Es sind auch klare technische Aspekte in der Zukunftsplanung dabei: Ergänzungen der Plugin-Api für Datenbank-Tabellen, echtes Caching, Komfortfunktionen mithilfe von cron, … . Meiner Einschätzung nach können wir alleine mit den Überlegungen aus dem Treffen einige wirklich gute neue Versionen füllen, wenn wir es schaffen, sie jetzt auch zu entwickeln.
- Die Menschen hinter den Internetrepräsentationen, ob Text oder Stimme, zu treffen war wirklich lustig. Die meisten kannte ich schon ein paar Jahre, aber ohne sie getroffen zu haben. Welche Aspekte der Person dann beim Treffen außerhalb des Internets sichtbar sind, aber auch welche dort verschwinden, ist echt nicht vorhersehbar.
Warum ist der erste Punkt so wichtig? Weil er dabei hilft, das Projekt als echtes Projekt zu bewahren. Serendipity ist das Produkt eines bestimmten Punktes der technischen Entwicklung von Blogengines. PHP, SQL mit Fokus auf MySQL, dynamisch erzeugte Seiten. Dem gleichen Punkt entsprang Wordpress, das sich jetzt zum vollständigen CMS entwickelt. Die Leute, die Serendipity entwickeln, sind dann entweder Leute, die verstreut ab und an Code in ein Repo pushen weil sie es eben tun - im Zweifel einsam, planlos und ohne Elan. Oder sie entwickeln mit einem gewissen für ein echtes Projekt notwendigen Eifer gemeinsam hin zu einem bestimmten Ziel; die Bewahrung und Weiterentwicklung der Idee eines klassisches Blogs ist ein solches - das man auch noch wunderbar abgrenzen kann zu modernen Systemen wie Ghost (dabei aber bei nicht sorgfältiger Formulierung nicht nett klingt, daher lass ich das hier erstmal).
Dafür sind solche Treffen toll. Ebenso um zu planen, wie wir uns besser präsentieren können, damit die Arbeit nicht unnötig vergebens ist.
pc-kombo nun vollständiger Hardwarempfehler
Tuesday, 3. March 2015
Nachdem letzten Monat Arbeitsspeicher dazukam, ist es bei diesem Update alles verbliebene gewesen: Festplatte, SSD, Gehäuse und Netzteil. Damit bin ich über einen jahrelangen Umweg an den Anfang zurückgekehrt: Der Hardwareempfehler empfiehlt nun einen vollständigen, funktionierenden PC.
Im Februar kam nicht viel neue Hardware hinzu. Ich habe mir vorgenommen, in Zukunft genauer zu protokollieren, was hinzugefügt wurde und welche Hardware wegfiel. Vielleicht kommt das in einen separaten Blog. Diesmal noch nicht, aber es waren besonders die Pentium G-Prozessoren, von denen einige Modell hinzugefügt wurden, samt günstigerem Mainboard.
Neue und neue alte Funktionen
Die beim letzten Update weggefallenen Funktionen wurden neu gebaut und wieder eingefügt. Mit den Icons an der Seite kann die Empfehlung modifiziert, also z.B. statt 4GB Ram 8GB ausgewählt werden. Das kleine x oben rechts deaktiviert eine Kategorie temporär, wodurch der Gesamtpreis ohne das jeweilige Hardwareteil neu berechnet wird.
An der Untergrenze wird pc-kombo eine 250 GB große Festplatte empfehlen. Das steigt dann je nach Budget erst auf 1, dann auf 4 TB. Bei höheren Budgets kommt dann eine SSD dazu, schrittweise von 128, 256 und 512 GB bis zur finalen 1 TB SSD. Das einfachste Gehäuse ist ein Sharkoon für 25€, dann kommt das Fractal Design Core 2500 und schließlich ein Fractal Design R4 für ~100€.
Am wackeligsten sind wohl die Empfehlungen des Netzteils. Für die momentanen Empfehlungen funktionieren sie - im Zweifel sind sie überdimensioniert - aber auf Dauer geht das so nicht. Dass teure Prozessoren nicht mehr unbedingt mehr Strom verbrauchen als billigere sorgt dafür, dass der genaue Stromverbrauch erfragt werden muss. Das ist eine der noch bestehenden Baustellen.
Es gibt interne Verbesserungen am Code, was spaßig war. Bei der Oberfläche ist Pace eingebaut, dessen Effekt beim Laden und Modifizieren der Empfehlungen auch wirklich hilft. Die Icons - das €-Zeichen, der Upgrade-Pfeil und das Minus-Zeichen zum Deaktivieren - sind aus Font Awesome.
izulu 0.5 veröffentlicht, neuer Flickrmodus, Kompatibilität, neue Webseite
Monday, 2. March 2015
izulu, mein Skript um den Bildschirmhintergrund dem Wetter anzupassen, hat dank den Vorschlägen von Ferri eine Runde kleiner Updates bekommen. Außerdem habe ich die Gelegenheit genutzt, ein Release zu packen und die Webseite umzubauen.
Version 0.5 als Release
Vor kurzem habe ich mich an das Release-Feature von Github gewöhnt. Nachdem izulu nun im momentanen Zustand einige Monate vor sich hin werkelt erschien es mir sinnvoll, diesen Zustand plus einer kleinen Erweiterung (--compat unity
, dazu später mehr) als Release zu taggen.
izulu 0.5 ist sicher stabiler als eine Beta, zumindest für die Kernfunktionen, und dem Release sind debs für Ubuntu beigefügt. Ich empfehle aber weiterhin, das PPA zu nutzen, um alle neue Funktionen zu erhalten - der Flickrmodus z.B fehlt bereits in 0.5.
Flickrmodus
Fast von Anfang an kann izulu statt eines spezifischen Bildes ein zufälliges Bild aus einem wählbaren Ordner aussuchen. Es war Zeit, den Code ein bisschen robuster zu machen, sodass nun auch nicht-Bilder in dem Ordner liegen dürfen. Vor allem aber gibt es jetzt ein Fallback: Ist kein Ordner angegeben, aus dem z.B. für bewölktes Wetter ein Bild ausgegeben werden soll, wird ein zufälliges Bild aus einer Flickr-Gruppe heruntergeladen. Bei bewölktem Wetter wäre das ein Bild aus der Gruppe clouds.
Das schöne daran ist, dass es ohne Konfiguration funktioniert, während die Zufallsfunktion vorher ohne Anpassung der ~/izulu/config schlicht nichts bewirkte.
Die anderen Gruppen sind:
Sonne
Regen
Schnee
Wind
Nebel
Ich freue mich über Vorschläge, falls jemand passendere Gruppen kennt.
Kompatibilität (mit unity)
Im Grunde eine kleiner Änderung, aber praktisch: Man kann nun anpassen, wo die Temperaturanzeige landet. Verschiedene Desktopumgebungen haben ihre Taskbar an unterschiedlichen Stellen. Die Temperaturanzeige wurde von izulu aber immer an die gleiche Stelle gezeichnet, nach unten links. Das kann kollidieren, unity z.B. verdeckt sie dort mit dem seitlichen Dock.
Deshalb gibt es neue Optionen:
--temperature-gravity
Hiermit kann imagemagicks gravity-Parameter gesetzt werden. Die Temperaturanzeige landet also z.B. nach oben rechts mit
--temperature-gravity NorthEast
.--temperature-margin
Der Abstand der Temperaturanzeige von den Rändern, z.B.
--temperature-margin "+10+40"
.--compat
Das soll eine Komfortfunktion werden, um izulu passend für bestimmte DEs zu konfigurieren. Bisher gibt es nur
--compat unity
, wodurch die Temperaturanzeige nach oben rechts gesetzt wird, weg vom Dock.
Webseite
Ich wollte die alte Webseite um ein paar Seiten erweitern und stellte dabei fest, dass sie mir nicht mehr gefiel, und zudem noch auf sourceforge gehostet war. Die neue Webseite liegt nun auf github. Sie hat das kleine Gimmick, das Hintergrundbild je nach Tageszeit anzupassen. Genutzt werden die originalen Bilder von izulu, das Wetter kann man selbst wählen.
Insgesamt soll weniger Fokus auf dem Bilder-Widget liegen, das in die drei Buttons auf der Startseite gewandert ist. Die Bilder sind stattdessen im Hintergrund, um trotzdem noch einen Eindruck des Effekts des Skripts zu geben. Wichtig war mir, dass der Hilfetext samt den Credits - beide leicht erweitert - nun online sind.
Ruby Metaprogrammieren
Monday, 23. February 2015
Ich bin nicht sicher, ob Metaprogrammierung die richtige Bezeichnung ist - vor allem, weil es etwas hochtrabend klingt. Es geht um ein simples Problem: Man hat einen String und will eine Funktion oder eine Variable aufrufen, die so heißt wie der Inhalt des Strings.
Also: Ich habe "auto" in der Variable id
und will A.autoBahn
aufrufen. Das passiert in der Praxis öfter mal, wenn in bestimmten Teilen des Codes Variablen mit einer id konstruiert werden, z.B. autoBahn, fahrradBahn, eisenBahn…
class A attr_accessor :autoBahn def initialize self.autoBahn = "A44" end end a = A.new id = "auto" puts a.send(auto + "Bahn") # => A44
Ruby kennt auch eval, was sich genau so verhält wie erwartet: Es führt den Inhalt eines String als Programmcode aus. Nichts für von Nutzern wählbare Variablen, mächtiger als nur zum Variablen oder Methoden aufrufen, aber auch dafür kann man es nutzen.
eval "A.#{id}Bahn" # => A44
Variablen dynamisch zu lesen ist super. Es fehlt nur noch, sie ebenso schreiben zu können. Mit instance_variable_set
geht das auch. Ich bin anfangs nur darüber gestolpert, dass das erste Zeichen des Namens ein @ sein muss.
A.instance_variable_set('@Landstrasse', "B44")
Vielleicht ist es meistens nicht toll, so etwas benutzen zu müssen. Aber richtig eingesetzt kann es sehr viele Zeilen voller Wiederholungen auf einige wenige komprimieren.
Cyber Acoustics CA-1001WB
Tuesday, 17. February 2015
Darum gehts. Wobei, es ist ein Mittel zum Zweck.
In meinem PC moderten zwei Laufwerke für sich hin. Das DVD-Laufwerk könnte nochmal praktisch sein. Aber für den CD-Brenner werde ich wohl eher keine Verwendung mehr haben. Beide Laufwerke sind nicht angeschlossen. Sie blieben nur im Gehäuse, weil mir die Blenden fehlen um das Loch zu schließen, das sie hinterlassen würden. Die sind beim vorletzten Umzug verschwunden.
Gleichzeitig steht der PC nicht mehr im gleichen Zimmer wie die Stereoanlage, die vorher mit dem PC verbunden war. Die war durchaus praktisch um Sound für mehrere Personen zu haben, beispielsweise für Filme. Stattdessen kaufte ich einen kleinen mobilen Lautsprecher, der nach gutem Ersteindruck ziemlich sofort kaputtging.
Und in genau diesem Szenario ist das CA-1001 eine gute Idee. Es ist ein Lautsprecher, der statt eines Laufwerks in einen 5,25"-Schacht gesteckt wird. Dann verbindet man den Lautsprecher mit dem beigelegtem Kabel über eine PCI-Slot-Blende mit dem hinteren Ausgang der Soundkarte. Strom dazu und der PC hat integrierten Sound.
Ich habe erwartet, dass dieser Sound furchtbar sein würde. Dem ist nicht so. Ich will das Ding nicht zu sehr loben, aber ich war überrascht, dass Musik weder unerträglich kratzig noch zu leise abgespielt wird. Wobei ich die Lautstärke schon aufs Maximum drehen musste, um eine besonders leise Serie gut zu verstehen. Trotzdem, um ohne besondere Ansprüche einen Film zu gucken reicht es allemal. Und schlechter als das CD-Laufwerk oder das alternative Loch im Gehäuse sieht es auch nicht aus.