wildlife

Archive for PHP / Javascript

node.js – Probleme mit cluster modul unter Ubuntu

// May 4th, 2013 // 10 Comments » // IT, Node.js, PHP / Javascript

Vor ca. einer Woche habe ich angefangen mit Node.js zu arbeiten. Grund hierfür ist, dass ich für das eine oder andere Projekt Daten in Echtzeit übertragen möchte. Da die Datenübertragung, wie z.B. bei PHP bzw. Web 2.0 Projekten, nicht nur vom Client aus initiiert werden sondern der Server diese beim Aktualisieren der Datensätze zum Client pushen soll, bin ich auf Socket.io gestoßen. Hier wird u.a. eine eigene Websocket-Implementierung verwendet, welche bidirektionale Kommunikation zwischen Server / Backend und Client ermöglicht. Dies funktioniert sogar mit nahezu allen Browsern, da auf ältere / alternative Tranport-Mechanismen, wie z.B. gewöhnliche Websockets, flashsocket, jsonp-polling, etc., automatisch ausgewichen wird.

Da diese Projekte voraussichtlich größer und somit eine vermeintlich hohe Anzahl an parallelen Socket-Verbindungen bedienen müssen, habe ich mir das Cluster-Modul von Node.js angeschaut und in meine Projekte implementiert. Unter Windows, für welches eine entsprechende Portierung vorliegt, lief meine app.js Problemlos. Nach dem Deploy auf ein Staging-System, konnte die app.js nicht mehr gestartet werden, da "cluster.worker" scheinbar nicht mehr definiert war. Auch Versuche mit anderen Cluster-Modulen schlugen fehl.

Nachdem ich die Modul-Versionen unter Windows und Linux verglichen habe und keine Unterschiede feststellen konnte, habe ich im #node.js Channel im Freenode-IRC Hilfe gesucht. Nachdem sich einige den Code angeschaut haben (vielen Dank insbesondere an geNAZt (Google+ / Twitter), jedoch auch keine gravierenden Fehler gefunden haben, bin ich vorhin auf den Fehler gest0ßen:

Während ich unter Windows mittels dem, auf der Website bereitgestellten Installer, die neueste Version (0.10.5) von Node.js installiert habe, war auf dem Ubuntu noch eine Uralt-Version installiert. Dies liegt daran, dass in den normalen APT-Repositories lediglich das Paket nodejs-dev in der Version 0.6.12 vorhanden ist, welche nicht das neueste Cluster-Modul beinhaltet. Um die neueste Version zu erhalten, müssen zuerst folgende Schritte ausgeführt werden:

  • python-software-properties ist für den Befehl add-apt-repository erforderlich und ist scheinbar standardmäßig nicht installiert
  • anschließend wird das Repository ppa:chris-lea/node.js hinzugefügt und
  • ein Update der Repositories durchgeführt
  • zuletzt installiert man dann das Paket nodejs, welches nun in der neuesten Version (0.10.5) vorliegt.

2013-05-04_15-25-25

Nach dem Starten der App und dem Aufbau einer Socket-Verbindung vom Client / Browser, wird nun die ID des entsprechenden Workers korrekt angezeigt.

‘undefined’ nach form submit mit Code Igniter und jQuery mobile

// December 29th, 2012 // 1 Comment » // IT, PHP / Javascript, Tutorials

Aktuell arbeite ich an einem neuen Webprojekt, bei welchem ich zum ersten Mal mit dem PHP Framework Code Igniter und jQuery Mobile arbeite. Nach einigen Anlaufschwierigkeiten, komme ich nun recht gut voran, wobei ich nur jedem empfehlen kann, nicht mit zwei unbekannten Sprachen / Frameworks zu starten. Ein Problem hat mir jedoch heute den letzten Nerv geraubt. Um es selbst demnächst nochmal nachschlagen zu können und auch andere von meinen Fehler profitieren zu lassen, hier das Problem und die entsprechende Lösung:

In meinem Controller habe ich eine Methode signup, welche bei dem ersten Aufruf lediglich die view des Registrierungsformulars lädt und anzeigt. Im header view werden lediglich die jQuery Mobile js Sources geladen, der meta viewport und das Charset für die Seite bestimmt. Zu Beginn habe ich, wie von Code Igniter gewohnt, das Formular über <?php echo form_open('user/signup'); ?> geöffnet und dann mittels jQuery Mobile das Formular erstellt. Mein Problem war nun, dass nach dem Absenden des Formulars, der Übergabe der Post-Werte an die signup Methode des Controllers und der Formular-Validierung, ich lediglich ein 'undefined' angezeigt bekommen habe. Die Suche nach der Ursache hat mich fast den halben Nachmittag gekostet. Nach einiger Recherche über Google und viele 'nicht-weiterhelfende' Forenbeiträge später, stieß ich zufällig auf ein Problem in Verbindung mit Ajax.

Hier fiel mir dann auf, dass man bei jQuery Mobile Formularen explizit angeben muss, wenn ein Formular _nicht_ über Ajax gesendet werden soll; und hier war der Fehler. Über data-ajax="false" im Form-Tag kann dieses Verhalten deaktiviert werden. Bei Code Igniter kann dies über den zweiten Parameter der form_open() Funktion als Array mitgegeben werden werden, so dass das dann wie folgt aussieht: <?php echo form_open('user/signup', array('data-ajax' => 'false')); ?>. Die entsprechenden Ausschnitte aus Controller, Model und View findet Ihr im folgenden Gist: (more…)

Anzeigen von Post-Parametern über Javascript vor dem Absenden des Formulars über Submit

// November 29th, 2012 // 5 Comments » // IT, PHP / Javascript, Tutorials

Vor einiger Zeit habe ich angefangen, mich mit PHP und Javascript zu beschäftigen. Da ich für eine interne Statistikseite eine Authentifizierung für Benutzer einbauen musste, benötigte ich natürlich auch ein Login-Formular. Da Benutzerdaten wie Benutzername und Passwort niemals über GET übertragen werden sollten, da die Parameter über die Adressleiste des Browsers im Klartext ersichtlich sind, musste ich diese als POST Parameter übergeben. Nachteil hierbei ist, dass man die übergebenen Werte natürlich auch dann nicht sieht, wenn man die Seite / das Script debuggen muss.

Hierbei hilft dieses kleine Javascript-Snippet, welches (temporär!) auf der Seite eingefügt werden kann, um die Parameter des Formulars vor dem Senden desselben anzuzeigen. Durch das 'return false;', wird der submit-Vorgang abgebrochen.

View the code on Gist.