upcoming change in PLT Scheme v300 - lambda, filter and fold out. Right. After all, Python's Guido has already demanded this.
programmierung - 6.2.2005 - 1.4.2005
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.
Those who want to play with XMLHTTPRequest and Common Lisp should check out CLiki : cl-ajax, which provides the necessary framework for easily integrating Common Lisp functions into web applications based on Araneida.
Naked Objects are not indecency and impropriety, but simply the idea of exposing your objects in Smalltalk directly to the world - each object thus has its own mini-GUI so to speak. As a result, users work directly with the actual objects and many problems of GUI frameworks are eliminated - there is no longer a need to explicitly mediate between GUI and object, the objects do this themselves.
And for those who don't like or can't use Lisp, perhaps SAJAX - Simple Ajax Toolkit by ModernMethod - XMLHTTPRequest Toolkit for PHP can help, which supports not only PHP but also Io, Lua, Perl, Python, and Ruby.
Usable XMLHttpRequest in Practice is an interesting little article that explains the use of XMLHttpRequest using an example and discusses usability aspects.
ParenScript is a compiler that converts Lisp to JavaScript. Certainly a pretty brilliant thing for Lisp-based web servers and application frameworks, because the programmer can work in his familiar language tools. Clientside Lisp by detours, so to speak ...
CherryFlow - Continuations in Python
CherryFlow is a continuation-based framework for Python and CherryPy. With it, you can also build continuation-based web servers in Python. The special feature: CherryFlow uses either Stackless' dumpable generators or StateSaver, a small C extension that allows copying running generators under normal Python. Exactly what I back then was looking for to complete my continuations for Python.
Poly/ML Home Page
Poly/ML is a very fast implementation of Standard ML 97. Interesting feature (apart from performance): the system is much more oriented towards Lisp systems than towards classic command-line compilers. You have an interactive working environment and an image that is automatically saved when the session ends and thus makes all definitions available again in the next run.
The advantage of this way of working is simply that you can adapt your system to your own needs over time. Together with the FFI and external libraries, you can gradually put together a nice environment that is optimized exactly for the intended goals. In addition, you often save extra object databases: you simply save values (or in the case of ML, structures) in the image and keep them there.
Since Poly/ML simply hangs the image in the address space using mmap and does not first read and then write it later, the whole thing is also quite fast - with image systems, the system start often bothers.
Oh, and by the way, Poly/ML runs smoothly under OS X ...
The speed of the compiler unfortunately does not necessarily continue in the generated code, as can be seen from this comparison. But just like with OpenMCL, the fast environment is definitely advantageous for prototyping. You can then set a compiler that takes longer but then spits out better optimized code like MLTon.
Ruby stuff for Macs
Ruby stuff for Macs is a ready-made DMG for both Panther and Jaguar with pre-installed Ruby 1.8.2 and various extensions (including Rails and Rubygems!). Unfortunately, the 10.2 DMG is broken - I've contacted the author.
You can of course also compile Ruby yourself, it's not particularly complicated. For OS X, there's also DarwinPorts. However, the port under 10.2 is acting up and cannot be compiled cleanly. Something in the iconv module - syntax error.
Somehow my system doesn't like Ruby today
Update: now the package works.
The fate of reduce() in Python 3000
The fate of reduce() in Python 3000 - well, it's probably time for me to switch languages. Because anyone who is so stupid as to cut themselves off from Lisp roots will only manage to rebuild more powerful possibilities with primitive means. Ruby also looks very useful and I'm slowly getting used to the syntax ...
Anonymous functions (lambda in Python, blocks in Ruby or Smalltalk) are far more than just obscure Lisp relics. I have many code snippets that live precisely on the fact that I can pass around anonymous code blocks - ultimately, this is about writing your own program structures. In Smalltalk and similar languages (and to some extent in Ruby) you can use this to extend and develop the language itself - which is one of the strengths of Lisp and its friends (and that's why it's also found in Smalltalk and its friends - the Smalltalk developers had a lot of Lisp know-how).
Languages that castrate themselves at this point and think that iterators and list comprehensions (basically nothing more than loops written in shorthand) are a viable replacement for being able to program your own control structures and your own language tools have become completely uninteresting to me. I don't like language designers who think they are smarter than the later programmer and want to impose a language corset on them.
UnCommon Web Tutorial
The article hyper-cliki : Web/Continuation describes how to write web applications with the continuation-based web framework UnCommon Web in Common Lisp. Very interesting, as Common Lisp itself is much more handicapped with continuations than Scheme - in Scheme continuations are first-class objects by standard, in Common Lisp they are not.
Continuation-based web servers have the advantage that the actual code can be structured very similarly to classical applications. You don't have to deal much with the event model of classical web programming and you rarely have to deal with explicit session constructs, because the session in a continuation-based web system is implicit.
There are continuation-based web frameworks for the following languages:
- [Smalltalk][1]
- [Common Lisp][2]
- [Scheme][3] (unfortunately no direct link to the web server itself)
- [SISC Scheme][4]
- [Ruby][5] [twice][6]
- [Python (via CherryPy and either Stackless or StateSaver)][7]
There are certainly more, but these are the ones I could find quickly.
Hedgehog is a nice little Lisp compiler and bytecode interpreter with a special focus on low resource consumption. Unfortunately, interactivity and debugging suffer as a result: no tracebacks and no REPL, just running scripts and searching for the breakpoint in the pseudo-assembler source via grep. It would be nice if the language could offer these interactive features as an option - you can then leave them out in small boxes.
cyrusharmon.org: More GCC-XML (new and improved -- now with pr0n!) - crazy title, but a brilliant thing: SBCL gets native bindings to the Carbon API. And thus becomes the second Open Source Lisp system with integration into the OS X world (although Cocoa bindings would of course be cooler - but so far in the Open Source area only OpenMCL offers that).
How to setup WebObjects 5.1 on Linux
How to setup WebObjects 5.1 on Linux describes how to get WebObjects (the original from Apple) running under Linux - due to the Java basis of the 5.x versions, this has become significantly easier by now. Although I am naturally much more interested in the Objective-C version for Linux - Java is not the big performer on Linux in terms of performance ...
Well, for the Objective-C version, you can also fall back on SOPE (I reported), it is compatible in many areas. For using XCode, there are also project templates, so you get similar comfort during development. I have to try how it looks with ProjectBuilder.
OpenACS
OpenACS is a web application platform that is often overlooked, based on AOLServer and PostgreSQL.
OpenACS also comes with a whole set of ready-made modules - true to its name as Ars Digita Community System, it offers a whole stable of ready-made applications. A complete CMS is also included. And all of this is partly several years old - from times when other CMS projects were still dreaming of being conceived.
The AOLServer is a multithreaded web server that uses TCL as a scripting language, just as Apache is often combined with PHP. However, the AOLServer is very fast and surprisingly resource-efficient. The thing is called that for a good reason: larger parts of AOL run on the server and it originates from there. It's still worth something.
All in all, an exciting old-timer with interesting features and - due to its age - quite good documentation. But also some warts and edges that may seem a bit strange nowadays. One must keep in mind that when ACS was developed, the definition of CMS was only in its infancy.
SKYRiX Object Publishing Environment
The SKYRiX Object Publishing Environment is a free variant of a web application framework based on the WebObjects model. Specifically, considering that WebObjects is now migrating from Objective-C to Java, SOPE is very interesting - as it is still entirely Objective-C.
Moreover, it runs not only on OS X, but also on Linux. And of course, I like that it is based on PostgreSQL and not on this glorified index card box ...
Would be a good reason to refresh my somewhat rusty Objective-C skills. However, the documentation is still quite sparse - but you should be able to refer to the WebObjects documentation for many areas.
By the way, for Debian Sarge there is a repository with ready-made packages for SOPE. It is not yet on their homepage, only on the Freshmeat project page for SOPE.
It is, by the way, the basis for OpenGroupware.org - a groupware construction kit (according to the developers themselves). And there is a Live-CD with which you can test the whole monster without having to install much.
Can someone explain to me why I have never seen this project before? Do I have tomatoes on my eyes? Strange ...
A warning to those who want to get started (I just compiled, installed and tested everything): describing the documentation for SOPE itself as non-existent would be flattering.
Tip: a WebObjects application is so to speak a small web server in itself - you simply start it and attach Apache to it using the mod_ngobjweb module to this small mini-server, and then you can access the elements of the application. It is not immediately obvious for someone who does not know WebObjects ...
Stu Nicholls Cutting Edge CSS An amazing CSS puzzle is a small maze game that was implemented using only CSS - no JavaScript. Wow. (found at photomatt)
I didn't know that the SmartEiffel The GNU Eiffel Compiler now also compiles to Java bytecode. Maybe you could use it on the Mac together with the Java-ObjC bridge to write programs there and play with Eiffel again.
Back to the Future: The Story of Squeak - how one of the coolest Smalltalk environments came to be.
PL/I for GCC is an implementation of PL/I as a frontend for GCC. Very interesting, as it is not a precompiler with C output and, unlike earlier projects, does not aim to be only a subset implementation (although, of course, at the moment only a subset is implemented - but it is constantly growing). I admit, I still like the baroque syntax of PL/I, even though it has been many years since I programmed with it.
Moderate trackbacks in general
For WordPress, there is a plugin that automatically sets trackbacks to moderated. However, this plugin uses additional database accesses (sets the moderation flag after the creation of the trackback), which is rather annoying for trackback spammers - every additional database access increases the system load. Therefore, I wrote my own version of it, which does not require any additional database accesses. The source is available here.
BA is said to have favored Accenture in online job exchange
BA allegedly favored Accenture in online job portal - does this still surprise anyone? The botched work on this thing knows no bounds. And now it's botched work and favoritism - which was to be expected with such a poor result.
What always makes me angry about this: if you yourself are active in the industry, you only wonder about the exorbitant prices that are charged for such deals - and how poor the performance is that is delivered. But you yourself have to invest three hours of documentation work for every hour you work to get your money, because with smaller deals, cheap is great.
A Call to Action in OASIS
A Call to Action in OASIS is an open letter from a whole range of Open Source big names against the latest OASIS framework conditions. OASIS deals with the standardization of data formats and web services, and in the latest framework conditions, standards should also allow those based on patented techniques - and thus ultimately give companies the means to exclude Open Source programs with these standards. In principle, a rehash of the same stupid idea from the W3C - which then withdrew this idea in response to the protests.
The Plugin API for WordPress lists actions and filters defined by WordPress. Currently being filled with content.
Ape can transparently map Python objects in Zope to filesystem objects or PostgreSQL databases. Could be very interesting for work. Can also be used standalone (without Zope).
Ian Bicking compares FileSystemView vs. LocalFS as alternatives to store Zope objects in the file system.
Apache Rivet - Integrate TCL as an alternative to PHP into Apache and design dynamic pages with it. Fighting fire with fire?
Introducing sIFR: The Healthy Alternative to Browser Text
Introducing sIFR: The Healthy Alternative to Browser Text describes a method based on JavaScript, CSS, and Flash to free text styling from the limitations of CSS and use any fonts.
The technique works similarly to CSS image replacements, except that the replaced text can grow with the page (e.g., if the user has set a larger base font). If a visitor has Flash and JavaScript available, correspondingly marked text areas are replaced by a Flash rendering.
If the visitor has no Flash or JavaScript is disabled, they will see normal text content via the browser's capabilities. Accessibility is thus largely preserved - the HTML remains semantic, and screen readers for text browsers as well as semantically controlled HTML readers should have no problem with it. Visually impaired users with large fonts can also benefit - for example, by disabling Flash, the user's chosen font size will be selected.
It is definitely better than CSS image replacement for headers, as it can adapt to the dynamic environment much better. Image replacements are not zoomed and do not support copying and pasting of content (which is also supported by Flash).
The Technorati Plugin Beta provides a similar list to regular comments - except the links and text excerpts come from the Technorati link cosmos for an article. I'm currently wondering whether something like this couldn't also be done meaningfully with blogger.de - this way you could also catch those who aren't automatically linked via Trackback or Pingback. Of course, you'd have to check for duplicates against the regular trackbacks and pingbacks. Hmm.
phpOpenTracker is a live access analyzer for websites. It can be integrated directly into PHP applications or data can be collected from static websites via web bugs (small invisible graphics). You can use it to learn quite a lot about user behavior on websites. And Asymptomatic is currently working on a WordPress plugin for it, which will allow you to see the corresponding evaluations in the WP backend...
javascript:xmlhttprequest [JPSPAN] - XMLHttpRequest is what makes Gmail and other highly interactive web applications tick. Integration of JavaScript code with server code through small HTTP requests that then update only parts of the page.
What to expect when updating MySQL 4.0 to 4.1. Okay, database version upgrades are never easy and can always cause problems.
Microsoft Interoperability
Ian Bicking describes what Microsoft Interoperability really means. A quote from a Microsoft support employee:
Microsoft isn't in the business of integrating with non-Microsoft software.
Finding Deep Links in Log Files
I asked Pepino about it recently, so I put my Deep Link Finder Script online. It's a simple Python script. Should run on Python 2.2 and up, possibly even Python 2.1 (but that hasn't been tested). The script is configured in the source code (I've added comments for it) and then simply called with multiple logfiles as parameters. It extracts from Apache Combined Logs which sites deep link to specified file types (configurable, some image types are set by default) and how often. It outputs an HTML fragment that you can add headers and footers to in order to put it online - for example, that's how my Zeitgeist page for deep links is created. The other pages have similarly structured scripts, except they collect search terms and general referrers instead.
I take a look at the deep linker list now and then, and if someone shows up there who deep links quite a lot and isn't an aggregator or news service, they get shown a corresponding replacement image. But really only those sites. It bothers me too when my feed reader suggests I'm an image thief or traffic robber.
Firefox - IDN - 0 Info - 0 Transparency
Kai is ranting about Firefox - IDN - 0 Info - 0 Transparency - and he's right with his rant. You're used to this security secrecy from commercial providers, but with open-source projects it annoys me every single time as well. When will people finally understand that only early disclosure gives users a chance to protect themselves? Keeping bugs secret is based on the absurd assumption that you're the first to notice this bug. Which is simply silly: a blackhat who notices this bug will certainly not broadcast it but instead exploit this bug for as long as possible. And so only those benefit from keeping it secret for too long - the ones we shouldn't be helping anyway.
User security needs to be the focus of security considerations - and specifically the informed user who is capable of turning information into meaningful action. The uninformed user doesn't care anyway, they click on everything. But a sysadmin who knows about a problem can at least contribute through educating their own users so that they maybe act more cautiously for a certain period of time. An uninformed sysadmin doesn't even have a trace of a chance to do that.
In "On the GPL" Isotopp writes about the GPL and what is actually in it and how one can understand it. A pretty good explanation, I think. Should be recommended reading for anyone who believes the nonsense that Microsoft, SCO and some others spread about the GPL.
The MBROLA PROJECT HOMEPAGE - the MBROLA project provides a free phoneme synthesizer. Phonemes in, speech out. It is based on diphone databases, which are available for a wide range of languages. The project page also contains links to text-to-speech projects that build on MBROLA.
Optimization Surprises
In dirtSimple.org: Optimization Surprises, Phillip J. Eby writes about optimizations he made to his implementation of generic functions in Python. I find it fascinating whenever he writes about this project, because generic functions are well-known to me from Common Lisp. However, what's equally fascinating is how he squeezes out half microseconds of performance.
In his case, it actually makes a lot of sense, since it's about central machinery that gets called constantly with generic functions. Minimal performance improvements make a huge difference in tight loops.
Also very interesting is what he discovers about Python's internal mechanisms and what effects, for example, simply the existence of closures in a function has on processes.
Exciting. Absolutely exciting.