JavaScript Funktion mit dynamischen Parameter weiterleiten

Ich habe letzten eine Möglichkeit gesucht, für ein Event-System, Funktionen mit dynamischen Parametern weiterzuleiten. Meine vorherige Lösungen war, dass die Funktion mit einem Array aufgerufen wird, der die Parameter zusammenfasst. Mich hat es aber immer gestört, dass es auf die ersten Blick nicht möglich ist, zu sehen, welche Parameter die Funktion braucht/benutzt.

Das Beispiel ist vereinfacht und gekürzt:

var event = function() {
	var events = {};

	// Nimmt ein Event entgegen
	this.add = function(name, eventFunction) {
    	events[name] = eventFunction;
	};

	// Führt alle Events aus
	this.action = function(data) {
		for (var x in events) {
			events[x](data);
		}
	};
};

// Initialisiert das erste Event-System
var event1 = new event();
// Initialisiert das zweite Event-System
var event2 = new event();

// Fügt die Events hinzu
event1.add('event1', function(data) {
	alert('Hallo '+data['name']+', du bist '+data['year']+' Jahre alt');
};
event2.add('event2', function(data) {
	alert('Arbeiter: '+data['name']+'; Status: '+data['status']);
};

// Führt alle Events mit den Parametern aus
event1.action({'name' : 'Hans', 'year'   : 45});
event2.action({'name' : 'Hans', 'status' : 'Mitarbeiter'});

Wenn man mehrere verschiedene Event-Systeme hat, wird es schell unübersichtlich, welche Funktion welche Parameter im Array braucht. Gerade auch wenn man den Code vom Event-System nicht doppelt oder mehrfach haben möchte.

Die Lösung ist die JavaScript Funktion “.apply()“, diese ist mit der PHP-Funktion “call_user_func_array()” vergleichbar. Die .apply()-Funktion ruft eine Funktion auf und übergibt ein Array als Parameter-Liste. Die Parameter einer Funktion kann man in JavaScript mit der Variable “arguments” auslesen. Diese Variable wird automatisch von jeder Funktion definiert und beinhaltet ein Array mit den Parametern. Der Index des Arrays ist die Postion des Parameters beim Aufruf.

Mit diesem Wissen, können wir das oben genannte Beispiel verbessern:


var event = function() {
	var events = {};

	// Nimmt ein Event entgegen
	this.add = function(name, eventFunction) {
    	events[name] = eventFunction;
	};

	// Führt alle Events aus
	this.action = function() {
		for (var x in events) {
			events[x].apply(null, arguments);
		}
	};
};

// Initialisiert das erste Event-System
var event1 = new event();
// Initialisiert das zweite Event-System
var event2 = new event();

// Fügt die Events hinzu
event1.add('event1', function(name, year) {
	alert('Hallo '+name+', du bist '+year+' Jahre alt');
};
event2.add('event2', function(name, status) {
	alert('Arbeiter: '+name+'; Status: '+status);
};

// Führt alle Events mit den Parametern aus
event1.action('Hans', 45);
event2.action('Hans', 'Mitarbeiter');

Mit dieser kleinen Änderung  ist der Code einfacherer zu lesen bzw. zu verstehen und man behält bei größeren Projekten besser die Übersicht.

Telecomix: Der arabische Frühling…

“Der arabische Frühling … und was bei uns angekommen ist”

Anschau-Befehl :)

(via)

nginx, MySQL und PHP-FPM auf Mac OS X Lion installieren

In dieser kleinen Anleitung möchte ich euch zeigen, wie ihr schnell und einfach auf dem Mac OS X Lion den Webserver nginx, den Datenbankserver MySQL, den PHP-Manager PHP-FPM und zusätzlich zum Abschluss noch phpmyadmin installieren könnt.

Information

Die Versionsnummer der einzelnen Programm haben sich bestimmt geändert und muss entsprechend geändert werden!

Die Benutzung der Anleitung geschieht auf eigende Gefahr !!!

Vorbereitung

Bevor wir los legen, müssen wir noch einige Tools installieren:

Installation von Xcode

Im AppStore müssen wir uns Xcode herunterladen und installieren. Dafür braucht ihr eine Apple ID! Nach dem Xcode installiert ist, müssen wir unter den Einstellungen ( Xcode -> Preferences… ) im Reiter Downloads die “Command Line Tools” installieren.

Ab jetzt bewegen wir uns nur noch im Terminal…

Installation von Homebrew

Nach der Installation von Xcode “Command Line Tools”, können wir den Paket-Manager Homebrew installieren. Die Installation ist easy, einfach den folgenden Befehl in der Terminal.app ausführen:


/usr/bin/ruby -e "$(/usr/bin/curl -fsSL https://raw.github.com/mxcl/homebrew/master/Library/Contributions/install_homebrew.rb)"

Continue reading

CSS Weiche für Bildschirmauflösung

Durch CSS-Weichen kann entsprechend der Auflösung vom Browser/Bildschirm bestimmten CSS-Code benutzt werden oder auch nicht. Der Vorteil gegenüber JavaScript ist, das dies auch funktioniert, wenn JavaScript deaktiviert ist. Dieser Beitrag ist eher eine Dokumentation für mich.

Beispiele für die Verwendung von CSS-Weichen.

@media all and (orientation:portrait) {
	/* Hier der allgemeine CSS-Code für Geräte im Portrait Modus */
}

@media all and (orientation:landscape) {
	/* Hier der allgemeine CSS-Code für Geräte im Landscape Modus */
}

@media only screen and (min-device-width: 320px) and (max-device-width: 480px) {
	/* Hier der CSS Code für Smartphones wie z.B. iPhone, Android, WebOS, Windows Phone 7 Geräte o.Ä. */
}

/* Computer und Tablet CSS */
@media only screen and (min-device-width: 800px) {
	/* Hier der CSS-Code für Tablets und Computer ab einer mindest Bildschirm Weite von 800 Pixeln */
}

@media only screen and (device-width: 768px) {
	/* Hier der CSS-Code speziell für das iPad */
}

@media only screen and (device-width: 768px) and (orientation:portrait) {
	/* Hier der CSS-Code speziell für das iPad im Portrait Modus */
}

GeekTool einrichten

Ich benutzte schon lange GeekTool auf dem Desktop, um mich unter anderen über das System zu informieren. Da es im Internet nicht einfach ist GeekTool-Skripte zu finden, wollte ich meine veröffentlichen.

Die aktuellen Version der Skripte liegen auf github “GeekTool-Script-Collection”. Zusätzlich liegen dort noch die Skript für das aktuelle Wetter und die Daten vom aktuellen Lied aus iTunes.

System

Der folgende Code-Schnippsel zeigt allgemeine Informationen über das System an:

  • Laufzeit
  • Anzahl der eingeloggten Benutzer
  • Verteilung des Arbeitsspeicher (RAM)
  • Load Average
  • Zustand des Akkus

Linkpool [2]

Slides über mod_rewrite (Navigieren in den Slides mit Space, Pfeilentasten)

Vortrag per HTML5 erstellen

Browser auf HTML5/CSS3 Fähigkeit prüfen

Icons-Library

HTML5 Canvas reference

Bilder/PDF von Webseiten erstellen

Fröhliche Weihnachten

Ich wünsche allen Lesern ein schönes und besinnliches Weihnachtsfest und ein guten Rutsch ins neue Jahr 2012.

Kjell

Canon vs. Nikon

Canon vs. Nikon – Der ewige Kampf in einer Counter-Strike Umgebung.

(via)

Linkpool [1]

Einführung in Canvas

HTML5 Canvas.getContext(“2d”) reference

HTML5 Canvas Tutorials

HTML5 Canvas Particle Animation

Liste mit Beispiele was mit Canvas möglich ist

CSS3 Secrets

PHPStorm 3.0 veröffentlicht

Gestern kam die Version 3.0 von JetBrains PHPStorm heraus. PHPStorm ist meiner Meinung die beste IDE für PHP. Ich habe mit Eclipse und Netbeans entwickelt und war immer mit einigen Sachen unglücklich. Mit PHPStorm kann ich effektive mein Workflow ausnutzen.

Hier der Link zur Download Seite.