
Beim Aktualisieren aller Pakete über aptitude erhielt ich folgende Meldung:
W: GPG error: ftp://mirror.hetzner.de lenny Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY BLABLABLA
Ein Blick in die /etc/apt/sources.list zeigte mir die noch per default eingetragenen Update-Server. Also habe ich mir die neusten Serverdaten von meinem Hoster Hetzner geholt:
# Packages and Security Updates from the Hetzner Debian Mirror deb ftp://mirror.hetzner.de/debian/packages lenny main contrib non-free deb ftp://mirror.hetzner.de/debian/security lenny/updates main contrib non-free
Bei einem weiteren Versuch, die Paketeliste zu aktualisieren, ergab leider wieder die Warnung.
Nach ein wenig gegoogle bin ich auf den Hinweis gestossen, zunächst das Paket
debian-archive-keyring
zu aktualisieren. Und siehe da, Problem gelöst! Damit wurden die GnuPG-Archivschlüssel des Debian-Archivs erneuert. Das Debian-Projekt signiert seine veröffentlichten Dateien digital. Dieses Paket enthält die Archivschlüssel, die dafür verwendet werden.

Installation
Aktuelle Version von node.js unter http://nodejs.org/. Notwendige Pakete zur Installation sind u.a.
python-dev und libssl-dev.
./configure --prefix=/usr/local/nodejs make make install
Für die Einbindung von Erweiterungen für node.js wird das Tool npm genutzt, welches man unter http://npmjs.org/ finden kann. Bei der Installation sollte das Verzeichnis zu node.js dem PATH zugeordnet werden.
PATH=$PATH:/usr/local/nodejs/bin/ curl http://npmjs.org/install.sh | sh
Zwei nützliche Erweiterungen für node.js sind zum einen express.js http://expressjs.com/, welches einem sehr vereinfacht HTTP-Server zu erstellen. Und zum anderen natürlich socket.io http://socket.io/ für die Socket-Kommunikation mit dem Browser / Client.
npm install express npm install socket.io
Programmierung
Es wird ein Server und ein Client benötigt. Der Server startet auf einem beliebigen Port und reagiert auf Ereignisse, wie die Verbindung eines neuen Clients oder dem Aufruf einer gewünschten Aktion. In diesem Fall soll der Server die Anzahl der verbundenen Clients zählen und bei jedem Verbinden und Trennen eines Clients diese Anzahl anpassen und in Echtzeit an alle verbundenen Clients übertragen.
var express = require( '/usr/local/nodejs/lib/node_modules/express' );
var server = express.createServer();
server.listen( 88 );
var io = require( '/usr/local/nodejs/lib/node_modules/socket.io' ).listen( server );
var browsers = 0;
io.sockets.on( 'connection', function ( socket ) {
browsers++;
io.sockets.emit( 'show', { num: browsers } );
socket.on( 'disconnect', function () {
browsers--;
io.sockets.emit( 'show', { num: browsers } );
} );
} );
Der Client meldet sich beim Server an. Öffnet die Socket-Verbindung und reagiert auf die ihm gesendeten Daten. Natürlich kann auch dieser Ereignisse an den Server übertragen.
<script type="text/javascript">
windowOnLoad( function() {
var socket = io.connect( 'http://www.kinglee.de:88' );
socket.on( 'connect', function () {
// alert( 'connected' );
} );
socket.on( 'show', function ( data ) {
$('users-online').innerHTML = data.num;
} );
} );
</script>
<div id="users-online"></div>

Jetzt habe ich mich doch glatt dabei erwischt, mal durch die alten Skripte des WebcamKönig zu gucken. Der WebcamKönig war ein Projekt von mir, welches nach IP-Cams im Internet suchte und diese nach Ländern etc. auflistete. Sehr spannend. Viele Cams (wenn nicht mehr) sind immernoch online. Vielleicht gibt es ja eine neue Krönung ;-)


Einen meiner Temperatursensoren habe ich in einer Wasserflasche versenkt, welche draußen auf dem Balkon steht. Der Verlauf der Temperatur wird durch die Masse des Wassers deutlich gedämpft. Dies erkennt man am gleichmäßigen Verlauf der Temperaturkurve.
Letzte Nacht (14. auf 15. Januar) fiel die Außentemperatur bis auf -4°C. Es ist nun spannend zu beobachten, wie sich die Temperatur im Wasser verhält. Hier der aktuelle Verlauf der Wassertemperatur:
Seit 3 Uhr nachts ist die Flasche komplett durchgefroren. Der Sensor "meldet" seit dem eine Temperatur von ca. +0,4°C. Noch ist die Flasche trotz Luft-Temperaturen von +2°C nicht wieder aufgetaut.
Update: Nach zwei richtig kalten Nächten verändert sich, wenn auch nur sehr wenig, die Temperatur des Eis in der Flasche. Der Wert von +0,4°C fällt in der Nacht bis auf ca. -0,1°C. Die Frage ist, woher kommt der Unterschied zur Außentemperatur?


Ich will schöne URLs! Ich will keine Endungen, keine Fragezeichen, keine &-Zeichen! Aus einer URL wie
www.kinglee.de/test.php?bar=foo&dings=bums
sollte soetwas wie
www.kinglee.de/test/bar-foo/dings-bums/
werden. Das ist doch vieeel schöner!
In meinem Skript test.php möchte ich aber mit den $_GET Parametern arbeiten können, wie ich es von der häßlichen URL gewohnt bin. Für diese Aufgabe habe ich eine zweiteilige Lösung entwickelt. Zum einen wird die URL in der .htaccess schon ein wenig umgewandelt, um dann im PHP Skript in die endgültige Form gebracht zu werden.
Die .htaccess hat zunächst die Aufgabe den schönen Aufruf so zu zerlegen, dass aus dem /test/ ein test.php wird. Der restliche Teil kann zunächst "so
wie er ist" an test.php übergeben werden. Weitere normale GET-Parameter, die mit einem Fragezeichen angehängt werden sollten, werden auch
übergeben.
RewriteCond %{REQUEST_URI} !(\.(html?|php|png|gif|jpg|css|js|flv|swf|zip))$ [NC]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)(.*)$ $1.php?_p=$2&_qs=%{QUERY_STRING} [NC,L]
Wenn nun eine Anfrage an den Server gestellt wird, eine Datei mit Dateiendung auszugeben, dann greift die Umwandlung nicht! (siehe Zeile 1) Dabei spielt es keine Rolle, ob es die Datei gibt oder nicht!
Wenn nun eine Anfrage an den Server gestellt wird, ein Verzeichnis zu öffnen, dann greift die Umwandlung nur, wenn das Verzeichnis nicht doch existiert. (siehe Zeile 2)
Die Umwandlungsregeln greift und macht aus
www.kinglee.de/test/bar-foo/dings-bums/?links=rechts
dann
www.kinglee.de/test.php?_p=/bar-foo/dings-bums/&_qs=links=rechts
array(2) {
["_p"]=>
string(20) "/bar-foo/dings-bums/"
["_qs"]=>
string(12) "links=rechts"
}
Jetzt muß der $_GET Parameter nur noch umgeschrieben werden. Dazu wird der _p Teil zunächst am / und dann jedes Teilstück nochmal am - zerlegt! (Was für ein Satz!) Entsprechendes gilt für den _qs (Query String) mit den Trenner & und =.

Ich nutze seit einigen Tagen die App SendLocation, um meine Position mittels eines einfachen HTTP-GET Aufrufes an meinen Server zu senden. Viele andere Apps waren zu kompliziert oder hatten nur die Möglichkeit, Daten per Mail oder SMS zu versenden. Die App SendLocation ist simpel und damit perfekt für diesen Zweck geeignet. Die aktuellen Daten stelle ich in einer google map dar.
Interessant ist die Funktion der App, auch im Hintergrund, wenn die App nicht geöffnet läuft, Positionen zu senden. Allerdings funktioniert dies nur eingeschränkt, da nur Wegpunkte vom iOS an die App gemeldet werden, wenn eine wesentliche Änderung vorkam.
Wenn die App aber offen ist, wird die Position kontinuierlich an die URL gesendet, die man selber definieren kann.

Siehe Mod Log SQL
Das LogFormat habe ich explizit in der vhost Conf des Apache angegeben. Ich habe die default Spalten um ein großes V am Ende geändert, nun werden die
virtuals hosts Aufrufe angezeigt. Somit kann ich sehen, über welche der vielen Domains die Aufrufer auf kinglee.de kamen.
LogSQLTransferLogTable access_www_kinglee_de LogSQLTransferLogFormat AbHhmRSsTUuV

| Longitude | 7° 33" 44,341' |
| Latitude | 51° 30" 8,556' |








