Downloads eigener Scripte
(Sortierung: von neu nach alt)
- FindDuplicateFiles
- Meine .emacs
- ExcelPerl (v0.13)
- Tk-Mines
- Tk-CreateImageWebGallery
- Strat's Chatwebserver
- CGI-Javascript-Webchat
- Tk-Käsekästchen
- FindDuplicateFiles: ein
nettes kleines PerlTk-Script, das ich verwende, um doppelte Dateien
in einem oder mehreren Verzeichnis(-bäumen) zu finden und zu löschen.
Dabei kann man recht flexibel auswählen, welche der mehrfach vorkommenden
Dateien man löschen will. Dieses Script läuft derzeit nur
unter Win32 mit vollem Funktionsumfang , wobei
ich versucht habe, die Win32-Funktionalität so zu kapseln (siehe
MyApp::CommonFunc), damit man es auch einfach für andere
Betriebssysteme erweitern kann.
Das Script verwendet die folgenden Perl-Module, die eventuell nicht standardmäßig mit Perl installiert werden: Tk (als graphische Oberfläche), Tk::ProgressBar (Fortschrittsbalken), Win32 (für Pfadmagie), Win32::Process (um eine Datei mit einem externen Programm öffnen zu können), Win32::FileOp (um die zu löschenden Dateien im Papierkorb ablegen zu können).
Download: FindDuplicateFiles_0.02.zip
- Meine .emacs:
Seit etwa 1998 verwende ich
Emacs als
Editor zum Entwickeln für Perl und weitere Programmiersprachen, auch
HTML, vor allem unter den Betriebssystemen Windows, Linux, Solaris
und AIX. Im Laufe der Zeit habe konnte ich diesen Editor immer besser
an meine Bedürfnisse
anpassen. Hier meine .emacs, die ich (mit angepassten Pfaden) unter
all diesen Betriebssystemen verwende (einfach entpacken, die Pfade
und eventuell Zeilenenden anpassen und unter Unix/Linux ins Homedirectory
stellen, und unter Windows nach c:\ )
Download: strats_dot_emacs.zip
- ExcelPerl: Excel-Dateien
unter Windows mit Perl-Einzeilern bearbeiten.
Motivation: Ich verwende Excel häufig zur Datenanalyse oder zum Erstellen von Testdaten. Es gibt zwar viele hilfreiche Excel-Funktionen, aber für viele Aktionen kommt man um Makros nicht drum rum (z.B. direktes Ersetzen von Werten in einem Feld, vielleicht in Kombination mit regulären Ausdrücken). Ich kannte awk und perl -ane, mit denen man Textdateien verändern kann. Dann hörte ich von XLSPerl und fand es ein echt hilfreiches Tool. Da XLSPerl jedoch auf Spreadsheet::ParseExcel beruht, läft es zwar unter fast jedem Betriebssystem, kann jedoch Excel-Dateien nur lesen. Und ich fand es nervig, aus Excel-Dateien damit CSV-Dateien zu erzeugen, die dann wieder nach Excel zu importieren und dadurch eine Menge an Informationen zu verlieren.
Da ich Excel schon häufiger mit gutem Erfolg über Win32::OLE ferngesteuert habe und mir das Excel-Objektmodell ein wenig vertraut ist, habe ich mich dazu entschieden, XLSPerl auf Basis von Win32::OLE nachzuschreiben, was das Tool zwar auf Windows-Betriebssysteme mit installiertem Excel beschränkt, dafür aber Dateien direkt editieren kann und mir auch den Rest von Excel zur Verfügung stellt.
Wie bei perl -ane, wird eine while-Schleife um das Kommando gelegt, und das Kommando wird für jede Zeile ausgeführt, wobei die einzelnen Werte der Zeile im Array @F zur Verfügung gestellt werden. Da es sich dabei um ein tied Array handelt, werden Änderungen an einem Element von @F auch direkt in der Excel-Datei geändert, z.B. die Spalte A in Großbuchstaben ändern:excelPerl -ane "$F[0] = uc $F[0]" -f datei.xls
Zusätzlich steht das Array @C zur Verfügung, das die Win32::OLE-Objekte der einzelnen Zellen enthält und worüber der Zugriff auf die gesammte Funktionalität von Excel möglich ist, z.B. die Spalte B auf die Schriftart "Courier New" setzen:excelPerl -ane "$C[1]->{Font}->{Name} = 'Courier New'" -f datei.xls@F und @C kann man natürlich auch kombinieren.
Weiters gibt es seit V0.12 die Argumente -begin und -end, womit man Code angeben kann, der vor bzw. nach der Ausführung der while-Schleife ausgeführt wird, z.B.excelPerl.pl -begin "use Text::CSV_XS; $csv = Text::CSV_XS->new( {sep_char => ';', binary => 1} )" ^ -ane "$csv->combine(@F); print $csv->string, $/" -f datei.xlsoder:excelPerl.pl -ane "$x{ $F[0] }++" -end "use Data::Dumper; print Dumper \%x" -f datei.xlsDie Veränderungen werden nicht automatisch gespeichert, sondern die Excel-Datei wird offen gelassen und man kann selbst entscheiden, ob man die Änderungen speichern will oder nicht. Durch diesen Weg ist es auch möglich, Dateien zu verändern, die gerade in Excel geöffnet sind.
Weitere Informationen: siehe perldoc excelPerl
Download ExcelPerl 0.13. Die Zip-Datei entpacken und beide Dateien ins selbe Verzeichnis stellen. Wenn eine ActivestatePerl-Version größer gleich 5.8 installiert ist, sind keine weiteren Aktionen nötig.
- Tk-Mines: Ein kleines nettes
Strategiespiel, das ich auf Anregung eines Bekannten hin gecoded habe.
Auf einem Brett sind eine bestimmte Anzahl von Minen verteilt, die man durch logisches Denkvermögen finden muß. Zu Beginn sind die Inhalte aller Felder unbekannt (also mit ? versehen). Dabei hat man die Zahlen am Rahmen als Hilfe, die angeben, wie viele Felder jeweils zwischen zwei Minen(-gruppen) liegen. Durch einen Klick mit der rechten Maustaste kann man ein Feld auf ein '+' setzen, was bedeutet, daß hier eine Mine liegt (Achtung: man kann dieses Feld danach immer noch mit der linken Maustaste anklicken!!!). Wenn man überzeugt ist, daß ein Feld leer ist, kann man es durch einen Klick mit der linken Maustaste aufdecken. Wenn es wirklich leer ist, wird es leer; falls man jedoch eine Mine angeklickt hat, ist das Spiel verloren (Eine Mine wird durch das Zeichen '*' dargestellt). In der Version 0.03 kommt ein wenig mehr an Farbe, und ein Feld, das man mit einem '+' als Mine markiert hat, muß erst wieder durch einen zweiten Rechtsklick entsperrt werden, bevor es auf einen Click mit der linken Maustaste reagiert. In der Version V0.07 kam noch folgendes Feature hinzu: wenn man in einer Reihe oder Spalte (z.B. der Reihe 7,1) alle Minen markiert hat und dann auf ein Randfeld klickt (z.B. 7,1), dann werden alle Felder dieser Reihe (bzw. Spalte) aufgedeckt.
Version 0.08: diverse Bugfixes. Die Version 0.12 ist ein komplettes Rewrite und Redesign, und in der Version 0.13 kam eine externe Konfigurationsdatei hinzu (Tk-Mines.ini), und die sprachspezifischen Sachen wurden in externe Dateien ausgelagert ( derzeit Deutsch: Tk-Mines-language_de.txt und Englisch: Tk-Mines-language_en.txt)
- Download des Quellcodes Tk-Mines V0.13 (benötigt Perl)
- Download als Windows-Exe: Tk-Mines-0.13.exe (lädt leider noch etwas langsam)
- Tk-Mines-0.13-Anleitung (in HTML)
Alte Versionen: - Download des Quellcodes von Tk-Mines V0.08 (Benötigt Perl)
- Download als Windows-Exe + dll: Tk-Mines V0.08 (z.B. mit Winzip entpacken und die .exe ausfuehren)
- Anleitung im HTML-Format
- Tk-CreateImageWebGallery:
Umsetzung des Thumbnail-Rezeptes
als Programm mit Tk-Oberfläche: Download der neuesten Betaversion
tk-createImageWebGallery_v0.22.zip,
Voraussetzungen: Perl >= 5.6, Module: Tk, Tk::Tree, GD und Image::Size
müssen installiert sein. Bisher konnte ich dieses Script nur unter
Windows und Linux testen.
Kurzbeschreibung: wenn man z.B. im Rahmen einer Webseite viele Bilder hat und daraus eine Bildergalerie machen will, steht man vor dem Problem, viele Bilder in eine Standardgröße zu bringen, um sie als kleine Vorschaubilder anzeigen zu können. Dieses Programm erzeugt von beliebigen Dateien in einem Verzeichnis mit den Endungen .jpg, .jpeg und .png in einem anderen Verzeichnis Vorschaubilder (=Thumbnails), wobei die Bilderbreite frei eingegeben werden kann, und auch bestimmt werden kann, ob man schmälere Bilder vergrößern will oder einfach kopieren. Für genauere Informationen siehe das Thumbnail-Rezeptes oder den Quellcode. (getestet unter Linux und Win2k).
Weiters wird noch eine HTML-Tabelle mit einer beliebigen Anzahl von Spalten erzeugt, in deren Felder die Thumbnails angezeigt werden, und wenn darauf geklickt wird, öffnet sich das Bild in einem eigenen Fenster. Die Bilder sind der Thumbnail-Höhe entsprechend sortiert, sodaß die Galerie weniger Löcher hat. Weiters kann man noch entscheiden, ob man eine vollständige HTML-Seite genierieren will, oder nur die Tabelle (um sie über SSI oder Copy&Paste in eine andere HTML-Seite einzufügen).
Wäre für Testberichte und Verbesserungsvorschläge dankbar: martin@fabiani.net
- Ein neuer Chat, der dem in Punkt 2 in jeder Hinsicht
ueberlegen ist: Strat's Chatwebserver
V0.15: ist derzeit ein Standalone-Chatserver mit eingebautem Webserver
(via HTTP::Daemon). Vorteil: es wird nur ein Serverprozess benötigt,
der derzeit so zwischen 8 und 12 MB RAM benötigt und wenig Prozessorlast
erzeugt. Derzeit kann man mit folgenden Webbrowsern damit chatten: Internet
Explorer 6.x, Netscape Navigator 6.x und 7.x, und (allerdings nicht
ganz so schöner Optik => Bug) auch mit neueren Opera-Versionen.
Weitere Browser habe ich noch nicht getestet. Das optische Vorbild ist
der GTChat, der meiner
Meinung nach sehr gut läuft.
Features:- Verwendete Sprachen: Perl, JavaScript, HTML, CSS
- HTTP::Daemon als Webserver integriert (muss nicht extra installiert werden)
- Emails werden mit Mail::RFC822::Address auf Korrektheit überprüft und als Links angezeigt
- Durch Integration des Modules URI::Find::Schemeless werden http- und ftp-Adressen als HTML-Links dargestellt
- Passwortverschlüsselung mit Digest::MD5 (kann leicht durch crypt oder weitere Lösungen ersetzt werden)
- Benutzerhandling: Registrierung, Anmeldung, verschiedene Benutzerlevel
- Nachrichten: öffentliche Nachrichten in einem Raum und private Nachrichten an einen anderen Chatter können versendet werden. Offline-Messages kommen in einer der nächsten Versionen
- Eine Reihe von Smileys können per Mausklick oder Code in eine Nachricht eingefügt werden
- Profile: jeder Benutzer kann ein Profil mit verschiedenen Feldern, darunter auch ein Bild, erstellen, das von anderen Chattern eingesehen werden kann, wenn sie auf seinen Namen in der Userliste klicken oder im "Usermenue" nach ihm suchen. Optional kann dort auch nach allen Chatterprofilen gesucht werden.
- Mehrere Räume; ein Chatter kann jedoch immer nur in einem Raum sein; er kann aber Leuten aus anderen Räumen Privatnachrichten senden.
- In diesem Package liegen die Smileys und das Cascaded Stylesheet auf meiner Homepage; dies kann man jedoch in der Konfigurationsdatei chat.pm einfach anpassen.
- Einfache Übersetzungsmöglichkeit in andere Sprachen durch Anpassung der Datei language.pm, wo alle Nachrichten stehen (d.h. bisher fast alle; ist noch nicht 100% sauber)
- Verwendung von Templates für einige Teile des Chats; soll noch mehr werden
- Derzeit läuft der Chat über eine Art Client-Pull mit Javascript; ich will es aber so umschreiben, daß eine Kombination von Pseudo-Serverpush (=langsame, ungepufferte Ausgabe) und Client-Pull verwendet wird. Dazu benötige ich jedoch einen Mechanismus, der mehrere Connections gleichzeitig behandeln kann. Denn derzeit werden die Clientconnections sequentiell behandelt, was wohl nicht besonders ideal sein dürfte. Dabei denke ich an eins der folgenden Möglichkeiten: Perl5.8 und Threads, oder alternativ POE; interessant könnte vielleicht auch HTML::Mason sein.
- Offline-Messages
- Besseres Templating
- Javascripts in eine zentrale Datei packen (chat.js) und die dann auf einem Webserver ablegen. Könnte den Chatwebserver entlasten
- Administration: Erstellung, Änderung und Löschen von Chaträumen und Usern über einen Punkt namens Admin (geschieht derzeit über csv-Konfigurationsdateien)
- Loggingmechanismen
- Bessere Erkennung von toten Clients und Relogins
- Optional: Privatnachrichten in eigenem Webbroser-Fenster
- Erhöhte Security!!!
- Starten des Chatservers bei Bedarf über ein CGI-Script und beenden über ein Timeout (ich denke da an 60 Sekunden)
- Ein Perl/CGI-Javascript-Chat, mit dem ich
derzeit ein wenig herumspiele. Achtung: ist noch nicht fuer Produktionssysteme
gedacht, denn er hat noch zu viele Fehler. Nur die Performance scheint
sehr gut zu sein.
Requirements: Webserver mit Perl-Version >=5.005_03 und mysql-Datenbank.
Download des Chats V0.07.Laeuft derzeit unter MsIE und neueren Netscape-Browsern. Entwicklung eingestellt.
- Käsekästchen: aus Spaß habe
ich mich mal hingesetzt und versucht, das Spiel Käsekästchen
mit Perl zu schreiben. Als graphische Oberfläche habe ich Tk verwendet.
Download
von Käsekästchen (derzeit ist die Version 0.10 aktuell).
Dieses Spiel ist aber nur zufällig entstanden, da ich normalerweise
keine Spiele schreibe. Meiner Meinung nach ist Perl selbst das
ultimative Spiel:-)