Um herauszubekommen wo überall ein bestimmter Domainnamen hinterlassen wurde (zBspl. in Foren, Webseiten, PDF-Dokumenten, …) kann dazu Google befragen:
“somafm.com” -site:somafm.com
Das es funktioniert kann man mit einer negierten Abfrage gegenprüfen:
“somafm.com” -site:somafm.com +site:somafm.com
Ein hoch auf alle Datenkraken.
Deutschland 2000 Rätsel: 1 Wer oder was ist FORTRAN?
Eine Programmiersprache
Der Ort, wo die US-Goldreserven lagern
Ein angesagtes Videospiel
Quellenangaben:
An unserem Server hängen USB Festplatten welche beim booten nicht automatisch gemountet werden können da während des Boot-Vorgangs der Kernel die USB Platten noch nicht erkannt hat.
Als weiteres Problem stellt sich dar das sich das jeweilige Device der USB Festplatte ändern kann wenn man einen anderen USB Port verwendet.
Das Problem des Devices lässt sich einfach über einen UUID Eintrag in der /etc/fstab Datei regeln:
UUID=36FC-D794 /home/usb-02 vfat noauto,async,rw,uid=vmware,gid=vmware 0 0
Somit ist es egal welchem Device die USB Platte zugeordnet wurde.
Nun muss die USB-Festplatte gemountet werden sobald Sie vom Kernel erkannt wurde.
Hierzu habe ich ein kleines script “dmount.pl” geschrieben:
#!/usr/bin/perl -w
use strict;
my $uid = shift (@ARGV) || '';
my $dest = shift (@ARGV) || '';
my $path = '/dev/disk/by-uuid/';
die 'first arg is uid' if $uid eq '';
die 'secord arg is mount path' if $dest eq '';
while (! (-e $path . $uid)) {
sleep (1);
}
system ('mount '.$dest);
Dieses Script wartet bis die übergebende UUID vorhanden ist und ruft dann “mount” auf.
Ein Eintrag kann in der “/etc/init.d/bootmisc.sh“-Datei am Ende in etwa wie folgt erfolgen:
#
# delay mount usb harddrives
/home/rhuesing/dmount.pl d245458e-026c-49f8-bd9f-746e88dae87b /home/usb-01 &
/home/rhuesing/dmount.pl 36FC-D794 /home/usb-02 &
Möchte man Eingaben flexibel und evtl. komplexen Prüfungen unterziehen kann man sich die Fähigkeiten von SQL zu nutze machen.
Ich gehe hier davon aus das die Anwendung generell eine Datenbankverbindung hat und nicht extra wegen der Prüfung eine Verbindung aufbauen muss.
Ein Beispiel:
Der Benutzer gibt eine Zeichenfolge ein: “D016381″.
Die Anwendung muss nun etwas bestimmtes tun wenn:
Die Eingabe mit D beginnt, gefolgt von einer 0 und .. (was auch immer).
In jedem Falle ist die Prüfung nicht trivial. Hier bieten sich reguläre Ausdrücke an, jedoch ist nicht in allen Programmiersprachen “mal eben so” möglich RegEx zu verwenden.
Diese Prüfung kann sehr einfach mittels SQL umgesetzt werden.
Es bietet sich der LIKE oder REGEXP Vergleichsoperator an:
SELECT -1 AS OK WHERE 'D016381' LIKE 'D0%'
Diese Abfrage liefert einen Datensatz (mit einer Spalte “OK” mit dem Wert -1) wenn der Benutzer D gefolgt von einer 0 gefolgt von “irgendwas” eingegeben hat.
Es ist nun natürlich ohne weiteres möglich die komplexität der Abfrage zu erhöhen:
SELECT -1 AS OK WHERE ('D016381' LIKE 'D0%' AND 'D016381' NOT LIKE '%2') OR ('D016381' LIKE 'K%')
Heißt, wenn die Eingabe:
(D gefolgt von einer 0 gefolgt von “irgendwas” UND die Eingabe nicht auf 2 endet) ODER die Eingabe mit einem “K” beginnt dann… soll die Anwendung etwas tun.
In der Endkonsequenz kann man diese Filter (bzw. SQL-Statements) in einer SQL-Tabelle speichern und zur Laufzeit das jeweilige SQL-Statement generieren und ausführen.
Somit ist man extrem flexibel da man die Abfragen / Prüfungen jederzeit (für alle Anwendungen die diese SQL-Tabelle verwenden) anpassen kann.
Wer findet den Bug in folgendem Code?
For Each oControl In Controls
Select Case LCase(oControl.Tag)
Case "ziel", "quelle", "bedingung", "Feldliste"
' Mach irgendwas mit oControl wenn dessen Tag passt
End Select
Next oControl