Mehrere Firefox Versionen gleichzeitig

Dezember 18, 2006  |  Allgemein  |  No Comments

Durch den lokalen Profil Ordner ist Firefox eigentlich auf eine einzige Installation beschränkt. Abhilfe schafft hier jedoch FFLauncher.
Damit kann man zB. die Versionen 1,1.5 und 2 parallel benutzen und Inkompatibilitäten ausmerzen.

Suchen/ Ersetzen mit sed für Windows

November 21, 2006  |  Allgemein  |  No Comments

Um unter Windows bestimmte Wörter einer Textdatei per Commandline zu ersetzen, eignet sich der Windows Port von sed. Sed.exe ist im GNU Utilites for 32 Paket enthalten.

Um einen Text in einer Datei zu ersetzen ist sed wie folgt aufzurufen:

sed 's/zu_ersetzen/ersetzt_durch/g' dateiname.txt

Weitere Tipps zur Benutzung findet man ua. bei de.wikipedia.org[]

Internet Explorer 7 RC – Funny Bug

September 3, 2006  |  Allgemein  |  No Comments

Microsoft hat vor ein paar Tagen den ersten Release Candidate des Internet Explorer 7 veröffentlicht. Wie kürzlich berichtet gibt es auch eine Standalone Version zum Download die einem den Test (zum Beispiel auf Bugs ;) ) parallel zu älteren Versionen ermöglicht.
Nach ein paar Besuchen diverser Websites ist auch schnell aufgefallen wie gut der IE7 (eigentlich nicht gewollte Werbe-) PopUps blockiert…Video anschauen
Blockiert dieser Browser doch tatsächlich den Dialog zum Wählen einer lokalen Datei. Wirklich gut Microsoft, so bleibt der Firefox weiterhin konkurrenzlos…

1&1 Softphone unter Linux mit Ekiga

August 17, 2006  |  Allgemein  |  No Comments

Unter Windows kann man dank des Hauseigenen 1&1-Softphone’s über seinen 1&1-VoIP-Account telefonieren.
Für die Realisierung unter Linux bietet sich eignet sich im Prinzip jede Phonesoftware welches das SIP-Protokoll unterstützt.
Das Beispiel zeigt, wie die Einstellungen unter Ekiga 2.0 (ehemals gnomemeeting) zu setzen sind. Ekiga bietet sich für Gnome an, es gibt inzwischen auch schon eine Windows-Portierung (mit Vorsicht zu genießen) und ist bei der Ubuntu 6.06 Standard Installation bereits dabei (Anwendungen->Internet). Eine Alternative wäre z.B. Linphone.
Nachdem Start von Ekiga unter Bearbeiten->Konten->Hinzufügen ein neues Konto mit folgenden Einstellungen anlegen:

Konto-Bezeichnung: [beliebigername]
Registrar: sip.1und1.de
Benutzer: 49[Vorwahl ohne Null][Nummer] (z.B. 49 1234 56789 ohne Leerzeichen)
Passwort: [Passwort]

Mehr Optionen:
Authentifizierungs-Name: wie Benutzer
Realm/Domäne: sip.1und1.de
Zeitlimit für Anmeldung: 3600

Jetzt noch unter Bearbeiten->Einstellungen->Netzwerk-Einstellungen den STUN-Server auf

stun.1und1.de

setzen.
Ab sofort kann man günstig, bzw. falls PhoneFlat vorhanden sogar umsonst, ins dt. Festnetz telefonieren.

Firefox und focus() / blur() Permission Problem bei Textfeldern

August 9, 2006  |  Allgemein  |  No Comments

Unter Firefox (< = 1.5.0.6) gibt es wohl ein Problem mit dem Setzen des Fokus via focus() bzw. blur() bei Textfeldern.
Will man beispielsweise in einem Formular nach Drücken der Return-Taste das nächstfolgende Textfeld mit ‘element.focus()’ markieren, kommt es zmd bei mir zu etwa folgendem Fehler:

"Die Erlaubnis für das Setzen der Eigenschaft XULElement.selectedIndex wurde verweigert" when calling method:
[nsIAutoCompletePopup::selectedIndex]" nsresult: "0x8057001e (NS_ERROR_XPC_JS_THREW_STRING)"

Bei der Mozilla Foundation ist dieser Bug bereits seit längerem als JavaScript focus() throws “Permission denied to get property XULElement.selectedIndex” bekannt.
Hier wird auch klar, dass das Problem wohl an der automatischen Textvervollständigung liegt.
Die einfachste Lösung ist dem <input type=”text” /> Element noch das Attribut ‘autocomplete=off’ anzufügen, sieht so aus:

<input type="text" autocomplete="off" />

Alternativ kann man auch folgenden JS-Code Snippet verwenden, dieser fügt allen input Feldern das Attribut automatisch hinzu:

var inputElements = document.getElementsByTagName('input');
for (var i=0; inputElements[i]; i++)
   inputElements[i].setAttribute('autocomplete', 'off');

MySQL: Datenbank zu UTF8 Kollation konventieren

Juli 26, 2006  |  Allgemein  |  No Comments

Beim Ex- und Import von der MySql Datenbank im Büro auf den Laptop kam es in letzter Zeit immer wieder zu Problemen mit den Umlauten. Bei Präsentationen natürlich alles andere als gut deswegen musste ich mich nach einer Lösung umsehen.
Das Problem ist die Mysql Standard Collation ‘latin1′ und nicht ‘utf8′ (utf8_general_ci ist wohl für die meisten Sprachen die beste Wahl).
Um dies zu verändern, entweder den MySql-Server immer mit

shell>mysqld --default-character-set=utf8 --default-collation=utf8_general_ci

starten, oder MySql gleich mit den ‘richtigem’ Charset und Collation kompilieren:

shell>./configure --with-charset=utf8 --with-collation=utf8_general_ci

Alternativ und für Windows die beste Lösung, kann auch die my.cnf wie folgt angepasst werden:

default-character-set=utf8
default-collation=utf8_general_ci

Um bereits existierende Tabellen mit PHP nach UTF8 zu konventieren, hilft dieser kleine Code-Snippet

$dbname = 'my_databaseName';
mysql_connect('127.0.0.1', 'root', '');
mysql_query("ALTER DATABASE `$dbname` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci");
$res = mysql_query("SHOW TABLES FROM `$dbname`");
while($row = mysql_fetch_row($res)) {
   $query = "ALTER TABLE {$dbname}.`{$row[0]}` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci";
   mysql_query($query);
   $query = "ALTER TABLE {$dbname}.`{$row[0]}` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci";
   mysql_query($query);
}
echo 'all tables converted';

Um in Zukunft sicher zu gehen, dass Inhalte die in die Datenbank geschrieben werden auch Zeichenkonform konventiert werden, ist es ratsam nach dem connect bzw. select_db den richtigen Zeichensatz zu setzen:

mysql_query("SET NAMES 'utf8'");

IE Freeze Bug

Juli 14, 2006  |  Allgemein  |  No Comments

Dass der IE 6 wohl nicht zu den besten Produkten aus Dem Hause Microsoft zu zählen ist, ist ja durchaus bekannt. Heute eher zufällig einen Absturz provoziert und nach ein paar ‘Investigations’ den Schadcode gefunden.
Bisherigen Erfahrungen nach crasht der IE bis Version 6 (getestet 5.1, 5.5 und 6.0 auf einer XP SP2 und IE 6 auf XPx64 Maschine), der IE7 Beta 2 (und 3) bleiben davon verschont.
Es handelt sich hierbei um eine DOS-Freeze Attacke die den Browser zum ‘einfrieren’ bringt und keine weiteren Interaktionen zulässt.

<style type="text/css">
input
{
   width:35px;
   float:left;
}
</style>

<div style="width:50px;">
   <span></span>
   <span style="position:relative;">
      <input />
   </span>
   <input />
   <input />
</div>

Hierbei ist nur zu beachten dass die Breite des div-Elements größer als die des Input Feldes sein muss, der absolute Wert jedoch keine Rolle spielt (z.B. div-width: 200px und input-width: 199px)

Bilder Fremdverlinkung verhindern

Juli 10, 2006  |  Allgemein  |  No Comments

Um zu verhindern, dass Bilder eigene direkt von anderen eingebunden werden , gibt es zwei Möglichkeiten:
Die erste ist ein PHP-Script welches das Bild lädt, den REFRER überprüft und ggf. noch ein Wasserzeichen zu dem Bild hinzufügtden und wieder ausgibt ausgibt.
Der Code kann etwa so aussehen:

function href_ok() {
   $domain_array = Array();
   $domain_array[] = 'meinedomain.de';
   return in_array($_SERVER['HTTP_REFERER'], $domain_array[]);
}
header('Content-Type: image/jpeg');
$uri = getenv('REQUEST_URI');
$urix = explode('/', $uri);
$img_path = "images/{$_GET['fname']}.jpg";
$imagesrc = imagecreatefromjpeg($img_path);
if(!href_ok()) {
   $water_mark = ImageCreateFromPNG('images/photos/wasserzeichen.png');
   ImageCopy($imagesrc, $water_mark, imagesx($imagesrc) - imagesx($water_mark), imagesy($imagesrc) - imagesy($water_mark), 0, 0, imagesx($water_mark), imagesy($water_mark));
}
imagejpeg($imagesrc);
imagedestroy($imagesrc);

Um das Script wirklich produktiv einsetzen zu können, sind aber noch ein paar Anpassungen nötig.
Im Beispiel müsste u.a. die imagecreatefromjpeg und imagejpeg je nach Bildformat angepasst werden (imagecreatefromgif, imagecreatefrompng…).
Außerdem sollte der Bilder Pfad nicht allzu leicht zu erraten sein (z.B. nicht /images) oder am besten in einem Verzeichnis außerhalb des Webservers liegen.

Alternativ kann man auch mod_rewrite einsetzen, sollte zumindest Performance technisch schneller unterwegs sein.
Vorraussetzung für die Funktion ist ein Apache Webserver mit mod_rewrite aktiviert (leider bieten diesen Service nicht allzu viele Webhoster).
Um bei einer Fremdverlinkung ein anderes Bild anzuzeigen, ist die .htaccess Datei wie folgt zu ändern:

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www.)?domain.de(/.*)?$ [NC]
RewriteRule .(gif|jpg|png|jpeg|GIF|JPG|PNG|JPEG)$ http://www.example.org/ersatzbild.jpg [R,L]

Die dritte Zeile muss natürlich auf die eigene Domain angepasst werden.
Das ersatzbild.jpg kann auch wiederrum ein einfaches PHP-Script sein, welches das Bild lädt, ein Wasserzeichen hinzufügt und wieder ausgibt.
Um gar kein Bild anzuzeigen (spart Traffic), ist die letzte Zeile durch

RewriteRule .(gif|jpg|png|jpeg|GIF|JPG|PNG|JPEG)$ - [F]

zu ersetzen.

Raid 5 unter WinXP freischalten

Juli 4, 2006  |  Allgemein  |  No Comments

Heute gibts mal wieder einen weiteren Teil zur Optimierung für Windows XP als Server.
Auch wenn Software-RAID oftmals in der Kritik steht und nicht als optimale Lösung angesehen wird, kann ich zum einen sagen dass es mit heutigen Prozessoren jenseits der 1-GHZ-Grenze Performance Engpässe gegen null gehen, zum anderen billige Hardware RAID-Controller (z.B. Onboard-Controller bei einigen Mainboards und PCI-Karten bis ~100 Euro) im Prinzip nicht anderes machen als ein abgespecktes Linux-Embed-Software RAID zu nutzen und so gesehen auch nicht wirklich eine optimale Lösung sind.
Wer also nicht hunderte von Euro in teure Controller ausgeben will, fährt mit einem Software Raid ganz gut.
Manko hierbei (war) jedoch dass nur RAID-0 (Stripe) oder RAID-1 (Mirror) funktionieren. Dem kann aber zmb bei Windows XP Pro entgegen kommen und durch Modifizierung kleinerer Dateien RAID-5 aktivieren.

Bei diesem Tutorial müssen die Dateien dmboot.sys, dmconfig.dll und dmadmin.exe mit Hilfe eines Hex-Editors angepasst werden.
Damit nicht die WFP (Windows File Protection) die Veränderung der Dateien selbstständig zurücksetzt, sollten diese aus den Ordnern %windir%\ServicePackFiles\i386 und %windir%\system32\dllcache gelöscht werden.
Nun müssen die Dateien in einen neu angelegten Ordner kopiert (dmboot.sys ist unter system32/drivers zu finden, die anderen beiden Dateien unter system32) und wie folgt im Hexeditor geändert werden:

Nachdem Speichern der Änderungen die Dateien kopieren und ggf. noch eine Sicherung vor dem Ersetzen machen.
Bei den WFP Dialogen jeweils im ersten ‘Abbrechen’, im zweiten ‘Ja’ klicken.
Raid 5 anlegen:
Jetzt die Datenträgerverwaltung (Diskmgmt.msc) starten und die gewünschten Datenträger (zb Datenträger 1)rechts anklicken und “In dynamischen Datenträger konventieren” wählen. Nach der Umwandlung auf den ersten der dynamischen Datenträger rechts klicken und “Neues Volumen” wählen. Im anschließenden Assistent-Dialog kann nun RAID-5 markiert werden.