programmierung - 16.5.2011 - 24.6.2011

DocumentClouds VisualSearch.js. Interesting JavaScript library that implements a quite powerful search field - you can search for normal texts or for facets of the data (i.e. specific fields such as title or author) with automatic completion for these fields. This is particularly interesting for document search in semi-structured data sets and the presentation in the browser is nicely done. Good compromise for search fields into which you do not just want to put simple text searches like Google, but possibly also restrictions on metadata, without the user having to know all the options for metadata by heart in their exact syntax.

SourceTree | Mercurial and Git GUI for Mac OS X. That looks really good - although 45 euros is not exactly cheap. However, it can handle Git, Mercurial, and Subversion, so maybe I should take a look at it (there is a free trial version). Update: Short test by me and I really like it - you can integrate external diff tools (Changes is unfortunately only supported as a diff, not directly as a merge) and always have the same interface, regardless of which server is behind it. This takes away some of the pain of Git. Version tools are included internally, so you don't even need to have the command line versions installed. Looks really interesting.

GitHub for Mac. I'm a convinced Bitbucket user because of Mercurial, but this thing looks really good, you could easily switch to git just because of the interface. I'm often a mouse pusher and optics clicker underneath it all.

traits.js - Traits for Javascript. Interesting experiment for JavaScript - Traits offer better composition than classic classes and more structure than JavaScript's prototype-based OO - and here the features of Traits are well mapped to the existing JavaScript features (e.g., objects are mapped via closures). The disadvantage, as with all such language extensions, is that you can usually work with them yourself, but other libraries do not use them and thus the advantage in projects that heavily rely on third-party libraries is rather minimal.

Technical Discovery: Speeding up Python NumPy, Cython, and Weave. Interesting for number crunchers who don't necessarily want to switch to PyPy, but want to stay in the normal CPython world. Provides a quick comparison of NumPy, Weave, and Cython.

Leos Home Page. Leo is an outliner and data organizer - that's nothing special at first. But this one is written in Python and portable (everywhere there is PyQT, at least in version 4.9, older ones also had Tkinter as a surface library). Can also be used as an IDE for Python.

Mozilla Firefox Add-on Builder and SDK - for creating extensions with HTML5, CSS, and JavaScript. The Builder is a web-based IDE and the SDK provides a whole stack of APIs for programming extensions.

Python/Harmattan - MeeGo wiki. Very interesting in connection with the N9: a complete (and they really mean it - almost all parts of the system are accessible) API for MeeGo in Python. With this, you can program the entire phone completely in Python and also publish the applications created in this way in the Ovi Store (Nokia's variant of the AppStore). Nokia already had something similar with Symbian in the form of Python S60 and the tablets under the predecessor of MeeGo, so good Python support has almost become a tradition with them.

gcc python plugin and static analyser for CPython sources. In a very strange way cool. I mean, seriously: who looks at gcc and thinks spontaneously "oh, there I should embed a Python interpreter"? Yes, I know, the answer is "the author of this plugin". Strange things some people do ...

A What Is Inside A Cat. A very interesting document that describes the implementation of Wraith Scheme in great detail, specifically also the implementation of parallel processes.

Skulpt. A Python implementation in JavaScript, client-side. Also in the browser. Nice hint that you shouldn't even try to crash the server, you would only stub your own toe ... (otherwise, this is probably one of the many projects "just because it can be done")

Maxima. Nice book with many examples of how to use Maxima. Since the Schockwellenreiter just wrote about Maxima again and I liked the wxMaxima interface in his post quite a bit (and unlike some other programs, it also looks good on OSX), I will probably play around with it a bit. Especially since it is much slimmer than Sage (even if it of course can do much more, as it integrates many other math packages).

JQuery Form Wizard. Interesting small plugin that processes complex forms through steps - and the routes through the form can depend on the data chosen in a previous step. Additionally, #-hacks are used to make the form steps appear in the history (in this form, this is absolutely fine in my opinion).

josevalim/elixir is a programming language for the Erlang environment and its virtual machine, which integrates into the Erlang environment and has a similar focus as Erlang. However, Elixir provides a Ruby-like syntax and some interesting extensions as well as, of course, interoperability with Erlang code (otherwise it wouldn't make sense, because Erlang is not just the rather strange language, but above all the server structure and the libraries).

Tumult Hype. Interesting - I had actually expected this much earlier, a tool for creating animated presentations using only HTML5 and JavaScript. Essentially what Macromedia Director or Asymmetrix Toolbox used to be.

Interactive Console for the C Programming Language - Google Project Hosting. Sounds interesting if you want to play around with Low-Level-APIs and sometimes want to interactively crash your system.

Asciiflow - ASCII Flow Diagram Tool. Diagram. In ASCII art. With an interactive environment in JavaScript. In the web browser.

Florian (Author) thinks I might be interested in burrahobbit and he's right: persistent data structures (i.e., functional persistence) in Python, with time behavior comparable to normal data structures. So far, he has dictionaries and sets.

Cloud9 meets Bitbucket - Cloud9 IDEs Posterous. That's nice, because Mercurial is my preferred versioning tool and Cloud9 can now directly support it - and thus also access Bitbucket projects. It's getting more and more interesting.

Why aren't you using git-flow? - Jeff Kreeftmeijer. Sounds like a few sensible tools that make git a bit easier to use for standard cases. Of course, you can manage everything on your own, but why did you buy a computer in the first place ...

Comparison to Python | Cobra - just blogged for completeness, as the language has some interesting ideas. Specifically, I would like the contracts as explicit syntax, Python only allows similar things in a roundabout way. However, the language is otherwise just one of the many niche languages. And honestly, Python is more than just the indentation - what about the very sophisticated metaprotocol of Python in the various niche languages? PyPy in combination with Rpython and the new ctypes for pypy is much more interesting.

Clack - Web Application Environment for Common Lisp. This finally looks really nice and lean - most Common Lisp web frameworks are just too big, too complicated. This looks much more pragmatic, a simple routing, a lean request and a function that reacts to it. One could play around with that, installation is trivial thanks to Quicklisp (I'm so glad that Quicklisp exists now, the asdf-install hassle was really annoying). In its approach, it reminds me a bit of Turbogear for Python - various existing libraries are bundled with Clack, so to speak a lean web best practices. There is already an application framework that also runs in the minimal environment, Caveman.

Polycode. Looks like something like Processing for C++ and Lua - so it's actually a C++ library for creative projects (2D/3D), but at the same time there is a Lua-based scripting layer with which you can program directly with the same APIs. Sounds a bit similar to Cinder, except that there is no scripting solution included, but only a C++ library.

CouchDB: The Definitive Guide. And since it fits so well, here is the link to a book on CouchDB for online reading. It is also available online in German (and of course in English. And also in French). However, the German version seems to be incomplete - you keep encountering English pages.

Simple JavaScript Applications with CouchDB - CouchApp.org. Interesting approach: entire applications are implemented in HTML+CSS+JavaScript and stored directly in the CouchDB, also persist their data in the CouchDB. Reminds me a bit of Frontier, only here CouchDB and JavaScript are used instead of the Frontier Roots and UserScript. The big advantage: if the application actually gets by with the elements used, you get the easy scalability so to speak for free - because CouchDB can be easily scaled by starting multiple instances. Maybe it becomes clearer what it means in this tutorial.

Its About The Hashbangs. Blogged because it is a pretty good description of what is wrong with these #! in addresses. The part after the # is only client-side, the server never sees it - any form of server-side redirection and server-side routing is completely out of the question. Also, server-side access controls are largely out of the question, the server only sees the main page. For single-page applications like TiddlyWiki, this is all fine - everything is already in one file and it is the declared purpose of these applications to be structured this way. For websites like Twitter or even news sites like those of Gawker Media, it is simply absurd. Twitter can perhaps guarantee due to its banal structure that the URLs to tweets also work with #! in the long run, in that a corresponding JavaScript part remains in the homepage forever (which is already pretty silly), but news sites will sooner or later simply drop the old #! URLs - and thus produce massive link rot.

Shedding Bikes: Github's Favorite Joke. Why social networks in combination with code and geeks quickly become asocial networks. One reason why I also keep my distance from Github - I have an account there to set favorites and make bug reports, but I prefer to host my projects on Bitbucket. And even then, I'm very glad that Mercurial (as well as Git) as a distributed version system allows me to switch to other systems or switch to self-hosted sites (Rhodecode would be useful to install in the long run). Update: Github reacts and finally builds in blocking.

cloud9 is the software behind Cloud9ide.com - an IDE that runs entirely in the browser and is programmed in JavaScript based on Node.js. An interesting project, the current version also offers an offline mode, so you can easily work on projects on your server via the browser and then continue working locally in the offline case (on the train or in WLAN-sparse hotels in Swabia) and later resynchronize. I myself am IDE-incompatible, but programming in the browser has fascinated me for many years, simply because you can access your projects from anywhere, even without having your own computer with you. If I ever want to take a closer look, someone has written an installation guide for Ubuntu. Support for iOS devices is also in the works - so this could also be a nice way to access your own projects via iPad while on the go.

Spring cleaning for some of our APIs - The official Google Code blog. Good example of why cloud services are simply a bad idea as a basis for projects that have any significance beyond "playing around". The provider of these cloud services and APIs can simply shut them down at any time - and Google once again shows how to piss off a large number of developers with such actions. I can only quote from one of the comments: Why should we ever use any API from Google again?

clj-android. And while I'm at it, a framework for Clojure and Android. Although it all seems a bit raw (for example, it requires a fork of Clojure to work around some issues with Dalvik). And just for playing around with Clojure on the go, the Clojure REPL might be interesting.

scalaforandroid - Scala for Android. And for completeness, a project for creating Android applications with Scala. Scala does require a large runtime library of its own, but scalaforandroid uses a tree shaker (Proguard) that only transfers the used classes of the library during packaging, keeping the volume small.

mirah/pindah - GitHub. Mirah is a language inspired by Ruby, but continues to work with static types and is therefore closer to Java in terms of performance. Type inference takes the pain out of types, as you can often skip the declarations. Codemakros also offer interesting approaches for internal DSLs. Pindah is a framework and toolset for writing Android applications with Mirah. Mirah offers the advantage over JRuby that no separate runtime and no dynamic interpretation is added - the applications should therefore be significantly closer to Java applications in terms of performance.

Ruboto: Ruby on Android. A small article at the IBM Developernetwork with a small example application in Ruby for Android. Ruboto currently has the problem of rather high startup times for applications and rather large application size, as the entire JRuby is delivered with it.

Ruboto is a framework and an app for Android devices. With the framework, you can write Android apps in Ruby (based on JRuby, which, unlike JPython, can not only keep up with regular Ruby but also sometimes leads in performance) and with the app, you can script interactively in Ruby directly on the Android device. Maybe a reason to dust off my Ruby-Foo ...

Zotonic - Hmm, should I take a look at this? A CMS in Erlang that has some interesting features on the list - and aims a bit in the direction that Drupal also has, i.e. rather a CMS construction kit than a pure pre-made blogging solution. The admin interface also looks quite tidy.

hij1nx/SugarSkull - GitHub. Because I recently had single-page JavaScript apps (an example of this type of application would be TiddlyWiki): this is a simple library with no prerequisites, with which you can build simple parsing and automatic function start for hash-routes. So basically something like the Django URL Handler, but in JavaScript and purely on the client.

Seesaw - GitHub. Since GUI programming almost always annoys me, this is quite interesting: a Clojure library that brings Swing into a much more compact form. So that you don't have to write your fingers raw for simple GUIs. And since MCL-IDE now also supports Clojure, it might actually be time to take a closer look at the whole thing.

Single Page Apps with Node.js. - blog.nodejitsu.com - scaling node.js applications one callback at a time.. A few interesting projects linked from the article that are interesting for web applications that live in a single HTML page. Bookmarked for later.

Roundabout for jQuery by Fred LeBlanc. Nice effect, even if I'm not sure right now what I would need it for (ok, you could use it to display images, but personally I prefer Lightbox or something similar). It's probably just a gimmick, but sometimes that's quite useful.

Cloud Foundry - Make it Yours!. Interesting project for building a cloud platform based on Ruby. The source is freely available on Github. CloudFoundry is probably what runs under ActiveState Stackato (where Perl and Python are supported). Such a private cloud can also be quite interesting for your own projects, because you can develop locally at home or on the go, and the deployment to your own root server is simple and easy. At some point, I think I want to set something like this up (currently, every service is set up individually for me, which can be quite annoying in the long run).

Introducing JetBrains dotPeek - dotPeek - Confluence. For those curious about peeking into .NET assemblies (and Mono assemblies too, although the source is often available there anyway).

QuickSilver Network. Hmm, had I already mentioned that? Doesn't matter, it's cool. It's a Smalltalk-like development environment, but with JavaScript as the language and in the web browser instead of in an application. However, it's all still very raw and some things don't quite work (at least in Safari), but somehow still nice. Somehow, I could imagine someone combining it with TiddlyWiki (for persistence) and then making a JavaScript image system like the old Smalltalk systems, but on the web. Would be somehow funny. Pointless, but funny.

On TermKit. A pretty cool project for reinventing terminals. In this case, the output is made as HTML and the terminal is not rendered as a simple console but as a browser window. This way, for example, you can make directory lists graphical or output images directly. It also works on things like pipes and the idea of how data is transported between tools, so that they can all work universally with it - JSON is used here. The whole thing makes a well-thought-out impression.

AI art | painting robot | art | expert systems. Something else - a real robot controlled by Lisp (at least for prototyping). So not a virtual robot like Turtle graphics, but real hardware that moves.

xmlisp - eXtreme Media Lisp: Rich media cross-platform programming for 3D (OpenGL) and 2D applications. I think I've mentioned this before, but I'm not sure. Doesn't matter, repetitions aren't unusual, and this is really interesting - a Lisp environment with particularly good support for 2D and 3D data. Has a lot more on the TODO list - the goal is a Lisp environment specifically for game programming and other graphical, interactive programs. A bit like Processing.

MilkPack - Edgar Gonçalves. Interesting project that implements a task list that communicates with Remember the Milk on the Internet. The interesting thing about it: it is written in Common Lisp and intensively uses the Objective-C Bridge for OpenMCL.

MichaelMacInnis/oh. A shell in Go. The shell has some interesting features, for example prototype-based object orientation, first-class functions, and explicit channels (which other shells have implicitly behind pipes). Looks quite interesting at first glance.

Javascript PC Emulator - Technical Notes. Yes, a PC emulator. Based on QEmu, so quite mature code. Boots Linux in the browser. Because it can.

Lightroom Developer Center. Since I want to take a closer look at this again soon, maybe I will create my own plugin for easy sync to WordPress after all. And Lua is not such a terrible language.

Microsoft Small Basic. In a strange way, nostalgic. A Basic in the style of QBasic, but for Silverlight and the browser with libraries for graphics output and similar things. Essentially something like Processing, but .NET instead of JVM and Basic instead of Java.