kleine Software-Projekte

Funktion

Der ursprüngliche Zweck war es, zu prüfen, ob das aktuelle Datum ein Wochenende, Feiertag, Urlaub oder Arbeitstag ist (abhängig davon habe ich zu Zeiten, als es noch keine Flatrates gab und nur ein paar MB für das Postfach verfügbar waren, z. B. gesteuert, wann und wie oft Mails geholt werden). Das Programm ist also uralt ;-). Ein Problem dabei sind immer wieder die Feiertage. Ich stieß auf das Perl-Modul Date::Pcalc, welches in Bezug auf Datumsberechnungen eigentlich keine Wünsche offen lässt. Das entstandene Perl-Script check_day.pl kann ein wenig mehr (Infos zu einem Datum ausgeben, einen Kalender im XML-Format generieren), zu erfragen mit check_day.pl -h.

Installation

Das tar-File check_date.tgz muss entpackt werden:

  tar xvzf check_date.tgz
Anschliessend sollten die Dateien check_day.pl und jtXml.pm in ein für alle im Pfad liegendes Verzeichnis kopiert werden, z. B. nach
/usr/local/bin/check_day.pl
/usr/local/lib/jtXml.pm
Wenn das nicht gewollt ist, muss der Pfad in der use lib "/usr/local/lib"-Anweisung (Zeile 11) in check_day.pl entsprechend angepasst werden.

Zum Ablauf ist das Modul Date::Pcalc von CPAN zu installieren.

Download

check_date.tgz

ToDo

Das Script ist mittlerweile sehr in die Jahre gekommen, es widerspiegelt meinen damaligen Perl-Kenntnisstand. Ich möchte es eigentlich gerne mal generalüberholen und auf einen aktuellen Stand bringen. Die Darstellung per XML und XSL klappte damals leider nur im IE. Da ich nicht auf die Browserhersteller warten will, soll auch noch eine HTML-/CSS-Ausgabe dazukommen. Schön wären dann noch eine saubere Dokumentation, der Einsatz eines richtigen XML-Parsers anstelle meines Moduls und eine vernünftige Installation.

Funktion

Das Script findet sowohl Symlinks, deren Ziel nicht (mehr) existiert, als auch Endlos-Schleifen (ein Link zeigt direkt oder indirekt wieder auf sich selbst). Es gibt einige Dateinamen, mit denen es nicht klarkommt bzw. mit denen ich es nicht getestet habe (Pipe-Zeichen, Newline, ...).

Download

dead_symlinks.tgz

Das - ist - das - Haus - vom - Ni-ko-laus

Ich saß mal wieder abends gelangweilt im Hotel rum, Weihnachten rückte näher und ein Tässchen Glühwein hatte ich wohl auch schon vertilgt, da kam mir das Nikolaus-Haus in den Sinn.
Kennt Ihr das Spielchen? Ohne Absetzen und ohne eine Linie mehr als einmal zu zeichnen, muss das Haus vom Nikolaus entstehen (hier mal in ASCII-Art):

          A
         / \
        /   \
       B-----C
       |\   /|
       | \ / |
       |  X  |
       | / \ |
       |/   \|
       D-----E
    

Ich überlegte mir, wie viele Möglichkeiten es wohl dafür gibt. Im Prinzip handelt es sich hier um eine simple Variante des Vertreter- oder Postboten-Problems, nämlich ein Netz von Strecken abzulaufen, ohne ein Haus auszulassen oder eine Strecke mehrmals laufen zu müssen.

Das Ergebnis ist hier zu bewundern. Es handelt sich um ein kleines C-Programm, das die Ergebnisse als Streckenplan ausgibt (also z. B. D -> C -> B -> A -> C -> E -> D -> B -> E). Nein, ich verrate nicht, wieviele das sind ;-)

Das Programm arbeitet fast ausschließlich mit dynamisch allozierten Datenstrukturen und verketteten Listen. Die Wegeprüfung erfolgt in einer rekursiv arbeitenden Funktion. Übrigens: Wenn Ihr wissen wollt, wie viele Wege es gibt, dann ruft das Programm wie folgt auf:
nikohaus | wc -l.

Kompilieren

Das Kompilieren geht sehr schnell:

  gcc -o nikohaus nikohaus.c
oder einfach
  make nikohaus
Ich habe es auf Linux 2.2.14 mit gcc 2.95.2, Linux 2.4.18 mit gcc 2.95.3, Reliant Unix 5.43 sowie unter W2K mit VC++ 6.0 (einfach ein kleines Konsolenprojekt erzeugen) getestet.

Download

nikohaus.tgz

Entstehung

Die nachfolgend beschriebenen Scripts dienen zur Vereinfachung der Verwaltung größerer Mengen von Benutzern. Sie entstanden auf eine Anfrage bei den PingoS hin und basieren auf Scripts, die ich im Jahre 2000 für eine Hamburger Schule gebaut habe. Sie sollen vor allem die typische Arbeit beim Konfigurieren des Servers für ganze Klassen erleichtern.
Alle Scripts sind mit den Distributionen SuSE 8.0 sowie Debian 3.0 getestet. Zum Generieren der Passwörter wird der Befehl makepasswd benötigt. Dieser ist im Paket pwgen (SuSE) bzw. makepasswd (Debian) enthalten und muss ggf. nachinstalliert werden.

Funktion

Das Archiv users.tgz enthält eine Datei README.txt, in der ausführlichere Informationen über die Möglichkeiten der einzelnen Scripts vorhanden sind.
add_users.sh: Damit ist das Anlegen von Benutzern aus den Daten einer Textdatei (die die Vor- und Nachnamen enthält) möglich. Die Benutzernamen werden aus den Namensbestandteilen ermittelt, ein zufälliges Passwort wird generiert.
del_users.sh: Erlaubt das Löschen von Benutzern oder Benutzergruppen.
new_passwd.sh: Generiert für die angegebenen Benutzer neue Zufalls-Passwörter.
move_users.sh: Verschiebt Benutzer in eine neue Gruppe.

Download

users.tgz

Installation

Nach dem Download muss das Archiv in einem beliebigen Verzeichnis extrahiert werden:

  tar xvzf users.tgz
Dann ist im Verzeichnis user_scripts die Datei README.txt mit weiteren Informationen zu finden.

Entstehung

Das Script ist - wie viele andere auch - aus einer Anfrage in einer Linux-Mailingliste heraus entstanden. Und wie oft hat sich die endgültige Form nach einer fruchtbaren Diskussion (hier mit David Haller) ergeben. Ausgangspunkt war die klitzekleine Frage, wie man Zeilenumbrüche aus Textdateien rauskriegt, wenn andere Programme sie unsinnigerweise (z. B. stur bei einem bestimmten Zeichen) eingebaut haben:
"Dieser kurze Satz ist ein ziemlich blo
edsinniger Satz."
Als nächstes kam die Forderung dazu, Absätze (erkennbar an Leerzeilen) unangetastet zu lassen. Und zu guter Letzt sollte das Programm das Ergebnis wieder in der Originaldatei speichern.

Funktion

Das Script zende.sh arbeitet im Wesentlichen mit der in Quickies gezeigten Schleife. Das Ergebnis wird in einer temporären Datei gespeichert und am Ende des Scripts wird diese Datei unter dem Originalnamen wieder abgespeichert.

Download

zende.tgz