Database Exporter: Database Structure and Naming Analyzer

Mit dem Database Exporter 1.0 kann man die Struktur und die Namensgebung seiner Datenbank (mitsamt aller Tabellen und Feldern) analysieren.

Dabei reicht es, die Zugangsdaten (Host, Benutzername, Password) anzugeben, und man kann eine komplette Datenbank (hier: DATABASENAME) in ein Verzeichnis (hier: xml) zu exportieren.

$dbexporter->exportDbStructureToXML('DATABASENAME', 'xml');

Während des Schemaexports wird auch die Struktur analysiert und nach einigen Gesichtspunkten bewertet:

  • Fremdschlüsselabhängigkeiten werden automatisch gefunden, wenn Fremdschlüssel einmalig heißen; d.h. beispielsweise in der Tabelle postings heißt es user_id und nicht poster_id, wenn damit eigentlich auf users.user_id verwiesen wird (id wie in ROR wird nicht verwendet)
  • gefundene Abhängigkeiten werden zudem mit ihren Typen verglichen, wobei davon ausgegangen wird, dass der Typ im Hauptschlüssel (Primary Key) der richtige ist

PHP/zlib: Wie ermittelt man die unkomprimierte Dateigröße einer .gz-Datei?

Problem: Mit $fh = gzopen($fileName, 'r'); erhält man einen Filepointer auf die Datei, aber für gzread() benötigt man neben dem Filepointer auch eine Leseinheit (und in den meisten Fällen dürfte das der Inhalt sein). Allerdings kommen wir mit filesize($fileName) nicht weiter, denn damit erhalten wir nur die Größe der komprimierten Datei zurück.

Antwort: Nach einem Beitrag von zaotong auf php.net/gzread wird die Originaldatengröße in den letzten 4 Bytes der Datei gespeichert; alles was man machen muss, ist also die letzten 4 Bytes auslesen und als Buffergröße nutzen.

Snippet:

$fileName = 'compressed.gz';
// normal öffnen, windows-binärmode
$fh = fopen($fileName, "rb");
// springe zum 4. vorletzen byte
fseek($fh, -4, SEEK_END);
//lese die nächsten 4 bytes (also die letzten)
$readBuf = fread($fh, 4);
// binärdaten lesen, ist integer (4 Byte)
$gzSize = end(unpack("V", $readBuf));
// pointer wieder schliesen
fclose($fh);
// nun entkomprimieren, windows-binärmode
$fh = gzopen($fileName, "rb");
// nun können wir angeben, wieviel wirkliche daten wir lesen wollen
$content = gzread($fh, $gzSize);
// und brav wieder schließen
gzclose($fh);

XML/DTD Validator Version 1.0

Aus Zweckmäßigkeit habe ich mir einen kleinen XML/DTD-Generator und Validator gebaut.

  • Laden einer XML-Datei als URL
  • optionales Laden einer DTD-Datei als URL
  • alternativ: aus geladener XML-Datei eine DTD generieren lassen
  • entweder aus der geladenen DTD oder aus der DTD im XML-Header das XML-Dokument validieren

Da das Tool nur die URLs zu den Dateien speichert, kann man auch auch während der Laufzeit die Dateien bearbeiten und erneut validieren lassen.
Das Tool ist komplett über GUI steuerbar, es sind keine Konsoleneingaben erforderlich (und afaik auch nicht möglich).

Für den Part des DTD-Generators (den ich anpassen musste, um ihn von der GUI aus zu steuern und Fehlerreports in die GUI zu leiten): xmlBlueprint: DTD Generator

Zum Download des XML/DTD Validator Version 1.0

Antipeil Howto [link inside]

Verpeilen und Konjunktivitis sind enge Freunde. “Müsste man mal.” “Sollte ich heute machen.” “Ich muss endlich xy erledigen.” “Ich habe verschlafen.” “Ich habs vergessen.” Wenn solche Sätze bestimmend für dein Leben sind, könnte es sein, dass du willkommen im engeren Kreis der Verpeiler bist. Auf der einen Seite entbehrt es nicht einem gewissen Humor, jemanden während der Diplomarbeit geradezu manisch die Wohnung putzen zu sehen – auf der anderen Seite bedeutet Verpeiler zu sein, immer unzufrieden mit sich zu sein und von anderen als unzuverlässig eingestuft zu werden. Es bedeutet, mit zunehmendem Alter immer mehr zu kapieren, welche Chance man nicht wahrgenommen hat – nicht, weil man nicht wollte, sondern weil man es schlicht nicht gebacken bekommen hat.

Hier gehts weiter.

Kann ich nur empfehlen!

Spam und der Heimatschutz

Spam vom Heimatschutz
Es gab Spam für denvom Heimatschutz.

Es ist ja doch ganz peinlich, das gerade dem Ministerium für Heimatschutz ein solcher Patzer passiert ist. Ein normaler Newsletter (Bericht) wurde zur einer Spamwelle, als ein Empfänger die Antwortfunktion nutze, diese ein Versenden dieser Nachricht an alle auslöste, worauf wieder welche antworteten, was wiederum an alle gesendet worden, worauf.. ja, man kann es sich denken.

Es ist schon eine Leistung: 7500 Empfänger, über 22 Millionen Mails.. damit haben die ihre Arbeite für dieses Jahr getan!