Archive for April, 2007

PHP Templating: the easy and powerfull way…

Es gibt unzählige Template Engines und ich habe auch so manche ausprobliert. Und was ist das Fazit? Keine ist wirklich brauchbar! Denn

  • ich will keine eine eigene Template-Sprache lernen
  • ich will keine Templates kompilieren lassen
  • ich will auch nicht hunderte Libraries einbinden müssen

Jedenfalls bin ich auf PHPGuru.org auf einen Artikel [1] gestossen und habe mir aus dem Konzept eine eigene Template Engines geschrieben die 41 Zeilen Code gross ist und einiges (wenn nicht mehr) kann als z.B. Smarty (wie Objekte in Templates oder HTML aus PHP wieder im Template verwenden). Aber seht es euch selber an unter templating.zip [2]. Kommentare erwünscht!

Template Beispiel

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?include("header.tmpl.php")?>
<h1><?=$title?></h1>
 
<h2>This is a navigation</h2>
<?=$navigation?>
 
<h2>Counting</h2>
<table>
    <?foreach($texts as $t):?>
        <tr>
            <td bgcolor="#dddddd"><?=$t?></td>
        </tr>
    <?endforeach?>
</table>
 
<h2>Persons</h2>
<table>
	<?foreach($personobjs as $p):?>
        <tr>
            <td bgcolor="#dddddd"><?=$p->getName()?> </td>
        </tr>
    <?endforeach?>
</table>
<?include("footer.tmpl.php")?>

Template Klasse

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
35
36
37
38
39
40
41
42
<?php
class Template {
 
	private $output = "";
	private $path = "";
	private $send = array();
 
	public function __construct($path = "") {
		$this->path = $path;
	}
 
	public function __set($name, $value) {
		$this->send[$name] = $value;
	}
 
	public function setPath($path) {
		$this->path = $path;
	}
 
	public function useTemplate($templatename) {
		$this->output = $this->getTemplateContent($this->path.$templatename);
	}
 
	private function getTemplateContent($filename) {
		foreach ($this->send as $key => $value) {
			$$key = $value;
		}
 
		if (is_file($filename)) {
      ob_start();
      include $filename;
      $contents = ob_get_contents();
      ob_end_clean();
      return $contents;
    }
    return false;
	}
 
	public function getOutput() {
		return $this->output;
	}
}

Eine beispiel Seite

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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<?php
require_once "DB.class.php";
require_once "Template.class.php";
 
// this is a site class
class Site {
	private $DB;
	private $Template;
 
	public function __construct() {
		// inits db class
		$this->DB = new DB();
 
		// inits template class
		$this->Template = new Template();
		$this->Template->setPath("../templating/tmpl/");
	}
 
	// shows a simple html site
	public function showIndex() {
 
		// gets content from db
		$texts = $this->DB->getTexts();
 
		// sets content to template
		$this->Template->texts = $texts;
 
		//parses the content and use the output again in a template
		$this->Template->useTemplate("navigation.tmpl.php");
		$this->Template->navigation = $this->Template->getOutput();
 
		// sets another var to the template
		$this->Template->title = "hello world";
 
		// gets Persons as an array of objects form the db and set it as a
		// var to the template
		$this->Template->personobjs = $this->DB->getPersons();
 
		//parses the content
		$this->Template->useTemplate("page.tmpl.php");
 
		// shows the output
		echo $this->Template->getOutput();
	}
}
 
$Site = new Site();
$Site->showIndex();

[1] http://www.phpguru.org/static/templating.html
[2] http://www.renemoser.net/dev/templating.zip

JFakeGPS: Wlan-Signalmessungspläne in Gebäuden

Bekannterweise kann man mit Kismet [1] und GPSDrive [2] (mit dazugehörigem GPS-Empfänger) eine schöne Karte zeichnen lassen, wie die Signalstärke am entsprechenden Ort aussieht.

Damit man ein GPS-Signal empfangen kann, bracht es normalerweise eine Sichtverbindung zum GPS-Satelit, sprich in Gebäuden hat man keinen Empfang.

Dank JFakeGPS [3] haben ich und Benedikt Trefzer eine kleine Software geschrieben, die ein GPS-Signal imitiert und deshalb auch in Gebäuden funktioniert. Ein GPS-Empfängergerät ist dazu nicht nötig.

Die Software funktioniert grob Beschrieben wie folgt: Um eine Karte zu erstellen, wird z.B. ein Gebäudeumriss in Kismet und JFakeGPS geladen. Dann werden anhand von 2 Referenzpunkten die Distanzen definiert. Und schon kann man sich mit dem Laptop an den Ort begeben wo man das 1. Signal messen möchte. Dann klickt man auf der Karte an den entsprechenden Standort und schon sendent JFakeGPS ein GPS-Signal welches von Kismet aufgefangen wird.

Wie der Name schon antönt ist es in Java geschrieben. Screenshots findet man auf der Sourceforge-Seite [4] des Projektes.
Es hat noch 2-3 Bugs aber isch schon recht brauchbar. Die Software steht unter GPL. Viel Spass

[1] http://www.kismetwireless.net/
[2] http://freshmeat.net/projects/gpsdrive/
[3] http://jfakegps.sourceforge.net/
[4] http://sourceforge.net/projects/jfakegps/

Virenschutz für Mac OS X und Linux? Ohne mich!

Aktuell auf Zdnet [1] und Spiegel Online [2] findet man ein Interview mit Eugene Kaspersky, dem Sicherheitsguru mit der gleichnamigen Antiviren-Software. Darin stellt er fest, dass OS X und Linux am Markt (vermutlich meint er im Desktop Markt) langsam aber stetig steigen und es nur eine Frage der Zeit sei bis die bösen Buben auch Schadcode für die zwei Alternativ-Betriebsysteme coden würden.

Hinter vorgehaltener Hand mag man sagen, “Das hätte der wohl gerne!”, findet man heute doch keine Viren “in the wild” für diese Betriebssysteme.

Grundsätzlich kann man sicher sagen, dass kein Betriebssystem sich als “sicher” betiteln kann, jedoch ist es kein Geheimnis, dass Linux und OS X mehr Schutz als Windows bieten und dies auch mehrfach bewiesen wurde.

Warum soll man denn überhaupt einen Virenschutz benützten? Dafür gibt es eigentlich nur einen guten Grund, um den Softwareentwicklern mehr Zeit zum Flicken zu geben. Dies ist jedoch ein gefährliche Sicherheit, 1. sind Cracker am längeren Hebel (man kann nur Gegenmassnahmen ergreifen, wenn das Unheil schon im Umlauf ist) und 2. warum sollte der Hersteller des Betriebssystems Iinteresse haben ein Loch zu flicken, wenn er selber Geld mit Antiviren-Updates verdient!?

Die Lösung ist simpel! Keinen Virenschutz verwenden und Druck machen, dass das Betriebsystem gepatcht wird, und zwar so schnell wie möglich. Die Firma, welche 1. weniger zu Patchen hat und 2. Updates schneller bereitstellt wird diesen Kampf überleben und in meinen Augen hat OS X und Linux da sehr, sehr gute Chancen.

Natürlich kann man sagen, dass der User wie immer der Leittragende ist. Nun auf kurze Sicht stimmt dies sicher, aber längerfristig wird das/die Sicherste(n) Betriebsysteme (TM) überleben. Und das blöde Antivirengeupdate bleibt dem “ihr wisst schon wen” vorbehalten.

[1] http://blogs.zdnet.com/hardware/?p=376
[2] http://www.spiegel.de/netzwelt/tech/0,1518,479317,00.html