Zur Zeit wird gefiltert nach: scripting
Filter zurücksetzen
Heim-Bilderserver mit llgal
Ein einfacher Bilderserver kann mit dem Programm llgal erstellt werden. Das Programm ist ein Nachfolger von igal and kann rekursiv Verzeichnisse durchsuchen und einfache HTML-Bildergalerien erstellen. Wer HTML-Code und Bilder trennen will, muss sich jedoch mit einem Trick behelfen.[mehr]
E-Mail-Liste per Visual Basic oder Perl reinigen
Fazit
Wie man sieht, sind die Programme im Kern einfach. Das VB-Net-Programm ist natürlich nicht ganz vollständig, zeigt jedoch die wesentliche Funktionsweise.
Bei der Perl-Datei wird die bereinigte Liste auf die Standardausgabe ausgegeben. Um diese in einer Datei zu speichern, gibt man folgendes an: cleanmail.php liste.txt > bereinigt.txt. Dies funktioniert unter Windows (z.B. mit ActiveState Perl) und natürlich unter unixoiden Systemen (Linux, BSD, Mac).
Wer die Programme herunterladen will, kann das hier machen:
- cleanmail.pl
- cleanmail.exe (benötigt Windows Installer 3.1 und .NET Framework 3.5 SP1)
VB.Net-Programmteil "cleanmail.exe"
- Quelltext: Alles auswählen | Zeilennummerierung an/aus
-
- Dim line As String
- 'Open File
- Dim sr
- Try
- sr = New StreamReader(fs)
- Catch ex As Exception
- Exit Sub
- End Try
- 'Write File
- Dim sw
- Try
- Dim fo As New FileStream(outFile, FileMode.Create)
- sw = New StreamWriter(fo)
- Catch ex As Exception
- Exit Sub
- End Try
- 'Read File - each line...
- Do Until sr.Peek() = -1
- line = sr.ReadLine()
- If line <> "" And EmailAddressCheck(line) Then
- sw.WriteLine(line)
- Else
- tbOut.AppendText("Stripped: " + line + vbNewLine)
- End If
- Loop
- 'Close everything
- sr.Close()
- sw.Close()
- tbOut.AppendText("Finished writing " + outFile + ".")
- End Sub
- Private Function EmailAddressCheck(ByVal emailAddress As String) As Boolean
- Dim pattern As String = "^[a-zA-Z][a-zA-Z0-9\._%+-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)*\.([A-Za-z]{2,})$"
- Dim emailAddressMatch As Match = Regex.Match(emailAddress, pattern)
- If emailAddressMatch.Success Then
- EmailAddressCheck = True
- Else
- EmailAddressCheck = False
- End If
- End Function
Perl-Programm "cleanmail.pl"
- Quelltext: Alles auswählen | Zeilennummerierung an/aus
-
- #!/usr/bin/perl
- #Parameter 1 muss eine Eingabedatei sein
- #Kann Datei geöffnet werden
- }
- #Datei zeilenweise abarbeiten
- foreach my $line (<HANDLE>) {
- #auf E-Mail prüfen:
- if ($line =~ /^[a-zA-Z][a-zA-Z0-9\._%+-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)*\.([A-Za-z]{2,})$/) {
- }
- }
- Quelltext: Alles auswählen | Zeilennummerierung an/aus
-
- info@testtest.com
- marcus.mueller@nocheintest.de
- Total falsch
- keine.@mail..xx
- Nicht@erlaubt
- root@sub.domain.com
Reguläre Ausdrücke
Um E-Mails auf Validität zu prüfen, ist der Einsatz von Regulären Ausdrücken (Regular Expressions) sinnvoll. Reguläre Ausdrücke können Texte auf Muster überprüfen. E-Mails sollten theoretisch dem RFC 2822 Standard entsprechen. Ein Regulärer Ausdruck zur Prüfung einer E-Mail nach diesem Standard findet man beispielsweise unter http://code.iamcal.com/php/rfc822/full_regexp.txt. Der Ausdurck ist dabei schlappe 3768 Zeichen lang und für die meisten Anwendungsfälle unnötig.
Folgender Ausdruck genügt für 99% der Fälle vollkommen: ^[a-zA-Z][a-zA-Z0-9\._%+-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)*\.([A-Za-z]{2,})$. Hierbei werden folgende Schritte ausgeführt:
- Am Anfang der Mail muss ein Buchstabe (a-z oder A-Z) stehen.
- Dann folgen 1 oder mehrere Zeichen, die auch Zahlen oder ., _, %, + und - enthalten können.
- Jede E-Mail besitzt ein @.
- Dann folgt eine Domain aus Buchstaben und Zahlen.
- Möglicherweise existieren weitere Domainnamen, wenn die E-Mail einer Subdomain zugeordnet wurde.
- Die Toplevel-Domain besteht nur aus Buchstaben und muss mindestens zwei Zeichen lang sein.
Nun kann man kleine Programme schreiben, welche E-Mails entsprechend auswerten. Als Beispiel habe ich im Folgenden Perl und VB.Net genommen (wurde von den Kunden nachgefragt).
[mehr]
Codeschnippsel: PNG-Weltkugel per Generic Mapping Tools in PHP-Skript erzeugen (Linux/Ubuntu)
Wichtig ist, dass der Rechner, auf dem das Skript ausgeführt wird, bestimmte Voraussetzungen mitbringt:
- GMT muss klarerweise installiert sein. Eine Anleitung gibt es hier im Blog. Windows-Dateien können von der GMT-Homepage heruntergeladen werden. Ob das Skript unten auf Windows funktioniert, weiß ich nicht.
- Gegebenenfalls müssen die Pfade angepasst werden. Die meisten Distributionen verwenden inzwischen den GMT-Wrapper „GMT”. Falls das nicht der Fall ist, muss die Variable
$gmtWrappergelöscht werden und die Variablen$gmtCoast,$gmtXYund$gmtTextmit Pfadnamen versehen werden.
Nachdem man alles eingestellt hat (unter Ubuntu sollte das Skript Out-of-the-Box funktionieren), kann man von es von der Kommandozeile ausprobieren: php $gmt_globe.php. Dazu muss php-cli installiert sein.
Das Ergebnis kann sich durchaus sehen lassen:

Die Größe der Weltkugel ist im Skript festgesetzt. Durch Ändern der Variable $dpi lässt sich bestimmen, wie groß das resultierende PNG ist.
- Quelltext: Alles auswählen | Zeilennummerierung an/aus
-
- <?php
- //gmt_globe.php - Code-Schnippsel
- //Copyright (c) 1010, Maximilian Kalus, auxnet.de
- //Ausgabe:
- $lon = '11.566667'; //Längengrad
- $lat = '48.133333'; //Breitengrad
- $name = 'München'; //Name des Ortes
- $output = '/tmp/globus'; //Pfad und Namensteil für Ausgabedatei
- $is_utf8 = true; //System ist UTF-8?
- $dpi = 150; //DPI der Ausgabe: 72 oder 96 ist gut für den Bildschirm, 300 oder 600 für den Druck
- //Umgebung:
- $convert = '/usr/bin/convert'; //Pfad zu ImageMagick convert (oder GraphicsMagick Wrapper)
- $gmtWrapper = '/usr/bin/GMT'; //GMT-Wrapper oder leer
- $gmtCoast = 'pscoast'; //Name oder Pfad zu pscoast
- $gmtXY = 'psxy'; //Name oder Pfad zu psxy
- $gmtText = 'pstext'; //Name oder Pfad zu pstext
- ); //ggf. Umgebungsvariablen für GMT (PHP5)
- //Ausgabe-namen
- $tmpname = $output.'.ps'; //Ausgabe in PS-Datei
- //GMT-Generierung starten
- //Prozess-Pipes erzeugen
- $pipes = null;
- // in die geschrieben wird
- );
- //Globus selbst erstellen
- //PHP-Versionen unterscheiden sich...
- if (phpversion() < 5) $process = proc_open($gmtWrapper.' '.$gmtCoast.' -Rg -JG'.$lon.'/'.$lat.'/16c -B15g15 -Dc -A5000 -W0.3pt -G230 -P -K', $descriptorspec, $pipes);
- else $process = proc_open($gmtWrapper.' '.$gmtCoast.' -Rg -JG'.$lon.'/'.$lat.'/16c -B15g15 -Dc -A5000 -W0.3pt -G230 -P -K', $descriptorspec, $pipes, $cwd, $env);
- }
- //Punkt eintragen
- if (phpversion() < 5) $process = proc_open($gmtWrapper.' '.$gmtXY.' -Rg -JG'.$lon.'/'.$lat.'/16c -Ss0.15 -G255/0/0 -O -K', $descriptorspec, $pipes);
- else $process = proc_open($gmtWrapper.' '.$gmtXY.' -Rg -JG'.$lon.'/'.$lat.'/16c -Ss0.15 -G255/0/0 -O -K', $descriptorspec, $pipes, $cwd, $env);
- }
- //Titel eintragen
- if (phpversion() < 5) $process = proc_open($gmtWrapper.' '.$gmtText.' -Rg -JG'.$lon.'/'.$lat.'/16c -G0/0/0 -Dj0.06/0.06 -O', $descriptorspec, $pipes);
- else $process = proc_open($gmtWrapper.' '.$gmtText.' -Rg -JG'.$lon.'/'.$lat.'/16c -G0/0/0 -Dj0.06/0.06 -O', $descriptorspec, $pipes, $cwd, $env);
- }
- //GMT ist abgeschlossen
- //PNG erzeugen
- //PS-Datei löschen
- ?>
[mehr]
Webcam als Bewegungsmelder unter Ubuntu/Linux einsetzen
Bewegungsmelder sind relativ einfache Systeme, Schnittstellen für Computer sind jedoch relativ selten und teuer oder erfordern elektronische Ausrüstung. Mit einer einfachen Webcam geht es auch unter Linux.[mehr]
Teile eines MySQL-Dumps extrahieren
Es kommt immer mal wieder vor, dass ich bestimmte Tabellen aus einem MySQL-Dump extrahieren muss, um sie z.B. neu einzuspielen. Bei kleinen Datenbanken ist es kein Problem, die entsprechende Tabelle per Hand zu suchen. Wenn der Dump jedoch 1GB groß ist, geht ein Editor schon schnell mal in die Knie.[mehr]