programmierung - 16.3.2005 - 20.6.2005

del.icio.us mal Wiki = Code Snippets

Code Snippets is a system where you can insert small code snippets and assign tags to them. So really something like a wiki for source code with tags. You can quickly group by tag combinations and then see all the snippets for this topic. And of course, you can easily add your own snippets. Could be very interesting with a bit more content - so to speak, living cookbook books.

WebKit, WebCore and JavaScriptCore - Open Source

Surfin' Safari reports that WebKit (the Objective-C API for the Safari renderer), WebCore (the base code) and JavaScriptCore (the base code for the JavaScript implementation) are now open source. With CVS repository and public bug tracking system.

Ultimately, this is of course a fork of khtml and kjs, but by disclosing the sources, everyone can now freely use each other's code and thus the problems between the projects should be off the table for now. Contributions are also to be accepted.

WebObjects Part of XCode 2.1

In the WebObjects 5.3 Release Notes I saw and immediately checked: WebObjects is now part of the XCode 2.1 (available for ADC members) distribution. I downloaded the over 700 MB and checked: yes, there is a WebObjects.mpkg in it. Quite strange, because so far WebObjects was not a cheap package - is now the whole deployment free, or do you still need some kind of runtime for the generated applications that then costs money again?

Emacs on the metal

From the Movitz mailing list: Emacs on the metal. Someone wrote an Emacs clone in Common Lisp and then created a bootable Movitz kernel image from it. Movitz is a system for programming embedded applications in Common Lisp - and thus the Emacs clone is the first truly bootable Emacs. Sick

The CHICKEN Scheme Compiler

A frequently overlooked (also by me) Scheme implementation is the CHICKEN Scheme Compiler. What's special about this implementation: in addition to the interactive interpreter, there is a compiler that produces portable C and compiles it into loadable modules using a C compiler. This makes this compiler particularly good for integrating C libraries. In principle, this is still quite similar to Gambit-C, another Scheme implementation that uses C as an intermediate language.

But Chicken goes beyond Gambit-C in terms of generated C code - the system is explicitly designed to be mixed with C, while Gambit-C simply uses C as a portable assembler. In Chicken, the FFIs (Foreign Function Interfaces) are much simpler. This is evident in finished interfaces to various databases such as metakit (used in the Python Desktop Server), PostgreSQL, and sqlite.

In addition, Chicken has gained a nice infrastructure of network-installable extensions with the Eggs - with web server, database, and many other delicacies. This of course helps immensely in programming - I have come to love such an infrastructure of ready-made code with MZScheme, Python, and Perl.

Chicken also compiles under Mac OS X. At the moment, the compiler is running in the background for me.

Algol 68 Genie - An Algol 68 interpreter. Obercool. Algol 68 is indeed a vintage language, but a fascinating one: the only one where a metalanguage was defined for the definition of the language itself, in which the definition of the language itself is written. The Algol68 Report is still one of the most fascinating programming language standards I know.

LispWorks Personal 4.4.5

LispWorks Personal - the free (free beer-free) LispWorks version is available in the new 4.4 release and also runs with Tiger. LispWorks is currently the most interesting Lisp environment for the Mac, as it integrates relatively well into the system. And the Personal version is quite sufficient for playing around.

TBNL - A Toolkit for Dynamic Lisp Websites enables generating dynamic content with Common Lisp. Essentially, it's something like a FastCGI solution for Common Lisp.

Dive Into Greasemonkey is a free online book by Mark Pilgrim about programming userscripts for Greasemonkey. With these userscripts, you can change websites when they are displayed using JavaScript - for example, cut out firmly integrated advertising blocks, rewrite links with affiliate IDs so that your own is used, simply repair strange HTML so that you can actually do something with the website, or all kinds of other fun things.

FramerD is an object database (ok, a Framestore - but it's something similar) with an integrated DB server, CGI interface, and Scheme scripting language. Ideal for building knowledge databases, as FramerD is optimized for the pointer-heavy structures involved. But also very exciting, as you get a Scheme with server and ODB. I definitely have to play with it, especially since it should also compile on OS X (though it doesn't work for me right now). And it is licensed under GPL. And for the snake charmers among the monkey programmers, there is also an experimental Python library for accessing FramerD...

CamlServ is a web server in OCaml. I haven't looked at it in detail yet, but it could be interesting - OCaml is a language of the ML family (or the ML-like languages) with various very interesting extensions (e.g. a powerful object system). Unfortunately, the project does not seem to be very active anymore - last release from 2003 ...

Quartus Forth 2.0.0 is the new version of native-code Forth for the Palm platform. I've played around with it (and its predecessor PilotForth) for a long time - I'm just an old Forth fan.

yadis: yet another distributed identity system is a specification for a distributed identity system. Let's take a closer look.

Free Pascal 2.0 is out

Free Pascal is a Turbo Pascal and Delphi compatible Pascal compiler. The new version supports significantly more CPUs and platforms - including Mac OS X. And for Panther there is also an XCode integration. Finally, a Pascal that works for the Mac. Not that I would do much with it today - but somehow Pascal was a part of my programming history (after all, I took care of the Gateway software Erwinsgate for the MausNet, which was written in Turbo Pascal, for a long time).

May seems to be the month of vintage languages for me.

OpenCOBOL - a COBOL compiler

OpenCOBOL is a Cobol compiler that compiles Cobol to C and then lets gcc loose on it. Yes, I confess, 10 years of my professional career were wasted on Cobol.

XDS Modula-2 / Oberon-2 Compiler

The XDS Compiler is a whole family of extremely good compilers for Modula-2 and Oberon-2. I know them from my DOS days, I worked a lot with them - they used to be purely commercial, now they are freeware (but not Free Software or Open Source - Free as in Free Beer, not Free Speech). There are native compilers for Windows and Linux 86 and - my personal favorite - XDS/C Compiler, which compiles Modula-2 and Oberon-2 into surprisingly readable C. Unfortunately, the XDS/C Compiler is only available for Windows and Linux 86 - an OS X version would be nice, but is unfortunately not available.

Sparkline PHP Graphing Library provides small, compact graphics that fit well into text - ideal for example to better visualize trend data.

KDE developers annoyed with Apple - because they once again don't understand how to work in a team and send patches to an upstream project. Collaboration between companies and open source projects is still problematic - companies simply have a completely different agenda than the OS project.

The .emacs File by Bill Clementson. Shows very nicely why one should actually consider using Emacs. Particularly interesting for Common Lisp users is his customizing for Slime for integrating various Common Lisps.

Those who only occasionally work with PostgreSQL, so to speak, want to use it as a desktop database: PostgreSQLX is a compilation of the PostgreSQL server that can be easily started and stopped as a Mac application. Ideal for developers. Then also the PGAccess interface and you can do without something like Microsoft Access. Of course, all of this only from 10.3 (it's about time 10.4 comes out and I'm up to date at home again).

Borland open sources JBuilder - wow. I didn't see that coming - it's basically a surrender. Can Borland stay afloat without JBuilder?

Striped Calendar for WordPress

First plugin from my picture blog (now out) is the Strip Calendar. Basically a normal WordPress calendar - only not as a block for the sidebar, but as a strip to place it over the content. Since you usually have more space to waste in the length of a page than in the width and since someone might want to break with the rather worn-out format where the calendar is in a sidebar, you can now simply install the strip calendar. The code for installation is trivial:


< ?php get_strip_calendar(); ?> ```

Just put this in the header.php or wherever you want the calendar. Done (of course first unpack the plugin to wp-content/plugins/ and activate it in the administration!).

Practical Common Lisp is a new book about Common Lisp with many practical examples. Finally, a Common Lisp book that doesn't just delve into rather theoretical examples but addresses practical topics such as spam filters, web servers, HTML generation, ID3 tags, and other stuff. The book content is available to read online.

Bistro Intro is a Smalltalk variant that runs on the Java VM. I didn't know that before.

'Cool it, Linus' - Bruce Perens - a bit more information about the BitKeeper story. And I agree with Bruce - Linus should never have started this silly BitKeeper business in the first place. Andrew Tridgell is just doing what he does best - cracking proprietary protocols. It's silly to attack him for that.

Homemade system as BitKeeper replacement - sometimes the arrogance of OSS programmers bothers me, who always think they can do everything better than others. How much more synergy effects would come into play if these programmers would concentrate their - undoubtedly present - programming qualities on a few projects? A good source management system with fast patch handling we could all use - but no one is served with two dozen half-baked solutions ...

/IE7/ is a project that teaches IE6 CSS properly using a JavaScript library. This should also make :before and :after work in combination with content: - not entirely unimportant for HTML-free rounded corners or HTML-free link identification through symbols ...

Simulation of :before with content: in IE6

The IE6 just can't handle :before when you want to insert content into the page via content: in the CSS. Quite annoying if you use it. The IE7 project that I wrote about in the previous article doesn't work reliably for me either - for example, under a Citrix server it won't execute it, probably because some security settings are missing there. Strange. Anyway, I looked at the problem myself and found a fairly compact solution, at least for my specific version of the problem: I just want to place icons before a link.

For this, links have one of three classes or no class: class="zu" defines a collapsed navigation element, class="auf" an expanded one, class="ohne" a link that should not be specially beautified, and all other links get a standard icon.

For this, I simply attach the following code at the bottom of the file just before the /body:


var links = document.getElementsByTagName("a");
for (var i=0; i

I then wrap the whole thing in a conditional comment for IE so that it is only executed by this. That's it. Simple and effective. Disabled JavaScript is not critical in my case, as without JavaScript on the system (it's a business solution with high interactivity) nothing will run anyway in the future - Ajax needs JavaScript as a component ...

SISC - Second Interpreter of Scheme Code

SISC Scheme is a very complete Scheme interpreter and compiler written in Java. Particularly interesting: there is a continuation-based web framework for it.

Other interesting features include good integration into the Java world through the Java-Scheme interface. In principle, all libraries from the Java world are also available in Scheme.

SISC Scheme also supports SLIB (an extension library for Scheme with many useful modules) and various SRFIs (Scheme Requests for Implementation - the formal way to extend the Scheme language with standard modules).

The Studs MVC Framework is a port and extension of the Java Struts Framework to PHP. In doing so, frameworks initially map a J2EE-like basic structure for servlets in PHP. To me, that naturally sounds like fighting the devil with Beelzebub.

Tags from Terms

Jonathan Luster has released his Y! Terms Extraction Plugin for WordPress. It uses the Yahoo services to extract relevant keywords from a posting text and presents them as Technorati tags in the post. If anyone tries this out: I would be interested to know how well it works with German texts.

By the way, I would also be interested to know when blogg.de offers an API. I mean, it's about time to catch up with the features of Technorati and Yahoo, right?

FeedWordPress is a plugin that turns a WordPress installation into a planet site: essentially a public aggregator, except that the entries go into a WordPress database.

Source management system BitKeeper now commercial only - for me, the choice of BitKeeper was a stupid idea anyway. And the argument that the other alternatives were not far enough at that time does not hold - then one would have simply continued working with CVS and waited until SVN or other alternatives were far enough.

TheMonadReader is intended to become a regular publication about Haskell. The first issue is linked. The whole thing is supposed to be less formal than classic scientific journals, so it could definitely become interesting. There is also an article about Pugs (Perl6 in Haskell) in the first issue.

Pugs - pugscode is a Perl6 implementation in Haskell. Even crazier: the entire project is primarily coordinated in an IRC chat and the collaborative work is done with SubEthaEdit. Is this already Nirvana?

Javascript Windows simulate a desktop within a webpage. You have a launch bar and small applications that must be HTML-based, which then appear in windows that the user can move, minimize, maximize, and close - basically a desktop, but within a webpage. Crazy idea.

Html Validator for Firefox and Mozilla - wow. Great extension: it directly validates the displayed webpage and integrates into the source view for debugging errors. Very nice - and has been featured in several weblogs in recent days (I don't remember where I first saw it).

upcoming change in PLT Scheme v300 - lambda, filter and fold out. Right. After all, Python's Guido has already demanded this.

class.jabber.php is a PHP class for programming Jabber services.

Cat2Tag Plugin

The Cat2Tag Plugin is something that was still missing for my photo blog: a way to work with WordPress categories like Flickr tags.

The most common tags (20 pieces, can be changed to all) are offered in a small JavaScript bar and additionally there is an input field for tags in which you can simply manually enter further ones (or click on the most common ones from the list). The default category is simply listed as a word in the tag list. New tags can be created simply by using the same. Very practical.

The hierarchy of the categories is of course not displayed - but this is not really interesting with tags anyway, the hierarchy does not play a real role with tags. Similarly, the tag description (category description) is not maintained, which must then be manually edited afterwards if you want to have something meaningful there (e.g. for the feeds).

The plugin still has one problem: it does not correctly convert the sharp s "ß" when shortening umlauts from tag names. But this seems to be a problem that WordPress also has - even when manually creating categories, the "ß" is not correctly resolved. One should therefore be careful with them. And of course, umlauts are not converted to their long form but to their base form - "ä" becomes "a". This makes the tag URLs somewhat problematic, as users need to know how the tag name is converted to the URL if they want to hack the URL themselves. But this is also a general problem of internationalization.

An idea for improvement would be an additional query string rule with which URLs with tag combinations (nature+animals) could be realized.

Otherwise, however, a really nice plugin with a very practical functionality for me.

APLX Version 2: The exciting cross-platform APL

APLX is an APL2 implementation for various systems: Linux, Windows, Mac OS X. Unfortunately, it's a bit expensive - there's only a cheaper Personal version for Linux, otherwise there's only an Evaluation version for Mac. And how they solved the problem with the APL special characters is not mentioned there - presumably via combined keys or something similar. I wouldn't know if there is an APL-USB keyboard.

Somehow, I would like to play around with APL again - the language is wonderfully crazy and has a few corners that even today (except in languages like J and K of course, conditionally also in Sisal) can find their match. Specifically, the ability to process entire arrays of values at once and combine them with powerful Higher-Order functions is really exciting.

J is now also available in an OS X version, unfortunately only from 10.3 onwards. Would be another alternative, J can be considered as APL-in-ASCII (although it offers a whole range of improvements in language theory compared to APL).

Alice is now available in version 1.1 - including a Mac OS X port. Unfortunately only via the Unix path, so with X11 interface and without the native code Just-in-Time compiler, but at least you can play with the language on the Mac. As a reminder: Alice is an ML dialect with a strong focus on good support for parallelism.

DrScheme 300 Series

freshmeat.net: Project details for DrScheme: Yeeeehaaaa!!!! DrScheme is becoming Unicode-capable. Very nice. Ok, the other features sound very good too, especially the portable continuations for threads - opens up quite new possibilities for mischief in the code.

In any case, the best Scheme environment continues to evolve and is getting even better.

PythonEggs are like .jar files for Python. Only they are based on ZIP. It's about time that Python applications can be downloaded as a single file with dependency definitions and that the installation of Python applications finally becomes easier.

Ajaxing the Rails - the latest release of Ruby on Rails also offers Ajax support. Here, the actual Ajax part is much more integrated than in other frameworks - could be interesting, as so far Ajax has been rather tricky to use in larger projects.

Advanced Bash-Scripting Guide - everything you always wanted to know about Bash scripting but were afraid to ask. And a little bit more that you never would have thought to ask. And then there's the stuff you really never wanted to know, but it's in there anyway.

The Man in Blue > Experiments > widgEditor is a WYSIWYG editor for HTML that replaces textareas in the browser and is written in JavaScript. It has an integrated fallback to normal textareas, so that browsers without JavaScript can still work with normal text. And it produces clean XHTML. And: it actually works properly for me.

Image cropping with DHTML and PHP behind it. Could be quite practical in a photo plugin.

Agata Report is something like Crystal Reports, but for Linux and Open Source. Could be quite practical at times, especially since it can also generate reports that can easily run on a web server.

Clement doesn't understand democracy

There is no other way to interpret the lies about the position of the Ministry of Economic Affairs on the patent directive. There is a clear and unanimous resolution of the Bundestag. But the Ministry of Economic Affairs shits on the opinion of the parliament as well as the experts.

By the way, the given example of "time and space-saving data storage" is exactly what indicates the problems: there have always been problems with patents on compression algorithms that de facto sealed formats for use in open source programs - which is a considerable obstacle to the interoperability that is being discussed everywhere. Microsoft would only have to store the XML formats in a proprietary binary XML format and could thus prevent, by patent, open source software in Europe from reading the documents.

Other - older - examples of exactly this problem are GIF storage and the LZW algorithm. Both have caused massive problems with interoperability and exactly that is what we will also face in Europe with the current directive.

The claim of the Ministry of Economic Affairs that there is nothing to fear is therefore nothing more than a stupid and transparent lie. Ultimately, the federal government is playing into the hands of the industry giants here, and at the expense of the middle class and open source software.

More on this, as usual, at the FFII.