Initial commit: HPR Knowledge Base MCP Server
- MCP server with stdio transport for local use - Search episodes, transcripts, hosts, and series - 4,511 episodes with metadata and transcripts - Data loader with in-memory JSON storage 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
277
hpr_transcripts/hpr2386.txt
Normal file
277
hpr_transcripts/hpr2386.txt
Normal file
@@ -0,0 +1,277 @@
|
||||
Episode: 2386
|
||||
Title: HPR2386: The Decline and Fall of Tcl
|
||||
Source: https://hub.hackerpublicradio.org/ccdn.php?filename=/eps/hpr2386/hpr2386.mp3
|
||||
Transcribed: 2025-10-19 02:06:56
|
||||
|
||||
---
|
||||
|
||||
This episode of HBR is brought to you by An Honest Host.com, get 15% discount on all shared
|
||||
hosting with the offer code HBR15. That's HBR15. Better web hosting that's
|
||||
Honest and Fair at An Honest Host.com Hi, I'm Clark Gay. I've long been fascinated by
|
||||
tickle and I used it sporadically about a decade to a decade and a half ago. At work I
|
||||
created a GUI around a repeatedly run XSLT transformation that one of my users
|
||||
would have to do on a somewhat recurring basis and in university was used for package definitions
|
||||
on the Solaris machines. I did use it more recently but just for some SQLite interfacing.
|
||||
The tickle and SQLite communities have some pretty close connections and tickle even uses fossil
|
||||
as the inversion control system just like SQLite does. Fossil is of course developed by SQLite
|
||||
people and it uses a SQLite backend. So what fascinates me about tickle is how it's basically
|
||||
everything that list isn't especially scheme but it still manages to do many of the same things
|
||||
but sort of backwards if you come from a list kind of mindset. So scheme and tickle form sort of
|
||||
dual in the mathematical sense and back in the day when I was a frequent reader and writer of
|
||||
the C2 Wiki I remember there was a tickle user there that was always showing list spurs how
|
||||
everything they thought was impossible to do in tickle was actually possible just not in the way
|
||||
they wanted to do it and probably in a way that list spurs found a bit revolting but the history
|
||||
of tickle is mixed in with the scheme history because of the tickle war that actually started
|
||||
guide development. So there's a link for that in the show notes about the tickle war.
|
||||
So tickle was only its way to greatness in the 90s and then something happened and I found a
|
||||
blog post by a long time tickle contributor and he has analyzed why and I'm going to read the
|
||||
whole blog post verbatim. The link is in the show notes. It's not a super recent post it's from
|
||||
2010 but I think the observations are interesting whatever year it is. There is no explicit licensing
|
||||
on the blog so I contacted the author and he gave me permission to do basically whatever I want
|
||||
as long as I provide the attribution. So here it is where tickle and tk went wrong by David
|
||||
Ann Welton at the DEDASIS journal posted on the 30th of March 2010.
|
||||
Where tickle and tk went wrong? I've been pondering this subject for a while and I think I'm finally
|
||||
ready to write about it. Tickle was for many years my go-to language of choice. It's still near and
|
||||
dear to me in many ways and I even worked on a portion of a book about it. Link to book.
|
||||
However, examining what went wrong is quite interesting. If one attempts as much as possible a
|
||||
dispassionate and a litigal approach that aims to gain knowledge rather than assign blame or
|
||||
paper over real defects with a rose colored vision of things. It has made me consider and learn
|
||||
about a variety of aspects of the software industry such as economics and marketing that I had not
|
||||
previously been interested in. Indeed my thesis is that tickle and tk's problems primarily stem
|
||||
from economic and marketing so human factors rather than any serious defects with the technology itself.
|
||||
Before we go further I want to say that tickle is not dying. It's still a very widely used
|
||||
language with a lot of code in production and importantly a healthy, diverse and highly talented
|
||||
core team that is dedicated to maintaining and improving the code. That said since its heyday
|
||||
in the late 90s it has not thrived I guess we can say. I would also like to state that
|
||||
hindsight is 2020. It's easy to criticize after the fact and not nearly so easy to do the right
|
||||
thing in the right moment. This was one reason why I was ready to send to write this article.
|
||||
Let me repeat that I'm writing it not out of balance or frustration. I went through a frustrated
|
||||
phase but that's in the past but because at this point I think it's a genuinely interesting case
|
||||
history of a rise and gentle decline of a widely used software system and that there is a lot
|
||||
to be learned. At the height of its popularity tickle was up there with Pearl which was
|
||||
de-scripting language in those days. Pearl, tickle and Python were often mentioned together.
|
||||
Ruby existed but was virtually unknown outside of Japan. PHP was on the rise but still hadn't really
|
||||
come into its own. Lua hadn't really carved out the niche for itself yet either.
|
||||
tickle is no longer one of the popular languages these days so to say that it hasn't had problems
|
||||
is to bury one's head in the sand. It has fallen in terms of popularity.
|
||||
To examine what went wrong we should probably start off with what went right. TK.
|
||||
This was probably the biggest draw. Easy cross-platform GUI's were and are a huge reason for
|
||||
the interesting tickle. TK is actually a separate bit of code but since many of the widgets
|
||||
subscript in the tickle the two are joined at the hip. Still though TK is compelling enough that
|
||||
it's utilized as the default GUI library for half a dozen other languages.
|
||||
A simple powerful language. Tickle is easy to understand and get started with.
|
||||
It borrows from many languages but is not an esoteric creation from the CS department that is
|
||||
inaccessible to average programmers. Easily embeddable extendable. Remember that tickle was
|
||||
created in the late 80s when computers were orders of magnitude less powerful than today.
|
||||
This meant that fewer tasks could be accomplished via scripting languages but a scripting language
|
||||
that like you write routines in C or conversely let the main C program execute bit subscript code
|
||||
from time to time was a very sensible idea and tickle still has one of the best and most extensive
|
||||
C APIs on the game. An event loop. Lately systems like Python's twisted and no JS have made event
|
||||
driven programming popular again but tickle has had it for years. BSD license. This meant that
|
||||
you could integrate tickle in your proprietary code without worrying about the GPL or any other
|
||||
legal issues. These features led to tickle being widely used from Cisco routers to advanced
|
||||
television graphics generation programs to the AOL server web server which was busy serving
|
||||
at large quantities of dynamic web pages when many of us were still filling around with comparatively
|
||||
slow and clunky CGI programs in Perl. Note also that there have been a lot of cool things to have
|
||||
gone into tickle in the meantime. It has a lot of impressive features many more than most people
|
||||
realize and has had a lot of them for a while. Check out tickle.tk to learn more about the good
|
||||
stuff but that's not the point of this article. There was a healthy active community of developers
|
||||
producing lots of interesting add-ons for the language and working on the language itself.
|
||||
This culminated in its adoption by some microsystems which hired the language creator Dr. John
|
||||
Austerholt and a team of people who added a lot of great features to the language.
|
||||
Quoting from Austerholt's history of tickle page and note from Cluckier I have no idea how to
|
||||
pronounce this name but it looks Dutch so I've pronounced it in what I believe is Dutch pronunciation.
|
||||
The additional resources provided by Sun allowed us to make improvements to tickle and TK.
|
||||
Scott Stanton and Ray Johnson ported tickle and TK to Windows and the Macintosh so that tickle
|
||||
became an outstanding cross-platform development environment. Windows quickly came to be the
|
||||
most common platform. Check up Levi and Scott Stanton overhauled the IO system and added
|
||||
socket support so that tickle could easily be used for a variety of network applications.
|
||||
Brian Lewis built the bytecode compiler for tickle scripts which provided speedups of as much
|
||||
as a factor of 10 times. Jacob Levi implemented safe tickle, a powerful security model that
|
||||
allows contrastive scripts to be evaluated safely. Jacob Levi and Lauren Demaley built a tickle
|
||||
plugin so that tickle scripts can be evaluated in a web browser. We created Jackal and tickle
|
||||
blend which allowed tickle and Java to work closely together. We added many other smaller
|
||||
improvements such as dynamic loading, namespaces, time and date support, binary IO, additional
|
||||
final inflation, 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, Austerhold and many people from his team decamped to a startup that Austerhold founded
|
||||
called Scriptix where the tickle and TK innovations continued.
|
||||
In 1998, Scriptix made several patch releases for tickle A.0 to fix bugs and add small new features
|
||||
such as better support for the incertical extension. In April 1999, Scriptix made its first
|
||||
major open source release, tickle TK A.1. This release added unicode support for international
|
||||
ization, 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. Scriptix changed its name to a juba 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 a juba had developed. Interwoven was not interested in tickle particularly,
|
||||
so to create a system for the ongoing development and governance of the language, the tickle core team
|
||||
was created. This was something of a blow to tickle, but certainly not fatal. Pearl,
|
||||
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 90s, open source was really
|
||||
starting to take off in general. Programmers were making all kinds of progress and have begun
|
||||
to make Linux into what it is today. 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 leaves and bounds
|
||||
better than what passed for their Unix desktop experience in the 90s. 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 a time when the enterprise folks were turning away from Unix in the form of AX,
|
||||
Solaris, HPUX at all and taking up NTE as the platform of choice. So it wasn't some way sensible
|
||||
to make TK work well there, and in any case a cross-platform GUI tool kit it ought to work well
|
||||
there in any case. And on the Unix site, 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 to Groot? I have it
|
||||
on good authority from someone who was there in the office that the scriptics guys working on TK
|
||||
viewed GNOME and KDE and the GTK and Qt toolkits are not really worth their while.
|
||||
To be fair, since TK has always been under a liberal BSD style license,
|
||||
the Qt tool kit 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 1990s 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's 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 wouldn't be impossible 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 TK made it so easy to create GUIs that anyone could
|
||||
indeed, 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
|
||||
analytical 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 Google
|
||||
program. The end result is that a lot of TK programs, beside 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 NOM and KDE, which have made a point of focusing on how to make a good
|
||||
GUI for the 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 GUIs that are consistent with the system when they run.
|
||||
Lately, there's 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 Crafty TK has been firmly planted in countless developer's minds, and no amount of facts
|
||||
are going to displace it in the near future. Another problem tickled 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 everyday 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's very small and very fast and doesn't have as much baggage as tickle.
|
||||
Meaning, of course, that it doesn't do as much as tickle either, but for a system where we're
|
||||
merely wishes to embed a scripting language without much extra stuff, tickles extra functionalities
|
||||
perhaps and burden rather than a bonus. On the other hand, while Pearl was happily
|
||||
chugging along with their C-PAN system for distributing code, giving users easy access to
|
||||
huge array of and-on functionality, and Python was building up a battery's included distribution,
|
||||
that included a lot of very useful software straight out of the box. Tickle on the other hand,
|
||||
chose to keep the core distribution small-ish, and only lately has got some semblance of a
|
||||
package and distribution system. That is, however, run by active state and is at least according
|
||||
to cursory glance at the tickler's wiki, not even fully open source.
|
||||
The lack of a good distribution mechanism, and in the meantime,
|
||||
is skewing a larger battery's included main distribution. Left tickle users with the 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 tickle core team to observe the market,
|
||||
assess what users need and act on it in a timely manner.
|
||||
Somewhat related to the large tickle versus small tickle issue was one particular extension
|
||||
or extensions to the language that was noticeably absent, a system for writing object-oriented
|
||||
code. Tickle at heart will never be an OOO language through a through like Ruby or small talk,
|
||||
but that doesn't mean an OOO system for it is not a useful way of organizing larger tickle systems.
|
||||
Indeed, tickle syntax is flexible enough that is possible to write an OOO system in tickle itself,
|
||||
or optimizing for speed, utilizing the extensive CAPI in order to create new commands.
|
||||
Over the years, a number of such systems have risen. The most well-known being
|
||||
Inkru Tukko, a play on the Inkru command, which is akin to plus plus equals one in languages like C.
|
||||
However, none of these extensions were ever included with the standard tickle distribution or
|
||||
somehow blessed as the official OOO system for Tukko. This meant that a newcomer to tickle wishing
|
||||
to organize their code according to OOO 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 tickle programmers who
|
||||
wanted to share their code could not utilize an OOO system if they wanted the code to work with
|
||||
just standard tickle. Also, if the code had a dependency on some OOO system, it would require the
|
||||
user to download not only the extension in question, but the OOO system it was built on, which,
|
||||
naturally, might conflict with whatever system the user had already selected. As of tickle 8.6,
|
||||
thanks to the work of Donald Fellows, tickle is finally integrating the building blocks of an OOO
|
||||
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
|
||||
tickle RTK distributions include the PNG format still not there in the production release of tickle.
|
||||
A readline-based command line, TKconn is nice, but not a replacement for simply being able to type.
|
||||
Tickle shook 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 tickle.
|
||||
Tickle also took too long to integrate a first-class hash type access to the DICT command,
|
||||
which only appeared in 8.5. It's a raise on 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 tickle and TK, which has been a slow process.
|
||||
One actual technical problem that tickle faces is the concept that all values must be representable as a string.
|
||||
This is more or less okay for things like lists, hash tables or numbers,
|
||||
but it's problematic when the user wishes to represent the value that simply isn't a string.
|
||||
A basic example is a file handle, which at the CAPI level is a file star.
|
||||
How does tickle get around this? It keeps an internal hash table with a tickle script accessible
|
||||
string, such as file file, that points to a file star value that is used internally by file
|
||||
commands. This works pretty well, but there's a big but. Since you can compose a string like
|
||||
file 5 at any time that must be able to access the actual file pointer, you can 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 explicitly free
|
||||
any resources referenced this way. This explanation is simplifying things somewhat,
|
||||
but it's something of you as a technical problem with tickle.
|
||||
If you've been following along, you've noticed a lot of these days, and recently,
|
||||
that's because tickle 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 a jubo was sold off,
|
||||
and I also called pretty much abandoned an active role in the language for good,
|
||||
placing it in the hands of tickle core team, there was a law in the momentum,
|
||||
with tickle 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 up
|
||||
hills. So you have to slow down, go carefully, and not rock the boat too much. On the other hand,
|
||||
there is an opportunity costing that newer languages with less to lose can raise ahead of you,
|
||||
adding all kinds of cool and hand-new things, or simply fix and remove broken features.
|
||||
Erlang is another system that has, in my opinion, suffered from this problem,
|
||||
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 tickle failure that I was personally involved with
|
||||
was the web infrastructure. What went on to become Apache Rivets was one of the first open-source
|
||||
Apache tickle projects. It was actually quite a nice system. It was significantly faster than
|
||||
PHP yet, of course, made use of tickle, 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 into a web-based project. One thing I also 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. I should have helped make Rivet
|
||||
do more out of the box. A problem that is and isn't. The syntax. Tickle syntax is amazingly
|
||||
flexible. Since everything is a command, you can write new commands into it itself. And that
|
||||
goes for control structures too. For instance, tickle has a while command, but no due while.
|
||||
It's very easy to implement that in tickle itself. You simply can't do that in most everyday
|
||||
languages. However, this comes in something of a cost. The syntax for your average programmer who
|
||||
doesn't want to go far out of their comfort zone is perhaps a little bit further afield from the
|
||||
C family languages than they would prefer. Still though, a human problem rather than a technical one.
|
||||
Perhaps sadly, the message is that you 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 tickle and decay continue to be improved. However, if one visits
|
||||
developer forums, there are also a lot of negatives associated with the tickle and decay brands.
|
||||
And I'm not sure it will be possible to rectify that. So, what can we learn from the rise and
|
||||
subsequent stagnation of tickle? Success in the first place came from doing one particular thing
|
||||
very well and making it a lot easier than other existing systems at the time. That's a good strategy.
|
||||
Not staying up to date can be deadly. Of course, it can be tricky to know what's a genuine trend
|
||||
than what's just a fad in this industry and picking the right things to stay up to date with
|
||||
can be tricky. That said, there are a number of areas where tickle and decay failed to follow what
|
||||
became very clear directions, until way too late. Do your best not to get trapped between existing
|
||||
users who don't want to rock the boat and don't lose your agility and ability to iterate
|
||||
with the system you're developing. Long delays between releases can be deadly.
|
||||
Don't lose touch with your roots. In this case, the open source community that is a breeding ground
|
||||
for new developers and projects. Tickle and TKB can passay in that environment, which has
|
||||
led to its lack of adoption for new projects not only in the world of open source but in business as well.
|
||||
Don't isolate yourself. Tickle and TK stopped appearing at a lot of the open source conferences
|
||||
and events and in magazines, books and articles online. Either because with no figurehead or leader
|
||||
to invite there there was less interest in speakers and authors or because the rest of the tickle
|
||||
court team wasn't particularly engaged or formed whatever other reason. This created something of
|
||||
a negative feedback loop, where tickle and TK were things associated with the past rather than
|
||||
something currently talked about and discussed. End of blog post
|
||||
I've been listening to Hacker Public Radio at Hacker Public Radio not a work. We are a community
|
||||
podcast network that releases shows every weekday Monday through Friday. Today's show, like all
|
||||
our shows, was contributed by an HPR listener like yourself. If you ever thought of recording a
|
||||
podcast and clicking our contribute link to find out how easy it really is, Hacker Public Radio was
|
||||
founded by the Digital Dog Pound and the Infonomicon Computer Club and it's part of the binary
|
||||
revolution at binwrap.com. If you have comments on today's show, please email the host directly.
|
||||
Leave a comment on the website or record a follow-up episode yourself unless otherwise stated,
|
||||
today's show is released under a creative commons attribution share-like three-point-hole
|
||||
Reference in New Issue
Block a user