Datenbankfehler nach Update auf HHVM 3.6

Nach dem Update von HHVM auf Version 3.6 konnten meine Seiten nicht mehr auf ihre MySQL Datenbank zugreifen. Ursache des Problems ist, dass bei den Paketen für Ubuntu/Debian  der Socket für die Verbindung zu localhost hart auf „/tmp/mysql.sock“ kodiert ist.

Der richtige Socket wäre aber „/var/run/mysqld/mysqld.sock“. Glücklicherweise gibt es dafür einen Konfigurationsparameter sodass man HHVM  nicht selbst neu kompilieren muss.

Es genügt ein Eintrag in der Datei /etc/hhvm/server.ini

hhvm.mysql.socket = /var/run/mysqld/mysqld.sock

Flackerndes Display bei Dell Vostro 3550 unter Ubuntu

Beim Dell Vostro 3550 gibt es unter Ubuntu einen nervigen Bug. In den ersten ca. 10 Minuten nach dem einschalten, schaltet das Notebook ständig zwischen verschiedenen Displayeinstellungen hin und her. Dabei ist es völlig egal wie oft man diese mit XRandR neu setzt. Noch viel nerviger ist dabei, dass die Maus jedes Mal den Fokus verliert.

Das Problem selbst scheint aber nicht nur Ubuntus Unity zu betreffen, sondern z.B. auch Gnome 3 unter Arch.

Dieses von dem User beschriebene Event wird bei mir auch jedes Mal geworfen, wenn sich das Display wieder mal auf zufällige Werte zurücksetzt. Woher es kommt und wodurch es ausgelöst wird, ist nicht feststellbar. Es scheint aber nur dann aufzutreten wenn der Intel Grafikchip verwendet wird und steht in Zusammenhang mit der hybriden Grafiklösung (Intel/AMD).

Die momentane Lösung besteht also darin dem XServer beizubringen, das er dieses Event einfach ignorieren kann. Dazu erzeugt man eine neue Konfiguration in /usr/share/X11/xorg.conf.d damit diese unabhängig von einer evtl. vorhandenen /etc/X11/xorg.conf verwendet wird.

Diese Datei (10-flickering-fix.conf) enthält folgenden Inhalt:

Section "InputClass"
        Identifier "unknown device that causes display flicker"
        MatchDevicePath "/dev/input/event7"
        Option  "Ignore" "on"
EndSection

Dazu erstellt man ein Script das bei jedem Start ausgeführt wird und den entsprechenden „Video Bus“ deaktiviert.

Das Script 40custom-vostro-fix liegt in /etc/X11/Xsession.d und enthält nur eine Zeile.

xinput disable 8

Howto: Windows 8 – Ruhezustand aktivieren


Da die Rechner mit Windows 8 schneller hochfahren als bei den Vorgängerversionen, hat sich Microsoft unverständlicherweise dazu entschlossen, den Ruhezustand aus den Standardoptionen zu entfernen. Stattdessen wird nur noch “Herunterfahren” und “Energie sparen” angeboten. Die erste Option sogt dafür, dass man bei erneutem Einschalten alle seine Programme neu starten muss und die Zweite verbraucht jede Menge Energie und führt bei Verlust der Netzspannung zum gleichen Effekt wie die erste Option.

Dieser lässt sich aber relativ einfach wieder aktivieren:

Man startet zunächst die Eingabeaufforderung als Administrator. Die geht am schnellsten mit einem Rechtsklick auf die Startkachel, welche angezeigt wird wann man die Maus in die linke untere Ecke des Bildschirms bewegt.

Start Kontextmenü der Startkachel

Da aktiviert man mit dem Kommando „powercfg -h on“ den Ruhezustand

Eingabeaufforderung mit Kommando

Damit dieser auch im Menü angezeigt wird, muss man jetzt in der Systemsteuerung, bei den Energieoptionen unter dem Punkt „Auswählen was beim Drücken von Netzschaltern geschehen soll“ alle Optionen mittels Klick auf „Einige Einstellungen sind momentan nicht verfügbar.“ aktivieren.

Energieoptionen Netzschalteroptionen

Anschließend kann man unterhalb bei „Einstellungen für das Herunterfahren“ den Haken für den Ruhezustand setzen.

Netzschalteroptionen nach Freischaltung

Howto: Debian 6 (Squeeze) mit nginx + FastCGI + Zend Framework

Falls noch nicht geschehen installieren wir zuerst mal nginx und php5-cgi PHP-FPM.

aptitude install nginx php5-cgi php5-fpm

Jetzt legen wir uns eine neue Konfigurationsdatei für nginx mit folgendem Inhalt an.

server {
	server_name  example.com;
	access_log  /var/log/nginx/com.example.access.log;
	if (!-e $request_filename) {
    		rewrite ^.*$ /index.php last;
	}
	root   /var/www/vhosts/example.com/public;
	index  index.php index.html;
	location ~ \.php$ {
		include /etc/nginx/fastcgi_params;
                keepalive_timeout 0;
                fastcgi_param  APPLICATION_ENV  'development';
                fastcgi_param   SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                fastcgi_pass    127.0.0.1:9000;
	}
}

Die Rewrite Regel leitet wie beim Zend-Framework üblich alle Dateien die nicht existieren auf die index.php um.

Die Datei wird anschließend als “/etc/nginx/sites-available/example.com” gespeichert und zum aktivieren verlinkt.

ln –s “/etc/nginx/sites-available/example.com “/etc/nginx/sites-enabled/example.com

Nun muss noch nginx neu startet werden.

/etc/init.d/nginx restart

Dateien mit der Endung .php werden also an localhost auf den Port 9000 weiter gereicht. An der Stelle wartet jetzt noch kein PHP auf die Anfrage. Man könnte jetzt also einfach php-cgi starten, das hält aber nur bis nächsten Neustart.

php-cgi -b 127.0.0.1 &

Oder aber man richtet sich ein entsprechendes Init Script ein.

Howto: Debian 5 (Lenny) mit Lighttpd (Lighty) + PHP 5.3 + Zend Framework

Backports einfügen

PHP Backports von dotdeb.org

deb http://php53.dotdeb.org stable all
deb-src http://php53.dotdeb.org stable all


Lighty Backports von bits and pieces

deb http://www.jonmoniaci.com/debian-ppa/ lenny main contrib non-free

Installation

aptitude install lighttpd php5-cgi
lighttpd-enable-mod fastcgi fastcgi-php

VHost einrichten

Wir legen jetzt eine neue Konfigurationsdatei für unseren VHost an.

touch /etc/lighty/available-mods/10-myvhost.conf


Die Datei bearbeiten wir jetzt mit einen beliebigen Editor

$HTTP["host"] == "myhost.example.com" {
	server.document-root = "/pfad/zur/ZF-Anwendung/public"
	url.rewrite-once = (
		".*\.(js|ico|gif|jpg|png|css)$" => "$0",
		".*\?(.*)$" => "/index.php?$1",
		"" => "/index.php"
	)
	setenv.add-environment = (
		"APPLICATION_ENV" => "development"
	)
}


Nun muss die Konfiguration noch aktiviert werden

lighttpd-enable-mod myvhost

Module hinzufügen

Jetzt müssen der Datei “/etc/lighttpd/lighttpd.conf” noch 2 Module hinzugefügt werden

server.modules = (
	#andere Module
        "mod_rewrite",
        "mod_setenv"
)

Konfiguration neu laden

/etc/init.d/lighttpd force-reload


Nachdem die Konfiguration neu geladen wurde, sollte das Ganze wie gewünscht funktionieren.

Howto: Google Android – Kommunikation via HttpClient und JSON

Da es für Java jede Menge unterschiedliche Implementierungen eines HTTPClient gibt, hier mal ein Beispiel für die die Variante der Apache Foundation die im Google Android SDK zum Einsatz kommt. In diesem Beispiel geht es darum sich auf einem entfernten Server einzuloggen und anschließend Daten via JSON abzufragen und wieder in getypte Java Objekte umzuwandeln. Dabei speichert der Server den Login-Status in einer Session. Die SessionID wird auf der Clientseite in einem Cookie gespeichert, und muss bei jeder Anfrage mitgesendet werden.

Funktionsweise

Verbindung herstellen

HttpGet get = new HttpGet(String.format("%s?username=%s&password=%s", loginUrlHost, user, pass));
DefaultHttpClient client = new DefaultHttpClient();
ResponseHandler responseHandler = new BasicResponseHandler();
HttpResponse response = client.execute(get);

Anwort auswerten

int statusCode = response.getStatusLine().getStatusCode();
if (statusCode == 200) {
String responseText = responseHandler.handleResponse(response);
}

JSON parsen

import org.json.JSONException;
import org.json.JSONObject;

public class LoginResponse extends JSONObject {
    private boolean success;
    private String message;

    public LoginResponse(String string) throws JSONException {
        super(string);
        success = getBoolean("success");
        message = (get("message").equals(null))?"":getString("message");
    }

    public boolean isSuccess() {
        return success;
    }

    public String getMessage() {
        return message;
    }
}
LoginResponse loginResponse;
 try {
 loginResponse = new LoginResponse(responseText);
 } catch (JSONException e) {
 Log.d("LOGIN_ERROR(INVALID_RESPONSE)", e.getMessage(), e);
 errorState = INVALID_RESPONSE;
 return INVALID_RESPONSE;
 }

Cookies auslesen

List cookies = client.getCookieStore().getCookies();
 for (int i = 0; i < cookies.size(); i++) {
 Cookie cookie = cookies.get(i);
 Log.d("Cookie-Name:", cookie.getName());
 Log.d("Cookie-Value:", cookie.getValue());
 break;
 }

Cookies senden

DefaultHttpClient client = new DefaultHttpClient();
CookieStore cookieStore = client.getCookieStore();
cookieStore.addCookie(loginCookie);
client.setCookieStore(cookieStore);

Howto: PDF Formulare mit PHP ausfüllen

Wie erzeuge ich ein Formular?

PDF Formulare kann man entweder direkt mit PHP erzeugen z.B. mit der Klasse tcpdf oder aber, wenn man Wert darauf legt das dass Ganze ansprechend aussieht, mit OpenOffice. Natürlich funktioniert das ganze auch mit den Produkten von Adobe.

Wie fülle ich das Formular aus?

Adobe stellt mit FDF ein Format zur Verfügung mit den es möglich ist PDF Formulare auszufüllen. Die FDF Datei selbst enthält dabei die Daten die in die Felder eingesetzt werden sollen und den Namen des dazu gehörenden PDF Formats.

Wenn man diese Methode benutzt erhält man schon mal ein ausgefülltes Formular. Das ist aber immer noch kein PDF und abhängig vom ursprünglichen Dokument.

Wie wird daraus wieder ein PDF?

An dieser Stelle kommt das PDF Toolkit ins Spiel. Diesem Tool, das man irgendwo auf den Server ablegt, übergibt man die PDF und FDF Datei und erhält eine neue ausgefüllte PDF Datei.

Howto: Administrative Freigaben unter Windows 7 mit Heimnetzgruppe

Der Zugriff auf administrative Freigaben wie C$ bereitet unter Windows 7 wie schon unter Vista so einige Probleme.
Zu aller erst muss der schon von Vista bekannte Registry Schlüssen gesetzt werden „HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Policies/System/LocalAccountTokenFilterPolicy = DWORD:0x1“.

Das nächste Problem entsteht durch die vorhandene Heimnetzgruppe in der man auf anderen Rechnern automatisch als HomeGroupUser$ angemeldet wird. Da man sich pro Rechner nur mit einen Benutzer gleichzeitig anmelden kann, erscheint auch bei Eingabe des richtigen Nutzers samt Kennwort immer Zugriff verweigert.

Abhilfe schafft hier die Einstellung: „Benutzerkonten und Kennwörter zum Herstellen von Verbindungen mit anderen Computern verwenden“ in den erweiterten Freigabeeinstellungen. Für Leute die ihr Benutzerkonto nicht mit einer Live-ID verknüpft haben sollte das ganze nach einen Neustart funktionieren.

Wer dies allerdings getan hab wird sehen das es auf dem anderen Rechner immer mit seiner Live-ID angemeldet wird statt mit seinem echten Nutzernamen. Dieses Problem lässt sich nur lösen indem man die Verknüpfung von Live-ID und Nutzerkonto wieder löst.

Howto: iTunes mit Multimediatasten steuern

Wer auch das Problem hat, dass iTunes damit es auf die Multimediatasten moderner Tastaturen reagiert, zwangsläufig im Vordergrund sein muss benötigt ein Plugin welches Abhilfe schafft. Das Plugin sorgt dafür das iTunes fortan auch auf globale Tastendrücke reagiert, wenn es z.B. minimiert ist oder nicht den Fokus besitzt.
Ursprünglich stammt das Plugin vom Nutzer localhost im aqua-soft Forum. Es handelt sich dabei um eine einzelne DLL Datei, die in das Plugin Verzeichnis von iTunes kopiert werden muss.

Bei XP z.B.: „C:\Programme\iTunes\Plug-Ins“
Bei Vista/7: „C:\Benutzer\\AppData\Roaming\Apple Computer\iTunes\iTunes Plug-ins“

Howto: Fix für Shader Compliation Error bei Shaun White Snowboarding

Wer auch das Problem hat, dass die Retail Version von Shaun White Snowboarding unter Windows 7/8 einen „shader compilation error“ beim Start meldet, kann das Problem ähnlich lösen, wie wenn dieses bei der Steam Version auftritt.
Man kopiert die Datei „EKShadersPC.BIN“ von „\ProgramData\Ubisoft\SWSnow“ nach „\Users\Public\Ubisoft\SWSnow“ und in der Ordner in dem das Spiel installiert ist.

Für die „ShaunWhiteSnowboardingGame.exe“ muss in den Eigenschaften der Kompatibiltätsmodus für Windows XP SP3 aktiviert werden.

p.s. Wer zusätzlich noch gerne eine höhere Auslösung hätte, findet die Einstellungen in der Registry unter „HKEY_CURRENT_USER\Software\Ubisoft\ShaunWhiteSnowboarding\1.0\Engine“ (ScreenResolutionHeight, ScreenResolutionWidth)