programmierung - 15.6.2011 - 18.7.2011

Elnode - an Emacs version of node.js. Another project from the "because it can be done" category - I don't believe anyone would spontaneously answer "Emacs" to the question "how do I want to run my web services". But well, the operating system with built-in basic text processing functions can also represent an asynchronous web server.

Replication, atomicity and order in distributed systems. A very interesting article about distribution and ordering in distributed systems with parallel execution - because it's not really trivial. Worth reading just for the links to various projects in that area. At the end a bit of a cliffhanger, because it refers to an upcoming article - hopefully it will come, because its topic sounds interesting too.

Kivy: a crossplatform framework for creating NUI applications. Interesting new GUI library for Python, runs on various platforms (and in addition to the three major desktop environments, Android is already included as a mobile one) and can use OpenGL to accelerate output (internally they have a JIT that compiles the basic functions and thus enables fast execution).

Simple, Secure, Scalable Web Development with Opa. The Opa book is, at first glance, a very comprehensive introduction to the Opa language and its motivation. What also excites: the installation under Linux is based only on basic packages, you don't first download half of the internet and install just because you want to use a language. (What is rather not so positive with Opa experiments: very long compile times - even the examples provided in the book, which are not exactly overwhelmingly large, quickly reach quite significant 15-20 seconds ...)

Bulbflow: a New Python Framework for Graph Databases. Even though I keep thinking that graph databases are so 70s, not everything old is automatically bad - IMS is still around and very interesting for some purposes. And this sounds interesting, something like DBAPI for graph databases, so that you can change the database in your projects without having to rewrite everything completely.

The Pragmatic Bookshelf | Core Data. The book sounds quite interesting, Core Data is also fully supported in MacRuby, so it might be interesting to get and read it.

Responsive Applications - Mono. An article about the different ways to build applications with GTK# so that they respond quickly and do not block the user interface, even though GTK# is single-threaded (i.e., the UI can only be accessed by the GTK# thread).

MonoMac and XCode 4

Ouch, that really got me - I wanted to play with the GUI tools, but MonoMac doesn't fully support XCode 4 yet and only has this to say:

Developers that use Interface Builder are recommended to install Xcode 3.2.6 for the time being. MonoTouch News.

The bad part: that's from March. That's way too long without support, so MonoMac is just half a tool (if at all). Running XCode 3 and XCode 4 in parallel is also not an option (both want to be in the same folder). De facto, you're either stuck with XCode 3, or MonoMac is out. Or you build your GUI with GTK# - then XCode doesn't matter (the compiler part of XCode 4 is supported), but then you can forget about the AppStore (and GTK# doesn't really look great). Damn.

Jtalk Smalltalk. No idea why this has slipped past me so far - but a rather complete-looking Smalltalk implementation in JavaScript including an IDE with a class hierarchy browser is quite remarkable, even if it's not the first project of its kind (Clamato would be another, but that seems largely dead).

jQuery vs MooTools: Choosing Between Two Great JavaScript Frameworks. I've lost a bit of touch with MooTools, but before I got to know jQuery and its many plugins, it was my preferred JavaScript library. So it's interesting to read how it compares to jQuery (written from the perspective of a MooTooler).

asuhan / happy. Also not uninteresting: a PHP interpreter and compiler in Python based on the PyPy toolchain. Okay, it's not a showstopper, I don't think I've often had the question "how can I execute PHP code in Python" - but for example, if a site based on Django wants to provide users with PHP as a scripting language, something like this could become quite interesting - PHP is after all one of the best-known scripting languages for the web, but Python with some frameworks is simply much more interesting from a production perspective.

cfbolz / Pyrolog. Had I already seen this? A Prolog interpreter in Python that uses the PyPy toolchain. Could be very interesting if you need a bit of rule logic in your programs but don't necessarily want to use external tools for it.

The Node Beginner Book » A comprehensive Node.js tutorial. If I really want to take a closer look at Node.js again, this (free!) book could be helpful. Or for others who have the same plan.

JQuery-Wysiwym - PushingKarma. Something that could become interesting for me: a Markdown (among others) converter in JavaScript. Can be used to build a live editor for Markdown code. Could this be extended for Restructured Text? Because that is one of the problems I sometimes struggle with, that I have ReST as input for Docbook/XML output, but then no suitable graphical editor.

pdf.js reached its first milestone. And since we're on the topic of JavaScript and PDF: with this project you can display PDF files without a PDF reader - just with HTML5 and JavaScript. Very interesting, if this is further developed, it could make the PDF reader completely unnecessary in many places.

PDFKit — A PDF Generation Library for Node. I think I should take another look at Node.js. And CoffeeScript. This PDF generation looks very interesting and could be quite practical for some projects. However, with such libraries, I always miss the high-level part - the actual layout. When will someone build a TeX engine in JavaScript? Hyphenator already provides very good hyphenation, but what is simply missing is a good layout engine for distributing text on defined pages. And please also with good support for table setting.

manuel/edgelisp. Because I can never keep my fingers off the parentheses - a Common Lisp dialect and its implementation that compiles to JavaScript and makes the Lisp code executable in the browser. It seems quite complete - many other projects only show the rudimentary elements, but here there are already generic functions and macros.

Paver/paver. Sounds interesting, like a mix of SetupTools/DistUtils and Make (or their high-level counterparts Rake/Cake). I might take a look, as it could be quite practical for Python projects - although the standard Python tools are already quite useful.

PerlDancer - The easiest way to write web applications with Perl. To complement my collection of Sinatra-inspired microframeworks for web applications, here's one in Perl. Not that I would necessarily want to use Perl again - it's rather listed here for completeness.

danlucraft/git.js. Wow, impressive. And potentially very interesting - git as a general synchronization mechanism is extremely practical and integrating git functionality into web applications could solve some problems well (e.g. when it comes to synchronization with other places, or of course for document-internal versioning). I have to take a closer look at some point, I already have one or two ideas on how I could use it. It's still quite rudimentary at the moment, but it's definitely worth keeping an eye on.

Stiivi / cubes. Just bookmarked for later: an OLAP library in Python that can be built on SQL databases or MongoDB. This could be interesting for some things at work.

Tree for policy-settings-basic in MeeGo Multimedia - MeeGo. Since it is often claimed that Prolog is such an esoteric language that no one would use in normal life: the part of MeeGo (we remember, this is the handset operating system from the Nokia N900/N950/N9) that triggers various settings depending on environmental conditions is written in Prolog. And it runs productively on the handsets.

DropKick - a jQuery plugin for beautiful dropdowns. Looks nice, even if it is of course mainly a visual gimmick. But sometimes visual gimmicks are also necessary.

Prowl - iOS Push Notifications. Is a very practical tool for the iPhone or iPad as a supplement, because you get nice APIs with which you can, for example, send messages from servers to the iPhone. Or you use Send2Prowl from Firefox or Prowl from Chrome to send a link directly to your iPhone.

Opa: Advancing web development to the next generation. I think I mentioned this in the old blog, but what the heck - now the code is on github and under an open source license. And the entire project is not just something that has recently come out - it has 10 years of research behind it, the people really know what they are doing. The idea is cool (and has already been adopted by others as well): a language from which all layers of web applications are generated, including JavaScript, HTML, CSS, and the backend. All of this with type safety and corresponding checks and, for example, resulting security against injections and XSS attacks. And the language runs on OCaml underneath, which is also not the worst language. I should really seriously deal with this, especially since distributed installation comes along with it - and thus a far easier scalability is given than with many other approaches (the one from OPA reminds in a certain way of the one from Erlang-based systems). Oh, and web applications are then simply just a single executable - and not gigantic directory structures with thirty-nine XML files (or YAML files) to customize.

SymPy. Symbolic mathematics with Python directly in the Python shell. Together with NumPy for matrix operations and SciPy for various other scientific functions, Python becomes quite a respectable mathematics system. Nothing really new except perhaps SymPy itself.

PyPy Status Blog: Global Interpreter Lock, or how to kill it. Wow, that sounds good - the PyPy project wants to mitigate the GIL through STM (Software Transactional Memory) - and has quite an interesting approach for that. Some things are only possible through PyPy, because the corresponding infrastructure for code transformations is available there, which is missing in CPython.

jsPlumb for those who want to display diagrams (i.e., connected graphs of objects) and need to fiddle with them to see them better or to structure them. Or simply because it's funny and cool.

Paper.js is a graphics engine for the Canvas element. It all looks very nice and has a lot of features. It's impressive what you can do with JavaScript in the browser - and this could be interesting for projects, unlike booting Linux. It all comes from the Illustrator environment and is oriented towards Scriptographer, a plugin for Illustrator with which you can program graphics elements in JavaScript.

Sync BitBucket and GitHub - Ramanas Blog. If I ever want to switch, or simply want to provide repositories for both git and bitbucket, this could be helpful. Also just to convert repositories.

Issue Bucket. There is also a BitBucket client for iOS, but it is riddled with iAds and unfortunately very limited in features. And it looks more like a finger exercise in surface design - very plain, one could almost say "loveless". But at least you can get to the most important things to look at and it costs nothing.

iOctocat is your GitHub companion for the iPhone and iPod Touch. GitHub is becoming increasingly interesting - there is also an interesting GitHub client for iOS. And it is Open Source.

NancyFx/Nancy. Nancy is already much closer to Sinatra or Scalatra, but is actually based on C# - but maybe you can also just write modules in F# there, the interoperability of the two languages is very high (comparable to Scala and Java).

Bistro. This is now a web framework for F#, inspired by Django (among others). Unfortunately not as lean as Scalatra or other micro-frameworks, but perhaps still worth a look.

scalatra/scalatra. This is something like Sinatra, but not for Ruby but for Scala. It has direct support for Scalatest and also offers some nice features and DSLs to quickly and simply get to the result - could be interesting especially for creating web services in Scala.

The Larch Environment. Worth a look - a visual programming environment for Python. Interesting detail: objects are not just displayed textually, but also graphically represented via a dedicated mechanism - sounds a bit like output-recording from CLIM. Additionally, the whole thing is structured more like an interactive document - comparable to various mathematical systems (e.g., Mathematica or Maxima). Unfortunately, it's not based on the standard Python environment, but on Jython - so JVM as the runtime underneath.

I should check this out - it allows you to run AppEngine programs on your own servers that are based on Django (the AppEngine APIs are emulated using Django means). Certainly better than using the AppEngine Dev-Server directly.

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