Kuarepoti-Dju

kuarepoti-dju - the josef multilingual blogosphere

30.3.2005

Statistiker

Categories: — josef @ 16:05

“In der mathematischen Statistik macht man überhaupt häufig die Erfahrung, daß 4 schon eine große Zahl ist.”

(Prof. Dr. B. L. van der Waerden, Mathematische Statistik)

Es geht hierbei natürlich um Konfidenzintervalle, aber für sich allein gestellt ist das schon ein fortune-cookie wert. Interessant auch der folgende Satz aus demselben Buch:

“Gerade die Schwänze können unter Umständen für die Beurteilung einer Abweichung von der Normalität entscheidend sein.”

Gemeint sind hier die beidseitig extremal werdenden z-Werte einer angenäherten Normalverteilung.
Erstaunlich gutes Buch aus den 50er Jahren, 3. Auflage 1971, mit vielen Beispielen aus der Biologie (Lethalitätsabschätzungen inbegriffen).

26.3.2005

SILC-Tutorial, Teil 1

Categories: — josef @ 18:02

SILC ist im einfachen Sinne betrachtet ein Chatprotokoll, ähnlich wie IRC. Allerdings achtete man beim Design auf die Vertraulichkeit der Gesprächsinhalte, so dass die Kommunikation nun verschlüsselt abläuft, ähnlich wie bei GGZ.
Man kann über eine Bibliothek namens libsilcclient diese Funktionalität in eigene Anwendungen mit aufnehmen. So soll beispielsweise unser Chatbot die Möglichkeit bekommen, über SILC die Leute aus dem c3d2-Channel zu ärgern. Vor allem Mandy hat es ihm ja angetan.

Nun, wie geht man als C-Programmierer vor? Zuerst bindet man zwei Headerdateien ein, die jede Menge Systembibliotheken schon enthalten, also stdio, unistd, TRUE/FALSE und dergleichen. Das spart Schreibarbeit.
Desweiteren benötigt man ein globales SilcClient-Objekt. Dies ist eine Struktur, die noch initialisiert wird. Als dritte Sache im globalen Namensraum werden noch (möglichst statische) Callback-Funktionen benötigt. Dazu später mehr, man sollte sich jedoch schon mal die Datei client_ops_example.c aus den SILC-Quellen anschauen.

In einer Funktion, die die Verbindung herstellt, legt man nun zuerst ein paar weitere Objekte auf den Stacks, und zwar von den Strukturtypen SilcPKCS, SilcPrivateKey und SilcPublicKey. Dann allokiert man sein globales client-Objekt über:

client = silc_client_alloc(&ops, /*&params*/NULL, NULL, silc_version_string);

Die Operationen sind dabei vom Typ SilcClientOperations. Diese müssen nur dann vorinitialisiert sein, wenn nicht die oben genannte Beispieldatei herangezogen wird. In meinem Fall hingegen werden etliche Funktionspointer nicht benötigt. Da die API-Dokumentation leider verschweigt, dass diese nicht NULL sein dürfen, habe ich sie mit einem speziellen Präfix belegt (no_silc_…), so dass die ops-Struktur damit initialisiert werden muss. Der zweite Parameter sollte zu Beginn immer NULL sein, man kann hierüber später nette Einstellungen wie die Darstellung des Nicknames vornehmen. Die Variable silc_version_string ist global verfügbar.

Die Client-Variablen username, hostname und realname müssen anschließend gesetzt werden. Es ist darauf zu achten, dass all diese Felder auch nach dem Verlassen der Funktion verfügbar sein müssen, also empfiehlt sich ein strdup(), welches zum Schluss wieder mit free() gradegebogen wird.

Der nächste Punkt betrifft die Kryptographie. Hier ist Handarbeit angesagt, aber zum Glück gibt es Standardfunktionen:

ret = silc_pkcs_register_default();
ret = silc_hash_register_default();
ret = silc_cipher_register_default();
ret = silc_hmac_register_default();
ret = silc_create_key_pair(NULL, 0, NULL, NULL, NULL, NULL, &pkcs, &pubkey, &privkey, FALSE);

Die Rückgabewerte sind dabei als boolesche Variablen aufzufassen, sollten also nicht Null sein. Man kann natürlich alle Ergebnisse mit OR verknüpfen und dann auf Nullverschiedenheit prüfen.

Nun hat man auch pkcs, pubkey und privkey, welche man ebenfalls den gleichnamigen Feldern des globalen silcclient-Objektes zuweist. Und nun geht es los auf die Datenreise:

ret = silc_client_init(client);
silc_client_connect_to_server(client, NULL, 706, hostname, NULL);

Dies alles ist für eine Konsolenapplikation gedacht, d.h. die Passphrase muss man auch beim Start der Anwendung eingeben. Graphische Anwendungen wie silky nutzen die SILC-PKCS-Funktionen zum Auslesen dieser Werte aus einer Datei, und Eingabe über Dialogfelder über diverse Callbacks. Das soll hier aber noch nicht Gegenstand des Tutorials sein, denn für heute reicht das obige sicherlich erstmal zu.

Beim Compilieren muss darauf geachtet werden, dass man sowohl gegen die libsilcclient als auch die libsilc linkt. Besonders bei Plugins/Bibliotheken sieht man dies nicht auf den ersten Blick.

Weitere Informationen findet der geneigte Hackspecht in der SILC-API-Dokumentation.

25.3.2005

¿Hablas español?

Categories: — josef @ 18:46

A new developer has joined our ranks, welcome Luis Pérez Meliá. He is currently providing Spanish translation for kde-games and kde-client, as well as some web pages.

On a related note, we’re now mirrored by ibiblio as well, so finally a download mirror in the US is available to our users. This is not that much of an issue for tarballs, but as soon as game data is made available there (via GHNS), even users of distributor-supplied GGZ packages will start usurping some bandwidth.

19.3.2005

Multiple search providers

Categories: — josef @ 21:31

Somebody wanted to be offered a selection of search providers in the konqueror search plugin.
This is a bit nasty since the KURIFilter is normally configured only once, so we need two patches. With configuration change notification, this won’t be needed anymore.

The patches are here and here.

KDE multisearch

Savegames

Categories: — josef @ 14:50

The latest development takes place in the area of (server-side) savegames. Games are equipped with a standard way of keeping a game log or savegame on hard disk, associated with the respective match. Then, a lot of things are possible: Continuation of hard-aborted games (i.e. in the case of a server crash), game replays, and downloading/viewing the log and result on the web via GGZ Community.
It has been implemented for TTT already (what else did you expect), and chess is next, since there’s a standard format all games understand (PGN). Afterwards it’ll be the turn of GGZBoard.

17.3.2005

Kommandozeilenproblemanalyse

Categories: — josef @ 09:13

¿Warum nur ist es nach wie vor so schwierig, aufbauend auf ungepatchter Software komfortabel zu arbeiten? Der Kernel hat zwar ein wenig Unterstützung für UTF-8 in der Eingabe und Ausgabe auf virtuellen Terminals, aber ein Modell, das einfach funktioniert, hat er nicht. Stattdessen darf man folgendes zur Bootzeit im Userland erledigen:

unicode_stop
unicode_start
loadkeys de-latin1
consolechars -f lat9u-16.psf

Und auch das ist nicht perfekt, denn abgesehen von fehlenden Zeichen in dieser Schriftart gehen dabei die Akzente verloren. Jede Distro hat aber ihre eigenen Ideen und Patches, und Sonderwege sowieso.
Wer so richtig coole Sachen machen will, muss sich wohl so oder so Alternativen suchen.

15.3.2005

Networking without networking source code

Categories: — josef @ 15:38

An idea I had back in 2002 already, but only now is implemented so that it actually works:
Instead of sending bytes or strings in one application over the network and reading them in another application at the other side of the world, the protocol is given as an XML file and the corresponding source is generated from it, and included into the program. Using scripting languages, this inclusion could even be done at runtime.

Recently I played around with XSLT so the network protocol description file can be turned into a HTML file which documents the protocol. Cool stuff. Using external documentation references, this would even work for internationalized documentation, something which is not yet easily doable with doxygen, for instance.

Another advantage would be to add a debug mode. Even when using an efficient binary protocol, the generators could (on both sides) decide to spit out plain text so debugging can easily be done. In the end it could even send out itself as a protocol!

13.3.2005

Palavras pequenas, palavras apenas…

Categories: — josef @ 14:56

Nós estamos discutindo na lista da nossa LUG sobre o uso das palavras dos idiómas estranhos. Por exemplo, enquanto que no português seja comum usar correio-e em vez do e-mail, no alemão não existe essa alternative.
Que vai acontecer daqui uns anos? Uma língua cheia de palavras inglêsas? Eu não sei a resposta ainda, mas eu tento traduzir correto tudo que aparece na tela do usuário, porque eles não sabem aquelas palavras estranhas.

Geekend Resumée

Categories: — josef @ 14:45

Jede Programmiersprache, die mir über den Weg lief, hatte ihre eigene Methode, das zu tun. Das fing mit Basic an, welches ich mir über Monate, wenn nicht gar Jahre, mühsam ohne richtige Dokumentation selbst beibrachte, kam nach VB und Pascal irgendwann zu C und C++, was eine kurzfristige Umstellung aufgrund des Umstiegs auf Linux war, und nach jeder Menge Skriptsprachen ging es gestern also nun um Dylan. Ein Crashkurs von wenigen Stunden, mit beigeordneten Themen wie eine mögliche Portierung auf L4, und die gesamte Bandbreite zwischen LISP und sagen wir mal Ruby.
Das CCC-Büro war gut gefüllt, und auch wenn ich abends viel zu müde war, um noch etwas Vernünftiges tun zu können (stattdessen lief dann moon-buggy), hat es mich doch inspiriert, mal wieder meinen alten IDL-Compiler CommGen herauszukramen, der in Ruby geschrieben ist, und dort dann vielleicht irgendwann ein Dylan-Backend ranzuhängen.
Der Sprache selbst merkt man ihr Alter leider an (nur ASCII-Strings werden geparst, die existierenden einsetzbaren Programme sind sehr rar bzw. ungepflegt), aber sie füllt eine interessante Lücke.
Das Build-System von Gwydion-Dylan bräuchte dennoch eine Überarbeitung, so dass man schneller zu neuen kleineren Projekten kommen kann. Bei Ruby oder Python kann man schließlich auch gleich ‘losproggen’, ohne es aber zu müssen.

11.3.2005

Development news

Categories: — josef @ 23:30

There are several new features available in CVS already. The documentation has been updated, and a local index page is now available. Several German translations were added as well, including the API docs for libggz. The KDE core client KGGZ got some new features, but more importantly is being cleaned up internally, and the chess game Koenig does now handle local games against the AI.
Finally, a nasty crash was fixed in TelGGZ.
Join the development now!

10.3.2005

Interviews

Categories: — josef @ 14:00

Ich hatte gestern zwei Interviews auf dem Terminkalender stehen. Das eine lief mit Jonathan Riddell von kde.me.uk und wird demnächst veröffentlicht.
Das andere lief an der Uni, und nun bin ich ein Hiwi und erforsche lustige Dinge.

8.3.2005

Advertising on planetkde

Categories: — josef @ 22:44

It was found out by after thorough research that I don’t advertise my development bits enough. So here we go. Ad time! After catching up a bit in KNewStuff development, it was time to also brush up the server side of GHNS, which is commonly known as Hotstuff. For those who do not want to download the scripts and data files, there’s now a convenient repository browser which showcases all KDE applications already using KNewStuff.
In case you still don’t know what I’m talking about, check out the KDE 3.4 desktop wallpaper configuration or Quanta+ toolbar downloads.
Of course, there’s documentation for it as well.

Enough ads for today.

6.3.2005

CLT 2005 sind vorüber

Categories: — josef @ 21:42

Die Chemnitzer Linux-Tage 2005 waren vollgepackt mit Vorträgen, aber die meiste Zeit verbringt man naturgemäß mit dem Treffen von alten Bekannten und der Nachfrage, ob es denn etwas neues gebe.
Mein Vortrag war zumindest für Sonntagvormittagsverhältnisse recht gut ausgelastet, aber die Massen kamen natürlich zu Plan9, dessen Konzepte allerdings nicht sehr werbewirksam vermittelt werden konnten - dazu gehört für die meisten Zuhörer heutzutage nicht nur eine funktionelle, sondern auch hübsche GUI. Da schließe ich mich durchaus mit ein, solange der Kontext die Ersetzung von Unix-Systemen sein soll.
Neben der nicht wirklich vorhandenen Standpflicht an den (stets überlaufenen) Ständen KDE und C3D2 lief ich meist kreuz und quer zwischen NetBSD, dem Roboterstand und dem 3D-Tischtennis herum. Das Netz war recht brauchbar, die Abendveranstaltung sehr gut gelungen, und die Organisation schien sehr ruhig zu verlaufen.
Die Mitschnitte der Audioaufzeichnungen sollen laut Radio Uni-CC bereits vorliegen, sind allerdings noch nicht verlinkt.
L4-Anwendungsentwicklung

3D table tennis

Categories: — josef @ 21:29

TU Chemnitz has developed a 3D gaming environment, using OpenGL and a table tennis model. They’ve focused 5 (quite expensive) cameras on the player who wears a special data glove-like bat. The image is being projected onto the screen by two projectors with a stereo view configuration.
The system was just recently ported to Linux.
3D table tennis

2.3.2005

Cross-compilation

Categories: — josef @ 15:47

Yay for cross compilation.

clt2005@bizarre:~$ i586-pc-linux-gnu-gcc -v
Using built-in specs.
Target: i586-pc-linux-gnu
Configured with: ../gcc/configure –target=i586-pc-linux-gnu –prefix=/home/clt2005/x86-usr –enable-languages=c,c++
Thread model: posix
gcc version 4.0.0 20050302 (prerelease)

This required about 15 changes in the source code, make files and configure scripts. I also tried installing GCC 4.1pre but this failed horribly. Now on to using the compiler…

Powered by WordPress