startafire

That blog about stuff.

Einfach Packen: Hoboroll
2016-03-23 18:03

Beim Reisen alle Sachen mitnehmen können und das ganz doch möglichst kompakt halten ist nicht immer einfach. Mein liebstes Reise-Accessoire ist seit einiger Zeit eine Hoboroll, mit der das ziemlich einfach geht.

Man kann sich die Hoboroll vorstellen wie die Hülle eines Schlafsacks, in welche noch weitere Fächer eingenäht wurden. Sie ist an beiden Seiten zu öffnen und bietet außerdem an der Außenseite einen Pack-Gurt, den man nicht nur zum Komprimieren sondern auch zum Einklemmen von bspw. einer dünnen Jacke verwenden kann. Das Material ist ein dünner, aber stabiler Stoff. Wenn die Rolle mal nicht in Benutzung ist, kann man sie in eine kleine, angenhähte Tasche falten.

So transportieren sich Klamotten und auch Turnschuhe super, ohne dass ein Koffer nötig wäre. In Verbindung mit einer Messenger Bag kann ich so problemlos ein langes Wochenende mitsamt Laptop und Gadgets verreisen, ohne dass ich einen Koffer mitnehmen muss.

Auch als Turnbeutel-Ersatz eignet sie sich super. Und ist mal weniger drin, dann kann man sie ganz einfach zusammenziehen und benötigt deutlich weniger Platz.

Die Hoboroll bekam ich netterweise von miko :)

Vivaldi: neuer Browser für Poweruser
2016-03-01 13:46

Seit einiger Zeit ist mit Vivaldi ein weiterer Wettbewerber auf dem Browsermarkt. Gegründet wurde die Firma von ehemaligen Opera-Mitarbeitern, die nun ihr Know-How in einen neuen Browser einbringen.

Dabei wird viel auf Bewährtes gesetzt: als Engine kommt Blink zum Einsatz, die UI erinnert an letzte Versionen von Opera. Der Einstieg geht schnell, ich fühlte mich sofort heimisch.

Und ich finde ein paar Features wieder, die ich bei Firefox vermisst habe: Tab-Stacking, also das Übereinanderlegen von Tabs. Bei Firefox habe ich mir seinerzeit mit Tab-Gruppen beholfen. Tab Stacking gefällt mir besser, weil es direkter in der Verwendung ist - kein Umschalten nötig. Leider ist das noch nicht so sehr ausgereift, denn der Zugriff auf einzelne Tabs ist dann leider nicht mehr so einfach. Opera hatte ein Feature zum Ausklappen der Tabgruppe, so dass jeder Tab den gleichen Platz wie einer ohne Gruppe einnahm, man aber durch einen Rand trotzdem die Zugehörigkeit zur Gruppe erkennen konnte.

Außerdem gibt es eine Seitenleiste! Darin habe ich endlich wieder Zugriff auf Bookmarks, yeah! Und das per Tastenkützel, doppel-yeah! In die Seitenleiste kann man außerdem beliebige Internetseiten legen. Twitter oder Mattermost immer in der Seitenleiste offen? Kein Problem!

Auch das Anpinnen von Tabs, damit diese immer erreichbar sind und nicht zufällig geschlossen werden können, ist möglich.

Das Steuern per Tastatur klappt prima. Neue Tabs per STRG+T, das Schließen per STRG+W und wechseln per STRG+TAB gehören schon zum Standard. Neu ist STRG+E zum Öffnen eines Kurzbefehl-Menüs. Darin kann bspw. direkt eine Seite aus den Bookmarks oder dem Verlauf aufgerufen werden, auch weitere Browsersteuerung ist möglich.

Der neue Snapshot ermöglicht es offene Tabs als eine Session zu speichern. Eine tolle Ergänzung zu Tab-Gruppen, wenn man keinen Tab-Wildwuchs möchte.

Außerdem kann man Tabs in den Hintergrund verbannen, damit der Browser nicht allen verfügbaren RAM mit eigentlich ungenutzten Tabs belegt. Sehr gute Sache! Ein nettes Feature beim Öffnen von Tabs im Hintergrund ist außerdem, dass ein kleiner Balken den Ladezustand anzeigt und man so in der Lage ist zu sehen ob der Tab schon geladen hat oder noch nicht.

Die Performance finde ich auch gut, übermäßig kam mir der RAM-Verbrauch nicht vor. Die Engine unterstützt gängige Standards und ich muss mir keine Gedanken darüber machen, dass Seiten eventuell nicht funktionieren.

Nun wird nicht jeder den Browser so benutzen, wie ich das mache. Das ist aber kein Problem, denn Einstellungsmöglichkeiten gibt es zahlreich. Auch Plugins können verwendet werden. Da hier die gleiche Engine wie bei Chromium im Hintergrund läuft, gibt es die Möglichkeit auf Chrome Plugins zurück zu greifen - und somit ist die Auswahl groß.

Ist Vivaldi ein Browser für Poweruser? Ich denke schon! Die große Menge an Features, die Steuerungs- und Erweiterungsmöglichkeiten sprechen für sich. Ich bin außerdem gespannt welche Features noch kommen werden und freue mich auf die nächste Version.

Wer neugierig geworden ist und Vivaldi selbst ausprobieren möchte, der hat momentan die Wahl zwischen Beta und Snapshot. Die Beta ist stabiler, bringt dafür aber noch nicht alle Features der Snapshots mit. Mac, Windows und Linux - für alle Betriebssysteme gibt es Pakete, die auch gleichwertig gepflegt werden.

Simple log-parsing with Python 3.5
2016-02-20 15:36

One of the coolest features for me in Python 3.5 is os.scandir - iterating over the contents of a directory. Of course you can use os.listdir in previous versions but this does neither work as a generator nor are the returned entries caching information from stat-calls.

For trying out the new feature I decided to create a simple log-parsing pipeline to find any failures in logs.

#! /usr/bin/env python3

import argparse
import os


def check_folder(folder):
    logs = get_logs(folder)
    failures = collect_failures(logs)
    print_failures(failures)


def get_logs(folder):
    for entry in os.scandir(folder):
        if entry.is_dir():
            yield from get_logs(entry.path)
        elif entry.is_file() and not entry.is_symlink():
            yield entry.path


def collect_failures(paths):
    for filedescriptor in get_file_descriptors(paths):
        yield from get_failure_lines(filedescriptor)


def get_file_descriptors(paths):
    for path in paths:
        if not path.endswith('.log'):
            continue

        with open(path, 'r') as fd:
            yield fd


def get_failure_lines(filedescriptor):
    for linenumber, line in enumerate(filedescriptor):
        if 'failed' in line.lower():
            yield filedescriptor.name, linenumber, line


def print_failures(failures):
    for filename, linenumber, line in failures:
        print('{}, line {}: {}'.format(filename, linenumber, line.strip()))


if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('folder')

    args = parser.parse_args()

    check_folder(args.folder)

This is very simple but has the advantage to be easily extendable. Want to support gzip-compressed files or some obscure binary log format? Just return the corresponding file descriptor. Looking for different messages? Just extend the function to yield the findings.

The functions on their own are easy to test because they are not very tight-coupled.

Feeds sind kaputt
2016-02-18 19:44

Wir müssen reden. Über Feeds von Webseiten. Denn ich treffe immer öfter auf Webseiten mit unbenutzbaren Feeds.

Ich bin ein großer Freund von Feeds. Vielen Webseiten folge ich darüber, denn es ist für mich bequem auf dem laufenden zu bleiben. Dazu nutze ich einen dedizierten Feedreader, dessen Android-Client mir unter anderem erlaubt Offline die Beiträge zu lesen. Das setzt allerdings für mich voraus, dass die Einträge im Feed vollständig sind.

Leider beobachte ich seit einiger Weile, dass Webseiten zwar einen RSS-Feed anbieten, diesen aber künstlich beschneiden. Manchmal ist es nur ein Anreisser, aber oftmals wird sogar mitten im Wort unterbrochen und dann folgt der Link auf den Post auf der Webseite - gerne in der Form The post How To Annoy Your Readers appeared first on thatHorribleBlog. Das nervt!

Liebe Blogger, bitte versucht nicht mich auf eure Seiten zu locken. Es hat einen Grund, dass ich den Feed benutze. Es geht mir um Lesbarkeit, Zugänglichkeit. Und ganz ehrlich: ich habe keine Lust auf Werbung. Falls ihr kein Interesse daran habt, dass Leute euren Feed ernsthaft benutzen, schaltet ihn lieber ab.

Klein und flink
2016-01-27 17:57

0,22Mbps Downstream hat der Speedtest vorhin angezeigt. Ich schreibe diese Zeilen hinter einer geteilten Leitung und - da es der Gastzugang ist - eventuell sogar gedrosselt. Das ist nicht furchtbar viel Übertragungsgeschwindigkeit. Die Bundesnetzagentur benennt 1Mbps Durchsatz als Breitband.

Selbst wenn irgendwann mal überall entsprechende Bandbreite stationär zur Verfügung steht, ist die Mobilfunkabdeckung noch immer ein Flickenteppich. Bei meiner täglichen Fahrt durch Rhein-Main habe ich mehrere Stellen, an denen Mobilfunk einfach aufhört zu existieren. Mobiles Internet habe ich dort oftmals nur als Edge. Wenn - ja, wenn - überhaupt.

Wenn ich nicht selbst fahre, lese ich auf der Zugfahrt gerne. Meistens ein Buch, aber auch oft genug mit dem Smartphone. Und dann freue ich mich unglaublich über schnell-ladende Webseiten.

Leider sind die meisten Websites ziemlich überladen und langsam. Vorbei sind die Zeiten liebevoll in Handarbeit zusammengestellter Seiten, die nur ein paar KB an Speicher benötigt haben. Heutzutage wird im besten Falle Bootstrap eingesetzt und es kommt keine Werbung. Bei der Masse der Seiten darf man leider mit mehreren MB an Datenübertragung rechnen. Am Ende habe ich dann sieben verschiedene Versionen von jQuery geladen und es kommt noch Werbung hinzu.

Ich habe da keine Lust mehr drauf. Und deshalb habe ich ein Theme für Nikola gebastelt, welches ganz ohne JavaScript auskommt und nur CSS verwendet. Damit ist der Index dieser Seite von ~450KB auf ~50KB geschrumpft. Das ist noch groß, aber die Seite ist auf verschiedenen Geräten gut lesbar - und ich habe keinen Feature-Verlust. Außerdem zeigt sie dem Leser noch schneller ihren Inhalt! Wahnsinn!

Der ursprüngliche Ansporn kam von diesem Talk zu übergewichtigen Webseiten. Seitdem habe ich unzählige Seiten mit angeschalteten Webdeveloper-Tools angesurft und mir anzeigen lassen, wieviel MB gerade über die Leitung gejagt wurden. Es ist teilweise wirklich erschreckend!

PS: Wer wissen will, wie sich so eine langsame Verbindung anfühlt, der sollte es mit dem Comcast-Tool versuchen.

Türchen für Türchen
2015-12-13 20:45

Mit Advent of Code gibt es momentan einen Adventskalender, der ein wenig anders ist. Anstatt ein Türchen zu öffnen und etwas zu bekommen, muss man hier etwas machen. Aber das macht man gerne, denn man hilft dem Weihnachtsmann!

Hinter den Türchen stecken Aufgaben, die sich mit ein bisschen programmieren lösen lassen. Es braucht wirklich nicht viel Zeit und das finde ich sehr angenehm daran. Nach der Lösung des ersten Rätsels gibt es immer noch ein zweites. Dieses baut auf dem ersten Rätsel auf und lässt sich meistens mit wenig Aufwand lösen.

Ich mache die Rätsel natürlich in Python. Falls euch meine Lösungen interessieren, werft doch einen Blick in mein zugehöriges Repo.

Python: less trouble through the 'with' statement
2015-12-02 06:54

I always preferred to use the with-statement when reading or writing files since I learned about this feature. By using with and open you make sure that regardless of the outcome of your actions the file you just opened will be closed. This had me to suggest the use of with whenever possible. And I can now share an anecdote where using that statement would have saved us some trouble.

Weiterlesen…

Fuck Winter
2015-11-01 17:38

Wenn das Laub von den Bäumen fällt und die Temperaturen dauerhaft einstellig werden, dann nähern wir uns dem Winter. Kälte und Blättern zum Trotz ist jetzt eine wundbare Zeit zum Radeln!

Meine ersten Fahrten mit einem Rennrad habe ich tatsächlich im Winter hinter mich gebracht. Ich mag das Radeln im Winter. Die Luft ist meistens wunderbar klar. Und die Kälte ist nur temporär. Was gibt es schöneres als unter der Dusche langsam aufzutauen?

Damit das Radeln im Winter auch Spaß macht, sollte man sich dick anziehen. Das Zwiebelprinzip leistet mir gute Dienste. Meist wärme ich meinen Körper mit Thermo-Unterwäsche, Stulpen und einer Thermo-Jacke. Unten habe ich eine vorne windabweisende Winterhose, Skisocken und seit neustem Überschuhe an. Spezielle Winterschuhe fahre ich nicht, aber ohne Überschuhe war mir die vergangenen Winter ziemlich kalt.

Am Renner wird für den Winter nichts geändert. Das Revier bleibt die Straße und bei Frost bleibt der Renner drinnen. Da die Tage bekanntlich kürzer werden und die Dunkelheit schneller kommen kann als erwartet, ist es für mich wichtig Licht mit zu nehmen!

So vorbereitet kann ich nur sagen: Fuck Winter! Raus aufs Rad!

Rad Race Bergfest 2015
2015-09-02 21:47

Nach einer relativ kurzen Nacht klingelt um halb Sieben der Wecker, aufstehen ist angesagt. Meine Sachen habe ich schon am vorigen Abend rausgelegt, das Fahrrad ist vorbereitet. Aber Frühstück muss vor so einem Event sein.

Wunderbar radelt es sich durch Darmstadt. Autos? Fehlanzeige! Das Wetter ist mild, aber es war um die Uhrzeit eine sehr gute Idee Armlinge anzuziehen.

Zusammen mit Felix mache ich mich auf den Weg, damit wir pünktlich um 9 beim Start in Oberursel sind. Wie sich später rausstellen sollte, wäre das nicht wirklich notwendig gewesen. Im Frankfurter Hauptbahnhof sehen wir weitere Radler, die in die gleiche Bahn einsteigen. Man trifft sich in Oberursel wieder, wo wir durch die Stadt zum Ziel radeln wollen. Sie auch und so fahren wir gemeinsam.

Hier zeigt sich gleich der Spirit des Rad Race: alle sind da aus dem gleichen Grund, die Stimmung ist freundlich und offen. Obwohl es ein Wettkampf ist sucht man vergeblich nach verbitterten Konkurrenten, nach feindseliger Athmosphäre. Es verbindet die Freude am Sport, es macht einfach Spaß vor Ort zu sein.

Vor Ort läuft Musik, der Aufbau ist noch im Gange, als wir ankommen. Nach und nach füllt sich der Parkplatz vor dem Kreisel. Viele schöne Räder sind unterwegs und das Warten hat tatsächlich Spaß gemacht.

Die Starts werden in Gruppen von je 25 durchgeführt. Bevor die eigene Gruppe startet, kann man im Wartebereich ein bisschen den Schatten genießen. Das ist eines der wenigen Mankos an der Location: Schatten gibt es nur wenig. Die Organisation ist gut!

Bevor meine Gruppe aufgerufen wird fahre ich mich ein wenig warm. Dabei fällt mir auf, dass es nicht mehr so gut rollt. Der Hinterreifen hat merklich Luft verloren. Mist! Eine Luftpumpe war schnell gefunden, aber zum Schlauch wechseln fehlt mir jetzt die Zeit. Ich denke noch, dass vermutlich einfach bei der Anfahrt ein wenig Luft entwich. Also acht Bar drauf und hoffen, dass alles hält.

Die startenden Gruppen werden nach dem Startschuss durch den Startbogen und durch den Kreisel geführt. Nach dem Kreisel ist das Rennen freigegeben - natürlich im Rahmen der StVO. Autofahrer werden durch Gridpeople gebeten zu Warten - eine Absperrung wäre ein Eingriff in die StVO und ist dadurch nicht drin. Das Zusammenleben zwischen Radlern und motorisiertem Verkehr ist toll, es wird gegenseitig Rücksicht genommen. Das erlebt man oft anders, aber passt vollkommen zum Rad Race!

Nach dem Start bin ich hinten im Feld, aber überhole gleich die erste große Gruppe. Die Beine sind fit, es ist warm und ich habe Bock! Relativ schnell finde ich Anschluss an eine feine Dreiergruppe, mit der wir nach und nach den Berg erklimmen und Mitfahrer nach Mitfahrer hinter uns lassen. Das Rausfallen lassen ist am Berg nicht ganz so einfach, aber klappt im Großen und Ganzen.

Die ersten acht Kilometer am Berg sind gut zu bewältigen, sind sie doch der flache Teil der Strecke. Man biegt nach links ab und der Berg geht los. Hier beginnt der Berg, hier beginnt der Spaß für die Beine! Wir sind mittlerweile zu fünft. Ich merke, dass nicht alle so gut mit der Steigung klar kommen und beschließe einen Außreisversuch zu starten.

Im Wiegetritt gehts an der Gruppe vorbei, bloß nicht das Tempo einbrechen lassen. Einer geht noch mit und so geht es weiter als Zweiergespann hinauf. Erst links, dann rechts kommen Parkplätze an der Straße. Hier stehen, wie auch im unteren Teil der Strecke, immer wieder Menschen die anfeuern. Toll!

Die Luft am Berg scheint zu stehen. Das Trikot habe ich schon früh geöffnet, irgendwann im letzten Stück habe ich es komplett geöffnet. Mir ist warm, verdammt warm! Mein Flüssigkeitshaushalt ist in Ordnung, das habe ich seit heute Morgen nicht schleifen lassen. Aber das Elektrolytgetränk will nicht mehr an mich, mein Körper will Wasser - zum Trinken, um es mir über den Helm zu kippen!

Der letzte halbe Kilometer fordert mich, ich verliere den Anschluss. Hier erwarten mich Steigungen von 8-9%, zudem ein kurzes Stück grobes Kopfsteinpflaster (sic). Felix macht Fotos vom Rennen und es ist schön ein bekanntes Gesicht zu erblicken!

Dann Zielbogen! Endlich! Call me Hillboooooooooooooy! Ich bin alle, aber die Freude ist groß. Das einzig große Manko an diesem Rennen taucht hier auf: keine Getränke für die Sportler nach dem Ziel. Was hätte ich für ein Wasser gegeben! Der Wirt auf dem Feldberg verkauft Getränke und hat vermutlich ein großartiges Geschäft an den 500 Sportlern gemacht. Ich hole mir ein Weizen und gönne dem Körper etwas Ruhe. Ich habe alles gegeben, aber meinen Beinen geht es ziemlich prima.

Ich bekomme mit wie die ersten Fixed Gear-Fahrer ankommen. Nach 26 Minuten ist der erste oben. Ich war unglaublich froh unterwegs doch irgendwann auf das kleine Kettenblatt wechseln zu können. Ich werde ein paar Tage später erfahren, dass ich acht Minuten länger gebraucht habe. Vor diesen 26 Minuten ziehe ich meinen Helm!

Bevor es in die Abfahrt geht brauche ich Luft auf dem Hinterreifen. Das ist glücklicherweise kein Problem. Die Abfahrt lasse ich langsam angehen. Im Tal heißt es erstmal den Schlauch zu flicken.

Aus dem Rad Race Bergfest ist mittlerweile das Talfest geworden. Wir warten die Siegerehrung ab, bevor wir uns auf den Heimweg machen. Viele schöne Erinnerungen kommen mit. Außerdem eine unglaublich große Lust aufs Fahrrad fahren! Und wenn alles klappt, geht es in einem Jahr wieder den Berg hinauf!

Vimeo ohne Flash im Firefox
2015-08-24 18:01

Der Videodienst vimeo ist oft die Heimat toller Videos. Und natürlich kann er seit einiger Weile auch ohne Flash zum Anschauen der Videos verwendet werden. Die Stichwörter dazu sind HTML5 Video-Tag mit H.264. Leider wollte das bei mir nicht funktionieren und so bekam ich die Meldung This video can’t be played with your current setup.

Für den Zugriff nutze ich Firefox. Flash ist auf diesem Rechner natürlich nicht installiert. Durch einen Entwickler bei vimeo bekam ich dann den Hinweis, dass ich mir gstreamer1 installieren solle und damit kam ich auf die richtige Fährte.

Mit dem folgenden Befehl habe ich auf Ubuntu 15.04 die fehlende Lib nachinstalliert:

sudo apt-get install gstreamer1.0-libav