programmierung - 12.7.2004 - 30.8.2004

Visual Studio Magazine - Guest Opinion - Save the Hobbyist Programmer

An older, but interesting article that points to an important problem: hobby programmers are increasingly being excluded from creating small hacks and simple solutions by ever more complex system interfaces and constant changes to APIs and programming tools in the Windows world. And it's not just the Windows world that suffers from this. Linux and OS X suffer from it in part as well.

Of course, there are still small utilities with simple programming capabilities. Or scripting languages that are easy to learn and use - for example, Python. But that's not really a solution for these tinkerers. What was once the omnipresent Basic for hobby tinkerers, or for example the - admittedly problematic - language in dBase, is missing today. Hardly any programming environment that doesn't come with an object-oriented approach. Hardly any solution approaches that don't try to be a general development environment for complete programs right away.

There are still some nice exceptions - FileMaker on the Mac still tries to appeal to the hobby hacker. But it's still true: the simple entry points are becoming fewer.

Even AppleScript on the Mac has become so complex and bloated in the meantime that it's hardly possible for a newcomer to just get started with it. Some corners of AppleScript are obscure and complicated even for old programming veterans like me. And of course, while there are many great integration possibilities for all these scripting languages, the documentation for precisely these parts is downright terrible.

To stick with the AppleScript example: while there are application dictionaries that document an application's AppleScript capabilities, nearly all the descriptions I've read in them have assumed that the user already has complete and extensive knowledge of AppleScript and AppleScript structures (what are objects in AppleScript, how do you work with containers, etc.). Although these dictionaries could serve as a starting point for the hobby programmer, their creators (professional programmers in software companies) design them in such a way that often even they themselves can make sense of them.

It's similar in the Linux world. TCL was once the standard scripting language for simple entry with simple structure, an almost primitive extension interface, and the ability for even non-programmers to quickly arrive at solutions. Today, TCL in the standard distribution (which is then nicely called "Batteries Included" - only unfortunately the understandable instructions are missing) already consists of mountains of packages, many of which deal with metaязыage aspects (e.g., incrTCL and the widget libraries built on it and on TK - good grief, in just this brief mention of the content there are more incomprehensible words for a beginner than filler words), which a beginner will never understand.

And I don't need to go into the dismal situation under Windows with the scripting host and the OLE Automation interfaces (or whatever they're called these days) - anyone who has experienced a version change of an application and had to completely rewrite their entire solution due to a total change in the scripting model of, say, Access, knows what I'm talking about.

Ultimately, we (we == professional programmers) are taking a piece of freedom away from end users - the freedom to tinker around and yes, also the freedom to shoot themselves in the foot. And I think that precisely in the world of free software, programmers should start spending some thoughts on this again. It's nice that almost every larger program embeds some scripting language. But what's not so nice is that hardly any of these embeddings have decent documentation of their capabilities, and only the most primitive examples and complete solutions for very complex applications are available as starting points for learning. Hobby programmers in particular learn most easily by reading existing tools. And yes, I'm not exactly a good example myself, because the Python Desktop Server has a number of extensibilities that are also intended for end users - but I also wrote far too little documentation for it. Somehow a shame, because that's how many projects become incestuous affairs, because the actual end users are left out. No, I don't have a real solution - because especially with free projects, documentation creation is often an annoying and unpopular part of the project and is therefore treated like a stepchild. Besides, most programmers aren't able to create generally understandable documentation anyway. But maybe that's also an opportunity for projects that try to increase activity in large open source community projects that have had lower participation so far. debian-women comes to mind spontaneously (since Jutta is currently working on it). Because greater participation by women would certainly also be helpful for documentation and information that doesn't necessarily require a fully trained master hacker. After all, not everyone has the desire to spend their entire life learning new APIs and tools ... Here's the original article.

USB-Cams: The Battle with the GPL

Too bad. Heise News didn't understand it either. Webcam users wouldn't be left in the lurch if the module maintainer weren't acting like an offended crybaby and nurturing his poor ego. Because as a module outside the kernel, it would still be possible to offer support without problems (and if the hardware really is so widespread, distributions like Suse would certainly include it in the distribution kernel).

Nobody has a fixed right to be in the actual kernel source with their module. Often it doesn't even make sense - because some modules directly in kernel source aren't properly maintained and thus a constant source of trouble when kernel interfaces change.

And purely binary components of a kernel module are a security risk, since their function cannot be verified. And they directly contradict the GPL - that has nothing to do with overly pedantic interpretation. Binary kernel modules, or even just parts of them, are always a problem. And hooks that only serve to give such a component access to the kernel are not necessarily what I understand as secure kernel design...

At heise online news there's the original article.

librep - A very lightweight Lisp interpreter specifically designed for embedding Lisp in programs as a scripting language

Lush: Lisp Universal SHell - Interesting Lisp dialect with its own statically typed Lisp derivative for efficient compilation

mod_rep - Integration of librep (Lisp interpreter) in Apache similar to mod_perl

SourceForge.net: Project Info - Common Lisp JPEG Library - JPEG Encoder/Decoder in Common Lisp

thunk webserver - interesting web server entirely in Scheme - suitable for porting TooFPy?

Bigloo homepage - Bigloo is one of the most powerful Scheme implementations with various code generators (.NET, JVM, and C code)

Developers and Their Misunderstanding of Open Source

Quite remarkable. Here we have a developer of a kernel driver for Philips webcams. This kernel module works, but to fully support the cameras, it needs a binary-only module. However, the kernel developers have decided to clean up binary-only modules. The Philips webcam module is also affected. As a result, the USB subsystem maintainer removed a hook from the kernel module through which the binary-only module could attach itself to the kernel.

The module developer is now complaining that his module would be demoted to a second-class module because it could only be distributed as an externally maintained module, but not directly in the kernel tree—because without the hook, his binary-only module cannot be loaded. Out of spite, he throws in the towel and no longer wants to support the module at all.

Where is the logical error? With the kernel developers who reject binary-only modules and don't want backdoors for binary-only modules in the kernel? Hardly.

The module developer could simply continue operating and distributing his module outside the kernel. He just can't be distributed with the hook directly in the kernel. He could distribute kernel patches that patch the hook into the kernel source. He rejects both options.

Such or similar discussions come up repeatedly when individual developers fail with their great idea—and yes, sometimes the failure only comes after a few years because previous maintainers took a more relaxed view of the whole thing. But binary-only modules in the Linux kernel are a constant nuisance: not only can't you fix them because you don't have the source. You also can't do security reviews. And sorry, but any decent admin doesn't want hooks on their system through which unverifiable binary modules can plug into the kernel.

Ultimately, the whole thing comes down to whether Linux must support every piece of hardware, even if there are no open source drivers for it. That Linux can also serve proprietary interfaces is clear—simply develop subsystems outside the kernel and integrate them into the kernel. The support for this is built into the kernel. But must the kernel itself support such modules?

In my opinion, no. It's certainly a downgrade for modules with purely binary components when they can't be distributed along with the kernel. But modules with purely binary components are already second-class citizens in an open source system anyway.

Of course, it may be more complicated for the user (although with Debian GNU/Linux, for example, it's quite trivial to install module subsystems to the kernel), but it can hardly be the goal of an open source system to compromise its own principles to make something easier that isn't even a focus of that system.

The real cause of the problem doesn't lie in the behavior of the Linux subsystem maintainers. The real cause lies in Philips' stubbornness in not wanting to release parts of the driver.

The fact that the module author is now scorching the earth (deleting downloads, deleting the mailbox, deleting sources, FAQs, etc.) just proves that he doesn't get it. Well, someone else will probably take the source and all the stuff and continue operating it—probably outside the kernel. The author didn't get that either. Instead, he's acting like a stubborn child.

Here's the original article.

Linda and Service Oriented Architectures - Description of TupleSpaces - PDF Version

Optimal syntax for Python decorators - a significantly better alternative to the current decorator syntax in Python

Psyche - A Scheme in Python that can be extended with Python functions

QScheme - compact and fast Scheme based on its own VM

Schemix - Scheme as a kernel module in the Linux kernel

Welcome to Myghty! - Perl's HTML::Mason ported to Python

A Conversation with Manfrend von Thun - Fascinating when a K (APL descendant) fan interviews the creator of Joy (a kind of functional Forth).

Candygram - Erlang Thread Primitives for Python - interesting for ToofPy

Main page for the programming language JOY - Joy is a kind of functional Forth

vnunet.com - Micro Focus lifts and shifts Cobol to Linux

The horror won't let go of me: I spent the first 10 years of my professional career programming with exactly this compiler system. An inventory management system. And now the monster is coming to Linux ...

Here's the original article.

Paolo Amoroso: Update on McCLIM's Beagle backend

From the linked article, it emerges in passing that someone is working on a McCLIM backend for OpenMCL. Namely, building on Cocoa. That would really be amazing - a CLIM-based interface. Ok, that would be just a listener and some toy code for now, but in the long run perhaps the kind of tools you know from the old Lisp machines. At least something like that would be conceivable at all.

Besides, CLIM is a pretty cool GUI library with features that would make all the Java bells and whistles green with envy - even if CLIM is many years older

At Planet Lisp you'll find the original article.

Form submission and the ENTER key? - Discussion of the problem of Enter=Submit in HTML forms

Modeling Object-Relational Bridge for python - Database modeling and mapping to Python

Things to make you go "Ow, stop, my head hurts!"

When the programmer of the new Virtual Machine for Perl talks about Continuation Passing and Multimethod Dispatch, that excites me. When he then pivots to Intercal and the COME FROM statement, that scares me.

At Squawks of the Parrot there is the original article.

Perl.com: The Evolution of Perl Email Handling

If you want to process emails with Perl and aren't entirely satisfied with the Mail:: hierarchy of Perl modules - especially since performance often leaves something to be desired - you might want to take a look at the Email:: hierarchy.

Here's the original article.

brickOS at SourceForge - Alternative operating system for the Lego RCX brick

mySTEP - current version 1.7

Exactly a year ago today (P1140) I wrote something about mySTEP 1.1, a porting aid for Cocoa applications to the Sharp Zaurus PDA. To combat link rot (the old link is dead, thanks to Newsisfree), and because a lot has happened since then, here's the new link. The project has become even cooler and definitely deserves a new link Here's the original article.

Textpattern and punycode

What has always amazed me - not just with Textpattern, but it has to take the heat now because I wanted to test it - is the ignorance of Punycode in software. Ok, I know Punycode (the internationalized domain names) is sick. I know that. It's just the complete ignorance of this - unfortunately quite sick - standard that breaks some nice packages.

With Textpattern, the whole thing is particularly funny now: some parts work flawlessly, some others absolutely not. Sometimes a valid URL is generated, sometimes a broken one. For example, large parts of the admin work absolutely fine, only the small popup windows in the presentation administration can't handle umlaut domains.

Sure, I could now use the xn-... form of the domain. But then this would also be visible to the outside, because TXP apparently generates these partially in absolute form and thus this base URL slips in with it. Hmm. Ugly.

Update: in any case, you should also make the call to set the character set to utf-8 in the textpattern/index.php file. This is responsible for the admin interface, if you don't do it, there are conflicts between the admin pages and the content pages. Because with the content pages, the corresponding call is made, so they are delivered with utf-8 as the character set in the server headers. The admin pages, however, are not - so it becomes iso-8859-1. Result: many modern browsers correctly prefer the character set from the HTTP header over the one specified in the file itself. And suddenly you get strange umlauts.

What I added is the following line:

 header("Content-type: text/html; charset=utf-8");

And specifically before the $textarray = load(.....) call. At least this problem is then fixed. It's best to call up the existing elements once and save them again so they are correctly in the utf-8 character set. This also applies to international URLs in the Preferences, where you enter the domain of the site.

What still doesn't work is the Tag Builder window - the popups are called incorrectly, apparently with incorrectly encoded umlauts. Unfortunately, I can't verify this because of a bug in Camino, which refuses to display page content from international domains in the source.

confused face

International domains are a hack. And like with every bad hack, there are plenty of nasty problems. Update 2: as if to prove how hacky Punycode is and especially its support in browsers, I tested various other browsers today. Together with the ones from yesterday:

  • Safari on Jaguar can't do Punycode at all
  • Camino 0.8 can do it largely, but can't display source and the Tag-popups in TXP don't work (as I now know it's a browser bug)
  • Mozilla Firefox 0.8 also handles it largely, only popups and source display don't work - same bug as with Camino (was to be expected, it's the same source base)
  • IE can't do Punycode anyway, needs a plugin for that. I didn't test any further with that mess.
  • various text browsers (lynx, w3m, links) don't work with Punycode either.
  • Opera handles all aspects correctly.

Clear winner: Opera. So if you want to work with international domains (especially with Textpattern - but not only there), you should use Opera. Otherwise there are problems everywhere where hostnames are determined/generated - for example, the JavaScript links for the popups in TXP don't contain a hostname. The browser adds it internally. And incorrectly - but only when the popup is made. If instead the link is opened in a new tab via the context menu, everything works with Firefox and Camino.

Sorry, but the whole topic is absolute garbage.

From Python to PLT Scheme

Wow. That's really amazing now: a Python to DrScheme compiler that gets integrated as a package into DrScheme and then allows Python development with DrScheme's tools. Ok, the compiler still has some deficits and the code is still very slow, but that's expandable. And of course it would be a really interesting Python implementation, since on the one hand you could mix all the Python libraries and on the other hand the MzScheme libraries. For me, this system in its perfection would be almost nirvana.

Here's the original article.

The Python Paradox

Paul Graham thinks Python programmers are smart. So are we.

Here's the original article.

Databases and Scsh - PostgreSQL Client in Scheme

Scheme Underground Network Package - Web server in Scheme for the Scheme Shell

Tsearch2 - full text extension for PostgreSQL - Full text indexes for PostgreSQL

Bill Clementson: Mandelbrot Set ASCII art

Mandelbrot Set. In 11 lines of Common Lisp. As ASCII art.

At Planet Lisp you can find the original article.

CLiki : Armed Bear Lisp

A Common Lisp implementation that compiles to the Java VM. I'm not a fan of the JVM, but for program portability it's still practical of course.

Here's the original article.

MzTake - a Scriptable Debugger

An interesting concept: a programmable debugger for MzScheme (the platform of DrScheme). Essentially more of a monitor - it observes the running program and, based on specifications in scripts, can trigger various actions. For this, a variant of Scheme specially optimized for event control is used. This appeals to me because I typically don't use normal interactive debuggers - somehow they're just not my thing. I prefer to let programs run and collect information during the run. In Lisp, something like this is already quite elegant to implement - just wrap functions accordingly (or in Common Lisp use advise to bind debugging code to functions). MzTake simply extends this concept further.

Here you can find the original article.

Python on Smalltalk VM?

Someone is working on a Python implementation that runs on the Smalltalk Virtual Machine of Visual Works. Also quite interesting - the Visual Works VM is one of the best when it comes to efficient garbage collection and good just-in-time compilation. The Java VM could learn a thing or two from it before it even comes close to being in that league...

At Python owns us you can find the original article.

blog: bknr-devel

A web application framework with object database and templates and everything you need. Sounds very nice.

Here's the original article.

Mikel Evins: Clotho status

Cool. Mikel Evins is now actively working on a graphical environment for OpenMCL. Based on Carbon, so it won't be bound to specific OS X versions. And of course written completely in Common Lisp - as a side effect, the conclusion will also include a CLOS wrapper around the Carbon API. I'm very much looking forward to the first beta versions.

At Planet Lisp you can find the original article.

Cyclone

An interesting C derivative that has borrowed from many other languages - including those of the ML family. A C with type safety, memory management (though still manual memory management), polymorphic functions, pattern matching, type inference and many other nice features. Packaged in a perversely bloated syntax that builds on the already perverse C syntax

Here's the original article.

dude, where's my python?

I can't add anything to that. If the Python community starts bringing features into the language by argumentatively besieging Guido, and if these compromises are then realized according to the motto "a syntax that everyone likes equally little", then it's time to switch languages. Ruby looks nice and the available modules for various purposes easily match Python. Or Prothon - though the available modules are still very sparse there. Or simply back to good old MzScheme? Here's the original article.

Ambrai Smalltalk

A new Smalltalk for OS X. Integrated into Aqua. With all the tools you could wish for. Unfortunately only from OS X 10.3 onwards - too bad, I would have liked to take a look at it, but I'm still on 10.2.8 ...

Anyone who can give it a try - the beta is freely available. I'd be curious to know what it's like. Smalltalk used to be one of my favorite languages - though that was before my contact with Lisp machines and back in DOS times

Here you can find the original article.

Bosco HOWTO

A tutorial and example code for building OpenMCL Carbon and Cocoa applications. Very interesting, this could slowly make OpenMCL on the Mac a fully-featured environment.

Yes, I'm still dreaming of a free Lisp implementation with a decent development environment

Here's the original article.

IronPython - A fast Python implementation for .NET and Mono

IronPython is now Open Source and available in version 0.6. For .NET or Mono programmers, this might be an interesting alternative to the usual C# languages.

Here you can find the original article.

Current Books about Icon

Wow! Both the latest edition of the Icon Programming Language Reference and The Implementation of The Icon Language book are available as free downloads. Go ahead, download and indulge - Icon is simply a beautiful little language with very interesting features. Many things in Icon have always appealed to me much more than in Perl - regular expressions are namely not the only way to analyze strings. String scanning in Icon is at least as powerful, but much more elegantly designed and far less cryptic. Of course I have the books in print form at home, but since they're no longer available in paper form, the download is certainly a good solution. And since they're free - in the sense of public domain - it's also a really cheap opportunity.

Here's the original article.

Unicon.org - the Unicon Programming Language Home Page

And since I'm on the topic of Icon anyway: there's also a successor language that's now being developed on Sourceforge. A book is also being created there through public collaboration, and the whole thing makes a very interesting impression. I think I'll keep an eye on it - an Icon implementation with a better class library would definitely be an alternative for me for many small projects. Icon itself suffered somewhat from a rather narrow library - for example, almost nothing in the TCP/IP area and only very rudimentary libraries for database connections and similar purposes compared to Python, Perl, or Ruby. Unicon could change that.

Icon, by the way, was something like a successor language to Snobol. Snobol in turn was the first attempt at a programming language designed for text manipulation - well before regular expressions or even Perl existed. It had a pretty bizarre syntax (or rather two of that sort), but a very endearing charm. One of the few languages I know where structured and clear programming was almost impossible.

Icon fixed many of Snobol's problems - especially, it had a quite decent syntax. And string processing in Icon wasn't a piggyback syntax, but was fully integrated into the language. Besides, Icon also had nice things like generators - which were then (in Python's 2.x versions) discovered by Python.

Here's the original article.

Boo - Home - dynamic language for .NET with Python-like syntax and advanced features especially in the area of data types

gppl's nest - Hierarchical Queries with PostgreSQL

Gwydion Dylan: Overview - free high-end Dylan compiler

LWN: Oracle patents content management systems

And again, a stupid US patent. This time on content management workflows like they occur in pretty much every CMS. Great prospects for EU software patents

Here you can find the original article.

Marlais Sourceforge Project - portabler Dylan Interpreter