Analyse eines Javascript Poker Hand Evaluators

Poker in JS, Bits und BytesNachdem wir uns dem Thema Poker schon in einigen C#-Tutorials (siehe 1, 2, 3, 4) angenommen haben, wollen wir heute den Blick in Richtung Javascript lenken. Und wenn ich sage Javascript, dann meine ich das auch so. Bibliotheken wie jQuery (die dieser Tage viel zu oft fälschlicherweise mit Javascript gleichgesetzt werden) lassen wir heute aus dem Spiel. Doch was genau wollen wir heute eigentlich erstellen?
Im heutigen Artikel wollen wir noch einmal das Thema “Hand Evaluator” beackern. Also jenes Thema, welches wir an dieser Stelle schon in C# umgesetzt haben. Für alle, die den letzten Artikel nicht gelesen haben oder mit C# nichts anfangen können, noch einmal schnell die Zusammenfassung, was ein Poker Hand Evaluator ist und wozu er genutzt wird.
Ein Evaluator ist ein […]

Best Practice: 1 und 0 nach true und false konvertieren in Javascript

1 und 0 zu true und false in JavascriptHeute mal nur einen ganz kurzen Beitrag. Es gibt sicherlich viele Wege 0 und 1 in Javascript nach true und false umzuwandeln.
Folgender Weg, den ich heute gesehen hab, dürfte aber wohl der kürzeste und auch eleganteste sein. Zudem klappt er nicht nur für Integer-Werte, sondern auch für die String-Repräsentationen von 0 und 1.
Sowas verbuche ich hier immer unter “Programmierperlen”…
0 und 1 nach true und false
Um die Integer 0 und 1 nach Boolean zu konvertieren, genügt es den Not-Operator doppelt einzusetzen.

var thisIsFalse = !!0; //false
var thisIsTrue = !!1; //true

Warum das funktioniert? Nehmen wir folgendes Beispiel. 1 ist ein valider Wert und somit true. Wenn wir nun !1 schreiben, dann negieren wir das true und […]

Bilder verpixeln in Javascript

Close Pixelate TutorialHeute gibt es mal wieder ein bisschen Javascript-Code. Es soll darum gehen, wie man Bilder mittels Javascript verpixeln kann. Die hat sowohl vor als auch Nachteile, welche ich nachfolgend einmal kurz aufzählen möchte.
Vorteile:

Das Verpixeln kann dynamisch geschehen (Händischer Aufwand im Grafikprogramm fällt weg. Grafiken müssen vorher nicht bekannt sein.)
Die benötigte Rechenleistung wird auf den Client ausgelagert. Im Gegenteil zu einer serverseitigen Lösung (z.B. mittels PHP/Imagick), wird die Rechenlast verteilt, sodass bei hohen Besucherzahlen der Webserver nicht mit Grafikberechnungen ausgelastet wird

Nachteile:

Die Verpixelung sollte eher als grafischer Effekt bzw. zur Gestaltung genutzt werden, da die Daten ja erst einmal unverpixelt zum Client geschickt werden. Soll also wirklich der Bildinhalt unkenntlich gemacht werden, muss die Verpixelung weiterhin vor der Auslieferung an den Client geschehen

Wie funktioniert das Verpixeln?
Um Bilder in Javascript zu verpixeln machen wir uns eine Bibliothek namens “Close […]

Javascript escape() in C# – ein C# äquivalent zur escape()-Funktion

csharp_vs_javascriptDas .Net-Framework bietet eine große Anzahl an Möglichkeiten, um HTML-Code und Urls zu encodieren. Da wären zum Beispiel Uri.EscapeDataString(), Uri.EscapeUriString(), System.Web.HttpUtility.UrlEncode(), System.Web.HttpUtility.UrlPathEncode(), System.Web.HttpUtility.HtmlEncode() oder System.Web.HttpUtility.HtmlAttributeEncode().
Wenn man jedoch eine gleichwertige Funktion zu Javascript‘s escape() sucht, so wird man von all diesen Funktionen enttäuscht. Keine dieser standardmäßig vom .Net-Framework mitgelieferten Funktionen ist äquivalent zur Javascript escape()-Funktion.
Zur Verdeutlichung habe ich mal folgendes Beispiel gemacht:

// Original Ausgangsstring
// Raffi’s ärgerlicher C# Teststring/Testcode.

// JS Original (erzeugt durch escape() )
// Raffi%27s%20%E4rgerlicher%20C%23%20Teststring/Testcode.

// Uri.EscapeDataString():
// Raffi’s%20%C3%A4rgerlicher%20C%23%20Teststring%2FTestcode.

// Uri.EscapeUriString():
// Raffi’s%20%C3%A4rgerlicher%20C#%20Teststring/Testcode.

// System.Web.HttpUtility.UrlEncode():
// Raffi%27s+%c3%a4rgerlicher+C%23+Teststring%2fTestcode.

// System.Web.HttpUtility.UrlPathEncode():
// Raffi’s%20%c3%a4rgerlicher%20C#%20Teststring/Testcode.

// System.Web.HttpUtility.HtmlEncode():
// Raffi's ärgerlicher C# Teststring/Testcode.

// System.Web.HttpUtility.HtmlAttributeEncode():
// Raffi's ärgerlicher C# Teststring/Testcode.

Doch ich würde nicht darüber bloggen, wenn ich nicht auch eine Lösung parat hätte. Und diese ist gar nicht mal so kompliziert.
Schritt 1:
Fügt eurem Projekt einen Verweis auf Microsoft.JScript hinzu.
microsoft jscript verweis hinzufügen

globalCompositeOperation Copy Fix – transparente Flächen in Javasript Canvas zeichnen

Heute gibt es mal einen sehr speziellen Beitrag. Ich denke, die Leute die betroffen sind, werden verstehen worum es geht. Allen anderen sei gesagt, dass der nächste Artikel wieder ein für ein breiteres Publikum sein wird.
Ich hatte hier im Blog vor einiger Zeit ja eine kleine Progressbar vorgestellt, die ausschließlich in JavaScript umgesetzt ist. Besonderes Augenmerk hatte ich unter anderem auf die schönen runden Ecken gelegt. (Siehe: nachfolgender Screenshot)
Javascript only Progressbar
Ursprünglich hatte ich die transparenten Ecken mittels eigener Pfade realisiert, die ich mit

ctx.globalCompositeOperation = "copy";
ctx.fillStyle = "rgba(0,0,0,0.0)";
ctx.fill();

gefüllt habe.
Leider musste ich beim erneuten betrachten der Progressbar gestern sehen, dass das Script so nicht mehr funktioniert. Die Javascriptkonsolen in diversen Browsern (IE, FF, Chrome) gaben mir merkwürdiger Weise aber keinen Fehler aus.
Nach einigem googlen fand ich heraus, dass die globalCompositeOperation “copy” nicht mehr […]