Author Archives: web-rocker

GIT Cheat-Scheets

Posted by web-rocker in Versionsverwaltung - (0 Comments)


Für Umsteiger von Subversion auf GIT ist es manchmal ganz hilfreich einen kleinen Zettel auf dem Schreibtisch liegen zu haben, der die nötigsten Befehle bereithält. Ich habe deshalb einen Liste mit sogenannten GIT Cheat-Sheets zusammengestellt, da sollte für jeden Geschmack etwas dabei sein. Hilfreich ist natürlich auch das Buch “Versionskontrolle mit Git” aus dem O’Reilly Verlag, wenn es darum geht die Vorteile der Dezentralität zu durchdringen oder ein bestehendes SVN Repository in ein neues GIT Repository zu integrieren.

(more…)

Ich bin grade kläglich gescheitert, als ich die Kommandozeilen-Tools von CloudControl installieren wollte. Easy_install hat aus irgendeinem Grund probiert einige Python libs für die Architektur PPC zu kompillieren.

sudo easy_install cctrl
Die Fehlermeldung sieht dann so aus:
Processing pycrypto-2.3.tar.gz
Running pycrypto-2.3/setup.py -q bdist_egg --dist-dir /tmp/easy_install-a3AMTg/pycrypto-2.3/egg-dist-tmp-wqqPb7
warning: GMP library not found; Not building Crypto.PublicKey._fastmath.
/usr/libexec/gcc/powerpc-apple-darwin10/4.2.1/as: assembler (/usr/bin/../libexec/gcc/darwin/ppc/as or /usr/bin/../local/libexec/gcc/darwin/ppc/as) for architecture ppc not installed
Installed assemblers are:
/usr/bin/../libexec/gcc/darwin/x86_64/as for architecture x86_64
/usr/bin/../libexec/gcc/darwin/i386/as for architecture i386
src/MD2.c:134: fatal error: error writing to -: Broken pipe
compilation terminated.
lipo: can't open input file: /var/tmp//ccZdh65J.out (No such file or directory)
error: Setup script exited with error: command 'gcc-4.2' failed with exit status 1

Abhilfe schafft hier das setzen einer Umgebungsvariable für den Compiler.
sudo env ARCHFLAGS="-arch x86_64" easy_install cctrl

Nun läuft die Installation ohne weitere Probleme durch. Dieser Trick hilft auch beim Nachinstallieren von nativen Ruby GEMs oder PHP-Erweiterungen.

NAS – Falsche Sicherheit

Posted by web-rocker in Server - (1 Comments)

Network attached storages oder kurz NAS sind in den letzten Jahren immer günstiger geworden und haben deshalb die Teamarbeit in kleinen Firmen, die Datensicherung oder das Archivieren sämtlicher Familienerinnerungen stark vereinfacht. Diese Geräte sind einfach, so das auch technisch nicht so versierte Menschen via Web-GUI innerhalb von Minuten ein paar CIFS-Freigaben erstellen können, auf denen dann im Laufe der Monate Terrabytes von mehr oder weniger wichtigen Daten gehortet werden. Die Daten sind ja sicher, immerhin ist es ein RAID1 oder 5 oder X. Falls mal ein Platte ausfällt, einfach da wo es blinkt eine neue rein, ein paar Stunden warten und alles ist wieder sicher.

Nur wo ist jetzt der Harken? (more…)

ZCE Zend Certified Engineer

Posted by web-rocker in PHP - (1 Comments)

Das sind doch mal gute Nachrichten: Ab dem 27. März 2011 bekommen neue und bestehende Zend Certified Engineer’s eine kostenlose Entwicklerlizenz vom ZendStudio und dem ZendServer. Allerdings ist die ZCE Prüfung nun mit 195 Euro 70 Euro teurer geworden, was bei diesen tollen Geschenken natürlich problemlos zu verschmerzen ist. Der ZendServer steht wohl unter einer Entwicklerlizenz, wie es sie früher mal um 300 Euro rum gab. Ein Wirkbetrieb war damit damals nicht erlaubt, nur die Entwicklung.

Nähere Informationen gibt es hier auf der Zend Seite.

Aufbauend auf meinem Artikel zum AjaxAction View Helper möchte ich nun mein CacheAction plugin für das Zend Framework vorstellen. Es wird einfach als FrontController Plugin registriert und cacht die Responses von Controlleraktionen.

Soweit noch keine Kunst. Seine ware Stärke spielt das Plugin erst in Verbindung mit dem AjaxAction View Helper aus. Die zwei sind zusammen das dynamische Duo :-)

Das Prinzip ist einfach:
Liegen die Ergebnisse von einer Controlleraktion bereits im Cache vor, so wir der Inhalt ohne Umwege, direkt in das HTML der Hauptseite eingebaut und ausgeliefert. Ist das Ergebnis noch nicht im Cache, wir die Seite unvollständig, aber schnell ausgeliefert und der fehlende Inhalt kommt per AJAX hinterher. (more…)

Bei größeren Webapplikationen kann es immer mal wieder vorkommen, das Inhalte oder ein Teilbereiche einer Webseite nicht spontan verfügbar sind. Ursachen dafür sind oft kalte Caches von Models oder die Latenzen die durch die Kommunikation mit extenen Webservices bedingt sind. Ich war es irgendwann Leid diese Wartezeiten zu einem Problem des Users machen zu müssen und habe einen kleinen View Helper entwickelt, der langlaufende Prozesse loskoppelt und das Ergebnis per AJAX nachliefert.

Im Prinzip wird die Webseite unvollständig an den User übermittelt und dann in seinem Webbrowser fertig gerendert. (more…)

In meinem Web Rocker Showdown zum Thema Zend Framework vs. Ruby On Rails habe ich als PHP-Stack und Applikationsserver den Zend Server Community Edition verwendet. Während des Tests war mir aufgefallen, das der Zend Server CE die Harware nicht voll ausnutzt. Alle 4 CPUs waren nur zu 60% belegt. Dieses Phänomen möchte ich in diesem Artikel genauer untersuchen indem ich den Zend Server CE mit der kommerziellen Version und einem PHP 5.3 aus dem DotDeb-Repository vergleiche. Die Testhardware, das Betriebssystem und die PHP-Applikation sind identisch mit dem vorherigen Showdown. (more…)

User Acceptance Tests (UAT) oder auf Deutsch “Akzeptanztests” sind eine wichtige Komponente in der Testgetriebenen Entwicklung. Bisher kannte ich die üblichen Verdächtigen, also Selenium. Man kann damit komfortabel einen Klickpfad definieren, PHP-Code exportieren und daraus einen Test für PHPUnit erzeugen. Leider benötigen diese Tests immer einen laufenden Seleniumdienst, einen Browser und diesen ganzen Kram. Ich bin eher ein Fan von Testmethoden die headless funktionieren, direkt auf einer Shell. Bei meinem Blick über den Tellerrand in Richtung Ruby On Rails bin ich auf Cucumber aufmerksam geworden. Cucumber ist ein tolles Test-Framework für Behaviour Driven Development, das mit menschenlesbaren Tests im Klartext arbeitet. Zusammen mit Webrat, einem Toolkit um Webbrowser fernzusteuern oder mit Mechanize komplett headless zu arbeiten, kann man Webapplikationen hervorragend testen.

Am Beispiel der Google-Suche werde ich zeigen, wie einfach man Tests mit Cucumber anlegen kann und das Testen damit wirklich Spaß macht :-) (more…)

rps_vs_c

Heute geht es um ein Frage, die mich schon lange beschäftigt: Was ist schneller? Zend Framework MVC oder Ruby on Rails? Und wie skalieren die unterschiedlichen Architekturen bei zunehmenden, parallelen Zugriffen? Wie effizient wird meine Hardware genutzt? Die Antworten auf diese Fragen habe ich natürlich für Euch in einem Web-Rocker Showdown empirisch ermittelt :-)

Mein Versuchsaufbau sieht wie folgt aus:

Hardware:
Dell PowerEdge 860
Intel XEON QuadCore mit 2,13 Ghz
4 Gb Arbeitsspeicher
SAS300 Hardware RAID0
2x 73Gb 10k SAS HDDs

Software:

Debian 5.0.7 x86_64
Apache Bench
Htop (more…)

Apache 2 ITK MPM

Posted by web-rocker in Server - (0 Comments)

Nie wieder Rechteprobleme im Dateisystem! Klingt unglaublich? Ist es aber nicht, zumindest nicht für Entwicklungsumgebungen.

Die meisten Entwicklungsumgebungen sehen oft wie folgt aus:

  • – Linuxserver
  • – Samba-Freigabe vom Rootverzeichnis der Webservers oder einzelner Projekt-VHosts
  • – Apache Webserver mit VHosts für jedes Projekt
  • – Die Entwickler mounten die Samba-Freigaben und arbeiten auf ihnen

Nun kommen wir zum eigentlichen Problem: Der Apache erzeugt Dateien als Benutzer www-data in Gruppe www-data, die Entwickler als Benutzer entwicklerx in Gruppe users.
Natürlich kann man die Verzeichnisrechte durch Stickybits, PHP-Umasks usw. in den Griff bekommen. Das ist aber recht kompliziert und funktioniert auch nicht überall wirklich zuverlässig.

Mit dem Modul apache2-itk-mpm läuft der Webserver als Benutzer root und ist dadurch in der Lage für jeden VHost einen Worker-Thread mit der Identität eines normalen Benutzer zu starten. Für einen Livebetrieb ist das natürlich ein Sicherheitsrisiko, der Livebetrieb ist aber auch selten das Problem. Die Entwicklungsarbeit kostet und jeden Tag Nerven.

Und so funktioniert es am Beispiel eines Debianartigen Systems: (more…)