Friday, 26. March 2004 Week 13

Kochsche Kurve

Heute haben wir im Java-Programmieren mit GUI-Programmierung angefangen. Die Exercices waren simpel (Buttons erzeugen, ausrichten etc.), jedoch hatte es als Zusatzaufgabe noch die Kochsche Kurve.

Kochsche Kurve



import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

/**
 *  Kochsche Kurve
 *
 * @author     Andreas Jaggi
 * @created    26. März 2004
 * @version    1.0
 */

public class KochscheKurve
                 extends JFrame {
        /**
         *  Constructor for the KochscheKurve object
         */
        public KochscheKurve() {
                setSize( 600, 600 );
                setTitle( "Die Kochsche Kurve" );
        }


        /**
         *  Überladene "interne" Methode, die aufgerufen wird, wenn das Fenster neu
         *  gezeichnet werden muss
         *
         * @param  g  Graphik-Objekt, auf dem gezeichnet wird
         */
        public void paint( Graphics g ) {
                super.paint( g );

                double  x1;
                double  x2;
                double  x3;
                double  y1;
                double  y2;
                double  y3;
                int     depth  = 13;

                x1 = 100;
                y1 = 400;
                x2 = 500;
                y2 = 400;
                x3 = ( x2 - x1 ) * Math.cos( -Math.PI / 3 ) -
                                ( y2 - y1 ) * Math.sin( -Math.PI / 3 ) + x1;
                y3 = ( x2 - x1 ) * Math.sin( -Math.PI / 3 ) +
                                ( y2 - y1 ) * Math.cos( -Math.PI / 3 ) + y1;

                koch( g, depth, x2, y2, x1, y1 );
                koch( g, depth, x1, y1, x3, y3 );
                koch( g, depth, x3, y3, x2, y2 );
        }


        /**
         *  Rekursive Funktion, welche den Fraktal zwischen zwei Punkten bis zu einer
         *  bestimmten Tiefe zeichnet.
         *
         * @param  g      Graphik-Objekt, auf dem gezeichnet wird
         * @param  depth  Rekursionstiefe
         * @param  x1     X-Koordinate des ersten Punktes
         * @param  y1     Y-Koordinate des ersten Punktes
         * @param  x2     X-Koordinate des zweiten Punktes
         * @param  y2     X-Koordinate des zweiten Punktes
         */
        public void koch( Graphics g, int depth, double x1, double y1, double x2,
                        double y2 ) {
                double  x13  = x1 + ( x2 - x1 ) / 3.0;
                double  x23  = x1 + 2.0 * ( x2 - x1 ) / 3.0;

                double  y13  = y1 + ( y2 - y1 ) / 3.0;
                double  y23  = y1 + 2.0 * ( y2 - y1 ) / 3.0;

                double  xd   = ( x23 - x13 ) * Math.cos( -Math.PI / 3 ) -
                                ( y23 - y13 ) * Math.sin( -Math.PI / 3 ) + x13;
                double  yd   = ( x23 - x13 ) * Math.sin( -Math.PI / 3 ) +
                                ( y23 - y13 ) * Math.cos( -Math.PI / 3 ) + y13;

                if ( depth > 0 ) {
                        koch( g, depth - 1, x1, y1, x13, y13 );
                        koch( g, depth - 1, x13, y13, xd, yd );
                        koch( g, depth - 1, xd, yd, x23, y23 );
                        koch( g, depth - 1, x23, y23, x2, y2 );
                } else {
                        g.drawLine( (int) x1, (int) y1, (int) x2, (int) y2 );
                }
        }


        /**
         *  The main program for the KochscheKurve class
         *
         * @param  args  The command line arguments
         */
        public static void main( String[] args ) {
                KochscheKurve  graf  = new KochscheKurve();

                graf.setVisible( true );

                graf.addWindowListener(
                        new WindowAdapter() {
                                public void windowClosing( WindowEvent e ) {
                                        System.exit( 0 );
                                }
                        }
                                 );

        }

}
Sunday, 14. March 2004 Week 11

Rechnen mit CSS

Im Stylesheet dieser Seite findet sich unter anderem folgende Styledefinition:

#rechts li a {
	display: block;
	border-bottom: 1px solid #FFFFFF;
	width: 100% - 30px;
	padding-left: 30px;
}

Diese macht, dass die Links im rechten Submenu auf der ganzen Breite funktionieren und nicht nur wenn man auf den Text klickt.
Zuerst hatte ich die Weite auf 100% gesetzt. Jedoch hat der Mozilla wegen der 30px Padding noch 30px ausserhalb des Rahmens angezeigt. Mit overflow: hidden habe ich versucht das Problem zu lösen. Jedoch hat das nicht funktioniert, da es ja kein eigentlicher overflow ist.
Schlussendlich bin ich durch ausprobieren von garantiert fehlerhaften Styledefinitionen auf die jetztige Lösung gekommen. Natürlich validiert das nun nicht mehr als korrektes CSS, aber es funktioniert :-)

Da ich nun keine Windows-Maschine mehr habe, wäre ich froh um Screenshots vom Submenu, wenn mit der Maus über ein Link gefahren wird (a:hover).

x-log, trashed again

"Am liebsten erinnere ich mich an die Zukunft."

Salvador Dalí (1904-1989), span. surrealist. Maler

Wie schon angekündigt, habe ich während den Semesterferien die PHP-Scripts, welche hier im Hintergrund ihre Arbeit tun, neu geschrieben. Bisher sind noch nicht alle Funktionen der alten Version implementiert. Es werden jedoch laufend neue Funktionen hinzugefügt.
Mit dem alten Script verschwinden auch die alten Layouts, da hier nun ein neues Template-System werkelt. Aber keine Angst es werden neue Layouts kommen, denn dieser graue Kasten gefällt mir schon jetzt nicht mehr.

Sunday, 29. February 2004 Week 9

PHP Literatur

Schon nur weil ich am heutigen Datum erst wieder in 4 Jahren was schreiben kann, muss dieser Eintrag hier sein ;-)
Aber auch weil ich durch die Lektüre folgender Artikel zu einem Rewrite (ja, from Scratch) von meinem Weblog motiviert worden bin. Insbesondere hat mich der Artikel über Template Engines beeindruck, da hier mit einer völlig anderen Ansicht an das Problem herangegangen wird, als ich es bisher getan habe. An dieser Stelle wäre es natürlich interessant zu wissen wie andere Leute ihre Templates handhaben.

how to write better code
A Few Tips for Writing Useful Libraries in PHP
Template Engines
Functional Specification Tutorial
Monday, 23. February 2004 Week 9

Pinguinfunk

Da es für die im PowerBook eingebaute Airport Extreme WLAN-Karte (Broadcom) keine Linuxtreiber gibt, habe ich vor ein paar Wochen eine Netgear MA401RA günstig erworben (ist ein Auslaufmodell). Für diese hat es im Kernel selbst Treiber.

Um PCMCIA aufm PowerBook zum Laufen zu bringen benötigte es eine spezielle config.opts. Nun funktioniert die drahtlose Verbindung problemlos. Jedoch unterstützen die Treiber des Kernels den Monitor-Modus nicht, welcher für Spielereien wie Kismet, wellenreiter etc. benötigt wird. Um diesen Modus nützen zu können müssen zuerst die Treiber gepatcht werden (der Patch funktioniert partiel auch für 2.6.1 und 2.6.3 Kernel).
Dazu einfach den Patch ins Verzeichnis /usr/src/linux/drivers/net/wireless/ kopieren und dort folgenden Befehl ausführen: patch -p4 < orinoco-0.13e-2.6.2-patch.diff

Dummerweise schneits draussen und ich bin erkältet, so dass ich nicht spielen gehen kann :-(
Saturday, 21. February 2004 Week 8

Sco vs. Linux

Zehn kleine UNIX Zeilen
Reicht man ein zur Klage.
Die eine die auf griechisch war,
War leider viel zu vage.

Neun kleine UNIX Zeilen
Sollten es begründen.
Die eine war trotz größter Müh'
In LINUX nicht zu finden.

Acht kleine UNIX Zeilen
Dienten zum Beweise.
Die eine war aus BSD,
Pech für Anwalt Heise.

Sieben kleine UNIX Zeilen,
Kamen vor Gericht.
Die eine war 'ne Fehlernummer,
Die taugte dazu nicht.

Sechs kleine UNIX Zeilen,
Sollten es belegen.
Doch eine kam zur GPL
Durch SCO Kollegen.

Fünf kleine UNIX Zeilen
Waren noch dabei.
Die eine kam von einem Band
Mit Aufschrift System Drei.

Vier kleine UNIX Zeilen,
Doch eine, sonderbar,
Gehörte nicht zum dem Programm,
Sie war ein Kommentar.

Drei Kleine UNIX Zeilen,
Waren das Problem.
Eine war zwar System Five,
Doch kam von IBM.

Zwei kleine UNIX Zeilen,
Waren noch geblieben.
Die eine war schon reichlich alt
Und kam von System Sieben.

Eine kleine UNIX Zeile
Wurde angeführt.
Die hatte Linus Torvalds selbst
Am Anfang programmiert.

Ohne eine UNIX Zeile
Kann SCO nichts machen.
Doch eines muss man zugestehn:
Wir hatten was zu lachen.

Schlussbemerkung:
Hier zeigt sehr schön ein Kinderlied,
Warum McBride die Wahrheit mied.


Ausm heise online-Leserforum via vowe.net
Monday, 16. February 2004 Week 8
Wednesday, 11. February 2004 Week 7