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:
Lee Hanken
2025-10-26 10:54:13 +00:00
commit 7c8efd2228
4494 changed files with 1705541 additions and 0 deletions

277
hpr_transcripts/hpr2386.txt Normal file
View 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