Tcl Chatroom

Introduction

The Tcl Chatroom is an XMPP (Jabber) conference room that is bridged to an IRC channel. You can use any Jabber or IRC client to connect, but many prefer to use TkChat, which is a hybrid Jabber/IRC client written in Tcl/Tk that was designed specifically for the Tcl Chatroom.


QuickStart

TkChat
Website: http://tkchat.tclers.tk/ (there are downloads for Windows, Linux, MacOS and a generic Starkit)
Jabber
[email protected] (bridged with IRC)
IRC
#tcl on irc.libera.chat (bridged with Jabber and Matrix )
Slack
Go to https://slack.tcl-lang.org (bridged with IRC and Jabber)
tclchat.dbohdan.com
Provides a real-time, read-only log of the last 48 hours of the Tcl Chatroom (from the IRC side). Logger source code .

Unfortunately, due to excessive abuse it is no longer possible to automatically register with the Jabber server that hosts the chat room. However, anyone who wants an ID on the Tcl Chatroom's jabber server is welcome to request one from rmax. This can be done via the IRC channel.


Chat Logs

The Tcl Chatroom maintains a month of history, stored in a format designed to be easily loaded by the TkChat chat client. This is stored at http://tclers.tk/conferences/tcl/ .


Who is who?

 People who use the chat

Many people use their initials in the chatroom, but we tend to call each other by our first names. This can be confusing for newbies — so here is a list of the regulars. Feel free to add your name to the list. When in doubt of someone's name try 'Steve' or 'David', we have a surplus of them.

Feel free to add your name to the list. If you are using a Jabber client (like tkchat) you could set your user information (in tkchat that is under the Preferences menu).


 General Discussion About Chat

Comments

SRIV (16 July 2003) I added a primitive IRC to Jabber Conference gateway to one of my servers, so feel free to try it. Its located at #[email protected] .I'll maintain it for as long as its useful.

What this means is that you can join a Jabber conference thats bridged to #tcl on irc.libera.chat that in turn is bridged to the tcl'ers chat server. In tkabber, you choose "Join Group" from the Services menu, enter your Nick, the Group, which is #tcl, the Server, which is conference.sr-tech.com , and optionally a password.

For the Linux users out there, I've made a starkit of tkabber available at http://www.sr-tech.com/testing/ . All thats nneded to make a Windows .kit is the TLS and Snack extensions. I'll build them if I get the time.

DKF Fetch https://www.tcl-lang.org/starkits/snack.kit for Snack. :^)


Historical chatter

Alternative chat services

Another one, even more experimental, requires that you grab http://www.equi4.com/jcw/talkit.tcl and run it (tried with 8.4a2 for now, YMMV), giving your nickname as command line arg.

Jan 26: Talkit is still under heavy construction, and so is the stored data format. I'm going to insert a version check, but for now please keep fetching a new release off the url listed above every (few) day(s) or so. FWIW, I'm not going to turn Talkit into yet another super-duper whizbang chat system, there are plenty of those around. Just a very simple to use thingy, maybe feeding older messages to the Wiki. It does not touch files on the local disk, and I will look into adding a hhtp proxy so it also works through port 80. It should be feasible to make it run in the Tcl plugin. The server is based on something called "Tequila", which is pure Tcl as well. That server runs on mini.net, IP 216.110.35.177, just like this Tcl'ers Wiki.

Jan 29: Forget Talkit. I've decided not to pursue it. Too much work. Wrong priority. Life's too short. Sorry for adding to the noise...

If you want to take this further (or simply swipe stuff from it), my last version of the client is at the URL mentioned above. It works only on Tcl >= 8.3 because it uses <<ListboxSelect>>. If you want to have your own server, grab & run http://www.equi4.com/jcw/tequilas.tcl - see comments at top of talkit.tcl for info on how to alter host/port from the command line.


Donal Fellows composed the Tcl chat room blues there on Feb 26, 2001:

 The Perl script says I've gone
 tho' I've been here all along
 So I must just sing this song
 Yes, I got those Tcl chat room blues

 The network it is down
 an' the admin's just left town
 any wonder I must frown?
 Yes I've got those Tcl chat room blues

 Sittin' all the while
 my code it won't compile
 I jus' gotta vent my bile
 I got those Tcl chat room blues ... Yeah!

(insert some instrumental bit here)

 Usenet's fulla junk
 but the bug reports ain't junk
 any worse an' I'll do a bunk
 Yes I've got those Tcl chat room (better than a frat room)
 Tcl online chat room bloo-hoooooes!

DKF notes that at this point, he suffered from massive network congestion and ceased to be able to access the chat-room for the rest of the day. Somewhat appropriate, if extremely annoying...


There are a variety of near realtime chat software systems available on the internet at this time. Besides the perl chat software used here, note that there are Tcl related chats in those other domains.

For instance, if you visit:

http://aolserver.com/chat/

a group of AOLserver fans meet to discuss Tcl, AOLserver, and more. There are Tcl and Tcl/Tk clients for AIM.

Read the IRC page for a list of IRC clients written in Tcl or at least with Tcl scripting functionality.

On IRCNet, the #tcl channel is mostly crowded by eggdrop scriptkiddies. #TclTk is a good alternative — Bastien Chevreux

At least one ICQ [L1 ] channel for Tcl can be found at [L2 ]; it was created two years ago and appears to have no traffic on it, so there is no fear of being overwhelmed by the noise.

[Someone can add info about Yahoo messaging addresses here]


I have created a web-based Tcl Chat, available from http://www.dedasys.com/freesoftware davidw.


JCW Nov 22, 2001: I'm setting up a new page to discuss what we can do with the Tcl'ers chat, see Improving Tcl Chat.


See http://www.openverse.com/ OpenVerse its a visual chat client written completely in tcl small and fast too.


http://www.larochelle-innovation.com/tcltk hosts a successful French-language chat devoted to Tcl.

MS wants to stress that felix le chat has a tcl-coded backend, created by David Zolli.

kroc (17 June 2003) This french chat is stopped now, but script can be downloaded here http://www.larochelle-innovation.com/tcltk/206 (TclHttpd required).


15sep03 — The Tclers' Chat continues to soak up bandwidth and electrons, so I've set up a little add-on CGI script on mini.net in an attempt to improve things. If someone familiar with tkchat is willing to dive in and make a (probably small) adjustment, I think we can improve Tkchat substantially in a number of aspects:

  1. much quicker re-poll when something has been typed
  2. dramatically lower poll rates
  3. considerably less data transfer when nothing has changed

Here's the mechanism:

  • there's a new CGI script at http://mini.net/cgi-bin/chatter.cgi
  • when you call it, it'll return a plain text page with a timestamp on it
  • the point is that it will not return before a change has been detected in the chat "messages" file
  • so what this enables, is fetching it — and when it returns, do a real poll
  • to make it truly accurate, you can call it with a number as query arg, i.e.
       http://mini.net/cgi-bin/chatter.cgi?1063661173
  • the chatter script will only return when there are new chat events after the specified time
  • for convenience, the script will return no matter what after 100 seconds

So IMO this would make it easy to poll and wait for the best time to check the real chat logs in tkchat, by using a chatter.cgi fetch to throttle the current polling cycle. All one has to do is insert an appropriate http::geturl in there. For accurate tracking, the next chatter.cgi access should give the returned timestamp as argument.

Here's the "chatter.cgi" script on mini.net, btw:

  #!/usr/bin/tclsh
  puts "Content-Type: text/plain\n"
  flush stdout
  set fname /path/to/ralf's-chat/messages
  set time $env(QUERY_STRING)
  if {$time == ""} { set time [file mtime $fname] }
  after 90000 set time 0
  while {[file mtime $fname] <= $time} { after 1000; update }
  puts [file mtime $fname]

PS. Ralf's Chat logout timer has been raised from 50s to 150s.

PT 16-Sep-2003: implemented in tkchat


DG — IMO, the best way to improve server thrashing by web chat is to change the model from client pull through meta-refresh, to real server push. As a proof-of-concept, I have a webchat to Tcl'ers Chat setup @ [L3 ]. It is mostly experimental, but works really well.

I enable real server push by never ending the page my tclhttpd instance serves and use chunk transfer encoding to send lines at a time to the browser. It happens to work best in Firefox as it seems to have the best javascript event handlers.

Let the dg minions populate!


  • rmax sings ***
        No bridge today my IRC has gone away
        The socket stands forlorn a symbol of the dawn
        No bridge today it seems a common sight
        But Tcl'ers passing by don't know the reason why
        ...

LV 2007 Sep 28 Has anyone found a web (aka http) interface to the Tcl chat room? I have tried to figure out a couple of things, but so far have been unsuccessful. tkchat and other jabber clients don't work here due to security measures.

A simple http interface would likely be okay — or at least, would work better when using public access terminals.

LV There appears to at least be the webchain, mentioned above. Note at the bottom of the webchain page a reference to wubchain.

AMG: Is anyone running a copy of or proxy for webchain that listens on port 80 or 8080? In a supposed attempt to combat viruses, my employer blocks all outbound network traffic not destined for a handful of TCP or UDP ports. I had to beg to get access to port 8080, since some USGS Web server listens on that port. Shrug!


EMJ tkchat doesn't work, at all — no matter what I type in all I get is:

Registering username.
[19:14]                Failed to register this account: Method Not Allowed. the recipient or server does not allow any entity to perform the action.

CliC — 2010-12-31 I have the same problem, but only on the second dialog box that pops up asking for account info. I finally tried cancelling this dialog (I had already entered my credentials to initially connect), and it appears to go ahead and log on.

EMJ no, just does a blank screen, then if I try to post:

        ClientCB: streamerror ; args='-errormsg {not-authorized {Unknown. stanza sent before session start}}'

I had a login ages ago, but I can't remember the password — I'd be happy to create a new one, but I can't!


See also:


 Tcl Chatroom and IRC clients integration

Tcl Chatroom and irssi: ijchain.pl

andrewsh 2010-03-17 Here's the script for irssi that links ijchain's side of Tclers Chat and IRC together. Sorry for the foreign language (Perl) :)

  use strict;
  use warnings;
  use Irssi;
  use Irssi::Irc;
  use vars qw($VERSION %IRSSI);

  $VERSION = "0.0.3";
  %IRSSI = (
          authors     => "Andrej Shadura",
          contact     => "andrew\@shadura.me",
          name        => "ijchain filter for #tcl\@libera",
          description => "This scripts filters ijchain messages so both parts of chat being just one",
          license     => "Public domain",
          changed     => "Fri May 21 18:25:51 CEST 2021",
  );

  sub sig_public {
    my ($server, $msg, $nick, $address, $channel) = @_;

    if ($nick =~ m/(ij|is|libera)chain/) {
      if ($msg =~ m/^<([^>]+)> /) {
        $nick = $1;
        $msg =~ s/^[^>]+> //;
      }
    }

    Irssi::signal_continue($server, $msg, $nick, $address, $channel);
  }

  sub sig_action {
    my ($server, $msg, $nick, $address, $channel) = @_;

    if ($nick =~ m/(ij|is|libera)chain/) {
      if ($msg =~ m/^([^ ]+)/) {
        $nick = $1;
        if ($msg =~ /has become available$/) {
          Irssi::signal_emit("message join", $server, $channel, $nick, $address);
          Irssi::signal_stop();
          return;
        } elsif ($msg =~ /has left$/) {
          Irssi::signal_emit("message part", $server, $channel, $nick, $address, "Client quit");
          Irssi::signal_stop();
          return;
        } else {
          $msg =~ s/^[^ ]+ //;
        }
      }
    }

    Irssi::signal_continue($server, $msg, $nick, $address, $channel);
  }

  Irssi::signal_add_first("message public", "sig_public");
  Irssi::signal_add_first("message irc action", "sig_action");

Just put it into ~/.irssi/scripts/autorun/ijchain.pl. If for some reason ijchain's name changes, just do /set ijchain_name newijchain.

Update 17-10-2010: for some reason sometimes the ijchain_name variable gets right-padded by spaces, in which case the string comparisons in the code above don't work. That's why $ijchain =~ s/\s+$//; is needed.

Update 03-10-2014: ijchain_name var isn't used anymore, this needs fixing.

Update 21-05-2021: dropped the unused setting, changed the regexp to accept ischain (Slack) and liberachain.