programmierung - 9.11.2009 - 18.12.2009

Whoosh - Full-text indexing in pure Python. Could be interesting for some projects.

Algorithmic Botany - in Common Lisp. There you will also find a link to the book with the algorithms. Rendering is done with classic renderers, the Common Lisp code only generates the model description as input.

BERT and BERT-RPC 1.0 Specification - BERT are Binary Erlang Terms - that is the format that Erlang uses when messages are sent (and internally converted with term to binary).

briancarper.net :: Clojure Reader Macros - very dirty. Wild patching of the Clojure runtime at runtime. But a nice example of how you can easily reach into active Java objects from Clojure. However, you should not use this in production code (so this specific application of building your own reader macros for it).

IronPython - Release: 2.6 - this brings IronPython up to date with the Python 2 series. And allegedly, with a few changes, Django should also run directly on IronPython, although I haven't found any recent posts about this, only ones from 2008. .NET is not my favorite environment, but at work we will probably take a look at it in the long run, simply because integration with the rest of the Windows world should be easier with it than with the standard CPython.

mojombo's bert - and here is a library that implements BERT in Ruby.

ProjectPlan - unladen-swallow - Plans for optimizing Python - interesting status about Unladen Swallow, the Python version that builds on LLVM as JIT.

Python Package Index : python-daemon 1.5.2 - because I always need it from time to time and then always have to do it manually: this module helps to turn a Python script into a proper Unix daemon, with correct forking and PID file handling.

samuel's python-bert - and since I'm at it, also BERT in Python.

The Render Engine - Javascript Game Engine - since JavaScript now delivers serious performance with modern browsers like Safari 4 and Chrome (and betas of Firefox), you can do crazy things like writing rendering engines for games in JavaScript.

trotter's bert-clj - and now another BERT implementation in Clojure

Widefinder 2 with Clojure - Tim Bray's Widefinder2 project is slowly delivering very interesting results, here an article about how to optimize Clojure so that the performance beats the best Scala and Java solutions so far (where the Java version can of course catch up trivially, as most performance-relevant things in this version rely on Java libraries). A nice example of how you can bring low-level optimization into Clojure for the things that are really important for performance, but still keep the good high-level mechanisms of Clojure for the rest of the code.

Code tutorial: make your application sync with Ubuntu One - Ubuntu One (the file and synchronization service from Canonical for Ubuntu) uses CouchDB internally (and the synchronization is based on CouchDB replication!) and this tutorial shows how to modify applications so that they work with CouchDB. Examples are in Python and also use some aspects of DBUS (Gnome), so it is generally a quite interesting tutorial for desktop programming under Linux. I think it is a good idea for Ubuntu One to rely on CouchDB replication - the mess of MobileMe in synchronization should be much better to handle.

Damn Cool Algorithms: Log structured storage - compact article about storing data on disk. In this case, oriented towards the techniques of log-based file systems, which are also used in databases.

Intland now on Mercurial - Part 3: Giving new momentum to the Eclipse Mercurial Plugin | Intland Blog - I might take a look at that, the official Mercurial plugin for Eclipse is not very pleasant. On the other hand, some of the language plugins for NetBeans (especially the Python plugin I like) are much better than for Eclipse.

Maven - Guide to using proxies - because I needed it just now, as Leiningen (a build tool for Clojure) relies on Maven. Unfortunately, this has to be changed in an XML file, which makes it not so easy to automate. I need to come up with something useful for Linux that automatically switches various configs when settings change.

Clojars Tutorial - GitHub - Clojars will be something like CPAN for Clojure (and it will become more and more) and is very simple and elegant to use with Clojure and the support of Leiningen.

Yeti programming language - I should take a look at that, an ML for the JVM. Scala offers many of these features as well and certainly has much more momentum at the moment. But I've always found ML quite interesting because the language is quite compact - and with JVM integration, you get all the Java libraries to play with so to speak for free. Although Yeti is really only an ML-style language, not really ML (significant differences in syntax).

JavaScript web workers: use visitors to your website to do background data processing for you. : programming - crazy idea: set up JavaScript workers for distributed computing on websites. Every visitor participates in the calculation of some data. Of course, unless they use something like NoScript or PithHelmet and filter out the stuff.

We call it OPA - sounds very interesting based on the description, a development environment for web services and web applications based on OCaml with a focus on all the necessary basics such as XSS protection, SQL injection protection and similar.

Cadmium - Introduction - matching Cafesterol here is the OCAML Runtime in pure Java. With this, you can execute OCAML bytecode or use it as a runtime for programs compiled with Cafesterol.

Cafesterol - cool, an extension of the OCAML compiler that generates Java bytecode. With this, you can use OCaml not only to serve your own virtual machine and of course generate native code, but also go directly into the Java world.

PLT Scheme Blog: Futures: Fine Grained Parallelism in PLT - the best Scheme on the market now also gets microthreads. Still quite fresh at the moment, but this will certainly make it into the standard range in the long run.

Short Chat Server in Clojure - interesting small example of Clojure code. Shows well the use of asynchronous processes and network access. And with 75 lines nicely clear.

clutchski's fileutils - makes Python even better for shell scripts by providing various basic commands as Python functions. Nice.

Why Object-Oriented Languages Need Tail Calls – projectfortress Community - good post about tail-call-optimization. By Guy L. Steele - he should know what he's talking about, he was heavily involved in Scheme (the first language to explicitly mention tail recursion in its language description). Other languages he was directly involved with were Common Lisp, Java, and now Fortress. I hope this post will be read and understood by Guido van Rossum so that Python finally learns tail call optimization (yes, I know all the counterarguments and sorry, I don't find them particularly convincing).

MCLIDE - Lisp IDE for Macintosh - an interesting project that reimplements the tools from Macintosh Common Lisp as standalone tools and then connects them to various Lisp implementations via Slime/Swank. Definitely more pleasant for Mac users than using Emacs, for example.

Sonar - maybe I should check this out for the company to see if it can analyze our Python codebase. (It doesn't work out of the box, so you would need to find or write a plugin for it)

Building Clojure Projects with Leiningen - simply explains Leiningen. I like it very much, especially because it uses the entire Java world, but feels significantly simpler. No XML orgies and clean standalone-JAR generation.

Amp | Version Control Revolution - Mercurial in Ruby, with a strong focus on extensibility via a Ruby DSL. If I think about how often I use a VCS as a basis for all sorts of things (e.g. automatic deployment of blog postings in one of my blogs), this could actually be pretty cool.

formsets and inline forms in Django - a similar problem came up at the company recently, so here's a blog post that might be the solution.

Implementing a DHT in Go, part 1 - for those who want to see more Go code, here is a rather interesting example: a distributed hash table (i.e. key/value pairs distributed across many nodes). The first part deals with the buckets and the routing table, the next part will then add the network protocol.

Understanding Haskell Monads - of all the tutorials I have seen on this topic so far, the most understandable for me.

Clojars - the beginning of a repository for Clojure libraries à la Ruby gems or PyPi or CPAN.

Incanter: Statistical Computing and Graphics Environment for Clojure - something like R (statistics package) for Clojure. Could help me to make some practical doodles with Clojure.

technomancy's leiningen - interesting small build system for Clojure that simply writes its metadata in Clojure and thus comes across much more compact than monsters like Ant or Maven. If you use something like Netbeans, of course the build is already regulated in the IDE, but with this system you can also build small standalone projects without a large Java IDE. And it integrates well with Clojars.

Hudson CI - since I am increasingly dealing with JVM languages, something like this would be quite interesting. A Continuous Integration platform in and for Java (and also usable for other purposes). Interesting, especially the easy installation - just a .war file that you start or throw into a container and then configure via the web interface. Continuous Integration greatly helps with deployment, especially when you build your projects cleanly with unit tests. Manual execution of the test suite is then largely eliminated, as the CI server takes over and can, for example, automatically deploy cleanly running builds as beta or provide working snapshots (in the sense of the test cases working) as downloads.

PyGoWave Server - I don't know if I already had this, but I just searched for it again on this occasion: an implementation of the Google Wave idea in Python. And the funny thing: the website underneath is built with Django!

Python moratorium and the future of 2.x [LWN.net] - a good summary of the current discussions around Python releases, specifically the discussion of whether 2.6 is the last 2.x Python, or whether the already existing 2.7 will still be released, whether there will be a 2.8 or more after that, or whether the switch to 3.x should be forced.

in which things are mapped, but also reduced - a really nice example of Agents in Clojure using a log analyzer. Calculations are distributed across parallel processes, a central process reads and distributes, and at the end everything is merged. So classic map/reduce technique. It would have been nice if the reading had also been parallelized, because on flat systems with many spindles, parallel reading can indeed be faster than sequential reading (especially with gigantic file sizes as postulated by Tim Bray in the original problem). But still, it's nice to see a compact, meaningful example of map/reduce in Clojure. I like the language more and more.

More Freedom Necessary as Top Developers Abandon iPhone - if Apple doesn't get this under control soon, it could have a pretty negative impact. Because if die-hard Apple shops like Rogue Amoeba are already showing Apple the red card, others will follow in the long run. And if only silly flashlights are left burning in the App Store, Apple might realize that their approach was rarely stupid. But then it will be too late ... (just look at how Palm more or less led the Palm Pre platform ad absurdum through all the fuss around their variant of the App Store).

nothing new - someone compares Go (Google's new system language) with Algol 68 - and the old lady Algol 68 comes out quite well.

Why Common Lisp will never really become mainstream - the linked source is only used to use a binary-ascii decoding/encoding library in various Common Lisps via an automatically decoding and encoding stream. What's inside? Mountains of #+ markers with various Common Lisp implementations. That's not portability, that's just a mess.

Play framework - a rather interesting framework for Java in the style of Django or Rails. In the dev version 1.1, it also supports Scala for the view functions, which is quite interesting, because no matter how nice the framework is, I won't subject myself to raw Java.

Google Closure: How not to write JavaScript - sounds like the great library at Google was written by the intern ...

NetBeans support for Google App Engine - the title says it all. I quite like NetBeans, by the way. It looks quite bare (not particularly well integrated into Cocoa - Eclipse makes a much better visual impression), but unlike the alternatives, the plugins seem to work quite well (Eclipse produces strange errors, IntelliJ requires you to find the right version of the plugin for the right version of the IDE). And the Clojure plugin for NetBeans seems to be the nicest so far - the REPL is really good.

The Enclojure REPLs (Not just for Netbeans!) - how to use the REPL from the Netbeans plugin also standalone. And this is a quite usable REPL, with nice features.

The Go Programming Language - interesting language that comes from the Google Labs. Many ideas in it that can make programming pleasant - and many pragmatic approaches. For me, it is in a similar category as D - so a system language that can be used as an alternative to C or C++. It is interesting that this rather neglected segment of languages is getting fresh wind again.

:: Clojure and Markdown (and Javascript and Java and...) - interesting post, because here the advantage of mixed languages on the JVM is fully utilized. Instead of writing a Markdown parser for Clojure, one in JavaScript is simply used via Rhino (JS in Java). Which also ensures that both the web client and the blog server can use the same implementation of Markdown.

for post in leo.blog():: Django-Jython 1.0.0 released! - not unimportant for a project at work: Django-Jython is finished. And included is the Oracle client, which we would also urgently need for the project. Nice.