Freitag, 9. April 2010 21:45
[Nokia N97]
Changes of Events in writeprotected calendar on this phone are not permitted. These changes were ignored: test, 04/09/2010 23:00
...you want to run many. Everybody told me so. Which is why I was
warned when I ran my first one year ago in Paris, I knew I would run
other.
So, on Sunday will be my fourth one and my second Paris Marathon.
So, after 4h10mins in Paris (april 2009), 4h12 in Rambouillet Forest
(all alone in full autonomy mode) and 4h00'49" in Cologne, my target
this time is 3h50.
Weather is announced to be perfect, my physical condition is AFAIK
good, the motivation is very high....my only fear is that I registred
in the "4h target" group (because, back in November, I wasn't
expecting the results I got in February/March in half-marathons). As many people overestimate their target, I
expect to be passing hundreds of runners during the first 5
kilometers, which is not the best way to start....but, hey, Paris
streets are wide enough (except Place de la Bastille, my nightmare....I hope
organizers solved the jam problem there).
Of course, I kinda hope seeing fellow Paris DD's waving giant Debian
swirls, including our wanabee-DPL.....but let's stop dreaming. And
running in a sunny day all across Paris and along river Seine, will be
great again even without Zack. I'll also be missing Ralf and No l who
ran it last year: Ralf is unfortunately suffering from knee problems
and No l is preparing for Mainz marathon (target: 3h??).
Anyway, more news on Sunday afternoon....and let's enjoy a full rest tomorrow!
A special report on America's economy: Time to rebalance I've been thinking about that for a while too, especially after the dollar's recent weakness, although it has been strengthening some, lately, apparently due to the state of Greece's finances... I think that the computing industry is, in general, well poised to take advantage of that. For instance, what could be easier to export than computing power or "Software as a Service"? All it takes is a few minutes for someone in Europe to sign up to a US-based service with a credit card. For instance, compare Linode's prices and good service with most of their European competitors (gandi.net for instance, who are good people, and you have to love that they put "no bullshit" right on their front page). Not that they don't have good service in Europe, but it's very difficult to compete on price with the dollar being significantly cheaper. With the dollar where it is right now, gandi is almost, but not quite, competitive with Linode. If you don't include taxes. If the dollar weakens again, though, things could easily tilt far in Linode's favor. Besides a weak dollar, I think it will be important for companies in a position to do so in the US to focus on "the rest of the world". The US is a big, populous country where it's very easy to forget about far-off lands. Compare my home town of Eugene, Oregon to where I live in Padova. Google Maps says that it takes 7+ hours to drive to Vancouver, Canada (which, to tell the truth, isn't all that foreign in that they speak English with an accent much closer to mine than say, Alabama or Maine). Going south, Google says it's 15+ hours just to San Diego, although I think that's optimistic myself, given traffic in California. From Padova, I can be in France in 5 hours, according to Google, 3 hours to Switzerland, 4 to Innsbruck, in Austria, less than 3 hours to the capital of Slovenia, Ljubljana, and around 3 hours to Croatia, too. And if you wanted to throw in another country, the Republic of San Marino is also less than 3 hours away, according to Google's driving time estimates. You could probably live your entire life in a place like Eugene and never really deal much with foreigners, whereas here, nearby borders are both a historic and an ever-present fact. The outcome of this is that, to some degree, people in the US have traditionally focused their businesses "inwards" until they got to a certain size. Which is, of course, a natural thing to do when you have such a big, homogenous market to deal with before you even start thinking about foreign languages, different laws, exchange rates and all the hassle those things entail. However, if exchange rates hold steady or favor the US further, and internal spending remains weaker, it appears as if it may be sensible for companies to invest some time and energy to attract clients in "the rest of the world". "Cloud" (anyone got a better term? this one's awfully vague, but I want to encompass both "computing power" like Linode or Amazon's EC2, as well as "software as a service") companies likely will have a much easier time of things: for many services, it's easy to just keep running things in the US for a while, and worry about having physical or legal infrastructure abroad later. Your service might not be quite as snappy as it may be with a local server, but it'll do, if it performs a useful function. Compare that with a more traditional business where you might have to do something like open a factory abroad, or at the very least figure out the details of how to ship physical products abroad and sell them, and do so in a way that you're somewhat insured against the large array of things that could go wrong between sending your products on their merry way, and someone buying them in Oslo, Lisbon or Prague. Since this barrier to entry is lower, it makes more sense to climb over it earlier on. As an example, Linode recently did a deal to provide VPS services from a London data center, to make their service more attractive to European customers. However, they still don't appear have marketing materials translated into various languages, and presumably they don't have support staff capable of speaking languages like Chinese, German or Russian either (well, at least not in an official capacity). This isn't to pick on them; they may have considered those things and found them too much of an expense/distraction/hassle for the time being - they certainly know their business better than I do - and that they simply are content to make do with English. Other businesses, however, may decide that a local touch is important to attracting clients. What do you need to look at to make your service more attractive to people in other countries? In no particular order:
I've put up a proposal for the Debian part of the Google Summer of Code 2010 and this proposal is based on previous work with edos-debcheck for Emdebian Grip. It started from a simple mailing list post.
(While I have a lot big stuff going on in my life right now, I don't feel
most of it's suitable for blogging. So here's a bit of insignificant fluff.)
I have this nethack game that won't end. I started it before Christmas,
and got much, much deeper into the dungeon than I've ever managed before.
Taunted Jerry with it as we hung out over the holidays; he repeatedly losing
while I quested and cleared out the castle, and genocided liches to get
through the valley of the dead, and generally just kept building up a
character that wouldn't quit.
Yeoj the Student of Metals St:18/06 Dx:18 Co:18 In:16 Wi:18 Ch:14 Lawful
Dlvl:42 $:0 HP:138(138) Pw:29(147) AC:-15 Xp:20/5196103 T:66175 Hungry Burdened
I should mention: I mostly don't play nethack often, only swinging back
around to give it another try every year or two. So for many years I'd play
a few games that quickly ended in Yet Another Stupid Death, and
occasionally feel proud when I got as far as Minetown or the Oracle.
Recently, though, I've started focusing on Monks, and gotten rather good
at playing them in the early game.
So, this is my first character who got through the early game, completed
the quest, and went well into the late-game. I know where that vibrating
square is, I have plenty of wishes to round out my kit. So it would be an
ascention candidate, except my chances of doing that on the first try are
... slim.
And, do I want to? The descriptions of what I'd need to do to even try
seem a bit tedious.
So, unsure if he wants to ascend, and fearing YASD, my monk sits in his
recently aquired tower at level 42 of the dungeon. For months. And so
I can't play nethack.
The character I'm role playing has decided to opt out of the game. (Oops, I
meant to leave real life out of this, but it's somehow snuck back in
there.)
Meanwhile, this Dungeon Crawl Stone Soup that
@Play keeps talking about
looks interesting...
(previously previously)
I m working for a customer who s using IBM blades. Remote access isn t limited to e.g. SoL but also possible through a Remote Console feature using a Java applet.
After migrating one of my 32bit systems to a fresh 64bit system I suddenly couldn t use this Remote Console feature any longer. The error message was (leaving it for search engines and help other affected users):
load: class vnc.VncViewer.class not found. java.lang.ClassNotFoundException: vnc.VncViewer.class at sun.plugin2.applet.Applet2ClassLoader.findClass(Applet2ClassLoader.java:152) at java.lang.ClassLoader.loadClass(ClassLoader.java:303) at java.lang.ClassLoader.loadClass(ClassLoader.java:248) at sun.plugin2.applet.Plugin2ClassLoader.loadCode(Plugin2ClassLoader.java:447) at sun.plugin2.applet.Plugin2Manager.createApplet(Plugin2Manager.java:2880) at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Plugin2Manager.java:1397) at java.lang.Thread.run(Thread.java:619) Caused by: java.net.ConnectException: Network is unreachable at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333) at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195) at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366) at java.net.Socket.connect(Socket.java:525) at sun.net.NetworkClient.doConnect(NetworkClient.java:161) at sun.net.www.http.HttpClient.openServer(HttpClient.java:394) at sun.net.www.http.HttpClient.openServer(HttpClient.java:529) at sun.net.www.http.HttpClient.<init>(HttpClient.java:233) at sun.net.www.http.HttpClient.New(HttpClient.java:306) at sun.net.www.http.HttpClient.New(HttpClient.java:323) at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:860) at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:801) at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:726) at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1049) at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:373) at sun.plugin2.applet.Applet2ClassLoader.getBytes(Applet2ClassLoader.java:458) at sun.plugin2.applet.Applet2ClassLoader.access$000(Applet2ClassLoader.java:46) at sun.plugin2.applet.Applet2ClassLoader$1.run(Applet2ClassLoader.java:126) at java.security.AccessController.doPrivileged(Native Method) at sun.plugin2.applet.Applet2ClassLoader.findClass(Applet2ClassLoader.java:123) ... 6 more Exception: java.lang.ClassNotFoundException: vnc.VncViewer.classThe error message might not be obvious at a glance and that s why I m writing about it actually. It s NOT the:
load: class vnc.VncViewer.class not found.why it s failing but instead the real reason for the failure is the:
java.net.ConnectException: Network is unreachableAs you can read in Debian s Bug Tracking System in bug #560044:
Netbase has recently introduced the sysctl-settingTo quote /etc/sysctl.d/bindv6only.conf:
net.ipv6.bindv6only=1 in /etc/sysctl.d/bindv6only.conf and this setting will probably be the default in squeeze. This setting breaks networking in java, and any traffic will always
result in a java.net.SocketException: Network is unreachable .
When disabled, IPv6 sockets will also be able to send and receive IPv4 traffic with addresses in the form ::ffff:192.0.2.1 and daemons listening on IPv6 sockets will also accept IPv4 connections. When IPV6_V6ONLY is enabled, daemons interested in both IPv4 and IPv6 connections must open two listening sockets.To work around this issue you can either execute the Java process through "java -Djava.net.preferIPv4Stack=true" or to change the IPv6 behaviour system wide execute "sysctl -w net.ipv6.bindv6only=0". To make this setting permanent across reboots adjust the setting inside /etc/sysctl.d/bindv6only.conf. After applying this workaround the Remote Console should work again.
although zack tries to cheer
me up (thanks!) I'm still not really happy with the declining amount of
RC bugs I manage to look at. but at least I don't forget about them
completely :)
Dear friends of Debian,# patch branches without an explicit dependency depend on the root of the
# patchset tree
# A Root can be given as either a fix commit (seen here), a branch or a tag.
# A fixed commit or tag is useful to maintain a patchset against an older
# upstream version
ROOT: 6a8589de32d490806ab86432a3181370e65953ca
# A tag as a dependency
#ROOT: upstream/0.1.2
# A branch as a dependency
#ROOT: upstream
# A regular patch with it's name and last commit
BRANCH: debian/use-debian-jars-in-build-xml 4bab542c261ff1a1ae87151c3536f19ef02d7937
# two other regular patches
BRANCH: upstream-jira/HDFS-1234 a8e4af13106582ca1bfbbcaeb0537f73faf46d87
BRANCH: upstream-jira/MAP-REDUCE-007 e3426bcbcb2537478f851edcf6eb04b34f6c7106
# This patch depends on the above two patches
# The sha1 below the dependency patches references a merge commit of the two
# dependencies
BRANCH: upstream-jira/HDFS-008 517851aa829d77e09bc5e59985fed1b0aa339cc6
DEPENDENCIES:
upstream-jira/HDFS-1234
upstream-jira/MAP-REDUCE-007
cc294f2e4773c4ff71efb83648a0e16835fca841
# A patch branch that belongs to the patch branch, but won't get exported (yet)
BRANCH: upstream-jira/HDFS-9999 74257905azgsa4689bc5e59985fed1b0aa339cc6
BRANCH-FLAGS: noexport
In my last post, about GRUB2 theming, there were a few people who were unhappy at the perceived difficulty of creating GRUB2 themes, largely based on the lack of documentation. And to be honest, those people are right if the documentation were complete & correct when I started, then I wouldn t have ended up bumping into all the bugs I did. So, to help on that front and to help kick-start GRUB2 theming in general, I m announcing Larval. More GRUB2 themes means more awesome-looking systems in the wild. Hopefully the GRUB2 upstream will embrace it as a project to help raise the profile and potential of GRUB2.
It didn t take me long to realise the most obvious way to develop such an editor: GRUB2 s canvas-based layout system has an awful lot in common with XAML, so the obvious choice was to develop using Silverlight (or, more specifically, Gtk.Moonlight). Larval s internal theme format is XAML files, which are then exported to (and imported from) GRUB2 s simple text based files.
The biggest piece of work, to be honest, is the Managed implementation of a PF2 font reader/writer, so you can design a theme using the regular TrueType fonts of your choice, then have them automatically ported to PF2 format as required.
I look forward to plenty of community input on Larval, once it reaches a point where I m sufficiently pleased with my (Ms-PL licensed) code to share it with the world. Until then, you ll have to make do with the above screenshot!
Congratulations to everyone involved in what looks like a very good GNOME
release!
Interesting times are now ahead for the GNOME project, as on the plate is
now a big release like 3.0. That will mean a lot of changes to the desktop
we've got used to in the last decade, and I hope it ends up being successful,
innovative and useful.
Debian has packages for GNOME Shell, and a special
gnome3-session which starts Mutter + Shell. I experimented
with it last week at my work place, and had mixed feelings with the current
status.
I'm not a big fan of hard dependencies on Direct Rendering. My main
computer is an Athlon 800MHz. Compiz crawls on it, and sadly Mutter
is basically unusable on it. At the office, I have P4-based system with 1GB
of RAM, which runs GNOME 2.28 OK. When I switched to the GNOME 3 session, it
showed that it's getting old. I also experienced X crashes and kernel
oopses, apparently a classic for ATI users using a composited window manager.
This being said, I consider myself lucky because both systems have ATI cards
and can do DRI using free software. If I was forced to use nVidia non-free
drivers, it'd probably mean I'd stick with the Panel until that wasn't an
option at all.
I am aware we'll see improvements both in Xorg/kernel and GNOME before
GNOME 3.0 is released next Autumn, and have high hopes for a release that
is accepted by our users really fast (avoiding a KDE 4.0 situation). GNOME
hackers have done good stuff for ages, and 3.0 will be a new example!
Our main problem is that we don't have the source code to either the kernel
they use (2.6.24.2 with patches from Samsung and others), or the u-boot
bootloader.
SSH was available without password for the user account and various basic
errors allowed us to root the system relatively quickly. Brute force cracked
the root password a few days later.
The only information we did have was from the provided desktop system (which
is really quite good and certainly looks very polished, but in the end still
way too limited), what's on the flash memory and the contents ofa "firmware
upgrade" image they provided.
Having that firmware upgrade image proved very important as it gave us a good
idea how to boot the system from SD card and made it possible to locate the
kernel, u-boot bootloader and other files in flash memory.
Googling for some boot messages we found two kernel source trees (for a
different device: SmartQ) that looked promising as a basis.
After some disassembly work by Luke Kenneth Casson Leighton on the kernel
to get LCD timings and correct GPIO data we managed to get a basic working
kernel: LCD, USB (and thus keyboard and touchpad), and wired networking.
Although there are still loads of things that need improving/fixing, that gave
me enough to work with to try to get Debian Installer going.
The main limitations for running D-I are that we cannot change the bootloader
configuration and that their boot procedure does not use an initrd. But we did
work out how to boot a custom kernel from an external SD card by making
creative use of their "firmware upgrade" procedure.
Essentially I needed to find a way to run D-I by only booting a kernel.
Piggy-backing an initrd onto a kernel is possible (using the 'bootpImage'
target from the upstream kernel build system), but then the size of kernel
plus initrd is limited to 4 MB and that is really too limited for a
decent D-I initrd (especially if you want full i18n support).
I ended up creating a micro-initrd (only 66 kB!) which only function is
to mount the external SD card, load the real D-I root initramfs (which now
no longer has any real size limitation) and then run init in that.
After adding some relatively minor customizations for this netbook (such as
installing the kernel from a custom repository on alioth), the installer was
up and running.
As the framebuffer worked without problem for the newt frontend, I next wondered
if it would be possible to also get the graphical installer working. This should
be easier for non-x86 systems after the recent switch from DirectFB to X.Org as
backend for the graphical installer. And the image below shows it was.
I had to create an /etc/xorg.conf to get the USB keyboard and touchpad working
(apparently auto-detection does not quite work for less standard hardware), but
that was basically it.
So now all we have to do is get all the remaining kernel issues sorted out...
The additional resources provided by Sun allowed us to make major improvements to Tcl and Tk. Scott Stanton and Ray Johnson ported Tcl and Tk to Windows and the Macintosh, so that Tcl became an outstanding cross-platform development environment; Windows quickly came to be the most common platform. Jacob Levy and Scott Stanton overhauled the I/O system and added socket support, so that Tcl could easily be used for a variety of network applications. Brian Lewis built a bytecode compiler for Tcl scripts, which provided speedups of as much as a factor of 10x. Jacob Levy implemented Safe-Tcl, a powerful security model that allows untrusted scripts to be evaluated safely. Jacob Levy and Laurent Demailly built a Tcl plugin, so that Tcl scripts can be evaluated in a Web browser, and we created Jacl and TclBlend, which allow Tcl and Java to work closely together. We added many other smaller improvements, such as dynamic loading, namespaces, time and date support, binary I/O, additional file manipulation commands, and an improved font mechanism. Unfortunately, after several years, Sun decided that they wanted to promote one and only one language. And that language was Java. So Ousterhout and many people from his team decamped to a startup that Ousterhout founded, called Scriptics, where the Tcl and Tk innovations continued:
In 1998, Scriptics made several patch releases for Tcl 8.0 to fix bugs and add small new features, such as a better support for the [incr Tcl] extension. In April 1999, Scriptics made its first major open source release, Tcl/Tk 8.1. This release added Unicode support (for internationalization), thread safety (for multi-threaded server applications), and an all-new regular expression package by Henry Spencer that included many new features as well as Unicode support.
However, as many a company based around open source was to find later, it's a tough space to be in. Scriptics changed its name to Ajuba, and was eventually sold (at a healthy profit, apparently, making it a relative dot com success story, all in all) to Interwoven, for the "B2B" technology that Ajuba had developed. Interwoven was not interested in Tcl, particularly, so, to create a system for the ongoing development and governance of the language, the "Tcl Core Team" was created.
This was something of a blow to Tcl, but certainly not fatal: Perl, Python, Ruby, PHP, Lua have all had some paid corporate support, but it has by no means been constant, or included large teams.
At the same time in the late 90ies, open source was really starting to take off in general. Programmers were making all kinds of progress, and had begun to make Linux into what is today the world's most widely used server platform, and laying the groundwork for the KDE and Gnome desktops. While these may still not be widely used, they are for the most part very polished systems, and leaps and bounds better than what passed for the 'Unix desktop' experience in the 90ies.
One of the key bits of work that was added to Tk was to make it look pretty good on Microsoft Windows systems. This was in an time when the "enterprisey" folks were turning away from Unix in the form of AIX, Solaris, HPUX, et al. and taking up NT as the platform of choice, so it was in some ways sensible to make Tk work well there, and in any case as a cross platform GUI toolkit, it ought to work well there in any case.
And, on the Unix side, Tk emulated the expensive, professional Motif look and feel that serious Unix programmers used. What could go wrong?
As Gnome and KDE continued to mature, though, what would become one of Tk's major (in my opinion) marketing blunders took root. I have it on good authority, from someone who was there in the office, that the Scriptics guys working on Tcl and Tk viewed Gnome and KDE (and the Gtk and Qt toolkits) as not really worth their while. To be fair, since Tk has always been under a liberal BSD style license, the Qt toolkit has always been "off limits". Still, though, the attitude was that Tk was a standalone system, and since it ran on pretty much any Unix system, it didn't need to bother with Gnome or KDE. Gradually, though, as more and more people used Gnome and KDE exclusively on Linux, the Tk look and feel began to look more and more antiquated, a relic from the 1990ies when Motif (which has since pretty much disappeared) was king. Tk applications started to really stand out by not looking at all like the rest of the operating system. And, while Linux may not be responsible for a vast portion of the world's desktops, it is widely used by developers, who were turned off by the increasingly creaky look of the Tk applications they saw.
Tk is and was actually a fairly flexible system, and it would have been possible to tweak the look and feel to make it look a bit better on Linux, without even doing any major work. Maybe not perfect, but certainly better looking. Nothing happened, though.
Another problem was that Tk and Tcl made it so easy to create GUIs that anyone could, and did, despite, in many cases, a complete lack of design skills. You can't particularly blame the tools for how they're used, but there was certainly a cultural problem: if you read most of the early Tcl and Tk books, and even many of the modern ones, there are hundreds of pages dedicated to exactly how to use Tk, but few to none explaining even basic user interface concepts, or even admonitions to the user to seek out that knowledge prior to attempting a serious GUI program.
The end result is that a lot of Tk programs, besides just looking "old fashioned" had fairly poor user interfaces because they were made by programmers who did not have a UI/design culture.
Contrast that with Gnome and KDE, which have made a point of focusing on how to make a good GUI for their systems, complete with guidelines about how applications should behave. It may have taken them some time to get things right, but they have done a lot to try and instill a culture of creating high quality, well-integrated GUI's that are consistent with the system where they run.
Lately, there has been a lot of work to update the Tk look and feel, and it has finally started to bear fruit. However, in terms of marketing, the damage has already been done: the image of "old, crufty Tk" has been firmly planted in countless developers' minds, and no amount of facts are going to displace it in the near future.
Another problem Tcl faced, as it grew, was the tug-of-war between those wishing to see it small, light, and easy to distribute embedded within some other program, and those wishing it to become a "full-fledged" programming language, with lots of tools for solving every day programs. Unfortunately, that tug of war seems to have left it somewhere in the middle. Lua is probably more popular these days as an embedded language, because it is very small, and very fast, and doesn't have as much "baggage" as Tcl. Meaning, of course, that it doesn't do as much as Tcl either, but for a system where one merely wishes to embed a scripting language, without much 'extra stuff', Tcl's extra functionality is perhaps a burden rather than a bonus. On the other hand, while Perl was happily chugging along with their CPAN system for distributing code, giving users easy access to a huge array of add-on functionality, and Python was building up a "batteries included" distribution, that included a lot of very useful software straight out of the box. Tcl, on the other hand, chose to keep the core distribution smallish, and only lately has got some semblance of a packaging and distribution system, that is, however, run by ActiveState, and is (at least according to a cursory glance at the Tcl'ers wiki), not even fully open source. The lack of a good distribution mechanism, and, in the meantime, eschewing a larger, batteries-included main distribution left Tcl users with a language that, out of the box, did significantly less than the competition. Technically, a Python style "big" distribution would not have been all that difficult, so once again, I think this is a marketing problem: a failure of the Tcl Core Team to observe the "market", assess what users needed, and act on it in a timely manner.
Somewhat related to the large Tcl vs small Tcl issue was one particular extension, or extensions to the language that was noticeably absent: a system for writing "object oriented" code. Tcl, at heart, will never be an OO language through and through, like Ruby or Smalltalk, but that doesn't mean that an OO system for it is not a useful way of organizing larger Tcl systems. Indeed, Tcl's syntax is flexible enough that it's possible to write an OO system in Tcl itself, or, optimizing for speed, utilizing the extensive C API in order to create new commands. Over the years, a number of such systems have arisen, the most well-known being "Incr Tcl" (a play on the incr command, which is akin to += 1 in languages like C). However, none of these extensions was ever included with the standard Tcl distribution or somehow "blessed" as the official OO system for Tcl. This meant that a newcomer to Tcl wishing to organize their code according to OO principles had to pick a system to use from several competing options. And of course, newcomers are the least able to judge a complex feature like that in a language, making it a doubly stressful choice. Furthermore, even experienced Tcl programmers who wanted to share their code could not utilize an OO system if they wanted their code to work with just standard Tcl. Also, if their code had a dependancy on some OO system, it would require the user to download not only the extension in question, but the OO system it was built on, which, naturally, might conflict with whatever OO system the user had already selected! As of Tcl 8.6, thanks to the work of Donal Fellows, Tcl is finally integrating the building blocks of an OO system in the core itself, but this effort is probably something like 10 years too late.
Some other more or less minor things that have taken too long to get integrated in the Tcl or Tk distributions include the PNG format (still not there in a production release of Tcl), a readline-based command line (Tkcon is nice, but not a replacement for simply being able to type "tclsh" and get a nice, functional shell like Python, Ruby and most other languages have. This could easily lead to a bad first experience for someone trying out Tcl). Tcl also took too long to integrate a first-class hash type (accessed with the 'dict' command), which only appeared in 8.5. Its "arrays" aren't bad, but don't quite have the full power of a hash table as dict implements them. Once again, the code to do these things was/is out there, it has just been a matter of integrating it into Tcl and Tk, which has been a slow process.
One actual technical problem that Tcl faces is the concept that all values must be representable as a string. This is more or less ok for things like lists, hash tables or numbers, but is problematic when the user wishes to represent a value that simply isn't a string. A basic example is a file handle, which at the C API level is a FILE*. How does Tcl get around this? It keeps an internal hash table with a Tcl-script accessible string, such as "file5" that points to a FILE * value that is used internally by file commands. This works pretty well, but there is a big "but": since you can compose a string like "file5" at any time, that must be able to access the actual file pointer, you can't do any sort of "garbage collection" to determine when to clean things up automatically. Other languages have explicit references to resources, so the program "knows" when a resource is no longer referenced by the rest of the program, and can clean it up. Therefore, the programmer must explicity free any resources referenced this way. This explanation is simplifying things somewhat, but it is something I view as a technical problem with Tcl.
If you've been following along, you've noticed a lot of "these days" and "recently". That's because Tcl is still very actively developed, with a lot of new ideas going into it. However, if you look at the release dates, it seems that after Ajuba was sold off, and Ousterhout pretty much abandoned an active role in the language for good, placing it in the hands of the Tcl Core Team, there was a lull in the momentum, with Tcl 8.5 taking 5 years to be released.
This is actually, in my opinion, an interesting phenomenon in languages: you risk hitting some kind of local maximum when your language is popular enough to have a lot of users who will be angry if things are changed or accidentally broken in the course of big upheavals. So you have to slow down, go carefully, and not rock the boat too much. On the other hand, there is an opportunity cost in that newer languages with less to lose can race ahead of you, adding all kinds of cool and handy new things, or simply fix and remove "broken" features. Erlang is another system that has, in my opinion, suffered from this problem to some degree, but this article is long enough already! Once again, though, not really a technical issue, but a problem with how the code was managed (and not an easy one to solve, at that).
A Tcl failure that I was personally involved with was the web infrastructure. What went on to become Apache Rivet was one of the first open source Apache/Tcl projects, and was actually quite a nice system: it was significantly faster than PHP, and of course made use of Tcl, which at the time had a large library of existing code, and could be easily repurposed for projects outside the web (or the other way around: non-web code could be brought in to a web-based project). One thing I ought to have done differently with the Apache Rivet project was listen to the wise advice of Damon Courtney, my "partner in crime" on the project, who wanted to see Apache Rivet have a fairly "fat" distribution with lots of useful goodies. Rails and Django, these days, have shown that that's a sensible approach, rather than relying on lots of little extensions that the user has to go around and collect. The code was out there, I should have helped make Rivet do more "out of the box".
A problem that is and it isn't: the syntax. Tcl's syntax is amazingly flexible. Since everything is a command, you can write new commands in Tcl itself - and that goes for control structures, too! For instance, Tcl has a "while" command, but no "do ... while". It's very easy to implement that in Tcl itself. You simply can't do that in most "everyday" languages. However, this comes at something of a "cost". The syntax, for your average programmer who doesn't want to go too far out of their comfort zone, is perhaps a little bit further afield from the C family of languages than they would prefer. Still though, a "human" problem, rather than a technical one. Perhaps, sadly, the message is that you'd better not "scare" people when introducing a new language, by showing people something that doesn't look at least a little bit familiar.
Conclusions? First and foremost, that, gradually, Tcl and Tk continue to be improved. However, if one visits developer forums, there are also a lot of negatives associated with the Tcl and Tk "brands", and I am not sure if it will be possible to rectify that. So what can we learn from the rise and subsequent "stagnation" of Tcl?
ACOSS, the Atlantic Canada Open Source Showcase, interviewed me this month. I talked about the Debian Eee PC project.
Next.