A review of SpectrumSCM 2.0 and StateCoder
Cost: starts at $750/concurrent
license and $1,500/server
Spectrum Software Atlanta, Ga. www.spectrumscm.com
Rating: 4 out of 5
SpectrumSCM is a Java-based source configuration and management tool. V2.0 covers a lot of functions, including version control, issue tracking, change management, process control, workflow and release management.
Everything in SpectrumSCM revolves around change requests (CRs). You start a job by creating and assigning a CR. Then you can edit files to satisfy the CR, and group the fixes into releases. If multiple change requests edit the same file, SpectrumSCM makes sure that you include all of the earlier requests in a release if you include the later CR.
Pretty much everything is customizable: workflow, user groups, attributes of change requests and so on. In addition to a native Java client, there is an applet version for Web access to your repository. You will find all sorts of features built in, from a chat client in the SCM workspace, to a diff-merge tool, to several built-in editors with integrated SCM functionality. The product is a bit overwhelming; plan on spending some time to learn what you can do and to figure out how it works in the cross-platform user interface. Then you can dig into integration: SpectrumSCM supports the Microsoft SCCI interface, acts as an Eclipse plug-in and has its own API.
New features in V2.0 include a role-based access control system, a synchronization utility to match up your local working directory with the enterprise repository, renaming and moving within the repository without losing history, and integration with Microsoft Office. There is also a wizard-driven process for setting up your first project that will help you to navigate around the SpectrumSCM interface.
SpectrumSCM has customer references from some large projects, and it is definitely a mature solution. In fact, it is pretty much the most feature-rich collection of SCM functionality I have seen in a single box. The price tag may seem high, but when you consider how many individual applications it might replace, it seems a lot more reasonable. You can get hooked up with an evaluation download from the company's Web site.
An easier way to build .NET state
Rating: 4 out of 5
State machines are one theoretical concept that has use in the real world. In a state machine, you have a fixed set of states that the software can be in, and well-defined transitions between states triggered by events.
The folks at Desaware have taken the state machine idea and run with it in StateCoder. The end result is a framework on which you can build your own state machines quickly and easily, and an excellent manual that shows possibilities beyond those of simple wizards. Imagine using state machines to manage long-running operations with minimal UI impact, or to deal with database transactions. There is even a far-out example that shows how to use a state machine in an otherwise stateless Web app to speed up the user experience by predicting their future actions.
The Desaware.StateCoder namespace contains all the classes needed to define state machines and the messages and events associated with them. Defining a state is as simple as inheriting from the State class, and supplying an attribute to show that it is the first or last state:
The state machine itself is set up by inheriting from the StateMachine class,
with attributes to dictate which states it contains. Other code tells it what
message class to use and when to start pumping messages. It is straightforward
to implement a state machine with this code, and the tutorials and samples help.
There is a lot of depth. State machines can be nested in other state machines, for example. You can assign a state machine its own thread or support multiple state machines on a single thread. Almost anything can be used as a message source, including timeouts and exceptions, as well as arbitrary objects.
You could probably write your own state machine if you needed to. But could you write one this flexible, one that is threadsafe for background operation, one that is as well-tested? And for less than the cost of the product? When you see this common design pattern pop up, it is worth remembering that Desaware got there before you.
Mike Gunderloy has been developing software for a quarter-century now, and writing about it for nearly as long. He walked away from a .NET development career in 2006 and has been a happy Rails user ever since. Mike blogs at A Fresh Cup.