Burning River Goodies
These are the Burning River Goodies. I used to live about 500 yards from one boundary of the Cuyahoga Valley National Park. The Cuyahoga River is famous for being so polluted that in 1969 it caught fire, sparking an environmental furor that led to the eventual passage of the Clean Water Act of 1972. Thus, the Cuyahoga is the "Burning River". Today it's a bit cleaner, and the federal government and the city of Akron are working to clean up the most egregious pollution still being poured into the river so things are looking up.
The Dolphin 6.2 version of the Goodies are now available.
When you unzip this file it should create two directories under your Dolphin 6 install directory, one named 'Burning River', and another named 'Other Packages'. The stuff I've written goes into 'Burning River'. The stuff I've ported which others created goes into 'Other Packages'.
Here's a list of what's in the Goodies:
ANSI Substrings - Enhances Dolphin's substring functionality to be more in conformance with the ANSI Smalltalk standard.
BayesianFilter - Adds a class to do Bayesian inferencing. Useful if you want to develop something like a spam filter.
Complex Numbers - Your basic Complex number class.
Complex Matrix - Adds a Matrix subclass (see LinearAlgebra below) whose elements are complex numbers.
ConstantsClassGenerator - A handy class for extracting #define'd constants from C header files into Smalltalk classes.
CrtLibraryExtensions - Extensions to the CRTLibrary class used by various other packages.
DecMessageQ - Allows Dolphin to interface with the old DEC MessageQ (now BEA MessageQ) product. This was written for use with DMQ v3.x, but I suspect that it will work with more recent versions (you may have to change the DMQLibrary>>fileName method slightly to reflect an up-to-date .DLL name).
DuplicateFileFinder - a useful little utility for finding like-named files on a disk.
EightQueens - A class that tries to find solutions to the eight queens problem.
ExternalProcess - This class lets you launch Win32 processes to run commands either synchronously or asynchronously. You can redirect stdin, stdout, and/or stderr to files if you so desire.
FileExtensions - Extensions to the File class.
Float Extensions - Adds methods to the Float class that allow NaN's and other numeric unusualities to be detected.
HotDraw - a graphics framework. Now, don't get all excited - IT DOESN'T WORK YET!!! Here's the deal - I found the time to get HotDraw imported into Dolphin, but haven't had time to make it work yet. So if some kind soul out there with more experience than I have with HotDraw (which means pretty much any experience at all) can get this stuff working his/her name will be emblazoned here <your name here> for as long as this web page lasts! (You think you're gonna to get a better offer today? Think again…) So have a go at it, and if you produce the best port (I'm the judge of what 'best' means, and my decision will be fine) you will achieve a form of temporary immortality (which, come to think of it, is what everyone else gets too). See HOTDRAW.PS for a class diagram.
InheritableFile - Adds a subclass of File whose handles are inheritable by subprocesses.
InterpolatedFunction - Adds a class that uses cubic splines to fit a curve smoothly through a set of points.
Kernel Library Extensions - Adds methods that enhance the KernelLibrary class.
Linear Algebra - Vectors and matrices in Smalltalk.
Linear Programming - An implementation of the revised simplex algorithm in Smalltalk.
LogFileStream - a FileStream subclass that automatically prepends a timestamp to each line written.
MultiProviderRouter - provides an interface to some of the Win32 multi-provider router functions.
MVP Base Extensions - adds Canvas>>text:at:tabs:.
OwnerDrawControls - implements an owner-draw listbox control. Useful for accessorizing those dull, drab user interfaces. ***NOTE*** - at the moment this isn't working – it seems that something changed in Dolphin 6 and I haven't had time to straighten it out.
Password Prompter - A simple subclass of Prompter that does the usual password masking stuff.
Pi Calculator - Over on the Squeak list David N. Smith posted a class that computes pi to an arbitrary precision. With his kind permission I ported the code to Dolphin.
Polygon - Implements some basic operations on lines and polygons.
Printing Notepad - Adds a subclass of the Notepad application supplied by Object Arts that can print what's been typed in. This is a pretty neat little tutorial on how to create a simple subclass that adds functionality, how to work with dialogs, and how to do some simple printing.
Profiles - Adds an interface to Windows initialization (.INI) files.
RCS Source Control Integration – NOTE: If you're using the built-in source control features in Dolphin 6 I DO NOT recommend installing this package. If you do, make sure you try it in an image that you don't care about. This has NOT been tested in Dophin 6 but I've included it in case someone still wants it. USE AT YOUR OWN RISK!
Automatically checks out the appropriate file when you change a class, method, global, resource, or package. I've also added integration with the PackageSelector class, so you can use the check-out and check-in context menu entries on the PackageSelector on the System Browser. Also automatically saves any changes before doing a check-in.
NOTE: If you need RCS your best bet is to install the Cygwin toolkit (http://www.cygwin.com).
For more information on RCS see http://www.cs.purdue.edu/homes/trinkle/RCS/.
Some questions about using RCS with Dolphin come up occasionally. Here's some answers:
What limitations are there in the RCS/Dolphin integration?
The biggest limitations is that code is stored into RCS but is never loaded from RCS. When you check something out from RCS the disk file is checked out, but the code in that file is not re-loaded into your image. Thus, if the code has been changed by someone/something else you won't see those changes.
I work alone. Is RcsSourceManager suitable for me?
Yes, assuming that you work the same way I do. If you keep one big "Swiss Army Knife" image with absolutely everything loaded, and do all your work in that one image, RcsSourceManager will work well for you. Since you're the only developer and your image is always current with what's in RCS you'll be fine.
I keep a bunch of separate images around, one for each of my projects. Will RcsSourceManager work for me?
Maybe. If the packages in your images don't overlap (i.e. image A loads packages Aleph, Bet, and Gimel, image B loads packages Alpha, Beta and Gamma, and image C loads packages Zort, Nobble, and Foobar) you should be fine. If, on the other hand, you use the same package in multiple images you'll have to coordinate the updating and use of these shared packages.
I need to coordinate work between multiple developers. Can I use RcsSourceManager?
Of course, but keep in mind that you get what you pay for. With RcsSourceManager you'll have to do a lot of manual coordination between developers. It would be easier and, in the long run, cheaper to use a commercial package which doesn't suffer from the limitations of RcsSourceManager.
Regular Expressions - Chris Uppal's port of Vassili Bykov's regular expression package. I'd started my own port at one point but got stuck, and Chris kindly provided his version.
Rio - This is a set of ODBC-based relational database interface classes that I've worked on/with since ODBC first became available many years ago. The first versions were written in C++, and the Smalltalk version here was originally written for Visual Smalltalk long before I'd ever heard of Dolphin. It's a bit quirky, completely documentation-free J, and is pretty low-level (an ODBC reference manual is helpful when trying to use it), but it does provide some interesting features I haven't seen elsewhere, including:
The ability to determine if a given field in a given row in a given rowset has been changed from the point of view of either the database or the user interface (handy for determining minimal update requirements for either the database or the UI).
Statement classes which generate their own SQL to do inserts and minimal updates
Rule-based Logic – commonly referred to as 'expert systems'. This package implements a simple forward-chaining rule-based logic engine and associated classes that allow rules to be created and run. An implementation of the Zookeeper system from Patrick Henry Winston's book “Artificial Intelligence” is included. This package makes interesting use of Smalltalk's reflective capabilities.
Scheduling - One of my interests is job-shop scheduling. This package provides an implementation of a simple constraint-based job-shop scheduling system.
Shell Library Extensions - Adds the Win32 SHELLEXECUTEINFO structure, and adds some extra functionality to the ShellLibrary class.
SmallWorlds - This is a text adventure game inspired by the classic "Colossal Cave" adventure and the games produced by InfoCom twenty years ago. When I was in college I was fascinated by Colossal Cave, and spent far too many hours playing when I should have been studying. For many years I was intrigued by the problem of parsing "natural" language into commands a computer could understand, and made several abortive attempts to write something like this in various languages (e.g. Pascal, C, C++). A message on comp.lang.smalltalk a few years ago started me thinking about it once again, and SmallWorlds is the result. (There's a lesson here about the power of Smalltalk. I played with this stuff on-and-off in various languages and never managed to get it finished. In Smalltalk the initial version took only a few days). A version of the Colossal Cave adventure is included.
SoundsLike - Implementations of the Soundex, NYSIIS, and Double Metaphone algorithms in Smalltalk.
Spoken Number Formatter - Adds Number>>asSpoken, a method that answers a string containing the text of a number as it would be spoken in American English. For example, 12005078901 asSpoken answers 'twelve billion, five million, seventy-eight thousand, nine hundred and one'.
StableSortedCollection - adds a subclass of SortedCollection that uses a stable sort. (The base SortedCollection uses Quicksort, which is not stable). There's also a ListPresenter subclass here that uses a stable sort to order its elements.
Many thanks to Bill Dargel for his fixes and enhancements to the StableSortedCollection package.
Telnet - adds some basic (and largely incomplete) Telnet functionality. Not exactly smooth or neat but the basic functionality is there.
TGen - a scanner/parser generator for Smalltalk.
TriangleSolver - a simple little class to solve for the unknowns in a triangle.
Units - this is Andrew Brault's package for manipulating physical units, along with my UnitHelpers package which adds a bunch of convenience methods. For a fun demo display the following:
(186000 miles per: Unit seconds) furlongsPerFortnight
Now you know the speed of light in furlongs per fortnight. Did you need some other reason to load this package? J
UserLibraryExtensions - some extensions to the UserLibrary class.
Versioning Source Manager - a subclass of SourceManager required by RcsSourceManager. Provides the basic support for interacting with file-based version control systems such as RCS. Greatly refactored and improved for XP to ease the task of integrating version control systems into Dolphin.
VersionLibraryHelpers - adds a method to the VersionLibrary class that provides access to various strings in a version resource.
To view a history of changes made to the Goodies look here.
For those who who would like older versions of the Goodies they're still available:
Share and enjoy.
![]()
Last Revised: 21-Nov-2009 by Bob Jarvis