Software-Tipp: Geany - Texteditor für Entwickler

Einfache Texteditoren gibt es ja wie Sand am Meer. Für richtige Projekte gibt es Entwicklungsumgebungen wie Eclipse. Und genau dazwischen gibt es die erweiterten Editoren mit rudimentären Entwickler-Funktionen. Sie haben Syntax-Highlighting für viele Sprachen, ein bisschen Code-Vervollständigung, Templates, Scripting, Compiler-Integration & Co. Geany ist ein solcher. Er basiert auf GTK. Und ich frage mich, wie ich den all die Jahre übersehen konnte. Er startet in unter einer(!) Sekunde (was ich bei so einem Editor für sehr wichtig halte, sonst könnte ich ja auch gleich die IDE nehmen), hat eine aufgeräumte dreigeteilte Oberfläche, ist umfangreich konfigurierbar, kann die Funktionen und Members der offenen Quellcode-Datei links in der "Symbols"-View anzeigen und ... vieles mehr ;)
Für alle relevanten Distributionen gibt es fertige Pakete, selbst für Windows.

Ich habe im Laufe der Zeit wirklich viele solcher Editoren ausprobiert, so wie Geany hat mich aber noch keiner auf Anhieb überzeugt. Und er erinnert mich an meinen MED Editor von früher ;)

Grafiktablett Perixx Peritab-301 unter OpenSuSE 11.2

Malen auf 'nem 12"-Tablet macht total Spass - danke an der Stelle an Tobias ;)
Die Einrichtung war - linux-typisch - recht holprig. Das Gerät wird zwar via Hotplug erkannt, der Mauszeiger lässt sich auch bewegen. Aber klicken und malen ging nicht. Zumindest meine - nicht mehr ganz aktuelle - Distribution erkannte es als generische Maus. Es fehlte also der konkrete Treiber. Wenn man jetzt anfängt, ganz allgemein nach "tablet linux" zu googlen, wird man durch die vielen Treffer in Foren und Anleitungen schnell in die Irre geführt und probiert dann ziellos rum.
"Grafiktablett Perixx Peritab-301 unter OpenSuSE 11.2" vollständig lesen

Canon LiDE 50 unter OpenSuSE 11.2

Unter SuSE 11.0 ging der Scanner noch problemlos, mit meiner jetzigen 11.2 nicht mehr. "libusb" hatte damals noch die Version 0.1.12. Inzwischen ist es 1.0. Da sich hierbei die API geändert hat, gibt es zwar eine libusb-compat-0.1, welche die 0.1er Aufrufe auf libusb-1.0 mappt. Aber das funktioniert mit Sane trotzdem nicht. Ich habe nun einige Kombinationen durchprobiert und bin letztlich bei genau der gelandet, die in SuSE 11 noch verwendet wurde. sane-backends-1.0.19 und libusb-0.1.12. Also hab ich mir erstmal die aktuellen Versionen von libusb-1_0, libusb-0_1, sane-backends, sane-frontends und xsane von SuSE installiert - die RPMs direkt von der 11.2. Danach den Source der alten Versionen von Sane und libusb gezogen und händisch compiliert:
tar xvzf libusb-0.1.12.tar.gz
cd libusb-0.1.12/
./configure --prefix=/usr
make
sudo make install
tar xvzf sane-backends-1.0.19.tar.gz 
cd sane-backends-1.0.19/
./configure --prefix=/usr --sysconfdir=/etc
make
sudo make install
Das überschreibt die Dateien aus den RPMs von sane-backends und libusb-0_1. Nicht schön, aber funktioniert.

PS: Aufpassen, dass die devel-Pakete libusb-1_0-devel und libusb-compat-devel nicht installiert sind - sonst wird beim Compilieren wieder gegen die neuen Versionen gelinkt.

Freitag ist Linuxtag

Ich bin am Freitag in Berlin auf dem Linuxtag. Um 12:30 will ich mir auf jeden Fall den Vortrag Sicherheit bei elektronischen Bankgeschäften von Walter Roth (Autor von Moneypenny) anschauen. Er will wohl auch Hibiscus vorstellen. Falls ihr mich treffen wollt, schickt mir einfach eine Mail (die lese ich auch auf dem Handy). Ich werde zwar keine Rose im Knopfloch tragen - aber ihr erkennt mich sicher auch an meiner Größe ;)

Aussentemperaturen auf dem Desktop

Ich will die Messwerte meiner Heizung ja immer im Blick haben. Unter KDE4 hatte ich hierzu das Web-Snippet-Plasmoid mit der Status-Seite des Sensor-Plugins auf den Desktop gelegt. Zur Zeit nutze ich aber XFCE - ohne Plasma. Also hab ich "jameica.sensors" noch um einen REST-Service erweitert, mit dem man einzelne Messwerte abfragen kann und mir folgendes kleines Shell-Script geschrieben:
#!/bin/bash

URL="http://server:8080/webadmin/rest/sensors/value"

getTemp() {
  echo -n "$1: "`wget -q -O - $URL/$2 | sed 's/ °C//'`"   "
}

getTemp "Aussen" "waterkotte.ai1.wpcu.device.temp.outdoor.current"
getTemp "Wasser" "waterkotte.ai1.wpcu.device.temp.water.real"
getTemp "Quelle" "waterkotte.ai1.wpcu.device.temp.system.source.in"
echo ""
Das wird vom Genmon-Plugin alle paar Minuten ausgeführt und zeigt mir die aktuellen Werte direkt im Panel an. Gefällt mir eigentlich besser als die Plasma-Variante ;)

PS: Das "°C" ersetze ich, weil das Panel-Plugin das Grad-Symbol nicht richtig anzeigt.

Update: Das Genmon-Plugin erwartet die Daten in UTF8-Encoding, der REST-Service liefert aber ISO-8859-1. Ein
uniconv -decode iso-8859-1 -encode utf-8
statt des "sed"-Aufrufes codiert das "°"-Zeichen nun korrekt. Speichert man nun noch das Shell-Script mit UTF-Encoding ab, werden auch die Label ("Außen" statt "Aussen") mit korrekten Umlauten angezeigt.

Erste Daten von der Heizung

Ich schrieb ja letztens, dass ich mit dem Home-Server die Messwerte der Heizungsanlage auslesen wollte. Durch den Umzug des Rechners in den Heizungsraum ist sämtliches Gebastel mit RS232-nach-USB- und USB-over-Ethernet-Adaptern überflüssig geworden und ich konnte ein good old Nullmodem-Kabel nehmen (gibts tatsächlich noch direkt von Amazon). Da ich mangels passendem Betriebssystem nicht die Originalsoftware vom Hersteller nehmen kann, hab ich mit Olivers Java-Implementierung gebastelt. Beim Mitschneiden der Daten vom original Serviceprogramm hab ich aber festgestellt, dass das bei mir verbaute Steuergerät "WPCU.C" eine völlig andere Sprache spricht, als das "Resümat CD4" von Oliver. Mist.

Also hab ich die Config- und Programmdateien des Serviceprogramms nach Informationen zum Schnittstellen-Protokoll durchwühlt. "modbus/app.xml" brachte mich der Lösung näher. Dort sind alle abfragbaren Parameter mit Typ, Offset, Länge (Anzahl der Bytes) und Bezeichnung aufgelistet. Leider kann ich mit den Offset-Angaben bisher noch nichts anfangen - die Werte sind für Byte-Counts einfach viel zu groß.

Der Begriff "modbus" brachte den erhofften Knick in der Lernkurve. Das ist ein offenes Protokoll - und der Quasi-Standard bei der Kommunikation mit Mess- und Regelsystemen. Cool. Ich mag offene Standards.

Ein paar Goggle-Treffer später fand ich mit QModBus sogar eine QT-GUI dafür. Mit dessen Comboboxen kann ich bequem genau den Request zusammenklicken, den auch die Original-Software geschickt hat. Scheint also richtig zu sein. Der Function-Code lautet "Read Holding Registers (0x03)". Klick auf "Send". Es kommen tatsächlich Werte zurück. In den ersten 6 Registern kann man prima Uhrzeit und Datum (58:16:11 31.06.109 5 = 31.07.2009 11:16:58, 5. Tag der Woche) erkennen. Mich packt der Ehrgeiz, ich klick in dem Tool rum und sende hektisch das Kommando "Write Multiple Registers" mit start-address=1 und num-of-coils=100 an die Anlage. 1 Sekunde später: Scheisse! Nicht Write! Hab ich jetzt die komplette Anlagen-Config mit Nullen überschrieben? Ich renne in den Heizraum. Die Uhrzeit am Display steht auf 00:00:45. Mir läuft kalte Panik den Rücken runter. Ich klicke mit den Softkeys alle Parameter durch. Mhh. Datum ist noch korrekt. Und auch alle anderen Parameter scheinen noch richtig zu sein. Habe sie inzwischen mit den Werksvorgaben aus dem Handbuch verglichen. Alles richtig. Das Write-Kommando werde ich auf jeden Fall nie wieder verwenden.

Mit jamod habe ich nun auch eine 100%-Java-Implementierung gefunden. Die API sieht sehr komfortabel aus. Prima - keine Bit-Schieberei nötig. Wenn ich jetzt noch rausfinde, wie die Offset-Angaben in app.xml zu verstehen sind, kann ich mir eine Anwendung bauen, die alle Register einfach aus der XML-Datei liest. Ein prima Projekt für die Wintermonate. Dumm nur, dass gerade Sommer ist ;)

Linux überall

Mein Stubenserver musste leider in den Hauswirtschaftsraum verbannt werden. Dort soll er (neben seinen bisherigen Aufgaben) die Messdaten der Wärmepumpe per seriellem Kabel auslesen und in einer Datenbank sammeln. Um trotzdem Filme vom Server auf dem TV abspielen zu können, hab ich mir eine TrekStor MovieStation Antarius gekauft. Eine richtige Fernbedienung ist ohnehin komfortabler als ein Schnurlos-Keyboard. Sie hat keine lokale Festplatte sondern holt sich das Film-Material vom Server. UPnP oder Mediacenter-Zeug ist dafür (im Gegensatz zu fast allen anderen Mediaplayern) nicht nötig. Sie besitzt einen SMB-Client und kann daher direkt auf den Samba-Daemon zugreifen.

Gleich mal noch die aktuelle Firmware runtergeladen. Huch, die enthaltene "install.img" ist eine TAR-Datei. Und was ist drin? Ne BusyBox ;) Die werd ich doch gleich mal patchen und mir noch einen SSH-Daemon dazu packen.

Update 1: Im Gentoo-Forum hat schon jemand den Inhalt der Firmware aufgelistet.

Update 2: Das mit dem SSHD kann ich mir schenken - auf der Kiste läuft schon ein Telnetd. Keine Verschlüsselung. Na und. Ist eh kein Passwort definiert. Und sie steht im LAN. Oh, und ein HTTPD läuft auch. Ha, "http://$host/cgi-bin/webtorrent.cgi" liefert mir die Meldung "Torrent client is not running". Die Kiste gefällt mir immer mehr - das ja ist quasi ne NSLU2 - aber mit Multimediafähigkeit und Fernbedienung.

Gemeinsames Backend für KWallet und Gnome Keyring

Cool, auf dem Desktop Summit haben sich die Entwickler der beiden Wallet-Systeme darauf verständigt, eine gemeinsame API für das Speichern von Accounts und Passwörtern umzusetzen. Wenn dann irgendwann noch beide Desktops die PIM-Daten mittels Akonadi speichern, sind nahezu alle Benutzerdaten Desktop-unabhängig. Egal, ob man sich an Gnome oder KDE anmeldet - überall die selben Daten. Und keine Redundanzen.

Apropos Dual-Head

Falls ihr eine Nvidia-Grafikkarte habt und den proprietären "nvidia"-Treiber (also nicht "nv") nutzt: Versucht gar nicht erst, Dual-Head manuell in xorg.conf einzurichten. Mich hat es vergeblich graue Haare gekostet - insb. wenn man es mit Xinerama versucht. Stattdessen einfach das vom Nvidia-Treiber mitgelieferte GUI-Tool "nvidia-settings" starten, dort die gewünschten Einstellungen zusammenklicken, xorg.conf abspeichern. Fertig.
Ich muss mir langsam wirklich wieder die Klicki-Bunti-Windows-Denke angewöhnen ;)

Button-Reihenfolge in GTK-Anwendungen umdrehen

Eine Sache, die mich in GTK-Anwendungen ja schon immer latent genervt hat, ist die Anordnung der Buttons in Dialogen (Cancel-Button links, OK-Button rechts). In KDE ist das per Default andersrum. Keine Ahnung, welche Variante die ergonomischere ist - es gibt sicher bei beiden Vor- und Nachteile. Ich bin halt die KDE-Anordnung gewöhnt. Auf den Gedanken, die Anordnung in GTK ändern zu können, bin ich irgendwie gar nicht gekommen. Geht aber. Gefunden in den Eclipse 3.5 M6 News. Folgendes in "~/.gtkrc-2.0" (oder ggf. "~/.gtkrc-2.0-kde") eintragen:
gtk-alternative-button-order=1
Ganz einfach.

OpenSuSE 11 + Cyrus + IMAP + saslauthd + PAM

Notiz für mich: Damit Cyrus via saslauthd gegen PAM authentifizieren kann, tat Folgendes in /etc/imapd.conf the trick:
allowplaintext: yes
sasl_pwcheck_method: saslauthd
Der Parameter ist wohl entweder neu hinzugekommen oder der Default-Wert hat sich in SuSE 11 geändert.

VFAT + rsync + DATEINAM.EN

VFAT kann unter Linux bizarre Seiteneffekte erzeugen, wenn es mit der Option "shortname=lower" gemountet ist. Dateinamen und Verzeichnisse, die nur Grossbuchstaben enthalten und der 8.3-Konvention entsprechen, werden dann automatisch in Kleinbuchstaben umgewandelt. Das ist nicht witzig, wenn man ein Projektverzeichnis synchronisieren will, welches z.Bsp. "WEB-INF" und "META-INF" enthält. "shortname=mixed" löst das Problem. Eigentlich. Denn inzwischen werden USB-Sticks ja nicht mehr in /etc/fstab eingetragen sondern via UDEV-Voodoo gemountet. Also wo die Option ändern? Ich habe keine Ahnung, aber "Windows-Denke" hat mich diesmal weitergebracht. Nicht durch /etc greppen sondern Rechtklick auf das Desktop-Icon des USB-Sticks (KDE 3.5), dann "Properties"->"Mounting", dort "Short names" auf "mixed" setzen. Fertig. Und ja, die Einstellung bleibt auch bis zum nächsten Anstecken des Sticks erhalten ;)
Auf http://www.pro-linux.de/t_system/vfat-tipps.html finden sich weitere Tipps zu diesem FS.