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.tgzAnschliessend 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
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
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.coder einfach
make nikohausIch 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
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
Installation
Nach dem Download muss das Archiv in einem beliebigen Verzeichnis
extrahiert werden:
tar xvzf users.tgzDann 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.



