Permalink

1

Geotargeting mit PHP

Vor einiger Zeit habe ich für einen Kunden eine Lösung realisiert, die in einem Online-Shop feststellt, ob der Besucher sich in dem Land befindet für den der Shop gültig ist. Die Geoposition von Besuchern einer Website kann relativ zuverlässig mittels >Geotrageting festgestellt werden.

Da man in jedem Fall eine Zuordnung der aufgelösten IP-Adressen zu Ländern benötigt, muss man sich zu Beginn des Projektes überlegen, woher man diese Daten beziehen kann. Neben der Möglichkeit, die PHP-Erweiterung Geo IP Location auf dem Server zu installieren, kann man auf externe Dienste wie diesen oder jenen zugreifen. Eine weitere Möglichkeit ist die Verwendung einer Datenbanken, die man sich auf dem Server speichern kann. Gerade wenn man sich nicht auf die Erreichbarkeit von externen Diensten verlassen will und / oder man nicht die Möglichkeit oder das KnowHow hat Bibliotheken auf dem Server zu installieren, ist diese Lösung besonders charmant.

In meinem Beispiel nutzte ich die Datenbank von MaxMind. MaxMind bietet sowohl eine freie als auch eine kommerzielle Datenbank an, welche sich in der Genauigkeit der IP-Zuordnungen unterscheiden. Neben der Datenbank liefert und MaxMind auch gleich eine API die in diverse Programmiersprachen implementiert ist. Das Pure PHP module lässt sich auf allen Plattformen einsetzen, die PHP und somit auch PEAR unterstützen.

Die Verwendung der API ist denkbar einfach und führt sich mit ein paar Zeilen PHP-Code

require_once('Net/GeoIP.php');
$db          = Net_GeoIP::getInstance('PFAD_ZUR_GEOIP_DATENBANK.dat');
$geoip       = $_SERVER['REMOTE_ADDR'];
$countryName = $db-&gtlookupCountryName($ip);
$countryCode = $db-&gtlookupCountryCode($ip);

und HTML

<dl>
<dt>Your IP Address</dt><dd>< ?php echo $geoip; ?></dd>
<dt>Country Code</dt><dd>< ?php echo $code; ?></dd>
<dt>Country Name</dt><dd>< ?php echo $country; ?></dd>
</dl>

zu Ergebnis.

Wie im Beispiel zu sehen ist benötigt man neben der Datenbank nur noch das PEAR-Package Net_GeoIP um die Geolocation zu bestimmen. Im Beispiel unter http://nasumi.net/geocoding kannst du testen, ob deine Location korrekt erkannt wird.

Permalink

0

Codevisualisierung mit nWire

nWire hat seine gleichnamige Software zur Visualisierung von Quellcode (Code Exploration) mit der Unterstützung von PHP erweitert. Die Software ermöglicht es, seinen Quellcode in Echtzeit zu visualisieren. nWire will es Softwareentwicklern ermöglichen, vor allem in großen Projekten den Überblick über die gesamte Klassenstruktur zu behalten.

Die Komponente nWire Analyzer scannt im Hintergrund den gesamten Quellcode eines Projektes und schreibt die Daten in das nWire Repository. Wichtig anzumerken ist, dass beim Analysieren der Quellcode weder verändert noch in sonstiger Weise beeinflusst wird.

Nachdem der Quellcode analysiert ist, hat der Entwickler die Möglichkeit, die Softwarearchitektur in Echtzeit grafisch (nWire Visualizer) oder in Art eines Dateibaumes (nWire Navigator) zu erfassen.

nWire Navigator

nWire Navigator

nWire  Visualizer

nWire Visualizer

Ergänzend steht mit der Komponente nWire Navigator Search eine Suche zur Verfügung, die das Auffinden von Komponenten vereinfacht. Navigator Search unterstützt sowohl eine inkrementelle Suche als auch die Suche mittels Wildcards.

nWire zeigt zu jeder Klasse an, in welcher Datei diese sich befindet, welche Klassenvariablen und -methoden vorhanden sind, welche Sub-Klassen existieren in welchen Klassen diese instantiiert wird sowie welche Methoden diese Klasse als Rückgabewert verwenden.

Da sich nWire bezüglich der Rückgabewerte von Methoden offensichtlich auf die Methodenkommentare (@return) bezieht, ist eine weitestgehend vollständig vorhandene Dokumentation des Quellcodes von Vorteil :-)

Insgesamt macht nWire einen guten Eindruck. Die Software ist einfach zu bedienen und stellt die Inhalte sowohl im nWire Visualizer als auch im nWire Navigator übersichtlich dar.

Gerade der nWire Visualizer bietet einem die Möglichkeit, sich schnell und umfassend einen Überblick über die bestehenden Softwarearchitektur zu verschaffen, was gerade für Entwickler in einem bestehenden Projekt einsteigen von großem Vorteil ist.

nWire für PHP ist als Plugin für Eclipse 3.5 mit PDT 2.1 sowie für Zend Studio 7 erhältlich.

Sowohl die PHP als auch die Java Version kostet zur Zeit $59,- Für beide Sprachen zusammen gibt es nWire für $99,-. Erwerben kann man die Software direkt auf der Website.

Wer die Software testen möchte, kann die 30 Tage Testversion downloaden oder per Eclipse Update Manager die Software von der update site (http://update.nwiresoftware.com/) installieren.

Permalink

5

Zend Server CE unter Mac OS X 10.6 (Snow Leopard)

Leider führt das Upgraden des Macs auf OS X 10.6 (Snow Leopard) zu ein Problem mit dem Zend Server CE (Version < = 4.0.5). Nach dem Upgrade lässt sich der Zend Server nicht mehr starten.

Das Ausführen des Befehls

$ sudo /usr/local/zend/bin/zendctl.sh start

führt zu folgenden Fehlermeldungen:


/usr/local/zend/bin/apachectl stop [OK]
/usr/local/zend/bin/apachectl start [OK]
/usr/local/zend/bin/shell_functions.rc: line 152:  5678 Illegal instruction     $WATCHDOG -i $BINARY > /dev/null 2>&1
/usr/local/zend/bin/shell_functions.rc: line 152:  5683 Illegal instruction     $WATCHDOG -t $BINARY > /dev/null 2>&1
Stopping ZendServer GUI [Lighttpd] [FAILED]
spawn-fcgi.c.207: child spawned successfully: PID: 5691
/usr/local/zend/bin/shell_functions.rc: line 133:  5699 Illegal instruction     $WATCHDOG -i $BINARY 1>&3 2>&4
/usr/local/zend/bin/shell_functions.rc: line 133:  5700 Illegal instruction     $WATCHDOG -u $WD_UID -g $WD_GID -s $BINARY 1>&3 2>&4
Starting ZendServer GUI [Lighttpd] [FAILED]
/usr/local/zend/bin/shell_functions.rc: line 152:  5731 Illegal instruction     $WATCHDOG -i $BINARY > /dev/null 2>&1
/usr/local/zend/bin/shell_functions.rc: line 152:  5732 Illegal instruction     $WATCHDOG -t $BINARY > /dev/null 2>&1
Stopping Java bridge [FAILED]
/usr/local/zend/bin/shell_functions.rc: line 133:  5734 Illegal instruction     $WATCHDOG -i $BINARY 1>&3 2>&4
/usr/local/zend/bin/shell_functions.rc: line 133:  5735 Illegal instruction     $WATCHDOG -u $WD_UID -g $WD_GID -s $BINARY 1>&3 2>&4
Starting Java bridge [FAILED]
ERROR! MySQL manager or server PID file could not be found!
Starting MySQL
. ERROR! Manager of pid-file quit without updating file.

Das Problem kann wie folgt behoben werden:

  1. Den Zend Server stoppen

    $ sudo ./zendctl.sh stop

  2. Alle relevanten Daten wie die Apache configs, das Webroot-Verzeichnis sowie alle Datenbanken) sichern

    
    	mkdir ~/foo
    	cp -r /usr/local/zend/apache2/conf ~/foo
    	cp -r /usr/local/zend/apache2/htdocs ~/foo
    	cp -r /usr/local/zend/mysql/data ~/foo
    	
  3. Zend Server deinstallieren

    $ sudo ./usr/local/zend/bin/uninstall.sh
  4. Die aktuellste Version des Zend Server CE downloaden und installieren
  5. Die vorhandene /usr/local/zend/bin/watchdog binaries mit der Version unter ersetzen
  6. Alle der im zweiten Schritt gesicherten Daten wiederherstellen

    
    	$ sudo cp -r ~/foo/conf /usr/local/zend/apache2/conf
    	$ sudo cp -r ~/foo/htdocs /usr/local/zend/apache2/htdocs
    	$ sudo cp -r ~/foo/data /usr/local/zend/mysql/
    	
  7. Zend Server starten

    $ sudo ./zendctl.sh start

Das Problem tritt sicher auch bei einem frisch installierten OS X Snow Leopard auf und lässt sich auf dem selben Weg behben.

Permalink

0

Bessere Websites für Kirchen und Gemeinden!

Ich jammere ja gerne über das mangelhafte Bewusstsein der Kirchen und Gemeinden bezüglich ihrer Öffentlichkeitsarbeit. Besonders die Internetpräsentationen lassen in der Regel sehr zu wünschen übrig.

Ein ganz anderes Bewusstsein tritt einem entgegen, wenn man mal wieder über den großen Teich schaut und sich die Internetpräsentationen einiger bekannten amerikanischen Gemeinden anschaut.
Man kann natürlich als Argument anführen, dass diese Gemeinden wesentlich höhere Spendeneinnahmen haben, da die Mitgliederzahl oft um das Hundertfache größer ist. Allerdings glaube ich, dass bei den meisten der deutschen Gemeinden gar kein Budget zur Verfügung steht, da eben kein Bewusstsein vorhanden ist, dass man von der Öffentlichkeit wahrgenommen wird.

Dabei ist meines Erachtens der finanzielle Aufwand gar nicht so immens. Immerhin haben ja mittlerweile viele Gemeinden eine eigene Internetpräsenz und somit bereits die Infrastruktur und ein gewisses Know-How eine Website zu betreiben. Aus meiner Sicht könnten sich viele Gemeinden allerdings wesentlich besser und professioneller präsentieren, wenn sie sich für die Konzeption und die Gestaltung einer Agentur bedienen würden.

Eine mögliche Anlaufstelle, um sich durch gut konzipierte und grafisch ansprechende Kirchen-Websites inspirieren zu lassen ist ChurchBeauty. Agenturen findet man eigentlich in jedem Städtchen :-)

Permalink

4

Google Street View in Marburg

In den letzten drei Wochen ist mir mehrmals ein schwarzer Astra mit Kameraaufsatz in Marburg aufgefallen. Wie längst bekannt, handelt es sich hierbei höchst wahrscheinlich um ein Fahrzeug, welches Fotos für den Google Street View Dienst schießt.

Street View Astra

Zurecht ist der Dienst Datenschutzrechtlich in der Vergangenheit nicht ohne Kritik geblieben, da es gerade in Metropolen und öffentlichen Plätzen dazu kommt, dass Personen auf den Fotos zu erkennen sind.

In den Häufig gestellten Fragen (FAQ) zum Dienst werden die Städte aufgelistet, in welchen in den nächsten Wochen Aufnahmen für Street View gemacht werden. Auf der Seite findet man auch Informationen zur Kontakaufnahme mit Google. Sollte man sich zum Beispiel auf einem der Fotos wiedererfinden, kann man die Veröffentlichung des Bildes auf diesem Weg unterbinden.

Permalink

0

Datenbank mit Testdaten füllen

Da die meisten Web-Application auf einer Datenbank, oft eine MySQL-Datenbank, als Dateispeicher aufbauen, muss die Datenbank zu Testzwecken auch immer mit Daten gefüllt werden.

Die ersten Datensätze werden meist beim Testen der Applikation über die bereit gestellten Masken eingegeben. Oft benötigt man aber größere Datenmengen, um die Anwendung vollständig testen zu können.

generatedata.com.png

Wer diese Daten bisher mehr oder weniger per Hand eingegeben hat, kann die Arbeit zukünftig einen Datengenerator überlassen.

Das Tool funktioniert schon prima, könnte aber noch bei den länderspezifischen Daten um weitere Länder erweitert werden. Zur Zeit werden lediglich Kanada, Niederlande, Großbritannien und USA unterstützt.

Wer möchte, kann sich das Script downloaden und auf seine Bedürfnisse anpassen.

Permalink

0

Blindtexte in deutscher Sprache

Frank Bültge hat endlich das umgesetzt, was wahrscheinlich viele andere auch auf ihrer Todo-Liste, oder zumindest auf ihrer Wunschliste, hatten: deutschsprachige Blindtexte mit Markup.

Zwar gab es bisher auch schon diverse Anlaufstellen, bei denen man sich eines Blindtextes bedienen konnte, auch solche in deutscher Sprache, jedoch immer weitestgehend ohne Markup.

Frank hat das Problem erkannt und eine übersichtliche und funktionale Seite erstellt, die es einem ermöglicht per Mausklick den Text in die Zwischenablage zu kopieren.

Permalink

5

Cookies mit jQuery lesen, schreiben und löschen

jQuery’s Plugin-Archiv beinhaltet eine Fülle von nützlichen Plugins, die einem die tägliche Arbeit mitunter sehr vereinfachen.

Eines der nützlichen Plugins ist COOKIE von Klaus Hartl. Das Plugin vereinfacht das Lesen, Schreiben und Löschen von Cookies auf einen minimalen Aufwand:

$.cookie('the_cookie'); // get cookie
$.cookie('the_cookie', 'the_value'); // set cookie
$.cookie('the_cookie', 'the_value', { expires: 7 }); // set cookie with an expiration date seven days in the future
$.cookie('the_cookie', '', { expires: -1 }); // delete cookie

Alle weiteren Infos zum Plugin findet man in dem Post Cookie Plugin for jQuery von Klaus Hartl.

Update: Da die Website von Klaus Hartl offensichtlich überarbeitet wird und der Link nicht funktioniert, hier eine URL zum Source-Code: http://plugins.jquery.com/files/jquery.cookie.js.txt des Plugins.

Permalink

0

Fünf Bücher zum Preis von einem

sitepointloop1

Alle Webworker aufgepasst: ab heute gibt es auf SitePoint fünf Bücher zum Preis von einem. Die Aktion läuft nur bis diesen Freitag, 13.02.2009.

Sehr erwähnenswert finde ich, dass dieses Superangebot zu 100% an das australische Rote Kreuz gespendet wird:

To support the victims of the Australian bushfires we’ve created our best book deal ever and 100% of the proceeds from this sale will be donated to the Australian Red Cross Victorian Bushfire Appeal. You won’t believe how good this deal is.

Also nicht lange zögern, sondern gleich zuschlagen und was gutes tun!

Permalink

0

Zend Framework: Inhalte in Formularen ausgeben

zf_logo.gif

Im täglichen Umgang mit dem Zend Framework offenbaren sich hier und da kleinere und größere Schwachstellen, die in zukünftigen Versionen sicherlich noch verbessert werden.

Ein Package mit dem ich sehr ausgiebig arbeite ist Zend_Form. Wenn man das Rendering komplett über Dekoratoren definiert, taucht schnell die Frage auf, wie man weitere Informationen (Texte, Links, Bilder etc.) im Formular anzeigen kann, ohne gleich ein eigenes Element erstellen zu müssen?

Um dieses Problem zu lösen stellt Zend einen Description-Decorator (Zend_Form_Decorator_Description) bereit, der wie folgt verwendet werden kann:


$form->getElement('element')
     ->addDecorator('Description', array('tag'=>'span'))
     ->setDescription('weitere Informationen:');

Wenn man HTML als Text angeben will, muss man als Option noch das Attribut ‘escape’ auf false setzen:


     ->addDecorator('Description', array('tag'=>'span', 'escape'=>false))
     ->setDescription('<a href="#">weitere Informationen</a>');