Auf der Suche nach ein paar C#/CLR Interna bin ich auf die Webseite „C# in Depth“ gestoßen, wobei man sagen muss das es sich dabei vorrangig um ein Buch handelt bzw. um die Webseite zum gleichnamigen Buch handelt. Aber auch die Webseite gibt einige sehr interessante Informationen von sich, welche man vor allem in der „Articles“ Sektion findet. So lege ich jedem, der sich für das Thema interessiert, den Artikel Delegates und Events ans Herz. Es gibt dort definitiv die eine oder andere Erleuchtung ;) Die Webseite ist dabei unter http://csharpindepth.com zu finden.
MooTools und benutzerdefinierte Events
Bei MooTools handelt es sich um ein Framework mit welchem man sehr schön Klassen basierte Strukturen in JavaScript abbilden kann. Bei der Definition von benutzerdefinierten Events ist die Dokumentation leider etwas dünn, so das ich dort etwas probieren musste, bis ich zum richtigen Ergebnis gekommen bin.
Gegeben sei dabei ein Projekt mit einer „index.html“ Datei sowie der JavaScript Datei „explosive.js“ welche die Klasse „Explosive“ enthält. Die Klasse sieht dabei im Quelltext so aus:
var Explosive = new Class({
Implements: [Events],
tntequivalent: 0,
//Constructor
initialize: function(equivalent) {
this.tntequivalent = equivalent;
},
//Methods
detonate: function(){
this.fireEvent('explode');
},
detonateWithInfo: function(){
this.fireEvent('explode', this.tntequivalent);
}
});
In dieser Klasse gibt es die Eigenschaft „tntequivalent“ welche die Sprengkraft unser Bombe definiert und im Konstruktor gesetzt wird. Die Funktionen „detonate“ und „detonateWithInfo“ zünden die Bombe und senden das Event „explode“ wahlweise mit der Informationen über die Sprengkraft.
Die dazu passende „index.html“ sieht dabei so aus:
<!DOCTYPE html>
<html>
<head>
<title>Mootools Event Test</title>
<meta charset="utf-8" />
<script type="text/javascript" src="mootools-core-1.4.5-full-nocompat.js"></script>
<script type="text/javascript" src="explosive.js"></script>
</head>
<body>
<script type="text/javascript">
function onExplode(object)
{
if(object==null)
{
alert("Bomb is exploded.");
}
else
{
alert("Bomb is exploded, with " + object + " tons of TNT equivalent.");
}
}
var bomb = new Explosive(100);
bomb.addEvent('explode', onExplode);
</script>
<form>
<input type="button" value="Detonate bomb" onClick="bomb.detonate();">
<input type="button" value="Detonate bomb with info" onClick="bomb.detonateWithInfo();">
</form>
</body>
</html>
Hier wird im JavaScript-Bereich der Klasse eine Funktion „onExplode“ angelegt, welche das Event am Ende entgegennehmen soll. Darunter wird eine Instanz der Klasse „Explosive“ mit dem Namen „bomb“ angelegt. Dieser Instanz sagen wir das dass Event „explode“ an die Funktion „onExplode“ weitergereicht werden soll.
Nun werden noch zwei Buttons definiert, welche die auslösenden Funktionen aufrufen. Einmal wird die Funktion „onExplode“ mit einem Parameter und einmal ohne aufgerufen. In diesem Parameter steckt in diesem Fall die Sprengkraft der Bombe, so das diese mit ausgegeben werden kann. Und schon ist man mit seinem ersten Event fertig.
Weitere Informationen gibt es unter:
http://de.wikipedia.org/wiki/MooTools
Testbasierte Entwicklung unter JavaScript
Wer testbasierte unter JavaScript betreiben möchte, stößt da auf eine Menge Frameworks wie z.B. Jasmine, welches für sich für „Behavior Driven Development“ eignet. Persönlich suchte ich allerdings ein Framework für ganz normales Unit-Testing aller xUnit.
Schlussendlich bin ich bei „Enhance JS“ gelandet. Mit dem Framework ist es möglich schnell eigene Tests zu schreiben, um die Funktionsfähigkeit der entsprechenen JavaScript Anwendung zu testen. Bei JavaScript ist dies bei größeren Projekten alleine schon wegen der dynamischen Typisierung von Vorteil.
Der Quelltext, des unter der Apache Lizenz stehenden Frameworks, ist dabei auf Github zu finden. Die offizielle Seite kann unter http://www.enhance-js.com besucht werden.
Weitere Informationen gibt es unter:
http://de.wikipedia.org/wiki/XUnit
http://de.wikipedia.org/wiki/Behavior_Driven_Development
http://en.wikipedia.org/wiki/List_of_unit_testing_frameworks
sprintf für JavaScript
Eine der ersten Sachen welche ich in JavaScript vermisst habe, ist eine „sprintf“ bzw. eine „String.Format“ Methode. Aber JavaScript wäre nicht JavaScript wenn es dafür keine Lösung gäbe. Die Lösung hört in diesem Fall auf den Namen „javascript-sprintf“ und kann unter http://www.diveintojavascript.com/projects/javascript-sprintf bezogen werden. So sieht das ganze dann im Quelltext aus:
var tmp="123456";
sprintf('Ausgabe ist %s.', tmp);
In diesem Fall wird „Ausgabe ist 123456.“ ausgegeben. Neben dieser Möglichkeit gibt es noch einige andere Funktionen in der kleinen Bibliothek wie z.B. „vsprintf“ mit welcher auch Arrays ausgegeben werden können, welche in der Dokumentation auf der Seite erklärt werden.
Websocket Server für .NET/Mono
Möchte man mit Websockets unter .NET/Mono arbeiten, so sollte man sich die entsprechenden Biblitoheken anschauen. Dabei gibt es die Auswahl zwischen einigen Bibliotheken:
- Fleck (https://github.com/statianzo/Fleck/)
- SuperWebSocket (http://superwebsocket.codeplex.com/)
- Alchemy Websockets (http://alchemywebsockets.net/)
- Nugget (http://nugget.codeplex.com/)
- XSockets (http://xsockets.net/)
Bei den jeweiligen Bibliotheken muss man darauf achten, das die gewählte Bibliothek den entsprechenden Websocket Standard (den es mittlerweile in 17 Revisionen gibt) unterstützt. Ansonsten funktionieren die Bibliotheken im großen und ganzen ähnlich, so das es sicherlich auch eine Geschmacksfrage ist für welche Bibliothek man sich entscheidet.
Weitere Informationen gibt es unter:
http://tools.ietf.org/html/rfc6455
http://de.wikipedia.org/wiki/WebSockets
http://en.wikipedia.org/wiki/WebSocket
