programmierung - 9.11.2009 - 18.12.2009

Whoosh - Volltextindexing in reinem Python. Könnte für einige Projekte interessant werden.

Algorithmic Botany - in Common Lisp. Da gibts auch einen Link auf das Buch mit den Algorithmen. Gerendert wird mit klassischen Renderern, der Common Lisp Code erzeugt nur die Modellbeschreibung als Input.

BERT and BERT-RPC 1.0 Specification - BERT sind Binary ERlang Terms - also das Format, welches Erlang auf die Reise schickt, wenn Messages benutzt werden (und intern mit term to binary gewandelt wird).

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).

IronPython - Release: 2.6 - damit ist IronPython auch auf dem aktuellen Stand der Python2 Reihe. Und angeblich soll mit wenigen Änderungen Django auch direkt auf IronPython laufen, allerdings hab ich da keine aktuellen Postings zu gefunden, nur welche aus 2008. .NET ist zwar nicht meine Lieblingsumgebung, aber auf der Arbeit werden wir das schon auf die Dauer wohl mal anschauen, einfach weil die Integration mit dem Rest der Systemwelt unter Windows damit einfacher sein dürfte als mit dem normalen CPython.

mojombo's bert - und hier eine Bibliothek, die BERT in Ruby implementiert.

ProjectPlan - unladen-swallow - Plans for optimizing Python - interessanter Status über Unladen Swallow, die Python-Version die auf LLVM als JIT aufbaut.

Python Package Index : python-daemon 1.5.2 - weil ich es immer mal wieder brauche und dann immer wieder von Hand stricke: dieses Modul hilft dabei ein Python-Script in einen ordentlichen Unix-Daemon zu verwandeln, mit korrektem Forken und PID-File-Handling.

samuel's python-bert - und weil ich grade dabei bin, auch noch BERT in Python.

The Render Engine - Javascript Game Engine - da JavaScript mit modernen Browsern wie Safari 4 und Chrome (und Betas von Firefox) ja mitlerweile ernstzunehmende Performance liefert, kann man auch so verrückte Sachen machen wie Rendering-Engines für Spiele in JavaScript schreiben.

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.

Code tutorial: make your application sync with Ubuntu One - Ubuntu One (der Dateien und Synchronisierdienst von Canonical für Ubuntu) benutzt intern CouchDB (und die Synchronisation ist auf CouchDB Replikation aufgebaut!) und dieses Tutorial zeigt, wie man Applikationen so umbauen kann, das sie mit CouchDB zusammenarbeiten. Beispiele sind in Python und nutzen auch einige Aspekte von DBUS (Gnome) mit, so das es generell ein recht interessantes Tutorial für Desktop-Programmierung unter Linux ist. Ich denke es ist eine gute Idee von Ubuntu One auf CouchDB Replikation zu setzen - das Gemurkse von MobileMe bei der Synchronisation sollte da deutlich besser in den Griff zu kriegen sein.

Damn Cool Algorithms: Log structured storage - kompakter Artikel über Speicherung von Daten auf Platte. In diesem Fall orientiert an den Techniken von log-basierten Dateisystemen, wie sie auch in Datenbanken Einsatz finden.

Intland now on Mercurial - Part 3: Giving new momentum to the Eclipse Mercurial Plugin | Intland Blog - könnte ich mir mal angucken, das offizielle Mercurial-Plugin für Eclipse ist ja doch weniger angenehm. Andererseits sind einige der Sprachenplugins für NetBeans (besonders das Python Plugin gefällt mir) doch deutlich besser als für Eclipse.

Maven - Guide to using proxies - weil ich es gerade brauchte, denn Leiningen (Build-Tool für Clojure) setzt auf Maven auf. Leider muss das in einem XML-File geändert werden, damit ist es nicht so leicht zu automatisieren. Ich muss mir dafür mal was brauchbares für Linux einfallen lassen, das bei Setting-Änderungen automatisch diverse Configs umschiesst.

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.

Yeti programming language - sollte ich mir mal angucken, ein ML für die JVM. Scala bietet natürlich vieles davon ebenfalls und hat sicherlich im Moment deutlich mehr Drive. Aber ML fand ich schon immer recht interessant, weil die Sprache recht kompakt ist - und mit JVM-Anbindung gibt es die ganzen Java-Bibliotheken zum Rumspielen sozusagen gratis dazu. Wobei Yeti wirklich nur eine ML-style Sprache ist, nicht wirklich ML (deutliche Unterschiede in der Syntax).

JavaScript web workers: use visitors to your website to do background data processing for you. : programming - verrückte Idee: auf Webseiten mit JavaScript Worker für distributed computing einrichten. Jeder Besucher beteiligt sich an der Berechnung von irgendwelchen Daten. Ausser natürlich er benutzt sowas wie NoScript oder PithHelmet und filtert den Kram raus.

We call it OPA - klingt nach der Beschreibung sehr interessant, eine Entwicklungsumgebung für Webservices und Webanwendungen auf Basis von OCaml mit Fokus auf die ganzen nötigen Grundlagen wie XSS Schutz, SQL-Injection-Schutz und ähnlichem.

Cadmium - Introduction - passend zu Cafesterol hier dann die OCAML Runtime in reinem Java. Damit kann man OCAML Bytecode ausführen oder das ganze als Runtime für Cafesterol-compilierte Programme benutzen.

Cafesterol - cool, eine Erweiterung des OCAML Compilers, die Java Bytecode erzeugt. Damit kann man mit OCaml nicht nur die eigene virtuelle Maschine bedienen und natürlich native Code erzeugen, sondern auch direkt in die Java-Welt gehen.

PLT Scheme Blog: Futures: Fine Grained Parallelism in PLT - das beste Scheme auf dem Markt bekommt jetzt auch Microthreads. Im Moment noch recht frisch, aber das wird sicherlich auf Dauer in den Standardumfang wandern.

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.

clutchski's fileutils - macht Python noch besser für Shell-Scripte indem es diverse Basiskommandos als Python-Funktionen zur Verfügung stellen. Nett.

Why Object-Oriented Languages Need Tail Calls – projectfortress Community - guter Post über tail-call-optimization. Von Guy L. Steele - der sollte wissen wovon er redet, er ist unter anderem massiv an Scheme beteiligt gewesen (der ersten Sprache, die Tail Recursion explizit in ihrer Sprachbeschreibung aufführt). Andere Sprachen mit denen er direkt zu tun hatte waren Common Lisp, Java und jetzt Fortress. Ich hoffe ja, dieser Post wird von Guido van Rossum gelesen und verstanden, damit Python auch endlich mal Tail Call Optimierung lernt (jaja, ich kenne all die Gegenargumente und sorry, ich finde die nicht wirklich sonderlich überzeugend).

MCLIDE - Lisp IDE for Macintosh - interessantes Projekt, welches die Tools aus dem Macintosh Common Lisp als Standalone-Tools reimplementiert und diese dann über Slime/Swank an diverse Lisp-Implementierungen ankoppeln kann. Definitiv für Mac-User angenehmer als z.B. Emacs zu benutzen.

Sonar - sollte ich mir vielleicht mal für die Firma angucken, ob man damit auch unsere Python Codebasis analysieren kann. (von Hause aus gehts nicht, da müsste man ein Plugin suchen oder schreiben)

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.

Amp | Version Control Revolution - Mercurial in Ruby, mit starkem Fokus auf Erweiterbarkeit über eine Ruby DSL. Wenn ich mir überlege wie oft ich ein VCS als Basis für irgendwelche Sachen (z.B. automatisches Deploy von Blogpostings in einem meiner Blogs) benutze, könnte das gar nicht mal so uncool sein.

formsets und inline forms in Django - ein ähnliches Problem kam letztens in der Firma auf, daher hier mal geblogmarkt, das könnte die Lösung sein.

Implementing a DHT in Go, part 1 - wer mal etwas mehr Go-Code sehen will, hier ein recht interessantes Beispiel: eine verteilte Hashtabelle (also Key/Value Paare verteilt über viele Knoten). Erster Teil beschäftigt sich mit den Buckets und der Routingtabelle, der nächste Teil wird dann das Netzprotokoll zufügen.

Understanding Haskell Monads - von allen Tutorials die ich bisher darüber gesehen habe, für mich das verständlichste.

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.

Hudson CI - da ich mich verstärkt mit JVM Sprachen beschäftige, wäre sowas durchaus interessant. Eine Continuous Integration Plattform in und für Java (und auch für andere Zwecke nutzbar). Interessant vor allem die leichte Installation - einfach nur ein .war das man startet oder in einen Container wirft und dann über das Webinterface konfiguriert. Continuous Integration hilft gewaltig beim Deploy, gerade wenn man seine Projekte sauber mit Unit-Tests aufbaut. Manuelles Durchlaufen der Testsuite entfällt dann weitestgehend, da der CI Server das übernimmt und zum Beispiel automatisch sauber durchlaufende Builds als Beta deployen kann oder z.B. funktionierende Snapshots (im Sinne der Testfälle funktionierend) als Downloads bereitstellen kann.

PyGoWave Server - keine Ahnung ob ich das schon hatte, aber gerade aus aktuellem Anlass wieder nach gesucht: eine Implementierung der Google Wave Idee in Python. Und das witzige: die Website darunter ist mit Django gebaut!

Python moratorium and the future of 2.x [LWN.net] - eine gute Zusammenfassung der aktuellen Diskussionen rund um Python Releases, speziell die Diskussion ob 2.6 das letzte 2er Python ist, oder ob das schon existierende 2.7er noch released wird, ob es danach auch noch 2.8 oder mehr geben wird, oder ob der Wechsel zu 3.x forciert werden soll.

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.

More Freedom Necessary as Top Developers Abandon iPhone - wenn Apple das nicht bald mal in den Griff bekommt, kann das eine ziemlich negative Wirkung haben. Denn wenn jetzt schon eingeschworene Apple-Schmieden wie Rogue Amoeba Apple die rote Karte zeigen, dann werden auf Dauer auch andere dort folgen. Und wenn dann im App Store nur noch alberne Taschenlampen brennen, wird Apple vielleicht merken, das ihr Vorgehen selten blöd war. Aber dann wird es zu spät sein ... (man schaue sich nur an, wie Palm den Palm Pre mehr oder weniger als Plattform ad absurdum geführt hat durch all das Heckmeck rund um deren Variante von App Store).

nothing new - da vergleicht jemand Go (Googles neue Systemsprache) mit Algol 68 - und die alte Tante Algol 68 kommt recht gut dabei weg.

warum Common Lisp nie wirklich Mainstream sein wird - der verlinkte Source dient nur dazu, um eine binary-ascii decoding/encoding Bibliothek in verschiedenen Common Lisps über einen automatisch decodierenden und encodierenden Stream zu verwenden. Was steht drin? Berge von #+ Markern mit diversen Common Lisp Implementierungen. Das ist keine Portabilität, das ist schlicht Moppelkotze.

Play framework - ein recht interessantes Framework für Java im Stile von Django oder Rails. In der Dev-Version 1.1 unterstützt es auch Scala für die Viewfunktionen, was dann wieder ganz interessant ist, denn egal wie nett das Framework ist, ich werd mir nicht Java roh antun.

Google Closure: How not to write JavaScript - klingt so, als ob die tolle Library bei Google vom Praktikanten geschrieben wurde ...

NetBeans support for Google App Engine - der Titel sagt schon alles. Netbeans gefällt mir übrigens relativ gut. Sieht zwar absolut arm aus (nicht sonderlich gut in Cocoa eingepasst - Eclipse macht da einen deutlich besseren optischen Eindruck), aber im Gegensatz zu den Alternative scheinen die Plugins recht gut zu funktionieren (Eclipse produziert komische Fehler, IntelliJ muss man erst die richtige Version vom Plugin für die richtige Version der IDE jagen gehen). Und das Clojure-Plugin von Netbeans scheint bis jetzt das netteste zu sein - die REPL ist echt gut.

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.

The Go Programming Language - interessante Sprache die aus den Google Labs kommt. Viele Ideen drin, die das Programmieren angenehm machen können - und viele pragmatische Ansätze. Für mich liegt es in einer ähnlichen Kategorie wie D - also eine Systemsprache, die als Alternative zu C oder C++ eingesetzt werden kann. Es ist interessant, das dieses eher vernachlässigte Segment von Sprachen in letzter Zeit mal wieder frischen Wind bekommt.

:: 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.

for post in leo.blog():: Django-Jython 1.0.0 released! - für ein Projekt auf der Arbeit nicht unwichtig: Django-Jython hat fertig. Und mit dabei der Oracle-Client, den wir in dem Projekt auch dringend brauchen würden. Nett.