Monday 21.September 2009
geposted in Uncategorized
um 3:59 pm
von alewo
Da ich im Rahmen meiner Diplomarbeit ja einen Prototyp entwickeln musste, der in Python ein Bluetooth-Scatternet-Discovery Mechanismus umsetzt, war es auch nötig einen Mechanismus zum Zugriff auf die einzelnen Features des Prototyps für externe Anwendungen umzusetzen. Ich habe hierfür eine DBUS-Kommunikation implementiert. Und damit das gewonnene Wissen nicht in meinem Gehirn zu einer Lücke gerinnt, will ich es hier der Allgemeinheit gern zur Verfügung stellen.
| Client 1 (Service-Provider) |
# -*- coding: ascii -*-
import dbus, dbus.service, dbus.glib
import logging
logging.basicConfig(level=logging.DEBUG)
""" Name of the dbus interfaces"""
DBUS_IFCE = "aDBUSifce"
DBUS_NAME = "aDBUSname"
DBUS_PATH = "/"
class MyDbusInterface(dbus.service.Object):
def __init__(self ):
self.bus = dbus.SessionBus()
self.busname = dbus.service.BusName(DBUS_NAME, bus=self.bus)
dbus.service.Object.__init__(self, dbus.SessionBus(), DBUS_PATH)
# ------------------ dbus methods -----------------------------
@dbus.service.method(dbus_interface=SCM_DBUS_IFCE, in_signature="s", out_signature="")
def offered_Service(self, parameter):
#execute the service request and do the things you should do
pass
@dbus.service.method(dbus_interface=SCM_DBUS_IFCE, in_signature="ss", out_signature="")
def offered_Service_too(self, parameter, secondParameter):
#execute the service request and do the things you should do
pass
# ------------------ dbus signal emitters -----------------------------
@dbus.service.signal(dbus_interface=SCM_DBUS_IFCE, signature="ss")
def onCallbackSignal(self, first, second):
"""do something useful like log etc."""
pass
@dbus.service.signal(dbus_interface=SCM_DBUS_IFCE, signature="sss")
def onAnotherCallbackSignal(self, first, second, third):
"""Broadcast signal to notify changes"""
pass
|
| Client 2 (Service-Consumer) |
#!/usr/bin/python2.5
#The client program that connects to dbus and gets messages
import dbus, dbus.glib
import gobject
""" Name of the dbus interfaces"""
DBUS_IFCE = "aDBUSifce"
DBUS_NAME = "aDBUSname"
class TestClient:
def __init__(self):
bus = dbus.SessionBus()
proxyObj = bus.get_object(DBUS_NAME, '/')
self.dbIfce = dbus.Interface(proxyObj, SCM_DBUS_IFCE)
#connect to the Remote-Signals for callbacks
self.dbIfce.connect_to_signal("onCallbackSignal",
self.executeMethodOnSignal,
SCM_DBUS_IFCE)
self.dbIfce.connect_to_signal("onAnotherCallbackSignal",
self.executeThisForAnotherSignal,
SCM_DBUS_IFCE)
self.loop = gobject.MainLoop()
#--- Methods for Callbacks ---
def executeMethodOnSignal(self, firstParameter, secondParameter):
print " do something like print: firstParameter=%s,
secondParameter=%s"
% (firstParameter, secondParameter)
def executeThisForAnotherSignal(self, firstParameter, secondParameter, thirdParameter):
print " do something like print: firstParameter=%s,
secondParameter=%s,
thirdParameter=%s"
% (firstParameter, secondParameter,
thirdParameter)
# --- actions ---
# Methods for call remote Interfaces (service provider)
def a_offered_Service(self):
self.dbIfce.offered_Service("I'm a String Parameter")
def another_offered_Service(self):
result = self.dbIfce.offered_Service_too( "I'm a String Parameter, too",
"and one other again")
print result
pass
#--only for using the testclient
def run(self):
gobject.timeout_add(1000, self.a_offered_Service)
gobject.timeout_add(2000, self.another_offered_Service)
gobject.timeout_add(8000, self.loop.quit)
self.loop.run()
if __name__ == '__main__':
tc = TestClient()
tc.run()
|
Erklärungen folgen irgendwann via Update... ansonsten Code lesen lernen =)
Permalink
geposted in Uncategorized
um 1:38 pm
von alewo
Da ich mich jetzt nach dem erfolgreichen Abschluss meiner Diplomarbeit in die Bewerbungsphase für die Suche eines späteren Arbeitgebers begebe, wurde es für mich nötig, ein schönes griffiges PDF-Dokument zu erzeugen, weilches natürlich auch über Bookmarks verfügt.
Der erste Gedanke der sich mir hierbei einstellte war, Latex zum Kombinieren von Modulen einzelner PDF-Dokumente zu nutzen.
Die eigentliche Lösung ist am Ende dann wie immer viel leichter, als sie am Anfang erscheint. Der \section-Befehl vom hyperref-Paket setzt ja ein Bookmark aber auch eine Kapitelüberschrift. Was ich eigentlich ja nicht erreichen wollte, da durch den “section”-Befehl ja auch immer so eine häßliche Überschrift mit erzeugt wird. Die Lösung die nur Bookmarks erzeugt, lässt sich dann aber effizient über das Manual zu hyperref finden. Der benötigte Befehl lautet: \pdfbookmark[]{}{} .
Mit ihm ist es möglich Bookmarks oder auf Deutsch, PDF-Lesezeichen an beliebiger Stelle zu setzen.
Ein kleines Minimalbeispiel soll die Anwendung zum Zusammenfügen mit Bookmarks für alle kopierfreudigen einmal demonstrieren:
\documentclass[a4paper]{article}
\usepackage{pdfpages}
\usepackage[
pdfpagelabels=true, % so werden die Seitennummern auch ins PDF uebernommen
a4paper,
bookmarks=true,
bookmarksnumbered=true,
bookmarksopen=true,
bookmarksopenlevel=1,
pdfpagelayout=SinglePage,
pdftex
]{hyperref}
\begin{document}
\pdfbookmark[0]{Motivationsschreiben}{Motivationsschreiben}
\includepdf[pages=-, link=true]{Motivationsschreiben.pdf}
\pdfbookmark[0]{Foto}{Foto}
\includepdf[pages=-, link=true]{Foto.pdf}
\pdfbookmark[0]{Lebenslauf}{Lebenslauf}
\includepdf[pages=-, link=true]{Lebenslauf.pdf}
\end{document}
Kommentar: “pages=-” –> alle Seiten einbinden
Permalink
Wednesday 03.June 2009
geposted in Alle Kategorien, Kochen 2.0
um 3:17 am
von alewo
So nu hab ich gedacht, die Welt würde mein Zufallsfund vielleicht intressieren. Da ich ja ein verfechter diverser schöner Multimediaplayer bin, darunter auch Winamp (zur Audio-Wiedergabe und Verwaltung der Musikbibliothek) betrifft mein Fund auch diesen Player (in der Version 5.531 bei mir) .
Ich habe mich schon oft geärgert, dass ich mein Winamp nicht mit der Fernbedienung (oder den Multimediatasten) steuern konnte und im Einstellungsdialog hab ich früher nicht geschaut. Aber es gibt tatsächlich die Möglichkeit unter “Globale Tastenkürzel” in diesem Dialog ein Häkchen, dass man setzen kann. Und schon gehts.
Und da ich Screenshots so mag… (da wo das Kreuz zu sehn ist, muss es auch hin):

Permalink
Sunday 17.May 2009
geposted in Kochen 2.0, Magento
um 2:23 pm
von admin
Mangels verfügbarer Online-Tutorials für dieses Shop-System, hab ich mich bemüßigt gefühlt der Welt einmal kundzutun, wie man denn den Magento-Shop updaten kann. Hat ja für mich Newbie immerhin auch ne ganze Weile gedauert, bis ichs rausgefunden hab. Vielleicht hilft die Info ja irgendjemanden.
Zutaten:
- laufendens Magento-Shop-System
- Admin-Zugang
Zubereitungszeit:
- ca. 45 min (mit Konfiguration) sonst max. 5 min
Schwierigkeitsgrad (Skala 0-10):
- 2 wenn alles perfekt vorkonfiguriert
- 4 wenn man alles selber machen muss
Geschmack:
- immer auf der Höhe der Zeit
Zubereitung:
1. Zunächst ist es notwendig sich im Backand über das Admin Panel einzuloggen. Zum Einloggen werfe man den Admin-Zugang in die entsprechenden Öffnungen des Admin-Panels.

2. Man öffne den Magento Connect Manager (System –> Magento Connect –> Magento Connect Manager)

Da es ein gewisses Sicherheitsrisiko mit sich bringt, dass auf alle Dateien und Verzeichnisse Schreibrechte an Group or World vergeben sind, wird vermutlich folgende Anzeige auf dem Bildschirm erscheinen:

Wenn dieser Bildschirm erscheint, dann stimmen die Schreibrechte nicht, um ein Update ausführen zu können.
In diesem Falle benutze man einen FTP-Client (z.B. FileZilla) um die Rechte aller Ordner inkl. Unterordner und Dateien in den Verzeichnissen mit den Rechten 775 zu versehen (der Spaß kann ne Weile dauern). Nach Updates/Installationen von Erweiterungen kann man die Rechte dann ja wieder einschränken.
Wem das zu gefährlich ist, der kann auch ein Update via ssh vornehmen (siehe hierzu: link).
Hat man die Rechte korrekt zugewiesen, so kann man nun hoffentlich mit Schritt 3 fortfahren.
3. Upgraden

In diesem Fenster betätigt man nun den “Check for Upgrades”-Button. Wenn alles korrekt konfiguriert ist und alle hierfür notwendigen Module vorhanden, sollte eine Liste angezeigt werden, in der alle installierten Module angezeigt werden und jene für die Updates vorhanden sind, sollten orange hervorgehoben sein. Ist dies nicht der Fall, so fehlen wohl noch Module. Aber nicht verzagen, die lassen sich über den extension key: “magento-core/Mage_All_Latest” nachinstallieren. Einfach in den Manager eintragen und installieren drücken. Dann einfach geduld haben und die schöne “Webconsole” von Magento bewundern.
Das wars eigentlich schon. Fertig
Permalink
« Previous Page — « Alte Einträge