Drafts-Rezepte IX: Serverstatus bei Github

Da auch den guten Leuten von github mal die Server wegbrechen, gibt es dort eine kleine API. Es ist nur eine klitzekleine Schnittstelle, aber sie wirft raus, wie es gerade und in letzter Zeit um die Erreichbarkeit von github steht. Also basteln wir uns doch mal ein kleines Script, mit dem wir die Daten abrufen können.

from console import alert
from json import loads
from sys import 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 formatdate(date):
    '''bring the date into shape'''
    return date[:-1].replace('T', ' ')

def request(method):
    '''a request to github's status API.'''
    api_url_base = 'https://status.github.com/api/{method}'
    try:
        response = urlopen(api_url_base.format(method=method))
    except IOError:
        error_dialog('Connection Error', 'Unable to perform request.')
    if response.getcode() != 200:
        error_dialog('Error', 'Status code: {0} - Message: {1}'.format(response.getcode(), response.read()))
    return loads(response.read())

def github_status():
    '''get information and admin messages for github servers.'''
    status = request('status.json')
    messages = request('messages.json')
    output = '''
GITHUB STATUS
================
{date}: {status}

Last messages:
    '''.format(date=formatdate(status['last_updated']),
               status=status['status'])
    for item in messages:
        output += '\n{date}: {status}\n{comment}\n'.format(date=formatdate(item['created_on']),
                                                             status=item['status'],
                                                             comment=item['body'])
    output += '\nFor further information: https://status.github.com/'
    webbrowser.open('drafts://x-callback-url/create?text={0}'.format(quote(output)))

if __name__ == '__main__':
    github_status()

Gist

Die Action in Drafts ist auch keine Neuerung mehr.

pythonista://githubstatus?action=run

Import-Link

Seitdem Drafts auch Actions ausführt, wenn ein Draft keine Zeichen enthält, muss auch nur die Action gefeuert werden. Daraufhin rödelt Pythonista etwas rum, wirft dann aber das Ergebnis als Text in einen neuen Draft aus. Darin stehen dann in knapper Form die Informationen.

Drafts-Rezepte VIII: Down or just me?

Ein ganz kleines Rezept, um mal schnell zu checken, ob eine Seite wirklich down sein könnte oder der Fehler irgendwo auf meiner Seite liegt. Ich hatte das leidige Thema diese Woche zu oft, da war es ganz gut, mit Drafts schnell losschlagen zu können. Um den Service in Safari zu öffnen, sieht das alles so aus:

http://www.isup.me/[[draft]]

Will ich es in Chrome öffnen, ist das auch schnell erledigt:

googlechrome://www.isup.me/[[draft]]

Die Idee sollt also klar sein. Ist euer Browser nicht dabei sein, ist sein Handle vielleicht hier zu finden.

Will ich jetzt mal sehen, ob kultprok down ist, würde ich inDrafts einfach

kultprok.de

eingeben und dann die Action feuern. Okay, das ist natürlich reichlich dämliches Beispiel, weil ich zuverlässigere Wege habe, um festzustellen, ob mein Server noch läuft. Aber na ja, der Gedanke zählt.

Passwortsicherheit (3): Zuverlässige Freunde?

Bislang habe ich mich vorwiegend darauf konzentriert, mögliche Methoden zum Erstellen und Verwalten sicherer Passwörter vorzustellen. Zugegeben, ich bevorzuge eine Methode, die nicht auf Anhieb komfortabel ist, die bisherigen Teile in dieser Serie sollten aber verdeutlicht haben, wie gering der Aufwand tatsächlich ist – bei enormer großer Passwortsicherheit. Heute geht es weniger um das Wie, mehr um das Warum. Ein offensichtlicher Grund sind Angriffe auf passwortgeschützte Daten, das sollte hinlänglich bekannt sein. Darauf, also wie solche Angriffe aussehen, komme ich erst in der nächsten Woche. Denn es gibt noch einen weiteren Grund, der weniger bekannt ist, aber nicht weniger wichtig. Dies hat damit zu tun, dass nicht unbedingt nur mein Account oder meine Daten das konkrete Ziel eines Angriffs sein können. Sie können auch nur beiläufiges Opfer einer größer angelegten Aktion sein. Weiterlesen