Der Terminal-Fenstermanager Screen

In letzter Zeit lerne ich immer mehr das Programm Screen schätzen. Es macht die Verwaltung von Server-Systemen wesentlich angenehmer, da es mehrere virtuelle Terminals bzw. „Fenster“ über einen Login erlaubt.

Eine sehr praktische Eigenschaft an Screen ist, dass die Screen-Sessions unabhängig von der bestehenden Server-Verbindung erhalten bleiben. Das heisst, man kann ein Script gefahrlos innerhalb einer Screen-Session starten, ohne Angst haben zu müssen, dass es durch einen Verbindungsabbruch gestoppt wird.

Im folgenden die wichtigsten Kommandozeilen-Parameter und Tastenkürzel nach dem Aufruf von Screen.

Eine neue Screen-Session startet man mit dem Kommando „screen“.

screen

Optional kann man der Session mit dem Parameter -S einen Namen geben.

screen -S SessionName

Wenn man mehrere Screen-Sessions mit verschiedenen Namen gestartet hat, kann man sich mit dem Parameter -ls eine Liste der bestehenden Screen-Sessions anzeigen lassen.

screen -ls

Wie gesagt, bleibt eine Screen-Session nach Beendigung des Terminals erhalten, vorausgesetzt, auf dem Server wurde kein Reboot durchgeführt.

Eine früher gestartet Screen-Session lässt sich mit dem Parameter -r wieder reaktivieren. Der SessionName ist nur dann notwendig, wenn mehrere screen-Sessions gestartet wurden.

screen -r SessionName

Im Folgenden, die Kürzel zur Steuerung innerhalb der Screen-Session. Screen-Kommandos werden im Allgemeinen mit ctrl-a und einer weiteren Taste ausgeführt.

ctrl-a d 	Screen Session in den Hintergrund setzen (detach)
ctrl-a ? 	Hilfe anzeigen

ctrl-a c 	Eine neues Fenster erstellen
ctrl-a 1-n 	Auf Fenster Nr. 1-n schalten 
ctrl-a "	Liste der Fenster anzeigen
ctrl-a A	Das aktuelle Fenster umbenennen
exit		Das aktuelle Fenster schliessen

Screen-Fenster lassen sich teilen um so mehr Informationen gleichzeitig im Terminal anzuzeigen.

ctrl-a S	Das aktuelle Fenster horizontal teilen
ctrl-a |	Das aktuelle Fenster vertikal teilen
ctrl-a tab	Zur nächsten Fensterregion springen
ctrl-a X	Die aktuelle Fensterregion entfernen
ctrl-a Q	Alle Regionen ausser der aktiven entfernen

Simple SQL-Abfragen in Magento

Magento bietet einen hervorragenden Datenbank-Abstraktionslayer. Und im Allgemeinen sollte man diesen Layer auch für Datenabfragen und vor allem für Datenmodifikationen im Magento-System nutzen.

Manchmal ist es aber doch der einfachste und performanteste Weg, wenn man direkt per SQL auf die Datenbank zugreifen kann. Das geht auch in Magento, und zwar auf folgende Weise.

$sql = "SELECT foo FROM bar WHERE baz";
$data = Mage::getSingleton("core/resource")->getConnection(Mage_Core_Model_Resource::DEFAULT_READ_RESOURCE)->fetchAll($sql);

Parameterübergabe bei window.setTimeout

Als ersten Parameter von window.setTimeout() kann auch ein Funktionszeiger (function pointer) anstatt eines Strings übergeben werden. So ist es möglich, die nach dem Timeout aufgerufene Funktion mit beliebigen Parametern zu versorgen, wie in folgendem Beispiel gezeigt ist.

var elementId = this.id; // oder irgend ein anderer Wert
window.setTimeout(function() { macheWas(elementId) }, 1000);

Hier wird die Funktion „macheWas“ nach einer Sekunde mit dem Parameter „elementId“ aufgerufen.

UTF-8 mit Hibernate und MySQL

Damit MySQL mit Hibernate UTF-8 kodierte Zeichen richtig speichert, muss man die jdbc-URL um ein paar Parameter erweitern, so dass sie ungefähr so aussieht:

jdbc:mysql://127.0.0.1:3306/meine_datenbank?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8

Ohne diese Modifikation werden UTF-8 Sonderzeichen als Fragezeichen abgespeichert.

Gefunden auf: http://www.isocra.com/2007/01/utf-8-with-hibernate-30-and-mysql/

Pear für XAMPP auf OS-X aktivieren

Pear ist zwar bei XAMPP mit dabei, aber, zumindest in Version „XAMPP für Mac OS X 1.0.1“, nicht funktionstüchtig. Dieser Umstand lässt sich mit folgenden Schritten beheben.

1. Im Terminal folgende Befehle ausführen

sudo /Applications/XAMPP/xamppfiles/bin/pear channel-update pear.php.net
sudo /Applications/XAMPP/xamppfiles/bin/pear install PEAR

2. In den letzten Zeile der Konfiguration /etc/php.ini

;***** Added by go-pear
include_path=".:/Applications/xampp/xamppfiles/lib/php"
;*****

gegen das hier austauschen:

include_path = ".:/Applications/XAMPP/xamppfiles/lib/php:/Applications/XAMPP/xamppfiles/lib/php/pear"

Nach einem Neustart des Apache sollte Pear nun funktionieren.

parent:: macht den Methoden-Namen bei __call() lowercase

Wenn eine PHP-Klasse die Methode __call() besitzt, wird diese beim Versuch eine nicht existierende Methode aufzurufen, aufgerufen, anstatt einen Fehler zu erzeugen.

Im ersten Parameter steht dann der Name der Methode und im zweiten Parameter stehen die Argumente die an die nicht existierenden Methode übergeben wurden… Soweit, so klar.

Wird __call() aber über parent:: aktiviert, wird der erste Parameter, also der Methoden-Name seltsamerweise lowercase. Dieses Verhalten zeigt zumindest PHP 5.2.9.

Das folgende Code-Beispiel zeigt, was genau gemeint ist.

<?php
class Daddy
{
    function __call($method, $args)
    {
        echo 'class: '.get_class($this).', method: '.$method."n";
    }
}

class Son extends Daddy
{
    function getSomeData()
    {
        return parent::getSomeData();
    }
}

$daddy = new Daddy();
echo $daddy->getSomeData();

$son = new Son();
echo $son->getSomeData();

Die Ausgabe ist:

class: Daddy, method: getSomeData
class: Son, method: getsomedata

Was der Sinn davon ist, weiss ich leider nicht. Ich vermute mal einen Bug in PHP.

Die Scan-Zeit von NetBeans 6.7 lässt sich drastisch reduzieren

Ich mag NetBeans zur PHP-Entwicklung. Allerdings scannte NetBeans 6.7 nach dem Start zunächst sehr lange die Dateien des Sourcecodes („Scanning Projects…“). Vor allem, wenn man auf einem gemounteten Serverlaufwerk arbeitet. Wenn man während des Scannens Änderungen am Code macht, bleibt NetBeans meist hängen, was den langen Scan ärgerlich macht.

Um die Geschwindigkeit von NetBeans zu erhöhen habe ich heute ausprobiert, ungenutzte Plugins zu deaktivieren… und siehe da, nachdem ich das CSV-Plugin deaktivert hatte, war die Scanzeit zum Start der Entwicklungumgebung auf unter eine Minute reduziert.

PHP debuggen – mit NetBeans, XAMPP und xdebug

Dieser Artikel zeigt, wie man einfach einen xdebug-Debugger unter XAMPP zum Laufen bekommt und diesen dann von NetBeans aus nutzen kann. Dieses Verfahren wurde unter OS-X Leopard mit XAMPP 1.0.1 für Mac OS X ausprobiert.

1. xdebug-Erweiterung in XAMPP kopieren

Wer die xdebug-Erweiterung nicht selbst kompilieren möchte, kann sie hier für OS-X Leopard (Intel) herunterladen: xdebug.so

Das xdebug.so muss in folgendes Verzeichnis kopiert werden.

/Applications/XAMPP/xamppfiles/lib/php/php-5.2.9/extensions/no-debug-non-zts-20060613

2. Die Erweiterung in etc/php.ini konfigueren

In der php.ini wird die Erweiterung konfiguriert.

zend_extension="/Applications/XAMPP/xamppfiles/lib/php/php-5.2.9/extensions/no-debug-non-zts-20060613/xdebug.so"
xdebug.remote_enable=1
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_host=127.0.0.1
xdebug.remote_port=9000
xdebug.idekey=

Das wars auch schon. Apache neu starten und der Debugger sollte nun mit NetBeans funktionieren.

Den Speicher erhöhen, den NetBeans zur Verfügung hat

Um auch größere Projekte mit NetBeans programmieren zu können, ist es sinnvoll, den für NetBeans verfügbaren Speicher zu erhöhen. Die hier beschriebene Methode habe ich unter OS-X Leopard ausprobiert. Mit anderen Betriebssystemen ist die Vorgehensweise wahrscheinlich ähnlich.

In dem Verzeichnis

/Applications/NetBeans/NetBeans 6.5.app/Contents/Resources/NetBeans/etc

findet man die Datei „netbeans.conf„, in der auch Parameter der Java-Laufzeitumgebung konfiguriert werden können. Die dafür zuständige Zeile ist:

netbeans_default_options="-J-client -J-Xverify:none -J-Xss2m -J-Xms32m -J-XX:PermSize=32m -J-XX:MaxPermSize=200m -J-Dapple.laf.useScreenMenuBar=true -J-Dsun.java2d.noddraw=true"

Mit

netbeans_default_options="-J-client -J-Xverify:none -J-Xss16m -J-Xms384m -J-Xmx768m -J-XX:PermSize=64m -J-XX:MaxPermSize=256m -J-Dapple.laf.useScreenMenuBar=true -J-Dsun.java2d.noddraw=true"

startet die Virtual-Machine mit 384 MB Speicher und erlaubt maximal 768 MB. Je nach RAM des Computers kann man so den vom NetBeans-Java genutzten Speicher sinnvoll einstellen.

Zur Website von NetBeans

CakePHP Controller ohne Model und Datenbanktabelle

Wenn man in CakePHP einen Controller erstellt, ohne, dass man die zugehörige Datenbanktabelle anlegt, bekommt man die Fehlermeldung „Database table for model was not found“.

Um diese Fehlermeldung zu umgehen und einen Controller zu erstellen, der kein direktes Model nutzt, ist es jedoch möglich, wie im nachfolgenden Code-Schnipsel gezeigt, den Klassenparameter $uses auf null zu setzen. 

class FooController extends AppController
{
    var $uses = null;             // ohne Datenbanktabelle "foos" und Model "Foo"

    function doSomething()
    {
        $this->loadModel('User'); // andere Models nachladen geht trotzdem
    }
}