Columns


On the Networks

Concurrent Development

Sydney S. Weinstein


Sydney S. Weinstein, CDP, CCP is a consultant, columnist, lecturer, author, professor, and President of Myxa Corporation, a consulting and contract programming firm specializing in databases, data presentation and windowing, transaction processing, networking, testing and test suites, and device management for UNIX and MS-DOS. He can be contacted care of Myxa Corporation, Inc., 3837 Byron Road, Huntingdon Valley, PA 19006-2320 or via electronic mail on the Internet/USENET mailbox syd@myxa.COM (dsinc!syd for those who cannot do Internet addressing).

For years, UNIX developers have used SCCS and RCS to control source code and deal with tracking changes. But users of these two programs always have to deal with a potential problem. If more than one developer is working on a project, there is always the chance that the their efforts will collide. This collision occurs when the two developers both try to update the same file at the same time.

RCS and SCCS solve this problem by allowing one of the developers to lock on file for editing. In doing so, the person who locks the file is the only one who can make changes to the file. This scheme works well, but leads to another problem, deadlock. Popular files get locked by almost everyone; and of course, with the one-lock-at-a-time method, the other developers must wait until the first developer is done with it. Those who miss the chance to grab a file may have to wait a while as its current holders develop their changes, integrate and test them, make them permanent, and release the lock.

Peter Miller <pmiller@bmr.gov.au> provides a possible solution, aegis-2.1, posted as Volume 27, Issues 36-54 of comp. sources. unix. Quoting Peter:

"The aegis program is a CASE tool with a difference. In the spirit of the UNIX Operating System, the aegis program is a small component designed to work with other programs."

aegis is a project change supervisor. It provides a framework within which a team of developers may work on many changes to a program independently. aegis coordinates the integration of these changes back into the master source of the program, with as little disruption as possible. Resolution of contention for source files, a major headache in any project with more than one developer, is one of the aegis's major functions.

aegis uses a software development model consisting of a project master source (or baseline) of a project, and a team of developers creating changes to be made to this baseline. When a change is complete, aegis integrates it with the baseline, to create a new baseline. aegis requires each change to be atomic and self-contained, and allows no change to cause the baseline to cease working. "Working" for a baseline is defined as passing its own tests. The tests are considered part of the baseline.

To ensure that changes can't make the baseline stop working, aegis mandates that changes be accompanied by at least one test, and that all such tests complete successfully. These steadily accumulated tests form an ever increasing regression test suite for all later changes. aegis also mandates a review stage for each change to the baseline.

One benefit in using aegis is that there are only O(n) interactions between developers and the baseline. Contrast this number with the number of interactions for a master source that is being edited directly by the developers — there are O(n!) interactions between developers, which makes adding "just one more" developer a potential disaster. Another benefit of aegis is that the project baseline always works. Always having a working baseline lets you always have a version available for demonstrations, or those "pre-release snapshots" developers are always forced to provide.

aegis is often compared to CVS, the RCS tool for handling concurrent development. In effect, aegis adds baseline validity checks to CVS, since aegis requires a change to pass validity checks before it is added to the baseline.

More for UNIX

Continuing with the highlights this month from comp.sources.unix: Gordon Ross <gwr@mc.com> extended bootp-2.2. B, posted as Volume 27, Issues 63 and 64. BOOTP is a server for booting systems over the network. New in this version is support for clients that need the server to honor the format of the options area, and support for an extended option area. In addition the source now works with SVR4 systems. A patch was issued in Volume 27, Issue 76.

In addition, Gordon submitted a test program for exercising BOOTP servers. This program appears as Volume 27, Issue 65 and can be used to debug problems encountered when developing or using BOOTP servers.

Uwe Doering <fas@geminix.inberlin.de> contributed an important re-release of FAS as fas-2.11.0, in Volume 27, Issues 67-74. The re-release contains an important change which affects users of FAS on SCO UNIX. This change fixes a bug in FAS which caused reliability problems (crashes) with SCO UNIX. Other changes in this new version include performance improvements, bug fixes, more options on hardware flow control, including DSR as well as CTS lines, and enhanced support for 57,600 and 115,200 bps modes.

Much discussion has occurred on the net on how to verify that a file is the original file and is unmodified, especially with the often "lossy" connections used to transfer files around the network. Checksum programs can help verify a file's originality — several checksum programs which have been developed over the years include MD5, Snefru-8, and the traditional CRC-32. Daniel J. Bernstein <djb@silverton.berkeley.edu> has combined all of these into a single package, fingerprint, which he submitted for Volume 27, Issues 79 and 80. fingerprint provides a common set of programs and C-callable libraries for producing a universal fingerprint of a file.

If you find Make limited in what it can do, and would prefer a full language for makefiles complete with conditionals, loops, and all those other features you expect in a full language, consider jam from Christopher Seiwald <seiwald@vix.com>. jam is a make-like program that adds full language features, plus a centralized database for project-wide rules, as well as several other extensions. jam was posted as Volume 27, Issues 81-85.

Wayne Davison <davison@borland.com> contributed mthreads, a news database manager that processes one or more newsgroups into a tree-structured list of articles related by their References and Subject lines. For each group you enable, mthreads produces a .thread file that trn (Threaded Read News) can read to get a quick summary of the articles in the group and how they are related. mthreads takes up about three to five percent of your news-spool if you enable all groups. (Any site which is not running INN must run mthreads to use trn-3.3.) mthreads is posted as Volume 27, Issues 90-93.

Wayne followed this posting with a new release of Threaded RN, trn-3.3, as Issue 27, Volumes 94-105. trn is a newsreader that uses an article's references to display discussions in a natural reply-ordered sequence called threads. New in 3.3 is support for a default subscription list for new users, better handling of redirected and disabled groups, support for MIME, and various bug fixes.

The collection of useflibraries grew once again with the contribution of clc by Panos Tsirigotis <panos@anchor.cs.colorado.edu> posted as Volume 27, Issues 106-126. The C Libraries Collection includes the following:

David I. Bell <dbell@canb.auug.org.au> contributed a new release of calc-2.9.0, posted as Volume 27, Issues 127- 146. calc is an arbitrary precision C-like programmable calculator with many built-in functions. calc's basic data types are integers, fractions, complex numbers, strings, matrices, associations, lists, files, and user-definable "objects." You can use calc interactively to evaluate expressions line by line, or you can write complicated programs in its C-like language. New in this version is ANSI C support, initialization of new objects and variables to zero instead of null, addition of static variable support, and many bug fixes.

Plot your MISC

The major update in comp.sources.misc is version 3.5 of gnuplot from Alexander Woo <woo@playfair. stanford.edu>. Posted as Volume 40, Issues 13-45, gnuplot is a command-line driven interactive function plotting utility for UNIX, MSDOS, and VMS platforms. gnuplot was originally intended as a graphical program to allow scientists and students to visualize mathematical functions and data. Additions to this version of the software allow plots of three-dimensional functions and data files. gnuplot supports many different types of terminals, plotters, and printers and is easily extensible to include new devices. gnuplot handles both 2-D and 3-D coordinate spaces and objects. This release marks the end of Alexander's tenure as the coordinator of the gnuplot effort. He has passed the hat on to Alexander Lehmann, who has volunteered to coordinate the next release. Send all new contributions to bug-gnuplot@ dartmouth.edu.

Angus Duggan <ajcd@dcs.ed.ac.uk> has submitted an update to psutils posted as Volume 39, Issues 93-96. This package is a set of utilities for manipulating PostScript documents. This version supports page selection and rearrangement, including arrangement into signatures for booklet printing, and page merging for n-up printing. In addition, this version includes several shell and perl scripts for converting many postscript output formats into the standard paging conventions so psutils can process them. A patch appeared in Volume 41, Issue 29 to add several new features and regularize several options across the utilities.

Michael Peppler <mpeppler@itf.ch> re-released Sybperl at patch level 8 as Volume 39 Issues 101-103. Sybperl is a set of extensions to perl to add direct accesses to sybase databases via the dblibrary. Additions in this level include a user settable variable to control null return on queries and to control how binary data is formatted. The new patch also adds several internal calls to avoid packaging problems, and access to the bulk copy calls in dblibrary. Patch 9 was posted in Volume 40, Issue 5; it can set the application name for the sybase process and it fixes some bugs.

Ted A. Campbell <tcamp@delphi.com> has contributed bwbasic, Bywater BASIC Interpreter/Shell, version 2.10, as Volume 40, issues 52-54. bwbasic implements a large superset of the ANSI Standard for Minimal BASIC (X3.60-1978) and a significant subset of the ANSI Standard for Full BASIC (X3.113-1987) in C. bwbasic also offers shell programming facilities as an extension of BASIC. New features in this version are compatibility with K&R C compilers, implementation of ANSI-BASIC-style structured programming, enhancements to the interactive environment, bug fixes, and portability enhancements.

Mike Gleason <mgleason@cse.unl.edu> contributed a new release of ncftp as Volume 40, Issues 76-81. ncftp is an alternative user interface for the ftp utility, ncftp offers a much more friendly and convient interface than standard ftp programs. New features in 1.6 includes support for the term package used by Linux, support for SCO Xenix, AIX and Dynix/PTX, incorporation of all the fixes from patches, and then some.

Adam Costello <amc@wuecl.wustl.edu> contributed an improved paragraph formatter, par, as Volume 38, Issues 114-116. par is a filter which reformats each paragraph as it copies its input to its output. par generates each output paragraph from the corresponding input paragraph according to the following rules: par removes an optional prefix and/or suffix from each input line, divides the remainder of the line into words (delimited by spaces), joins the words into lines to make an eye-pleasing paragraph, then reattaches the prefixes and suffixes. If a line contains suffixes, par inserts spaces before them so that they all end in the same column. par provides many other options to control paragraph formatting. par's main benefit over fmt is its support for prefix and suffix characters, and its allowance of leading indention.

Panos Tsirigotis <panos@cs.colorado.edu> contributed pst, a program which extracts the text of a PostScript file and which tries to make that text appear as it does in the PostScript document. pst is posted as Volume 40, Issues 172-177. pst tries to avoid splitting words and to maintain paragraph boundaries. To achieve these goals, pst first tries to identify how the PostScript file was produced, so that it can use an appropriate text extraction algorithm. The user may also specify which of the available algorithms to use to extract text.

On the patch front, remind received some additions via Patches 9 (Volume 39, Issues 115-118), 10 (Volume 40, Issues 48-50), and 11 (Volume 40, Issue 167-171). New features in patch 9 include display of moon phases (including little moon symbols in the PostScript calendar), ANSI color terminal support, flexibility for Sunday or Monday as start of week, better control of PostScript calendar printouts, plus the usual bug fixes. Patch 10 added 0S/2 support, more sorting options, MS-DOS and OS/2 test suites, and more PostScript tuning. Patch 11 adds release notes for UNIX and OS/2 for pop-up alarms, improvements for OS/2 and some optimizations, plus bug fixes.

Aphael Manfredi <ram@acri.fr> issued a few more patches to dist-3.0 to handle more updates to the module library. Patch 12-13 (Volume 40, Issue 46-47) updated dist to use a never version of itself, and added many changes to the modules based on feedback from developers using the disk package. Patch 14 (Volume 40, Issue 128) fixes some bugs and adds some consistency checking.

The C++ libraries for parsing UNIX-like command line options and arguments from Brad Appleton <brad@amber.ssd.csd.harris.com> received patches. Patch 2, for options, was posted as Volume 40, Issue 157. Patch 2 added hidden options and fixed some portability problems. Patch 3 for cmdline documented secret arguments to cmdparse, and fixed some bugs.

Heavy Rolodexs

Though they're not too portable, and a bit heavy, computers make good rolodexs. Gregg Hanna <gregor@kafka.saic.com> has contributed as Volume 21, Issues 810, mrolo, to comp.sources.x. mrolo is a set of card file database programs designed to be simple yet robust, and was born out of frustration with xrolo's and xrolodex's many menus. The main program is mrolo, the Motif based card file program; the contribution also includes crolo, the curses-based equivalent. Some of mrolo's features include:

New features in version 1.3 include regular expression matching, addition of crolo (curses version) for dial-up use, an "as of" feature for tracking card dating, filter constraints, and the usual bug fixes. Two patches appeared, Patch 1 in Volume 21, Issue 43 and patch 2 in Volume 44. Both are bug fix patches.

George Ferguson <ferguson@cs.rochester.edu> additionally, published two patches to xarchie. Patch 2 (Volume 21, Issue 1) is labeled internally patch 8, and brings xarchie to 2.0.8. This patch fixes a minor bug in the X routines and adds additional server information. Patch 3 (Volume 21, Issue 7) takes xarchie to 2.0.9, adds more server info and fixes a misunderstanding in the FTP cwd command.

Robert Andrew Ryan <rr2b+@andrew.cmu.edu> contributed sxpc, a program to compress the X protocol stream, as Volume 21, Issue 12. sxpc provides up to 75% compression of the X protocol stream. sxpc's intended use is to improve the performance of X applications over a slow internet connection (e.g. slip, cslip, or term). sxpc assumes there is a Unix operating system at both ends of the link.

Brian V. Smith <envbvs@epb12.lbl.gov> contributed patch 2 to xfig as Volume 21, Issues 21-36. xfig is an X program to draw and manipulate objects. New features include changes in minimum movements, display of lengths, not just resize/move on highlight, automatic use of scalable fonts if available, on screen rotation of text, double click support on more menu items, keyboard accelerators, and many bug fixes.

Yearning for the "good old days" when outputting simple graphs didn't require so much window and event management code, Antoon Demaree <demaree@imec.be> contributed xvig, X Window Virtual Graphics as Volume 21, Issues 48-57. xvig is a simple graphics library that is I/O driven and supports opening windows, drawing shapes and text, and dealing with cursors. xvig produces simple graphs without scroll bars, pop-up menus, and fancy text features.

Previews from alt.sources

As usual, there's plenty in alt.sources so here are just a couple of highlights of what's to come in the mainstream groups.

In a blast from the far past, James Hightower <jamesh@netcom.com> posted focal, a FOCAL interpreter. He didn't write it, and is interested in who did, but he posted it. It's from 1981, and provides a version of the FOCAL language as used to run on the old PDP-8 computers. focal was posted on October 16, 1993 in one part. Jonathan A. Chandross <jac@pilot.njin.net> saw it, tried to compile it, and failed, and re-posted a corrected version. Chandross also added a makefile, documentation, and an example FOCAL program. He posted his corrected version on October 22, 1993, also in one part.

Thomas Driemeyer <thomas@bitrot.inberlin.de> posted a schedule planner based on X/Motif in 11 parts on November 21, 1993. plan displays a month calendar similar to xcal, but its every-day box is large enough to show appointments in small print. By pressing on a day box, you can list and edit the appointments for that day. plan also supports warn and alarm times and several methods of listing appointments.