© akai, Photocase.com / Maksim Tselishchev, 123RF.com
Börsenkurs-Alerting im Eigenbau
Tierische Kurssprünge
von Michael Schilli
Erschienen im Linux-Magazin
2010/09
Ein in Perl geschriebenes Pidgin-Plugin ignoriert dröge Börsentage, an denen die Kurse stillstehen, aber schlägt per Instant Message Alarm, falls die Aktien anfangen Achterbahn zu fahren.
Der Instant-Messenger-Client Pidgin [2] läuft nicht nur auf mehreren Betriebssystemen, sondern unterstützt auch eine Vielzahl IM-Protokolle: Ob Yahoo oder MSN, ob Google Talk oder IRC - das freie Pidgin bringt sie alle unter einen Hut und vereinfacht die Kommunikation mit Online-Freunden, die unterschiedliche Angebote nutzen. Pidgins Plugin-Architektur trägt maßgeblich dazu bei, dass der Tausendsassa mit neu auftauchenden oder sich ändernden Protokollen mithält und seinen funktionellen Abdeckungsradius stetig erweitert.
Dabei ist es nicht einmal notwendig, Plugins in Pidgins Muttersprache C zu schreiben und als Shared Libs bereitzustellen. Auch in Hochsprachen wie Perl geschriebene Skripte bindet er klaglos ein. Falls sie mit Pidgins Glib-basierter Eventloop zusammenarbeiten, dürfen sie sogar langwierige Operationen wie das Einholen von Webseiten ausführen, ohne dass Pidgins grafische Oberfläche zu ruckeln anfängt.
Es erscheint zunächst verrückt, dass ein C-Programm zusammen mit einem Perl-Skript im Springseiltakt in derselben Eventschleife hüpft. Wer sich aber erinnert, dass auch Perl letztlich nur ein Abstraktionslayer über einer C-Schicht ist und deshalb genauso gut Events einhängen und empfangen kann, dem erschließt sich die Logik.
Alarm bei Achterbahnfahrt
Das hier vorgestellte Pidgin-Plugin zeigt sich zunächst nicht, nimmt aber in regelmäßigen Abständen Kontakt mit einem Aktienticker-Service auf. Mit dessen Hilfe schaut es, ob eines der in einer Konfigurationsdatei abgelegten Papiere anfängt wild zu steigen oder kräftig an Wert zu verlieren. Tritt dies ein, öffnet das Plugin ein Kommunikationsfenster zum eingeloggten User nach Abbildung 1 und zeigt die Gesamtliste aller überwachten Aktien an, samt den einzelnen prozentualen Tagesänderungen.

|
Abbildung 1: Der Aktienmarkt-Wecker alarmiert den Anleger, weil die Google-Aktie um mehr als 2 Prozent gestiegen ist.
|
Der User gibt in der Konfigurationsdatei nach Abbildung 2 vor, welche Tickersymbole ihn interessieren und ab welcher prozentualen Änderung er einen Weckruf wünscht. Bei Zeilen, die lediglich das Aktienkürzel und keine Prozentzahl vorgeben, nimmt das Plugin automatisch 2 Prozent Toleranz an.

|
Abbildung 2: In der Yaml-Datei setzt der User bestimmte Aktien auf eine Beobachtungsliste und gibt bei Bedarf Prozentpunkte vor.
|
Simple Erweiterung
Das Plugin in Listing 1 gestaltet sich mit 74 Zeilen recht simpel. Pidgin lädt es, falls das entsprechende Perl-Skript mit einer »pl«-Endung ausführbar im richtigen Verzeichnis liegt und der User es im Plugin-Menü konfiguriert hat (siehe Abschnitt "Installation").
01 #!/usr/local/bin/perl -w
02 use strict;
03
04 use Pidgin;
05 use lib local::lib;
06 use Glib;
07 use WatchQuotes;
08
09 our %PLUGIN_INFO = (
10 perl_api_version => 2,
11 name => "Pidgin Stockwatch",
12 summary => "Stock Alert via IM",
13 version => "1.0",
14 author => "Mike Schilli " .
15 "<m@perlmeister.com>",
16 load => "plugin_load",
17 unload => "plugin_unload",
18 );
19
20 our $USER = "mikeschilli";
21 our $PROTOCOL = "prpl-yahoo";
22
23 our $WATCH_QUOTES = WatchQuotes->new();
24
25 ###########################################
26 sub plugin_init {
27 ###########################################
28 return %PLUGIN_INFO;
29 }
30
31 ###########################################
32 sub plugin_unload {
33 ###########################################
34 my($plugin) = @_;
35
36 Purple::Debug::info("stockwatch",
37 "Plugin unloaded.n");
38
39 1;
40 }
41
42 ###########################################
43 sub plugin_load {
44 ###########################################
45 my($plugin) = @_;
46
47 Purple::Debug::info("stockwatch",
48 "Plugin loaded.n");
49
50 $WATCH_QUOTES->init();
51 $WATCH_QUOTES->watch( "es_update );
52 }
53
54 ###########################################
55 sub quotes_update {
56 ###########################################
57 my($msg) = @_;
58
59 Purple::Debug::info("stockwatch",
60 "Updating Quotes.n");
61
62 my $account = Purple::Accounts::find(
63 $USER, $PROTOCOL);
64
65 my $conv = Purple::Conversation->new(
66 1, $account, $USER);
67
68 # user not online?
69 return unless defined $conv;
70
71 $conv->get_im_data->write(
72 $PLUGIN_INFO{name}, $msg,
73 0, time );
74 }
|
Das Plugin muss die vom Pidgin-API vorgeschriebenen Callbacks »plugin_init()« und »plugin_load()« definieren. Ersteres springt Pidgin an, um Informationen über das Plugin einzuholen und es später im Menü »Tools | Plugins« anzuzeigen.
Der Zocker entscheidet per Mausklick, ob er das Plugin aktivieren möchte. Tut er dies, kommt der Callback »plugin_load« ab Zeile 43 zum Zug, der die Aufgaben des Plugins definiert. Deaktiviert ein entmutigter Anleger das Plugin wieder, erledigt es in »plugin_unload()« eventuell noch letzte Aufräumarbeiten, bevor Pidgin es aus dem Speicher wirft.
Das weiter unten beschriebene Modul »WatchQuotes« liest die Konfigurationsdatei, sobald Zeile 50 im Plugin dessen »init()«-Methode aufruft. Zeile 51 startet anschließend den kontinuierlich arbeitenden Überwachungsprozess mit dem Aufruf der Methode »watch()«. Ihr überreicht das Plugin-Skript eine Referenz auf den ab Zeile 55 definierten Callback »quotes_update«, der eine ihm übergebene Nachricht in eine IM-Konversation verpackt und dem angenehm oder unangenehm überraschten User schickt.
Dazu findet die Methode »find()« eines »Purple::Account«-Objekts in den Zeilen 62 und 63 den hoffentlich eingeloggten User, die Zeilen 65 und 66 bauen zu diesem eine Konversation auf, die sich in einem Objekt der Klasse »Purple::Conversation« manifestiert. Geht dabei etwas schief, zum Beispiel weil der festgelegte User gar nicht auf dem angegebenen Service eingeloggt ist, bricht Zeile 69 ab und die Nachricht bekommt nie das Licht eines turbulenten Börsentages zu sehen.
Geht aber alles gut, schickt die in Zeile 71 aufgerufene »write()«-Methode die Nachricht los und legt als Absender willkürlich den Namen des Plugins fest. Der letzte Parameter setzt mit der Perl-Funktion »time()« noch die aktuelle Uhrzeit, die Pidgin neben jeder Nachricht anzeigt.
| Whitepaper |
|
Usage Landscape Enterprise Open Source Data Integration
Die Nachfrage nach Datenintegrationslösungen für Unternehmen ist zunehmend gestiegen und vor allem das Interesse an Open Source Technologien wird immer größer. Doch wie und von wem werden Open Source Datenintegrationslösungen genutzt und welches Nutzungsverhalten lässt sich daraus ableiten? Das vorliegende White Paper präsentiert die Erfahrungswerte von über 1000 Open Source Nutzern und liefert fundierte Antworten auf diese Fragen.
Download PDF (Registrierung erforderlich)
|
|
Daten Migration - Eine Publikation von Bloor Research
Datenmigrationsprojekte überschreiten häufig das Budget, neigen zu Verzögerung und werden unter Umständen komplett abgebrochen. Bloor Research ist eines der weltweit führenden IT-Forschungs-, Analyse- und Beratungsunternehmen und wird in dem vorliegenden White Paper die wichtigsten Aspekte dieser Problematik näher beleuchten. Ferner werden praktische Empfehlungen für erfolgreiche Migrationsprojekte gegeben, die Sie auf Ihr nächstes Projekt übertragen können.
Download PDF (Registrierung erforderlich)
|
Dieser Online-Artikel kann Links enthalten, die auf nicht mehr vorhandene Seiten verweisen. Wir ändern solche "broken links"
nur in wenigen Ausnahmefällen. Der Online-Artikel soll möglichst unverändert der gedrucken Fassung entsprechen.
|