Asus WL-500g Premium mit OpenWrt Kamikaze

Ich habe zu Testzwecken einen WLAN-Router von Asus erworben. Es handelt sich um das Modell Asus WL-500g Premium mit 8 MB Flash-Speicher und 32 MB RAM sowie zwei USB-Ports. Preislich liegt das Gerät bei ungefähr 70 Euro bei Ebay. Der WLAN-Router lässt sich mit OpenWRT unter Linux betreiben.

asus_wl_500g_premium

Betrieben wird das Gerät von mir unter der neuen Entwicklungsversion von OpenWrt mit dem Namen Kamikaze.
Die Quellen dafür bekommt man durch einen Checkout aus dem Subversion-Repository.

svn co https://svn.openwrt.org/openwrt/trunk/

Anschließend führt man im trunk/-Verzeichnis die Konfiguration des Firmware-Build-Prozesses mit

make menuconfig

aus und baut die Firmware mit

make

Um den Router zu Flashen benötigt man einen tftp-client, es wird atftp empfohlen. Unter Gentoo installiert man

emerge atftp

Nun muss man als Erstes den Router in den Diagnose-Modus versetzen:

  1. Entfernen der Versorgungsspannung.
  2. Drücken des RESET-Tasters (nicht der rote EZSETUP) mit einem Stift/Feinschraubenzieher während des Einschaltens für ein paar Sekunden.
  3. Loslassen des RESET-Tasters.

Man erkennt das der Router im Diagnosemodus ist daran, dass die POWER-LED langsam blinkt. Der Router befindet sich nun im Bootloader CFE (Common Firmware Environment). Nun führt man folgendende Eingaben in dem Verzeichnis durch, in dem das Image der Firmware liegt ( z.B. trunk/bin )

# atftp
connect 192.168.1.1
mode octet
trace
timeout 1
put openwrt-brcm-2.4-squashfs.trx

Das Image wird jetzt auf den Router übertragen.

Achtung: Nach Übertragung muss der Router noch mindestens 6 Minuten eingeschaltet bleiben, da das Image erst nach dem übertragen in den Flash geschrieben wird. Der Router startet nach Beenden des Schreibvorgangs nicht automatisch neu: Man wartet also lieber ein wenig länger und führt dann einen Reset durch.

Nun sollte man sich mit telnet auf 192.168.1.1 verbinden können und mit passwd ein root-Passwort für die Nutzung von ssh setzen können. Das Default-Passwort für root ist nicht gesetzt, der Zugang über ssh funktioniert aber erst nach dieser Aktion.
Wenn alles funktioniert bekommt man einen Prompt und ein kleines eingebettes Linux-System für wenig Geld:

# uname -a
Linux OpenWrt 2.4.34 #2 Thu Feb 15 20:47:24 CET 2007 mips unknown

Um den vollständigen Leistungsumfang des Gerätes nutzen zu können muss man noch ein paar spezielle Aktionen durchführen, zum Beispiel muss noch die volle Menge des Speichers nutzbar gemacht werden.

Mathematik ist.

Es scheint ja in letzter Zeit Mode zu sein, mit Google herauszufinden, was die Dinge sind, beziehungsweise wie sie den Webautoren erscheinen. Deshalb habe ich einmal bei Google nach “Mathematik ist” gesucht:

  1. Mathematik ist nützlich.
  2. Mathematik ist faszinierend.
  3. Mathematik ist eine der ältesten Wissenschaften überhaupt.
  4. Mathematik ist in allen Wissenschaften anwendbar.
  5. Mathematik ist mehr als Zahlen.
  6. Mathematik ist geprägt von Mustern.
  7. Mathematik ist nicht alles, aber ohne Mathematik ist alles nichts.
  8. Mathematik ist ein kleines, aber feines Fach.
  9. Mathematik ist dem Liebestrieb nicht abträglich.
  10. Mathematik ist überall.
  11. Mathematik ist ein sozial-kulturelles, diskursives Konstrukt.
  12. Mathematik ist nicht jedermanns Sache.

Ich kann mich da nur anschließen. Fehlt nur noch der Beweis.

Arithmetik ohne Begrenzungen

Selbst wenn man nur einfache Probleme in Theoretischer Informatik, Zahlentheorie oder Diskreter Mathematik bearbeitet und durch Programme in C zu erschließen versucht, gelangt man schnell an die Grenzen der darstellbaren Wertebereiche für ganze Zahlen. Das Implementieren einer eigenen Bibliothek für große Zahlen ist zwar möglich, mit GMP (GNU Multi Precision Arithmic Library) gibt es aber bereits eine freie und gut gepflegte Implementierung.

Eine einfache, experimentelle Erkundung des Syracuse-Problems könnte so aussehen:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <stdio.h>
 
int main()
{
    int a;
 
    scanf("%d", &a);
 
    while (a != 1) {
	printf("%d ", a);
	a = syracuse(a);
    }
 
    printf("1\n");
 
    return 0;
}
 
int syracuse(int n)
{
    if (n % 2) {
	return 3 * n + 1;
    } else {
	return n / 2;
    }
}

Mit der GNU MP Bignum Library wird daraus:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <stdio.h>
#include <gmp.h>
 
void mpz_syracuse(mpz_t n);
 
int main()
{
    mpz_t a;
    mpz_init(a);
 
    mpz_inp_str (a, NULL, 0);
 
    while ( mpz_cmp_si(a,1) ) {
	mpz_out_str (NULL, 0, a);
	printf("\n");
	mpz_syracuse(a);
    }
 
    printf("1\n");
 
    return 0;
}
 
void mpz_syracuse(mpz_t n)
{
    if (mpz_divisible_ui_p(n,2)) {
	mpz_divexact_ui (n, n, 2);
    } else {
	mpz_mul_ui (n, n,3);
	mpz_add_ui (n, n, 1);
    }
}

Damit kann man dann auch für sehr große natürliche Zahlen die Zahlenfolge bestimmen, kompiliert wird wie gewohnt, allerdings muss man mit -lgmp linken.

syracuse

Photos mit Flickr

Ich habe mich heute bei Flickr angemeldet. Meine Photoseite findet man unter flickr.com/photos/aquo und natürlich gibt es auch einen Photo-Feed. Die drei neuesten Photos werden als Vorschau in der Randspalte angezeigt, dazu benutze ich FlickrRSS für WordPress.

AVR Butterfly

Der AVR Butterfly ist eine Evaluationsumgebung für den Mikroprozessor ATmega169 von Atmel.

avrbutterfly_front

Die Ausstattung an Schnittstellen und Sensor ist für so ein kleines und günstiges System recht beachtlicht. Für um die 20 Euro bekommt man ein 6-stelliges LCD, einen 4-Wege-Taster mit Druckknopf, 512 kByte Flash-Speicher, Licht- und Temperatursensor, einen Piezo-Schallwandler und einen Zugang über serielle Schnittstelle (mit Pegelwandler auf dem Board). Als weitere Kommunikationspfade mit dem System kann man JTAG, SPI und I2C nutzen. Zudem arbeitet der Butterfly sehr stromsparend und ist mit einer Lithium-Batterie autark spannungsversorgt.

Das System ist in C programmierbar, einen entsprechenden Compiler und Werkzeuge zur Datenübertragung auf das System gibt es auch für Linux.

Chemnitzer Spielenacht

Am 12.01.2007 findet in Chemnitz die 3. Chemnitzer Spielenacht statt. Los geht es, bei freiem Eintritt, um 18 Uhr in der Mensa der TU Chemnitz. An diesem Abend sind alle bekannten und weniger bekannten Spiele auszuleihen, die auf dem Spielemarkt erhältlich sind. Es finden vier Turniere statt, Turnierspiele sind: “Siedler von Catan”, “Carcassonne”, “Mensch ärgere dich nicht” und “6 nimmt”.

Statische Codeanalyse mit Uno

Statische Codeanalyse ist eine Art von Softwaretest, bei der Quellcode bestimmten formalen und algorithmischen Prüfungen unterzogen wird um Fehler in Software zu finden. Die Überprüfung erfolgt hier im Gegensatz zur dynamischen Analyse nicht zur Laufzeit und wird deswegen als statische Analyse bezeichnet.

Uno ist ein Tool, mit dem man nach drei der häufigsten Fehlerarten in C-Quellcode suchen kann:

  • Nutzung uninitialisierter Variablen
  • Dereferenzierung von NULL-Pointern
  • Bereichsüberschreitung bei der Array-Adressierung

Entsprechende Beispiele und ein Download des Werkzeuges sind auf der Seite von Uno zu finden. Eine kurze Probe hier hat gezeigt, daß sich sowohl einfache Beispiele konstruieren lassen bei dem Dereferenzierungsfehler gefunden werden, als auch Beispiele, bei dem das Werkzeug die Fehler übersieht.

Hier wird der Fehler gefunden:

1
2
3
4
5
6
7
8
9
int *ptr;
 
int main() {
    if (ptr)
        *ptr = 123;
    else
        *ptr = 345;
    return 0; 
}
uno:#1: possible global use or deref before def:
[R ptr global_nullptr_deref.c 9]
in fct main global_nullptr_deref.c 4

und hier nicht:

1
2
3
4
5
6
7
8
9
10
11
int main() {
 
    int *ptr;
    ptr = NULL;
 
    if (ptr)
        *ptr = 123;
    else
        *ptr = 345;
    return 0;
}

Generell ist die quelloffene Verfügbarkeit von leistungsfähigen Werkzeugen zur Codeanalyse nicht gegeben, die Werkzeuge übersehen Fehler oder liefern zuviele Falschpositive. Professionelle Tools wie Coverity stehen wiederum nicht zur freien Verfügung. Wer sich mehr mit diesem Thema beschäftigen will, findet allerdings auf der Seite von Dawson Engler, dem Gründer von Coverity, einen guten Einstiegspunkt mit ein paar interessanten Veröffentlichungen, auch zur probalistischen Analyse von Quellcode.

xkcd

Eigentlich wollte ich ja heute hier eine dieser netten Darstellungen aus dem xkcd.com Webcomic abbilden. Dieses wäre kein Problem gewesen, die netten Comics mit mathematisch-geekigem Hintergrund sind vom Autor Randall Munroe zur Darstellung bei Quellennennung freigegeben. Dann habe ich aber noch einmal darüber nachgedacht und entschieden es nicht zu tun:

Die Comics werden nämlich in einem Blag mit überaus geistreichen Texten kommentiert. Und da ich diese Texte hier schlecht wiedergeben kann, wäre eine Abbildung nur die Hälfte der Freude.

Mathematik mit historischen Quellen

In den Geisteswissenschaften ist es geläufig, dass Studenten sich mit den Positionen und Argumenten der historisch vorangegangenen Forschung über die Orginalquellen vertraut machen. Besonders wichtige Arbeiten, Aufsätze und Bücher werde teilweise sogar als Kunstwerke betrachtet, deren Studium nicht nur Wissen vermittelt, sondern auch inspirieren kann.

In den Naturwissenschaften, wie überhaupt in allen Nichtgeisteswissenschaften, ist Quellenstudium natürlich auch wichtig, trotzdem liegt hier meist der Augenmerk auf dem Fazit eines Dokumentes, wie zum Beispiel dem abgeschlossenen Beweis eines mathematischen Satzes oder der Lösung einer Aufgabe. Dieses Wissen wird meist nicht über die Orginalquellen, sondern durch aufbereitete Lehr- und Fachbücher vermittelt. Trotzdem kann auch im natürwissenschaftlichen Bereich ein Studium der Orginalquellen sehr hilfreich und gewinnbringend sein.

Unter Teaching With Original Historical Sources In Mathematics finden sich Hinweise wie Mathematik unter Nutzung von Primärquellen vermittelt werden kann. Auf weiteren Unterseiten finden sich auch gute Verweise auf solche Primärquellen, wie auch aufgearbeitete und übersetze mathematische Quellen, besonders im Bereich der diskreten Mathematik.

Herbst in Kasachstan

Es sieht fast so aus, als ob auch hier langsam Herbst werden würde. Die Bäume verlieren ihre Blätter, und die ganze Stadt ist voller Laub. Zudem ist es heute recht kühl, der Himmel ist bedeckt und es hat in der Nacht ganz leicht geregnet. Tagsüber sind so 20 – 25 Grad, in der Nacht ist es aber schon deutlich kühler.

Letztes Wochenende war ich in den Bergen bei Almaty und habe Medeu, eine Eisschnelllaufbahn, und Shymbulak, eine Region in den Bergen besucht. Ich bin nicht bis ganz auf die Bergspitze gestiegen, aber ich war auf ungefähr 2970 Metern Höhe, das ist höher als die Zugspitze.
Heute ist es hier im Institut sehr ruhig, die Erstsemester sind alle im Außengelände, fegen Laub und sammeln Müll, also so eine Art Herbstputz. So etwas ist in Deutschland nicht mehr vorstellbar.

Für das nächste Wochenende war eigentlich eine Tour in die Berge zum Klettern geplant, leider bin ich etwas erkältet und weiß noch nicht ob ich die Nacht draußen verbringen möchte.

Nächste Woche findet hier eine Konferenz am Institut statt, auch wenn ich wahrscheinlich nicht viel verstehe möchte ich mir ein paar Vorträge anhören.

Heute Nachmittag nach der Arbeit gehe ich noch in die Bibliothek des Goethe-Institutes von Almaty, eine deutschsprachige Bibliothek mit 5000 Büchern und allen wichtigen deutschen Tageszeitungen und Magazinen um mal ein wenig zu lesen.