PHP Remote Debugging mit XDebug

PHP Remote Debugging mit XDebug

Serverseitige Konfiguration

Schritt 1: XDebug installieren

apt-get install php5-xdebug

Schritt 2: php.ini / xdebug.ini editieren
zend_extension      = /usr/lib/php5/20090626/xdebug.so
xdebug.remote_enable = On
xdebug.remote_port   = 9000
xdebug.remote_log    = <Pfad zur log-Datei auf dem Server>
xdebug.remote_host   = <IP auf dem die IDE laufen soll>

Den richtigen Pfad zur zend_extension kann der erzeugten xdebug.ini aus /etc/php5/conf.d/ entnommen werden. Diese Datei lässt sich nun auch mit den oben beschriebenen Einträgen erweitern.

Werden die php.ini’s durch Froxlor pro Seite verwaltet, können die Einstellungen natürlich auch dort vorgenommen werden. Aber denk dran: Froxlor übernimmt die Einstellungen per Cronjob. Ein Server Neustart bringt an der Stelle also nichts, um mal eben schnell die Einstellungen zu testen.

Soll das Remote Debugging nicht nur für einen einzelnen Benutzer zugänglich sein (remote_host), sondern auch für mehrere, benötigt ihr noch folgenden Eintrag in der .ini:

xdebug.remote_connect_back = On

Der remote_host wird dann ignoriert und es werden alle Hosts zugelassen (Achtung: Sicherheit!)

Schritt 3: Port-Freigabe am Router

Etwas das ich sehr gerne vergesse und erst viel zu spät dran denke: Den verdammten Port (hier: 9000/tcp) beim Router freigeben und auf den Rechner mit der IDE weiterzuleiten.

Debugging

Im Browser

Um das Debugging im Browser zu aktivieren, empfiehlt sich ein Plugin/Addon für den jeweilig benutzten Browser zu installieren. Für Firefox z.B. das  Addon “The easiest Xdebug“. Um nun eine Debug-Session zu ermöglichen, muss der kleine grüne Käfer des Addons in der Toolbar angeklickt werden.

In der IDE

In der Toolbar von beispielsweise PhpStorm, befindet sich ein kleiner Telefonhörer, wenn dieser aktiviert wird, oder der längere Weg über Run -> Start Listening for PHP Debug Connections gewählt wird, horcht die IDE auf den eingestellen Port (Standard wieder 9000) und hält an den Breakpoints an, wenn diese über den Browser getriggert werden.

Hilfreiche Quellen

* http://xdebug.org/docs/remote
* http://mimi.kaktusteam.de/blog-posts/2012/01/remote-debugging-mit-phpstorm-und-xdebug/

https://www.youtube.com/watch?v=LUTolQw8K9A

Probleme mit Java Programmen im Vollbildmodus unter Gnome3

Java Programme unter Gnome 3 scheinen Probleme zu haben, wenn sie im Vollbildmodus laufen. Das Problem macht sich so bemerkbar, dass Menüs aller Art nicht mehr richtig bedienbar sind mit der Maus.

Die meisten Programme nerven mich, wenn sie nicht im Vollbildmodus sind. Deswegen ist maximieren auch das Erste, was ich nach dem Starten von einem Programm mache. Aus diesem Grund hat es recht lange gedauert, bis ich rausgefunden hatte, dass das Problem scheinbar nicht an Java liegt. Denn die Probleme treten sowohl mit dem openJDK, als auch mit Oracle Java auf.

Zum Glück laufen die Programme nicht maximiert alle super. Also, wer ebenfalls Probleme hat und bereits stundenlang versucht die Programme mit anderen Javaversionen und anderen Einstellungen zum laufen zu bringen -> einfach mal den Vollbildmodus verlassen.

(Konfiguration: Gnome 3.6.2 / Ubuntu 12.10)

E-Mail-Verschlüsselung mit Thunderbird und S/MIME

smime_21_symbole

E-Mail-Verschlüsselung mit Thunderbird und S/MIME


Vorwort

Anlässlich eines neuen c’t Artikels über Mailverschlüsselung mit S/MIME (c’t Ausgabe 18 [13.08.2012]) habe ich hier ein kleines Bildertutorial zusammengestellt. Dabei wird zuerst ein Zertifikat von Trustcenter.de beantragt und dieses dann anschließend im Thunderbird eingebunden. Danach können E-Mails unterschrieben und entschlüsselt werden.

Vor einiger Zeit hatte ich mich schon mal mit diesem Thema beschäftigt. Damals hatte ich meine Mails aber per PGP verschlüsselt. Das war auch “pretty good” aber im Vergleich mit S/MIME doch mit mehr Aufwand verbunden (zusätzliche Programme und Plugins). Nach einer Neuinstallation meines PCs waren dann erst mal andere Dinge wichtiger, so dass ich die Verschlüsselung leider wieder aus den Augen verloren habe. Der c’t Artikel hat mich wieder auf den Boden der Tatsachen zurück geholt:

  • E-Mail -> Meistgenutztes Kommunikationsmedium -> von Grund auf unsicher
  • Google Mail -> maschinelle Durchforstung der Mailbox -> trotzdem erfolgreichster Mail-Service
  • Privatleute müssen mehr Initiative zeigen -> Nutzung von s/mime bedeutet keinen großen Aufwand

Da ich auch hauptsächlich Google Mail nutze und damit auch sehr zufrieden bin, möchte ich nun auch wieder mit gutem Beispiel vorangehen und Google das Mitlesen verbieten. Sorry Google, die Betreffzeile muss dir von nun an genügen Shame

Für Hintergrundinformationen zu S/MIME möchte ich direkt auf den guten Artikel im Thunderbird-Wiki verweisen, der evtl. auch bei auftretenden Problemen weiterhelfen kann. Für den Unterschied zwischen PGP und S/MIME empfehle ich diesen Artikel.

» Weiterlesen..

Microtek ScanMaker 5950: Hardware Error

scanMaker5950mini

Der ScanMaker 5950 Microtek ist ein günstiger Dokumentenscanner, der bei mir schon sehr lange seinen Dienst tut. Seit ein paar Tagen verweigerte er diesen aber mit der Meldung: Hardware Error.

Genauer Tathergang war so, dass bei der Benutzung des Dokumenteneinzugs nur die erste Seite gescannt wurde. Bei der zweiten Seite wurde dann nach geraumer Zeit der Scanvorgang abgebrochen und die Fehlermeldung “code: -3, scanner hardware error” angezeigt.

Da ich keine Lösung per Google finden konnte, möchte ich nun hier kurz erläutern, wie ich das Problem wieder in den Griff bekommen habe.

Das Bild zeigt den ScanMaker mit geöffneter Haube. Der Pfeil markiert das Problem. Eine der Rollen hatte sich gelöst. Das Papier konnte dadurch wahrscheinlich nicht mehr einheitlich eingezogen werden, was den Scanner seinen Dienst verweigern ließ. Dabei wurde das Papier gar nicht so schräg eingezogen, als dass mir das sofort aufgefallen wäre.

Um die Rolle wieder zu befestigen, muss der Plastikkasten in dem die Rolle per Feder gehalten wird, unten abgeschraubt werden. Dabei kann man dann auch feststellen, dass es sich hier um extrem billiges und brüchiges Plastik handelt. Mehrere Plastikteile sind angeknackst oder auch schon abgebrochen, obwohl es das Gerät keinen Erschütterungen ausgesetzt war. Die Feder die die Rolle hält, habe ich nun einfach so wieder eingesetzt (längliche Metallbeine an der Feder einfach durch die Löcher fädeln und unterharken) ohne die speziellen Haltevorrichtungen, da diese abgebrochen waren. Die Rolle sitzt dadurch strammer als die Anderen, was aber nicht zu stören scheint. Der Scanner arbeitet jetzt jedenfalls wieder normal.

javax.servlet.ServletException: Verwalteter Bean … kann nicht erstellt werden.

Wieder eine Exception bei der die Lösung recht einfach sein kann. In meinem Fall lag es einfach daran, dass bei der betroffenen Bean nicht alle Setter und Getter vorhanden waren.

DefinitionException

Tritt folgende Exception schon während des deployens auf,  liegt es wahrscheinlich am fehlenden implements Serializable bei einer Bean.

Caused by: org.jboss.weld.exceptions.DefinitionException: WELD-000072 Managed bean declaring a passivating scope must be passivation capable. 

JSF mit Primefaces und Eclipse

primefaces

Damit JSF Seiten hübscher aussehen, gibt es viele Frameworks. Ich bin nun erstmal bei den Primefaces hängen geblieben.

Leider hatte ich das Problem, obwohl ich die primefaces-3.3.1.jar in den Buildpath von Eclipse aufgenommen hatte, dass die Primefaces Komponenten (z.B. der Button) nicht angezeigt wurden.

Die Lösung ist sehr einfach. Die primefaces-3.3.1.jar muss ebenfalls in den Ordner  WebContent/WEB-INF/lib kopiert werden.

Exception beim Deployen mit Eclipse und JBoss

Treten folgende Exceptions beim Deployen eine Projektes auf, dann hat bei mir die Lösung weiter unten geholfen. Ausgangssituation ist ein Eclipse Indigo mit JBoss AS 7.1.

Caused by: org.hibernate.HibernateException: Connection cannot be null when 'hibernate.dialect' not set
.....
Caused by: javax.persistence.PersistenceException: [PersistenceUnit: shop1] Unable to build EntityManagerFactory

 

Lösung: 

Die persistence.xml im Verzeichnis META-INF muss im selben Package zu finden sein, in dem auch die Entities liegen.

Genaueres unter: http://docs.jboss.org/jbossas/docs/Server_Configuration_Guide/4/html/ch01s02s01.html

Innenleben eines Nano USB-Sticks

dlock

Ich hatte heute vor aus einem defekten Nano USB Stick einem Adapter zum Aufladen eines Headsets zu basteln. Der original Adapter ist leider nicht mehr auffindbar und es gibt ihn auch nicht als Ersatzteil.

Gespannt wo der Nano Stick seinen erwartungsgemäß kleinen Speicherchip sitzen hat, habe ich also das Gehäuse geöffnet. Als ich das dünne schwarze Ende einer  Micro SD sah, habe ich nicht schlecht gestaunt. Im Prinzip besteht der Stick also aus einer kleinen Kartenleser Platine und einer Micro SD Karte.

Das Tolle ist, die Speicherkarte funktioniert noch. Das nächste Mal also defekte Nano Sticks nicht direkt wegwerfen, sondern demontieren!

Tipp: Ich habe um das Gehäuse zu öffnen, das Plastikende in einen kleinen Schraubstock eingeklemmt und gedreht bis es (ziemlich) sauber gebrochen ist.


Nachtrag:
Der Adapter sieht in übrigen jetzt so aus:

Wie immer wenn ich etwas bastle: eine Augenweide. Leider hatte ich keine anständigen Kontakte, so dass ein Gummiband den nötigen Kontakt sicherstellen  muss.

JavaEE / Eclipse: package cannot be resolved

Da ich jetzt schon bei einigen Java Enterprise Tutorials darüber gestolpert bin möchte ich kurz etwas zu dem Problem schreiben, wenn Enterprise Abhängigkeiten nicht aufgelöst werden können.

Ich benutze Eclipse JEE Indigo mit dem Plugin “GlassFish 3.1 Application Server runtime”. Bei der Projekterstellung wählt man dabei üblicherweise die Runtime für das Projekt aus. Also den GlassFish in meinem Fall. Jetzt sollte man meinen, das Eclipse weiß wo es nach den Enterprise Sachen zu suchen hat. Leider ist das anscheint wohl nicht immer der Fall.

Hier ist also das Problem, dass die Annotation “@Stateless” nicht bekannt ist und Eclipse auch nichts Vorzuschlagen weiß. Wenn der Import bekannt sein sollte, z.B. aus dem Tutorial dann kann man ihn natürlich einfach selber hinschreiben. Solange Eclipse aber nicht weiß wo es zu suchen hat, hilft das aber auch nicht.

Abhilfe schafft hier ein Rechtsklick auf das aktuelle Projekt und dann Properties. Im Filter der Properties gibt man nun “Facets” ein und erhält den gesuchten Eintrag “Project Facets”.

Hier muss nun im rechten Bereich unter Runtime nochmal die Runtime ausgewählt werden. Danach findet Eclipse auch die fehlenden Packages. Ein netter Shortcut den ich dabei neu gelernt habe ist Strg+Shift+O. Damit fügt Eclipse automatisch alle fehlende imports hinzu (wenn es welche findet). Auch nützlich für Debugausgaben ist das Shortcut “syso” + Strg+Leertaste. Aus syso wird dann ein System.out.println();