Results for category "Mobil"

48 Articles

CCC: 26c3 / Bluvert

Den zweiten Tag des CCCs in Berlin habe ich gemeinsam mit Flo besucht. Leider war das komplette BCC restlos überfüllt und man konnte nur schwerlich in den einzelnen Vortragsräumen einen Sitzplatz ergattern. Ich hatte den Eindruck, dass die gesamte Organisation hinter der Veranstaltung mehr als chaotisch ablief. Besonders nervig: das WLAN war – wenn es denn mal erreichbar war – mehr als inperformant.

Ich nutzte deshalb den Montag Abend und brachte Bluvert auf einen aktuellen Stand. Die Änderungen für Version 1.2 werde ich im Laufe der nächsten Tage auf sourceforge.net hochladen:

  • In der config.ini lässt sich nun $cwd als Variable für das aktuelle Arbeitsverzeichnisses verwenden. Damit entfallen einige kleinere Probleme.
  • Es muss nur noch einmalig execute-server.py gestartet werden. Das Script arbeitet nun als funktionierender Daemon.
  • Das Scanning der Geräte innerhalb der Bluetooth-Nachbarschaft geschieht nun ebenfalls über execute-server.py. Es besteht nicht mehr die Notwendigkeit, das Script set-active-bluetooth-devices.sh als Cron-Job auszuführen.
  • Versenden der noch nicht versendeten Nachrichten geschieht nun ebenfalls über einzelne Threads, was sich erheblich auf die Performance auswirkt.
  • Zeitintervall des Scannens nach neuen Geräten und Versenden der Nachrichten lässt sich in der config.ini frei definieren.
  • Script zum Scannen der aktiven Bluetooth-Geräte lässt sich in der config.ini frei definieren.

Präsenztag w3l / September 2009

Marc und ich fuhren am Donnerstag um viertel nach zwei aus Wolfsburg los und kamen auch recht zügig in Dortmund an. Allerdings dauerte die Suche des Hotels trotz Navis etwas länger. Während Marc das Auto parkte – wir hatten ein Hotel direkt am Hautbahnhof gebucht – und ich eine rauchte, wollten mir erst drei Afrikaner wohl Drogen verticken und eine Minute später schauten die Dortmunder Green Berets mich an, deuteten mit dem Zeigefinger auf mich und wollten mich wohl auch kontrollieren. Durch eindrucksvolle Gestik – ich winkte wie ein Bekloppter zurück – wurden sie jedoch abgeschreckt.
Wir also im Hotel eingecheckt. Das Zimmer war … rustikal. Ein altes UKW-Radio sagte mir, dass hier einige Jahre nichts gemacht worden ist. Da ich keinen Nerv hatte den Abend im Hotel zu verbringen, gingen wir zu erst zu Fuß zur FH in der Sonnenstraße und machten danach einen Abstecher durch die Innenstadt. Marc wollte noch ein Bierchen trinken und so machten wir es uns bei Live-Musik, Bier und Whiskey im Irish Pub “Limmerick” gemütlich. Sehr lustig war, das neben uns die Kopien von Musel und Tino saßen. Ich trank den Abend ein paar Whiskeys, der interessanteste davon war eindeutig der Irish Poteen, der auf der Zunge prickelte und im Abgang brannte wie Feuer.
Gegen 23 Uhr ging es dann zurück in das Hotel, da ich am Freitag Klausur schreiben musste.

Freitag standen wir gegen 9 Uhr auf, frühstückten und verbrachten den Vormittag / Mittag im Hotel. Ich lernte noch für meine Klausuren und machte mich gegen viertel vor zwölf zu Fuß auf zur FH.
Dort angekommen sagte ich einer allerseits gut-gelaunten Bibi und den Kommilitonen Hallo und verbrachte bis zur ersten Klausur die Zeit im Innenhof bei Zigarette und Musik.

Um 13 Uhr startete für mich die erste Klausur “Rechnerstrukturen und Betriebsssyteme”. Die ersten 10 Minuten saß ich etwas verdattert vor den Aufgaben, riss mich dann aber zusammen und startete durch. Themen der Klausur waren: Umformung von Termen zur ADNF, Bau von Schaltnetzen, Beschreibung von Threads, Berechnung der Dateigröße von I-Node basierten Speichersystemen, Fragen zum Pipelining, Vergleich der Havard-Architektur zur Von-Neumann-Architektur und mod. Havard-Architektur, KV-Diagramme, Minimierung von Booleschen Termen und und und. Die 120 Minuten waren knapp bemessen und ich bin mir nicht sicher, was bei der Klausur heraus gekommen ist. Bestanden müsste ich eigentlich haben. Eine Endnote kann ich aber nicht einschätzen.
Trotzdem war die Aufgabenstellung fair und auf die Vorbereitung der im Kurs behandelten Themen zugeschnitten.

Um 16 Uhr ging es in die zweite Klausur “Web-Design und -Ergonomie”, die von der Aufgabenstellung stark an die Onlineklausur erinnerte und mehr oder weniger genau so aufgebaut gewesen ist: Fallstudie einer Website, zu denen insgesamt 9 Fragen beantwortet werden mussten. Nach 90 Minuten hatte ich die Fragen – meiner Meinung nach – ausreichend beantwortet und wusste nicht mehr, was ich sonst noch hätte schreiben sollen. Also gab ich als erster der Runde ab und machte mich mit der FAZ im Nebeneingang der FH breit.

Marc tauchte um 18 Uhr auf, wir begrüßten Martin und dann ging es ein paar Minuten später zum Swabedoo, das ja mehr oder weniger gleich um die Ecke liegt. Für Marc, Martin und mich ging es mit Caipi und Bier los. Ich bestellte mir noch Rosmarin-Kartoffeln, alles andere war einfach zu teuer. Danach noch ein Caipi, dann Tequilla, dann Bier … Neben den üblichen IT-Themen machte Marc noch Wahlkampf für die Piraten und versuchte einen von den Grünen für die Piraten zu überzeugen. Ich telefonierte gegen Mitternacht noch mit Rische wegen der Band. Viel in Erinnerung habe ich davon nicht mehr, da ich bereits da schon leicht neben der Spur lief 😉

Da ich extreme Lust auf Kickern hatte, unterbreitete ich den Vorschlag, doch noch irgendwo anders hinzugehen. Bibi und Michi, sowie Marc, Martin und ein weiterer Kommilitone waren einverstanden. Der Rest der Studenten, darunter der Bayer mussten leider Samstag noch Klausur schreiben und setzten sich vorher ab.
Bibi leitete uns dann zu Fuß zum Spirit. Auf dem Weg dahin machte Marc Klingelstreich und lief mit einem Pflasterstein durch die Weltgeschichte herum, Martin und ich hatten Spaß in der City von Dortmund mit einem überdimensionalen Labyrinth-Spiel – mir ist ein Rätsel, wie wir das geschafft haben. Somit kamen wir um … keine Ahnung wann … im Spirit an. Wir total overdressed in einem Alternativ-Schuppen – war schon komisch. Türsteher und Gäste schauten uns mehr als perplex an. Egal, wir also an die Kickertische, Bier geholt und los ging es.
Gegen 3 Uhr mussten jeder von uns einen Promille-Pegel jenseits von gut und böse gehabt haben. Martin und ich gesellten uns zu Bibi und Michi auf die Tanzfläche – Musik war super (Metallica, 3 Doors Down, Beastie Boys und und und), Martin probierte das “Kennst du eigentlich schon…”-Spielchen aus und es wurde Bier getrunken. Und noch mehr Bier.

Bibi und Michi verabschiedeten sich als erste, gegen halb fünf strichen Martin und ich die Segel und machten uns, nachdem wir uns von Marc verabschiedeten, zu Fuß auf zu meinem Hotel. Wegen des Zustandes liefen wir quer durch Dortmund, erlebten z.B. noch, dass Jugendliche die Hose herunter zogen und auf einem Zebra-Steifen verweilten (Flashmob bei dem keiner zuschauen sollte?). Genau diese Jugendliche trafen wir 10 Minuten später wieder, als andere Jugendliche deren Hosen geklaut hatten. Sehr lustig 😉
Gegen 5 oder halb sechs war ich bei meinem Hotel, Martin spaltete sich fünf Minuten vorher ab und lief in irgendeine total verquere Richtung.

3 1/2  Stunden später klingelte mein Wecker. Mit Abstand der fürchterlichste Morgen seit einigen Jahren. Marc lag irgendwie wieder in seinem Bett, ich quälte mich unter die Dusche.
Unser Frühstück fiel sporadisch aus, Check-In lief gut ab. Wir also zur FH hin und darauf wartend, dass die Vorlesungen begannen. Der Tag war für Marc, Martin und mich eine Qual. Zuerst Begrüßung durch Professor Balzert, dann warten, da das Internet nicht funktionierte. Nach dem Mittagessen folgte die Vorlesung über RIAs, bei der Martin und ich einen Lach-Anfall hatten (“Ich habe einen ausgewachsenen Kater”, “Sie redet immer von dem Internet, was ist das eigentlich?”). Die Vorlesung über Software-Tests war ganz interessant, danach folgte im Hörsaal die Vorlesung über XML-Dokumentation. War meiner Meinung nach nicht sonderlich spannend. Auch meine Mitstudenten in der letzten Reihe (eine Reihe hinter uns dreien) waren wohl nicht sonderlich davon begeistert.
Professor Balzert gab die letzte Vorlesung zum Thema Zustandsautomaten, bei denen Martin und ich wieder einen Lachanfall hatten und die letzte Reihe ansteckten (“Ob er mir erklären kann, was der oder das Internet ist?”).

Um 17 Uhr war dann Schicht im Schacht. Der Abschied fiel relativ kurz aus, da wir los wollten, bevor die Fußball-Fans die Stadt verunsicherten.

Fazit: Der letzte Präsenztag war schon lustig, dieser hat es aber noch getoppt. Hat wieder sau viel Spaß gemacht, mit den Kommilitonen und w3l-Mitarbeitern zu feiern und Party zu machen. Dortmund bei Tag finde ich unattraktiv, da ist mir Wolfsburg lieber – das Nachtleben ist aber ausgezeichnet 😉

Ik freu mir schon auf den nächsten Präsenztag, wa?

Ersetzen der Tastatur vom Acer Travelmate 2420

Letzte Woche hatte ich im Internet eine neue Tastatur für mein Acer Travelmate 2428A (2420 Baureihe) bestellt, weil meine rechte Shift-Taste abfiel und die restlichen Tasten mehr als abgegriffen waren.

Heute kam die Tastatur an und wollte ersetzt werden. Da es im Internet dazu kein ausreichend erklärendes Video gibt, hier meine Hinweise:

  • Das Notebook braucht nicht komplett aufgeschraubt werden.
  • Zwischen Tastatur und LCD befindet sich ein eigenes Plastikstück – auf diesem ist auch rechts der Power-Button sowie Shortcuts so Browser und Email zu finden.
  • Dieses muss rechts und links gleichzeitig nach oben gezogen werden. Ganz so einfach geht das nicht, es muss mit etwas Kraft an die Sache gegangen werden.
  • Der Akku sollte vorher herausgenommen werden, außerdem muss das LCD ganz bis zum Anschlag aufgeklappt werden. Schaut man sich nun das Akku-Fach an, sieht man, dass dort 6 Klemmen sind, die in Richtung Tastatur gedrückt werden müssen.
  • Das obere Teilstück des Notebooks sollte sich nun lösen. Die Tastatur ist mit einer Schraube festgemacht, diese muss gelöst werden.
  • Nun muss die Tastatur langsam angehoben und die Steck-Verbindung zum Mainboard gelöst werden. Beide Pfosten müssen gleichzeitig nach vorne gezogen werden, damit sich die Steck-Verbindung löst.
  • Neues Tastatur-Kabel einsetzen, Tastatur festschrauben und mit gleichmäßigen Druck das obere Plastikteil wieder in die Fassung drücken.a

HTC Touch Diamond mit Ubuntu nutzen

Mit Hilfe des USB-Kabels lässt sich der interne Speicher des Touch’ nutzen; Internetzugang sollte über Bluetooth mit Hilfe von PAN funktionieren. Ich bin aber noch nicht dazu gekommen, das zu testen.
Die Synchronisation zwischen PDA und Notebook dürfte mit SyncCE funktionieren. Auch dies habe ich noch nicht getestet.

PAN wird übrigens in einer der nächsten Versionen des NetworkManagers integriert werden. Es existiert zwar bereits ein Patch, der libbluez ansteuert. Der Patch ist allerdings gegen die Revision 2574 von NM programmiert worden.
Momentan ist aktuell die Revision 4xxx. Ich hab’ vorgestern versucht, den Patch auf den aktuellen NM-Trunk upzudaten – leider ohne Erfolg und zugegebenermaßen auch mit wenig Lust. War eine stupide Arbeit, beide Forks mit dem Patch abzugleichen.

Die Jungs von Launchpad diskutieren die Integration von PAN in NM hier. Im NetworkManager-Tracker ist der PAN-Request hier zu finden, inkl. des veralteten Patches.

Edith: Ich bin eeeUser-Forum über einen Thread gestolpert, in dem ein kleines Python-PAN-Script vorgestellt wird.

Hier der Code:

#!/usr/bin/env python
# (c) 2008 Kyle Reed
# PAN tethering with WM device w/o using deprecated pand
# I don't claim to know Python, use at your own risk 😉

import pygtk
pygtk.require('2.0')
import gtk
import dbus
import os

### For passing errors to the GUI ###
class BTException:
def __init__(self, msg):
self.error_msg = msg

### BT Helper handles all of the DBUS stuff ###
# usage flow:
# __init__
# getDevicesList
# selectNetworkDevice
# getDeviceProperties
# Connnect|Disconnect
class BTHelper:
# create the helper object and initialize dbus
def __init__(self):
# get the system bus object
self.bus = dbus.SystemBus()

# get the adapter interface to query paired devices
self.adapter = dbus.Interface(self.bus.get_object(
'org.bluez', '/org/bluez/hci0'), 'org.bluez.Adapter')

# get the devices list #
def getDevicesList(self):
try:
self.devices = self.adapter.ListDevices()
return self.devices
except dbus.DBusException:
raise BTException('Could not get adapter interface, is your BT adapter on?')

# get the name of a device from a device string
# doesn't require selectNetworkDevice to be called
def getDeviceName(self, devicePath):
try:
tempDev = dbus.Interface(self.bus.get_object(
'org.bluez', devicePath), 'org.bluez.Device')
tempProps = tempDev.GetProperties()
return tempProps['Alias']
except dbus.DBusException:
return '[Error Fetching Name]'

# select device to query by index #
def selectNetworkDevice(self, index):
try:
self.current_device = dbus.Interface(self.bus.get_object(
'org.bluez', self.devices[index]), 'org.bluez.Network')
except dbus.DBusException:
raise BTException('Could not get network interface for device, is your device active?')

# returns information about the device #
def getDeviceProperties(self):
try:
self.deviceProps = self.current_device.GetProperties()
return self.deviceProps
except dbus.DBusException:
raise BTException('Could not get properties for device, did you select a device?')

# connects and initializes the connection #
def connectDevice(self):
if self.deviceProps['Connected'] == 0:
print 'Connecting...'

try:
# connect and get interface
iface = self.current_device.Connect('NAP')
print 'Using network interface ' + iface

# bring up the interface and start DHCP
os.system('ifconfig up ' + iface)
os.system('dhclient ' + iface)
print 'Connected'
except dbus.DBusException, e:
raise BTException('Connect Failed: %s' % (e))
else:
print 'Already Connected'

def disconnectDevice(self):
if self.deviceProps['Connected']:
print 'Disconnecting...'

try:
# bring down interface
os.system('ifdown ' + self.deviceProps['Device'])

# disconnect
self.current_device.Disconnect()
print 'Disconnected'
except dbus.DBusException, e:
raise BTException('Disconnect Failed: %s' % (e))
else:
print 'Not Connected'
### End BTHelper ###

### Defines the class that draws the GUI ###
class BTHelperGUI:
titleText = 'BlueTooth PAN Helper'

# show an exception message
def showErrorMsg(self, msg):
errorDlg = gtk.MessageDialog(self.window, gtk.DIALOG_MODAL,
gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, msg)
errorDlg.set_title(self.titleText)
errorDlg.run()
errorDlg.destroy()

### Signal Handler Methods
# exit button click
def handleExitClicked(self, widget, data=None):
print('Exiting')
self.exit()

# connect button clicked
def handleConnectClicked(self, widget, data=None):
try:
self.BTHelp.connectDevice()
self.getDeviceInformation()
except BTException, e:
self.showErrorMsg(e.error_msg)

# disconnect button clicked
def handleDisconnectClicked(self, widget, data=None):
try:
self.BTHelp.disconnectDevice()
self.getDeviceInformation()
except BTException, e:
self.showErrorMsg(e.error_msg)

# device selection changed
def handleDeviceSelectionChanged(self, widget, data=None):
selection = self.devicesListView.get_selection()
selectedIter = selection.get_selected()[1]

# nothing selected, return
if(selectedIter is None):
self.setButtonState(-1)
return

selectedIndex = self.devicesListStore.get_value(selectedIter, 2)
print('Selected %s' % (selectedIndex))
try:
self.BTHelp.selectNetworkDevice(selectedIndex)
self.getDeviceInformation()
except BTException, e:
self.showErrorMsg(e.error_msg)

# window manager is closing us (event)
def delete_event(self, widget, event, data=None):
self.exit()
return False
### End handler methods

### support methods ###
# process device names and add to devices list store
def processDevicesList(self):
# list devicees from the BT Adapter
try:
allDevices = self.BTHelp.getDevicesList()
count = 0;
for device in allDevices:
addrOnly = device.split('dev_')[-1]
addrOnly = addrOnly.replace('_', ':')
self.devicesListStore.append([addrOnly,
self.BTHelp.getDeviceName(device), count])
count += 1
except BTException, e:
self.showErrorMsg(e.error_msg)
# hard exit because we haven't stated the main loop
quit()

# get selected device information and set up controls
def getDeviceInformation(self):
try:
properties = self.BTHelp.getDeviceProperties()
self.statsListStore.clear()
self.statsListStore.append(['Connected',str(properties['Connected'])])
self.statsListStore.append(['Device',str(properties['Device'])])

self.setButtonState(int(properties['Connected']))
except BTException, e:
self.showErrorMsg(e.error_msg)

# enable/disable buttons are required
def setButtonState(self, state):
if(state == -1): # none selected
self.connectBtn.set_sensitive(False)
self.disconnectBtn.set_sensitive(False)
elif(state == 0): # disconnected
self.connectBtn.set_sensitive(True)
self.disconnectBtn.set_sensitive(False)
elif(state == 1): # connected
self.connectBtn.set_sensitive(False)
self.disconnectBtn.set_sensitive(True)

# common exit point for program
def exit(self):
gtk.main_quit()
### end support methods ###

def __init__(self):
self.BTHelp = BTHelper()

# create the main window
self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.window.set_title(self.titleText)
self.window.set_default_size(400, 300)
self.window.set_border_width(10)

# set handlers for window events
self.window.connect('delete_event', self.delete_event)

# Devices list view
# set up data backend for devices list
# addr, name, index (hidden)
self.devicesListStore = gtk.ListStore(str, str, int)
self.processDevicesList()

# create devices list columns
devicesListCol = gtk.TreeViewColumn('Device Address')
devicesListCol2 = gtk.TreeViewColumn('Device Name')

# make text renderers and add to columns
addrCell = gtk.CellRendererText()
nameCell = gtk.CellRendererText()
devicesListCol.pack_start(addrCell, True)
devicesListCol2.pack_start(nameCell, True)

# set cell mappings to store data
devicesListCol.add_attribute(addrCell, 'text', 0)
devicesListCol2.add_attribute(nameCell, 'text', 1)

# create devices list and add columns
self.devicesListView = gtk.TreeView(self.devicesListStore)
self.devicesListView.append_column(devicesListCol)
self.devicesListView.append_column(devicesListCol2)

# set signal handlers for devices list
self.devicesListView.connect('cursor-changed', self.handleDeviceSelectionChanged)
# end devices list view

# stats list view
# create stats list data store
self.statsListStore = gtk.ListStore(str, str)
self.statsListStore.append(['Connected', ''])
self.statsListStore.append(['Device', ''])

# create stats columns
statsCol = gtk.TreeViewColumn('Property')
statsCol2 = gtk.TreeViewColumn('Value')

# create text renderers and add to columns
propCell = gtk.CellRendererText()
valueCell = gtk.CellRendererText()
statsCol.pack_start(propCell, True)
statsCol2.pack_start(valueCell, True)

# set data mappings with data store
statsCol.add_attribute(propCell, 'text', 0)
statsCol2.add_attribute(valueCell, 'text', 1)

# create stats list view
self.statsListView = gtk.TreeView(self.statsListStore)
self.statsListView.append_column(statsCol)
self.statsListView.append_column(statsCol2)
# end stats list view

# control buttons
self.connectBtn = gtk.Button('Connect')
self.disconnectBtn = gtk.Button('Disconnect')
self.exitBtn = gtk.Button('Exit')

# set handlers
self.exitBtn.connect('clicked', self.handleExitClicked)
self.connectBtn.connect('clicked', self.handleConnectClicked)
self.disconnectBtn.connect('clicked', self.handleDisconnectClicked)

# pack in a VBox
buttonBox = gtk.VBox(True, 2)
buttonBox.set_border_width(10)
buttonBox.pack_start(self.connectBtn)
buttonBox.pack_start(self.disconnectBtn)
buttonBox.pack_start(self.exitBtn)

# frames for decoration
statsFrame = gtk.Frame(' Status ')
statsFrame.add(self.statsListView)

buttonFrame = gtk.Frame(' Actions ')
buttonFrame.add(buttonBox)
# end control buttons

# add controls to layout
# +-----------------+
# | DEVLIST AREA    |
# +-----+-----------+
# |STATS|BUTTONS    |
# +-----+-----------+

tableLayout = gtk.Table(2, 2, False)
tableLayout.set_row_spacings(10)
tableLayout.set_col_spacings(10)
tableLayout.attach(self.devicesListView, 0, 2, 0, 1)
tableLayout.attach(statsFrame, 0, 1, 1, 2)
tableLayout.attach(buttonFrame, 1, 2, 1, 2)

# add layout to window
self.window.add(tableLayout)
self.window.show_all()

def main(self):
gtk.main()
### End BTHelperGUI ###

### Program Execution here ###
print('BlueTooth PAN Helper GUI')
btgui = BTHelperGUI()
btgui.main()

Good job!

Ich hab es auf meinem Touch ausprobiert und es funktioniert einwandfrei. Wichtig: Das Script als root starten. Auf dem Touch muss unter Programme -> Internet Freigabe bei PC-Verbindung “Bluetooth-PAN” ausgewählt und danach das Handy mit dem Notebook gepairt werden.
Ich bin mal wieder von Linux begeistert. Und von meinem neuen Handy auch 😉

Ab auf den Damm

Der erste Tag der xtopia 2008 ist geschafft. Wir werden jetzt auf den kurfuerstendamm und ein bier schleckern 😉