Results for category "Handy"

16 Articles

Rautiges 2009-05-26

  • Samstag ging es spannend in Wolfsburg zu. Den Mittag über verfolgte ich auf n-tv die Wahl zum Bundespräsidenten. Interessanterweise erfuhr ich heute, dass Lammerts Verhalten nach bzw. während der Wahl für ein Nachspiel sorgt.
    Nach der Wahl lernte ich Mathe weiter und machte mich gegen 15 Uhr auf in die Wolfsburger Innenstadt. Was da los war, war echt unglaublich. Und gegen 17.15 Uhr wurde der Traum eines jeden Wolfsburger Fußball-Fan wahr: Vfl wurde deutscher Meister. Die Stimmung war natürlich fantastisch, ich machte mich aber wieder auf den Weg zurück zur Wohnung.
    Zu später Stunde holte ich dann einen volltrunkenen Timo von der Bushaltestelle ab und fuhr ihn noch zu Lippe.
  • Das Modul “Mathematisch-logische Grundlagen” geht in die heiße Phase. Die meisten Aufgaben – bis auf 3 – habe ich eingereicht und sind soweit in Ordnung. Seit Donnerstag sitze ich an der Zusammenfassung aller Kapitel. Großer Vorteil: Beim zweiten Mal lesen verstehe ich die Texte wesentlich besser 🙂
    Nächstes Wochenende folgt dann Abschlusstest und Online-Klausur, damit ich am 19. Juni meine Klausur in Witten schreiben kann.
    Das nächste Modul wird wohl Web-Design werden und zusätzlich nebenbei noch Mathe 1. Mit M1 werde ich mir aber keinen Stress machen, so wie ich das bei MLG gemacht habe.
  • Florian ist momentan dabei, eine eigene kleine Ubuntu-basierende Distribution zusammenzustellen. Diese lädt nach dem Start EFA, Elektronisches Fahrtenbuch – ein Tool für Rudervereine, und sichert automatisch die EFA-Datenbank auf hot-plugged USB-Sticks. Dabei kam dann heraus, dass VirtualBox und VMWare massive Probleme beim Durchreichen von USB-Geräten haben. Ubuntu 8.10 bzw. der Kernel der 8.10er verliert nach einigen Sekunden die Verbindung zu den USB-Geräten.
    Sobald das Projekt abgeschlossen ist, wird Florian hoffentlich die Anleitung dazu auf seinem Blog veröffentlichen.
  • Nur damit ich es nicht vergesse: Auf SlickTools gibt es zwei .NET CF 2.0 Anwendungen. Eine ist ein mobiles Metronom, die andere eine Stoppuhr. Beides werde ich bei den nächsten Bandproben mal einsetzen.
  • Auch für nächsten Monat sind einige kleine Anschaffungen geplant:
    • Steckdosenleiste mit Überspannungsschutz für Server, Router und Kabelmodem. Ich trau’ dem Blitzableiter im Haus nicht.
    • Roland Micro Cube für das Üben in der Wohnung. Hab kein Nerv, immer mein MG 30 DFX mit nach oben zu schleppen. Und ohne Verstärker E-Gitarre zocken ist langweilig.
    • Eventuell ein Mikrofonständer. Da bin ich aber noch am Überlegen, ob ich so etwas wirklich brauche. Im Proberaum haben wir die Ständer.
    • Neues Server-Board. Da drücke ich mich noch vor. Bin am Überlegen, ob ich mir nicht doch ein Ion hole oder eines von den neuen Intel Embedded-Boards.
  • Bandmäßig schaut es so aus, dass Dennis nun als Bassist(in) mit an Bord ist. Am Vatertag haben Jan und ich ein kleines Akustik-Gitarren-Konzert gegeben, was meiner Meinung nach ganz okay war.

Eureka: Global Dynamics

Ich dachte bisher, dass das fiktive Unternehmen “Global Dynamics” in der Fernsehserie “Eureka” wirklich rein fiktiv sei.

Aber mitnichten: Bei Spiegel.de bin über einen Artikel gestolpert, der über das neue Handy/BlackBerry von Barack Obama berichtet. Im Artikel ist das Teil als BarackBerry bezeichnet worden – ein sehr unlustiges Wortspielchen.
Wie dem auch sei, das erwähnte Handy wird von einem US-Rüstungskonzern mit dem Namen General Dynamics hergestellt.
Ob einer der Regisseure da mal gearbeitet hat?

Kontakte vom P910i zum HTC Touch Diamond übertragen

Szenario: Alle Kontakte aus dem P910i auf das HTC Touch Diamond übertragen ohne dass die Kontakte auf der SIM-Karte liegen. Es steht kein Windows-System zur Verfügung, sondern nur Linux.

1. Auf dem P910i unter Kontakte > Markieren > Alle auswählen und die Kontakte an das Linux-System per Bluetooth senden.
2. Auf dem Linux-Rechner existiert nun eine Alle.vcf. Diese kann nicht direkt an HTC Touch Diamond übertragen werden. Windows Mobile 6.1 kommt -zumindest bei mir- nicht damit klar, dass in der VCF mehr als Eintrag vorhanden ist. Das Senden per Bluetooth schlägt mit der Fehlermeldung “Senden fehlgeschlagen – die Dateien wurden nicht vollständig übertragen” fehl.
3. Folgendes PHP-Script im Verzeichnis ausführen, in dem die Alle.vcf liegt:

<?php
$iEntry = 1;
$content = file_get_contents("Alle.vcf");
$buffer = "";

$lines = explode("rn", $content);
$line = "";

for ($i = 0, $m  = sizeof($lines); $i < $m; $i++) {
  $line = $lines[$i];
  $buffer .= $line . "n";

  if ($line == "END:VCARD")	{
    echo "Writing to " . $iEntry . " :n";
    file_put_contents("vc.".$iEntry.".vcf", $buffer);
    $buffer = "";
    $iEntry++;
  }
}
?>

4. Es existiert nun für jeden Kontakt eine einzelne VCard. Diese müssen mit

# Vorher eventuell ein apt-get tofrodos machen
unix2dos -u *.vcf

in das DOS-Format konvertiert werden (ich weiß, dass ich das auch gleich in das PHP-Script hätte packen können)

5. Über das Gnome-Bluetooth-Applet alle vc.*.vcf-Dateien auswählen und per Bluetooth an das HTC Touch Diamond übertragen – vorher natürlich die SIM-Karte wechseln.

Google Mobile Map API für PHP

Von http://www.witracks.com.br/gmaps.txt

<?php
$data =
"x00x0e". // Function Code?
"x00x00x00x00x00x00x00x00". //Session ID?
"x00x00". // Contry Code
"x00x00". // Client descriptor
"x00x00". // Version
"x1b". // Op Code?
"x00x00x00x00". // MNC
"x00x00x00x00". // MCC
"x00x00x00x03".
"x00x00".
"x00x00x00x00". //CID
"x00x00x00x00". //LAC
"x00x00x00x00". //MNC
"x00x00x00x00". //MCC
"xffxffxffxff". // ??
"x00x00x00x00"  // Rx Level?
;
if ($_REQUEST["myl"] != "") {
  $temp = split(":", $_REQUEST["myl"]);
  $mcc = substr("00000000".dechex($temp[0]),-8);
  $mnc = substr("00000000".dechex($temp[1]),-8);
  $lac = substr("00000000".dechex($temp[2]),-8);
  $cid = substr("00000000".dechex($temp[3]),-8);
} else {
  $mcc = substr("00000000".$_REQUEST["mcc"],-8);
  $mnc = substr("00000000".$_REQUEST["mnc"],-8);
  $lac = substr("00000000".$_REQUEST["lac"],-8);
  $cid = substr("00000000".$_REQUEST["cid"],-8);
}
$init_pos = strlen($data);
$data[$init_pos - 38]= pack("H*",substr($mnc,0,2));
$data[$init_pos - 37]= pack("H*",substr($mnc,2,2));
$data[$init_pos - 36]= pack("H*",substr($mnc,4,2));
$data[$init_pos - 35]= pack("H*",substr($mnc,6,2));
$data[$init_pos - 34]= pack("H*",substr($mcc,0,2));
$data[$init_pos - 33]= pack("H*",substr($mcc,2,2));
$data[$init_pos - 32]= pack("H*",substr($mcc,4,2));
$data[$init_pos - 31]= pack("H*",substr($mcc,6,2));
$data[$init_pos - 24]= pack("H*",substr($cid,0,2));
$data[$init_pos - 23]= pack("H*",substr($cid,2,2));
$data[$init_pos - 22]= pack("H*",substr($cid,4,2));
$data[$init_pos - 21]= pack("H*",substr($cid,6,2));
$data[$init_pos - 20]= pack("H*",substr($lac,0,2));
$data[$init_pos - 19]= pack("H*",substr($lac,2,2));
$data[$init_pos - 18]= pack("H*",substr($lac,4,2));
$data[$init_pos - 17]= pack("H*",substr($lac,6,2));
$data[$init_pos - 16]= pack("H*",substr($mnc,0,2));
$data[$init_pos - 15]= pack("H*",substr($mnc,2,2));
$data[$init_pos - 14]= pack("H*",substr($mnc,4,2));
$data[$init_pos - 13]= pack("H*",substr($mnc,6,2));
$data[$init_pos - 12]= pack("H*",substr($mcc,0,2));
$data[$init_pos - 11]= pack("H*",substr($mcc,2,2));
$data[$init_pos - 10]= pack("H*",substr($mcc,4,2));
$data[$init_pos - 9]= pack("H*",substr($mcc,6,2));

if ((hexdec($cid) > 0xffff) && ($mcc != "00000000") && ($mnc != "00000000")) {
  $data[$init_pos - 27] = chr(5);
} else {
  $data[$init_pos - 24]= chr(0);
  $data[$init_pos - 23]= chr(0);
}

$context = array (
        'http' => array (
            'method' => 'POST',
            'header'=> "Content-type: application/binaryrn"
                . "Content-Length: " . strlen($data) . "rn",
            'content' => $data
            )
        );

$xcontext = stream_context_create($context);
$str=file_get_contents("http://www.google.com/glm/mmap",FALSE,$xcontext);

if (strlen($str) > 10) {
  $lat_tmp = unpack("l",$str[10].$str[9].$str[8].$str[7]);
  $lat = $lat_tmp[1]/1000000;
  $lon_tmp = unpack("l",$str[14].$str[13].$str[12].$str[11]);
  $lon = $lon_tmp[1]/1000000;
  echo "Lat=$lat <br> Lon=$lon";
  } else {
  echo "Not found!";
  }

?>

Analyse der Google Mobile Maps API

Den heutigen Abend war ich damit beschäftigt, mich um das Thema GPS-Lokalisierung zu kümmern. Dabei kamen dann einige interessante Dinge zu Tage. Zum einen wusste ich gar nicht, dass o2 einen Handy-Lokalisierungsdienst für lau anbietet. Nachdem man sich in das o2-Portal eingeloggt hat, kann man dort sein Handy lokalisieren. Nach einigen Sekunden erscheint in einer -billig gemachten- Karte der ungefähre Bestimmungsort des Handys. Mein Handy wurde ca. 1.6 Kilometer zu weit nördlich angezeigt, aber das bleibt nun mal nicht aus.
Meine andere Erkenntnis war, das man mit Google Maps Mobile http://www.google.com/gmm/tour.html?hl=de sich ebenfalls den Standort des Handys anzeigen lassen kann. Die J2ME-Applikation sucht sich die Cell ID des Betreibers heraus, in dem das Handy eingeloggt ist. Google hat wohl mit den großen Handynetz-Betreibern Verträge geschlossen, so dass sie auf die Zell-Datenbanken zugreifen können.

Leider konnte ich die J2ME-Anwendung auf meinem P910i nicht installieren. Ich schaute deshalb nach, ob man eventuell die Demo benutzen kann, um die API mit anderen Tools zu benutzen.
Nachdem ich die passende JAR-Datei heruntergeladen habe, musste ich leider feststellen, dass über die Sourcen ein Obfuscator gejagt wurde – ok ich hätte das wohl auch so gemacht 😉

Ich baute mir ein kurzes Shellscript:

#!/bin/bash
find -name "*class" | sed 's/.class//g' | sed 's/.///g' >> files.txt

for clazz in `cat files.txt`;
do
    echo "FILE $clazz" >> code.txt
    javap -c $clazz >> code.txt
done

Und hatte somit von den allen Klassen den dekompilierten Byte-Code. Viel anfangen konnte ich damit leider nicht, ich stellte nämlich fest, dass die komplette Verbindung zwischen J2ME-Client und Google Maps Mobile im Binärformat abgewickelt wird.
Frontcontroller der Server-API ist http://www.google.com/glm/mmap – und das war es auch schon. Also leider nix mit REST o.ä.
Der Client stellt eine Anfrage über POST als Client “MobileRunner” im Binärformat, der Server sendet die Antwort ebenfalls als Binary zurück.

Tja, leider blöd gelaufen. Ich hätte gerne ein paar Anwendungen geschrieben, die auf die Google Mobile Maps-API setzen würden.

WPA & PEAP unter Windows Mobile 6.1 ohne Serverzertifikate

Um unter Windows Mobile 6.1 eine Verbindung mit einem WPA-gesichtern WLAN Verbindung aufzunehmen, das PEAP ohne Server-/Clientzertifikate benutzt, muss folgendes gemacht werden:

Auf dem Handy/PDA einen Registry-Editor installieren, z.B. von http://www.phm.lu/products/.
Danach dann unter HKEY_LOCAL_MACHINECommEAPExtension25 den DWORD-Eintrag ValidateServerCert auf “0” setzen. Sollte der Eintrag nicht existieren, muss er hinzugefügt werden.

Multimedialer Umbau im ckl-net

Nachdem ich nun meinen neuen Rechner vor zwei Wochen geliefert und eingerichtet habe, sitze ich nun auch wieder öfter vor dem PC. Die letzten Monate verbrachte ich hauptsächlich am Notebook und erledigte dort meine Arbeiten.

Wie aus den Anfangstagen des Blogs vielleicht noch bekannt ist, habe ich einen alten Rechner als Medienserver eingerichtet und diesen über LWL an meine Steroanlage angebunden. Allerdings liegen alle aktuellen Lieder auf meinem Embedded-Server, der sowieso die ganze Zeit über läuft. Der kleine Server steht direkt neben der Stereo-Anlage und somit liegt nichts ferner, als beide miteinander über 3,5-Klinke zu verbinden.
An sich kein Problem. Ich wollte nun aber auch wieder meine MP3s an meinem neuen PC hören. Die Möglichkeit, per NFS auf die Dateien zuzugreifen, besteht – finde ich aber persönlich nicht schön. Ich will nämlich gerne bei Parties auch MP3s hören und dafür müssten dann zwei verschiedene Systeme laufen (Medienserver und Embedded-Board).

Nach einigem Überlegen bin ich zu dem Schluss gekommen, dass meine MP3s zentral auf dem Embedded-Board liegen. Das Board wird über Klinke an die Stereoanlage angeschlossen. Musik wird live sowohl an die Soundkarte ausgegeben, als auch per Icecast als OGG-File gestreamt. Die Musik möchte ich sowohl mit meinem Handy, mit meinem Notebook als auch mit meinem N770 ändern können.

Nichts lag nun ferner, als auf altbekanntes zurückzugreifen: MPD hatte mich vor einem Jahr schon begeistert. Die Installation erfolgte mit einem einfachen

apt-get install mpd

.
/etc/mpd.conf muss folgendermaßen angepasst werden:

music_directory         "/share/public/mp3"
playlist_directory      "/share/public/playlists"
db_file                 "/var/lib/mpd/tag_cache"
log_file                "/var/log/mpd/mpd.log"
error_file              "/var/log/mpd/errors.log"
pid_file                "/var/run/mpd/pid"

audio_output {
        type                    "shout"
        name                    "$FILE"
        host                    "$IP"
        port                    "8000"
        mount                   "/mpd.ogg"
        password                "$ICECAST_PASSWORT"
        quality                 "5.0"
        format                  "44100:16:1"
}

Dadurch werden alle Medien-Dateien im Verzeichnis /share/public/mp3 automatisch an den Icecast-Server gesendet. Der Stream ist dann unter $IP:800/mpd.ogg für die Clients verfügbar. Es kann übrigens entweder bitrate ODER quality gesetzt werden. Beides funktioniert nicht.

Als nächstes folgte ein

apt-get install icecast2

.
Hier muss auch wieder die Konfiguration /etc/icecast2/icecast.xml angepasst werden. Die wichtigen Einträge sind:

    <authentication>
        <!-- Sources log in with username 'source' -->
        <source-password>$ICECAST_PASSWORT</source-password>
    </authentication>

    <listen-socket>
        <port>8000</port>
        <bind-address>$IP</bind-address>
    </listen-socket>

    <mount>
        <mount-name>/mpd.ogg</mount-name>
    </mount>

Mit den Einstellungen kann MPD die Daten an Icecast senden.
Icecast veröffentlich den Stream dann unter /mpd.ogg
$ICECAST_PASSWORT muss logischerweise in beiden Konfigurationen identisch sein.
Außerdem muss -wenn Icecast als Daemon gestartet werden soll- in der Datei /etc/default/icecast2 ENABLED auf “true” gesetzt werden.

Nun muss zuerst Icecast, danach dann MPD gestartet werden

/etc/init.d/icecast start
/etc/init.d/mpd start-create-db

MPD muss beim ersten Start die MP3-Datenbank initalisieren, was je nach Umfang der MP3s ein paar Minuten dauert.

Mit

apt-get install ncmpc

lässt sich ein einfach NCurses-basierender Client installieren. Über

ncmpc -h $IP

kann man sich nun mit dem MPD verbinden und Dateien abspielen.

An meinem Client kann ich nun z.B. in Winamp die URL $IP:8000/mpd.ogg öffnen und höre die gerade abgespielte Datei.
Neben ncmpc existieren natürlich noch viele weitere Clients, z.B. Pitchfork, der auf Apache/PHP basiert.

Soweit bietet das Tutorial nicht viel Neues – viel steht auch im Wiki von ubuntuusers.de. Ich will nun aber einen Schritt weiter gehen. Mit meinem Handy möchte ich nun die MP3s abspielen. Pitchfork bietet zwar diese Möglichkeit, allerdings ist mein P910i nur begrenzt XHTML fähig, so dass ich da lieber etwas netteres hätte.
Auch hier kann ich auf alt-bekanntes zurückgreifen: Bemused ist eine Client-/Server-Software. Der Client läuft auf Symbian-Handys – also auch auf meinem P910i. Installieren musste ich diesen nicht weiter, der war noch auf meinem Handy.
Der Server allerdings unterstützt standardmäßig nur das Abspielen, wenn XMMS bzw. noXMMS als Music Dispatcher läuft. Glücklicherweise gibt es unter http://bemused-lnx-mpdhack.origo.ethz.ch/download/513 einen Patch, der Bemused MPD fähig macht.

Die Installation erfordert ein paar mehr Schritte:

cd /tmp
wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.11.tar.gz
tar -xvzf libiconv-1.11.tar.gz
cd libiconv-1.11.tar.gz
./configure
make
make install-lib
# Folgendes war nur bei mir nötig
ln -s /usr/local/lib/libiconv.so.2 /usr/lib/i486-linux-gnu/libiconv.so.2

# noXMMS hat zwar viele Dependencies, aber egal
apt-get install xmms-dev
apt-get install libbluetooth2-dev

wget http://download.origo.ethz.ch/bemused-lnx-mpdhack/513/bemused-mpd-r060.tar.gz
tar -xvzf bemused-mpd-r060.tar-gz
cd bemused-mpd-r060
make
cp bemused.conf /etc/
cp bemusedlinuxserver /usr/bin

Das passende start-stop-Script für Bemused gibts hier im Blog.
Wenn am Board ein Bluetooth-Stick angeschlossen ist, kann nach dem Start von Bemused (./bemusedlinuxserver) die Dateien in der MPD-Library direkt über den Bemused-Client vom Handy aus angetriggert werden.

Nokia N770 & Geode-Server

Vorhin habe ich bei Ebay ein Gebot auf ein Nokia N770 abgegeben. Ich hoffe, dass ich das Ding für unter 100€ bekomme. Mein Plan ist es, dass ich mir ein kleines Geode-Mainboard mit passenden Prozessor kaufe und dann dort meine Server-Software laufen lasse (MPD, LDAP, NFS). Mein ggw. Server steht zwar im Arbeitszimmer, ist aber zu laut und frisst eindeutig zu viel Strom.

Fröhliche Weihnachten!

Jetzt von meiner Seite auch noch ein offizieller Blog-Eintrag: Frohe Weihnachten an alle eifrigen Leser meines Blogs! Die Besucherzahlen und Statistiken haben gezeigt, dass ich doch die ein oder andere interessante Sache niedergeschreibselt haben muss 🙂

Heute Abend habe ich Bemused auf meinem Server eingerichtet.
Da ich die Einrichtung letztes Mal nicht beschrieben habe, hier ein paar Anmerkungen:
* libbluetooth2-dev und xmms-dev müssen installiert sein
* In dem aktuellen Download-Package müssen je nach Compilereinstellung die 6 Klassen-Definitionen “CBemusedServerDlg::” entfernt werden.
* Ein äußerst simples Start-/Stop-Script ist dieses hier:

#! /bin/sh
set -e

# /etc/init.d/bemused Used for (re)starting and stopping the Bemused daemon

test -x /usr/bin/bemusedlinuxserver || exit 0

. /lib/lsb/init-functions

case "$1" in
  start)
	log_begin_msg "Starting Bemused Linux Server..."
	start-stop-daemon --start --quiet --pidfile /var/run/bemused.pid --exec /usr/bin/bemusedlinuxserver -- -d || log_end_msg 1
	log_end_msg 0
	;;
  stop)
	log_begin_msg "Stopping Bemused Linux Server..."
	killall xmms
	killall bemusedlinuxserver
	log_end_msg 0
	;;

  restart)
	log_begin_msg "Restarting Bemused Linux Server..."
	killall xmms
	killall bemusedlinuxserver
	start-stop-daemon --start --quiet --pidfile /var/run/bemused.pid --exec /bemusedlinuxserver -- -d || log_end_msg 1
	log_end_msg 0
	;;

  *)
	log_success_msg "Usage: /etc/init.d/bemused {start|stop|restart}"
	exit 1
esac

exit 0

Das also zu Bemused.
Ich werde mein Server langsam wieder auf seinen Platz stellen und mich umziehen, da in einer knappen halben Stunde meine Leute kommen um mit mir in meiner Wohnung Weihnachten zu feiern.