Tcl was my first "general purpose" programming language (after TI-basic and Matlab).
When I started that job I didn't know the difference between Tcl and TCP. I spent a couple months studying Phillip Greenspuns books. It also made me a better engineer because unlike PHP I couldn't just Google how to do basic web server stuff so I had to learn from first principles. That's how I ended up building my first asset minification pipeline that served the "$file.gz" if it existed with content-encoding: gzip.
Nearly 20 years later and I'm basically a http specialist (well, CDN/Ingress/mesh/proxy/web performance).
Tcl is still kind of neat in a hacky way (no other language I've run across regularly uses upvars so creatively).
AOLServer was the inspiration to the product I worked on, during my first experience working at a dotcom startup.
We had something similar, however it would plug into Apache and IIS, more configurable across several UNIXes and RDMS, and eventually even got an IDE coded in VB, for those folks not wanting to use the Emacs based tooling.
Eventually we also became a victim of the dotcom burst, however many of those ideas were the genesis of OutSytems platform, then rebooted on top of .NET, and still going strong on the market nowadays.
I used Tcl at my very first internship for test automation. Coming from a self-taught Javascript/Java/C#/C++ background, Tcl really stretched my concept of what a programming language is, especially how it plays with stack frames and munges string values.
Coincidentally Tcl also inspired my first deep dive into Vim. The test automation framework at that company required meaty Tcl expressions packed into CSV cells. Tcl was mind-boggling enough when properly formatted, so hand-editing squashed 1800 character long expressions on a single line was way too much. I'm fairly certain the assignment was part hazing and the framework part "job security".
Jokes on them, I spent 2 weeks on a side quest to make a Vim plugin that could add line breaks and indent a Tcl expression into a split temporary buffer for editing and squash it back to the right cell when I was done. Halfway through the summer I had completed the entire backlog. The manager got a reprimand for being a jerk and I spent the rest of the summer making the framework less painful.
I'm currently working on a PXE provisioning system with Tcl. This crafts a KickStart configuration hosted on a virtual URL.
LUks is a requirement and requires a random password on each workstation. Password generation with handmade web gui stored natively in sqlite all under 200 LoC so far.
Tcl gets flak, but it's battle tested. Still under active development and has a cool GUI, Tk, I love it as a language. In terms of simplicity it just works out of the box, execution in a single file, in a sanely manner.
Wrap a variable in brackets {} and you've secured yourself from injections or run the procedure in a lightening safe interpreter if your paranoid.
Threading is a breeze. It does make you think in a different methodology which folk may rebuttal, but once you get it, it's great.
NaviServer too, AOLs original webserver is awesome.
I've been thinking of writing an extensible editor scriptable with Tcl, but - surely someone somewhere must have already written one, no? I couldn't find anything that wasn't just a toy.
Tcl/Tk was used by the first open source project I ever contributed to 25 years ago – a client for AOL Instant Messenger called TiK. It was such a thrill to be able to hack on the client, see the changes in almost real time, and share with others. It's great to see Tcl still around and kicking!
In 1996/7 I had a chance to use Tcl/Tk to build one of the first stock tickers on the web called DigitalTrader [1], after that we used it to build some of the first vector embeddings in 2005 for early biological language models at Lawrence Berkeley National Lab [2,3] for space biosciences. Still a fan.
A lot of people on Hackernews get wistful for VB. But the VB of the Unix world is still here—Tcl/Tk. It's not for the faint of heart, but it's the fastest way I've seen to get from zero to functional GUI. Entire desktop environments have been built in it—before GNOME 1.0 even came out. It even has metaprogramming capabilities that approach Lisp in flexibility.
At that point in history (1993), TCL/Tk was ideal for what I wanted to do. It was very easy to integrate with C code (exposing the SimCity simulation engine and callback as TCL commands), and implement custom Tk components (like pie menus) and services (like a real time sound mixer).
I visited Professor John Ousterhout at his office at UCB with an SGI Indigo to give him a demo and express my gratitude and admiration, and demonstrated it running across two SGIs at the ACM InterCHI '93 conference Interactive Experience to demonstrate the cooperative multi player aspects like multiple views, multiple cursors, collaborative editing, and voting.
Eventually I talked EA into open sourcing SimCity, cleaned up the TCL version, and released it on the OLPC (and renamed it Micropolis to not infringe on Maxis/EA's trademark):
Many structural engineering graduate students still get exposed to TCL as its the input language of the OpenSees framework for structural and earthquake engineering.
I wish more scripting languages (other than TCL and Python) had desktop GUI support out of the box. I don’t even need a good one, just having an OK GUI lib that isn’t a full blown third party webview frameworks would be nice for one off utilities.
I used REBOL about 20 years for something like this, an interesting TCL-like language with a GUI built in, I found it quite charming to look at, but it was dated even 20 years ago.
HyperCard was an interesting way to do this too. Perhaps with some work to make it a bit more user friendly and less alien feeling, Smalltalk/Pharo has potential.
Seeing other people comment about being exposed to TCL via professional reasons made me want to add that I learned TCL because it's what eggdrop IRC bots used.
To this day I have a number of bot related side projects. Though they're now for discord and slack and written in python or ruby. I miss IRC, eggdrop, and TCL.
I used Tcl a lot early in my career, building sites for the web using Vignette StoryServer as well as AOLServer. It powered a lot of the early 2000s web.
20 comments
[ 3.6 ms ] story [ 56.6 ms ] threadWhen I started that job I didn't know the difference between Tcl and TCP. I spent a couple months studying Phillip Greenspuns books. It also made me a better engineer because unlike PHP I couldn't just Google how to do basic web server stuff so I had to learn from first principles. That's how I ended up building my first asset minification pipeline that served the "$file.gz" if it existed with content-encoding: gzip.
Nearly 20 years later and I'm basically a http specialist (well, CDN/Ingress/mesh/proxy/web performance).
Tcl is still kind of neat in a hacky way (no other language I've run across regularly uses upvars so creatively).
Shout-out to ad_proc and aolserver.
We had something similar, however it would plug into Apache and IIS, more configurable across several UNIXes and RDMS, and eventually even got an IDE coded in VB, for those folks not wanting to use the Emacs based tooling.
Eventually we also became a victim of the dotcom burst, however many of those ideas were the genesis of OutSytems platform, then rebooted on top of .NET, and still going strong on the market nowadays.
No it isn't; I just get an empty frame with a close button. This is consistent on multiple browsers/platforms.
Coincidentally Tcl also inspired my first deep dive into Vim. The test automation framework at that company required meaty Tcl expressions packed into CSV cells. Tcl was mind-boggling enough when properly formatted, so hand-editing squashed 1800 character long expressions on a single line was way too much. I'm fairly certain the assignment was part hazing and the framework part "job security".
Jokes on them, I spent 2 weeks on a side quest to make a Vim plugin that could add line breaks and indent a Tcl expression into a split temporary buffer for editing and squash it back to the right cell when I was done. Halfway through the summer I had completed the entire backlog. The manager got a reprimand for being a jerk and I spent the rest of the summer making the framework less painful.
LUks is a requirement and requires a random password on each workstation. Password generation with handmade web gui stored natively in sqlite all under 200 LoC so far.
Tcl gets flak, but it's battle tested. Still under active development and has a cool GUI, Tk, I love it as a language. In terms of simplicity it just works out of the box, execution in a single file, in a sanely manner.
Wrap a variable in brackets {} and you've secured yourself from injections or run the procedure in a lightening safe interpreter if your paranoid.
Threading is a breeze. It does make you think in a different methodology which folk may rebuttal, but once you get it, it's great.
NaviServer too, AOLs original webserver is awesome.
https://wiki.tcl-lang.org/page/NaviServer
https://github.com/naviserver-project/naviserver
https://tik.sourceforge.net/
https://github.com/mk6i/retro-aim-server/
https://github.com/mk6i/retro-aim-server/blob/main/docs/CLIE...
[1] https://www.orafaq.com/usenet/comp.databases.oracle.misc/199...
[2] https://newscenter.lbl.gov/2005/03/31/a-search-engine-that-t...
[3] https://patents.google.com/patent/US7987191B2/en
http://www.art.net/~hopkins/Don/simcity/keynote.html
At that point in history (1993), TCL/Tk was ideal for what I wanted to do. It was very easy to integrate with C code (exposing the SimCity simulation engine and callback as TCL commands), and implement custom Tk components (like pie menus) and services (like a real time sound mixer).
w_piem.c: https://github.com/SimHacker/micropolis/blob/master/micropol...
I also made a multi player version of SimCity that took advantage of the X11 version of TCL/Tk's ability to open multiple displays at once.
https://www.youtube.com/watch?v=_fVl4dGwUrA
Multi Player SimCity Announcement: http://art.net/~hopkins/Don/simcity/simcity-announcement.htm...
SimCity on SGI Indigo: http://art.net/~hopkins/Don/simcity/SimCity-Indigo.gif
SimCity on Sun OLWM: http://art.net/~hopkins/Don/simcity/SimCity-Sun.gif
SimCity on NCD X Terminal: http://art.net/~hopkins/Don/simcity/SimCity-NCD.gif
I visited Professor John Ousterhout at his office at UCB with an SGI Indigo to give him a demo and express my gratitude and admiration, and demonstrated it running across two SGIs at the ACM InterCHI '93 conference Interactive Experience to demonstrate the cooperative multi player aspects like multiple views, multiple cursors, collaborative editing, and voting.
http://www.art.net/~hopkins/Don/simcity/simcitynet.html
Eventually I talked EA into open sourcing SimCity, cleaned up the TCL version, and released it on the OLPC (and renamed it Micropolis to not infringe on Maxis/EA's trademark):
Open Sourcing SimCity:
https://donhopkins.medium.com/open-sourcing-simcity-58470a27...
micropolis activity: https://github.com/SimHacker/micropolis/tree/master/micropol...
micropolis.tcl: https://github.com/SimHacker/micropolis/blob/master/micropol...
https://opensees.ist.berkeley.edu/wiki/index.php?title=OpenS...
Luckily, there is also now a python interpreter.
HyperCard was an interesting way to do this too. Perhaps with some work to make it a bit more user friendly and less alien feeling, Smalltalk/Pharo has potential.
TCL can be so customized that it’s unrecognizable, breaking all compatibility between hosts.
To this day I have a number of bot related side projects. Though they're now for discord and slack and written in python or ruby. I miss IRC, eggdrop, and TCL.