One of the first things you notice when you start either Maxima or Octave is that these programs run on a character-based terminal. It doesn't matter if you have the state of the art graphical user interface on Mac OS X, Linux or Windows, they will take input in the form of written commands and will display their results as strings of ASCII characters. This is not a bad thing in itself, it just shows that they have a lot of history behind them, especially Maxima. Make no mistake, these programs are very sophisticated and implement algorithms that incorporate a vast repository of mathematical knowledge.
In order to overcome their UI shortcomings, Maxima and Octave today are augmented with other programs that are well integrated in the graphical environments of modern operating systems. There are two categories of such helper programs.
The first one is the Integrated Development Environment (IDE). This is a replacement for the character terminal as the main interface with the program. Although the command line is still available, some commands can be activated by pushing buttons or clicking menus. Besides, you have a text editor for editing scripts, integrated online help and many other niceties. This concept, of course, is not new. It has been around at least since the early days of Visual Basic and Turbo Pascal. To be fair, even Emacs had such an integrated environment earlier than that, although not in a graphical environment. For Maxima, one usually uses wxMaxima while for Octave, QtOctave is a common choice.
The second category of helper program is the plotting utility. Although some IDEs can also graph functions, curves and surfaces, this task is usually relegated to a specialized program. There are some possible choices here (see the List of information graphics software in my previous post) but both Maxima and Octave use the services of Gnuplot.
But the story doesn't end here! Gnuplot itself does not know everything about graphical environments so it relies on yet other programs to do the low level display. The list of output devices is long, ranging from real graphical terminals to terminal emulators that run on top of graphical environments. If you're running on Linux, for example, XTerm comes up naturally, but on Mac OS X your best choice would probably be AquaTerm, which incorporates the native Mac look and feel. In some cases you might use one of these terminals to interactively work on a problem until you are satisfied with the resulting graphic. Then, if you want to publish it, you could output it directly into a file in a format that supports graphics, such as Encapsulated PostScript (.eps), Portable Document Format (.pdf) and others.
This architecture of interconnected programs is not new either. It more or less follows the early Unix motto that said that each program should do one thing well and one thing only. Nobody would think that Maxima and Octave do one thing only, but you can think of this rationale in a new level, where they do the core computations and other specialized programs do the input and output.
Now, as Monk would put it, this is a curse and a blessing. It's a curse for newcomers because they don't get a unified view of the program they're trying to use. Instead, they see a many headed beast that can be hard to correctly install, configure and understand. It also introduces new points of failure and makes it harder to keep all modules up to date in a compatible fashion.
The levels of complexity can run even deeper. When you run Maxima, for example, you don't see any process with this name (or similar). Maxima is written in Lisp so what you see is a Lisp interpreter which is executing the Maxima code. Which Lisp? Well, as you might guess, there are many implementations that can do the job.
On the other hand, for the experienced user it's a blessing, because he or she can, to a certain extent, pick and choose the best modules for each task. In part, it is this extreme flexibility that has attracted so many people to the world of Free and Open Source Software (FOSS).
No comments:
Post a Comment