Schnellanleitung, um GNU chess auf Mac OS X zu installieren

So installiert man auf Mac OS X (10.7.4) GNU chess mit dem Paket-Manager Homebrew.

1. Homebrew installieren

Zunächst muss der Paket-Manager Homebrew installiert werden.

Wie das geht, ist hier beschrieben: https://github.com/mxcl/homebrew/wiki/Installation

Zum Testen des Systems sollte nach der Installation der Befehl

gonzales:~ snh$ brew doctor

ausgeführt werden.

2. GNU chess installieren

Mit Homebrew kann man nun GNU chess installieren.

gonzales:~ snh$ brew tap homebrew/games
Cloning into '/usr/local/Library/Taps/homebrew-games'...
remote: Counting objects: 528, done.
remote: Compressing objects: 100% (246/246), done.
remote: Total 528 (delta 280), reused 507 (delta 260)
Receiving objects: 100% (528/528), 88.91 KiB | 69 KiB/s, done.
Resolving deltas: 100% (280/280), done.
Tapped 40 formula
gonzales:~ snh$ brew install gnu-chess

…fertig.

gonzales:~ snh$ gnuchess
GNU Chess 6.0.1
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
White (1) : e4
TimeLimit[0] = 0
TimeLimit[1] = 0
1. e4

black  KQkq  e3
r n b q k b n r
p p p p p p p p
. . . . . . . .
. . . . . . . .
. . . . P . . .
. . . . . . . .
P P P P . P P P
R N B Q K B N R 

Thinking...

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

PHP-Seiten bei Auslieferung zippen

Mit zwei einfachen Zeilen in der .htaccess lässt sich der Inhalt von PHP-Seiten bei der Auslieferung automatisch gzippen, was zu einer Reduzierung der Seitengröße um bis zu 90% führen kann.

php_value output_buffering On
php_value output_handler ob_gzhandler

Diese Konfiguration lässt sich auch mit folgenden Zeilen in der php.ini durchführen.

output_buffering = On;
output_handler = ob_gzhandler;

…oder direkt im PHP-Sourcecode, durch Hinzufügen von

<?php
ob_start("ob_gzhandler");
?>

Notwendig für die Funktionsfähigkeit dieser Komprimierung ist die zlib-Erweiterung von PHP. Diese Erweiterung ist aber allgemeiner Standard bei PHP-Hosting-Anbietern.

Dokumentation zu ob_gzhandler auf php.net

Der Befehl „cp -r *“ kopiert keine versteckten Dateien

Wenn man mit beispielsweise

cp -r * /zu/diesem/verzeichnis/

den Inhalt eines Verzeichnisses in ein anderes kopieren will, so werden keine versteckten Dateien kopiert. Der bash-Wildcard ‚*‘ gilt nämlich nicht für versteckte Dateien, also Dateien, die mit einem Punkt anfangen, wie z.B. „.htaccess“. Mit

cp -r * .[!.]* /zu/diesem/verzeichnis/

kopiert man auch die versteckten Dateien.

  • * kopiert „normale“ Dateien
  • .[!.]* kopiert Dateien, die mit einem ‚.‘ beginnen, ohne das übergeordnete Verzeichnis ‚..‘ zu kopieren

Siehe hierzu auch: Bash Wildcards

Passwortlose ssh-Authentifizierung

In Linux und Unix (also auch in macOS) kann man mit dem Kommandozeilen-Tool ssh-keygen ein Schlüsselpaar mir Public- und Private-Key anlegen, welches zur  Authentifizierung über ssh genutzt werden kann.

Über die Console bzw. das Terminal geben wir hierzu den Befehl ssh-keygen -t dsa ein

 1 | Sylvester:~ lisa$ ssh-keygen -t dsa
 2 | Generating public/private dsa key pair.
 3 | Enter file in which to save the key (/Users/lisa/.ssh/id_dsa): 
 4 | Created directory '/Users/lisa/.ssh'.
 5 | Enter passphrase (empty for no passphrase): 
 6 | Enter same passphrase again: 
 7 | Your identification has been saved in /Users/lisa/.ssh/id_dsa.
 8 | Your public key has been saved in /Users/lisa/.ssh/id_dsa.pub.
 9 | The key fingerprint is: [...]
10 | Sylvester:~ lisa$ cd ~/.ssh
11 | Sylvester:~ lisa$ ls
12 | id_dsa     id_dsa.pub

In Zeile 3 wird gefragt, wo man die Keys abspeichern möchte, als Antwort einfach Return drücken. Falls das Verzeichnis .ssh noch nicht existiert, wird es nun erstellt. Zur Passwortlosen Authentifizierung bei der Frage nach dem passphrase in Zeile 5 und 6 auch nur Return drücken (empty for no passphrase).

Im Verzeichnis ~/.ssh werden von dem Programm nun die zwei Dateien id_dsa und id_dsa.pub erstellt. id_dsa ist der Private-Key, id_dsa.pub der Public-Key. Der Private-Key sollte möglichst nicht in fremde Hände geraten.

Der Public-Key, also der Inhalt von id_das.pub muss nun auf dem Server in die Datei ~/.ssh/authorized_keys kopiert werden. Wenn der Ordner ~/.ssh oder die Datei noch nicht existiert kann man sie einfach erstellen.

Nachdem das alles erledigt ist sollte beim Login auf dem Server nicht mehr nach dem Passwort gefragt werden, da sich der Computer automatisch über die hinterlegten Keys authentifiziert.

Sylvester:~ lisa$ ssh techblog.7d0.de -l techlisa
Last login: Sat Jan 24 13:25:45 2009 from p0815ea9d.dip.t-dialin.net
Have a lot of fun...
techlisa@techblog.7d0.de:~>

Ich find´s praktisch und es soll ja auch sicherer sein, als die Authentifizierung mit Login und Passwort.

Zum Schluss noch die Manpage von ssh-keygen.

Beispiele zur Benutzung von grep und find

In einer bestimmten Datei nach einem Wort suchen:

grep suchwort datei.txt

Alle Dateien im aktuellen Ordner und Unterordnern finden, die einen bestimmten Text enthalten:

grep -R "suchwort" *

Alle Dateien im aktuellen Ordner finden, die wort1 oder wort2 im Inhalt haben

grep -E "(wort1|wort2)" *

Dateien im aktuellen Ordner und Unterordnern finden, deren Namen einem bestimmen Muster entsprechen:

find . -name "*.jpg"

Dateien finden, deren Namen nicht einem bestimmten Muster entsprechen:

find . ! -name "*.jpg"

Dateien finden, deren Namen einem bestimmten Muster entsprechen und die einen bestimmten Text enthalten:

find . -name "*.php" -exec grep -il "suchtext" {} ;

Dateien finden, die bestimmte Datei-Endungen haben (Mit Regular-Expressions finden):

find . -regex ".*(php|html|tpl)$"

Große Dateien finden (Dateien finden, die größer als ca. 500 MB sind):

find . -type f -size +500000k -exec ls -lh {} ;

Dateien finden, deren Pfade einem bestimmten Pattern entsprechen:

find . -path "*/.svn*"

Dateien finden, deren Pfade nicht einem bestimmten Pattern entsprechen:

find . ! -path "*/.svn*"

Dateien finden, die nicht einem bestimmten User (nicht root) gehören:

find . ! -user root

Dateien finden, die „oo“ oder „ee“ im Namen haben:

find . ( -name "*oo*" -or -name "*ee*" )

Dateien finden, die nicht „oo“ oder „ee“ im Namen haben:

find . ! ( -name "*oo*" -or -name "*ee*" )

Hier noch die Manpages zu grep und find.

MySQL-Dump erzeugen und einspielen

Mit MySQL lassen sich über das Terminal einfach Datenbank-Dumps (Kopien der Datenbank) erzeugen und einlesen. Zum Erzeugen nutzt man den Befehl mysqldump und zum Einlesen eines Dumps den Befehl mysql.

Erzeugen

mysqldump -u$DBUSER -p$DBPASSWD -h$DBHOST $DATABASE > $FILENAME

Einlesen

mysql -u $DBUSER -p$DBPASSWD -h$DBHOST --database=$DATABASE < $FILENAME

 

Das Programm mysql befindet sich unter OS-X in MAMP und XAMPP an folgenden Stellen:

MAMP OS-X: /Applications/MAMP/Library/bin/mysql
XAMPP OS-X: /Applications/xampp/xamppfiles/bin/mysql

Schnellerer Dump für MyISAM-Tabellen mit mysqlhotcopy

Falls die Datenbank nur aus MyISAM-Tabellen besteht, kann man Backups auch wesentlich schneller mit dem Programm mysqlhotcopy erstellen. mysqlhotcopy sperrt lediglich alle Tabellen und kopiert dann das Dateiverzeichnis, welches sich üblicherweise in /var/lib/mysql befindet. Dieser Backup ist dann nicht besonders kompatibel aber eben so schnell, wie es grade braucht, die Daten auf der Festplatte zu kopieren.

„RewriteEngine not allowed here“ Fehlermeldung in apache2 (XAMPP)

Wenn vom apache-Webserver der Fehler „RewriteEngine not allowed here“ kommt, kann das daran liegen, dass, wie in meiner aktuellen XAMPP-Installation unter OS-X, „AllowOverride“ in der httpd.conf  auf „AuthConfig“ oder „None“ gesetzt wurde.

„AllowOverride“ definiert, welche Einstellungen der httpd.conf in einer .htaccess überschrieben oder geändert werden dürfen. Wenn man „AllowOverride“ auf „All“ setzt, lassen sich alle gewünschten Einstellungen in der .htaccess tätigen.

Hier der Ausschnitt aus meiner httpd.conf, der das Problem behoben hat:

    #
    # AllowOverride controls what directives may be placed in .htaccess files.
    # It can be "All", "None", or any combination of the keywords:
    #   Options FileInfo AuthConfig Limit
    #
    AllowOverride All

Siehe hierzu auch: Konfigurationsdirektive: AllowOverride

Query-Cache in MySQL aktivieren

Seit der Version 4.0 besitzt MySQL einen Query-Cache. Dieser Cache speichert Ergebnisse von SQL-Abfragen im Speicher und antwortet, wenn die exakt gleiche Daten-Abfrage erneut kommt, mit dem gecachten Ergebnis.

Jede Tabelle hat ihren eigenen Cache. Bei schreibendem Zugriff (Daten Manipulation) auf die Tabelle muss deren Cache gelöscht werden. Die Aktivierung des Caches ist daher vor allem dann sinnvoll, wenn die Anwendung mehr aus der Datenbank liest, als schreibt. 

In den meisten Web-Anwendungen, wie beispielsweise Foren oder Datenbank-Archive werden Daten wesentlich öfter abgefragt als geschrieben, so dass die Aktivierung des Query-Cache in MySQL einen hohen Performance-Gewinn bringen kann.

Aktiviert werden kann dieser Cache per Konfiguration im Abschnitt [mysqld] der my.cnf Konfigurationsdatei von MySQL. Eine Beispiel-Konfiguration könnte so aussehen:

# Maximale Groesse eines Abfrage Ergebnisses, damit es gecached wird
query_cache_limit       = 1M
# Gesamtgroesse des Cache
query_cache_size        = 16M

Der Status des Cache, also wie viele Anfragen sich beispielsweise im Cache befinden und wie gut der zur Verfügung stehende Cache-Speicher genutzt wird, kann man sich mit folgendem Statement anzeigen lassen:

SHOW STATUS LIKE 'Qcache%';

Wichtig ist, dass die Zahl „Qcache_lowmem_prunes“ möglichst gering bleibt, da sie steigt, wenn aufgrund fehlenden Speichers Anfragen aus dem Cache entfernt wurden. In diesem Fall ist es sinnvoll die „query_cache_size“ zu erhöhen.

Dokumentation des MySQL Query-Cache auf den Seiten von MySQL