Johannes Mitlmeier

Als Webentwickler ist es meine Aufgabe die verfügbaren Techniken so zu verbinden, dass dabei gut bedienbare Produkte entstehen, die die Aufgabe lösen, die der Kunde an uns herangetragen hat.

Screenshot von RESTClient beim Debugging von POST-Formularen

POST-Formulare mit Firefox-Addon testen [Toolbox]

  • Blog, Code

Bei der Entwicklung individueller Web-Applikationen gehören Eingabe-Formulare selbstverständlich dazu. An allen Ecken und Enden sollen Benutzer Daten eingeben und Einstellungen anpassen können. Viele dieser Formulare werden auf HTTP-Protokollebene als POST-Requests abgebildet.

Solche Requests lassen sich im Browser standardmäßig zwar wiederholen (F5 bzw. Strg/Cmd+R), aber schlecht schnell anpassen. Hilfe leistet uns in solchen Fällen ein kleines Firefox-Addon.

Weiterlesen »POST-Formulare mit Firefox-Addon testen [Toolbox]

Fehler: Maximale PHP-Laufzeit überschritten

CakePHP: debug() für große oder komplexe Objekte

  • Blog, Code
Fehler: Maximale PHP-Laufzeit überschritten

Maximale Skriptlaufzeit überschritten

CakePHP bringt die globale Funktion debug() mit, die sich bequem überall nutzen lässt, um beliebige Daten zu debuggen.
Bei Objekten, die viele tief geschachtelte Daten beinhalten, versucht debug() dann mit großem Eifer alle Daten darzustellen, die beispielsweise an einem Controller oder einem Model hängen. Je nach der tatsächlichen Datenmenge und der maximalen Skriptlaufzeit kann das dazu führen, dass das Skript im Ganzen beendet wird und der Programmablauf nicht ordentlich analysiert werden kann.

Weiterlesen »CakePHP: debug() für große oder komplexe Objekte

Suchergebnisse mit ack

ack statt grep für Code-Suche [mit CakePHP-Config]

  • Blog, Code

Für viele Entwickler ist grep unter Unix-artigen Betriebssystemen das Tool der Wahl, um Texte in Dateien zu suchen. Was liegt näher als es auch zu nutzen, um sich einen Überblick über Quellcode zu verschaffen?
Prinzipiell kann grep diese Aufgabe natürlich auch erfüllen, schließlich ist Quellcode auch nur eine Form von Textdateien. Es gibt aber mit ack ein Programm, das genau auf den Anwendungszweck Code-Suche optimiert ist.

Ack liefert in vielen Fällen einen sehr guten Überblick über fremden und eigenen Code und ermöglicht auch ohne eine ausgewachsene IDE Antworten auf Fragen wie: “Wo wird eine Funktion aufgerufen, die ich gerade bearbeiten möchte?” oder “An welcher Stelle wird dieser Text in ein Template geladen oder ausgegeben?”

Weiterlesen »ack statt grep für Code-Suche [mit CakePHP-Config]

Segmentation Fault in libpthread mit Apache2 und APC

  • Blog, Code

Ein Segmentation Fault beim Start von Apache kann sicher viele Ursachen haben. Eine davon ist eine unscheinbare Änderung im APC-Modul, die den Apache beim Start so sehr behindert, dass er den einen Segmentation Fault wie diesen hier erleidet und nicht hochfährt:

apache2[2938]: segfault at f ip 00007ff081777854 sp 00007fff1f579a70 error 6 in libpthread-2.11.3.so[7ff08176f000+17000]

Weiterlesen »Segmentation Fault in libpthread mit Apache2 und APC

MySQL: InnoDB-Engine nicht verfügbar

  • Blog, Code

Die InnoDB-Engine für MySQL bietet gegenüber MyISAM einige Vorteile wie Transactions, feineres Locking und harte Fremdschlüsselbeziehungen.
Deshalb setzen wir InnoDB gerne für unsere Projekte ein, beispielsweise für Webapplikationen auf Basis von CakePHP.

Es kann das Problem auftreten, dass sich in einer Datenbank nur MyISAM-Tabellen anlegen lassen, aber keine InnoDB-basierten. Prüft man die verfügbaren Engines im mysql-Prompt mit dem Befehl SHOW ENGINE;, dann erhält man in etwa folgende Ausgabe:

show-engines

Weiterlesen »MySQL: InnoDB-Engine nicht verfügbar

Git Commit-Autor setzen

  • Blog, Code

Bei unseren Projekten nutzen wir gerne Git als Werkzeug, um unsere Codebasis zu versionieren und gemeinsam daran zu entwickeln.

Es gibt aber auch Fälle, in denen Git bei uns ausschließlich zur Versionierung dient, zum Beispiel für Server-Konfigurationen. Damit können wir bei Problemen, die durch Änderungen hervorgerufen wurden, schnell auf vorherige Stände zurückschalten. Das hilft uns Ausfallzeiten zu minimieren, denn so ist nicht unbedingt das Einspielen eines vollständigen Backups nötig.

Für ein solches Git-Repository bietet es sich an, Commits direkt auf dem Server zu machen. Allerdings führt das dazu, dass jeder Entwickler unter dem gleichen Autor Commits erstellt (solange sich alle den gleichen Linux-User teilen). Solche Commits sind später schlecht nachzuverfolgen. Angenehmerweise bietet Git hierfür Abhilfe.Weiterlesen »Git Commit-Autor setzen

CakePHP: Fehlende Strings bei i18n extract (Übersetzung)

  • Blog, Code

CakePHP bietet die Möglichkeit Anwendungen mit überschaubarem Aufwand zu übersetzen, indem man sich .pot-Dateien generieren lässt. Diese lassen sich dann mit Standardwerkzeugen wie PoEdit verwenden, um die .po-Dateien mit den jeweiligen Übersetzungen zu erzeugen.

Um alle verwendeten Zeichenketten innerhalb eines Projektes in die entsprechenden .pot-Dateien zu bringen, bietet CakePHP eine eigene Shell an, die sich wie folgt aus dem app-Verzeichnis heraus aufrufen lässt:

Weiterlesen »CakePHP: Fehlende Strings bei i18n extract (Übersetzung)

Mixed Content und das Schloss-Symbol

  • Blog, Code

Mixed Content ist einer der möglichen Gründe, warum das teuer eingekaufte SSL-Zertifikat nicht dazu führt, dass eine Webseite in den großen Browsern auch mit dem typischen Schloss-Symbol angezeigt wird. Von vielen Seiten wir den Usern eingeschärft, genau auf dieses Schloss zu achten, um eine sicher verschlüsselte Übertragung ihrer Daten im Internet zu gewährleisten. Die Browserhersteller wiederum versuchen alle Risiken einzudämmen, die dazu führen könnten, dass die gefühlte Sicherheit durch das Schloss untergraben werden könnte. Genau deshalb ist Mixed Content ein Problem.

Firefox im Vergleich

Unterschiedliche Darstellung der Verbindungssicherheit in Firefox. Oben: Ohne Mixed Content, unten: Mit Mixed Content, daher kein Schloss-Symbol

Weiterlesen »Mixed Content und das Schloss-Symbol