Awesome WM with Xfce 4

So you want to combine the power of Awesome WM with the convenience of the a full desktop environment?

I wanted to replace xfwm4 (the window manager of Xfce) with Awesome and could not find anything working on the web. But this little line of bash does the trick:

$ killall xfwm4 && awesome

It works better than I expected and integrates really well into Xfce.

Have a nice day.

Auslandsjahr in England

Vor ungefähr zwei Wochen hat ein weiteres Langzeitexperiment begonnen. Ich arbeite für ein Jahr in England als Freiwilliger in einer Jugendherberge die sehr abgelegen in Dartmoor im Südwesten Englands liegt. Darüber zu schreiben ist mir wahrscheinlich zu aufwändig aber ich versuche in regelmäßigen Abständen Bilder hier zu veröffentlichen. Die Rechte an allen Bildern sind zunächst bei mir. Wer eins verwenden möchte kann mich aber gerne fragen.

Die ersten Paar Bildergalerien sind hier zu finden:

Raumbestimmung per W-Lan

Die zunehmende Popularität von Routern mit W-Lan Funktion hat dazu geführt, dass besonders im Urbanen Umfeld innerhalb eines Gebäudes mehrere W-Lan Netzwerke aufgespürt werden können. Jedes dieser Netzwerke hat eine einzigartige ID (die MAC Adresse) anhand der es identifiziert werden kann. Die Signalstärke dieser Netzwerke schwankt — basierend auf einigen Umweltfaktoren wie z.B. die Entfernung zur Basisstation, die Anzahl und Beschaffenheit der Wände die zwischen dem Computer und der Basisstation liegen (besonders Feuchtigkeit spielt eine Rolle) etc.

Das führt dazu, dass die Anzahl und die Signalstärke der W-Lan Netzwerke in jedem Raum unterschiedliche Charakteristika aufweist anhand derer jeder Raum erkannt werden kann. So kann man ohne zusätzliches Equipment (eine W-Lan Karte vorausgesetzt) eine erstaunlich gute Raumbestimmung realisieren, die sich auf die Funkabdeckung per W-Lan stützt.

Diese Anwendung umzusetzen hatte ich Zeit nach meinem Abitur im Juni.

Die Unterscheidung der Räume erfolgt über ein feed forward Multilayer Perceptron mit der Architektur (AnzahlBekannterNetzwerke)-15-5-2. Das MLP hat für jedes bekannte Funknetzwerk ein Eingabeneuron, welches immer mit der aktuellen Signalstärke gefüttert wird. Sollte ein Netzwerk temporär nicht verfügbar sein (manche Netzwerke mit schwacher Signalstärke sind z.B. nur einzelnen Räumen zu empfangen), wird das entsprechende Eingabeneuron mit der geringstmöglichen Signalstärke versorgt. Wie vielleicht schon aufgefallen ist hat das MLP nur zwei Ausgangsneurone. Das hängt damit zusammen, dass ein MLP immer nur zwischen zwei Räumen unterscheiden kann. An dem Versucht einem MLP mehr als zwei Räume beizubringen bin ich leider gescheitert. Deshalb verwende ich mehrere MLP’s, die im KO-System entscheiden um welchen Raum es sich handelt.

25 Trainingsbeispiele pro kartografiertem Raum haben Sich als ideal erwiesen. Bei der doppelten Menge wurden die MLP’s nicht ordentlich Trainiert. Konkret bin ich mit meinem Laptop durch die zu kartografierenden Räume gegangen und habe sie einzeln „gescannt“. Dabei beeinflusst das „wie“ sehr stark die spätere Erkennungsrate der Räume. Die schlechtesten Ergebnisse habe ich erhalten als ich durch die Räume gelaufen bin um auch in wirklich jedem Winkel die Netzwerke zu erfassen. Anfangs dachte ich zwar, dass so die Räume besser voneinander abgegrenzt werden können aber letztlich wurden wahrscheinlich dadurch die Trainingseingaben für einen Raum so unterschiedlich, dass sie für das MLP schwer zu erlernen waren. Daraufhin habe ich das ganz gegenteilige Extrem ausprobiert (in der Hoffnung, dass einfachere Trainingsdaten besser gelernt werden) indem ich für den Scan für 25 Trainingsbeispiele das Laptop einfach in die Mitte des Raumes gehalten habe. Damit waren schon wesentlich bessere Erkennungsraten möglich; das System war aber noch lange nicht zufriedenstellend. Erst eine Mischung aus beiden Methoden hat gute Erkennungsraten ermöglicht. Dafür habe ich mich in einem Radius von ca. 2m um das Zentrum des jeweiligen Raumes bewegt. Dadurch waren die Trainingsdaten weder vollkommen Einseitig noch allzu komplex. Links abgebildet ist die Erkennungsqualität an Verschiedenen Orten in den kartografierten Räumen (ein Klick macht es größer). Ich habe an jedem Punkt 5 Messungen gemacht und jeweils die Anzahl der erfolgreichen Messungen eingetragen. Das ist zwar nur eine sehr grobe Messsicherheit, aber ich hatte nicht mehr Zeit und auch nicht mehr Lust (irgendwann wird so ein Laptop auch schwer). An den Türen und in der Nähe des Bücherregals sinkt die Genauigkeit leicht, bleibt aber stets über 50%iger Genauigkeit. Insgesamt bin ich mit der Genauigkeit von ca. 89,4% recht zufrieden.

Ein Sonderfall entsteht, wenn man das Laptop auf dem Boden und nicht (so wie auch bei den Scans vorher aufgezeichnet) in Brusthöhe versucht zu lokalisieren. Teilweise bleiben die Messwerte gleich; teilweise (wie z.B. oben links im Raum) sinkt aber die Erkennungsrate stark. Anscheinend spielt die Höhe eine recht große Rolle.

Zu überprüfen bleibt jetzt noch wie sich das System mit noch mehr als nur vier Räumen verhält.

Die Software habe ich in Java geschrieben, für die Neuronalen Netze habe ich die einfach zu bedienende und recht flotte Bibliothek „Snipe“ von David Kriesel benutzt. Um an die W-Lan Daten zu kommen habe ich (da ich ein Macbook benutze) den Befehl „airport -s“ mit dem ProcessBuilder verwendet weil Java diese Funktion leider nicht zur Verfügung stellt. Deshalb ist die Software auch noch nicht platformunabhängig. Da sie auch noch nicht ganz für den Endbenutzer fertig ist stelle ich sie hier nicht zum Download bereit. An Interessierte verschicke ich sie gerne samt Quellcode per Email. Vielleicht entsteht dann ja auch eine Version für Linux & Windows. Bei vielen Interessierten werde ich sie auf jeden fall bequemer zu bedienen machen.

Telefon als Nummernfeld

Während der letzten Weihnachtsferien habe ich durch diesen Kommentar auf hackaday.com inspiriert ein altes Telefon (PTT Typ T65 de Luxe Smaragt von Ericsson von einem Niederländischen Flohmarkt, das Modell entspricht ungefähr einem FeTap 611) mit meinem Arduino verdrahtet und ein kleines Sketch geschrieben um die Impulse zu zählen, die von der Wählscheibe beim Wählen kommen.

Telefon an einem Arduino

Die Schaltung gestaltet sich denkbar einfach; die Wählscheibe verhält sich nicht anders als ein Schalter, der ein und aus geht. SerialServer von Dan O’Sullivan und ein kleines Java Programm, das sich mit dem Server verbindet um den Tastendruck zu simulieren machen das Telefon zu einem (fast) vollständigen Nummernfeld, das unabhängig von der aktuellen Anwendung mit der es genutzt werden soll funktioniert (AAC Keys hätte es auch getan, läuft aber nicht auf Linux soweit ich weiß).

Natürlich wäre es noch besser gewesen eine USB-Tastatur zu simulieren, aber dann währe warscheinlich ein USB-Shield für mein Arduino notwendig gewesen und das wäre mir zu viel Aufwand.

Hier eine kurze Demonstration:

Pixel Clustering

Im Moment studiere ich mit meiner Schulklasse ein Theaterstück ein (,,Wie es euch gefällt“ von William Shakespeare), so dass ich während den Szenen, in denen ich nicht mitspiele viel Wartezeit habe, während der ich nichts zu tun habe. So kam ich zu folgendem Gedankenexperiment, dass ich noch am selben Tag in die Tat umgesetzt habe.

Ich habe mich gefragt, was wohl passiert, wenn man jeden Pixel eines Bildes als Punkt in einem fünfdimensionalen Raum ansieht. Dabei sind die ersten beiden Koordinaten die x- und y Koordinaten des Pixels im Bild selber und die letzten drei Koordinaten ergeben sich aus den RGB-Werten des Pixels. Ein Pixel an der Stelle x=7 und y = 23 mit der Farbe R=55, G=88, B = 180 hat ist also ein Punkt im fünfdimensionalen Raum: P(7|23|55|88|180).

Wenn man dann alle Pixel eines Bildes in Punkte umwandelt erhält man also Punktwolken im fünfdimensionalen Raum, die man mit einem einfachen Clusteringverfahren zusammenfassen kann. Wenn man das tut und die so als ,,zusammenhängend“ erkannten Pixel gleichfarbig einfärbt, so dachte ich mir, müssten doch ganz nette Bilder entstehen.

Nach der Umsetzung bestätigte sich das auch:

Ich habe die Bilder direkt von meiner Webcam genommen, leider ist an ein in Echtzeit berechneter Effekt  nicht umsetzbar, da es sehr lange dauert, bis der Clustering-Algorithmus bei so vielen Bildern sehr lange zum terminieren braucht. Wer an dem Programm interessiert ist, kann gerne mit mir in Kontakt treten. Es ist in Java geschrieben und dadurch einigermaßen plattformunabhängig.

Mehrere Trackpoints

Heute Abend habe ich ein bisschen die Anwendung erweitert, so dass die verschiedenen Punkte wiedererkannt werden können. Jetzt ist es erstmals wirklich möglich mehrere Trackpoints zu erfassen. Als Beispielanwendung habe ich das Malprogramm so erweitert, dass mehrere Personen (bis jetzt nur 2) über die gleiche Kamera malen können.

mehrere_trackpoints