Skip to content

SQL-Daten konvertieren

Software Für alles mögliche verwende ich seit einige Zeit Serendipity. Das ist eigentlich ein Blog, aber ich verwende es mehr als CMS (Content Management System). Damit stelle ich ganz unterschiedliche Themen online, von den Notizen aus dem Geoinformatik-Studium bis zu POI in Berlin.

Wobei ich letztere gar nicht selbst eingebe, sondern über ein kleines PHP-Programm aus einer XAPI-Abfrage der OSM-Datenbank konvertieren lassen. Die meisten kennen nur die Karte von OpenStreetMap, aber da sind ja auch POI (Points Of Interest, Orte von Interesse) drin. Und da sind wir auch schon beim Thema SQL-Konvertierung.

Das war nicht schon immer so, dass ich alles mögliche mit S9y (wie die Software in Kurzform heißt) gemacht habe. Früher hatte ich auch mal eine Terminkalender-Software in Verwendung, deren Daten ich schon vor einiger Zeit mit ein paar SQL-Befehlen aus der mySQL-Datenbank-Tabelle in das Blog konvertiert habe.

Gestern war es mal wieder soweit. Das Update des FAQ-Systems phpMyFAQ ging schief und es tat sich gar nichts mehr. Wieder zurück zur alten Version, alles schick, nur das Update wollte nicht. Also schnell beschlossen: Die Geocaching-FAQ wird nun auch auf S9y umgestellt. Da weiß ich zumindest mittlerweile, wo welcher Knopf ist an dem ich drehen muss wenn mal was nicht will.

Ein Aufgabenstellung, die man öfter mal hat. Die Daten von einem System (hier wars nun eben zufällig phpMyFAQ) sollen in ein anderes (bei mir zumindest zur Zeit immer S9y) konvertiert werden - es gibt aber keinen fertigen Konverter.

Die Konvertierung von Daten auf dem SQL-Server ist dabei ziemlich einfach, wenn man sich die Datenbanken in den beiden Systemen anguckt. Und unter der Voraussetzung, dass bei beiden Systemen das Encoding richtig eingestellt ist, also ISO-Latin oder UTF8. Das ist dann der Fall, wenn man die Inhalte in den Tabellen einwandfrei lesen kann, sprich: Die Umlaute stimmen.

Für alle die es interessiert, gehe ich hier den Ablauf mal durch, der als Beispiel für alle Konvertierungen dieser Art dienen kann.

insert into serendipity_entries (id, title, body, extended, author, timestamp) SELECT id, keywords as title, thema as body, content as extended, author, links_check_date as timestamp FROM phpmyfaq_faqdata


Man fängt am besten hinter dem Select an zu lesen. Die Einträge aus der FAQ werden dazu ausgewertet, alle Felder die in dem Blog benötigt werden werden mit einem Alias ausgewählt, wie er in dem Blog heissen soll. Dort werden sie dann auch mit der Einfügeabfrage reingeschrieben.

insert into serendipity_authors (realname, username, email) select author as realname, author as username, email from phpmyfaq_faqdata group by email


Hier wird eine Benutzertabelle aufgebaut. Die brauche ich in den Blog zwar nicht, aber so kann man das machen. Einloggen können die sich mangels Passwort schon nicht. Die User-ID bekommen die Benutzer im Blog durch das Autoincrement, Benutzer gabs in der FAQ nicht, man konnte mit Name und E-Mail seinen Beitrag dort abliefern.

insert into serendipity_category (categoryid, category_name, category_description) SELECT id as categoryid, name as category_name, description as category_description FROM phpmyfaq_faqcategories


Die Kategorien aus der FAQ werden dann so 1:1 in das Blog konvertiert - sehr unspektakulär.

insert into serendipity_entrycat (categoryid, entryid) SELECT category_id as categoryid, record_id as entry_id FROM phpmyfaq_faqcategoryrelations


Bei wohl allen Systemen dieser Art gibts dann eine n:m-Relation zwischen Artikeln und Kategorien. Das kann auch so direkt konvertiert werden. Die Felder heißen nur unterschiedlich, aber dafür kann man ja den passenden Alias hinter "as" verwenden.

update serendipity_entries set authorid=1
update serendipity_entries set exflag=1
UPDATE serendipity_entries SET isdraft = 'false'


Damit die Beiträge auch angezeigt werden, müssen noch ein paar Felder in dem Blog gesetzt werden, die beim Füllen der Tabelle nicht berücksichtigt wurden. Hätte man auch gleich machen können, aber dann wäre die Einfügeabfrage etwas unübersichtlicher geworden.

insert into serendipity_comments (entry_id, author, email, body, timestamp) SELECT id as entry_id, usr as author, email, comment as body, datum as timestamp FROM phpmyfaq_faqcomments


Auch die Kommentar aus der FAQ sollen als Kommentare im Blog verwendet werden. Kein Problem, die Felder gibts in beiden Systemen. Sogar die Timestamps sind auf beiden Systemen Unix-Sekunden, falls das nicht so ist kann man schon beim Select die Timestamp-Funktion vom SQL verwenden um andere Datumsangaben zu konvertieren.

update serendipity_comments set type="NORMAL"
update serendipity_comments set status="approved"


Damit die Kommentare auch korrekt angezeigt werden, müssen nur noch ein paar Attribute korrigiert werden. Das wars dann auch schon.

So eine Sammlung von Abfragen kann man dann immer wieder verwenden, wenn man sie einmal erstellt und getestet hat, um Daten von einem System in ein anderes zu konvertieren. Wer lange genug mit Computern zu tun hat, wird wissen warum: Der Zeitpunkt, von einem System auf ein anderes zu wechseln wird immer kommen, die Frage ist nicht ob, sondern wann.

Let's get ready to Mumble

Software Selten hat mich ein Stückchen Software so begeistert wie Mumble. An sich ist ist es nichts Spektakuläres mehr, über das Internet miteinander zu sprechen. Seit Skype kennt wohl jeder die Möglichkeit, ein Headset aufzusetzen und damit zu telefonieren.

Seit einiger Zeit hab ich nun abends auch so ein Ding auf. Ich telefoniere aber nicht, sondern ich benutze eine Konferenz-Software, die den Eindruck vermittelt, man säße in einem Konferenzraum (oder nennen wir es Stammtisch oder was auch immer) und spräche miteinander. Das ganze hat etwas von einer Runde auf einem Funkkanal, die Gesprächspartner sind aber nicht zufällig, sondern von ähnlicher Interessenslage, in meinem Fall gehts um Geocaching.

Erfunden wurde die Mumbelei eigentlich für Spieler, die sich durch dreidimensionale Labyrinthe hetzen um ihre Cybergegner zu zermetzeln. Da sollen vergleichbare Lösungen wie Teamspeak den Nachteil einer schlechteren Verständlichkeit und vor allem einer längeren Laufzeit (Latenz) gehabt haben - Sekundenbruchteile, die wohl über virtuelles Leben und Tod entscheiden können.

So stressige Spielchen sind zwar nichts für mich, aber ich habe mir vor zwei Monaten für kleines Geld auch einen Mumble-Server gemietet, auf dem abendlich nun die Geocacher live die aktuellen Geocaching-Themen durchzugehen. Soweit dazu was ich damit mache, nun mal lieber zur Technik.

Man kann sich einen Client für den Mumble-Server für verschiedene Systeme (Windows, Mac, Linix) kostenlos herunterladen wie es bei Open Source üblich ist. Der verbindet sich über einen TCP-Port (64738, C64-Veteranen werden sich erinnern!) mit einem Mumble-Server. So ähnlich wie man es vom IRC kennt, es sind daher keine speziellen Verrenkungen auf der Firewall erforderlich, allerdings ist die ganze Kommunikation SSL-verschlüsselt.

Man kann dann sein Headset für sprachgesteuerten Betrieb mit einem Assistenten konfigurieren. Das braucht man aber nicht, wenn das Headset funktioniert (Stecker, Treiber, Einstellung), was für die meisten das größte Problem darstellt, kann man sofort mitmachen. Die Taste um zu sprechen ist frei wählbar und ein kleines rotes Icon zeigt wenn man "on air" ist.

Das Feature der Sprachausgabe kann man übrigens auch abschalten, besonders URLs die man mal während der Konferenz kurz durchreicht (auch das geht, wird bei Messengern wie ICQ ja auch gern gemacht) hören sich vorgelesen doch sehr merkwürdig an.

Wenn man keinen eigenen Server hat kann man einen der Server wählen, die der Client in einer Liste so anbietet. Auf jeden Fall müssen sich Benutzer, die miteinander sprechen wollen dem selben Server verbunden sein und sich auf dem gleichen Kanal befinden. Wer Linux-Kenntnisse und einen Root-Server hat wird sich vielleicht auch den Mumble-Server, der übrigens Murmur heißt selbst schnell installieren können.

Was mich besonders begeistert am Mumble ist die Sprachqualität, die eindeutig besser als das ist, was man vom ISDN her kennt. Interessanterweise funktioniert das sogar dann in dieser Qualität, wenn jemand ein Modem benutzt! Das liegt an dem verwendeten Speex-Codec, der obwohl frei verfügbar eine beachtliche Qualität bringt.

Freie MP3-Software zur Normalisierung

Software Für meinen neuen Geocaching-Podcast brauchte ich vor ein paar Tagen ein Programm, das mir eine MP3-Datei "lauter" macht. Mein Problem war, dass mein neuer MP3-Recoder, der bei Podcastern sehr verbreitete ZOOM H2 sehr vorsichtig aussteuert.

Man kann das zwar auch selbst also manuell und somit korrekt machen, aber während der Sendung habe ich dafür nicht den Kopf frei. Ich nehme daher den mittleren Pegel und lasse den Kompressor laufen. Das ist sowas ähnliches wie die Aussteuerungsautomatik die mein Mono-Kassetten-Rekorder von Phillips vor 30 Jahren schon hatte. Nur eben modern und digital realisiert.

Der Sound erinnert dann ein wenig an ein Verstärkermikrofon vom CB-Funk, aber alle Beteiligten meiner Gesprächsrunde sind deutlich zu verstehen, auch wenn sie grad mal nicht in Richtung des Mikrofons sprechen. Im Ergebnis wird die Aufnahme allerdings dann zu leise. Das ist besonders deswegen störend, weil so ein Podcast dann im Vergleich zu anderen mit denen er zeitgleich auf den iPod oder Player der Wahl geschoben wird zu dünn klingt.

Nun hab ich ja grad meinen Linux-Rechner nicht aufgebaut, sondern muss noch ein paar Tage auf der Windows-Kiste arbeiten. Sonst würd ich Audacity nehmen, die Datei einlesen und normalieren, das kann das Programm nämlich, wie ich weiß. Dabei wird die lauteste Stelle gesucht und dann alles um soviel lauter gemacht, dass der Dynamik-Bereich optimal genutzt wird.

Oder eben auch doch nicht so optimal. Bei der Suche nach einem Windows-Programm, das genau dies tun soll und darüber hinaus auch noch Freeware ist, bin ich über mp3gain gestolpert - und war sofort begeistert. Das Programm ist open Source und liegt bei Sourceforge zum Download mit Übersetzung verschiedenen Sprachen bereit. Für die Windows-User gibts eine hübsche GUI in Visual Basic gleich dazu.



Das Programm sucht nicht einfach die lauteste Stelle, sondern macht eine statistische Überprüfung, wie laut sich die Datei für das menschliche Ohr anhört. Vor allem aber, und das begeistert mich am meisten, wird die Datei nicht decodiert, lauter gemacht und wieder neu encodiert, sondern die Änderung ist verlustlos. Das ist für mich deswegen interessant, weil ich mit dem Recoder ja schon als MP3 aufnehme.

Wenn ich dann meinen Linux-Rechner wieder in Betrieb habe, ist es noch einfacher ein ganzes Verzeichnis auf einen Pegel zu bringen:

mp3gain -r -c *


Das ganze geht so schnell, dass man es kaum glauben mag - wenige Sekunden später sind die Dateien bearbeitet. Die Änderungen werden in speziellen MP3-ID-Tags gespeichert und lassen sich dadurch bei Bedarf auch wieder rückgängig machen. Allerdings könnten ältere MP3-Player dadurch verwirrt werden, so dass man die erweiterten ID3-Tags auch weglassen kann.
tweetbackcheck