Heute wird aufgeräumt

31. Dezember 2007

0 Kommentare

Heute komme ich endlich mal dazu, meine vielen Entwürfe durchzuschauen, zu löschen oder zu vollenden, wundert euch also nicht über die Artikelflut heute. ;)

¬ geschrieben von Michael in Blog

Wieso ich Vista hasse

31. Dezember 2007

3 Kommentare

Ich sitze gerade an einem Vista-Notebook und bin nur noch genervt. Alle lästern über Vista und langsam kann ich es immer mehr verstehen. Hier ein paar Beispiele:

Integrierte Webcam: Stottert im MSN Messenger oder bleibt gerne mal frieren, genauso bei unserem Chatpartner.
Benutzerkontensteuerung: Wieso muss ich ständig mehrmals bestätigen, dass ich wirklich etwas tun will? Unter Ubuntu reicht ein Klick für eine Systemeinstellung, bei Vista geht unter dem dreifachen nichts. Besonders toll ist es hier weil ich das von HP zugemüllte Notebook entschlacken will und mal die Hälfte der vorinstallierten Software deinstallieren will. Bei der Norton Suite (die bisher bei jedem Start Aufmerksamkeit wollte) dauerte das geschlagene 10 Minuten, da ist ja ein Ubuntu Update schneller. Vista ist seit Minuten am Updaten und kommt irgendwie nicht voran, jedenfalls fühlt es sich so an.

Unter Ubuntu laufen alle Desktop-Effekte auf dem Rechner flüssig, bei Vista stottert Flip-3D gerne mal.

Fehlende Innovationen: Wo sind die tollen neuen Sachen, auf die ein Umstieg von XP auf Vista lohnt? Die Sidebar? Gibt’s schon für XP, bei Paint hat man nur die Farbpalette verändert und in der Systemsteuerung finde ich mich nicht zurecht. Als einzigstes Highlight sehe ich das Spiel Majong, schaut besser aus als die Linux-Varianten.

Vista ist mittlerweile bei Update 9 von 16, man dauert das lange! :(

¬ geschrieben von Michael in Ausm Leben

Beim Fernsehen aufgefallen

31. Dezember 2007

4 Kommentare

Apple ist der einzigste Handy-Hersteller, der den Grund bewirbt, wozu die Dinger überhaupt einmal erfunden wurden: das Telefonieren. Oder ist das in den Hintergrund gerückt?

¬ geschrieben von Michael in Allgemein

Wieso so ein Aufstand?

31. Dezember 2007

3 Kommentare

Hurry, es ist Silvester! :roll:
Ein Haufen Irrer rennt durch die Straßen, schreit rum und verschmutzt die Umwelt mit Chemikalen. Wer räumt die vielen übrig gebliebenen Knaller, Krachmacher und Raketen eigentlich auf? Der Staat? Die Bürger? Die Verursacher?

Oft kann man beim Spazierengehen Wochen nach diesen “Fest” noch den Müll finden. Nur der Weihnachtsspeck am Bauch ist hartnäckiger.

Ich fasse also Silvester für mich mal zusammen:

$year++;

¬ geschrieben von Michael in Ausm Leben

Wordpress 2.3.2

30. Dezember 2007

0 Kommentare

Es gibt (mal wieder…) eine neue Wordpress Version. Da ich bei den Entwicklern keine Liste der veränderten Dateien gefunden habe, gibt es hier mal eine von mir:
Den ganzen Beitrag lesen.

¬ geschrieben von Michael in Blog

Tutorial: Kleiner Downloadcounter

28. Dezember 2007

2 Kommentare

Mit dem in dieser Anleitung gezeigten Methode ist es einfach, Downloads zu zählen. Es bietet keinerlei Administration was auch nicht nötig ist, da es wirklich sehr sehr simpel ist. ;)

Zuerst die Überlegung: Wie zählt man Klicks? Eine simple Lösung habe ich schon einmal vorgestellt. Meine jetzige Lösung legt für jeden Download eine eigene Zählerdatei neben der Datei an, die heruntergeladen werden soll. Natürlich könnte man mit Hilfe einer Datenbank das Skript unendlich ausbauen in Aspekten wie Analyse und Tracking, ich begnüge mich aber mit reinen Zahlen. ;)

Zuerst einmal die Struktur:
Wir benötigen zwei Verzeichnisse: eines in welchem die Dateien liegen und eines, in dem das Skript liegt. Aber wieso zwei? Ganz einfach: Das Skript zählt einen Download und sendet dann den Client an die eigentliche Datei weiter. Das Skript ist also nicht wirklich geeignet, um Hotlinking zu verhindern.

In den Ordner dateien (kann natürlich auch anders lauten) legen wir nun die Dateien, die heruntergeladen werden sollen. In den Ordner download (kann natürlich auch anders lauten) die .htaccess und die dl.php.

.htaccess

RewriteEngine On
RewriteRule ^(.*)$ dl.php?file=$1 [L]

dl.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
// Name des Verzeichnisses der Dateien
$path = 'dateien';
 
// Ab hier nichts mehr ändern
$path = '../'.$path.'/';
if ( !isset($_GET['file']) ) exit;
 
$file = $_GET['file'];
 
if ( empty($_GET['file']) || !file_exists($path.$file) )
{
	die('Datei nicht gefunden!');
}
 
// Gegen Hacking
if ( strpos($file, '..') !== false ) die('Invalid file');
 
// Zähl es!
$countfile = $path . $file . '.txt';
 
if ( !file_exists($countfile) )
{
	// Datei erstellen und mit 1 füllen
	touch($countfile);
	file_put_contents($countfile, '1');
}
else
{
	// Datei auslesen, um eins erhöhen und wieder abspeichern
	file_put_contents($countfile, file_get_contents($countfile) + 1);
}
 
// Weiterleiten zur eigentlichen Datei
header("Location: {$path}{$file}");

Vorteile der Methode mit .htaccess gegenüber der ohne:
Gäste sehen nicht, dass der Download gezählt wird und es sieht auch besser aus. ;)

¬ geschrieben von Michael in Tutorials

Yanix im Detail: Mehrsprachigkeit und Dateiformate

28. Dezember 2007

0 Kommentare

Die Welt ist groß und spricht nicht nur eine Sprache. iBot konnte bisher zwei: Einen wirren Mischmasch aus Deutsch und Englisch. Das wird in Yanix nicht mehr sein.

Ein mächtiges aber effektives System zur Mehrsprachigkeit soll dem Abhilfe schaffen. Über die Realisierung habe ich mir einige Zeit den Kopf zerbrochen. Die meisten PHP-System inkludieren einfach eine PHP-Datei, welche die Definition für viele viele Sprach-Strings enthält. Diese Methode hat jedoch einige Nachteile:

Anfangs wollte ich in Yanix viel auf XML-Dateien setzen, jedoch ist das Parsen von diesen in PHP sehr unbequem. Dann fand ich diesen Befehl, mit welchem sich wirklich sehr einfach .ini-Dateien parsen lassen. Dieses Dateiformat ist uralt, aber sehr praktisch: Es unterstützt Sektionen und hat eine sehr einfache Syntax.

Anfangs setzte ich gerne auf diese Funktion und habe viel (Profile, Plugin-Informationen) damit gemacht, doch stoßte auf ein Problem: Die PHP-Funktion ignoriert Zeilen die es für “ungültig” hält und Sektionen muss man extra wählen.

Ich fand in meiner Klassensammlung schnell einen Parser für .ini-Dateien, optimierte ihn und stellte Teile von Yanix darauf um.

Genug von Formaten, zurück zu der Mehrsprachigkeit! Ich habe für die Yanix-Sprachdateien das .ini-Format gewählt, Sprachdateien schauen nun etwa so aus:

1
2
3
4
5
6
[options]
prefix=[PluginController]
 
[strings]
; General
load_failed_file_not_exists=Could not load %plugin%: file not exists

Im Options-Block werden Einstellungen für dne Sprachparser definiert, im Beispiel soll jedem Eintrag bei Abruf der Prefix [PluginController] voran gestellt werden. Variablen können mit %name% definiert werden und werden vom Parser ersetzt.

Ein praktisches Beispiel (in einem Plugin):

Log::Debug($this->Lang('load_failed_file_not_exists', array('plugin' => 'demo')));

In Plugins wird die Methode Lang() der Klasse PluginBase verwendet, von der jedes Plugin erbt. PluginBase hat ein paar Methoden, dazu aber vielleicht ein anderes Mal mehr dazu.

Die Ausgabe der Konsole:

[D 28.12 14:21:51][PluginController] Could not load demo: file not exists

Plugins und Yanix selbst nutzen getrennte Orte zum Speichern der Sprachdateien. Bei Yanix liegen diese im Ordner lang/, bei den Plugins in deren Ordnern.

Eine weitere Möglichkeit, wenn Plugins z.B. sehr viele Sprachstrings brauchen und oft die selben Variablen darin benötigen, ist diese:

1
2
3
4
5
6
7
8
// Namespace definieren ($this->name ist immer der Pluginname)
Lang::UseNamespace($this->name);
// Allgemeine Variablen definieren
Lang::UseVariables(array('plugin' => $this->name, 'foo' => 'bar'));
 
// Sprachstring ausgeben
$string = __('foo');
Log::Debug($string);

Im Moment bin ich noch dabei, das ganze System zu verfeinern und zu optimieren, bis zum Release ist Yanix dann vollständig übersetzbar! :)

¬ geschrieben von Michael in Allgemein, Yanix

Bequeme Logs

27. Dezember 2007

1 Kommentar

Ich habe mich gerade mit den Prozesskontrollfunktionen von PHP auseinander gesetzt um vielleicht ein paar nützliche Funktionen für Yanix zu finden und bin auf ein Problem gestoßen: Ein Feature der Prozesskontrollfunktionen ist es, Prozesse im Hintergrund laufen zu lassen. Wie soll ich ein Skript debuggen, welches ich nicht sehen kann?

Nach ein bisschen Grübeln kam ich auf die Lösung: Bau dir ein Log-Terminal!

Schritt 1: Logging
Diese funktion schreibt in eine Datei (in meinem Fall log.txt im XAMPP-Ordner) die übergebene Nachricht mit der PID des Prozesses der die Nachricht schreibt. Die PID erhalte ich beim Aufruf von pcntl_fork().

1
2
3
4
5
6
7
8
9
function L($msg)
{
	global $pid;
	$logfile = '/opt/lampp/htdocs/log.txt';
	$msg = '[' . date('H:i:s') . "][{$pid}] " . $msg . "\n";
	$f = fopen($logfile, 'a');
	fwrite($f, $msg);
	fclose($f);
}

Schritt 2: Ausgabe
Als nächstes die Ausgabe. Mit ein bisschen PHP, HTML, Javascript und Prototype entstand eine kleines Skript um diese Ausgaben bequem und hübsch in einem Browser ansehen zu können. Das Skript gibt es hier zum Download. Es unterstützt über AJAX entweder die Anzeige einer Datei welche über den Webserver erreichbar ist oder über PHP eine beliebige Datei des Dateisystems. Mehr dazu in den Kommentaren der Datei.

¬ geschrieben von Michael in PHP, Snippets

Theme von BenediktRB • Powered by Wordpress • Abonniere den RSS Feed