Javascript: radiobuttons

Einzelne Radiobuttons haben einen Nachteil: Sind sie mal angeklickt bekommt man sie nicht mehr abwählbar. Ich finde die aber trotzdem nett und hab für das Problem jetzt eine ganz einfach Lösung gefunden:

<input type="radio" onDblClick="this.checked=false;" name="radio">

Einfachklick anwählen und Doppelklick abwählen. Sehr schön. Gefällt mir gut
Hier kann man es gleich mal veruschen:

Radiobutton
VN:F [1.9.22_1171]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

hiPHoP

Kurze Notiz: Muss mir wenn HipHop für PHP veröffentlicht ist das ganze mal ansehen. Vor allem interessiert mich wie der Code nach dem Transformieren aussieht. Mehr Zeilen, weniger lesbar, …? Bin mal gespannt.
Netter Nebeneffekt ist auch, dass die Software danach gleich closed-source wird. Obwohl es dafür schon ein paar Lösungen gibt (etwa Zend-Guard, bcompiler, PHPEncoder, …).

VN:F [1.9.22_1171]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

Zeit ist Geld oder PHP Profiling mit XHProf

Eben habe ich wieder einen sehr interessanten Artikel von Jan gelesen. Dieses mal geht es um PHP Profiling. Er berichtet über den Einsatz von XHProf von Facebook bei ihnen.

Bei Gelegenheit werde ich das Teil unbedingt mal versuchen. Für Software, bei der mehr gleichzeitig zugreifen, ist Profiling eigentlich schon immer ein Muss. Viel zu viele „Softwareentwickler“ kennen leider solche Tools gar nicht. Ich schreibe mir jedenfalls den Link zu dem Tool unbedingt mal auf.

VN:F [1.9.22_1171]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

PHP – aber sicher

PHP Skripts sind schnell gezimmert. Allerdings bleibt da oft die Sicherheit außen vor. Mir geht es da auch nicht anders. Aus dem Grund suche ich immer wieder nach Lösungen, die mir die Sache ein wenig abnehmen. Heute bin ich auf PHPIDS gestoßen. Es fängt alle XSS, SQL Injection, header injection, directory traversal, RFE/LFI, DoS und LDAP Angriffe ab. Die Integration in bestehende PHP Anwendungen läuft über ein paar wenige Zeilen Code. Genau dafür übrigens liebe ich die Interpretersprachen.

PHPIDS muss ich mir unbedingt mal installieren!

VN:F [1.9.22_1171]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

PHP Notizen

Hab mal wieder eben was mit PHP zu tun gehabt. Daher 2 Notizen:

  1. Fehlermeldungen in PHP einschalten:
    Statt immer den Webserver oder die PHP.ini umzustellen reicht natürlich auch folgender Code im Skript:

    error_reporting(E_ALL);
    ini_set('display_errors', '1');
  2. Zeilenumbrüche unabhängig vom Betriebssystem:
    Warum Windows das anders macht als Linux/Unix nervt mich schon immer. Jedenfalls werde ich ab sofort statt „\r\n“ bzw. „\n“ in Zukunft die PHP Konstante PHP_EOL nehmen! Also sowas wie:

    $msg .=  PHP_EOL;
VN:F [1.9.22_1171]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

LiquiBase

Eben habe ich gelesen, dass die Entwicklung der Datenbankstruktur bei OpenNMS auf LiquiBase umgestellt wird. Aus Neugier habe ich mir das mal angesehen. Das Tool ist ziemlich cool. Hört sich für mich wie eine Art „Git“ für SQL Datenbanken an. Ich merk mir das Teil mal.

VN:F [1.9.22_1171]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

Lesestoff: high performance web sites

Meine Ex-Kollegen bei Netways schreiben zur Zeit eine Blogserie zum „high performance web sites„. Scheinbar haben sie sich das O’Reilly Buch von Yahoo dazu gekauft. Zumindest sind die Themen in gleicher Reihenfolge und der erste technische hört sich schwer danach an. Sorry Jungs :). Die Leute von Yahoo haben aber echt was auf dem Kasten was Performance betrifft und veröffentlichen viel darüber. Den Performance Link zu denen gehört eigentlich zu den Pflichtbookmarks. Die „best practices for making web pages fast“ fassen die wichtigsten Dinge zusammen. Unbedingt lesen!

Nachdem ich die nächsten 2 Wochen wieder ziemlich lang im Flieger sitze werde ich mir jetzt doch mal das Buch bestellen oder bei Barnes and Nobles in den USA kaufen.

VN:F [1.9.22_1171]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

Spiderman is having me for dinner tonight…. Teil 4

Ich hab mir heute morgen mal die Statistik vom Cache angesehen. 99.7% der Hits werden durch mit gecachten PHP-Seiten bedient. Nur bei 0.3% muss die PHP Seite neu in Bytecode übersetzt werden. Nicht schlecht!

Bei den Seiten, die ich per Hand (s.o.) cache, ist das Verhältnis beeindruckend:

  • 1. Aufruf: Page Load Time: 0.330711126328 seconds.
  • Jeder weitere Aufruf: Page Load Time: 0.000527143478394 seconds.

Das lohnt sich wohl!

VN:F [1.9.22_1171]
Rating: 3.0/10 (1 vote cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

Spiderman is having me for dinner tonight… Teil 3

Ich hab ja schon in Teil 1 geschrieben, dass ich apc einsetze. Das Teil bringt ohne irgend welche Programmierung schon einiges. Es hält den Bytecode der PHP-Skripts im Speicher. Den Erfolg kann man ganz einfach so abrufen:

1
print_r(apc_cache_info());

Mit ein bisschen Programmieraufwand kann man Dank apc noch viel mehr rausholen. Auf rothsee-triathlon.de ist nicht alles neu und in php. Manche Teile laufen auch als alte Perl Skripts im Hintergrund. Die Hole ich mir dann per http zur Laufzeit rein. Nachdem das aber immer wieder die gleichen Files sind lässt sich der Content prima cachen. Also hab ich eine Funktion für diesen Zweck definiert:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function request_cache($url) {
        if (function_exists('apc_fetch')) {
           $md5=md5($url);
           $doc = apc_fetch($md5,&$success);
	   if(!$success) {
		$doc = file_get_contents($url);
		if ($doc === false) return "";
		apc_store($md5, $doc);
                $doc .= "<!-- ".$md5." now cached -->\n";
           } else {
                $doc .= "<!-- already cached -->\n";
           }
	} else {
		$doc = file_get_contents($url);
                $doc .= "<!-- not cached -->\n";
        }
 
	return $doc;
}

und rufe sie wie folgt auf:

1
$value = request_cache($request);

Die gecachte Seite ist „nur“ ca. um den Faktor 100 schneller. Kleiner Aufwand hoher Nutzen. Sehr geil.

VN:F [1.9.22_1171]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

Yslow oder gib Gas

Auf meiner Kiste läuft auch noch die Seite unsere Triathlon Abteilung. Diese Seite bekommt an den Tagen rund um das Wochenende vom Rothsee-Triathlon-Festival ordentlich Last ab. Und nachdem dieses Jahr beide Veranstaltungen am gleichen Wochenende sind ist die Performance noch viel wichtiger. Daher bleibt mir auch nichts übrig als dafür zu sorgen, dass die Seite möglichst schnell und resourcensparend ist. Obwohl ich schon viel an der Datenbankstruktur und an meinem Source optimiert habe muss ich da aber noch mal mit einem Profiler ran.

Auch ohne der eigenen Software geht noch mehr. Daher habe ich mir heute abend mal Yslow installiert. Warum das Teil Yslow heißt ist mir auch ein Rätsel… Jedenfalls untersucht das Teil die Website nach 13 verschiedenen Kriterien und gibt jeweils Tipps. Ein paar Ratschlägen kann ich oder will nicht folgen. Ein paar waren wirklich hilfreich:

  • Gzip components
    Ich hatte das deflate modul im apache noch nicht installiert. Jetzt ist es installiert und wie folgt konfiguriert:

    1
    2
    3
    
    <IfModule mod_deflate.c>
              AddOutputFilterByType DEFLATE text/html text/plain text/xml application/x-javascript text/css
    </IfModule>
  • Put JS at the bottom
    Logisch… aber warum muss man das erst gesagt bekommen 😉
  • Minify JS
    Vorerst verschwende ich noch die paar Bytes. Ich hab keine Lust nach dem Auschecken Whitespaces zu entfernen.
  • Avoid redirects
    Da hat mir Yslow doch tatsächlich gezeigt, dass ich ein Javascript einbinden will, dass gar nicht mehr exisitert. Danke.
  • Add an Expires header
    Bei dem dynamischen Content meiner Seite habe ich keine Lust mich da zu verschlechtern, aber nichts spricht dagegen die Javascripts und CSS langlebiger zu machen.

    1
    2
    3
    4
    
          ExpiresActive On
          ExpiresDefault "now plus 1 day"
          ExpiresByType text/css   "access plus 1 month"
          ExpiresByType text/js    "access plus 1 month"

Insgesamt ein echt nützliches Tool. Die Tipps sind eigentlich alle naheliegend nur übersieht man sie ständig.

Achja meine Seite hat ein „C“ bekommen. Das geht noch besser. Wir arbeiten daran aber yahoo.de hat auch nur ein C :)…

VN:F [1.9.22_1171]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)