Monday 21.September 2009

Python – DBUS Communication

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 =)

Latex zum Mergen von PDF-Dokumenten mit Erstellung von Bookmarks nutzen

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

Wednesday 03.June 2009

Winamp mit Multimedia-Tasten steuern

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):
winamp mit Multimediatasten steuern

Sunday 17.May 2009

Kochen 2.0 – Magento Updaten

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.
Einloggen in Magento

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

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:
Fehlende Schreibrechte für User

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
Upgrade starten

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 :)

Thursday 16.April 2009

Bluetooth Link-Sammlung

geposted in Alle Kategorien, Bluetooth um 1:25 pm von admin

Bluetooth.com (Technische Erklärungen)
Bluetooth.org

Bluetooth API (JSR-82) (pdf)

« Previous Page« Alte Einträge