Wieczo's Blog

Ich laufe auf Sonnenschein!

Clojure: Römische Zahlen umrechnen

by admin - 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))))))

Clojure: letfn

by admin - 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 &amp; Parameter OHNE fn
  (letfn [(fib [x]
    (if (&lt; 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)))

Clojure Highlighting in Wordpress

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'),
Code-Auszug aus geshi.php: Zugefügte Zeile ist hervorgehoben
  • Die Ordner geshi und die Datei geshi.php nach wp_content/plugins/wp-syntax/geshi hochladen.

Die Datei geshi.php und der Ordner geshi sind markiert.

  • <pre lang=”clojure”> funktioniert!
(defn fib-list [z]
  (let [fib (fn fib [x]
    (if (&lt; 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.

Clojure Cheatsheet: Namespaces

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.

Jasmine Tests vor jedem Git Commit ausführen

by Wieczo - Dezember 23rd, 2011

In meinem aktuellen Backbone.js Projekt verwende ich Jasmine für die Tests. Ich habe dazu das Jasmine Ruby Gem installiert.

Die Tests liefen erst als ich

require 'rubygems'

in die Rakefile eingefügt habe.

Bisher habe ich die Tests nur im Browser ausgeführt mit:

rake jasmine

Das ganze ist auch schön und gut, aber manchmal vergesse ich die Tests auszuführen und commit-te etwas, obwohl die Tests fehlschlagen.

Um die Tests laufen zu lassen, wenn ich commit-en will, habe ich einen pre-commit Hook geschrieben:

  • Erstelle die Datei .git/hooks/pre-commit
  • Folgendes in pre-commit kopiert:
rake jasmine:ci
exit $?
  • Den Hook ausführbar machen:
chmod +x .git/hooks/pre-commit
  • Tada! Bei jedem Aufruf von git commit -am ‘was geändert’ werden zuerst die Tests ausgeführt, wenn sie fehlschlagen, wird auch nichts commit-tet.

Vor Commit

So sah es als ich git commit gestartet habe.

Konsole vor Commit

So sieht es aus, wenn die Tests fehlschlagen und der commit nicht durchgeführt wurde.

Das ganze dauert zwar ein bisschen, aber ich fühle mich sicherer, dass ich beim commit nichts zerstöre.

JavaScript: Problem mit this

by Wieczo - Dezember 20th, 2011

tl;dr http://howtonode.org/what-is-this hat mir this in JavaScript klar gemacht.

Vor kurzem habe ich angefangen, einen Memory-Klon in JavaScript zu entwickeln.

Zuerst verwendete ich nur prozedurales JS mit Underscore und jQuery. Nach über 500 Zeilen Spagetti-Code, habe ich nach Frameworks gesucht, um den Code zu organisieren und bin bei Backbone.js auf was Einfaches und Solides gestoßen.

Doch Code wie

_.delay(game.nextLevel, 500)

funktionierte nicht mehr. Das Problem ist JavaScripts this, das in verschiedenen Kontexten verschiedene Objekte referenziert. Das this in game.nextLevel referenziert nicht mehr game, sondern window.

Die Lösung zum Problem ist:

_.delay(_.bind(game.nextLevel, game), 500)

Somit wird game als Kontext der Funktion game.nextLevel gesetzt. Somit referenziert das this in der Funktion wieder das game Objekt.

Tim Caswells Artikel auf howtonode.org hat mir geholfen das Ganze besser zu verstehen.

Stand der Dinge

by Wieczo - Oktober 31st, 2009

Ich habe lange geschwiegen und es ist auch vieles passiert: ESE, BS-Tutor, neue Vorlesungen und Praktika, Lernen von Objective-C und Cocoa.

Das Semester hat mit der Erstsemestereinführung(ESE) begonnen und ich denke, dass Umut und ich einen Teil der Ersties in die Eigenheiten der h_da eingeführt haben. Es war insgesamt spaßig und ich habe auch einen Teil der Ersties kennen lernen können.

Die ersten drei Wochen Betriebssysteme-Praktikum(BS) sind vorbei, am Montag ist die vierte Woche und ich konnte schon ein paar Leuten mit dem Verständnis des Praktikums helfen. Professor Moore setzt nun auch Moodle an und ich bin gespannt, wie sich das auf die Kommunikation auswirkt. Meine Email-Adresse für Fragen und Antworten ist in dem Moodle-Kurs eingetragen.

Dieses Semester war es Zeit Wahlpflichtfächer(WPs) zu wählen und ich habe mich für “Java – Threads, Animation, Beans“, “Advanced Programming Techniques” und “XML-Sprachfamilien” entschieden. Bisher gefallen mir alle drei ganz gut. Bei APT freue ich mich auf eine praktische Prüfung. Die Pflichtfächer “Graphische Datenverarbeitung”, “Verteilte Systeme” und “Entwicklung webbasierter Anwendungen” sind alle interessant, wobei EWA mir am leichtesten fällt und GDV am schwersten: HTML & CSS sind leicht zu erlernen und an sich leicht anzuwenden. OpenGL ist neu für mich und es gibt vieles zum kennen lernen und zu üben.

Ansonsten lese ich gerade “Cocoa Programming: A Quick-Start Guide for Developers” als eBook. Es ist momentan in der Beta, also wird es momentan noch überarbeitet und von Leopard auf Snow Leopard aktualisiert. Ich habe die ersten sechs Kapitel durch, mit Objective-C komme ich gut klar, auch wenn es noch viel zu entdecken gibt. XCode ist eine hübsche IDE, Interface Builder ist schnell und einfach um GUIs zu erstellen und Instruments hilft die Anwendung zu profilen und Leaks aufzuspüren. Wenn ich mehr durchgelesen habe, werde ich mich mit meiner ersten iPhone- oder Mac-App beschäftigen.

Sonnige Grüße, Wieczo

Huss & Hodn – Heute!

by Wieczo - September 19th, 2009

Hey!

Gestern war  die Party der Rudi MSS in der Krone(spitze aufgelegt, Gerrit ;) und heute geht’s mit allen vieren Elementen des Hip Hop im Kanal 70 weiter.

Ich freu’ mich!

Gleich geh ich hin und schau mir die Sprayer an. Später gibt’s einen B-Boy Circle mit Leuten aus Worms, Frankenthal und Mannheim. Davor, dazwischen und währenddessen laufen Beats und Raps vom Feinsten.

Bis später! :)

iSync-Plugin für Samsumg SGH-E380

by Wieczo - August 26th, 2009

Bei meinem Sony Ericsson K700i gibt der Akku langsam den Geist auf und auf ein iPhone muss ich noch bis zum dritten September warten, also habe ich das alte Samsung SGH-E380 meiner Mutter.
Auch wenn ich das K700i wegen Softwarefehlern und Abstürzen nicht wirklich mag, gebe ich ein Lob an Sony Ericsson, weil sie ein iSync-Plugin anbieten. Bei Samsung fand ich zum SGH-E380 nichts, also ab zu Google und im Mac Mini Forum fand ich die Lösung, um ein bestehendes Plugin zu anzupassen. Der Post ist gut und ausführlich mit Bildern beschrieben. Es gibt aber kein Paket zum Runterladen, also habe ich die beschriebenen Änderungen durchgeführt, alles komprimiert und hier hochgeladen: Samsung-E380.phoneplugin.zip

Die Installation davon ist recht einfach:

  1. Samsung-E380.phoneplugin.zip runterladen, Doppelklick auf die Zip-Datei und Mac OS X entpackt es
  2. Samsung-E380.phoneplugin kopieren
  3. Im Finder den Programme-Ordner öffnen
  4. Rechts-Klick auf iSync und “Paketinhalt zeigen” anklicken

    "Paketinhalt anzeigen" bei Rechts-Klick im Finder

    "Paketinhalt zeigen" bei Rechts-Klick im Finder

  5. Den Ordner Contents/Plugins/ApplePhoneConduit.syncdevice/Contents/PlugIns öffnen und das Samsung-E380.phoneplugin einfügen
  6. iSync neustarten und das Handy sollte erkannt werden:

SGH-E380 in iSync

Viel Spaß beim Synchronisieren ;)

P.S.: Falls ich irgendwelche Rechte von Apple oder Samsung verletzt habe, meldet bitte Euch direkt an meine Email-Adresse.

Meine installierten Wordpress Plugins

by Wieczo - August 19th, 2009

Nach knapp 6 Wochen Existenz möchte ich die Plugins vorstellen, die mein Leben leichter machen:

Askimet

DER Spam-Vernichter Nummer 1! Neben diesem Blog hat Askimet auch meinen alten Foto-Blog immer vor Spam geschützt. Einmal hat er zwar Ham gegessen, aber einfach markieren und es läuft. Askimet ist bei jeder Wordpress Installation dabei. Einfach bei Wordpress.org anmelden, API-Key anfordern, in den Einstellungen eingeben und gut ist.

Contact Form 7

Vorgestern installiert und ruckzuck am Laufen. Ich musste nichts machen außer ein Tag in die Seite einzufügen und schon bin ich auch von hier erreichbar für jeden der Fragen hat.

Google(XML) Sitemaps Generator

Jeder redet von SEO, Suchmaschinen-Marketing und was auch immer, aber manche vergessen, dass es auch ohne “Profi” klappt. Plugin installieren, bei Yahoo, Google und vielleicht anderen registrieren und schon werden die Suchmaschine automatisch bei jeder Änderung informiert. Gestern gespendet, heute berichtet. :)

WordPress.com Stats

Stats gibt eine Übersicht über Referrers, best-besuchte Artikel und vieles mehr. Es ist ähnlich wie Google Analytics, bietet aber mehr Details und man muss kein JavaScript einbinden, das manche(wie ich sowieso sperren).

Du!

Was fehlt mir noch?