Archiv für

Dezember, 2004

...

Linux und das Nokia 7650

kein kommentar

Nachdem ich nun seit Ende 2003 ein Nokia 7650 mein Eigen nenne, möchte ich das Gerät auch vollständig unter Linux nutzen. Und dazu gehört vor allem: Bildtransfer per IR-Schnittstelle. Da ich keine Bluetooth-Schnittstelle besitze, kann ich diese Art der Übertragung leider noch nicht wählen.

Mein System ist eine GNU Linux aka Debian (Sarge) Installation, der Chipsatz im Notebook ist ein VIA (“dmesg|grep tty” gibt als Chip NS16550A an). Installiert sind folgende Pakete:

  • irda-util 0.9.16-4
  • libopenobex 1.0.0-rel-3
  • libopenobex1 0.9.8-10
  • obexserver 1.0-3
  • openobex-apps 1.0.0-rel-4

Installation

Mein Acer Notebook ist mit einer IR-Schnittstelle ausgerüstet, die nach http://tuxmobil.org/Infrared-HOWTO/infrared-howto-c-getting-started.html auch schnell installiert ist. Es muss dazu das Modul nsc_ircc geladen werden. Keine Probleme, das Programm irdadump zeigt diese Ausgabe:

15:45:09.289469 xid:cmd 33a44284 > ffffffff S=6 s=0 (14)
15:45:09.379450 xid:cmd 33a44284 > ffffffff S=6 s=1 (14)
15:45:09.469434 xid:cmd 33a44284 > ffffffff S=6 s=2 (14)
15:45:09.559420 xid:cmd 33a44284 > ffffffff S=6 s=3 (14)
15:45:09.649397 xid:cmd 33a44284 > ffffffff S=6 s=4 (14)
15:45:09.739383 xid:cmd 33a44284 > ffffffff S=6 s=5 (14)
15:45:09.829372 xid:cmd 33a44284 > ffffffff S=6 s=* triangulum hint=4400 [ Computer LAN Access ] (26)
15:45:12.289007 xid:cmd 33a44284 > ffffffff S=6 s=0 (14)
15:45:12.378988 xid:cmd 33a44284 > ffffffff S=6 s=1 (14)
15:45:12.468972 xid:cmd 33a44284 > ffffffff S=6 s=2 (14)
15:45:12.558961 xid:cmd 33a44284 > ffffffff S=6 s=3 (14)
15:45:12.648944 xid:cmd 33a44284 > ffffffff S=6 s=4 (14)
15:45:12.738932 xid:cmd 33a44284 > ffffffff S=6 s=5 (14)
15:45:12.828922 xid:cmd 33a44284 > ffffffff S=6 s=* triangulum hint=4400 [ Computer LAN Access ] (26)

Damit scheint die IR-Schnittstelle zu funktionieren und sie sucht nun automatisch nach Geräten in Reichweite.

UPDATE: Leider habe ich vergessen, der Ausgabe von dmesg mehr Beachtung zu schenken. Daher gingen folgende Zeilen erst einmal unter:

nsc-ircc, Found chip at base=0x02e
nsc-ircc, driver loaded (Dag Brattli)
nsc_ircc_open(), can't get iobase of 0x2f8

Offensichtlich hat das Modul nsc_ircc als Standardadresse die 0×2f8 eingestellt, wobei die eingebaute IRDA-Schnittstelle auf Adresse 0×02e ansprechbar ist. Das Modul-Paramater “io=0×02e” hat diesen Fehler behoben. dmesg gibt anschliessend folgende Meldung aus:

nsc-ircc, Found chip at base=0x02e
nsc-ircc, Wrong chip version f0

Damit gehen die Probleme weiter. Der Chipsatz wird nicht erkannt. Eine ausgiebige Suche bei Google hat nur den Newsartikel lxpatch.v2.2patch-2.2.15.pt047.39114A35@marvin.avc-online.de zutage gebracht, anscheinend ein Patch für Kernel 2.2.

Weitere Programme

Das Mini-HOWTO http://skora.net/download/linux-7650-howto empfiehlt die Installation von OpenOBEX und p3nfs. Ausserdem habe ich natürlich die irda-utils installiert.

Leider meldet sich das Handy nicht bei der IR, die Ausgabe von irdadump bleibt immer gleich. Auch ein schnelles irxfer bricht nach dem Timeout mit der Meldung

Verbindung kann nicht hergestellt werden

ab. Wenn jemand mehr Glück mit der IR-Verbindung hatte, dann schreibt mir bitte.

Mehr zum Thema Linux und Laptops gibt es auf http://tuxmobil.org/.

Programmieren einer Statuszeile

Kommentare deaktiviert

Wer kennt Statuszeilen noch nicht? Schaut einfach mal an den unteren Rand eures Browserfensters, dort sollte schon eine Zeile zu finden sein, in der aktuelle Informationen angezeigt werden. Dort steht z.B. die URL, die Uhrzeit (bei alten Programmen) oder einfach ein “Fertig”. Diese Statuszeile informiert den Anwender über den aktuellen Stand des Programms. Sie gibt eine textuelle oder grafische Rückmeldung, dass überhaupt noch etwas passiert oder das eine Aktion (hoffentlich erfolgreich) abgeschlossen wurde.

Wie wird so eine Statuszeile unter Java programmiert? Ich möchte hier einen Vorschlag machen, der im Moment als Anregung verstanden werden sollte. Das Beispiel ist nicht vollständig.

public class StatusBar extends JPanel {
    public StatusBar() {
        setLayout(new GridBagLayout());
        setBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED));
    }

    public StatusBar(int fields) {
        this();

        GridBagConstraints gbc = new GridBagConstraints();
        gbc.fill = GridBagConstraints.HORIZONTAL;
        gbc.weightx = 1.0;

        for(int i = 0;i < fields;i++) {
            gbc.weightx = (long) i;
            add(new JLabel("Field " + i), gbc, i);
        }
    }

    public void setField(int index, GridBagConstraints gbc) {
        // get the component
        Component c = getComponent(index);
        //overwrite old with new Con
        add(c, gbc, index);
    }

    /**
     * Set the text of this field.
     *
     * @param index
     * @param msg
     */
    public void setText(int index, String msg) {
        try {
            Component c = getComponent(index);

            if(c instanceof JLabel) {
                ((JLabel) c).setText(msg);
            } else {
                c = new JLabel(msg);
                add(c, index);
            }
    }

Der Knackpunkt dieses Quelltextes ist die Anordnung der Felder. Durch die GridBagConstraints kann man sie größer, kleiner und ausfüllend erzeugen. Die Schleife im Konstruktor erzeugt eine Anzahl von Feldern, die nach hinten immer mehr Platz beanspruchen. Das sei nur als kleine Demonstration verstanden, eine sinnvolle Anordnung sollte sich natürlich nach der Priorität und der Darstellung der Informationen richten und nicht wahllos die verfügbare Breite des Bildschirms aufteilen.

Wünschenswert ist natürlich eine freie Anordnung, so dass z.B. das erste Feld seine Größe ändern und die letzten 2 oder 3 Felder nur ein Minimum an Breite beanspruchen. So können grafische Rückmeldungen z.B. über Verbindungsstatus sehr platzsparend und gleichzeitig längere Textausgaben im ersten Feld als Erklärungen angezeigt werden. Die Methode setField(int index, GridBagConstraints gbc) setzt z.B. die Constraints für ein bestehendes Feld und kann so die Anordnung auch zur Laufzeit verändern. Ob dieses Verhalten dem Benutzer bei dem Wiederfinden von Informationen hilft, sei dahingestellt. Einfacher ist eine statische Anordnung der Felder und das Anzeigen der Informationen an wiederkehrenden Stellen.

Die Methode setText(int index, String msg) dient dazu, in einmal erzeugten Feldern einen Text anzuzeigen. Die Methode kann natürlich auch für die Verwendung von JLabels überschrieben werden, so dass nun auch Bilder angezeigt werden können.

Kommentare deaktiviert

JDesktop Integration Components

Kommentare deaktiviert

java.net: Introducing JDesktop Integration Components, Part 1
If you have been a Java developer for a while you may have had the experience of being told that Java can’t do everything that native C can. You may have struggled with the HMTLEditor pane while Windows developers down the hall embed Internet Explorer into their programs with just a few lines of code. I’ll admit it: as great as Java is, there are times I long for the features and system access of native programming. Well, we don’t have to wait any longer.

Joshua Marinacci schreibt in seinem Weblog über die neuen JDesktop Integration Components, die einfachen Zugriff auf Desktop-Funktionen wie z.B. Öffnen einer URL im Browser oder Darstellung eines Taskbar-Icons erlauben sollen. Die Beispiele in seinem Artikel sind windows-basiert, aber es sollte mit den Komponenten auch möglich sein, die Freedesktop-Taskbar anzusteuern. Wenn erst einmal eine Bibliothek dafür zur Verfügung steht, kann man z.B. eine URL auf diese Weise im Browser öffnen:


import org.jdesktop.jdic.desktop.*;
import java.net.*;

public class DesktopTest {
public static void main(String[] args) throws Exception {
Desktop.browse(new URL("http://www.yahoo.com/"));
}
}

Kommentare deaktiviert

Apache, PHP und MySQL

Kommentare deaktiviert

Heute habe ich die drei Komponenten Apache, PHP und MySQL auf meinem Rechner installiert, um eine kleine Rezeptverwaltung zu skripten. Ich habe erst überlegt, ob ich das ganze in JavaServer Pages erstellen sollte, habe mich aber dann dagegen entschieden. Als erster Grund ist dabei mein schwachbrüstiger Server zu nennen, auf dem schon eine Java-Maschine (JDK5.0) läuft und der nicht viel mehr verkraftet. Apache, PHP und MySQL laufen eh’ schon, warum also noch einen Tomcat-Server installieren…?

In der nächsten Zeit werde ich versuchen, eine einfache Oberfläche für die Eingabe und die Verwaltung von Rezepten und Metainformationen zu erstellen. Dazu möchte ich die Template Engine Smarty verwenden, die ich mit dem – weniger bekannten – Paketmanager PEAR installiert habe. Alles gibt es bei Debian natürlich als fertige Pakete, also birgt die Installation keine Risiken.

Kommentare deaktiviert