Sep 25 2011

(English) PHP vs. Django

sas

This week I found an impressive chart on the web that illustrates the power of php frameworks. This benchmark shows how many requests per second a very simple web application can deliver. The test is targeting on the basic overhead of the framework, things like bootstrap initialization etc. This kind of overhead which every request have. So this benchmark is provided by the Framework Yii, and what a surprise, this framework is the best of all in this benchmark.

So far so good. The question that I ask myself was, how fast a django application (based on python 2.7), which also deliver this simple “hello world” will be?

I created a very basic simple django 1.3 application for testing the performance. I included this application into the code base from the upon drescriped benchmark application. The whole code is available to my github repository (including the code providing from yii).

Here are the interesting results (Requests per Second):

PHP Frameworks vs. Django

 

Framework [#-Requests/sec] (mean)
cakephp-1.3.4 30.34
symfony-1.4.8 45.89
zend-1.10.8 60.15
yii-1.1.4 100.48
codeigniter-1.7.2 143.72
django-1.3 431.76

Operating System: Kubuntu 11.04The testing environment is as follows:

  • Web Server: Apache/2.2.17 (Ubuntu)
  • PHP: 5.3.5-1ubuntu7.2
  • CPU: Intel Core2Duo P8600 2.4 GHz
  • Main Memory: 4GB
  • Hard Drive: 300GB SATA HDD

Jan 5 2011

PHP Function-Benchmark

sas

Wenn man nicht sicher ist, welche Funktion die beste Performance liefert kann man unter phpbench.com einfach nachlesen welche Funktion wie abschneidet.

In meinem Fall wollte ich wissen wie isset() und empty() sich in Punkto Geschwindigkeit unterscheiden: sie sind gleich schnell.


Okt 30 2010

Git branch am shell promt

sas

Shows the current git branch on the shell promt

Um den aktuellen git branch am shell promt anzuzeigen ist die PS1 Variable in den Dateien .bashrc oder .profile wie folgt zu setzen:

PS1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\e[0m\]\[\e[31m\]$(git branch 2>/dev/null|fgrep '\''*'\''|sed '\''s/$/)/;s/^* / (/'\'')\[\e[0m\]$ '

Jul 12 2010

CakePHP Deployment

sas

Einleitung

Um PHP Anwendungen auf einem Web-Server bereitzustellen,  gibt es einige Möglichkeiten.  Die meisten dieser Tools sind recht aufwendig in der Konfiguration oder schwierig zu bedienen.

Eine einfache Alternative,  speziell für CakePHP,  möchte ich hier vorstellen.

Voraussetzungen

  • CakePHP ab Version 1.3
  • Remotezugang via FTP
  • Eine Konsole am lokalen Rechner mit konfigurierter cake-shell

Los gehts..

1. Installation

git://github.com/sassman/deployment_shell.git

den Code in das Verzeichnis “app/vendors/shells/” entpacken.

2. Konfiguration erstellen

2.1 Konfiguration interaktiv erstellen

in cake bake shell -Art kann die Konfiugration interaktiv erstellt werden.

cake deploy create_deployment_config

2.2 Konfiguration manuell erstellen

/app/config/deployment.php:

<?php
 
class AppDeployment extends BasicDeployment
{
    var $default = array(
	'source' => 'File',
	'destination' => array('Ftp' => array(
		'host'      => 'yourftp_hostname',
           	'login'     => 'username',
           	'password'  => 'password',
           	'port'      => '21',
           	'timeout'   => '60',
           	'path'		=> '/html/app/beta/your_app'
	)),
       'exclusions' => array(
       		'files/attachments*',
       		'core.php'
       )
    );
 
    var $live = array(
	'source' => 'File',
	'destination' => array('Ftp' => array(
		'host'      => 'your_ftphostname',
           	'login'     => 'username',
           	'password'  => 'password',
           	'port'      => '21',
           	'timeout'   => '60',
           	'path'		=> '/html/apps/your_app'
	)),
       'exclusions' => array(
       		'files/attachments*',
       		'/cake/',
       		'core.php'
       )
    );
}
 
?>

3. First Run

eine Konsole öffnen und in den /app Ordner ihrer Anwendung wechseln.

cake deploy

führt das Deployment mittels Default-Konfiguration aus.

und

cake deploy live

führt das Deployment mittels “live” Konfiguration aus.

auf diese Weise können, beliebig viele , Deployment-Konfigurationen angelegt werden.

4. Bemerkungen

Das Tracken der übertragenen Dateien,  erfolgt über eine sha1 checksumme der Datei und wird im Kontext der Deployment-Konfiguration abgespeichert. Dadurch erhält jede Deployment-configuration ihre eingene Update-Datei-Liste.


Jun 8 2010

.NET 3.5 SP1 Und Click Once deployment

sas

Mit Visual Studio 2008 SP1 ist es leicht möglich eine Anwendung über Click Once bereitzustellen. Desweiteren kann man die erforderlichen Komponenten auswählen, welche der Click Once Installer dann direkt von Microsoft runterläd.

Wenn man jedoch die Komponenten (in diesem Fall .Net 3.5 SP1) mit vom  Bereitstellungsort laden lassen möchte, um z. B.  Netzlast zu sparen, führt das, in dem Moment wo man >Bereitstellen< drückt, zu einer Reihe von Fehlermeldungen.

Hier findet man eine lange Liste von Fehlern, welche im VS 2008 SP1 stecken. Unter anderem findet man auch, für das oben beschriebene Problem, unter 2.3.1.1 “Samesite für das .NET Framework 3.5 SP1-Bootstrapperpaket aktivieren” eine ausführliche Anleitung um dies zu beheben.

Viel Spaß beim Deployment!


Mai 13 2010

Mailfunktionalität für lokale PHP Anwendungen unter Linux

sas

Im Entwicklungsprozess einer PHP Anwendung kommt man früher oder später an den Punkt, wo es interessant wird E-Mail-Funktionalität zu integrieren. Denkbar sind Anwendungsbeispiele wie: Anforderung eines neuen Passwortes für den Login oder das automatische Informieren bei Aktionen. Doch zunächst findet die Entwicklung meist auf  lokalen Entwicklungsmaschinen statt,  so wie in diesem Beispiel ein Linux Rechner (Kubuntu 10.04).  Das Problem was an dieser Stelle auftaucht ist klar, per default ist PHP so eingerichtet, dass es die lokale Mailfunktion des Betriebssystemes nutzt, konkret heißt dies der Postfix-Dienst muss die E-Mails ausliefern, was er zunächst im besten Fall auch nur lokal macht.

Also ist die Frage: Wie bekomme ich Postfix dazu mit meinem “öffentlichen” E-Mail Account, Mails zu versenden. Dies wird im Folgenden mit anschaulichen Erklärungen beschrieben.

sudo apt-get install postfix

Die Einstelldialoge werden mit folgenden Werten belegt:

  • Internet mit Smarthost
  • Ihrem Rechnernamen (default vorausgefüllt)
  • die Adresse des SMTP Servers ihres E-Mailproviders

Eine Nachbearbeitung der /etc/postfix/main.cf ist nötig, Folgendes ist  hinzuzufügen

# noplaintext weglassen, wenn Passwörter im
# Klartext übertragen werden sollen
# (nicht empfohlen)
# smtp_sasl_security_options = noplaintext noanonymous
smtp_sasl_security_options = noanonymous
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_password
 
# lokale sender (username) sollen
# auf reale adressen gemapt werden
sender_canonical_maps = hash:/etc/postfix/sender_canonical

Nun sind die entsprechenden Dateien sasl_password und sender_canonical vorzubereiten.
In der Datei /etc/postfix/sasl_password werden der Server, Login und das Passwort angegeben, mit dem sich Postfix bei Ihrem E-Mailprovider authentifiziert.
smtp.IhreDomain.de MailNutzername:PasswortDesNutzers

In der Datei /etc/postfix/sender_canonical werden die System-Nutzer den jeweiligen Mailadressen zugewiesen. So z.B. der www-data Nutzer (unter dem Apache2 läuft) auf eine Mailadresse Ihrer Wahl.

www-data your-mail-adress@yourmailprovider.de
sudo postmap /etc/postfix/sasl_password
sudo postmap /etc/postfix/sender_canonical
sudo service postfix reload

Der postmap Befehl erstellt eine für Postfix lesbare .db Datei.


Apr 21 2010

KMail und die Task-Bar

sas

Früher (KDE 3) war es Standard, dass KMail sich beim Öffnen in die Task-Bar (System-Tray) “klinkte”, so dass beim schließen, die Anwendung in die Task-Bar minimiert wurde.

Aber auch heute (KDE4) ist dies Problemlos möglich, nur etwas versteckt zu finden:

Einstellungen->Kmail einrichten-> Erscheinungsbild->Systemabschnitt der Kontrolleiste

Dort dann den Haken bei “Anzeige im Systemabschnitt der Kontrolleiste” setzen und darunter “Kmail immer in der Kontrollleiste anzeigen” selektieren.

So einfach war das!

Kontext: KDE 4.4.2 | KMail 1.13.2