
Da es seit kurzem endlich asciio in den Debian Repos gibt, dachte ich, ich probiere das gleich mal aus. Ich hatte letztens auf meinem Whiteboard mal verschiedene Workflows angezeichnet, wie bei FLubtitles z.B. der Download funktioniert. Erstmal die Grafik und weiter unten eine kurze Erläuterung.
DownloadSubtitles()
Client Server
.---------.
| CouchDB |
'---------'
^ |
| |
transparent gzip | |
compress/decompress | |
| |
| v
.--------------. .------------.
| Subtitle.srt | | FLubtitles |
'--------------' '------------'
^ |
| |
| v
zlib.decompress() zlib.compress()
^ |
| |
| v
base64.b64decode() base64.b64encode()
^ |
| .----------. |
'-------------------| JSON-RPC |<----------------'
'----------'Die API für FLubtitles kommt voran. Heute kam rudimentäre Logging Funktionalität dazu. Wie immer mit Python, geht das ziemlich einfach. Hier ein Beispiel:
import logging from logging.handlers import SysLogHandler log = logging.getLogger('flubtitles') handler = SysLogHandler(address='/dev/log') formatter = logging.Formatter("%(name)s - %(levelname)s - %(message)s") handler.setFormatter(formatter) log.addHandler(handler) log.setLevel(logging.INFO)
Benutzt wird es wie folgt:
import logger user1 = 'foo@spam.xxx' user2 = 'fana@flubtitles.org' user3 = 'flubtitles@world-domination.org' logger.log.warning('SignUp: <%s> does not match our policies', user1) logger.log.error('SignUp: The user <%s> already exists', user2) logger.log.info('SignUp: New User <%s> created', user3)
Und so sieht es dann in /var/log/syslog aus:
Feb 13 20:08:13 flubtitles - WARNING - SignUp: <foo@spam.xxx> does not match our policies Feb 13 20:08:13 flubtitles - ERROR - SignUp: The user <fana@flubtitles.org> already exists Feb 13 20:08:13 flubtitles - INFO - SignUp: New User <flubtitles@world-domination.org> created
Aktuell bin ich wieder etwas aktiver, was die API Implementierung betrifft. Im ersten Wurf hab ich Django als XML-RPC Dispatcher benutzt aber jetzt dann durch wsgi-xmlrpc ersetzt, da ich zuviel Overhead und unnötige Abhängigkeiten vermeiden will. Als schlanken Ersatz nutze ich jetzt das Bottle Framework. Nachdem ich damit auch recht flott Validierungen via HTTP hinzaubern konnte, machte ich mich an die Implementierung einer Registrierungsmethode für neue Benutzer in XML-RPC. Nachdem der Code fertig war zum Testen, wollte es einfach nicht funktionieren und ich wusste nicht warum.
Dieser XML-RPC Request
rpc_srv.SignUp(email = "user@domain.com", password = "password")
schlug immer fehl:
TypeError: __call__() got an unexpected keyword argument 'password'
Nachlesen in der Python Doku, wie man keyword arguments bei Methoden benutzt, brachte keine Hinweise. Sah alles korrekt aus. Kann es sein, dass XML-RPC das nicht unterstützt? Als ich Google diese Frage stellte, bekam ich die Antwort. Ja, leider:
You can't do this with plain xmlrpc since it has no notion of keyword arguments. However, you can superimpose this as a protocol on top of xmlrpc that would always pass a list as first argument, and a dictionary as a second, and then provide the proper support code so this becomes transparent for your usage
Dort wird zwar beschrieben, wie man sich behelfen kann durch Methoden Überschreibung etc... aber ab da hat es mir schon wieder in den Fingern gejuckt, doch lieber nach einer Alternative zu suchen. Und siehe da:
Das trifft sich gut, denn in CouchDB ist ja auch alles in JSON. Einen WSGI Adapter und Python Bibliothek, die mit den Keyword Argumenten umgehen kann gibt es auch schon. Den Code umbauen hat gerade mal 10 Minuten gedauert. Und jetzt funktioniert es auch :-)
...so lautet der Titel eines aktuellen Spiegel Berichtes:
Ähnliches hatte ich mal unter Untertitel - Eine unterschätzte Lernmöglichkeit für Fremdsprachen beschrieben.
Bei dem Spiegel Artikel musste ich jedoch bei folgendem Satz schmunzeln:
Noch größer ist der Effekt, wenn man auch die englischen Untertitel einblendet, wie Forscher jetzt herausgefunden haben.
Forscher... tss... Das hätte ich denen auch sagen können :-)
Als ich gestern mit dem Syntax Highlighting für Puppet rumgespielt habe, kam mir eine Idee. Warum nicht selbst so ein Syntax File für die gängigen Untertitel Formate machen, wie z.B. der de-facto Standard SubRip? Vorher aber sicherheitshalber Google gefragt, ob nicht vielleicht schon jemand sich die Arbeit gemacht hat. Und tatsächlich... Zuerst enttäuscht, dann aber doch froh darüber, dass mir jemand diese Arbeit erspart hat. Auf der Seite http://www.linuxpages.org/projects_en.php findet man VIM Syntax Files für die Formate SubRip, mpsub (MPlayer Untertitel Format) und MicroDVD (ja, das ist u.a. ein Untertitel Format).
Danke Josip! So macht Untertitel Bearbeitung auch in der Console Spaß...
An einem Beispiel zeige ich, wie man das Syntax File für SubRip (.srt) einrichtet:
Es muss der vollständige VIM installiert sein und nicht z.b. vim-tiny...
Und so sieht das dann aus. Wie man sieht, fallen einem durch das Highlighting gleich ein Zeichensatzproblem auf (die blaue 92), das man unter normalen Umständen (hier gEdit, zweites Bild) vielleicht nicht gleich gesehen hätte...

