clojure

lein-droid Wiki. Bin ja mal wieder am Rumspielen mit Alternativen zur nackten Android-Java-Programmierung und das hier wäre ein interessanter Kandidat, da man mit Clojure rumspielen kann.

sattvik/neko. Auch mal vorgemerkt für später, Clojure für die Programmierung von Android Anwendungen mit ein paar Bindings für die Android APIs. Wobei da natürlich die Frage ist, ob die das Startup-Problem in den Griff bekommen haben, oder ob das immer noch den Einsatz von Clojure limitiert.

Clojure/core — Reducers - A Library and Model for Collection Processing. Warum eine neue Library? Weil die Standardfunktionen zwar interessant und sinnvoll sind, aber man eben manchmal doch eine striktere Implementierung braucht, die z.B. zwischendurch generierte temporäre Collections vermieden werden und eine direkte out-of-the-box Unterstützung für Parallelisierung geliefert wird. Ohne große Handstände und Umstände, nur ein anderer Namespace.

Heroku | Clojure on Heroku. Und noch mehr Lisp. Mit Clojure kann man jetzt auch auf Herok, der Cloud Plattform, arbeiten. Damit eventuell eine Alternative zu zum Beispiel Google App Engine (auf deren Java-Inkarnation läuft Clojure ja auch).

Home // Overtone. Bin ja immer begeistert von Krachmachern - das hier ist ein Tool zur interaktiven Soundprogrammierung und Livecoding und Instrumentenbau (also digitalem natürlich), und das ganze in Clojure geschrieben. Vielleicht für den einen oder anderen ein Grund sich mal Clojure näher anzugucken.

clojurescript demo convex hull. Eine Demo für die Programmierung von Clientside Code in Clojure mit Hilfe von Clojurescript. Clojurescript compiliert Clojure nach JavaScript mit Hilfe des Google Closure Compilers und der Closure Library. Sieht nach einer sehr interessanten Möglichkeit der Clientprogrammierung aus, zumal Clojurescript unter Mithilfe von Rich Hickey steht, dem Erfinder und Hauptentwickler von Clojure, man kann also davon ausgehen, das die Integration in die Clojure Welt gut sein wird.

clj-android. Und wenn ich schon dabei bin, auch gleich ein Framework für Clojure und Android. Ist allerdings alles scheinbar noch etwas roh (braucht zum Beispiel einen Fork von Clojure um ein paar Probleme mit Dalvik zu umgehen). Und nur zum Rumspielen mit Clojure für unterwegs ist vielleicht die Clojure REPL interessant.

Seesaw - GitHub. Da mich GUI-Programmierung fast immer nervt, ist das hier ganz interessant: eine Clojure-Library die Swing in eine sehr viel kompaktere Form bringt. So dass man sich für einfache GUIs nicht mehr die Finger wund schreiben muss. Und da MCL-IDE ja jetzt auch Clojure unterstützt, wird es vielleicht ja doch mal Zeit sich das ganze näher anzugucken.

counterclockwise - Counterclockwise is an Eclipse plugin helping developers write Clojure code. Und wenn man sich eh Eclipse auf die Platte kippt, ist vielleicht ein Clojure Plugin auch nicht uninteressant, damit man seine tägliche Ration Klammern bekommt.

icylisper.in - jark. Hmm, wieder eine von vielen Lösungen für Clojure, die ein vereinfachtes Deployment von Clojure-Scripten ermöglicht, komplett mit persistenter VM und #! Unterstützung. Irgendwie werden das ein bischen viele in letzter Zeit.

nathanmarz/elephantdb. Gleicher Autor wie für Cascalog, hier hat er auf Hadoop mit Clojure einen verteilten Key/Value-Store aufgebaut. Auch nicht uncool.

live-processing ist sowas wie Impromptu - also live coding Umgebung - in Clojure. Setzt natürlich stärker den Fokus auf Grafik, da es ja auf Processing aufbaut, und hat bisher noch nicht den vollen Umfang von Processing verfügbar, aber hey, zum Rumspielen mit einer neuen Sprache sollte es schon reichen.

dcolthorp/matchure - Pattern-Matching auf Clojure-Datenstrukturen (also nicht bl0ß Strings und Regular Expressions, sondern auch komplexere Matchings gegen Listen, Vektoren, Maps).

kriyative/clojurejs - GitHub sollte ich mir mal angucken, ist eine weitere JS-Integration, hier für einen Subset von Clojure, der automatisch nach Clientside JavaScript übersetzt wird. Und der hier unterstützt rudimentär auch jQuery.

Wer mit Bytes in Clojure rumfummeln muss: gloss. Im Moment hab ich keine Anwendung dafür, aber mal geblogmarkt für später, wenn ich mal wieder mit Binärdaten zu tun habe.

Clojure Libs and Namespaces: require, use, import, and ns - 8th Light Blog. Einfach nur ein kurzer Abriss über die verschiedenen Namespace-Funktionen in Clojure.

slimv.vim - SLIME-like Lisp and Clojure REPL inside Vim with Profiling, Hyperspec, Paredit. Ganz interessant, da deutlich leichtgewichtiger und simpler zu installieren als Slime oder VimClojure oder eine der anderen dicken Lösungen. Und man kann einfach aus Vim heraus Common Lisp oder Clojure programmieren. Ist zwar derzeit nur im "rumspielen und gucken" Modus, aber klingt durchaus interessant.

gcv's appengine-magic at master - GitHub - soll interaktive Entwicklung von Google AppEngine Tools ermöglichen.

jduey's arrows at master - GitHub - mal beobachten, Lisp (und damit Clojure) liegt mir normalerweise wesentlich näher als Programmiersprache als Haskell und vielleicht verstehe ich dann ja mal endlich richtig was es mit diesen Arrows auf sich hat.

ninjudd's cake at master - GitHub - ob ich mir das mal angucken will? Gerade wegen der persistenten JVM bei Nutzung von Scripten könnte das interessant sein.

nakkaya's static at master - GitHub - statischer Generator für Websites in Clojure.

liebke's clj - ah, jemand hat Paketinstallation und eine anständige REPL für Clojure zusammengeworfen, so dass man auch mal eben schnell interaktiv mit Clojure rumspielen kann, ohne jedesmal ein Projekt anlegen zu müssen. Ganz praktisch um mal fix mit irgendwelchen Java-Libs rumzuprobieren. Macht intern nix anderes als ein verstecktes Leiningen-Projekt anzulegen und zu verwalten, ist also eher Kosmetik, aber die richtige Art von Kosmetik

Clojure - datatypes - was mir an Clojure so gefällt: pragmatische und kompakte Lösungen für typische Probleme in der Programmierung. Clojure 1.2 wird die Möglichkeit einführen, bessere Beschreibungen von Datenstrukturen mit darauf definierten Funktionalitäten zu haben. Und zwar keine Monsterkonstruktion wie CLOS oder andere Lisp-OO-Erweiterungen, sondern recht schlanke Konstrukte die auch wieder gut auf die Hostumgebungen (JVM und CLR) passen. Schaut schon ganz interessant aus. Der Nachteil von all den Veränderungen in Clojure: Bücher sind schneller veraltet als sie gedruckt werden können ...

alienscience's leiningen-war - interessantes Plugin für Leiningen, das Build-Tool in und für Clojure. Liefert Kommandos die schnell und unkompliziert .war Files erzeugen, die z.B. für Deployment auf die Google App Engine genutzt werden können.

hiredman's lein-gae - Dokumentation im Prinzip nicht existent, aber es liefert ja auch nur ein einfaches Kommando, welches einem die war-Struktur für ein Google AppEngine Projekt vorbereitet und das project.clj anpasst. Eine weitere Möglichkeit, mit Clojure Programme für die AppEngine zu bauen.

Licenser's lein-search - und ein kleines Plugin, das die Suche nach Modulen und deren Versionen auf die (Leiningen) Kommandozeile holt.

sethtrain's beget - oder alternativ zu leiningen-war könnte man auch dieses Basisprojekt benutzen und einfach anpassen. Da werden auch gleich die Google AppEngine Tools als Dependency geholt.

clojure-python - interessantes Projekt das die Interoperabilität zwischen Jython und Clojure vereinfachen will und auf einen ähnlichen Level heben will, wie sie zwischen Clojure und Java schon ist. Besonders interessant für mich, weil es mir dann erlauben würde, stärker auf Clojure als Alternative zu setzen - Jython ist schon geplanter Baustein der Werkzeugkiste, hat aber einige Performance-Probleme die Clojure durch direktere Java-Integration nicht hat. Ausserdem schreib ich lieber kompakten Lisp-Code als geschwätziges Java ...

hugoduncan's clj-ssh at master - GitHub - ziemlich interessante Bibliothek, die ssh-Zugriff in Clojure-Scripten ermöglicht. Zum Beispiel für Serverautomation sehr interessant. Benutzt Jsch, eine Java-native ssh-Bibliothek (also kein Umweg über shell-pipes oder ähnliches).

A simple web application in Clojure using ring and enlive « LShift Ltd. - und hier ein kleines Beispiel, wie man mit ring und Clojure dann tatsächlich arbeitet. Sieht ganz interessant aus, könnte für mich besonders für Webservices in Clojure interessant sein.

Kotka : Projects : Clojure : VimClojure - und wer wie ich ein VIM-Fan ist, wird sich vielleicht über diese Clojure-Einbettung freuen. Viele der Features kommen schon deutlich an die Leistungsklasse von IDEs wie Netbeans oder Eclipse heran. (obwohl die Clojure-Plugins für Eclipse und Netbeans auch eine sehr gute Figur machen).

mmcgrana's ring at master - GitHub - nette kleine Lib auf dem Level von Python WSGI. Also absolut minimale HTTP-Bindings für Clojure mit der Möglichkeit das ganze über eine ganze Reihe von verschiedenen Techniken dann zu betreiben. Besonders interessant für die Fälle, wo man eben nicht in das Korsett eines fertigen Frameworks wie Compojure gesteckt werden möchte.

Clojure 1.1 and Beyond - wohin sich Clojure in der nahen und mittleren Zukunft entwickeln wird. Wobei einiges darin darauf hin deutet, das Clojure auf längere Zeit eher experimentellen Charakter haben wird - was beim produktiven Einsatz zu berücksichtigen ist, neue Versionen können durchaus größere Änderungen sowohl in der Sprache, der Basisbibliothek und vor allem dem Laufzeitverhalten haben.

duelinmarkers's clj-record - ein Persistency Framework inspiriert von Active Records (dem ORM von Ruby on Rails), aber halt in Clojure und mit einem mehr Lisp-like API. (das war jetzt sehr viel Denglisch in einem Satz!)

mattrepl's clojure-neo4j - und hier ein Interface zu Neo4J, einer Graphen-Datenbank für Java, mit der komplexe Datenstrukturen recht leicht auf Platte gespeichert werden können. Sieht für simple Persistenz in Programmen ganz interessant aus.

pjstadig's tim-clojure-1.0.0 - ziemlich cooles Projekt welches mittels Terracotta (im Prinzip eine distributed Map für Java) ein verteiltes Environment für Clojure implementiert. Objekte mit passenden Metadaten werden automatisch auf alle diesem verteilten Environment angeschlossenen Clojures verteilt - und das tuts für nahezu alle Objekte die in Clojure definierbar sind.

Building a Clojure Web application with Incanter, Compojure, and Leiningen « Data Analysis and Visualization with Clojure - sehr schön, vor allem weil dieses Beispiel nicht nur schön zeigt wie simpel man mit Leiningen und Compojure eine Webanwendung mit Clojure bauen kann, sondern auch weil es mal nicht die üblichen langweiligen Verdächtigen als Beispiel sind, sondern mal was ganz anderes. (tuts wegen einer Änderung von Apple am Java für 10.6 derzeit nicht unter OS X, die Leiningen-Leute sind aber wohl schon dran)

InfoQ: Clojure 1.1 Adds Transients, Chunked Sequences for Efficiency - bei Clojure kommen im Moment die interessanteren Optimierungen und Überlegungen zu funktionaler Programmierung. Denn sie konzentrieren sich auf den wesentlichen Teil: Datenstrukturen. Ein oft vernachlässigter Bereich bei andern Sprachen - was bringt mir eine funktionale Sprache, wenn die mitgelieferten Datenstrukturen schlicht zu low-level sind? Clojure bietet Zugriff auf low-level Elemente aus Java, wenn aus Performancegründen nötig, aber auch high-level Datenstrukturen die sich wesentlich natürlicher verhalten in funktionalem Code. Und mit chunked sequences und transients jetzt zwei recht elegante Optimierungen für diese, die den Abstieg in die Java-Niederungen vermeiden helfen.

briancarper.net :: Clojure Reader Macros - very dirty. Wildes patchen der Clojure-Runtime zur Laufzeit. Aber ein nettes Beispiel wie man von Clojure problemlos in die aktiven Java-Objekte durchgreifen kann. Sollte man allerdings nicht in produktivem Code benutzen (also diese spezifische Anwendung sich darüber eigene Reader-Macros zu bauen).

trotter's bert-clj - und jetzt noch eine BERT Implementation in Clojure

Widefinder 2 with Clojure - das Widefinder2 Projekt von Tim Bray liefert langsam sehr interessante Ergebnisse, hier einen Artikel darüber wie man Clojure so optimiert, das die Performance die bisher beste Scala und Java-Lösung schlägt (wobei die Java-Version natürlich trivial nachholen kann, da die meisten performancerelevanten Sachen in dieser Version auf Java-Libraries zurückgreifen). Ein schönes Beispiel, wie man in Clojure Low-Level-Optimierung einbringen kann für die Sachen, die wirklich wichtig für die Performance sind, aber trotzdem für den Rest des Codes die guten Highlevel-Mechanismen von Clojure behält.

Tutorial - clojars-web - GitHub - clojars will sowas wie CPAN für Clojure sein (und wird es auch immer mehr) und ist sehr simpel und eleganz mit Clojure und der Unterstützung von Leiningen zu benutzen.

Short Chat Server in Clojure - interessantes kleines Beispiel von Clojure Code. Zeigt gut die Nutzung asynchroner Prozesse und Netzwerkzugriff. Und mit 75 Zeilen schön übersichtlich.

Building Clojure Projects with Leiningen - einfach ganz simpel Leiningen erklärt. Gefällt mir sehr gut, besonders weil es zwar die ganze Java-Welt nutzt, aber sich wirklich wesentlich simpler anfühlt. Keine XML Orgien und saubere standalone-Jar-Erzeugung.

Clojars - der Anfang eines Repositories für Clojure-Bibliotheken ala Ruby gems oder PyPi oder CPAN.

Incanter: Statistical Computing and Graphics Environment for Clojure - sowas wie R (Statistikpaket) für Clojure. Könnte mir helfen mit Clojure mal ein paar praktische Doodles zu machen.

technomancy's leiningen - interessantes kleines Buildsystem für Clojure, das seine Metadaten einfach in Clojure abfasst und daher wesentlich kompakter daher kommt als Monster wie Ant oder Maven. Wenn man sowas wie Netbeans benutzt, ist natürlich der Build schon in der IDE geregelt, aber mit diesem System kann man auch gut kleine Standalone-Projekte ohne große Java-IDE aufbauen. Und es integriert sich gut mit Clojars.

in which things are mapped, but also reduced - ein wirklich nettes Beispiel der Agents in Clojure anhand eines Log-Analyzers. Berechnungen werden auf parallele Prozesse verteilt, ein zentraler Prozess liest und verteilt, am Ende wird alles gemerged. Also klassische map/reduce Technik. Schön wäre natürlich noch gewesen wenn das Lesen auch parallelisiert worden wäre, denn auf Plattesystemen mit vielen Spindeln kann paralleles Lesen durchaus schneller sein als sequentielles Lesen (besonders bei gigantischen Filegrößen wie sie von Tim Bray im originalen Problem postuliert wurden). Aber trotzdem nett mal ein kompaktes sinnvolles Beispiel für map/reduce in Clojure zu sehen. Die Sprache gefällt mir immer besser.

The Enclojure REPLs (Not just for Netbeans!) - wie man die REPL aus dem Netbeans-Plugin auch standalone benutzen kann. Und das ist eine recht brauchbare REPL, mit netten Features.

:: Clojure and Markdown (and Javascript and Java and...) - interessanter Post, weil hier der Vorteil der gemischten Sprachen auf der JVM voll ausgespielt wird. Anstelle einen Markdown-Parser für Clojure zu schreiben, wird einfach einer in JavaScript über Rhino (JS in Java) benutzt. Womit dann auch sichergestellt ist, das sowohl Web-Client als auch Blog-Server die gleiche Implementierung von Markdown benutzen können.