programmierung - 25.10.2010 - 9.12.2010

slimv.vim - SLIME-like Lisp and Clojure REPL inside Vim with Profiling, Hyperspec, Paredit. Quite interesting, as it is much lighter and simpler to install than Slime or VimClojure or one of the other heavy solutions. And you can simply program Common Lisp or Clojure from within Vim. It is currently only in the "playing around and looking" mode, but it sounds quite interesting.

Chromium Blog: A New Crankshaft for V8. And this makes JavaScript even faster. V8 is also the basis for Node.js, so this performance improvement will likely soon be available for the server as well.

pyquery: a jquery-like library for python — pyquery v0.6.1 documentation. That's what it says. Essentially a subset of what jQuery can do, as jQuery has its own selector extensions and this one simply builds on lxml (but therefore has full CSS3 selector support).

stream – Lazily-evaluated, parallelizable pipeline — stream v0.8 documentation. Interesting small module for easier programming of calculation chains with iterators. Makes source code much more compact for suitable use cases (e.g. transformations and selections of bulk data). Blogged because I have implemented something like this several times myself ad-hoc within projects.

Another implementation of Common Lisp Conditions in Python.

Python Package Index : withrestart 0.2.6. Sounds quite interesting - the interactive restarts of Common Lisp are often very practical, especially when working interactively.

pyclewn. Not sure if I want to dive into this - I don't usually use debuggers. But this one is integrated into Vim and thus directly usable from the editor. gdb and pdb (for Python) can be used.

Vim Taglist plugin manual. Another important component to be able to work properly with MacVim. It is also recommended to install exuberant-ctags with brew install ctags if you want to use real languages (such as Python).

Vim autocomplete, Django and virtualenv | rosemanblog. Especially the integration of VirtualEnv and MacVim is helpful, because otherwise Omnicomplete does not work cleanly with VirtualEnv, as it knows nothing about the modules located there. By the way, installing MacVim with Homebrew is trivial ...

chrisdickinson's wilson. One before lunch, as the framework is heavily inspired by Django, and since I'm a Django fan, it's definitely worth its own link.

Modules - node. Many modules for Node.js, more than I can quickly glance through (or want to), so for now just bookmarked for future perusal.

persistence.js: An Asynchronous Javascript ORM for HTML5/Gears. Since you always want to save data at some point, here's a link to a client-side ORM library for JavaScript. It looks quite good and could perhaps also be used for the server side. (I found another link for this that explicitly supports Node.js with MySQL).

Express - node web framework. Great, if you want to quickly build small web services with Node.js. I think it fits well with Node.js installations and jQuery on the client side. At the moment, JavaScript is pushing into many niches where Python used to be at home. Not least because JavaScript is actually not such a bad language after all.

Socket.IO is a small JavaScript library that supports socket communication from the browser and can use various techniques, automatically selecting the best available one. This makes it work across different browsers and browser generations.

agr / ropevim / source – Bitbucket. There is also a Vim integration for the other tool that interested me about Spyder: Rope. A refactoring tool for Python code. Not entirely uninteresting for a sufficiently large code base.

spyderlib - Project Hosting on Google Code. I'm currently looking at it, it's a quite interesting Python editor with many IDE features. Since it is written in Python itself, various Python tools integrate very well (Rope, Flake, PyLint).

Komodo Edit is a Free Open Source Editor for Perl, Python, Tcl, PHP, Ruby & Javascript. I should check it out, as TextWrangler doesn't have folding, BBEdit is too expensive in my opinion, and TextMate has too modest Python folding support. And if this thing runs well across different systems, I would finally have a uniform GUI editor again (yes, I know, vim is available everywhere, but the GUI version just doesn't appeal to me).

Update: uh, hello, ActiveState? I understand that you want to sell your "cheap" IDE (special offer! Only $330), but at least Komodo Edit deserved the source outline, right?

Python Package Index : lupa 0.18. Brings LuaJIT2 and Python together, so that you can access Lua scripts from Python, which are then compiled by LuaJIT.

Because I just wrote about Lua: probablycorey's wax provides an Objective-C bridge to Lua, specifically for iOS devices. So you can write iPhone or iPad apps with Lua.

Have tracing JIT compilers won? | Lambda the Ultimate. Interesting discussion in which Mike Pall (LUAJit), Brendan Eich (Mozilla JägerMonkey) also participate (and specifically LUAJit is currently the King of the Mountains in terms of performance). PyPy is also mentioned, though still at a much older stage - the new 1.4 already shows much better what is possible with PyPy.

PyPy Status Blog: PyPy 1.4: Ouroboros in practice. And with that, PyPy has now also arrived at the JIT in 64bit. In addition, VirtualEnv now works smoothly if you install a current version. And it's still fast.

IKVM.NET Home Page provides a Java VM in .NET - you should even be able to do crazy things like running Scala 2.8 on .NET with it.

MacRuby » An Introduction to GCD with MacRuby. Grand Central Dispatch is one of the cooler techniques that Apple has introduced at the OS level in recent times. And MacRuby has direct support for it. Very interesting (even if it of course only works in the OSX world).

As a reminder: Zach's Journal - Making a small Lisp project with quickproject and Quicklisp. Just because I otherwise quickproject and similar things will forget again. With Clozure CL 1.6 Quicklisp also works quite completely (specifically cl-fad is functional and therefore you can get a larger stack of packages to fly finally). Zach is slowly putting together a stack of tools for Common Lisp with which it is fun to play around again. Even if I will probably never become a big Emacs fan, no matter how much others swear by the part for Lisp.

Higher Order Javascript provides many ideas about JavaScript programming (and CoffeeScript) and how to use functional programming sensibly in JavaScript. After all, JavaScript is a powerful language with interesting abstractions that you can certainly use.

Backbone.js is an interesting project that provides a real backbone structure for more complex JavaScript projects. It implements the Model/View/Controller structure for JavaScript and provides a number of Collection classes with corresponding APIs. What it does not provide is a thick stack of UI stuff or the 1001st implementation of DOM navigation or similar - it should therefore work well with things like jQuery, as it actually only provides the basic structure on which one can build when one no longer wants to store everything in the DOM. However, there are already some overlaps, for example with events - these are also provided by jQuery, but here they are not bound to DOM nodes, but to arbitrary objects.

Datejs - An open-source JavaScript Date Library - makes a good impression, for the various format parsing and calendar-related stuff.

Pixie Scheme III. For the iPad. Perhaps not entirely uninteresting for doodling (provided it also has usable integration with the iOS API).

How I build-in Tumblr in my Drupal install is already very close to what I want to do with Tumblr on my homepage. Now I just need to write a minimal widget and stuff the code in there and instead of the regular posts, only go to the photos. And I'll have Tumblr photos on the homepage again.

Update: those who look to the right can see the Tumblr photos again. So on the homepage. It works quite well and doesn't take up any more time. Someday I'll put together the plugin that I built there, at the moment it's still a bit raw.

API | Tumblr - maybe I want to do more with it than was used in the previous PHP example.

Display photos from Tumblr (using JSON method) is PHP, but I should be able to easily rebuild this in JavaScript and then run it only client-side.

hyphenator I could take a look at, because then the hyphenation simply runs with JavaScript in the browser. It's only interesting for the websites themselves anyway, feed readers have to render themselves.

Update: yeah, looks good. Now I can look at my homepage again without getting pimples, and the integration was very simple with their custom package builder - go through a few checkboxes, build an optimized download version of the library and include it in the head of the blog. As a class, I simply used entry-content, which means that all posts (and only those) are provided with hyphenation. And since it's client-side, it doesn't affect the feed or any other internal paths.

pyfpdf provides PDF generation without dependencies on other packages. However, it says "ported from PHP" up front. But if that doesn't deter you and you want to produce simple PDF outputs, you might not be so badly served with it.

Processing.js v1.0 Released and it is still a really nice toy. Now it is almost on par with the big Processing in terms of features.

F# in MonoDevelop and cross-platform web sites & screencasts | Blog | TomasP.Net contains a lot of information about F# on Mono for Linux and OSX.

JQTreeTable does not use DataTables, but it is still quite interesting as it provides a Finder-like table representation for hierarchical data.

JLOUIS Ramblings: On Erlang, State and Crashes explains well what the "in case of error, crash" mantra of Erlang is really about - namely the construction of an application as layers of supervisor processes and error handlers. The essential part is the structure of the application - just crashing is not enough, the architecture must also be prepared for it.

atomo - very interesting language, very flexible and compact. I stumbled upon it because someone built a Mongrel2 Adapter for it. What is interesting about atomo for me is that it is yet another new language with prototype-based object orientation. Something that is tried far too rarely (other languages in this area are Slate, Self, Io, Newtonscript and JavaScript).

Also interesting: atomo is embedded in Haskell and thus provides a dynamic scripting language for Haskell environments and of course a good integration into the Haskell world. There was something similar with one of the first Perl6 prototypes, which was also built in Haskell (Pugs).

Kilim - stumbled upon this while browsing the Orc documentation, a microthread library for Java.

Orc Language - haven't read any of this yet, but it looks quite interesting. The core is Cor, a functional language without side effects, and on top of that Orc, which is used to orchestrate services in distributed systems. All of this in a quite appealing, compact syntax on the JVM. Could definitely take a look at it as an alternative to Scala and Clojure, with Java being integrated as an external service, thus allowing quite simple construction of distributed systems where parts are implemented in Java. Reminds me in many points strongly of the ideas of Erlang (generally assume a distributed system, but still keep parts local for performance reasons), but I find the syntax much more pleasant. And with the JVM a much more widespread VM than Erlang's BEAM.

Twisted Orchestration Language in Launchpad - and someone has ported the Orc combinators to Python, using Twisted. However, I personally find Twisted rather disgusting to program, but to each their own ...

Tornado Web Server Documentation - I should really take a closer look at Tornado. I just built a web service for a side project using web.py, which was surprisingly simple (and dirty). Tornado is based on a very similar concept, throws in Django-like templates, and also offers a good asynchronous server and support for asynchronous sockets and HTTP requests. Could be a good alternative for web services that require few resources.

Oracle cooks up free and premium JVMs - and Oracle begins to try to cash in on Java. If it works, Java could soon be in a similar situation to .NET: the free implementations lag behind the scope of the commercial ones. What this means for alternative languages on the JVM remains to be seen - but it will certainly cause some problems. However, the JVM world is large enough and equipped with sufficient alternatives, and Oracle is not Microsoft. Therefore, this could all just be a storm in a teacup and at most affect the typical Oracle victims.

Eventlet Networking Library - I need to take a closer look at this, the monkey-patching of standard libraries to trivially use them in an asynchronous environment looks very interesting.

Links

rfc1437 | Content-type: matter-transport/sentient-life-form - Strong trends towards "throw away with archive and start from scratch" with slight options for "throw away, static archive and maybe shovel a part into the new platform if I find the time". The link shows where I'm currently playing around. Wordpress with a few small plugins and an nginx caching front.

Bitrot

I've been hit by this as well. My old blog software probably won't be able to survive unchanged. Old Python version (2.3), old (very old) Django (0.91), old PsycoPG driver (1.0), old PostgreSQL (7.4) and all of this on an old Debian (a wild mix of various versions with backports and custom programs and several failed upgrade attempts). Argh.

Well, I'm still torn between "rewrite" and "throw away". The latter has the charm that I won't have to carry all that junk around anymore. And honestly, nothing particularly interesting ever happened on my blog anyway. Maybe I can set up a wget mirror beforehand and dump the whole thing somewhere statically, as an archive.

Rewriting naturally has a lot of charm as well, but converting thousands of old entries (over 4000 articles and over 4000 links, plus almost 200 images) from 8 years (first entry on 3.11.2002) of blogging doesn't sound like fun. And presumably, thousands of the links are outdated and obsolete anyway.

No idea what I'll do, maybe I'll try to bring the Metaeule to the new box first, where I only have the problem that PHP4 is no longer in the Ubuntu repository for 10.04 and I therefore have to force the owl onto PHP5 (and that with code based on Wordpress 1.5 - I must really be crazy).

Or I try to install an ancient Debian with the packages used at the time - the box doesn't run in the front anyway, but behind other machines, so the hacking risk is rather low at this point. The Metaeule naturally also has a few thousand posts in the archive (only 8291, which is almost nothing), but if I can keep the old software running (some security patches have been applied over time, so it can actually continue to tinker along), I don't necessarily have to tackle it.

Somehow, the internet was also such a really bad idea ...

Twisted Orchestration Language in Launchpad - and someone has ported the Orc combinators to Python, using Twisted. However, I personally find Twisted rather disgusting to program, but if you like ...

Kilim - stumbled upon this while browsing the Orc documentation, a microthread library for Java.

Orc Language - haven't read anything about it yet, but it looks quite interesting. The core is Cor, a functional language without side effects, and Orc, which is built on top of it, is used for orchestrating services in distributed systems. The whole thing in a quite appealing, compact syntax on the JVM. One could certainly take a look at it as an alternative to Scala and Clojure, Java is integrated as an external service, which makes it quite easy to build distributed systems in which parts are implemented in Java. It reminds me in many points strongly of the ideas of Erlang (generally assume a distributed system, but still keep parts local for performance reasons), but I find the syntax much more pleasant. And with the JVM a much more widespread VM than Erlang's BEAM.

Interactive Fabrication » Beautiful Modeler - wow, that's incredibly cool.

Tornado Web Server Documentation - I really need to take a closer look at Tornado. For a side project, I've built a web service with web.py, which was shockingly simple (and dirty). Tornado is based on a very similar concept, throws Django-like templates into the mix and offers a good asynchronous server and support for asynchronous sockets and http requests right away. Could be a good alternative for web services that need few resources.

Fat Cat Software - iPhoto Library Manager - since I was stupid enough to make a photobook on a different Mac than usual (well, the usual one was always occupied), I'll probably have to take a look at this to see if I can merge my books onto a single machine. It's quite annoying that Apple doesn't offer any merge function in iPhoto. With a notebook and a desktop, you quickly end up with separate libraries. If Lightroom supported book printing, I would have been gone from iPhoto a long time ago. Everything is somehow not quite satisfying.

The V4Z80P – A Z80 Based Laptop @ Retroleum - here someone not only builds his own computer with his own system, it's also a laptop. Or something similar anyway.

Oracle cooks up free and premium JVMs - and Oracle begins to try to cash in on Java. If it works, Java could soon be in a similar situation as .NET: the free implementations lag behind the scope of the commercial ones. What this means for alternative languages on the JVM remains to be seen - but it will certainly cause some problems. However, the JVM world is large enough and equipped with enough alternatives, and Oracle is not Microsoft. Therefore, this could all just be a storm in a teacup and only affect the typical Oracle victims.

Kunsthalle Bielefeld: Der Westfälische Expressionismus - I think I actually have a reason to drive to Bielefeld.

Mediathek für Mac OS X - I need to check this out. After all, archiving is now the viewers' job thanks to stupid private broadcasters (and politicians who have made themselves their errand boys).

Panasonic DMC-GF2 Preview: 1. Introduction: Digital Photography Review - I hate you, Panasonic. Now I want the cute little GF2+14mm kit. Menno. First Apple with the MacBook Air and now Panasonic, everyone just wants my money.

Eventlet Networking Library - I need to take a closer look at this, the monkey-patching of standard libraries to make them trivial to use in an asynchronous environment looks very interesting.

don’t look » columnManager - interesting jQuery plugin that enables efficient column show/hide for tables. If this could be combined with the DataTable plugin, it would be a very practical thing.

John Resig - Simple JavaScript Inheritance - a very nice pattern to simulate class-based inheritance with JavaScript (for the situations where this structure makes more sense than the normal prototype system of JavaScript).

jQuery column cell selector - bramstein.com - another jQuery plugin, this one provides a practical pseudo-selector for columns in a table to then make changes with JavaScript.

Inform 7 - meanwhile, Inform has become a language similar to English for creating interactive fiction. And it has received a GUI for the Mac with which you can analyze and test the various story paths. Somehow impressive what has all emerged, just for text adventures.

Coffee on the Keyboard » Bleach, HTML sanitizer and auto-linker - Library from Mozilla that offers white-list based HTML cleaning. The Mozilla people usually know what they are doing, so this library might actually be useful.