E-Mail Links wirksam schützen

Einige einfache Methoden wie man E-Mail Links schützen kann. Aber die richtig guten Ideen sind dann in einem Kommentar-Link zu finden.

February 18, 2010

Google Closure Compiler with PHP

Today Google released their new Closure Compiler, you can use it to optimize and minify your javascripts.

November 7, 2009

PHP 5.3 fertig!

Die neue PHP Version ist nun endgültig fertig und freigegeben. Zu den neuen Funktionen gehören Closures, Funktionsobjekte und Lambda-Funktionen, die native MySQL Library, namespaces und late static binding. Aber für mich am wichtigsten sind die Performance-Verbesserungen, PHP 5.3 wird ca. 1,5x so schnell sein wie 5.2 und durch den neuen Garbage Collector deutlich weniger Speicher verbrauchen.

June 30, 2009

Einstieg: Zend_Service_Twitter

Einen eigenen Twitter-Client schreiben geht mit der richtigen Library ganz schnell. Im aktuellen Zend Framework ist die Komponente Zend_Service_Twitter enthalten die sehr einfach zu verwenden ist.

Zuerst mal anmelden und die Daten des angemeldeten Benutzers ausgeben:

 
require_once 'Zend/Service/Twitter.php';
 
$twitter = new Zend_Service_Twitter($username, $password);
if ($user = $twitter->account->verifyCredentials()) {
	foreach($user as $k => $v) {
		echo "$k: $v<br />";
	}
}

Die Leute denen man folgt inkl. Bild und Link ausgeben:

 
foreach($twitter->user->friends() as $user) {
	printf('<div class="l"><a href="http://twitter.com/%s"><img width="48" height="48" src="%s" /></a></div>',
		$user->screen_name, $user->profile_image_url);	
}

Und so einfach kann man seine eigenen Replies ausgeben lassen:

 
foreach($twitter->status->replies() as $message) {
	echo "<div>";
	printf('<a href="http://twitter.com/%s"><img width="48" height="48" src="%s" /></a><p>%s %s</p>',
		$message->user->screen_name, $message->user->profile_image_url, $message->text, $message->created_at);
	echo "</div>";
}

Für so ziemlich alles gibt es bereits die Methoden die man nur mehr aufrufen muss und dann SimpleXML-Objekte zurückbekommt. Ein etwas größeres Beispiel könnt ihr unter folgenden URL finden: http://bohuco.net/dev/twitter.php
Natürlich werden die Twitter-Zugangsdaten nicht mitgespeichert! (siehe Quelltext)

June 14, 2009

LOC and Author Stats with Subversion

Very, very simple author and LOC statistic with Subversion blame function and PHP. So you can see how many lines are already in the repository and which user coded it.

[sourcecode language="php"]

// include only this folders
$dirs[] = '/var/www/portal/application';
$dirs[] = '/var/www/portal/html/scripts/k2';
$dirs[] = '/var/www/portal/html/scripts/service';
$dirs[] = '/var/www/portal/html/styles';

// function from php.net
function listFiles( $from = '.') {
if(! is_dir($from))
return false;

$files = array();
$dirs = array( $from);
while( NULL !== ($dir = array_pop( $dirs))) {
if( $dh = opendir($dir)) {
while( false !== ($file = readdir($dh))) {
if( $file == '.' || $file == '..')
continue;

$path = $dir . '/' . $file;
if( ! is_dir($path)) {
$ext = substr($file, strrpos($file, '.')+1);
// include file extensions
if (in_array($ext, array('html','php','phtml','inc','js','css'))) {
$files[] = $path;
}
} else {
// exclude subdirs
if (! in_array($file, array('fckeditor'))) {
$dirs[] = $path;
}
}
}
closedir($dh);
}
}
return $files;
}

$files = array();
foreach($dirs as $dir) {
$files = array_merge($files, listFiles($dir));
}
$stats = array();

foreach($files as $file) {
$tmpFile = '/tmp/blame.tmp';
exec("svn --non-interactive --username myuser --password mypass blame $file > $tmpFile”, $o, $r);
$output = file($tmpFile);

foreach($output as $line) {
$parts = split(‘[ ]‘, trim($line));
$author = $parts[1];
if (! isset($stats[$author])) {
$stats[$author] = 0;
}
$stats[$author]++;
}
}

var_dump($stats);
var_dump(count($files));
[/sourcecode]

January 23, 2009

Zend Framework 1.7 released

Wohhh … da geht was weiter … schon wieder ein neues Release von Zend Framework. Mit Twitter und jQuery Support. Da hab ich schon wieder was zu tun die nächsten Abende.

Außerdem gibt’s einen neuen Performance-Guide in der Doku.

November 26, 2008

PHP Arrays: "power set" and all permutations

Found in the online-version of PHP Cookbook from O’Reilly.

“Power set” = combinations of all or some elements

On one of our development servers (php 5.2.0) we had a problem with the original version of this function, it looked like an endless loop till memory limit exceeded. Here is the rewritten version from Srdjan:

[sourcecode language='php']
public function powerSet($array) {
$results = array(array());
foreach ($array as $j => $element) {
$num = count($results);
for($i=0; $i<$num; $i++) {
array_push($results, array_merge(array($element), $results[$i]));
}
}
return $results;
}
[/sourcecode]

All permutations

[sourcecode language='php']
function pc_permute($items, $perms = array( )) {
if (empty($items)) {
print join(‘ ‘, $perms) . “\n”;
} else {
for ($i = count($items) – 1; $i >= 0; –$i) {
$newitems = $items;
$newperms = $perms;
list($foo) = array_splice($newitems, $i, 1);
array_unshift($newperms, $foo);
pc_permute($newitems, $newperms);
}
}
}
[/sourcecode]

November 4, 2008

PHP Support for Google App Engine

Google hat ja bereits neue Runtime Engines angekündigt jetzt gehts nur mehr darum welche am meisten gebraucht werden. Dazu gibts bereits ein Issue auf Google Code, am besten gleich “starren” damit Google sieht wie notwendig die PHP Unterstützung gebraucht wird.

found@bradleyholt

October 30, 2008

PHPler werden …

… ein Vollzeit Profi in einem Angestelltenverhältnis, ohne Freizeit dafür mit sattem, stattlichem, magerem, durchschnittlichen, überdurchschnittlichen Gehalt und interessanten Aufgaben. beziehungsweise aus der anderen Perspektive … einen zukünftigen PHPler finden der seine Aufgaben schnell und zuverlässig erledigt, ins Team passt, nicht zuviel kostet und überdurchschnittlich engagiert ist. Beides sicher lösbare Aufgaben, aber je nach Konjunktur- und Ausgangslage ist eine der Beiden mitunter schwerer als die Andere.

Dave Marshall hat einen kurzen Artikel darüber verfasst was ein PHPler können sollte (Hard Facts), mit einigen weiterführenden Links auf joelonsoftware.com der sich immer wieder mal mit dem Recruiting von PHP-Programmierern befasst.

Suche PHPler:
A Field Guide to Developers – SUPER – Warum braucht der Programmierer ein eigenes Büro und anderes Zeugs.
Finding Great Developers – Warum man sehr gute Programmierer nie in den Jobboards findet.
Sorting Resumes – Bewerbungen aussortieren
The Guerrilla Guide to Interviewing – so führt der Joel seine Bewerbungsgespräche.
Hitting the High Notes – warum ist es eigentlich so wichtig gute Programmierer einzustellen?
You Can’t find Programmers? – was tun?

Bin PHPler:
Getting your Resume read

Einige Artikel sind schon Jahre alt und sind trotzdem noch aktuell bzw. vielleicht wieder aktuell. Andere wiederum scheinen aus einem anderen Universum zu sein, wo es ganz viele Bewerber gibt :)

Auch interessant … 12 Steps to Better Code

September 11, 2008

Schrift-Problem adee

facelift (FLIR) ist ein Javascript/PHP-Lösung die on-the-fly Bilder mit Schriftzügen in den gewünschten Schriften erzeugt. FLIR benötigt im Gegensatz zu sIFR, kein Flash. Die Bilder werden serverseitig mittels PHP (GD-Library) erzeugt und dann automatisch in die Seite eingefügt.

Tutorial

August 11, 2008