Suchmaschine für Websites: mnoGoSearch und das Umwandeln von Dateien in Text

searchLeider wurde die Entwicklung von htdig scheinbar eingestellt, und so wurde ich gezwungen nach Alternativen zu suchen. Aber alles der Reihe nach: was will ich denn, ausser 12 Stunden Schlaf? Also; An unserer Schule werden alle Unterrichtsunterlagen in SVN-Repositories abgelegt, Um das Zusammenarbeiten der Lehrpersonen zu fördern soll es eine Suche über alle Unterrichtsmaterialien geben. So besteht die Chance, dass einiges an Doppelspurigkeiten vermieden werden könnte. Eine Recherche hat einiges an Kandidaten aufgezeigt: Sphinx schien ein wenig SQL-Lastig zu sein, Swish-e kannte ich schon und somit habe ich mich mal auf mnoGoSearch gestürzt. Für Unix ist mnoGoSearch gratis, open Source und sogar in Debian verfügbar.

Suchmaschinen Theorie

Das mit den Lokalen Suchmaschinen läuft immer ziemlich ähnlich und wurde auch schon an verschiedenen Stellen in diesem Blog besprochen (Beagle (neu) und xFriend (alt)). Ein Indexer liest alle Dateien und erstellt einen – ja was denn wohl? – Index. Damit er das kann, müssen alle Dateien in eine für ihn lesbare Form umgewandelt werden. Normalerweise ist „Lesbar“ Text oder HTML. Einige Suchmaschinen – wie beispielsweise Lucene oder Swish-e – erlauben auch XML um gewisse Felder zu bezeichnen, aber das ist eine andere Geschichte. Eine Suchoberfläche interagiert nun mit dem Index und versucht möglichst viele Seiten zu Finden und diese nach Relevanz geordnet dem Benutzer zu präsentieren.
Weiterlesen

Automatisches und mehrfaches submitten von Formularen

Wirre Gedanken

FormularDieser Beitrag ist dem Titz gewidmet. Dem Titz, der sich aufgeregt hat :pirate-grumble: , obwohl es gar nicht nötig gewesen wäre und der sich nun mit einer gewissen Teilnehmerredundanz anfreunden muss. Hauptsache ist doch, das PHP fliesst und die Variablen bleiben sauber… Und ein Bierchen würde ich auch noch springen lassen :bier: …

Eine wichtige Frage zu Beginn: Wieso sollten wir denn automatisch und mehrfach Formulare submitten wollen? Hmm, um den Titz zu ärgern? Weil wir es können? Weil man manchmal tun muss, was man tun muss? Weil man seine 84 Kinder an einem elektronischen Fussballturnier anmelden will :laola: (hat eigentlich schon jemand bemerkt, dass ich neue Smilies und unglaublich Freude daran habe?)? Oder weil man über einen Wettbewerb gestolpert ist, der ebendies nicht verbietet (also das Mehrfachsubmitten, nicht das Kinderanmelden oder die neuen Smilies) und der kein Captcha hat (vielleicht, weil es der Titz vergessen hat)?

Nachtrag 31.07.2008: Schenken mir doch so unglaublich nette Mitarbeiter einer Versicherung heute morgen am Bahnhof einen Müsliriegel. Und auf diesem eher gesunden Teil hat es, ja rate, oh wissbegieriges Volk, einen Wettbewerb. Ob der Titz wohl am Abend für eine andere Firma weitercoded? Ich werde mich auf jeden Fall während der Zugfahrt mal damit befassen :computer: .

Vorgehen

Erster Schritt: Selenium IDE

Man könnte nun wie wild losprogrammieren, oder aber einen einfacheren Weg wählen. Ein guter Startpunkt für automatisiertes Browsen generell ist die Selenium IDE. Dieses geniale Teil für den Firefox zeichnet wie ein Macrorecorder alles auf, was im Browser gemacht wird. Hat man die Teilnahme beim Wettbewerb einmal so aufgezeichnet, so müssen nur noch die click’s, die das Form absenden, durch clickAndWait’s ersetzt werden, damit vor dem Weiterausfüllen (bei mehrseitigen Formularen) auf die neue Seite gewartet wird. Es empfiehlt sich, eine Abschlussüberprüfung als letzten Schritt hinzuzufügen, um um kontrollieren zu können, ob die Kinder erfolgreich angemeldet wurden (markieren des „Dankeblabla“, dann rechte Maustaste und assertTextPresent).

Ein Wettbewerb über 2 Seiten. Aufgezeichnet und bearbeitet mit der Selenium IDE.

Ein Wettbewerb über 2 Seiten. Aufgezeichnet und bearbeitet mit der Selenium IDE.

Diesen Testcase kann man nun abspeichern und eigentlich immer wieder ausführen. Ein Klick reicht und Firefox rasselt alles schön durch. Den Namen leicht verändern kann man durch Editieren des Skripts…

Für den zweiten Schritt sollte man das Testscript als PHP exportieren.

Zweiter Schritt: Selenium RC

Die Selenium RC Komponente kann den Browser fernsteuern und so ferngesteuert am Wettbewerb teilnehmen. Um sie unter Linux Debian zum Laufen zu kriegen, war ein Bisschen Gemurkse notwendig.

Weiterlesen

Sony Ericsson P910i über Bluetooth zu Linux mit dem Internet verbinden

Das Sony Ericsson P910i

p910iAls weitere, blinkende und piepsende Kostbarkeit wurde mir ein Sony Ericsson P910i für n’Appel und n’Ei angeboten. Alleine schon der schnuffligen Tastatur wegen konnte ich nicht widerstehen. Es hat zwar eine Grösse, mit der man es gut als Totschläger oder als Sandsackersatz beim Ballonfliegen gebrauchen kann, dafür hat es ein auf Symbian basierendes Betriebssystem mit grosser Kalender- und ToDo Ansicht.

Internet surfen

Die Qual der Wahl der Quälen, äh, Quellen

Das Fon kann wunderbar, fast problemlos über GPRS im Internet surfen. Da bei uns in der Schweiz die Bits aber noch mit Gold aufgewogen werden, wollte ich die günstigere Variante: Verbindung mittels Bluetooth zum Laptop, der Computer vermittelt dann auf das Internet. Das reicht zur Synchronisierung und zum Download von allem, das ich nie brauchen werde.
Weiterlesen

Internet auf dem Stick: MC950D und T@ke Away von Sunrise unter Linux

Internet zum mitnehmen

MC950DDank dem Asus eee Schnucklteil wäre ich eigentlich mobil. Die Tatsache, dass ich ziemlich oft im Zug unterwegs bin musste als Ausrede herhalten meinen Ogo zu kündigen und mir stattdessen T@ke Away von Sunrise zu kaufen.
T@keAway kostet zuerst mal CHF 10 Grundpauschale. Man erhält ein Modem – wahlweise ein Novatel Ovation MC950D (der Stick) oder ein Huawei E220 – mit dem man dann mobil UMTS/EDGE mässig ins Internet kann. Pro Tag kostet es jeweils noch CHF 3.50, aber ohne Transferbeschränkung.

Swisscom hat ein Konkurrenzangebot (Internet Mobile Unlimited). Es kostet auch 10 CHF Grundpauschale, aber 4.50 CHF und somit 1 CHF mehr pro online-Tag. Der Vorteil ist die Upgrademöglichkeit zu einer volumenabhängigen Flatrate.

Das Einkaufen war problemlos. Ein sehr netter Verkäufer im Sunriseshop hat mich sehr speditiv und freundlich bedient. Ganz überrascht ob so viel Freundlichkeit – man hatte das Gefühl, sein Job macht ihm Spass – habe ich glatt für ein paar Minuten vergessen den Miesepeter rauszuhängen und wollte aus Freude fast noch etwas kaufen. Die Stühle standen aber nicht zum Verkauf und so habe ich meine Dinge getakeawayt und bin zügig nach Hause um den Stick in Betrieb zu nehmen.

Das MC950D Modem

Aussehen tut das MC950D Modem wie ein geschwollener Memorystick. Die SIM Karte kann vorne reingeschoben werden. Für zerstreute Hektiker wie mich ist der Deckel etwas problematisch, da er einen gewissen Fluchtreflex besitzt und gerne verloren gehen möchte.

Hier noch eine kleine Anleitung, wie ich die fröhlichen Lichtsignale der LED auf dem Stick interpretiere:

Rot: CD-Modus
Rot blinkend: Kein UMTS, aber ein EDGE wäre möglich
Violet: Verbunden über Edge
Blau blinkend: UMTS ist in der Luft
Blau blinkend: Verbunden über UMTS

Der Wechsel zwischen EDGE und UMTS passiert jeweils selbständig und automatisch.

Installation

Unter eeeXubuntu/Ubuntu

Dies ist eine kompakte Anleitung, ohne all die verlockenden Irrwege die ich beschritten habe. Nur soviel: Falscher Treiber und man hat das Gefühl, es sei eine Schnecke Inside, bzw ein Vogel ins UMTS-Wirelesskabel geflogen. Ausgetestet funktionieren tut es wunderbar für eeeXubuntu und Debian.
Weiterlesen

Office 2007 Wordateien (docx) unter (Debian) Linux mit OpenOffice öffnen

Voraussetzungen

Word 2007Office 2007 greift um sich! Immer öfters begegnet man den docx Dateien im OpenXML Format. Die vorgestellte Lösung erlaubt das Öffnen und Ansehen dieser Dateien in OpenOffice. Ob sie allerdings echt Layouttreu sind, habe ich nicht gecheckt. Damit es läuft sollte ein OpenOffice > 2.0 installiert sein → bei mir hats mit 2.2.1 gefunzt.

Vorgehen

Zum Glück wird dee Translator weiterentwickelt. Die entsprechenden Dateinamen müssen einfach angepasst werden. Der Downloadlink sollte generisch sein.

  1. Download des OpenOffice OpenXML Translator – RPM’s von Novell.
  2. Im Verzeichnis drin das RPM entpacken (Dateinamen bitte anpassen):
    rpm2cpio odf-converter-1.0.0-5.i586.rpm | cpio -iv --make-directories
  3. OpenOffice schliessen und die entsprechenden Erweiterungen ins richtige Verzeichnis kopieren:
    cp -r usr/lib/ooo-2.0/* /usr/lib/openoffice/
  4. Die Doku kopieren:
    cp -r usr/share/doc/packages/odf-converter /usr/share/doc/
  5. Mime-XML kopieren:
    cp usr/share/mime/packages/odf-converter.xml  /usr/share/mime/packages/
  6. Mime-Datenbank updaten:
    update-mime-database /usr/share/mime
  7. KDE3 Mime:
    cp opt/kde3/share/mimelnk/application/* /usr/share/mimelnk/application/
  8. Gnome Mime:
    cp opt/kde3/share/mimelnk/application/* /usr/share/mimelnk/application/
  9. Dann noch die Icons:
    cp -r opt/gnome/share/icons/* /usr/share/icons/
  10. Sich freuen!!!

Addition Mai 2008:

Zamzar macht das nun auch online! Ganz stark, und vorallem mit allen Formaten, also auch xlsx (Excel 2007)!

Grub mit Bild beim Booten

Splashimage für Grub

Skull als SplashimageDer Bootloader GRUB versprüht beim Booten eher spröden Charme. Dem kann man mit einem Splashimage zumindest ein Bisschen abhelfen… Man will doch auch Eindruck schinden, oder?

Nundenn, zuerst mal Splashimages holen (wie ästhetisch-kreative Naturen selber welche machen können steht im GRUB Splash Image Howto) und ins Verzeichnis /boot/grub/splashimages/ legen. In /boot/grub/menu.lst folgende Zeile ergänzen:

splashimage=(hd0,0)/boot/grub/splashimages/splashname.xpm.gz

Der Parameter (hd0,0) gibt an auf welcher Partition auf welcher Festplatte gesucht werden soll. Am einfachsten schaut man in den Startmenüeinträgen in derselben Datei nach wo das Linux liegt und da sind die Chancen nicht schlecht. Liegt man falsch, motzt Grub zwar etwas, macht aber trotzdem weiter.

Links und Verweise

Eine englisch Anleitung mit grub-splashimages Vorschau hat Carthik. Ein HOWTO für Ubuntu (ebenfalls in Englisch) gibt es in deren Foren. Eine geniale und deutschsprachige Anleitung hat simorz erstellt.

Schöne Splashimages gibt es:

Mediawiki im Intranet: Nur angemeldete Benutzer zulassen

Geschlossenes Mediawiki

restricted Ein Mediawiki im Intranet muss unter Umständen abgeriegelt und ausschliesslich einer geschlossenen Benutzergruppe zugänglich gemacht werden. Wenn man wissen will, welcher Benutzer welche Wikiseite bearbeitet hat, reichen leider die schönen Basic-Authentication Features von Apache nicht aus. Damit Mediawiki alle zur Anmeldung zwingt muss die Datei LocalSettings.php folgendermassen ergänzt werden:
############## Handmade ################
# Specify who can edit: true means only logged in users may edit pages
$wgGroupPermissions['*'    ]['createaccount']   = false;
$wgGroupPermissions['*'    ]['edit']            = false;
$wgGroupPermissions['*'    ]['read']            = false;
$wgGroupPermissions['sysop']['createaccount']   = true;
$wgGroupPermissions['user' ]['edit']            = true;
$wgGroupPermissions['user' ]['read']            = true;

# Logo
$wgLogo                         = "/images/bbbq.gif";

# Pages anonymous (not-logged-in) users may see
$wgWhitelistRead = array ("Spezial:Userlogin", "Wikipedia:Help");

Benutzer

Am Einfachsten ist sicher das Kopieren eines bestehenden Users (eventuell in MySQL). Dabei müssen user_id unduser_name eindeutig sein. Normalerweise braucht es keine weiteren Rechtemanipulationen. Sollen die Benutzer trotzdem gewissen Gruppen zugeteilt werden, gibt die Mediawiki-Dokumentation Auskunft über die Rechte und die Zuteilung zu Gruppen.

Passworte

In Mediawiki 1.10 ist die Passwortverschlüsselung in der Funktion includes/GlobalFunctions.php definiert:

function wfEncryptPassword( $userid, $password ) {
        global $wgPasswordSalt;
        $p = md5( $password);

        if($wgPasswordSalt)
                return md5( "{$userid}-{$p}" );
        else
                return $p;
}

$wgPasswordSalt kann in LocalSettings.php umdefiniert werden, aber normalerweise ist es in includes/DefaultSettings.php auf true gesetzt. $userid ist die user_id aus der Tabelle user.

Das Passwort kann mit php ausgegeben werden (angenommen für user mit id 15):

<?php echo md5('15-'.md5('PASSWORT'))."\n"; ?>

Oder direkt in Mysql:

UPDATE bi_user SET user_password=md5(concat(user_id,'-',md5('PASSWORT'))) WHERE user_id=15;

Mediawiki Update/Upgrade unter Debian

Upgrade von 1.7 auf 1.10

Um die installierte Version zu checken kann folgende Spezialseite aufgerufen werden: http://wiki.yourhost.ch/mediawiki/index.php/Spezial:Version.

Zuerst muss man mal upgraden und das Baby installieren:

apt-get update
apt-get install mediawiki mediawiki1.10

Danach sollte man zu folgenden Dateien kommen:

LocalSettings.php
Ist bei Version 1.7 an einem anderen Ort:

cp /var/lib/mediawiki1.7/LocalSettings.php /etc/mediawiki1.10/

Eventuell muss in der Datei das Verzeichnis angepasst werden.

AdminSettings.php
Hat bei mir noch nicht existiert:

cp /usr/share/doc/mediawiki1.10/examples/AdminSettings.sample /etc/mediawiki1.10/AdminSettings.php

Und danach die Datei editieren und Usernamen/Passwort setzen.

Verzeichnisse: extensions und images
Gibt es bei uns nicht… Sie werden sich aber höchstwahrscheinlich im Verzeichnis /var/lib/mediawiki1.7 befinden und müssen unter Umständen in /var/lib/mediawiki1.10 kopiert werden.

apache.conf
/etc/mediawiki1.7/apache.conf und /etc/mediawiki1.10/apache.conf müssen der lokalen Konfiguration angepasst werden.

Nun muss die Datenbank von der Kommandozeile aus geupdated und Apache neu gestartet werden.

cd /var/lib/mediawiki1.10/maintenance
php5 update.php
/etc/init.d/apache2 reload

Ein Aufrufen der Seite provozierte bei mir den Fehler: failed to open stream: Permission denied in /usr/share/mediawiki1.10/includes/WebStart.php on line 86. Dagegen half folgendes:

chown www-data.www-data /etc/mediawiki1.10/*
chmod a+r /etc/mediawiki1.10/*

Switchconf: Ein kleines, feines aber geniales Tool um die Konfiguration umzuschalten

Das Tool

Laptops sind (meistens) (mehr oder weniger) portabel. Sie müssen sich also viele verschiedene Dinge in ihren Netzwerkanschlüssen gefallen lassen; Andere Konfigurationen, Netze die mit PEAP gesichert sind, Luftnetze, wechselnde Drucker und Windowsshares, etcetc.

Auch zu Hause gibt es unter Umständen Konfigurationen mit und ohne externem Monitor, in verschiedenen Netzwerkzonen (jaa, das gibts wirklich auch zu Hause …) etcetc pipapo.

Natürlich kann man sich das automagisch erledigen lassen. Unter Debian mit ifupdown, etc… Ich mags aber unter meiner Kontrolle auf mein Kommando. Switchconf ist ein kleines, feines Tool, dass die Aufgabe elegant und einfach löst. Es kann für sich angewendet oder von einem, anderen Skript getriggert werden.

Funktionsweise

In einem konfigurierbaren Verzeichnis (normalerweise /etc/switchconf) werden Verzeichnisse für die Konfigurationen angelegt. Beispielsweise home und work. Dort kann nun ein kompletter Verzeichnisbaum mit den Dateien die zu dieser Konfiguration gehören aufgebaut werden; beispielsweise ein /etc/switchconf/home/etc/network/interfaces und ein /etc/switchconf/work/etc/network/interfaces. Das Kommando

switchconf home

grast nun das Ganze /etc/switchconf/home ab und erstellt symbolische Links (konfigurierbar, es kann auch hardlinken und kopieren) vom System auf diese Konfiguration. Also:
/etc/network/interfaces/etc/switchconf/home/etc/network/interfaces

Auf die Arbeitskonfiguration schaltet es um mittels:

switchconf work

Und der Link sieht so aus:
/etc/network/interfaces/etc/switchconf/work/etc/network/interfaces

Weiter gibt es noch die Verzeichnisse /etc/switchconf/before.d und /etc/switchconf/after.d. Alle Skripts in before.d werden vor, alle in after.d nach der Umstellung ausgeführt, damit können Daemons (Cups, PCMCIA, XSupplicant, …) neu gestartet werden damit sie die neue Konfiguration einlesen.

Mögliche Lösungen

Netzwerk
Die Datei /etc/network/interfaces für jede Konfiguration anpassen. Bei statischem DNS eventuell noch /etc/resolv.conf.
Windows Shares
Die Datei /etc/fstab und eventuell die Credentials für jede Konfiguration anpassen.
Zweitmonitor, X-Auflösung, etc…
Die Datei /etc/X11/xorg.conf für jede Konfiguration anpassen.
Drucker
Die Datei /etc/cups/printers.conf für jede Konfiguration anpassen.
XSupplicant, WPA_Supplicant
Die Datei /etc/default/xsupplicant für jede Konfiguration anpassen. ENABLED auf 0 oder 1 setzen, je nachdem ob man ihn will oder nicht…

Es wäre noch mehr denkbar wie SMTP-Host, Hintergrundbild, …

Switchconf kann auch von Netzwerkdetektoren wie laptop-netconf oder Guessnet angestossen werden. Ich finde sein Konzept etwas transparenter wie die eingebauten Monster dieser Produkte… Und vorallem kann man immernoch von Hand umschalten…

ATI (AMD) Radeon Grafikkarte unter Linux

Tja, die Schule geht los und ich hab viel gewurstelt an meinem Laptop… Morgen früh, extrem viel geschlafen, ich starte die Präsi, beginne Weisheiten abzusondern und sehe dass ich die Präsentation am Beamer genau nicht sehe. Es folgt ein wildes Gewurstel an Kabeln, Tastern und Schaltern bis ich kleinlaut ein Windowslaptop holen gehen muss, unter dem spottenden Spalier der Pinguinjäger…

Diagnose

Die AMD-Treiber sind ein proprietäres Modul von ATI selbst. Es treibt das Xorg an und ist wie alle proprietären Module (vmware, gna!, aber das ist ein anderes Thema) abhängig von der Kernelversion und reagiert empfindlich auf Updates. Ob alles ok ist sieht man am Besten mittels fglrxinfo:

$ fglrxinfo
display: :0.0 screen: 0
OpenGL vendor string: Mesa project: www.mesa3d.org
OpenGL renderer string: Mesa GLX Indirect
OpenGL version string: 1.2 (1.5 Mesa 6.5.1)

Hab ichs doch geahnt, Mesa werkelt und nicht ATI. lsmod zeigte mir, dass kein Modul fglrx seine Arbeit tat. Nun, wahrscheinlich wurde wieder der Kernel hinter meinem Rücken upgedated…

Die unrühmliche Ausprobierphase

Nun folgte die obligatorische, eigentlich-weiss-man-es-besser Treiber neuinstallations-, X-reboots- und Restartphase 🙂 . Sie gipfelte immer irgendwie in:

FATAL: Module fglrx not found.

Die Lösung

Zuerst aufräumen als Root:

rm -Rf /usr/lib/fglrx
rm -Rf /lib/modules/fglrx
dpkg -P fglrx-amdcccle fglrx-driver fglrx-driver-dev fglrx-kernel-src

Dann das Ganze wie in diesem kleinen HOWTO beschrieben installieren:

Folgende Dinge braucht man:

apt-get install module-assistant build-essential dh-make debhelper debconf libstdc++5 linux-headers-$(uname -r)

Dann den Treiber downloaden und die Pakete erstellen:

ati-driver-installer-8.39.4-x86.x86_64.run --buildpkg Debian/etch

Diese installieren:

dpkg -i *.deb

Und das Kernelmodul machen:

cd /usr/src
m-a prepare
m-a a-i fglrx

Ein modprobe fglrx sollte nun klappen. Ev muss man es noch in /etc/modules einbauen.

Ich habe noch eine neue xorg.conf erstellt:

dpkg-reconfigure xserver-xorg
aticonfig --initial

Der Rest wird vom Tool amdcccle erledigt (auch als Root starten)…