Gistacular: Ein mobiles Zuhause für Gist

Was für eine prächtige Ergänzung das kleine Gistacular zu iOctocat ist. Zwar kann ich Gists auch dort ansehen, aber nicht bearbeiten. Gistacular schließt diese Lücke auf einfache Weise.

Die App ist ein stromlinienförmiger Client für Gists. Alles ist übersichtlich angeordnet. Ich kann Favoriten verwalten, Skripte anderer Leute durchforsten, neben den eigenen Skripten natürlich. Der Texteditor ist spartanisch, aber ausreichend. Aber Gistacular zeigt in der Vorschau auch Syntax-Highlighting.

Ich sehe langsam, dass ich meine Desktoprechner nur noch für wirklich umfassende Schreibarbeiten oder eben Spiele brauchen werde. Alles andere kann ich immer besser auch von mobilen Geräten erledigen.

Übrigens, der Quellcode von Gistacular ist freundlicherweise auch auf Github.

Bilder: iTunes

Drafts-Rezepte VII: Postleitzahlen mit Zippopotamus II

Der zweite Teil zu Postleitzahlen mit Zippopotamus geht in die entgegengesetzte Richtung. Statt nun also eine Postleitzahl zu ermitteln, geht es nun um die Städte oder Stadtteile hinter eine Postleitzahl.

Das Script ist wieder genauso einfach wie das erste. In Drafts muss eine neue Notiz nur die folgende Syntax einhalten:

[PLZ],[LÄNDERKÜRZEL]

Beispielsweise würde die folgende Eingabe der berühmten Postleitzahl eine Markdown-Liste in Drafts öffnen.

90210 , us

Auch hier kommt ein kleiner Haken ins Spiel, auch wenn er nicht ganz so lästig ist. Denn die API von Zippopotamus erlaubt es derzeit nicht, das Land nicht anzugeben. Unter Umständen müssen wir also mehr Infos angeben, als wir haben. Das Python-Script sieht derzeit so aus:

# -*- coding: utf-8 -*-
from console import alert
from json import loads
from sys import argv, exit
from urllib import urlopen, quote
import webbrowser

def error_dialog(title, message):
    '''
    a diaolog box for error messages.
    '''
    try:
        alert(title, message)
    except KeyboardInterrupt:
        pass
    webbrowser.open('drafts://')
    exit(message)

def handle_data(data):
    '''
    process json response from zippopotamus.
    will return a markdown list of items.
    '''
    city_json = loads(data)
    output = ''
    for item in city_json['places']:
        output += '- Ort: {place}, Region: {state}\n'.format(place=item['place name'], state=item['state'])
    return output

def get_by_postalcode(data):
    '''
    get all possible cities for a postal code in
    the given country.
    '''
    api_url_base = 'http://api.zippopotam.us/{country}/{postcode}'
    try:
        postcode_, country_= [item.strip() for item in data.split(',')]
    except Exception as err:
        error_dialog(str(err.__class__), err.message)

    try:
        response = urlopen(api_url_base.format(country=country_, postcode=postcode_))
    except IOError:
        error_dialog('Connection Error', 'Unable to perform request.')
    if response.getcode() == 200:
        postcode_data = handle_data(response.read())
        webbrowser.open('drafts://x-callback-url/create?text={0}'.format(quote(postcode_data)))
    else:
        error_dialog('Error', 'Status code: {0} - Message: {1}'.format(response.getcode(), response.read()))

if __name__ == '__main__':
    get_by_postalcode(argv[1])

Gist

Die dazugehörige Action für Drafts ist:

pythonista://city-by-postalcode?action=run&argv=[[draft]]

Import-Link

Drafts-Rezepte VI: Postleitzahlen mit Zippopotamus I

Den kleinen Gag kann ich mir nicht verkneifen. Ich mache zu Zippopotamus, einem guten, kleinen Dienst für Postleitzahlen in einer Vielzahl von Ländern, zwei Teile. Damit artet die Kleinteiligkeit aus wie der überbordende Song-Kosmos von Coheed & Cambria.

Das Script ist wieder sehr einfach. In Drafts muss eine neue Notiz nur die folgende Syntax einhalten:

[STADT], [REGIONSKÜRZEL], [LÄNDERKÜRZEL]

Beispielsweise würde die folgende Eingabe die berühmte Postleitzahlen für die Stadt als Markdown-Liste in Drafts öffenen.

beverly hills, ca, us

Leider kommt diese Sache nicht ohne einen kleinen Haken aus. Denn die API von Zippopotamus erlaubt es derzeit nicht, die Region und das Land nicht anzugeben. Unter Umständen müssen wir also mehr Infos angeben, als wir haben. Ich bin dabei, mir dafür eine Lösung zu überlegen. Das Python-Script sieht derzeit so aus:

# -*- coding: utf-8 -*-
from console import alert
from json import loads
from sys import argv, exit
from urllib import urlopen, quote
import webbrowser

def error_dialog(title, message):
    '''
    a diaolog box for error messages.
    '''
    try:
        alert(title, message)
    except KeyboardInterrupt:
        pass
    webbrowser.open('drafts://')
    exit(message)

def handle_data(data):
    '''
    process json response from zippopotamus.
    will return a markdown list of items.
    '''
    city_json = loads(data)
    output = ''
    for item in city_json['places']:
        output += '- City: {place}, Post code: {postcode}\n'.format(place=item['place name'], postcode=item['post code'])
    return output

def get_by_city(data):
    '''
    get all possible post codes for a city in
    the given country.
    '''
    api_url_base = 'http://api.zippopotam.us/{country}/{state}/{city}'
    try:
        city_, state_, country_= [item.strip() for item in data.split(',')]
    except Exception as err:
        error_dialog(str(err.__class__), err.message)

    try:
        response = urlopen(api_url_base.format(country=country_, state=state_, city=city_))
    except IOError:
        error_dialog('Connection Error', 'Unable to perform request.')
    if response.getcode() == 200:
        city_data = handle_data(response.read())
        webbrowser.open('drafts://x-callback-url/create?text={0}'.format(quote(city_data)))
    else:
        error_dialog('Error', 'Status code: {0} - Message: {1}'.format(response.getcode(), response.read()))

if __name__ == '__main__':
    get_by_city(argv[1])

Gist

Die dazugehörige Action für Drafts ist hier:

pythonista://postalcode-by-city?action=run&argv=[[draft]]

Import-Link

Wilfred: Sittenstrolch

Wer in der Reihe der fantastisch erfolgreichen Verfilmungen von Tolkiens Herr der Ringe Hauptdarsteller war, sollte keine weltlichen Sorgen kennen. Ein gutes Management vorausgesetzt, sollten die Verträge einer effektiven Frührente für Bestbetuchte gleichkommen. Über all diese Voraussetzungen dürfte Elijah Wood verfügen, so schließt sich die eine Frage an: Was nun?

Wood wirkt nicht wie der Typ Schauspieler, der sich der Dekadenz hingibt. Über einen halben Planeten zwischen uns und die absolute persönliche Unbekanntheit setze ich mich hinweg, indem ich von Wood annehme, dass er sich nur den Luxus gönnt, eben noch die Projekte anzunehmen, die ihm den größten Nutzen versprechen. Da müsste er doch eigentlich in Erklärungsnot geraten, was ihn geritten hat, in einer Serie mitzuspielen, in der nur der von ihm gespielte Ryan nach einem erfolglosen Selbstmordversuch durch Medikamentenüberdosis den Hund seiner Nachbarin als Mittdreißiger im flauschigen Hundekostüm sieht?

Worum es in Wilfred geht, ist schwer in Worte zu fassen. Es ist, wie es oben beschrieben wurde. Ein depressiver Mann hat einen imaginären Freund in dem Hund seiner Nachbarin gefunden, für die er auch noch, fast selbstverständlich, Gefühle hegt. Ryan und Wilfred stolpern von einer abstrusen Schweiner in die nächste. Wilfred ist dabei nichts peinlich. Wieso auch, er ist ein Hund. Ryan und auch sein Gewissen aber müssen desöfteren beruhigt werden. Da trifft sich hervorragend, dass beide leidenschaftlich gern kiffen. Das soll ja ausgleichend wirken.

Die Serie ist eines nicht, auch wenn es sich so anhört: albern. Sie zu beschreiben läuft, wie gesagt, Gefahr, sie ins Lächerliche zu ziehen. Im besten Falle ist sie ein rigoroser Verstoß gegen den guten Geschmack. Meist jedoch entpuppen sich die Handlungsstränge als subversive Dramedy. Unter dem Kostüm des Hundes steckt ein Es; eine ungebremste, triebhafte Erscheinung, die Ryans Leben zu gleichen Teilen zu heilen wie zu ruinieren in der Lage ist. Der imaginierte Hund ist eine entgrenzte, hemmungslose Instanz irgendwo zwischen Ryans Fremd- und Selbstwahrnehmung.

In Wilfred bricht eine besondere Form anarchischen Humors hervor. Die Perspektive des Hundes erlaubt es, die menschlichen Normen zu brechen, ohne dabei plump in Gossenhumor auszupacken. Nicht dass die Gosse nicht Thema wäre, aber erfreulicherweise entsteht der Humor daraus, dass Ekel, Abscheu und Grenzverstöße mit der manischen Freude eine Hundes daherkommt, der sich an unsere Regeln nicht halten muss. Meist entsteht der Humor auch nur verbal, ist damit eleganter als mit dem Holzhammer vorgetragener Klamauk. Ein widerwärtiger Spaß.

Linkgebliebenes 28

Interessenkreuzungen: Wrex‘ Leben und Tod in Mass Effect

Eigentlich mache ich mir ein paar Gedanken dazu, wie Spiele noch zu selten über diegetische Mittel Spannung erzeugen oder sogar moralische Dilemmata verstärken können. Noch bin ich nicht sehr weit, aber es steht schon fest, Mass Effect hat eine Menge unmittelbarer Momente, in denen folgenreiche Entscheidungen verlangt werden. Sie können wehtun wie beispielsweise diese Szene auf Virmire:

Die Auseinandersetzung mit dem aufbrausenden Krieger Urdnot Wrex ist ein immer noch viel zu seltener Moment in Spielen. Er ist übervoll vor Spannung, die ganze gemeinsame Vergangenheit spielt mit hinein, Wrex‘ Sorge um sein allmählich aussterbendes Volk; jedes Wort kann den Ausschlag in die eine oder andere Richtung geben. Ob er leben wird oder stirbt. Dazu kommt ein verstecktes Spiel gegen die Zeit, denn sofern der Dialog mit Wrex zu lange ergebnislos verstreicht, wird Ashley Williams für klare, wenn auch blutige Verhältnisse sorgen.

Ich habe meine Probleme mit der Mass-Effect-Reihe, erhebliche sogar, Augenblicke wie dieser machen alles wett. Entscheidungen haben Konsequenzen. Für mich als Spieler wird die Welt nicht immer so fallen, wie ich es will. Genau das fehlt den meisten Spielen, die nicht verstehen, wie wichtig ein Interessenskonflikt zwischen spielbaren Figuren und NPCs für die Entwicklung der Figuren ist. Zumal dann, wenn der Konflikt unwiederbringlich zur Entscheidung zwischen verschiedenen Pfaden zwingt.

Timely Alarm Clock: Form auf Höhe der Funktion

Muss ich über Timely noch wirklich viele Worte verlieren, muss ich? Eine halbe Woche mindestens bin ich zu spät dran, also eine Ewigkeit, in der Lob kübelweise über diesen Wecker für Android ausgeschüttet wurde. Da rechtfertigt nur ein Verriss oder eine kleine, pointierte Kritik, um jetzt noch mit ein paar Sätzen über die App rauszukommen. Weit gefehlt, ich kann nur in den Chor einstimmen.

Vor einiger Zeit schrieb ich noch von Rise auf iOS, dem Timely in vielen Punkten ähnlich ist, in den meisten sogar überlegen. Optisch ist Timely um Welten ansehnlicher als jede durchschnittliche Android-App. Nicht nur das, Timely ist schön. Flaches Design, ja wir spüren den Zeitgeist, mit subtilen Effekten. Der Nutzbarkeit steht das nie im Weg. Timely ist ein Muster an intuitiven Bedienelementen, ich arbeite wie im Traum mit dem Wecker, der Uhr, Timer und Stoppuhr. Ich schwebe durch die App, keine Übertreibung.

Kostenlos ist Timely in seiner grundlegenden Form, weitere Themes, Weckersynchronisation über mehrere Geräte hinweg und vor allem einige fantastische Wecktöne lassen sich einzeln oder als Paket hinzu kaufen. Nicht aber, ohne dass die meisten Zusatzinhalte vorher in einer Testphase für einige Tage kostenlos zur Verfügung zu stehen. So fair ist Timely, alle Kosten sind transparent, ich wünsche mir, dass es sich auszahlt. Und selbst wenn ich auf der kostenlosen Schiene hätte bleiben wollen, ich hätte einen fantastischen Wecker gehabt. Timely ist ohne böse Überraschungen eine grandiose App, aber auch ein Blick in eine Zukunft fernab der biederen Nacktmulche von Software, die ich mir schweren Herzens auf den Android schob. Android kann schön sein, kombiniert mit solch durchdachter Funktionalität sogar ästhetisch.

TickTick: Auf der Suche nach Alleinstellungsmerkmalen

Vergeht in dieser Welt auch ein Tag, an dem keine Todo-Anwendung erscheint? Gibt es da irgendeinen mir unbekannten Erlass, der eine Todo-Schwemme verlangt? Vorschrift oder nicht, TickTick ist auch so ein Dienst, der angespült wurde.

Mir ist es besonders wichtig, flexibel und unabhängig zu sein, daher sollte ein Todo-Manager eine große Breite an Plattformen abdecken und zuverlässig zwischen ihnen synchronisieren. TickTick ist diesbezüglich überaus zuverlässig und bietet neben der webbasierten Anwendung noch Apps für Android und iOS. Zwischen diesen konnte ich ohne jede Probleme wechseln, ich war auf dem aktuellen Stand, allerhöchstens musste ich das Synchronisieren von Hand abrufen. Damit ließ sich aber gut auskommen.

Die kostenlose Anmeldung und Mitgliedschaft bringt darüber hinaus alle erwartbaren Features eines Todo-Managers. Die Aufgaben werden in Listen geordnet, sie können selbst wieder in Listen mit Teilaufgaben unterteilt werden. Alles bekannte und notwendige Features für eine solche Anwendung. Erinnerungen und wiederkehrende Aufgaben werden als selbstverständlich vorausgesetzt und sind dementsprechend auch in dieser App da.

Es ist schwer, ein Alleinstellungsmerkmal TickTicks herauszustellen. Womöglich ist es die Zuverlässigkeit. Alles ist auf die effiziente Todo-Verwaltung ausgerichtet. Die Menüs sind schlank, TickTick hat kaum Kanten. Es läuft über alle Geräte hinweg einfach wie versprochen.

Bildquelle: iTunes App Store

Buffy the Vampire Slayer: Mosaikform des Fernsehens

Als Serie ging Buffy the Vampire Slayer an mir vorüber. Ich sah hin und wieder eine Folge der deutschen Ausstrahlung, war immer gut unterhalten, gefesselt hat sie mich damals nicht. Ich sah es als gut gemachten Trash, der mich nicht in den Bann zog. Die einzig plausible Erklärung, die mir hierfür einfällt, ist, dass die Serie für mich damals zu weiblich dominiert gewesen sein könnte. Viel klügere Aufsätze und Bücher wurden in der Zwischenzeit geschrieben, alle können besser begründen, warum Buffy gerade wegen seiner starken Motive, die den Mainstream nicht sprengten, aber subversiv unterliefen, eine bedeutende Serie ist. Buffy hat starke Frauenfiguren, ja, aber es hat vor allem aber auch eine Atmosphäre der Emanzipation im durchaus geschlechterübergreifenden Sinn der Selbstverwirklichung. Damit kann ich mich heute voll und ganz identifizieren.

Aber, wie gesagt, es gibt bessere Aufsätze zur Bedeutung der Serie für Emanzipation und den Feminismus. Buffy ist für mich aber auch auf der Ebene der Fernsehgeschichte eine Besonderheit. Ich würde sie als Mosaikform bezeichnen. Ich reize den Griff in die Biologie metaphorisch vielleicht zu sehr aus, aber ich finde es treffend: Buffy fing als eine Serie unter vielen an. Ihr Unterscheidungsmerkmal war eine jugendliche Superheldin. Doch das war nur etwas mehr als ein Gimmick wie etwa drei attraktive, dauergewellte Agentinnen auf Verbrecherjagd oder ein sprechendes Auto. Über alle Staffeln hinweg wandelte die Serie sich, sie bildete Züge eines Fernsehens aus, das uns heute mit seinem Mut und erzählerischer Kraft begeistert. Daher ist sie für mich eine Mosaikform. Sie trägt und vereint in sich Eigenschaften eines nicht vergangenen, aber herausgeforderten Fernsehens und denen der modernen Serien.

Das ursprüngliche, über Jahrzehnte etablierte Fernsehen war im Grunde streng episodisches Erzählen prototypsicher Geschichten. Viel passierte, kaum etwas geschah. Alles blieb wie es war. Das moderne Fernsehen ist seriell, es verfügt über komplexe, staffellange oder noch längere Erzählbögen. Es interessiert sich für seine Figuren. Beide sind verwandte mediale Erzählformen, aber sie verhallten sich wie tradierte Volkssagen zum modernen Roman.

Buffy war eine kleine Serie als sie anfing. Ein kurzweiliger Spaß bei kleinem Budget, so sah sie aus. Ein sehr seichter Rahmen umspannte das gute Dutzend der Folgen in der ersten Staffel, er ist jedoch kaum der Rede wert. Erst zur zweiten Staffel deutete sich aber an, dass die Autorinnen und Autoren ein Merkmal des episodischen Fernsehens aufgaben: die Ereignisse im nur dem Namen nach sonnigen Sunnydale, unter dem ein Höllenschlund Dämonen ausspuckte, hinterließen Spuren. Das klassische Fernsehen kannte körperliche Schmerzen, auch Verwundungen, aber nichts, das sich nicht recht schnell überwinden ließe. In Sunnydale erlitten Buffy und ihre genial betitelte Scooby Gang im besten Fall körperliche Verletzungen, meist reichten die Verletzungen tiefer in ihre Psyche, da also, wo es richtig wehtut. Zuerst schrieben sich die Autorinnen und Autoren die Verpflichtung, sich für die Figuren zu interessieren, in die Protagonistin, dann aber weiteten sie dies auf alle wiederkehrenden Figuren aus.

Buffy kann nach den Geschehnissen der ersten Staffel nicht einfach in ihr normales Leben zurückkehren. Sie muss sich in ihrem Umfeld neu justieren. Schon in der vierten Staffel erging es allen anderen Protagonistinnen und Protagonisten ähnlich. Sie wurden Gezeichnete. Und sie wurden erwachsen. Eine schlechtere, eine episodische Serie, hätte diese Figuren für immer in der High School konserviert. Alles Übel wäre pünktlich zum Ende jeder Folge beseitigt, damit sich hübsche Jugendliche in die Arme fallen können. Aber Buffy gibt sich diese Blöße nicht. In einem beinahe übertrieben symbolischen Akt feiert die Serie aber die komplette Zerstörung der Schule, um den Übergang ins Erwachsensein zu unterstreichen1.

So rückte Buffy die Figuren und ihr Leben in einer, zugegeben, fantastischen Welt in den Fokus. Eine Welt die nicht heil war, hier starben Menschen. Unschuldige Kinder starben. Es ist eine vielschichtigere Welt, in der die Fronten zwischen Gut und Böse nicht von den Masken- und Kostümbildnern gezogen wurden. Dass die Serie trotz der Zerstörung und Düsternis, die ihre Figuren befällt, eine Serie blieb, bei der gelacht werden konnte, ist Zeichen ihrer Qualität. Es zieht seine Komik aus der Kollision von Superhelden mit der harten Realität. Da muss eben auch irgendwoher das Geld kommen, dann muss die Vampirjägerin eben auch arbeiten gehen. Aber auch dabei setzt das Motiv sich fort. Alle haben sehr menschliche Probleme, selbst die Monster. Die Serie nutzte geschickt aus, dass die Leiden der Figuren sich auch physisch manifestieren konnten. Die Kämpfe gegen Dämonen waren zunehmend bewusste Verkörperungen innerer Konflikte der Figuren. Buffy hat dies nicht perfektioniert, aber mitgeholfen, lang gezogene Erzählstränge im Mainstream zu etablieren, die uns menschliche Figuren in allem Facettenreichtum nahebringen. Es trug das Wesen des alten Fernsehens noch in sich, formte aber das neue Fernsehen erkennbar aus.

1 Die spätere Rückkehr könnte mir zwar die schöne Deutung ruinieren, im Zweifel würde ich aber den Versuch unternehmen, auch das noch in meine Argumentation einzubinden.

Linkgebliebenes 27