"Linux Gazette...making Linux just a little more fun!"

Welcome to the Graphics Muse
Set your browser as wide as you'd like now.  I've fixed the Muse to expand to fill the aviailable space!
© 1998 by mjh 

Button Bar muse: 
  1. v; to become absorbed in thought 
  2. n; [ fr. Any of the nine sister goddesses of learning and the arts in Greek Mythology ]: a source of inspiration 
 Welcome to the Graphics Muse! Why a "muse"? Well, except for the sisters aspect, the above definitions are pretty much the way I'd describe my own interest in computer graphics: it keeps me deep in thought and it is a daily source of inspiration. 
[Graphics Mews][WebWonderings][Musings] [Resources]
This column is dedicated to the use, creation, distribution, and discussion of computer graphics tools for Linux systems.
Well, it's been a couple of months since we last spoke.  I've been working on a major project for the past year and the last 3 months have been exceptionally busy.  But the project is done, or very nearly so (a few minor details left to handle) - and that project is a book on the Gimp.  It's called The Artists Guide to the Gimp and should hit the shelves sometime in September.  All I can say is, I hope you like it.   Writing a technical book is harder than I thought.  My next one is going to be fictional novel.  You don't have to do a CD, tons of images, or 2nd editions for those.

There were plenty of graphics related news announcements since the last Muse.  Unfortunately, I just didn't keep up with them and they've expired from my news feed.  So what I've got this month is pretty recent info.  I did hang onto a few tidbits from mailing lists I've been scanning, plus email from a few readers.  It's funny - I get email about really old versions of the Muse every now and then.  I think people are still just finding out about it.
In this month's column I'll be covering ...

I'll have more for next month, but I just finished the book with only 3 days to get the Muse done.

Graphics Mews
      Disclaimer: Before I get too far into this I should note that any of the news items I post in this section are just that - news. Either I happened to run across them via some mailing list I was on, via some Usenet newsgroup, or via email from someone. I'm not necessarily endorsing these products (some of which may be commercial), I'm just letting you know I'd heard about them in the past month.

Xi Graphics releases fully integrated Linux distribution

This isn't really graphics related, but Xi is an X server vendor.  And X server vendors are pretty important to the Linux graphics world.  So, here it is. 

Xi Graphics is now providing a commercial Linux distribution which includes their Accelerated X server and their maximum/CDE desktop product.  Unit price is $214.95 for the Executive Edition and $364.95 for the Developers Edition. 

For more details: 
Kyle Fink 
Xi Graphics 
(303) 298-7478 


Panasonic PalmCam utility

Fredrik Roubert has released a very early version (v0.3) of a driver for the Panasonic PalmCam, an NV-DC1000 digital camera.  According to Robert a couple of the features include the ability to specify ranges to download and to preview or delete several images in one session. 

For more information, check out his web page at 
http://www.df.lth.se/~roubert /NV-DC1000.html 

The package is available from the following sites: 
ftp://ftp.df.lth.se/ pub/users/roubert/Linux 
ftp://sunsite.unc.edu/ pub/Linux/apps/graphics/capture 

Linux / 3-D SIGGRAPH Report

At SIGGRAPH '98 in Orlando, Florida Daryll Strauss and Brian Paul organized a special interest group (SIG) session to talk 
about Linux, 3-D hardware acceleration, and related topics. 

Attendence was greater than expected with 100-150 people attending. 

A summary of presentations taken by Brian Paul, author of the Mesa package, can be found at 
http://glide.xxedgexx.com/ SIGNotes.html 

Blender News

There were a number of updates to Blender, the 3D modelling page from NeoGeo.  Here is a snapshot of annoucements from their News page: 

Blender manual (1998-07-10) 

    All information you need, packed in cool design at paper: the Blender 1.5 manual is scheduled to ship in October. Information about pricing and pre-ordering will be available in August. 
The Unofficial Blender Mailing list (1998-06-16)  Version 1.34 for Linux/FreeBSD available today. (1998-06-04) 
    Many bugs fixed and included some features: Play (flipbook). Use it for playback test animations (Hamx) Frame counter during anim playback.  Read the BlenderBeta page for more.

Linux IEEE-1394 (FireWire) Subsystem - Status report

Emanuel Pirker is working on the Linux IEEE-1394 (FireWire) Subsystem for a while now and thought it would be a good idea to give a small status report. 

IEEE-1394 is the name of a high-speed but low-cost serial bus. Apple has trademarked it as "FireWire". Current implementations reach 200 Mbit/s, soon we will have 400 and then 800 and so on. FireWire is designed for consumer multimedia (e. g. connecting a digital video camera to your PC) and high-speed peripherals (hard disks, CD ROMs, but also scanners, printers). Since it provides quality of service (guaranteed bandwith and bounded latency) it can also be used in industrial real-time applications. 

Support for Windows (NT) and Rhapsody is coming (some items are already operational) but Linux users also want to benefit from this technology - so Emanual started the development as a university project last winter. 

He now has a clearly designed subsystem, an Adaptec AIC-5800 driver and some code to test it. Not all FireWire functions can be used now but he has reached a point where the API is stable and other people can also contribute work (e.g. a video camera driver). 

So if you are interested in this, just email Emanual - more (wo)manpower is desperately needed. 

Contact addresses: 
WWW:  http://www.edu.uni-klu.ac.at/ ~epirker/ieee1394/ 
E-Mail: epirker@edu.uni-klu.ac.at  

Some late entries: 

ImageMagick 4.0.8 
Panard Vision - Portable Real-time 3D Engine for Linux 
Mesa 3.0 beta 7 
SANE 0.74 
FreeWRL 0.14 

For more details on these, check out Freshmeat.net.

XVScan 1.80 Scanning software

tummy.com, ltd. is pleased to announce XVScan Version 1.80, which now includes support for Microtek ScanMaker E3 and E6 scanners as well as HP SCSI ScanJet scanners.  Currently the Microtek support is available on Linux and Solaris, but our other platforms will include that support shortly.

XVScan is based on the popular xv image manipulation software for X Windows and includes a fully licensed copy of xv. It is source available commercial software.

If you've never used John Bradley's XV image manipulation software, it's difficult to describe how powerful it is. XV reads and writes files in a dozen different formats, provides powerful color-map editing, window capture, color-space conversion, cropping, image manipulation algorithms, and the list goes on.

XV gives you powerful image and color-map manipulation, support for over a dozen image formats, as well as the Visual Schnauzer, and an easy to use graphical interface to view and catalog your scanned images.  Supported images formats include: PNG, GIF, JPEG, progressive JPEG, TIFF (compressed and uncompressed), PostScript (requires ghostscript), PBM/PGM/PPM (raw and ascii), X11 Bitmap, XPM (X PixMap), Sun Rasterfile,

With XVScan, you now have the ability to scan directly into XV in a very cost efficient (and more importantly time efficient) manner.

See our website http://www.tummy.com/xvscan/ for a full list of supported scanners.

What's New in Version 1.80

  1. Microtek ScanMaker E3 and E6 support
  2. HP ScanJet 5P push button scanning
  3. Updated JPEG and TIFF conversions
The Linux version requires working generic SCSI driver. It has been tested with versions 1.2.7 and higher of the kernel.

The current version of XVScan is 1.80 dated 1998-06-11 based upon XV version 3.10a dated 12/29/94.

XVScan is $US50 for Linux, HP-UX, FreeBSD and BSD/OS for free ftp delivery. XVScan is $US80 for Solaris bundled with SGLite SCSI driver.  CD-ROM Media $US20. Contact xvscan@tummy.com to order or order on the web at https://www.tummy.com/ordering/onlineorder.phtml.  Payment accepted via check, Visa/Mastercard/Discover/AMEX cards.

Contact tummy.com, ltd, phone: (970) 223-8215, fax: (408) 490-2728,
URL: <http://www.tummy.com/xvscan/>
email: <xvscan@tummy.com>

S.u.S.E. releases new X servers for Rendition, Cyrix, SiS and 3DLabs

S.u.S.E. is proud to announce the release of a new set of X servers for several popular graphic chipsets.

To avoid confusion and to clearly state that these servers are part of XFree86, S.u.S.E. has changed the naming scheme of its servers. Instead of the XSuSE prefix, they now use XFCom, which is short for XFree86 Compliant.  XFree86 compliance is intended to mean that the sources for these servers are ALREADY part of the XFree86 development sources and will be released as part of one of the next XFree86 releases.  This is the major difference to servers with the XBF prefix, which stands for X Binary Free and means that sources for these servers are only available under NDA and therefore cannot be included in XFree86.

Following this naming scheme, we have renamed the XSuSE_Elsa_GLoria server to XFCom_3DLabs and XSuSE_SiS to XFCom_SiS. Additionally, we have added to new servers that support the very popular Rendition Verite chipsets and the all-in-one Cyrix MediaGX CPU that includes graphics functionality.

XFCom_Rendition supports the Rendition Verite V1000, V2100 and V2200 chips.  Among the boards supported are

XFCom_Cyrix supports the Cyrix MediaGX CPU

XFCom_SiS supports

XFCom_3DLabs supports All these servers are available as Linux x86 libc5 binaries at
http://www.suse.de/ XSuSE/XSuSE_E.html.

Binaries for other operating systems as well as glibc binaries will be released, soon.  For all questions and support concerning these servers please do NOT contact XFree86 but send email to x@suse.de instead.


Did You Know?

A comment on IRTC-L stated: Bernd Sieker, regular contributer to the IRTC list, offered the following responses:  
Name Aspect Ratio
Super 35 1:1.33
Academy 1:1.37
Wide Screen 1:1.66
Wide Screen 1:1.85
16:9 1:1.77
Cinemascope 1:2.35
  Another question from the same list:  What are NTSC and PAL?

Again, Bernd Sieker supplies an answer:

Q and A

Q:  Anyone know how to set up an Wacom Artpad for use with Gimp, or if this is possible. I think I have to use XInput or something.

A:  Juergen Schlag responded:

Muse:  What driver and what docs?  Anyone know what he meant by this?  

Reader Mail

Dan Schmitt wrote: Michael B. East wrote: Scott Manley wrote: 'Muse:  Thanks for the pointers guys!
Steve Martin wrote me about some information in the Linux Graphics mini-Howto: 'Muse:  You are completely correct.  I stand corrected. 'Muse:  It is indeed.  I've got that text.  It's not an easy read, but it's certainly a thorough coverage of the subject. 'Muse:  It does help.  Thanks for clearing this up.  I intend on doing a complete rewrite of the LGH soon, but I don't know when it will be complete.

Roderick A. Anderson asked about converting GIF's to interlaced GIF's.

'Muse:  NetPBM, I think.  ImageMagick may also do so.  A commercial package is Image Alchemy, but it's priced for corporate use and not so much for individual use (I think - it's been awhile since I checked). 'Muse:  Boy, that's an old version.  If you have time try the 1.0 version from www.gimp.org.  You'll need to grab the GTK 1.0 libs first - www.gtk.org.  The Gimp can read in non-interlaced GIF's and convert them to interlaced.  It's pretty easy to do.

Building dynamic web pages

Recently I started a complete rewrite of my web site, graphics-muse.org.  This is the 5th time I've done this over the past 5 years although I haven't had my own domain that long.  This rewrite comes from the obvious need to make the my graphics resources searchable and easier to update.  So, I've had to add a database and learn to create dynamic pages.  The database part is easy - I'm going to use msql.  I've used it for a few simple databases at home and it's quite sufficient for my relatively simple needs.  Dynamic pages are something new, however.  And for this, I need to step into the world of Perl.

I used to pride myself on the number of languages I had taught myself over the years.  In recent times, however, I've found myself falling behind the curve, having grown comfortable and satisfied with C.  Although I still think C suffices for most projects I realize that I need to move on to newer, object oriented, languages.  I hate C++.  I've done a little work with it and it's just a perversion of C in my eyes.  Java is my long term goal, primarily because I make a living doing graphical interfaces and Java is the future for people like me.  Perl, on the other hand, is simply the tool of choice for the Web.  I didn't want to learn yet another scripting language, but it's hard to avoid if I'm going to try to do Web developement.  So, Perl it is.

Fortunately, creating dynamic Web pages with Perl turns out to be pretty simple.  A perl module called, conveniently, Msql allows me easy access to my databases and the CGI.pm module makes generation of HTML a breeze.  Both the msql database and CGI.pm have printed texts available so learning both is a bit easier than the traditional man-page browsing with which I've grown up.  We'll take a look at how we can use both the Msql and CGI.pm modules to create a very simple dynamic page.

This discussion does not expect you to understand how to program in perl, but it would help.  We're going to step through the process without going into huge detail here.  Also, when I talk about the database I'll use lowercase - msql - but when I talk about the perl module I'll use uppercase - Msql.  You should, however, be a little familiar with how SQL statements look, or at least not be afraid of looking at them.  What we'll use in this example is pretty basic and you should be able to interpret what's going on from the code and the explanations.

First, what tools do you need for this experiment?

These just happen to be the versions I installed on the server that hosts my domain.  I don't know what the version of the Msql module is, but you can find it on a CPAN mirror.  Apparently if you have perl 5.004 you already have CGI.pm (it's part of the standard distribution since 5.004).  If not you'll need to grab the module from one of the CPAN mirrors.  CPAN is the Comprehensive Perl Archive Network and is where you can find all sorts of modules for use with Perl.  Modules are extensions to perl.  The CGI.pm module allows you to use methods and functions to generate HTML output in a CGI script.  Similarly, the Msql module allows you methods for accessing an msql database.  The current version of the msql database is 2.0.x, but this seemed to have some problems when I tested simple inserts on a Solaris box, so I'm working with the more stable 1.0.x version, which happens to be what's on my server anyway.

Ok, now let's create a simple database.  Make sure the msql database is installed properly (follow the directions with the package - it's pretty straightforward to build and install).  Start the database daemon:

Next you need to create an empty database, which we'll call "muse".  Use the msqladmin command for this: We can now use the msql monitor to interactively add a table and populate the table, but let's do this the easy way.  We'll create a text file with the commands and then feed it to the monitor in batch mode.  The text file looks like this (including comments): Save this to a file called "tools.msql".  The filename is arbitrary.  The "\p" and "\g" tell the monitor to print the command as its run and to actually run the command, respectively.  Note that the text names are enclosed in single, not double, quotes!  You can feed this to the monitor using the following command: It's a simple database, but this is a simple example.  Now let's build a CGI script using perl that will display a couple of tables, one of which will contain the entries from the database.  The first thing is to tell the script to use perl5 and to load the Msql and CGI.pm modules: The location of your perl5 binary may be different, so check that first.  The stuff after "use CGI" tells perl which functions from CGI to load.  In this case we're loading the standard functions, plus the HTML3 and netscape extensions.  There are multiple methods for specifying these extensions.  You'll need to check the Perl or CGI.pm documentation (see end of this article) for details on how to use a different syntax. This prints out the <HEAD> section for you.  Just modify the author and title lines to suite your needs.  Next comes our connection to the msql database: The first line after the comment assigns a database handle to the variable dbh.  The next line use the selectdb() method to access the database named "muse".  Pretty simple, eh?  You can specify a remote host in the connect() method in the first line.  You can also specify the name of the database there.  But I think explicitly calling them out like this makes the code a little easier to maintain for someone who might come along later and not quite understand what was going on.

Ok, you've opened the connection to the database.  Let's grab the tools table entries.

Looks a little confusing, but it's not really.  The first line assigns a handle from the SELECT statement to the variable sth.  The handle is used to access each row of the table that matched the SELECT query.  In this case, the query() method selected all rows from the table "tools".  If we had opened another database (besides the "muse" database) we would have used a different database handle, such as dbh2, instead.  Of course we would have had to selected that database with the selectdb() method like we did with dbh1 earlier.

The next two lines just define the variables rows and result to be local.  However, these variables will both be list variables.  Lists are special in perl - you can access all the entries in the list using the @ symbol as a prefix, or you can access individual elements of the list by prefixing the variable name with a $ symbol and using an array element number.  We'll see examples of both in a moment.

The next 4 lines are a while() loop that process each row returned from our SELECT query.  The fetchrow() method is used to assign the current row to the @result list.  A row, of course, consists of two entries:  the tooltype and the toolname.   The push() line says to append the following to the @rows list:

The @rows list is empty to start, so each time through we're adding a new entry to the list.  Each entry is the CGI.pm modules code for specifying a table element.  The stuff between the curly braces are the table element arguments.  After that comes a list of what goes into the element.  In this case, you get the tools name - $result[1].  Remember we assigned the current table row to the @result list, and we're accessing an element of that list by using the $ prefix and an array index.  The index always starts at 0, so an index of 1 means the second element of the list.  What happens after this while() loop is run is that you have a list of table elements with all the tools names in them.  We'll be using these when we create a table in just a moment.

Below the while() loop is another local variable, tools_list.  This variable will be used to output a table in our page.  The table() function comes from CGI.pm and is used to generate a table.  Note that neither this nor the td() functions in the while() loop have actually been output yet.  We're just storing these in variables for later output.  Again, the curly braces enclose arguments for the table HTML tag.  After that is another embedded CGI.pm function - Tr().  This function has an uppercase first letter only because perl has its own "tr" function and there needs to be a distinction between the two.  In most cases, the CGI.pm functions will use lowercase only.  The Tr() function creates a table row.  Embedded within this is are all the table elements we stuffed into the @rows list.  Still with me?  Great!  All that's left is to output this back to the browser.

The print() command is from perl.  It just prints to standard output, which is what you want for CGI scripts.  The center() function comes from CGI.pm and will center the following table.  The table() function comes from CGI.pm also.  We've already created a table earlier, in our $tools_list variable.  Now we're going to embed that earlier table inside another table.  We define the new tables arguments, followed by a single table row (Tr()) and a single element in which we add the $tools_list table.

Save all this to a file called web.pl in your cgi-bin directory on your web server.  Make sure the script has execute permissions.  You can see this little scripts output by accessing www.graphics-muse.org/cgi-bin/web.pl.  It's not much, but it shows how easy it is to integrate a little bit of database info into a web page.  For what it's worth, it only took me about 2 days to get all this down, mostly by experimenting with examples in the printed texts.   It would have been quicker, but I did it at work and ducking from coworkers took most of my time.

Speaking of documentation, the texts you want are

The msql guide is applicable to the 2.0 release, but I found it useful for a refresher on using msql.  If you need 1.0.x documentation, you can check out the msql web site.


Gimp 1.0

For those of you who have been 
  1. living under a rock
  2. tied up and held captive by aliens
  3. or changing your oil for the past 3 months
I have news for you:  Gimp 1.0 has been released.  The announcement came back on June 5th.  Since I haven't done a 'Muse column since April perhaps you missed it.  For some reason the trumpets didn't seem to blare as loud as I expected they might when the announcement hit the mailing lists and comp.os.linux.announce.  I guess I expected more fanfare.  Maybe there was and I missed it.  I was changing my oil for a while back then, too.  Or maybe that was the month I was with the aliens.  It's been a long summer. 

As I mentioned at the top of this column (you know, the part you probably don't read each month), I've spent the last year working on a book on the Gimp.  SSC, the publishers of the Linux Journal and the host of the Linux Gazette, had contacted me in June of 1997 about the possibility of doing the book.  I thought it was a great idea, so I jumped into it.  The hard part has been trying to keep the work up to date.  Much of the writing had to wait till there was some light at the end of the 1.0 development tunnel.  Not suprisingly, the past 3 months I've been buried in updates and last minute details.  This has been the longest last minue of my life. 

But I'm fairly happy about the book.  It will be printed in 4-color on glossy paper and there are lots of images and examples.  There is also a CD which will include all the images from the book, plus lots of other good stuff.  There are some things I didn't get in because there just wasn't any time left.  They'll have to wait for the next edition or for articles in the Linux Journal.  Or maybe in the 'Muse.  Anyway, one year is plenty for the first edition. 

Gimp 1.0 source actually comes in three packages:  the core distribution, the extras package, and the unstable package.  The core and extras package build and install fairly easy.  The unstable package includes a number of very handy plug-ins but you have to understand how to build them a little more than the core and extras packages. 

Some of the more interesting features of the 1.0 release include a rather good Print plug-in that can work with a number of HP and Epson printers directly and also supports Postscript output.  So you can print directly to a postscript capable printer or run the output through Ghostscript. 

-Top of next column-
More Musings...  

No more musing this month.

Another great Plug-in is the GFig plug-in, which allows you some limited drawing capabilities.  You can draw circles, curves, boxes and other shapes, repositions them, render them on separate layers using any brush shape and color.  The interface is a bit clunky, but it's still an improvement on the default drawing tools. 

Other recent improvements over older development releases include: 

  • runtime configuration via the Preferences dialog
  • a Netscape interface to access online resources
  • a better menu organization
  • frequently used layer functions accessible via buttons now
  • lots of Script-Fu scripts
The Gimp has gotten quite a bit of press recently, including some blurbs in the online version of Publish magazine and on NPR (National Public Radio).  Check Zach's Gimp News site for more information on these. 

There are still a few things that need work, not the least of which is support for more color models.  But this has been discussed at length on the developers list and a few people appear to be working on it, at least to some extent, for the 1.2 release.  The Gimp will have a numbering scheme like the Linux kernel, where even numbers are public releases and odd numbers are developers releases.  Currently, the 1.0.4 version is the latest public release.  There is a 1.1 

I intend to focus more of my energies towards the Gimp from now on.  The 'Muse columns future depends on some discussions I'm having with SSC about another project, but for now it's just discussion.  In any case, after all this time, I finally plan on working on some plug-ins and scripts.  Since 1.0 is out, I can't whine about not having a stable version anymore.   I'll be hanging out on the Gimp-User mailing list trying to help out there.  With 1.0 out, it's time for the user community to show what can be done with the tools. 
Besides, maybe we have another Gimp-based Diane Fenster out there. 

The following links are just starting points for finding more information about computer graphics and multimedia in general for Linux systems. If you have some application specific information for me, I'll add them to my other pages or you can contact the maintainer of some other web site. I'll consider adding other general references here, but application or site specific information needs to go into one of the following general references and not listed here.
Online Magazines and News sources 
C|Net Tech News 
Linux Weekly News 

General Web Sites 
Linux Graphics mini-Howto 
Unix Graphics Utilities 
Linux Multimedia Page 

Some of the Mailing Lists and Newsgroups I keep an eye on and where I get much of the information in this column 
The Gimp User and Gimp Developer Mailing Lists
The IRTC-L discussion list 

Future Directions

Next month:
As usual, I'm not sure exactly what will be covered next month.  My next major project is a rewrite of my graphics-muse.org web site so you can expect I'll probably have something for Web Wonderings.  POV-Ray 3.0 is out in beta, I hear.  Anyway, we'll see which way the winds blow by the end of August.

Let me know what you'd like to hear about!

© 1998 Michael J. Hammel

Previous ``Graphics Muse'' Columns

Graphics Muse #1, November 1996
Graphics Muse #2, December 1996
Graphics Muse #3, January 1997
Graphics Muse #4, February 1997
Graphics Muse #5, March 1997
Graphics Muse #6, April 1997
Graphics Muse #7, May 1997
Graphics Muse #8, June 1997
Graphics Muse #9, July 1997
Graphics Muse #10, August 1997
Graphics Muse #11, October 1997
Graphics Muse #12, December 1997
Graphics Muse #13, February 1998
Graphics Muse #14, March 1998
Graphics Muse #15, April 1998

Copyright © 1998, Michael J. Hammel
Published in Issue 31 of Linux Gazette, August 1998