by Wieczo - März 15th, 2012

Viel zu viele Seiten erwarten, dass man sich anmeldet, um Zugriff auf Foren oder Demo-Software zu bekommen. Ich mag nicht auf jeder Seite meine Email zurückzulassen.
Mein Dank geht an zwei kluge Web-Apps, die es erlauben meine Email-Adresse zu schützen: 10 Minute Mail(eigentlich www.10minutemail.com, scheint tot zu sein) und Bug Me Not
Bug Me Not

Bug Me Not mit Logins für Adobe.com
Wenn ich eine Demo von Adobe Edge runterladen möchte, gehe ich auf Bug Me Not, suche mir die Login-Daten aus und kann dann ohne Angabe von privaten Informationen Edge testen.
10 Minute Mail

10 Minute Mail mit generierter Email-Adresse
Wenn es keinen Login auf Bug Me Not gibt, gehe ich auf 10 Minute Mail, kopiere die generierte Email-Adresse, melde mich mit der Adresse an, warte auf den Aktivierungslink und kann die Adresse wieder vergessen.
Weitere Seiten?
Ich freue mich über neue Seiten, die es mir erlauben, meine Email für mich zu behalten.
Filed: Sonstiges | 2 Comments »
by Wieczo - Februar 27th, 2012
Version 1.0.4 von WPide wurde veröffentlicht und ich werde als Contributor gelistet :)

Filed: Open Source, Wordpress | No Comments »
by Wieczo - Februar 23rd, 2012
Da ich einen älteren Vertrag bei Strato habe, dauert es bis alle Server standardmäßig auf PHP 5.3.8 umgestellt sind und die Hilfe liefert nicht wirklich einen Hinweis, wie man 5.3 aktiviert.
Das geht recht schnell mit einem Eintrag in der .htaccess:
- Datei .htaccess erstellen
- “
AddType application/x-httpd-php53 .php” in die .htaccess schreiben(ohne Anführungszeichen)
- Speichern & in den Ordner hochladen, wo PHP 5.3 verwenden werden soll.
Filed: PHP | Tagged: PHP 5.3, PHP5.3, Strato | 1 Comment »
by Wieczo - Februar 16th, 2012
Nachdem ich den Ajax.org Code Editor entdeckt habe, dachte ich mir, dass es ganz nett wäre, das Ganze in Wordpress einzubinden. Die Plugin-Suche führte mich zu WPide. Das Plugin ersetzt den Theme & Plugin Editor durch ACE. Leider unterstützt es nur PHP-Highlighting. Deshalb habe ich beschlossen, es um JS- & CSS Highlighting zu erweitern. Während ich dabei war habe ich die große PHP-Klasse auseinander genommen und das JavaScript in separate Dateien ausgelagert.
Ich habe im Plugin Forum angefragt, wie ich den Code zum eigentlichen Plugin beitragen kann und warte noch auf die Antwort. Wer mal einen Blick auf meine Erweiterungen nehmen möchte, kann ihn hier finden.
Update
Mein Code ist in das Plugin eingeflossen. Jetzt muss ich nur noch warten, bis die Änderungen in das WP Plugin-Repository geschoben werden.
Die Arbeit an einer Version 2 läuft bereits :)
Filed: JavaScript, Open Source, PHP, Wordpress | 2 Comments »
by Wieczo - Februar 3rd, 2012
Gestern bin ich auf WebRTC gestoßen und heute hatte ich Zeit damit rumzuspielen. WebRTC steht für Web Real-Time Communications. Es ist eine JavaScript-API, die Zugriff auf die Webcam und das Mikrofon eines Rechners erlaubt.
WebRTC Verwendung
Um die WebRTC-Demos auszuprobieren, muss man Google Canary installieren. Dann aktiviert man “Enable MediaStream” unter chrome://flags oder man startet Canary mit dem Kommando-Zeilen-Argument “- -enable-media-stream”.
(Opera bietet auch WebRTC Unterstützung, aber ich konnte es bisher nicht testen: http://dev.opera.com/articles/view/getusermedia-access-camera-privacy-ui/)
Problem mit den Demos
Nachdem ich die verschiedenen Demos ausprobiert habe, ist mir aufgefallen, dass der LocalMediaStream nicht geschlossen wird. Ich bin mir nicht sicher, ob die offenen Streams den Speicher zu müllen, aber das kleine, grüne LED an meiner Kamera geht nur aus, wenn ich entweder den Stream mit stop() schließe oder den Browser beende. Wenn ein Tab geschlossen wird, bleibt der Stream weiterhin geöffnet und meine Webcam meldet, dass sie noch an ist.
Dabei ist das Ganze nicht so schwer: Referenz zum Stream speichern und den Stream beim unload-Ereignis schließen.
//id des video tags
var video = document.getElementById("webcam");
var videoStream = null;
function onStream(stream) {
// Referenz zum Stream speichern
videoStream = stream;
video.src = window.webkitURL.createObjectURL(stream);
video.onerror = function(e) {
console.log("Kamera Fehler: ", e);
};
}
function onNoStream() {
console.log("Kein Webcam-Stream");
}
if (navigator.webkitGetUserMedia) {
navigator.webkitGetUserMedia("video", onStream, onNoStream);
}
// Wichtig: Stream schließen, sonst bleibt die Kamera an
window.onunload = function() {
if (videoStream)
videoStream.stop();
};
Der Code ist ein Auszug aus der eigentlichen Demo.
Fazit
Insgesamt bin ich von WebRTC begeistert; eine weitere API, die weiter ins Feld von Flash vordringt. Ich hoffe nur, dass alle Browser-Hersteller es einbinden. Mal schauen, was sich noch damit bauen lässt.
Filed: JavaScript | No Comments »
by Wieczo - Januar 31st, 2012
Ich habe die Kommentare für meine älteren Artikel gesperrt.
Der Grund dafür ist, dass viele alte Artikel mit Spam überrannt werden; die neuen werden in Frieden gelassen. Askimet hilft bei der Abwehr, so dass kein Spam durchkommt, aber es nervt dennoch den Spam nach richtigen Kommentaren zu durchforsten.
Wenn
Ich habe die Kommentare für meine älteren Artikel gesperrt.
Der Grund dafür ist, dass viele alte Artikel mit Spam überrannt werden; die neuen werden in Frieden gelassen. Askimet hilft bei der Abwehr, so dass kein Spam durchkommt, aber es nervt dennoch den Spam nach richtigen Kommentaren zu durchforsten.
Wenn jemand eine bessere Lösung hat, bitte melden :)
Filed: Sonstiges | No Comments »
by Wieczo - Januar 13th, 2012
Meine Lösung zum 4Clojure Problem 92 finde ich recht hübsch:
(fn [roman]
(let [t (map #({\I 1 \V 5 \X 10 \L 50 \C 100 \D 500 \M 1000} %) roman)]
(loop [c (drop 1 t) x (first t) y (fnext t) d 0]
(cond
(nil? y) (+ d x)
(>= x y) (recur (drop 1 c) y (fnext c) (+ d x))
(< x y) (recur (drop 1 c) y (fnext c) (- d x))))))
Filed: Clojure | No Comments »
by Wieczo - Januar 6th, 2012
Da die Doku kein Beispiel für die Verwendung von letfn hat, hier ein kleines Beispiel für eine Fibonacci-Sequenz:
(defn fib-list [z]
"Returns a list with z Fibonacci numbers"
; direkte Funktionsdefinition mit Name & Parameter OHNE fn
(letfn [(fib [x]
(if (< x 3)
1
(+ (fib (- x 1)) (fib (- x 2)) )
))]
(for [y (range 1 (+ 1 z))] (fib y)))
)
Update: Das ist die lazy-seq Version der Fibonacci-Sequenz.
(defn fib-list [z]
(take z ((fn fib [x y] (lazy-seq (cons x (fib y (+ x y))))) 1 1)))
Filed: Clojure, Core | No Comments »
by Wieczo - Januar 6th, 2012
(Anmerkung: Mein Hoster ist T-Online. Ich habe noch nicht herausgefunden, wie man MySQL updatet, so dass ich WP 3 mit WP-Syntax 0.9.9+ benutzen kann. Also musste ich WP-Syntax 0.9.8 erweitern.)
Ich habe ein bisschen gestutzt, als ich feststellte, dass der Code in meinem Clojure Cheatsheet langweilig grau aussah. Um das zu ändern, bin ich an den Code von WP-Syntax gegangen.
Für Wordpress 3.0+ Benutzer: Der Datei geshi.php in Ordner wp_content/plugins/wp-syntax/geshi fehlt eine Zeile, siehe dritter Punkt & Bild.
WP-Syntax 0.9.8 verwendet eine ältere Version von GeSHi, die noch keine Clojure Highlight Datei hat.
Am Ende des Artikels ist ein Zip-Archiv mit den Änderungen. Folgende Schritte sind notwendig, um alles zum Laufen zu bringen:
- GeSHi 1.0.8.10 runterladen & entpacken
- GeSHi Ordner öffnen
- geshi.php im Editor öffnen
- In der Funktion
get_language_name_from_extension(Zeile 1439) folgende Zeile einfügen und speichern.
'clojure' => array('clj'),

- Die Ordner geshi und die Datei geshi.php nach wp_content/plugins/wp-syntax/geshi hochladen.

- <pre lang=”clojure”> funktioniert!
(defn fib-list [z]
(let [fib (fn fib [x]
(if (< x 3)
1
(+ (fib (- x 1)) (fib (- x 2)))))]
(for [y (range 1 (+ 1 z))] (fib y))))
(fib-list 10)
(1 1 2 3 5 8 13 21 34 55)
Wer nicht selber Hand an den Code legen möchte, kann den geshi Odner und geshi.php hier runterladen.
Filed: Sonstiges | 1 Comment »
by Wieczo - Januar 6th, 2012
Dies ist mein persönlicher Clojure Namespace Spickzettel.
Ausgangssituation: Ich habe die Funktion call-me in der Datei dateiname.clj gespeichert. Je nachdem, wie ich require, refer und use verwende, funktioniert der Aufruf von call-me verschieden.
Namespace deklarieren
; steht in dateiname.clj als erste Anweisung
(ns mein.namespace.dateiname)
ns bietet verschiedene Optionen. :require und :use funktionieren wie ihre Funktionen. Die Dokumentation empfiehlt die Optionen zu verwenden statt require, refer und use.
(ns mein.namespace.woanders
(:require [clojure.contrib :as cc])
(:use [mein.namespace.dateiname :only [call-me]]))
Namespace laden
; Aufruf: mein.namespace.dateiname/call-me
(require 'mein.namespace.dateiname)
; Aufruf: d/call-me
(require '[mein.namespace.dateiname :as d])
Mehrere Namespaces laden
(require (clojure.contrib sql sql.tests))
Namespace laden & alle Symbole importieren
; Aufruf: call-me
(require 'mein.namespace.dateiname)
(refer 'mein.namespace.dateiname)
use kombiniert require und refer.
; Aufruf: call-me
(use 'mein.namespace.dateiname)
Verschiedene Optionen
refer und use bieten die Optionen :exclude, :only, :rename, um Symbole auszuschließen, nur bestimmte zu laden oder um geladene Symbole umzubenennen.
Filed: Clojure, Namespaces | No Comments »