phoenitydawn

May 27th, 2009

Eyetracking for better usability with multiple screens

Posted by Dunedan in Computer, Hardware, Linux, Programmieren

While at work I recognized an annoying problem with multipe screens: I often forget to change the focus of the windows to the screen I’m currently looking at. The result: In that cases I want to type in a window on screen A and all text go’s into a window on screen B. Very annoying.

But here is a possible solution: Because all screens have intregrated webcams, it would be possible to grab images from these webcams and use an eyetracking software to determinate at which screen I’m currently looking. With the help of the window manager the focused window could change accordingly and I would never type onto to wrong screen anymore.
But as usual, the problem is the missing implementation. I couldn’t find any eyetracking software for linux which is able to use v4l2-devices and I also don’t know if any window manager is capable of changing the focused window in that manner.

If you know a working solution for my problem or already implemented such eyetracking-stuff, just leave me a comment. :D

May 27th, 2008

Out-of-Quake

Posted by Dunedan in Programmieren, Python, Studium & Co

Im Rahmen meines Hiwi-Jobs beschäftige ich mich zur Zeit mit der Quake3-Engine in Form von ioquake3. Und zwar geht es darum Möglichkeiten auszuloten und gegebenenfalls umzusetzen wie man die Engine am besten auf die VR-Anlage unseres Institutes bekommt um damit beispielsweise virtuelle Rundgänge durch Gebäude zu zeigen.
Dabei stieß ich auf auf einige lustige Sachen. Zum Beispiel fand sich an einer Stelle im Quelltext folgender Kommentar:

// all drawing is done to a 640*480 virtual screen size
// and will be automatically scaled to the real resolution

Ich weiß ja nicht ob alle Spiele das so machen, aber ein bisschen merkwürdig find ich das schon. ;-)
Heute beschäftigte ich mich dann ein wenig mit der Kommunikation zwischen Client und Server, da ich dazwischen gegebenenfalls einen Proxy bauen will. Die Kommunikation läuft über UDP. Soweit so gut. Sie läuft aber auch Out-of-Band. Warum habe ich bisher noch nicht rausfinden können, aber in meinen Augen erscheint das leicht sinnlos zu sein. Aber nun gut. Ich wollte mir also in Python einen kleinen UDP-Client schreiben mit dem ich einen Server vorgaukeln kann ich wäre ein Client. Dazu brauchte ich ja aber nun Out-of-Band-Nachrichten. Aber kein Problem: Die Socketbibliothek von Python unterstützt bei allen Sende- und Empfangsfunktionen Flags von recv, unter denen sich auch eins namens MSG_OOB für Out-of-Band-Kommunikation befindet. Für socket.recv funktioniert das Flag, für socket.sendto wo ich es eigentliche brauchte, nicht. Dort kriege ich nur ein schönes

socket.error: (95, ‘Operation not supported’)

Andere Flags funktionieren allerdings.
Falls also einer der Leser dieses Beitrages zufällig weiß, wie man das eventuell doch zum laufen kriegen könnte, dann bin ich froh über jeden Tipp. Ansonsten werd ich das demnächst wohl nochmal in C implementieren müssen. :-(

Edit: Offensichtlich ist Out-of-Band nur für TCP spezifiziert. Das was bei der Quake-Engine als Out-of-Band bezeichnet wird hat also technisch nichts mit dem eigentlichen Out-of-Band zu tun. Die Pakete sind durchaus in-Band, enthalten aber zu Beginn die Zeichenfolge “0xff 0xff 0xff 0xff” was sie in Quake-Logik zu Out-of-Band-Paketen macht.

February 4th, 2008

Eine Erkenntnis

Posted by Dunedan in Programmieren

Die Erkenntnis des Tages: Es gibt keine perfekte Programmiersprache.

January 19th, 2008

Chaosradio und Bittorrent

Posted by Dunedan in Chaosradio, Computer, Podcasts, Programmieren

Das Chaosradio hat momentan ein kleines Problem. Und zwar ist der Server überlastet, sodass für das herunterladen von einzelnen Sendungen eine recht geringe Bandbreite die Folge ist. Was läge da näher die Sendungen via P2P zu verteilen? Mit Bittorrent um genau zu sein. Überlegungen und Pläne Torrents der einzelnen Sendungen direkt auf die Homepage zu integrieren gibt es wohl bereits, aber umgesetzt ist davon noch nichts. Doch gerade jetzt wären diese Torrents ja aufgrund der geringen Bandbreite besonders nötig.

Ich dachte mir, dass das doch nicht so schwer sein kann extern Torrents bereitzustellen. Da ich allerdings keine Lust hatte das alles per Hand zu machen, bastelte ich mir ein kleines Python-Skript, welches einen beliebigen Podcast-Feed entgegennimmt, aus diesem die URLs der Audiodateien extrahiert, die Audiodateien herunterlädt und Torrents daraus erzeugt. Mit einem passenden Bittorrentclient lassen sich diese Torrents dann gleich noch automatisch seeden.

Soweit so gut. Meine Idee war den Skript auf meinem Server laufen zu lassen, sodass dieser das Herunterladen der Audiodateien und für Bittorrent das initiale Seeden übernimmt. Wer dann Bock hat kann sich einfach den Torrent von einer extra Seite auf meinem Server holen und die gewünschten Sendungen über Bittorrent herunterladen.

Ich dachte mir, dass ich zur Sicherheit Tim Pritlove fragen könnte, ob das von seiner Seite aus in Ordnung ginge, doch ganz so einfach schien das dann nicht zu sein. Er hatte jedenfalls Einwände. Die genauen Gründe sind mir weiterhin schleierhaft. Ob es ihm dabei darum geht, dass er somit keinen Überblick mehr über die Anzahl der Downloads hat, lieber gleich eine offizielle Bittorrentlösung haben möchte oder was auch immer, weiß ich nicht. Mir geht es ja gar nicht darum offizielle Torrents für Chaosradio zur Verfügung zu stellen, sondern nur solange Torrents anzubieten bis eine offizielle Möglichkeit überhaupt erst einmal existiert.

Und gerade jetzt wo der Chaosradio-Server so überlastet ist, wäre eine alternative Downloadmöglichkeit besonders praktisch. Schade. Sehr schade das Ganze.

January 5th, 2008

Ein Loblied auf Drupal

Posted by Dunedan in Computer, Musik, PHP

Vor über einem Jahr war ich auf der Suche nach einem netten Content Management System zur Realisierung einer Homepage. Dabei stieß ich auf Drupal, dessen Konzept mir auf Anhieb recht gut zusagte. Als ich mich damit beschäftigte merkte ich allerdings schnell, dass Drupal zwar toll ist, aber einen in meinen Augen immens hohen Einarbeitungsaufwand erfordert. Ich beschäftigte mich dann eine Weile damit, aber irgendwie blieb es mit der Zeit liegen, bis ich vor circa zwei Monaten anfing eine Bandhomepage für einen Kumpel mit Drupal zu entwickeln. Ich konnte auf ein paar Vorarbeiten von vor einem Jahr zurückgreifen, musste aber noch etliches selbst machen. Seit Weihnachten ist die Homepage nun online und ich bin recht zufrieden. Natürlich ist sie nicht perfekt und es fehlen auch noch ein paar Sachen, aber ich finde sie ist recht gut geworden.
Zu Drupal kann ich noch sagen, dass ich es toll fände Konzepte wie CCK und Views noch tiefer im Kern verankert zu sehen. Denn das sind echt coole Techniken.
Mal schauen, vielleicht werde ich in Zukunft auch noch die ein oder andere Seite mit Drupal realisieren, denn das ist eine echt gute Grundlage.

Natürlich will ich euch auch nicht den Link oben erwähnter Seite vorenthalten. Er lautet: http://www.beats-of-loner.de/.

September 27th, 2007

Von convert zu Shellskripting

Posted by Dunedan in Computer, Programmieren

Langsam aber sicher rückt die diesjährige O-Phase an meiner Uni immer näher, bei der ich, ebenso wie letztes Jahr, als Tutor für die Erstis teilnehmen werde. Dieses Jahr habe ich mich dazu bereiterklärt mich für unsere Gruppe “φ macht auch μst” um eine Homepage zu kümmern. Homepage gut und schön, ist ja keine große Sache. Was mich allerdings ein klein wenig Überlegungen kostete war, wie man die Fotos die während der Woche geschossen werden am besten aufbereitet und auf die Homepage stellt. Natürlich gibt es fertige Programme die ganze Bildergalerien mit Layout usw. erstellen, aber ich wollte die Fotos gerne schön eingebettet in die Homepage haben. Wobei sich mir dann nun die Frage stellte, wie ich die Fotos möglichst schnell auf die richtige Größe skalieren und Vorschaubilder erzeugen kann. Denn die Auflösung die direkt von den Kameras kommt ist ja meist bedeutend größer als man für ein bequemes angucken im Internet gerne hätte.

Eine Lösung zum skalieren war mit convert aus der Programmsammlung imagemagick auch schnell gefunden. Da ich allerdings ja nicht nur die Bilder skalieren, sondern auch gleich noch Vorschaubilder erstellen wollte musste ich also zwei Befehle ausführen. Aber das ist ja viel zu viel Arbeit. :D
Also packte ich beide Befehle in eine Datei und ein Shellskript war geboren. Zu diesem fügte ich dann recht schnell noch andere Features wie vernünftige Fehlermeldungen bei nicht installiertem convert, die Möglichkeit das Verzeichnis in dem die zu konvertierenden Dateien liegen per Kommandozeilenparameter festzulegen, usw. hinzu.

Irgendwann versuchte ich dann eine größere Anzahl an Bildern zu konvertieren und stellte mit Erschrecken fest, dass der Speicherhunger von convert dabei ins Unermessliche stieg und mein System zum swappen brachte. Das konnte natürlich so nicht weitergehen. Also war ich gezwungen das massenkonvertieren der Dateien durch eine Schleife zu ersetzen bei der in jedem Durchlauf genau eine Datei konvertiert wird. Und voila: Schon hält sich der Speicherhunger in Grenzen.

Was ich ebenso tat war, dafür zu sorgen dass die ersten 10 Dateien vor ihre Laufnummer noch eine 0 bekamen, damit auch bei vielen Zahlen eine sinnvolle Reihenfolge gegeben ist (statt pic1.jpg, pic2.jpg, … pic9.jpg, pic10.jpg, pic11.jpg … dann pic01.jpg, pic02.jpg, … pic09.jpg, pic10.jpg, pic11.jpg …). Wobei mir dann auffiel, dass das ja nur für eine zweistellige Anzahl an Bildern funktioniert und bei einer größeren Anzahl an Bildern wieder das gleiche Dilemma besteht. Und dafür habe ich bisher noch keine Lösung gefunden. Ich möchte also, dass die laufende Nummer jedes Bildes genausoviele Stellen hat wie die des letzten Bildes. Gibt es zum Beispiel 43289 Bilder, dann möchte ich, dass das Erste halt nicht pic1.jpg, sondern pic00001.jpg heißt. Meine bisherige Variante, ein regulärer Ausdruck, scheint da nicht zu funktionieren, da die dazu nötige wenn-dann Logik bei regulären Ausdrücken fehlt. Zumindest so wie ich das grade sehe.
Ein anderer Ansatz wäre einen regulären Ansatz innerhalb einer Schleife zu haben, der bei jedem Durchlauf eine 0 ergänzt. Das ist an sich kein Problem, allerdings ist mir noch keine sinnvolle Möglichkeit eingefunden wie man die Schleifendurchläufe pro Datei steuern soll.
Vielleicht hat ja von meinen treuen Lesern da jemand eine Idee. :)

Aber was ich eigentlich mit dieser ganzen Geschichte sagen wollte ist, dass ich es irgendwie lustig finde, wie mir auf einmal aus einem einzigen Befehl zu Vereinfachung einer Arbeit ein ausgewachsener Shellskript entstanden ist. :)

September 13th, 2007

Weitere Nervereien mit PHP

Posted by Dunedan in PHP, Programmieren

Seitdem ich versuche mit PHP strikt objektorientiert zu programmieren fallen mir immer wieder Sachen auf die äußerst unschön sind.
Heute: Die magische Methode __toString() wird anscheinend nicht mit vererbt, sodass man sie in jeder Kindklasse neu definieren muss. Ob das bei allen magischen Methoden so ist weiß ich nicht, um das auszuprobieren fehlte mir der Nerv.
Muss das so sein und wenn ja warum? Mir erschließt sich jedenfalls der Sinn nicht so recht.

August 30th, 2007

nerviger Kleinkrams

Posted by Dunedan in PHP, Programmieren

Ich war vorhin mal wieder dabei ein bisschen was in PHP zu programmieren. Unter anderem eine Klasse zum Handling von Listen. Eine ähnliche Klasse hatte ich neulich im Rahmen eines Tutorenjobs schon mal in Java implementiert, insofern war es also eigentlich nur ein bisschen Schreibarbeit. Allerdings fielen mir zwei Sachen sehr unangenehm auf. Dadurch das die Funktionen von PHP nicht in irgendwelche Klassen oder Namespaces unterteilt sind war es mir weder möglich meine Klasse “List” zu nennen, noch ihr die Methode “empty” zu geben. Denn list() und empty() haben unter PHP schon eine andere Bedeutung. Das sind dann so die kleinen aber feinen Unterschiede an denen man merkt das Java mehr durchdacht und strikter umgesetzt ist.

Edit: Wobei der PHP-Interpreter ja auch einfach so schlau sein könnte zu erkennen in welchem Zusammenhang solche Begriffe gebraucht werden. Denn ein “class List { [...] }” macht mit PHPs list()-Funktion irgendwie nicht allzuviel Sinn.

August 3rd, 2007

Extendable-Singleton-Klassen in PHP

Posted by Dunedan in PHP, Programmieren

Ganz toll. Ich hab grade festgestellt, dass es in PHP5 nicht ohne weiteres möglich ist Extendable-Singleton-Klassen zu erstellen. Problem ist, dass die abstrakte Klasse bereits den Namen der abgeleiteten Klasse kennen müsste, was natürlich nicht geht.
Es gibt zwar Workarounds (siehe hier) aber so wirklich zufriedenstellend sind die auch nicht.

February 6th, 2007

128 != 128?

Posted by Dunedan in Computer, Java, Studium & Co

Die letzten Tage war ich kräftig damit beschäftigt für die Uni ein Programm zum steuern des Verkehrsflusses an einer Kreuzung zu schreiben. Hört sich spannender an als es ist, aber ganz lustig ist es schon. Ich bin zwar noch nicht fertig, hänge aber schon seit einem kompletten Tag an einem einzigen dämlichen Bug fest.
Über eine Kreuzung fahren ja Autos. Und beim 128. Auto fängt mein Programm an rumzuspinnen. Ich hab das inzwischen soweit eingegrenzt dass ich momentan der Meinung bin dass in Java bei zwei einfachen Zahlen (int) 128 ungleich 128 ist. Sehr, sehr merkwürdig. Vor allem da ints ja einen Zahlenbereich von -2^31 bis 2^31-1 haben.
Also falls jemand irgendwelche Tipps hat: ich bin immer dankbar dafür.
Mal schauen. Das fertige Programm stell ich vielleicht auch als Applet ins Netz. Wir werden sehen. :)

Update: Ha, ich sollte öfters solche Beiträge schreiben. Direkt nach dem Schreiben hab ich den Bug natürlich gefunden. Es waren nämlich keine ints, sondern Integers. Und die sollte man dann doch eher mit Integer a [...] a.intValue() vergleichen. Ansonsten scheint’s nur (warum auch immer) bis 127 zu gehen.