What's New in Caucus 4.1?
Revised 29 June 1999

Caucus 4.1 is a significant upgrade to Caucus 4.0.  It keeps the same overall "look and feel", while extending some features and fixing many small bugs and annoyances. 

The changes in 4.1 are grouped together into the following sections:

  1. New features in the user interface

  2. Bugs fixed in the user interface

  3. Bugs fixed in the CML "engine"

  4. New features in the CML "engine"

  5. New configuration features

  6. Other new tools


1. New features in the user interface

1.1 Management Page Extended

The management page has been reformatted into three related areas: conferences, users, and operation.

1.2 Pre-registering new users

The "create a user" feature has been split off into its own management page.  You may also pre-register a user (assign their name, telephone #, brief introduction, and initial conferences) on the same page.

1.3 Manage Users by Date

The ability to list (and optionally delete) users by "date last on Caucus" has been completely rewritten.  It is much faster and works on any size Caucus site.  It uses a file containing a list of all Caucus users and their date "last on". This file is automatically refreshed when swebd starts up, and may be manually refreshed as well.

1.4 Default Conference Userlists

When a conference is created, the default userlist now has an "empty" block for "include" userids, followed by an "empty" block for "readonly" userids, followed by the actual list of organizers.

(Local defaults may be created; see the extensions to the $create_conf() function.)

1.5 Semi-synchronous conferencing

Caucus behaves much better when many people are reading and writing to the same items in the same conference, more or less simultaneously.  (Previously it sometimes took a while to "see" the other's new responses.)

When in doubt, pressing the browser's RELOAD button will always get the most up-to-date information.

1.6 Improved workaround for Internet Explorer Bugs

Internet Explorer users can now properly "go to" a new response or a specifically selected response. 

(The "Location:" directives in the CML files have been replaced by a "%location()" macro which uses JavaScript code to work around the IE 4 and 4.01 Location directive bug.)

1.7 Allow Anonymous Responses

A conference organizer may choose to allow items to have "anonymous" responses.  The organizer, or the creator of an item, controls if and when anonymous responses are allowed, and may switch back and forth between "signed" and anonymous responses.

1.8 Upload entire web page or site (zip files)

Users may now upload an entire "zip" file into an item or response, and have it automatically "unzipped".  This means, for example, that a user may capture an entire web page (html file and image or any other files that make up the entire page) as a zip file on their PC, and upload it as one single file.  Caucus automatically unzips it, so the entire "page" appears just as the user would expect.

The same reasoning applies to an entire web site (or collection of pages).  (The only danger here is if people start uploading entirely too much stuff as a single zip file.)

Also, all uploaded files, including unzipped files, are now stored using an additional directory layer (under public_html/LIB) that more directly ties uploaded files to their item or response.  This means that uploaded files are cleanly copied, moved, or deleted along with their "owning" item or response.  It also means that different files of the same name may be uploaded by the same user in the same conference without fear of confusion between them.

1.9 Freeze and Thaw groups of items

Organizers may now "freeze" or "thaw" multiple items at once, from the "Manage Individual Items" page.

1.10 E-mail notification of new items and responses

A major improvement in 4.1 is the ability to automatically send e-mail notification of new material in a conference to the members.  Notification schedules for selected groups of items may be set by the conference organizer for everyone, or individuals may set their own notification schedules.

1.11 "Search by Author"

The search button now allows users to search items and responses for words in text, or to find items or responses written by a particular author (but not both).  This is particularly useful when one is looking for something a particular person said, without knowing precisely what they said.


2. Bugs fixed in the user interface

The complete history of CML bug fixes is described in the readme.txt file, which is contained in the full CML patches file cml_upgrade40.t.Z.


3. Bugs fixed in the CML engine

3.1 Conference renaming

Previously, only managers who were also the organizer of a conference could rename that conference.  Henceforth, managers with "create conference" or "delete conference" privs can rename a conference.

3.2 Resizeable pop-up windows

Some pop-up windows could not be resized by the user on some platforms.  Henceforth they can always be resized.

3.3 Time and Date interactions off by 1 hour

Time and date functions now properly interact, and allow for daylight savings time as well.  Previously combinations of CML functions such as $re_epoch(), $time(), and $dateof() were inconsistent by an hour or more.  A new $timezone() function is added.

3.4 Auto-URL detection bugs

The auto-URL detection in response text sometimes got confused if it saw a URL ending in a quote.  (Actually, it got confused by the HTML entity code for a quote, but that's a longish story).  In any case, URL detection now stops immediately when it sees a &, in addition to all of the other "punctuation" characters.

URL detection has been extended in other ways; see URL_End.

3.5 $item_sort() bugs

The $item_sort() function was buggy for code=3 (response date), when responses had been deleted at the end of an item.

3.6 Delete and immediately create a conference

Caucus 4.0 could get confused if you deleted a conference and immediately created a new one, or renamed a conference and then immediately deleted it.  The main symptom of the confusion is that you could not successfully delete the conference.

3.7 Spaces after \ continuation

Trailing spaces after a CML line continuation backslash ("\") cancelled the continuation.  Trailing spaces after a "\" are now ignored.

3.8 Japanese line continuation

In the Japanese version of Caucus, if the last character on a line had a 2nd byte value equivalent to "\", the line was continued (even though it should not have been).

3.9 Errors detecting free disk space on Solaris 2.4

In some cases (perhaps NSF mounted disks), Caucus under Solaris 2.4 erroneously detected a "disk full" condition.

3.10 Japanese output from $xshell()

Programs run from $xshell() that produced Japanese output sometimes lost data, especially when producing mixed single and double-byte data.

3.11 Chix error log

Under certain circumstances, Caucus sent error messages about an internal data type called "chix" to the system console or equivalent window.  These messages are now sent to one of the ".log" files in the Caucus SOCKET directory.

3.12 Detect lack of access-authorization userid

One of the most common Caucus installation problems is neglecting to configure the web server to require an "access authorization" id to use Caucus.

The new function $http_remote_user() determines if an access authorization id was supplied.  The Caucus interface has been modified to use this function, and displays an appropriate error page.


4. New features in the CML "engine"

4.1 Improved handling of conference & item caches

The improvements in 1.5 are the result of changes in the way the Caucus conference and item caches are handled:

  1. Caucus detects when a page is reloaded (by pressing RELOAD), and empties the cache(s) used by the $it_xxx() and $re_xxx() functions. 

  2. A new $reloaded() function makes this information available to the CML author as well.

  3. The caches also "age" automatically; when they've reached a certain maximum age, they are emptied.  The default age is 300 seconds; a different value may be set by the new $cache_timeout().

  4. The cache may also be explicitly cleared by the CML author by calling $cache_clear().

4.2 Preservation of leading blanks in strings

The new Copy directive acts like "Set", but preserves leading blanks in copied strings.

4.3 Extension to $create_conf()

$create_conf() has been extended to include an optional initial userlist. 

4.4 Find last undeleted response

The new function $it_lastresp() returns the number of the last undeleted response to an item.  Typically, each call to $it_lastresp() requires another file access, which makes this slow for repeated calls over many items.

4.5 More functions for processing words in strings

  • $words() generalizes and expands on the $word() and $rest() functions.

  • $wordpos() returns character position of a word in a string.

  • $numeric() determines if a word is a number

  • $is_num() finds first non-numeric character in a string.

4.6 More functions with directive-like capabilities

4.7 Functions to assist in debugging CML

  • $errors() displays the text of all accumulated CML syntax and execution errors.

  • $variables() displays the names and values of all variables.

4.8 Miscellaneous

  • CML files (.cml or .i files) may now have lines of any length.  Previously CML required that lines be limited to approximately 250 characters.

  • "Special" Caucus URLs (such as http://caucuscare.com/caucus/demonstration) now use a macro (%special(cnum inum rnum)) to expand the HREF part of the link, rather than being hard-coded in the CML interpreter.

  • Automatic detection (and "blueing") of other URLs in Caucus now uses a macro (%target(newx newy)) to define the target window of the URL, rather than being hard-coded in the CML interpreter.

  • A wide variety of other functions have been added to extend string handling, file handling, license information, and other capabilities.  See the "Introduction and Changes" section of the CML Reference Guide for more detailed information.

4.9 List persistent variables

Caucus maintains "persistent" variables for the site as a whole, for each conference, for each item, and for each user.  Four new functions have been added to list some or all of each kind of variables: $list_site_var(), $list_conf_var(), $list_item_var(), and $list_user_var().

4.10 "Continue" directive

The new CML language continue directive allows for a forced jump to the next iteration of the containing for, while, or count loop.  (Equivalent to the 'C' continue statement, or the Perl next statement.)


5. New configuration features

Several new features have been added for configuring Caucus' general operation.  These are new parameters in swebd.conf, some of which also have matching new CML functions.

5.1 PageTime -- max time to process a page

Each time the user requests a new page, the swebs process must return within PageTime seconds, or swebs is presumed dead.  If your system is heavily used, or has thousands of conferences, you may wish to raise the value of PageTime.  The default value is now 180 seconds (up from 120 in Caucus 4.0).

The value of PageTime is also available to the CML author from the new $pagetime() function.

5.2 URL_End and URL_Trim -- auto-detection of URLs

Many of the CML text filter functions automatically detect and "blue" URLs.  Despite the HTML standards for what characters are, and are not, allowed in a URL, many sites do not follow those standards (e.g. commas embedded in a URL).  This can cause problems for the auto-detection of URLs (especially the ends of those URLs) in Caucus.

Thus, two new parameters have been added to control how the end of a URL is found.  URL_End takes a list of (decimal) character values that may not be in a URL, which therefore forces the detection of the end of a URL.  URL_Trim provides a similar list of characters which are allowed inside a URL, but should be trimmed (treated as not part of the URL) should they be found on the end of the URL.  (The comma is an excellent example; some sites use commas in the middle of their URLs, but never on the end.)

5.3 Swebd start-up scripts

When swebd starts up, it may optionally start other programs with the new Script parameter.  Such programs (or scripts) are run independently, and swebd does not wait for them to complete.  Each 'Script' keyword is followed by a full command line, which is run as swebd starts up.

The "manage users by date" feature uses a precomputed list of a Caucus users, which is initially created by such a start-up script, called update_ul.

5.4 New_Win_For

This parameter defines a list of file extensions.  When a user clicks on a URL (in item or response text) that ends in one of these extensions, Caucus displays that URL in a new window.  (Otherwise the content, if any, is displayed in the main window.)


6. Other new tools

This section describes new programs and scripts that can be run via $xshell(), or by actually logging in to the 'caucus' account in a command window.

6.1 List of all Caucus users

The new update_ul script (which in turn runs the new listallu program in concert with the system sort utility) creates a list of all Caucus users on the host, with their full name and date "last on" Caucus.  The file is sorted by date "last on".

The "manage users by date" page(s) use and create a file called "allusers" for its own purposes.  Other files and other uses (and even other ways of sorting the information) can be imagined.

6.2 Batch creation & registration of new userids

The new wregister script provides "batch" creation of userids, and registration of information (name, e-mail, telephone, brief introduction, user variables, initial conferences) about each userid.

For details, see the FAQ entry on Pre-registering Users.