old-www/LDP/LG/issue27/issue27.txt

8942 lines
406 KiB
Plaintext

Linux Gazette... making Linux just a little more fun!
Copyright © 1996-98 Specialized Systems Consultants, Inc.
_________________________________________________________________
Welcome to Linux Gazette! (tm)
_________________________________________________________________
Published by:
Linux Journal
_________________________________________________________________
Sponsored by:
InfoMagic
S.u.S.E.
Red Hat
Our sponsors make financial contributions toward the costs of
publishing Linux Gazette. If you would like to become a sponsor of LG,
e-mail us at sponsor@ssc.com.
Linux Gazette is a non-commercial, freely available publication and
will remain that way. Show your support by using the products of our
sponsors and publisher.
_________________________________________________________________
Table of Contents
April 1998 Issue #27
_________________________________________________________________
* The Front Page
* The MailBag
+ Help Wanted
+ General Mail
* More 2 Cent Tips
+ Re: Help Wanted LaserJet 4L
+ StarOffice 4/Ghostscript
+ Linux and VAX 3400 and 3300
+ xdm with pictures
+ Re: Help-Installing Linux on a FAT32
+ Regarding Easter Eggs in Netscape etc.
+ Re: Changing XDM windows
+ Nice xdm and Linux PPC
+ Re: Help with Sound Card
+ Lots More
* News Bytes
+ News in General
+ Software Announcements
* The Answer Guy, by James T. Dennis
+ Regarding Compile Errors with Tripwire 1.2
+ Applix Spreadsheet ELF Macro Language
+ Answer Guy Issue 18 -- Procmail Spam Filter
+ Great Procmail Article
+ Linux Cluster Configuration
+ IP Masquerading/Proxy?
* Autologin with mingetty, by John Kodis
* Checking Out SPARC-Linux with SLXT, by John Little
* EMACSulation, by Eric Marsden
* Evangelism: A Unix Bigot and Linux Advocate's Spewings, by David
Wagle
* A Glimpse of Icon, by Clinton Jeffery and Shamim Mohamed
* Graphics Muse, by Michael J. Hammel
* Linus Speaks at SVLUG Meeting, by Chris DiBona
* Markup Languages and lout2, by Murray Adelman
* New Release Reviews, by Larry Ayers
+ Using the Flame Plug-In for Backgrounds, by Larry Ayers
+ The Maxwell Word-Processor, by Larry Ayers
+ WordNet: A Fast and Flexible Word Database, by Larry Ayers
+ Words Within Words, New Phrases From Old, by Larry Ayers
+ Comparing WordPerfect and LyX, by Larry Ayers
* Pattern Matching with Regular Expressions in C++, by Oliver Mueller
* Book Review: Web Security Sourcebook, by Kirk Petersen
* Weekend Mechanic, by John Fisk
* X Window System Terminals, by Rich Kaszeta
* The Back Page
+ About This Month's Authors
+ Not Linux
The Answer Guy
The Weekend Mechanic
_________________________________________________________________
TWDT 1 (text)
TWDT 2 (HTML)
are files containing the entire issue: one in text format, one in
HTML. They are provided strictly as a way to save the contents as one
file for later printing in the format of your choice; there is no
guarantee of working links in the HTML version.
_________________________________________________________________
Got any great ideas for improvements? Send your comments, criticisms,
suggestions and ideas.
_________________________________________________________________
This page written and maintained by the Editor of Linux Gazette,
gazette@ssc.com
_________________________________________________________________
"Linux Gazette...making Linux just a little more fun!"
_________________________________________________________________
The Mailbag!
Write the Gazette at gazette@ssc.com
Contents:
* Help Wanted -- Article Ideas
* General Mail
_________________________________________________________________
Help Wanted -- Article Ideas
_________________________________________________________________
Date: Mon, 02 Mar 1998 08:48:14 +0100
From: Per Wigren, wigren@mail.org
Subject: Linux and CDE
Hi! I want to know what makes XiG's and TriTeal's CDE different, other
than price! Maybe a comparison could be something for Linux Gazette...
Regards, Per Wigren
_________________________________________________________________
Date: Mon, 2 Mar 1998 18:56:35 +0100 (MET)
From: Scud, scud@zeus.ho.tranas.se
Subject: article idea
I wonder if you can write some article about linux on non x86
platforms and how long linux develelopment has come on those
platforms?
emir
_________________________________________________________________
Date: Sat, 28 Feb 1998 18:47:55 +0100
From: Grzegorz Leszczynski, rexus@polbox.com
Subject: Hurricane
I would be very grateful if you could help me with my problem. I can't
install Linux Red Hat Hurricane 5.0. After choosing the partitions to
Linux native and for swap Linux, and after choosing applications to
install program says that there is an error:
mount failed: invalid argument
After than i must return to menu and I don't know what to do. I look
forward from hearings from you
Rafal Leszczynski, POLAND
_________________________________________________________________
Date: Sun, 1 Mar 1998 14:11:18 -0500 (EST)
From: N. Lucent, nlucent@mindspring.com
Subject: Linux on a laptop
I finally convinced my girlfriend to make the switch to Linux from
windows after she suffered numerous stability problems (big surprise)
She currently has an HP Omni-book 600CT, I fdisked her windows
partition, and when I ran the install boot disk (for both Red Hat and
Slackware) it says floppy 1.44m (I assume this is from the kernel)
Then it says no floppy controller found, and just keeps reading the
boot disk. Is there anyway that I can force the detection of the
floppy? (external floppy drive) I found a WWW page about installing
Linux on that notebook, but What it said to do didn't work. Does
anyone have any suggestions?
_________________________________________________________________
Date: Thu, 5 Mar 1998 03:09:06 EST
From: Mktnc, Mktnc@aol.com
Subject: Matrox Millenium II
Anyone using the Matrox Millenium II graphics board with greater than
4 Meg ram with Xfree86? The XFree86 home page is somewhat dated on
this card.
Also, anyone running a Voodoo 2 accelerator graphix card with Linux?
Anyone using nasm (Netwide Assembler) for those hard to reach places,
under Linux?
Thanks - Nick
_________________________________________________________________
Date: Wed, 04 Mar 1998 09:05:00 -0500
From: Dr. Scott Searcy, searcys@baydenoc.cc.mi.us
Subject: X-term for MS-Windows
Does anyone make an X-windows terminal emulator that will run under
MS-Windows. I was hoping to find such a program so that I could use X
via a network connection from various MS-windows machines that I have
to use.
Dr. Scott Searcy
_________________________________________________________________
Date: Thu, 05 Mar 1998 23:38:29 -0700
From: Elvis Chow, elvis3@chowtech.cuug.ab.ca
Subject: Hylafax printing filter?
I finally got Hylafax running on a Slackware distribution. Works
great. What I need to do now is to get Applixware to print a doc
directly to it so it can automatically fax it to a predetermined
number. Is there a way of doing this?
Great work on the Gazette! Best source of practical tips I've run
across in a long time. Keep it up!!
Elvis Chow elvis@chowtech.cuug.ab.ca
_________________________________________________________________
Date: Fri, 06 Mar 1998 18:42:43 +0100
From: Stefano Stracuzzi, stracca@comune.modena.it
Subject: PPP with Linux
I'm a newbie in Linux and I'd like to know how I can configure my
connection to my Internet service provider with my Red Hat 5.0!
My modem is internal and it is configured to on the cua1
Thank You Very Much
Stefano Stracuzzi
_________________________________________________________________
Date: Mon, 9 Mar 1998 10:43:30 -0800
From: jean-francois helie, jfhelie@netrover.com
Subject: Help Wanted!
I am a student at CEGEP T.R. I have a year end project. My project is
to installed a Linux based router and a IP generator for 50 PC. I have
some informations about the router but i don't have any info about IP
generator.
Thank you for your support.
Jean-Francois Helie
_________________________________________________________________
Date: Wed, 11 Mar 1998 15:51:30 +1000
From: Ken Woodward, ken@rich.com.au
Subject: Linux for Amiga
Do you know if it is possible to get a CD distribution of Linux to
suit running on an Amiga 3000? It is currently running AmigaUnix, and
the Red Hat version 5 copy I purchased installed flawlessly on my PC.
Can I get the same for the old Amiga?
Thanks
Ken
_________________________________________________________________
Date: Wed, 11 Mar 1998 12:58:10 -0800
From: Kevin Long, kevjlong@ix.netcom.com
Subject: Samba Woes
Here's my situation: I'm trying to set up my RH5 terrifically working
system to be a PDC equivalent in an NT workstation/95 network.
Basically we need to 'login' to the server, and then get access to
'shares'. I tried using NFS as an alternative (with NFS maestro) but
it doesn't recognize Linux NFS. However...... I cannot get Samba to
work AT ALL. In fact, I have never seen it work. If you've got it
working, please help me - I can copy your installation configuration
and tweak it, but I need some success. I have plenty of NT, Novel,
DOS/win hardware etc. experience, and successfully use NFS exports
between Linux machines, but have got nowhere with Samba in a year of
trying. Is it a hoax?
Kevin Long
_________________________________________________________________
Date: Thu, 12 Mar 1998 14:55:56 +0800
From: Jason Wong, jasonw@tntexpress.com.hk
Subject: Red hat 5.0 with NT Server 4
I am new to Linux, and wish to set it up at home. The problem I have
is:
I wish to run Windows NT + Windows 95 + DOS + Linux. How to do this? I
can set it up with Linux & Windows 95/DOS, but how to make Linux
co-exist with NT server4?? many thanks!!
(See the Samba page, http://samba.anu.edu.au/samba/. It should be
just what you need. --Editor)
_________________________________________________________________
Date: Fri, 13 Mar 1998 10:18:33 +0100 (MET)
From: Fabio Gregoroni, gregoron@CsR.UniBo.IT
Subject: Driver For Scanner
I have to write a driver for a plain scanner on the parallel port. I
have following scanners:
1. PRIMAX 4800 COLORADO DIRECT
2. PLUSTEK 4830P
I don't need the driver already made, but I need only the transfer
protocol documentation ( what I must send and receive ). Can Someone
help me ?
Thanks.
_________________________________________________________________
Date: Wed, 04 Mar 1998 04:53:01 +0800
From: ahyeop, ahyeop4@tm.net.my Subject: X-Windows too Big!
Lastly I successful install the X-windows for my Linux box using
generic chip set or Oak's OTI067 (8 physical RAM is quite slow
though..). But the windows are too BIG. I tried modified its
XF86Config but it's not working (besides I really doesn't know how to
modified it correctly)
My box spec : processor: 486 DX2 60MHz.
RAM: 8 simm ram
Swap memory: 16 swap ram (I think so...)
memory: 256 Kbytes
RAMDAC: Generic 8-bit pseudo-color DAC (what it
mean ?)
Linux: Linux ver. 2.0.27 (Slackware 96)
monitor: SVGA monitor (SSVM's 220-240V-50MHz
500mA)
video card: Oak's OTI067
mouse: MS Mouse
Keyboard: 101-key
Can anybody help me with problem ? Thank in advance :-)
Ahyeop, Perak, Malaysia
_________________________________________________________________
Date: Wed, 25 Mar 1998 11:25:32 -0100
From: BoD, M39998@lazaro.info-ab.uclm.es
Subject: AGP card on Linux
I like to buy a AGP card based in the nVIDIA RIVA 128 chipset. Can i
use it on my Linux RH 5.0 system with Xfree86 3.3.1?
Thanks
_________________________________________________________________
Date: Thu, 26 Mar 1998 11:41:11 -0800 (PST)
From: Lee, cit@itl.net
Subject: Re: Linux Gazette
I've recently been hit by the superforker problem. Someone mentioned
that the LG had a script to fix the problem (by removing the
directories in /tmp) Do you have such a script? I haven't been able to
locate it, and I currently have a ton of directories in /tmp that rm
won't remove because the filename is too long.
Please respond quickly while I still have some hair left,
Lee//Cit
(Sorry, I don't remember all the articles we've had, but
superforker doesn't sound familiar. However, in issue 18 and 20,
Guy Geens has articles about cleaning up the /tmp directory.
Perhaps these will be of help to you. --Editor)
_________________________________________________________________
Date: Fri, 27 Mar 1998 09:06:39 +0100
From: javier ballesteros, uei0372195900@eurociber.es
Subject: modem for Linux
I'm a student of telecommunications in the University of Alcala de
Henares in Spain, my computer is a Pentium 233 MHz and I have
installed Red Hat Linux 5.0, all works properly , but I have a little
problem with my modem: Linux can't recognize my modem. My modem is a
HSP 336 DELUXE (I know that is very bad but is the only I have). So,
is there any possible to install properly my modem? , exist any driver
for this specific modem? .Please send me some information or any
advice, if you can I will be pleasant.
See you!....
_________________________________________________________________
General Mail
_________________________________________________________________
Date: Fri, 13 Mar 1998 00:39:33 -0700 (MST)
From: Michael J. Hammel, mjhammel@csn.net
Subject: Late Night Radio Buzz
I'm sitting here listening to C|Net radios coverage of Internet World.
Dan Shafer of Builder.com talked at length about how he (and someone
named Desmond) are going to do some serious investigation into what
alternative OS's there are - and specifically they are looking into
Linux. They mentioned Red Hat and Caldera, that there were lots of
applications available and how the Linux community are very much the
"just do it" community. All in all, very positive exposure.
Go to http://www.news.com/Radio/Features/0,155,154,0.html and click on
the 4:00 CNET Radio Late Update (where it says "Dan Shafer of
Builder.com: What's Hot?"). Its a RealAudio interview and you'll have
to go about 1/2 way through before they start the Linux discussion.
Dan Shafer said they would be writing up the Linux results they came
up with in the BuilderBuzz section of Builder.com
(http://builder.com). I just checked and there is nothing there yet -
I think he said it was going to start next week. Anyway, I sent him
email offering to assist in anyway I could. If I get a response I'll
try to get more details on where the info will be located when it
becomes available.
C|Net would be wonderful exposure for Linux.
Just thought I'd pass this along. Michael J. Hammel |
_________________________________________________________________
Date: Mon, 02 Mar 1998 23:22:14 +0500
From: Larry Taranenko, larry@partners.chel.su
Subject: Re: Linux Gazette #26
You know, we are here interesting in Linux too. But we have much
troubles with our unstable connection to the World - that is why I
maintained LG mirror in the heart (geographically we live in the
center of RUSSIA) of my country. And I have many many friends in my
town (apr. 2,5 mln city named Chelyabinsk) who are crazy about Linux
as I am. Mostly we use Debian. I like your publications - and think
that a little note somewhere there about Linuxoids in RUSSIA will be,
maybe, interesting to somebody. See in future.
I hope you understand me in right manner, against my silly English...
God bless you and Linus,
Have a nice day!
Ta-ta
(I think I understand you fine. Why don't you write up an article
for us about Linux in Russia? --Editor)
_________________________________________________________________
Date: Fri, 27 Mar 1998 03:49:43 -0500 (EST)
From: zaeb@8b28m2.net
Subject: about filedudes
hey, found this real fast download site www.filedudes.com, check it
out!
_________________________________________________________________
Date: Sat, 07 Mar 1998 22:51:10 -0800
From: Ken Leyba, kleyba@pacbell.net
Subject: $0.02 Tip
In issue 26 of the Linux Gazette there is a two cent tip that refers
to the VAX 3400/3300's as MIPS 3000 boxes. These are indeed VAX
processors as Digital (DEC) named MIPS boxes as DECStations/DECServers
and VAX boxes as VAXStations/VAXServers. I worked for Digital for over
10 years in Multi-Vendor Customer Services and currently use a VAX
3300 running Ultrix, DEC's BSD based Unix for the VAX CPU.
Ken Leyba
_________________________________________________________________
Date: Mon, 9 Mar 1998 17:09:28 -0500
From: Tunney, Sue (IDS), STunney@ahcpr.gov
Subject: Yes, Grammar does count
I was so pleased to read that *someone* else out there is as
aggravated as I am by the continual misuse of the apostrophe in web
pages and e-mails by obvious native-born American English speakers.
And for anyone who says, "What's the big deal? Doesn't everyone know
what I mean?", let this old fogey respond:
Does your computer understand what you mean when you make an error
writing code? Doesn't it matter then? If you can't write proper
English grammar and spell correctly, what makes you so sure that your
computer code is correct? And if you want to spread the good news
about Linux, it seems obvious that we will get more attention, and the
right kind, if we take the time to write properly. I'm often impressed
by how hard the "foreign" letter writers work to make their point
clear when they write to LG, often apologizing for their poor English;
yet they often do better than us "natives."
Mike, you are absolutely right, and I thank you for saying it. I would
also like to eliminate the so-called word "alot" as *there is no such
word* (but note that the next letter after Mike's used it. Oh,
well...) . If you can't drag out a dictionary, check it out on line;
there are lots of fine dictionaries out there.
_________________________________________________________________
Date: Thu, 12 Mar 1998 13:24:03 -0800
From: Rich Drewes, drewes@interstice.com
Subject: Linux market share (news tidbit)
I run an ISP that hosts a variety of customer-owned domains, most not
even specifically computer related. I recently did an analysis of the
agent_log files to find out how popular Linux really is as a client OS
for ordinary users who access the ordinary web pages. The results are
at:
http://www.interstice.com/~drewes/linuxcount/main.html
One interesting factoid: Linux now appears to be the #2 most popular
Unix OS client!
I enjoy the LG. Thanks for the work.
Rich
_________________________________________________________________
Date: Thu, 12 Mar 1998 21:38:36 -0500 (EST)
From: Tim Gray, timgray@lambdanet.com
Subject: Re: Getting Linux to the public...
Milton, thank you for your response (see Tips)... your's was the first
that was genuinely helpful, I have learned many things after posting
that letter to the Gazette, one of which is that the Linux user crowd
is not free of the type of person that enjoys flaming others, (I had
secretly hoped that Linux users were more helpful than resentful) But
thank you! It helps alot to fiddle with the settings and I was
successful in getting 2 friends converted to Linux, unfortunately
there are several colleagues that alas have monitors that are older
than dirt itself and cannot go beyond 640X480 :-) But you have helped
me migrate 2 windows users! thank you.. and thank you for your
supportive letter.
Tim.
_________________________________________________________________
Date: Sun, 29 Mar 1998 16:09:41 -0500
From: NYACC AnyNix SIG comm mgr, sigunix@bzsys.dyn.ml.org Subject: Re:
Getting Linux to the public...
Timothy D. Gray wrote regarding: Getting Linux to the public:
Has anyone noticed that when your friends see your neat-o Linux
system with the nice 17 inch monitor, high quality video card, and
fast computer that when they say, "Wow! that is nice, and you can
do almost anything on that!" you cringe with the fact that they are
going to want you to put it on their system?
I'm glad you have a 17inch monitor and "highquality" video card.
Myself, my 50-dollar video card and ten-year-old monitor let me run in
800x600 with 256 colors. I could get 1024x768 if the monitor allowed
it. I could get 64K colors (16-bit) if XFree86 allowed it. This is a
limitation not of the hardware, not exactly of Linux, but of the
XFree86 people who don't wish to take the trouble to support the
inexpensive cards on the market.
My present (Oak) card seems to be limited to 8-bit color in any event,
my other (Cirrus Logic) card will support 16-bit and 24-bit color,
which if fully supported would allow me 64K colors at 800x600 or 16M
colors at 640x480 (with a virtual 800x600 window).
The people at XFree86 (one of them a Cirrus employee) have, by their
own statement, chosen to spend their time on the latest and greatest
cards, with the older, cheaper cards going by the board.
I have tried and failed to get the necessary information from Cirrus
Logic to rewrite the XFree driver to better use the card.
Now mind you, I don't cringe on sharing the best O/S on the planet,
In fact I want everyone to use Linux. It's just that almost all X
windows software is written for 1024 X 768 or higher resolution
video screens and that 99% of those wanting to use Linux and X
windows only have a 14" monitor that can barely get past 640X480 at
256 colors.
See above. For a cost of no more than $50 they should be able to get a
1MB video card that will handle *much* better resolution.
I tried several times to get friends into Linux and X but to no
avail because the software developed for X is for those that have
Gobs of money for good video boards and humoungous monitors. It's
not a limitation of Linux or X, it that the software that is
developed for these platforms are by professionals or professional
users that can afford that new 21 inch monitor at the computer
store.
You might try pushing different programs. My main problem (except with
viewers for Adobe file formats) is getting *multiple* windows on the
screen at once. Also, certain *types* of applications, by their very
nature, demand lots of screen real estate. An application of that sort
is going to be cramped on a small screen *regardless* of underlying OS
support. I simply avoid such applications until I can acquire a larger
screen (about $500, locally).
We as a group might want to see software scaled back to the 640X480
crowd.. then Linux would take the world by storm.. Until then It's
going to be limited to us pioneers and Scientists...
Actually, the *biggest* barrier to using Linux X Apps is that so many
of them are written using Motif! That's almost as bad as WinDoze.
--Buz Cory :)
_________________________________________________________________
Published in Linux Gazette Issue 27, April 1998
_________________________________________________________________
[ TABLE OF CONTENTS ] [ FRONT PAGE ] Next
This page written and maintained by the Editor of Linux Gazette,
gazette@ssc.com
Copyright © 1998 Specialized Systems Consultants, Inc.
"Linux Gazette...making Linux just a little more fun!"
_________________________________________________________________
More 2¢ Tips!
Send Linux Tips and Tricks to gazette@ssc.com
_________________________________________________________________
Contents:
* Re: Help Wanted LaserJet 4L
* StarOffice 4/Ghostscript
* Linux and VAX 3400 and 3300
* xdm with Pictures
* Re: Help-Installing Linux on a FAT32
* Regarding Easter Eggs in Netscape etc.
* Re: Changing XDM windows
* Nice xdm and Linux PPC
* Re: Help with Sound Card
* Modline for TV
* mpack 2 cent tip
* shutdown and root
* Perl Script 2 cent tip
* RE: my dual pentium
* RE: Changing XDM windows
* RE: HELP-Installing Linux on a FAT32 Drive
* Re: Apache SSL extensions...
* Reply to locate tip (LG 26)
* Re: Getting Linux to the public...
* My 2-cents on W95/Linux coexistence
* 2-cent tips in LG 26: core dumps
* Perl Script 2C Tip
* rxvt 0.02$ tip
* Tiny patch to ifconfig
* Re: Wanting HELP!
* Re: Help Wanted (usershell on console without logging in)
* 2 cent tip followup -- X
* locate patch
* locate subdirectories
_________________________________________________________________
RE: Help Wanted - LaserJet 4L
Date: Mon, 2 Mar 1998 14:38:43 -0500
From: Shane_McLaughlin@stream.com
To: John.H.Gorman@MCI.Com
Re: font sizes + points, Linux Gazette #26 I had a similar problem
with an old Deskjet under SunOS and was supplied with the following
info by HP support Europe. It applies to DOS but should be applicable
to any Un*x system as well These are printer instruction generation
wizards URLs
* FOR PCL3 got to (DeskJets):
http://www.hp.com/cpso-support/deskjet/tools/pcl3.html
* FOR PCL5 got to (LaserJets):
http://www.hp.com/cpso-support/PrinterLanguage/pclwiz.html
* FOR PJL go to (printer job language - like a batch language):
http://www.hp.com/cpso-support/PrinterLanguage/pjlwiz.html
* Try checking entries on Horizontal Motion Index and Vertical
Motion Index (HMI + VMI) - that might be what you want.
I saw a posting in C.O.L.A. a few months back that someone has already
done the tough work and has programmed some mostly-complete PCL 3+ 5
drivers for Linux If all else fails, HP DOS drivers exist that can
customise point sizes + fonts and save them permanently to printer
memory (5Si's do, i don't know about 4Ls) If you don't have a DOS
partition maybe DOSEMU? Good Luck!
Shane McLaughlin
_________________________________________________________________
2c tip (StarOffice 4 / Ghostscript)
Date: Mon, 2 Mar 1998 18:48:51 -0500 (EST)
From: Fraser McCrossan, fraserm@gtn.net
I've just started using the excellent Star Office 4.0 (free for
personal use - go get it now!), but have noticed that when using
Ghostscript to filter its print output on my non-Postscript printer,
the results were not quite as they appeared on the screen.
I reasoned that this might be because the fonts supplied with SO
didn't quite match those supplied with Ghostscript. However, the SO
fonts are Type 1 Postscript fonts... which Ghostscript can use. To
make Ghostscript use them, you need to link them to its home
directory. For example, if your SO is installed in
/home/fraser/Office40, change to the Ghostscript font (normally
/usr/local/share/ghostscript/fonts) directory, and do the following:
ln -s /home/fraser/Office40/fonts/type1/*.pf[ab] .
mv Fontmap Fontmap.hide
For some reason, when I tried to add the new fonts to Fontmap in the
same format as the existing fonts, GS would crash, hence hiding it.
I'm not a GS guru... perhaps someone else can explain why. However, GS
works just fine without Fontmap for me, although it probably takes
longer to start up - and everything I print looks just like the
screen.
--Fraser
_________________________________________________________________
RE: Linux and VAX 3400 and 3300
Date: Mon, 02 Mar 1998 20:34:55 -0500
From: RC Pavlicek, pavlicek@radc17.cop.dec.com
The March issue of the Gazette includes the following under 2 Cent
Tips: <<I have just purchased a MicroVAX 3400 and 3300. I would like
to put <<Linux on these two systems. Can you provide any help in this
aspect.
<I believe those are MIPS 3000 boxes, try the Linux VAX Port Homepage
at >http://ucnet.canberra.edu.au/~mikal/vaxlinux/home.html <and the
Linux/MIPS project at http://lena.fnet.fr/
Anything with "VAX" in its name is just that -- a VAX. Digital made
MIPS boxes once upon a time, but they never used the VAX/MicroVAX
name. Most of Digital's MIPS boxes were sold under the DECstation or
DECsystem name.
The pointer to the VAX/Linux effort is the best one I know about, but
the whole VAX/Linux project was not even close to producing usable
code last time I checked. NetBSD, if it works on these boxes, may be
your best bet.
-- Russell C. Pavlicek
[speaking for himself, not for Digital Equipment Corporation]
_________________________________________________________________
xdm with pictures
Date: Thu, 05 Mar 1998 10:34:43 -0000 (GMT)
From: Caolan McNamara, Caolan.McNamara@ul.ie
Can I change the XDM login window/screen? I have a cool house logo
so i want to use it in my own Home Network. And at my school they
want to know to so. Is it possible. If yes, how? If no, WHY NOT? --
Jeroen Bulters, The netherlands
you could try xdm3d_xpm, which allows a picture in the xdm box, which
is 3d with shadows and stuff,one version is at
ftp://brain.sel.cam.ac.uk/users/mbm/xdm3d (probably the latest) theres
another (older) at http://oak.ece.ul.ie/~griffini/software.html
_________________________________________________________________
Re: HELP-Installing Linux on a FAT32 Drive Date: Thu, 05 Mar 1998 11:35:42
-0000 (GMT)
From: Caolan McNamara, Caolan.McNamara@ul.ie
I'm interested in installing linux on a machine I built recently,
but when I installed Win95(b), I idiotically opted to format the
drive using FAT32, which in a 95-only environment is great, but
Linux can't read it for greek. I've looked around for utilities to
effectively un-FAT32 the drive, which I will then partition with
Partition Magic to use the freespace as a native ext2 partition,
etc., but am having little luck. Reformating is a disheartening
prospect I would rather not face, but am fully prepared to do so if
I don't find any help here. --nate daiger
Well partition magic 3 can repartition fat32 without hassle, and there
exists a patch for linux kernel to understand fat32 at
http://bmrc.berkeley.edu/people/chaffee/fat32.html which also lists a
version of fips which also should understand fat32, to resize your
drive.
_________________________________________________________________
Regarding "Easter Eggs" in Netscape etc.
Date: Thu, 5 Mar 1998 23:21:20 +0000 (GMT)
From: John Pelan, johnp@am.qub.ac.uk
The on-going 2 cent tips about the hidden "Easter Eggs" in Netscape is
interesting. However rather than continually listing them it might be
more fruitful to learn how one can try to discover them for oneself.
One useful tool in particular, is the oft neglected 'strings' command.
This will locate printable strings in an arbitrary file and display
them. So one can do something like;
prompt% strings /usr/lib/netscape/netscape-navigator
which will reveal all the embedded strings in that binary. You might
like to redirect the output to a file for analysis. As many of the
strings will be rubbish (i.e. 'random' sequences of printable
characters) one can always use grep, awk, Perl etc. to help filter
in/out particular patterns.
In the case of Netscape, only a tiny set of the strings will
correspond to "Easter Eggs" (not all of them will be immediately
obvious either) and locating them is left as an exercise to the
reader...
_________________________________________________________________
Re: Changing XDM windows
Date: Fri, 06 Mar 1998 12:16:02 +1200
From: Craige McWhirter, craige@magna.com.au
From: Jeroen Bulters, jbulters@scoutnet.nl
Can I change the XDM login window/screen? I have a cool house logo
so i want to use it in my own Home Network. And at my school they
want to know to so. Is it possible. If yes, how? If no, WHY NOT.
Try this web site below. It had everything I needed to customise my
XDM login.
http://torment.ntr.net/xdm/
_________________________________________________________________
Nice xdm and Linux PPC Date: Fri, 06 Mar 1998 09:09:48 -0500
From: Serge Droz, droz@physics.uoguelph.ca
just a quick comment on two letters in the Linux Gazette #26
(http://www.linuxgazette.com/issue26/lg_mail26.html)
1. Changing XDM windows: Check out
http://jovian.physics.uoguelph.ca/~droz/uni/xdm3d.html for a
replacement (This version comes with pam support). This version
runs fine on our Redhat systems (Intel & PPC).
2. New direction: Linux is beeing ported to the PPC chip. See
http://www.linuxppc.org for more info, downloads CD's T-shirts....
It actually runs quite stable on my PPC.
Cheers, Serge
_________________________________________________________________
Re: Help with Sound Card
Date: Fri, 6 Mar 1998 20:32:13 +0100 (MET)
From: Roland Smith, rsmit06@ibm.net
According to the Sound-HOWTO:
"MV Jaz16 and ESS688/1688 based cards generally work with the
SoundBlaster driver"
To get a PnP card to work, you need to configure it first. There are
two ways of doing that:
1. boot into DOS, use the card's DOS-based initialization program,
then do a warm boot to Linux
2. compile sound support as a module, and use isapnp from the
isapnptools package to initialize the card, after which you can
insert the sound module.
The isapnptools package can be found at
ftp://ftp.demon.co.uk/pub/unix/linux/utils
Regards, Roland
_________________________________________________________________
Modline for TV
Date: Sun, 8 Mar 1998 13:11:37 +0100 (MET)
From: friedhelm.mehnert@gmx.net
I have shamelessly stolen this from USENET, because I feel this
excellent information should appear within the Linux Gazette.
I hope the original author don't mind. :-)
From: Rob van der Putten
Date: Sun, 8 Mar 1998 00:14:15 +0100
Hopefully you won't need this, but if you ever want to display X on
a big screen and a TV is the only big screen around you might want
to use this.
A TV with a RGB SCART input is nothing more than a fixed sync
monitor with a rather low picture quality. This means that you can
make a TV compatible signal with a plain vanilla cheapo VGA card.
For the european 625 line (575 visable lines) TV standard a
modeline looks like this: Modeline "736x575i" 14.16 736 760 824 904
575 580 585 625 interlace -hsync -vsync
Officially the horizontal resolution is 767 (4 / 3 * 575) pixels
with a clock of 14.76 MHz. However, since the clock used is 14.16
MHz, I reduced the horizontal values proportional to 14.16 / 14.76
(and rounded them to the nearest multiple of 8).
If you want to make a 640x480 screen with a black border you can
you use this line: Modeline "640x480i" 14.16 640 712 776 904 480
532 537 625 interlace -hsync -vsync
You can center it by altering the 2nd and 3rd horizontal and
vertical values (this example shifts the picture to the left):
Modeline "640x480i" 14.16 640 728 792 904 480 532 537 625 interlace
-hsync -vsync
You can make a non interlaced signal with this modeline: Modeline
"736x288" 14.16 736 760 824 904 288 290 292 312 -hsync -vsync
The VGA RGB signals are compatible with the scart bus, the sync
signals are not. You have to create a composit sync signal of 0.3
... 0.5 Vpp. The cirquit below acts both as a AND gate and a level
translator. It doesn't need a power supply and can be mounted
inside a VGA plug:
-VS ------------------------+
|
|
| /
+-----+ |/
-HS --+ 3k3 +-----*-----| BC 548 B
+-----+ | |\
| | \|
| -| +-----+
| *-----+ 68 +----- -CS 0.3 Vpp
| | +-----+
+++ +++
| | | |
| | | |
+++ +++
| |
GND --------------*---------*----------------- GND
1k2 820
You can use any general purpose low frequent low power NPN
transistor instead of the BC 548 B
Regards, Rob
_________________________________________________________________
mpack 2 cent tip
Date: Mon, 9 Mar 1998 11:17:47 +0100 (MET)
From: J.I.vanHemert, jvhemert@wi.leidenuniv.nl
I response to the 2 cent tip of Ivan Griffin, I am sending a two cent
tip of my own.
Ivan send in a script that can be used to mail Micro$oft users. I
would like to mention the package 'mpack', this program is very handy
if you want to send out some mime-encoded mail. Furthermore the
package also contains 'munpack' which does the obvious thing.
Mpack can be found on ftp.andrew.cmu.edu in the directory pub/mpack,
in the archive mpack-1.5.tar.gz
Cheer, Jano
_________________________________________________________________
shutdown and root
Date: Mon, 9 Mar 1998 13:10:55 +0100
From: Guido Socher, eedgus@eed.ericsson.se
I noticed that many people still login as root before they power down
their system in order to run the command 'shutdown -h now'. This is
really not necessary and it may cause problems if everybody working on
a machine knows the root password.
Most Linux distributions are configured to reboot if ctrl-alt-delete
is pressed, but this can be changed to run 'shutdown -h now'. Edit
your /etc/inittab and change the line that starts with ca:
# Trap CTRL-ALT-DELETE
# original line would reboot:
#ca::ctrlaltdel:/sbin/shutdown -t3 -r now
# now halt the system after shutdown:
ca::ctrlaltdel:/sbin/shutdown -t3 -h now
#
Now you can just press crtl-alt-delete as normal user and your system
comes down clean and halts.
_________________________________________________________________
Perl Script 2 cent tip (maybe even a nickel)
Date: Mon, 09 Mar 1998 18:37:20 -0500
From: Allan Peda, allan@interport.net
When I was putting my network card in my Linux box, I wanted to keep
the soundblaster, but the addresses are not easy to read (for me) in
hex. Even if there were in decimal, I figured a plot of the areas that
appear open would be useful. So I hacked together a little perl script
to do just that, Usage: addreses.pl addr.txt > outputfile.txt
Of course it goes to stdout without a redirected file. The input file
is constructed with one line for each address:
base_address TAB upper_address TAB :Description
Here's a little perl script that I wrote to help me identify
conflicting addreses:
# address.pl v 0.1
# Allan Peda
# allan@interport.net
#
# How to use: Prepare a file based on the format of the sample at
# the end of this script.
# This script will plot a servicable chart of the addresses in use,
# with the gaps plainly apparant.
#
$debug = 1;
$min_addr=0;
$max_addr=0;
for ($i=1; <:>; $i++) {
/^(\w+)\s/; $$memory[$i]{base_addr}=$1; # base address
/^\w+\s+(\w+)\s/; $$memory[$i]{upper_addr}=$1; # upper address
/\:(.+)$/; $$memory[$i]{addr_descrip} = $1; # description of addres
s
$ttl_num_addresses = $i;
print "$i\t $$memory[$i]{base_addr} \t" if $debug;
print hex($$memory[$i]{base_addr}),"\t-->\t" if $debug;
print " $$memory[$i]{upper_addr}\t" if $debug;
print hex($$memory[$i]{upper_addr}),"\t" if $debug;
print "$$memory[$i]{addr_descrip}\n" if $debug;
if (( hex($$memory[$i]{base_addr}) < hex($min_addr) ) || $i hex($max_ad
dr) ) || $i ", $addr;
for ($i=1; $i = $addr))){
print "*** ";
if (( hex($$memory[$i]{base_addr}) == $addr )) {
print "$$memory[$i]{addr_descrip}";
}
}
}
}
# sample file address.txt follows:
__END__
0x1F0 0x1f8 :Hard disk drive
0x200 0x207 :Game I/O
0x278 0x27f :Parallel Port 2 (LPT2)
0x2e8 0x2ef :serial port, com4
0x300 0x31f :Prototype / Network PCB
0x360 0x363 :PC Network (Low address)
0x368 0x36B :PC Network (High address)
0x378 0x37f :Parallel Port 1 (LPT1)
0x380 0x38f :SDLC, Bisync
0x3a0 0x3bf :MDA / prn adapter (hercules)
0x3c0 0x3cf :EGA/VGA
0x3d0 0x3df :CGA/MDA/MCGA
0x3e8 0x3ef :Diskette controller
0x3fb 0x3ff :serial port 1 - com 1
The input file looks like this (typically):
0x1F0 0x1f8 :Hard disk drive
0x200 0x207 :Game I/O
0x278 0x27f :Parallel Port 2 (LPT2)
0x2e8 0x2ef :serial port, com4
0x300 0x31f :Prototype / Network PCB
0x360 0x363 :PC Network (Low address)
0x368 0x36B :PC Network (High address)
0x378 0x37f :Parallel Port 1 (LPT1)
0x380 0x38f :SDLC, Bisync
0x3a0 0x3bf :MDA / prn adapter (hercules)
0x3c0 0x3cf :EGA/VGA
0x3d0 0x3df :CGA/MDA/MCGA
0x3e8 0x3ef :Diskette controller
0x3fb 0x3ff :serial port 1 - com 1
_________________________________________________________________
RE: my dual pentium
Date: Mon, 09 Mar 1998 10:29:24 -0700
From: James Gilb, p27451@email.sps.mot.com
My guess is that the default Caldera kernel does not have multiple
CPU's enabled. You will probably have to recompile your kernel to
enable SMP. Some kernel versions (even the 2.0.xx) are less stable for
SMP than others, unfortunately I can't give you any help on which
version to choose. However, you may want to join the Linux-SMP mailing
list, email majordomo@vger.rutgers.edu with the text 'subscribe
linux-smp' to join the list. An archive is maintained at Linux HQ
(http://www.linuxhq.com/lnxlists/linux-smp/), so you may want to look
there first before you ask on the mailing list. The May 1997 Caldera
newsletter has the following information (a little out of date):
Linux? When will SMP be fully supported?
The Linux 2.x kernel with full SMP support is currently in beta, and
will most likely be included in the next stable release of the kernel.
The Linux 2.0.25 and 2.0.29 kernels which ship in OpenLinux 1.0 and
1.1 products can reside and are tolerant of an SMP environment, but
will not perform load balancing.
To enable SMP, the OpenLinux 1.2 FAQ
(http://www.caldera.com/tech-ref/col-1.2/faq/faq-5.html) has the
following suggestions:
5.4 How to enable SMP (multiple processor) support:
To enable SMP (multiple processor) support in OpenLinux, you must do
three things:
1. Go to "/usr/src/linux" and uncomment the "SMP = 1" line in the
Makefile (to uncomment this line, remove the preceeding "#").
2. Follow the instructions in Rebuilding the Linux Kernel for Caldera
OpenLinux 1.2
(http://www.caldera.com/tech-ref/docs/COL12-Kernel-Rebuild.html)
and during the 'make config' step be sure to enable "Real-time
clock support". Then recompile your kernel using the remainder of
the steps.
3. Reboot your system.
Currently there is no method for monitoring how much of each processor
is being used, but if you run the "top" utility you will most likely
see processes that are using more than 100% of a processor; whatever
is above the 100% mark is being done with the other processors. Also,
to determine if both processors have been detected and are in use, you
can cat the "/proc/cpuinfo" file for a report of what processors are
recognized by Linux; if there's more than one listed, you are running
with SMP support.
Some sources for information on SMP are:
http://www.caldera.com/LDP/HOWTO/Parallel-Processing-HOWTO-2.html
(or any other LDP site)
http://www.linux.org.uk/SMP/title.html
http://www.uruk.org/~erich/mps-linux-status.html
(These pages haven't been updated in a while)
If after reading the above information, you still have questions, you
might email Caldera's technical support (assuming you purchased your
distribution from them and registered it.) I have had good luck with
their technical support, but read the FAQ's first.
BTW: I found most of the above information by going to Caldera's web
page and typing SMP in the search box. Thanks Caldera for the web
site.
James P. K. Gilb
_________________________________________________________________
RE: Changing XDM windows
Date: Mon, 09 Mar 1998 11:20:33 -0700
From: James Gilb, p27451@email.sps.mot.com
Jeroen, there a three ways that I know for sure to customize your
login screen.
1. Get XDM-photo from
ftp://tsx-11.mit.edu/pub/linux/sources/usr.bin.X11/xdm-photo-1.1.t
ar.gz
2. Use XBanner, which can do some really terrific things with you
login screen. If you want a login screen that is the envy of you
neighbors, you need XBanner. The URL for XBanner is:
http://chaos.fullerton.edu/XBanner
3. Use Xdm3d/XPM - from http://oak.ece.ul.ie/~griffini/software.html,
get the sources and put your own XPM in, although the default
penguin is pretty cool.
-- James Gilb
_________________________________________________________________
RE: HELP-Installing Linux on a FAT32 Drive
Date: Mon, 09 Mar 1998 11:24:56 -0700
From: James Gilb, p27451@email.sps.mot.com
Nate, there is a patch to allow FAT32 support in the Linux kernel so
you can mount the OSR2 drives and even run a umsdos type installation.
The web page for the patches is:
http://bmrc.berkeley.edu/people/chaffee/fat32.html
-- James Gilb
_________________________________________________________________
Re: Apache SSL extensions...
Date: Wed, 11 Mar 1998 02:45:06 -0800
From: G-man, gman@infinex.com
I've put up a web page on how to setup apache-ssl Check out
http://www.linuxrox.com/WebServer.html .. Also have examples of how
the httpd.conf should look like to run secure and non-secure web
server using apache-ssl..
Hope that helps..
_________________________________________________________________
Reply to locate tip (LG 26)
Date: Wed, 11 Mar 1998 19:37:47 -0500 (EST)
From: Brett Viren, bviren@ale.physics.sunysb.edu
About the problem of `locate' (2c tip #2 LG #26) showing files that
normal users can't access: If this happens, it is not a bug with
`locate' but rather with the Linux distribution (or the way locate and
friends have been installed by hand). `Locate' should be allowed to
print any and all matching file that are in the database it is pointed
to. However, in the case of the database for general system, it is a
security bug (IMO) if the database includes non-world-readable files.
Here is were the problem lies.
Debian Linux handles this by running `updatedb' (the program which
actually makes the `locate' data base) from /etc/cron.daily/find via:
cd / && updatedb --localuser=nobody 2>/dev/null
This is also a tad easier than patching/recompiling. Anyways, there is
my 2cents.
-Brett.
_________________________________________________________________
Re: Getting Linux to the public...
Date: Thu, 12 Mar 1998 17:19:59 -0500
From: Milton L. Hankins {64892}, mlh@swl.msd.ray.com
(This is in response to the article posted in General Mail, Linux
Gazette, Issue 26, March 1998.)
Although I can't speak for developers "that have Gobs of money for
good video boards and [humongous] monitors," I can share a few things
with you about my experiences with XFree86. I have run it successfully
with on a 14 inch monitor, using the standard SVGA X server on a
486-75MHz with a Cirrus video card. It took quite a bit of fiddling,
but I eventually figured out how to get it to run in 800x600 mode, and
then in 1024x768 interlaced.
A lot of it was just meddling with the XFree86 configuration file
directly, hoping that I wouldn't blow my monitor up. There are tools
today (like Metro-X) that make this process a fair bit easier.
One thing you might not realize is that the XFree86 config (last I
remember) sometimes chooses 640x480 mode on startup, when it actually
supports more modes. Try pressing Ctrl-Alt-Keypad+ to change the
resolution while running X.
Monitor size is another matter. I recall one application that liked to
size itself bigger than my screen. There are a couple ways around
this.
The first is the -geometry flag, available to most X applications. If
you want to try it, the xterm, xeyes, and xbiff programs all support
it. The most basic format is:
-geometry =<width>x<height>+<x>+<y>:
Replace <width> and <height> with the desired width and height of the
window, respectively. Sometimes width and height refer to characters,
and sometimes they refer to pixels. Your mileage may vary. <x> and <y>
refer to the pixel coordinates of the new window's upper left corner.
If you want, you can leave out the first half (default size) or the
second half (default location). Sometimes you can leave off the equals
sign, too.
Some examples: "-geometry 800x600+0+0" will place an 800x600 window in
the upper left corner of the screen. "-geometry 400x300+200+150" will
place a 400x300 window in the center of an 800x600 display.
You can write shell aliases to run these programs with a default size.
A cleaner way is to put geometry specifications in your .Xresources
file. Usually this is of the form <programName>*geometry:
<width>x<height>+<x>+<y>
Here are some examples:
XEyes*geometry: +1060+40
plan*geometry: +10+10
Netscape.Navigator.geometry: =336x425
Netscape.Mail.geometry: =300x400
Netscape.News.geometry: =300x400
Netscape.Composition.geometry: =350x350
You may also want to adjust the fonts for your program, especially if
it doesn't support the -geometry flag nor X resource.
I, too, feel that Linux is not ready for the public because of its
comparatively steeper learning curve. But it's gotten a lot better
over the years, thanks to the Linux community. Keep up the good work,
everyone!
Milton L. Hankins (no known relation to Greg)
_________________________________________________________________
My 2-cents on W95/Linux coexistence
Date: Tue, 17 Mar 1998 17:56:16 -0500
From: Carl Helmers, carl@helmers.com
Re W95 and Linux: With hard disks crashing in price (hopefully not the
heads), here is the strategy I used for this problem of getting W95
and Linux on the same machine at the end of 1997: On one of my
personal desktop machines, I had excellent results using a product
called "System Commander" -- this product has a Linux-savvy manual
which explains all the details one needs. The machine in question is a
generic Pentium-133 with 32mb memory, a 2GB EIDE drive and a S3 Virge
based graphic card. After I got the machine in 1997 I added a
removable 2GB EIDE drive in a DataPort drive frame/cartridge setup for
testing various Linux versions, keeping the original W95 that came
with the machine in the first drive.
Once I installed System Commander I set up the default boot choice on
the P133 desktop machine to be (of course) Linux on the second hard
drive, where I currently have X installed. I use this machine (running
Emacs and a bunch of handy macros) to keep my update log while
installing new Linices on my other machines (a Dell Latitude LM Laptop
[P133 40mb] with an alternate 2GB hard drive for Linux, and a Cyrix
6X86-166 clone on the desktop next to the P133.
My first attempt at a W95/Linux combination was on that Cyrix clone --
whose W95 seems to have re-written the fundamental hard disk sector
map of the second (but different model number, same capacity) Western
Digital drive on which I installed Linux through getting a working X
display -- before closing down and rebooting with LILO. After that
disaster, I just said the heck with W95 and reformatted the 2GB hard
disk as the primary Linux disk, with the second disk in its DataPort
removable frame retained as an additional file storage region. In my
30 years of using computers since high school in 1966, I have
developed the habit of always keeping a detailed log when doing
anything I might want to reproduce -- such as installing a Linux
release. That way, if I make a mistake I can try again, changing some
critical detail or other. I started the habit with pencil and spiral
paper notebooks. These days, I use a second computer system sitting on
the same desktop running emacs under XFree86 with my custom macros to
speed up entry -- but the principle is the same.
In the System Commander desktop machine, I set W95 as a second boot
option, and the third option for booting from floppy using the Linux
installation boot diskettes. I still useW95 [perish the thought] for
one or two commercial Wintel programs I like which do not have a Linux
work-alike, and to try out new software packages.
Carl Helmers
_________________________________________________________________
2-cent tips in LG 26: core dumps (Marty Leisner)
Date: Tue, 17 Mar 1998 19:45:48 +0100
From: Christoph L. Spiel, Christoph_Spiel@physik.tu-muenchen.de
I was annoyed by "file", too. Under several other unices "file" can be
used to identify a core dump. Marty's tip is just fine. You don't have
to write any script or other stuff.
I used "gdb" to find out where a "core"-file came from. As a wrapper
around it, I wrote "idcore". It has the advantage of displaying only
relevant information, i.e., the name of the binary causing the
core-dump. This way it can by used, e.g., in cron jobs to notify
users. The verbosity of idcore is controlled with the
--brief
and
--long
options.
I'd like to paste some sample output here, but neither can I find a
core dump on my machine, nor do I know a program that generates one.
(This is not a devine linux-box, I have thrown out most instable
binaries ;-)
Here comes "idcore":
#!/bin/sh
# name: idcore -- identify which binary caused a core dump
# author: c.l.s. (cspiel@physik.tu-muenchen.de)
# last rev.: 1998-01-22 11:14
# bash ver.: 1.14.7(1)
# $Id: issue27.txt,v 1.2 2003/02/03 21:50:19 lg Exp $
# display help message
# char* disp_help(void)
function disp_help
{
echo "usage:"
echo " idcore [OPTION] [[COREDUMP] ...]"
echo
echo " If COREDUMP is omitted the core file in the current"
echo " directory is used."
echo
echo " -h, --help display this help message"
echo " -v, --version show version of idcore"
echo " -b, --brief brief format, i.e. filename only"
echo " -l, --long long format, with filename, signal, user,"
echo " date, and backtrace"
}
# retrieve name binary that caused core dump via gdb
# char* get_name(const char* mode, const char* name)
function get_name
{
case "$1" in
brief)
echo q | gdb --quiet --core="$2" 2>&1 | head -1 | \
sed -ne "s/^.*\`\(.*\)'\.$/\1/p"
;;
standard)
echo q | gdb --quiet --core="$2" 2>&1 | head -2
;;
long)
dump=$(echo -e "where\nq" | \
gdb --quiet --core="$2" 2>&1)
echo "$dump" | head -2 | sed -ne '2,2s/\.$//p'
ls -l "$2" | \
awk '{ print "on", $6, $7, $8, "caused by", $3 }'
echo
echo "backtrace:"
echo "$dump" | sed -ne '/^(gdb) /s/^(gdb) //p'
;;
esac
}
#
# start of main
#
myname=$(basename "$0") # name of shell-script
mode=standard # normal mode of operation
case "$1" in
-h | --help)
disp_help
exit 1
;;
-v | --version)
echo "version 0.1.0"
exit 0
;;
-b | --brief)
mode=brief
shift
;;
-l | --long)
mode=long
shift
;;
-* | --*)
echo "$myname: unknown option $1"
exit 2
;;
esac
if [ -z "$1" ]; then
# no argument -> look at core in the current directory
get_name "$mode" core
else
# process all arguments
for c; do
# echo file we are processing
if [ "$mode" != "brief" ]; then
echo "$c: "
fi
get_name "$mode" "$c"
done
fi
exit 0
_________________________________________________________________
Perl Script 2C Tip
Date: Mon, 16 Mar 1998 15:46:25 +0000
From: Mark Hood, mark.hood@deep-thought.ericsson.se
After seeing the "Keeping Track of Tips" suggestion in your October
issue, I thought it might be worth contributing this perl script which
I use in a similar way. I have a user called 'info' and he has a
.forward file consisting of the following line:
"| /home/info/mail2web"
In the user's public_html folder, I created a file called index.html:
<HTML><HEAD><TITLE>Information Archive</TITLE></HEAD>
<BODY>
<TABLE>
<TR><TH>Subject</TH><TH>Date</TH><TH>From</TH></TR>
<!-- Add after here -->
</TABLE>
</BODY>
</HTML>
This allows me to simply mail directly to this user, and the tip is
instantly stored on the web page - no need for cron jobs or external C
programs to split the mail up.
This file is provided for free use, feel free to distribute or alter
it in any way. Note that there is no warranty - it works for me, but
that's all I can say. In particular, I can't promise there are no
security holes in it (it never calls 'exec', so it's unlikely a
cracker can subvert it on your machine - and it's certainly no more
dangerous than a shell script run by cron).
Enjoy! Mark Hood
----- Cut here and save as mail2web -----
#!/usr/local/bin/perl
#
# mail2web (C) 1998 Mark A. Hood (mark.hood@usa.net)
#
# Takes a file (piped through it, eg. from a .forward file)
# And bungs it in a Web page.
# We have two html files:
# $index is the index file
# $stem is the base name of the information files - the date & time
# are appended to make it unique.
#
# The index file must exist and look like this (without the leading #
signs)
# The important bit is the comment - this script
# uses that to know where to put the new data...
#
# <HTML><HEAD><TITLE>Information Archive</TITLE></HEAD>
# <BODY>
# <TABLE>
# <TR><TH>Subject</TH><TH>Date</TH><TH>From</TH></TR>
# <!-- Add after here -->
# </TABLE>
# </BODY>
# </HTML>
# Variables - change these to match your system
$index = "/home/info/public_html/index.html";
$stem = "/home/info/public_html/";
# Nothing below this line should need changing
# Define the time and date
($sec,$min,$hour,$mday,$mon,$syear,$wday,$yday,$isdst) = localtime;
$year = 1900 + $syear;
# Add the time and date to the end of the filestem
$stem = sprintf ("%s%02d%02d%02d%02d%02d%02d.html",
$stem, $year, $mon, $mday, $hour, $min, $sec);
# Open the new file
open ( OUTFILE, ">$stem") ;
# Write the HTML header
print OUTFILE "<HTML><HEAD><TITLE>\n";
$printing = 0;
$from = "nobody";
$date = "never";
$title = "Untitled";
while ($line = <>) {
if ($line =~ s/^From: (.*)$/$1/g) { # Sender
$from = $line;
} elsif ($line =~ s/^Date: (.*)$/$1/g) { # Date
$date = $line;
} elsif ($line =~ s/^Subject: (.*)$/$1/g) { # Subject
$title = $line;
print OUTFILE $title;
print OUTFILE "</TITLE><BODY><PRE>";
} elsif ($line =~ /^$/ && $printing == 0) { # End of headers
$printing = 1; # Show the info.
print OUTFILE "From: " . $from;
print OUTFILE "Date: " . $date;
print OUTFILE "Subject: " . $title . "\n";
}
$line =~ s/\</\<\;/g; # Mask out
specials
$line =~ s/\>/\>\;/g;
if ($printing) {
print OUTFILE $line;
}
}
print OUTFILE "</PRE></BODY></HTML>"; # Finish the
HTML
close OUTFILE; # Close the file
$newfile = sprintf("%s.new", $index); # Backups
$oldfile = sprintf("%s.old", $index);
open ( INFILE, "$index");
while ($line = <INFILE>) {
if ($line =~ /^\<\!-- Add after here --\>/ ) { # Our marker
print OUTFILE "<TR><TD>";
print OUTFILE "<A HREF=\"" . $stem . "\">";
print OUTFILE $title . "</A></TD>";
print OUTFILE "<TD>" . $date . "</TD>";
print OUTFILE "<TD>" . $from . "</TD></TR>\n";
}
print OUTFILE $line;
}
rename ($index, $oldfile); # Backup the
current
rename ($newfile, $index); # Move the new
one
----- Cut here ----- Cut here ----- Cut here ----- Cut here -----
_________________________________________________________________
rxvt 0.02$ tip
Date: Sun, 15 Mar 1998 17:21:26 -0500 (EST)
From: John Eikenberry [MSAI], jae@ai.uga.edu
Recently I hacked together a little shell script for some friends of
mine that I thought others might find of interest. It allows you to
run rxvt with a random pixmap put in the background. The random pixmap
is taken from a directory, thus no hard coding of pixmap names in the
shell script.
Well, here it is... oh, this is using bash btw...
----start----
#!/bin/sh
run_rxvt ()
{
shift $((RANDOM%$#))
exec rxvt -pixmap ~/.pixmaps/$1
}
run_rxvt `ls ~/.pixmaps/`
_________________________________________________________________
Tiny patch to ifconfig
Date: Fri, 06 Feb 1998 23:12:02 -0600
From: John Corey, kunglao@prairienet.org
I've often wondered just how much data I've transmitted through my
network. After a little research, I found that the ifconfig program
just simply does not display this bit of information in it's results.
So, I've fixed that problem.
To install, first get the sources from your favorite sunsite mirror.
The file to look for is net-tools-1.432.tar.gz. I found it at
ftp://ftp.cc.gatech.edu/pub/linux/distributions/slackware/source/n/tcp
ip/net-tools-1.432.tar.gz
Unpack those sources, apply the patch with patch < ifconfig.diff, and
compile. I only modify the ifconfig program, so just simply backup
your existing binary, then install the newly compiled one (assuming
you already have this version of net-tools installed). Here is an
example of the new output:
eth0 Link encap:Ethernet HWaddr 00:40:F6:A4:8E:73
inet addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:99773 errors:0 dropped:0 overruns:0 frame:0
TX packets:91834 errors:0 dropped:0 overruns:0 carrier:0
coll:6
RX bytes: 20752805 (19.7 Mb) TX bytes: 27982763 (26.6 Mb)
Interrupt:9 Base address:0x280
Content-Type: text/plain; charset=us-ascii; name="ifconfig.diff"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline; filename="ifconfig.diff"
diff -c -r net-tools/ifconfig.c net-tools-patched/ifconfig.c
*** net-tools/ifconfig.c Tue Sep 23 15:05:24 1997
--- net-tools-patched/ifconfig.c Fri Feb 6 15:54:51 1998
***************
*** 190,195 ****
--- 190,196 ----
static void
ife_print(struct interface *ptr)
{
+ unsigned long rx, tx, short_rx, short_tx; char Rext[5], Text[5];
struct aftype *ap;
struct hwtype *hw;
int hf;
***************
*** 352,357 ****
--- 353,372 ----
ptr->stats.tx_packets, ptr->stats.tx_errors,
ptr->stats.tx_dropped, dispname, ptr->stats.tx_fifo_errors,
ptr->stats.tx_carrier_errors, ptr->stats.collisions);
+
+ /* MyMod */
+ rx = ptr->stats.rx_bytes; tx = ptr->stats.tx_bytes;
+ strcpy(Rext, ""); short_rx = rx * 10; short_tx = tx * 10;
+ if (rx > 1048576) { short_rx /= 1048576; strcpy(Rext, "Mb"); }
+ else if (rx > 1024) { short_rx /= 1024; strcpy(Rext, "Kb"); }
+ if (tx > 1048576) { short_tx /= 1048576; strcpy(Text, "Mb"); }
+ else if (tx > 1024) { short_tx /= 1024; strcpy(Text, "Kb"); }
+
+ printf(" ");
+ printf(NLS_CATGETS(catfd, ifconfigSet, ifconfig_tx,
+ "RX bytes: %lu (%lu.%lu %s) TX bytes: %lu (%lu.%lu %s)\n"),
+ rx, short_rx / 10, short_rx % 10, Rext,
+ tx, short_tx / 10, short_tx % 10, Text);
if (hfmap.irq || ptr->map.mem_start || ptr->map.dma ||
ptr->map.base_addr)) {
_________________________________________________________________
Re: Wanting HELP!
Date: Wed, 04 Mar 98 13:35:24 -0500
From: Bill R. Williams, brw@BRW.ETSU.Edu Status: RO
For anyone interested... IT'S FIXED! (*applause, cheering, etc.*) On
Fri, 27 Feb 98 14:16:13 -0500, I (Bill R. Williams) wrote:
...[snip]...
In the process of getting a System installed I upgraded from the
original CD-ROM install of (Intel) RedHat 4.2 to the new RedHat 5.0
CD-ROM. One of the significant items on this system is the mars-nwe
Netware emulator.
Under the RedHat 4.2 with mars-nwe 0.98pl8-1 the mars package ran fine,
but logged copious errors about there being "too many connections --
increase the number in config.h". But it ran, and I *liked* the way it
happily did Netware duties! (Especially the printer part.)
The *new* RedHat 5.0 with mars-nwe 0.99pl2-1 offered some very desirable
abilities, not the least of which is the move of some items (such as
number of connections) to the run-time config file (/etc/nwserv.conf
under RedHat, probably nw.ini on other distributions.) Now the bad
news...
...[snip]...
This new package spawns out nwconn processes with an empty parenthesis
as the last token instead of the USERID ('nwconn ... ()') until all
connection slots are eaten, and then, of course, will not recognize any
new attempts. Any users already logged into the nwserv(ice) are Ok.
...[snip]...
I have tried every combination of parameter twiddling in the run-time
config file that can think of, but to no avail.
...[snip]...
Anyone who has solved this problem, please share the secret.
BTW: I had regularly pulled in updates to everything from RedHat
errata. I was getting a bit gun shy about updating, because that's how
I got into the mess. :-) I had previously tried the "..pl2-3.rpm" when
it first appeared, but it died immediatly on startup so I went back to
the "..pl2-1.rpm" build which, at least, would run in spite of all the
problems I was having with it.
The breakthrough was inspired by a note I got when On Mon, 02 Mar 1998
12:24:37 +0100, Trond Eivind Glomsrd wrote: "Last: You have installed
all items from the errata? The glibc updates fixes a lot of bugs, at
least."
So I made one more trip to the RH errata repository, and got the
absolute latest updates. There did happen to be a newer update of that
glibc which Tron had mentioned.
I applied the glibc updates and installed the mars-nwe 0.99pl2-3, and
this all seems to have fixed everything. Mars runs, and all the ugly
hangups and problems appear to be gone! It's a thing of beauty.
For those keeping score, here are the package levels which are
significant to running the mars-nwe on my RH 5.0 System:
kernel-2.0.32-2
mars-nwe-0.99pl2-3
glibc-2.0.6-9
It appears that the mixture of levels I had prior to this set just did
not synch up, and I suspect the the fix must have been in the new
glibc as Tron suggested it might be.
What a relief!
Bill R. Williams
_________________________________________________________________
Re: Help Wanted (usershell on console without logging in)
Date: Mon, 23 Mar 1998 15:26:17 -0500 (EST)
From: Kragen, kragen@pobox.com
Last month, there was a request by Todd Blake for some help:
I like most people am the only person to use my linux system at
home. What I'd like to do is when my system is done booting to have
me automatically login as my main user account(not as root though)
on one virtual console(the first) and leave all other consoles and
virtual consoles alone,
I thought this was a good idea, so I tried to do it. Eventually, I
succeeded. The resulting software is at
http://www.pobox.com/~kragen/sw/usershell.html. Mr. Blake reports that
it is a good job.
Anyone else is welcome to it. I'll even help you if you have trouble
with it :)
Kragen
_________________________________________________________________
2 cent tip followup -- X
Date: Tue, 24 Mar 1998 14:26:43 -0500
From: Vivek Khera, vivek@khera.org
In the March issue, you have a tip on using X programs when you've run
su to root. By far the easiest method is to simply
setenv XAUTHORITY ~khera/.Xauthority
for your own user name, of course... No need to run any other programs
or cut and paste anything.
I have my machines configured so that when someone becomes root, if
the file ~/.rootrc exists in their home directory, it is sourced as
part of the root's .cshrc file. In there, I put the above setenv
command. I've never had to think about it again (in nearly 5 years).
Hope this helps someone.
Vivek Khera, Ph.D.
_________________________________________________________________
locate patch
Date: 24 Mar 1998 11:57:20 -0000
From: Remco Wouts, remco@xray.bmc.uu.se
In the Linux Gazette number 26 (march) there was mention of a patch
for locate. The idea of the patch was to make it impossible to find
out the names of files in directories that you do not have access to.
Unfortunately this patch does not solve the problem at all. So I would
advise people not to use this patch, they could be lured into a false
sense of privacy. What is the problem and what is wrong with the
patch?
Locate allows you to find a file quickly. It does this by consulting a
database of filenames. Of course this way of finding a file is much
quicker then hunting for it in the file system. However, somebody has
to make the database. This is done with the program updatdb, usually
from a crontab every day or week. Updatdb can find all files that the
user id, it is running as, has access to. So if updatedb is run with
an id that has more access rights then the user who invokes the locate
command, this user can find out the names of files that he/she
otherwise could not find. The author of the locate patch solved the
problem simply by changing the locate command. Just before sending the
name of a file, it checks whether it exists and if so whether the
invoking user has read access. However you don't need to use the
locate command at all to read the file database. To make sure every
user, who invokes locate, can read it it is stored world readable. The
patch does not help at all to solve the privacy problem.
For the moment, if you are concerned about these privacy issues, you
should not run 'updatedb' at all, and remove the existing database.
Since locate & Co. are very handy utilities it is probably best to
leave things as they are and make sure updatedb is run by user nobody
from a crontab.
The next easiest solution would be to make the database created by
updatedb readable by root only, and change locate to a setuid program
which consults the database as root and checks for permissions. I will
leave that as a challenge to the author of the patch.
Happy Linuxing.
-- Remco Wouts
_________________________________________________________________
locate subdirectories
Date: Thu, 26 Mar 1998 17:02:22 +0000 (GMT)
From: Padraig.Finnerty@acm.org
in a large directory of files it is sometimes hard to locate the
subdirectories. to do this you can tag the directories with a '/'
(using ls -F) and then grep these out...
ls -F |grep /$
or even better..
alias sub="ls -F |grep /$"
Padraig
_________________________________________________________________
Published in Linux Gazette Issue 27, April 1998
_________________________________________________________________
[ TABLE OF CONTENTS ] [ FRONT PAGE ] Back Next
_________________________________________________________________
This page maintained by the Editor of Linux Gazette, gazette@ssc.com
Copyright © 1998 Specialized Systems Consultants, Inc.
"Linux Gazette...making Linux just a little more fun!"
_________________________________________________________________
News Bytes
Contents:
* News in General
* Software Announcements
_________________________________________________________________
News in General
_________________________________________________________________
May Linux Journal
The May issue of Linux Journal will be hitting the newsstands April
10. The focus of this issue is Cross Platform Development with
articles on building reusable Java Widgets, debugging your Perl
programs, Modula-3, doubly-linked lists, the Python DB-API and much
more. Check out the Table of Contents. To subscribe to Linux Journal,
click here.
_________________________________________________________________
Linus Torvalds Receives VA Research Excellence Award
February 26, 1998
VA Research granted its Excellence in Open Source Software Award to
Linus Torvalds, father of the Linux operating system and one of the
most important leaders in information technology. Linus received a
VArStation YMP, worth $4500, at The Silicon Valley Linux Users Group
meeting in March. (See article in this issue by Chris Dibona.)
The VA Research Excellence in Open Source Software Award honors
exceptional individuals within the free software community. Torvalds
led this community to create Linux, a freely distributable multi-user,
multi-tasking Unix-like operating system. Linux is now used in a range
of applications from mission critical servers to desktop workstations.
VA Research is the oldest and largest Linux systems company. Founded
in 1993 by electrical engineering doctoral students at Stanford
University, VA Research pioneered high performance workstations and
servers based on Linux. In 1997, VA Research became an affiliate of
Umax.
For More Information:
VA Research, www.varesearch.com
Samuel Ockman, ockman@varesearch.com.
_________________________________________________________________
New Linux and Open Source Business Usage Advocacy page
Date: Thu, 12 Mar 1998 21:06:35 +1100 (EST)
There is a new advocacy page for Linux (and other open source, free
software). This site is primarily focused on solid business reasons as
to why companies should use Linux. The opening blurb states:
... We (and a growing number of other firms) are heavy users of
software such as Linux, GNU and FreeBSD which can be classified as
'freely redistributable' or 'co-operatively developed', but feel that
there is considerable lack of knowledge of these systems and
applications in the general business community. We (and some of the
companies listed below) are therefore building this web presence to
help provide information, documentation, showcase projects, links to
related sites and other useful resources to to help redress this. This
will include freely redistributable systems software, and free and
commercial applications which run on these systems which may be of
interest to helping you run your business. ...
http://www.cyber.com.au/misc/frsbiz/
For More Information:
Con Zymaris, Cybersource Pty. Ltd.
_________________________________________________________________
FREENIX at USENIX Annual Conference
Date: Mon, 16 Mar 1998 08:54:19 -0800
Here's more than you ever wanted to know:
Share ideas, and actual code, with developers and avid users of freely
redistributable software--Linux, FreeBSD, NetBSD, OpenBSD, and
more--at the 23RD ANNUAL USENIX TECHNICAL CONFERENCE, includes
FREENIX, the Freely Redistributable Software Track, June 15-19, 1998
in New Orleans, Louisiana. Sponsored by USENIX, the Advanced Computing
Systems Association
FREENIX is co-sponsored by The FreeBSD Project, Linux International,
The NetBSD Foundation, Inc., and The OpenBSD Project
Full program and on-line registration:
http://www.usenix.org/events/no98/
Email: conference@usenix.org
FREENIX, a Special Track within the conference, showcases the latest
developments and interesting applications in freely redistributable
software. FREENIX offers 28 talks, plus evening BoF sessions.
USENIX is the Advanced Computing Systems Association. Its members are
the computer technologists responsible for many of the innovations in
computing we enjoy today.
For More Information:
Cynthia Deno, USENIX ASSOCIATION, cynthia@usenix.org
_________________________________________________________________
Samba: Integrating UNIX and Windows
Date: Fri, 6 Mar 1998 08:36:32 GMT
Samba is the tool of choice for providing Windows file sharing and
printer services from UNIX and UNIX-like systems. Freely available
under the GNU Public License, Samba allows UNIX machines to be
seamlessly integrated into a Windows network without installing any
additional software on the Windows machines. Used in tandem with Linux
or FreeBSD, Samba provides a low-cost alternative to the Windows NT
Server.
This book, a combination of technical tutorial, reference guide, and
how-to manual, contains the depth of knowledge experienced network
administrators demand without skipping the information beginners need
to get fast results. UNIX administrators new to Windows networking
will find the information they need to become Windows networking
experts. Those new to UNIX will find the details they need to install
and configure Samba correctly and securely.
The book also contains a CD-ROM containing version 1.9.18 of the Samba
server, a library of useful tools and scripts, the Samba mailing list
archives, and all examples discussed in the book.
* Title: Samba: Integrating UNIX and Windows
* Author: John D. Blair, Samba Team
* Publisher: Specialized Systems Consultants Inc. (SSC)
* Pub Date: 2/98
* Retail Price: $29.95
* ISBN: 1-57831-006-7
* URL: www.ssc.com/ssc/samba/
* Contact: Clarica Grove
Currently available at fatbrain.com (Book shops + Online).
www.clbooks.com * 1-800-789-8590 * FAX 1-408-752-9919
_________________________________________________________________
Netscape turns to Debian for Licensing Guidance!
Date: Fri, 6 Mar 1998 09:23:38 GMT
When Netscape decided to make their client software free, they used
the Debian Free Software Guidelines for a guide on how to write their
license. You can find the draft Netscape license at
http://www.mozilla.org/NPL/. This is a historic day for us, since it
means that "Mozilla" (Netscape Communicator) will eventually be in the
"main" part of Debian and all Linux systems, instead of the "non-free"
section as it is now.
A link to a Netscape press release (containing a quote from Bruce
Perens) can be found at
http://www.netscape.com/newsref/pr/newsrelease579.html. The Debian
Social Contract and licensing guidelines are at
http://www.debian.org/social_contract.html. A web page on the Open
Source promotional program for free software can be found at
http://www.opensource.org/.
There is work yet to be done - a few license bug-lets will be resolved
within the next few days, and once the source code is released there
are some parts that Netscape does not own that will most likely have
to be replaced with free software.
For More Information:
Bruce Perens, bruce@debian.novare.net
_________________________________________________________________
Linux Web Watcher News
Date: Tue, 10 Mar 1998 13:18:11 GMT
Linux Web Watcher, http://webwatcher.org/
The "Linux Web Watcher" now has its own domain, thanks to VA Research.
LWW isn't an ordinary links page. It actually keeps track of when the
pages were last updated, so you don't have to waste hours checking to
see if your favorite web pages have been updated since your last visit
to them.
The non-tables page of the Linux Web Watcher have been greatly
enhanced to make things easier to read for Lynx users.
For More Information:
Robert E. Blue, reblue@emry.net
_________________________________________________________________
Linux questionnaire
Date: Tue, 10 Mar 1998 13:19:49 GMT
Aachen Linux User Group (ALUG) proudly presents the Linux
Questionnaire.
The questionnaire consists of 20 questions which cover software,
hardware, documentation and installation issues. The questions are a
mixture of multiple choice and text areas. The results are updated
hourly and can be seen at:
http://aachen.heimat.de/alug/fragebogen2/fragebogen_results2.html
The objective of the questionnaire is to provide a somewhat
standardized way to report your experience with Linux and the results
should give (in particular, to the newcomer) a coarse-grained view on
Linux and its users.
For More Information:
Aachener Linux User Group (Aachen/Germany),
http://aachen.heimat.de/alug
Michael Eilers, eilers@rmi.de
_________________________________________________________________
Perl Conference 2.0 - Call for Participation
Date: Tue, 10 Mar 1998 14:43:42 GMT
The second annual O'Reilly Perl Conference will be held August 17-20,
1998 at the Fairmont Hotel in San Jose, California. The conference
will feature two days of tutorials followed by a two day conference.
The conference will include sessions for submitted papers on practical
and experimental uses of Perl; invited presentations; daily Q and A
sessions with leading Perl developers and trainers; a by-invitation
Developers Workshop; and nightly user-organized Birds-of-a-Feather
sessions for special interest groups.
In the practical spirit of Perl, we seek papers that describe how you
are using Perl right now for work or play, and how your experience and
your code can help others. This is not a traditional solicitation for
academic papers. While we look forward to papers on new and useful
extensions, applications, and tools, we are most interested in
receiving papers that show Perl hard at work, saving time, money, and
headaches for you and your organization. We welcome submissions that
work under both Unix and non-Unix systems, such as Win32.
For More Information:
The Perl Institute, Chip Salzenberg
3665 E. Bay Drive, Suite 204-A
Largo, FL 33771-1990
_________________________________________________________________
UK Linux Conference
Date: Mon, 23 Mar 1998 09:18:30 GMT
These are very preliminary details:
Venue: UMIST Conference Centre, Manchester.
Date: Saturday 27th June
Time: A Jam-packed day from 10am (sharp) to around 5:30
Programme (provisional):
* Richard Moore (University of Manchester): KDE Internals
* Stephen Tweedie (DEC): Journaling File Systems
* Gareth Bult (Frontier Technology): Linux Means Business
* Ian Jackson (Debian): Title TBDC
* Jeremy Chatfield (Xi Graphics): X
For More Information:
UKUUG, http://www.ukuug.org/
_________________________________________________________________
French Translation of LG Issue 25
A French translation of some parts of Issue 25 of the Linux Gazette is
available at the following URL's :
http://www.linux-kheops.com/pub/lgazette/;
and http://www.linux-france.com/article/lgazette/;
For more information:
Eric Jacoboni : jaco@mail.dotcom.fr
_________________________________________________________________
Software Announcements
_________________________________________________________________
Help ToolKit for Motif V0.9: Binary beta release now available
Date: Sun, 1 Mar 1998 23:58:55 -0500
Columbia, MD -- The Help ToolKit for Motif V0.9 has been released and
is now available on the web. The Help ToolKit for Motif allows
developers to easily add and modify various types of on-line
context-sensitive help to Motif applications. Using a small set of
functions to install the library, every widget and gadget in a Motif
application seemingly inherits new resources allowing help to be
configured and changed via X resource files.
The ToolKit supports three core help types: Tips, Cues, and Hints. All
of these help types can be assigned to any widget and any Motif-based
gadget.
The Help ToolKit distribution can be downloaded from
http://www.softwarecomp.com. The complete Programmer's Manual can also
be downloaded in PDF format from the same site.
Although the Linux version of this product is freely available for
non-commercial purposes, it is copyrighted and is not in the public
domain. There is a license associated with the distribution; please
read it if you have an interest in the product.
For more information:
Robert S. Werner, rob.werner@softwarecomp.com
info@softwarecomp.com, http://www.softwarecomp.com/
_________________________________________________________________
RED HAT SOFTWARE NOW SHIPPING MOTIF 2.1
Date: Tue, 03 Mar 1998 16:16:34 -0500
Research Triangle Park, NC--March 2, 1998--Red Hat Software, Inc.,
publisher of Red Hat Linux 5.0, the Operating System that was named
InfoWorld Magazine's Product of the Year, has announced the
availability of Red Hat Motif 2.1 for the Intel Computer. Red Hat
Motif 2.1 for the Intel computer is the full OSF/Motif development
system. As with the 2.0.1 version of Red Hat Motif, Red Hat Motif 2.1
can turn your Intel computer running Linux into a complete Motif
development workstation.
For more information:
Red Hat Software, Inc., "http://www.redhat.com/, melissa@redhat.com
_________________________________________________________________
PostShop, ScanShop and OCR Shop
Date: Fri, 6 Mar 1998 11:38:10 -0800 (PST)
Vividata, Inc. announced the release of Linux versions of its
PostShop, ScanShop and OCR Shop software products PostShop transforms
inkjet and laser printers to PostScript-enabled ones and makes
PostScript printers up to 100 times faster. ScanShop scans, prints,
compresses, stores, retrieves and displays pictures and documents in
full color, grayscale, and bi-level (black & white), and OCR Shop
converts paper documents and images into editable text.
For more information:
Vividata, Inc., info@vividata.com, http://www.vividata.com/. Cobalt
Qube Ships
MOUNTAIN VIEW, Calif., March 17, 1998 - Cobalt Microserver Inc. today
announced that its Cobalt Qube(tm) microserver products, which were
introduced last month at the DEMO 98 conference, have begun shipping
to customers. Cobalt develops and markets simple, low-cost Internet
and Intranet servers.
The Cobalt Qube microservers are aimed at work groups and branch
offices, Internet service providers, Web developers and educational
organizations. They are simple, versatile, scalable, and offer
excellent performance for work groups at a fraction of the cost of
traditional UNIX(R) and Windows(R) NT servers.
For more information:
Nancy Teater, Hamilton Communications, nrt@hamilton.com,
http://web.hamilton.com/
_________________________________________________________________
LinkScan 4.0
Date: Fri, 13 Mar 1998 13:24:29 -8
San Jose, CA, March 10, 1998 - Electronic Software Publishing Corp.
(Elsop) introduces a number of new features to enhance the central
management of multiple Intranet/Internet web sites in organizations
where many different individuals may be responsible for the content.
These developments build upon earlier releases which laid down the
foundations for these exciting new features. LinkScan enables users to
split-up very large sites into smaller sub-sites, to produce different
reports for different departments and to configure LinkScan to handle
multiple domains hosted on a single server. LinkScan/Dispatch adds a
new higher level of capability to those features.
LinkScan/Dispatch is included with LinkScan Version 4.0. It is
designed for operators of large web sites where the responsibility for
maintenance and updates is distributed among many individuals.
LinkScan 4.0 is priced at $750 per server. Volume discounts are
available in single order quantities of five copies or more. Orders
may be placed online via a secure server.
For more information:
Kenneth R. Churilla, ken@elsop.com
Electronic Software Publishing Corporation, http://www.elsop.com/
_________________________________________________________________
WANPIPE FT1
Date: Thu, 12 Mar 1998 14:25:12 +0000
Sangoma Technologies Inc. (OFFER VALID UNTIL APRIL 15TH OR WHILE
SUPPLIES LAST) is making available our WANPIPE kit that includes the
T1 and Fractional T1 DSU/CSU for an END USER price of $799.00! This
represents a reduction of 30% from our already low standard price of
$1139.00.
WANPIPE provides all you need to turn your NT, Linux, or NetWare
server or Windows workstation into a powerful T1 or Fractional T1
router for your LAN. Just plug your server into the wall.
For more information:
David Mandelstam, dm@sangoma.com
Sangoma Technologies Inc.
_________________________________________________________________
XFree86 3.3.2 Released
Date: Fri, 6 Mar 1998 09:59:39 GMT XFree86 version 3.3.2 is now
available. The XFree86 3.3 distribution is available in both source
and binary form. Binary distributions are currently available for
FreeBSD (2.2.2+ and 3.0-CURRENT), NetBSD (1.2 and 1.3), OpenBSD,
Interactive Unix, Linux (ix86 and AXP), SVR4.0, UnixWare, OS/2,
Solaris 2.6 and LynxOS AT.
The XFree86 documentation is available on-line on our Web server. The
documentation for 3.3 can be accessed at http://WWW.XFree86.org/3.3/.
Source patches are available to upgrade X11R6.3 PL2 from the X
Consortium (now The Open Group) to XFree86 3.3.2. Binaries for many
OSs are also available. The distribution is available from:
ftp://ftp.XFree86.org/pub/XFree86
For more information:
The XFree86 Team, robin@interlabs.com
_________________________________________________________________
scwm 0.6 - Scheme Configurable Window Manager
Date: Tue, 10 Mar 1998 12:38:35 GMT
Scwm 0.6 is released. Scwm is the Scheme Configurable Window Manager.
This is a highly dynamic and extensible window manager for the X
Window System (based originally on FVWM2, but now much enhanced) with
Guile Scheme as the configuration/extension language. Nearly all
decorations can be changed at run-time or per-window, and eventually
many decoration styles and additional features will be supported
through dynamically loaded code. A powerful protocol is provided for
interacting with the window manager while it is running.
You can download the latest scwm package from:
http://web.mit.edu/mstachow/www/scwm-0.6.tar.gz
http://web.mit.edu/mstachow/www/scwm-icons-0.6.tar.gz
For more information:
Maciej Stachowiak, mstachow@mit.edu,
Massachusetts Institute of Technology,
http://web.mit.edu/mstachow/www/scwm.html
_________________________________________________________________
Yalsim, Yet Another Logic/Timing Simulator
Date: Tue, 10 Mar 1998 12:44:50 GMT This is the second Alpha version
of a logic/timing simulator called Yalsim. Yalsim is a hierarchical
timing and logic simulator that has been in development (on and off)
for over fifteen years and the second pre-beta version is now being
sampled. Yalsim can now be obtained (with source code) by individuals
from:
ftp:/ftp.eecg.toronto.edu/pub/software/martin/yalsim.tar.gz
The current cost for Yalsim is $1 CDN, when you have time to send it.
Sending four U.S. quarters is also acceptable. This may change in the
future. However, seriously, please do read the LICENSE file. Yalsim is
not public domain or being released under a GNU-like license, although
individuals, at non-profit institutions, will always be able to obtain
at least binary versions of Yalsim at no or minimal (overhead) cost.
For more information:
Ken Martin, martin@isis.eecg.toronto.edu
_________________________________________________________________
SQL RDBMS PostgreSQL v6.3 released for Linux
Date: Tue, 10 Mar 1998 12:56:10 GMT
SQL RDBMS PostgreSQL v6.3 released for Linux. PostgreSQL is a RDBMS
SQL server which is the "default SQLserver" shipped with most Linux
distributions.
For more information:
http://www.postgresql.org/, gold_bag@yahoo.com
_________________________________________________________________
nosql-0.9 - Unix RDBMS
Date: Tue, 10 Mar 1998 12:57:56 GMT
A new release of NoSQL is available at :
ftp://ftp.linux.it/pub/database/nosql-0.9.tar.gz
NoSQL is a simple Relational Database Management System for Unix.
There have been several major changes from v0.8 to v0.9. Please read
file README-v0.9 distributed with the package.
For more information:
ILS - Italian Linux Society, Carlo Strozzi, carlos@linux.it
_________________________________________________________________
RITW: Very simple network monitoring tool
Date: Tue, 10 Mar 1998 13:12:39 GMT
RITW is a small set of scripts that allow any user to monitor
network/host status using a common WWW browser and a central
monitoring site through ICMP and HTTP. Although it will probably run
on any platform, it was only tested on Linux.
Primary site is at
http://www.terravista.pt/Ancora/1883/ritw_e.html
http://www.terravista.pt/Ancora/1883/ritw.html (portuguese)
For more information:
Rui Pedro Bernardinoa, Parque Expo'98, Portugal, rbernardino@expo98.pt
_________________________________________________________________
Socket Script v1.5
Date: Tue, 10 Mar 1998 13:30:15 GMT Socket Script has been made for
people who wants to create networking-oriented programs, but don't
want to learn all the socket stuff. It has multiple network commands
that enable you to tell the SScript interpreter where you want to
connect, and all you have to do is focus on the script itself, leaving
the connection parts to SScript. The best part is that most scripts
will run on most Unix workstations, and win32 platforms.
Available at:
http://devplanet.fastethernet.net/sscript.html
_________________________________________________________________
newsfetch-1.11 - pull news via NNTP to a mailbox
Date: Tue, 10 Mar 1998 14:10:57 GMT
newsfetch: Most Compact and Powerful Utility to download the news from
an NNTP server and stores in the mailbox format. New version of
newsfetch (1.11) is uploaded to sunsite.unc.edu:
newsfetch-1.11.tar.gz newsfetch-1.11-1.i386.rpm
newsfetch-1.11-1.src.rpm
available in ftp://sunsite.unc.edu/pub/Linux/Incoming/ and in proper
place (/pub/Linux/system/news/reader) when they move the files. New
version is available in .tar.gz and .rpm format.
For more information:
Yusuf Motiwala, ymotiwala@hss.hns.com
_________________________________________________________________
nv-dc1000 digital camera image reader v0.1 beta
Date: Tue, 10 Mar 1998 14:30:22 GMT
A small program to transfer images from the digital still camera known
as NV-DC1000 or PV-DC1000 from Panasonic. First beta version, but it
works.
For more information:
Societas Datoriae Universitatis Lundensis et Instituti Technici
Lundensis
Fredrik Roubert, roubert@df.lth.se,
http://www.df.lth.se/~roubert/NV-DC1000.html
_________________________________________________________________
Cecilia2.0 - electroacoustic music software
Date: Tue, 17 Mar 1998 08:45:31 GMT
We are happy to announce version 2 of CECILIA, the musician's software
that makes you funnier, smarter and more attractive to the opposite
sex.
Cecilia was developed by composers of electroacoustic music for
composers of electroacoustic music. If you have to ask, don't bother.
Cecilia is probably the wackiest sound maker in the world at this
time. In fact, we believe nothing else even comes close. Cecilia is
for high-concept audio processing. It is not for sequencing your
rinky-dink samplers and synths.
Cecilia is freeware at present. The next version will not be. Count
your blessings. Cecilia runs on Macintoshes, Linux boxes and SGIs. It
does not run on Windows. When it does, we'll sell it and become
obscenely wealthy.
Cecilia is strictly for people who have a sense of humour. We, on the
other hand, are very cranky people.
Cecilia is available for download at :
ftp://ftp.musique.umontreal.ca/pub/cecilia/
Cecilia's home page for manuals and info:
http://www.musique.umontreal.ca/CEC/
For more information:
Jean Piche, Universite de Montreal
http://mistral.ere.umontreal.ca/~pichej,
http://www.musique.umontreal.ca/electro/CEC/
_________________________________________________________________
Free CORBA 2 ORB - omniORB 2.5.0 released.
Date: Tue, 17 Mar 1998 09:12:28 GMT
The Olivetti and Oracle Research Laboratory has made available the
second public release of omniORB (version 2.5.0). We also refer to
this version as omniORB2. The main change since the last public
release (release 2.4.0) is the addition of support for type Any and
TypeCode. For further details of the changes, see
http://www.orl.co.uk/omniORB/omniORB_250/
omniORB2 is copyright Olivetti & Oracle Research Laboratory. It is
free software. The programs in omniORB2 are distributed under the GNU
General Public License as published by the Free Software Foundation.
The libraries in omniORB2 are distributed under the GNU Library
General Public License.
Source code and binary distributions are available from our Web pages:
http://www.orl.co.uk/omniORB/omniORB.html
omniORB2 is not yet a complete implementation of the CORBA core.
For more information:
Eoin Carroll, ewc@orl.co.uk
Olivetti & Oracle Research Lab, Cambridge, UK
_________________________________________________________________
Mtools 3.9 - Access MS-Dos/Win 95 disks from Unix without mounting
Date: Tue, 17 Mar 1998 08:38:33 GMT
I would like to announce a new release of Mtools, a collection of
utilities to access MS-DOS disks from Unix without mounting them.
Mtools supports Win'95 style long file names, FAT32, OS/2 Xdf disks
and 2m disks (store up to 1992k on a high density 3 1/2 disk). Mtools
also includes mpartition, a simple partitioning programming to setup
Zip and Jaz media on non-PC machines (SunOs, Solaris and HP/UX).
Mtools can currently be found at the following places:
http://linux.wauug.org/pub/knaff/mtools
http://www.poboxes.com/Alain.Knaff/mtools/
For more information:
Alain Knaff, knaff@tux.org
_________________________________________________________________
New XML.com site
Date: Wed, 25 Mar 1998 20:08:29 -0800 (PST) SEBASTOPOL, CA--XML, the
industrial-strength mark-up language used for Web development, is a
tool for electronic commerce and information management. With the
recent approval of the XML Specification by the World Wide Web
Consortium (W3C), interest in XML development has picked up
considerable steam.
To promote the development and commercial acceptance of XML, three
companies that have long been Web insiders--O'Reilly & Associates,
their affiliate Songline Studios, and Seybold Publications--have
joined together to create XML.com (http://www.xml.com), a new Web site
that serves as a key resource and nerve center for XML developers and
users. A preview site is now available, and the launch date for the
full site is May 1, 1998.
XML.com features a rich mix of information and services for the XML
community. The site is designed to serve both people who are already
working with XML and those HTML users who want to "graduate" to XML's
power and complexity.
For more information:
Sara Winge, sara@ora.com
_________________________________________________________________
Published in Linux Gazette Issue 27, April 1998
_________________________________________________________________
[ TABLE OF CONTENTS ] [ FRONT PAGE ] Back Next
_________________________________________________________________
This page written and maintained by the Editor of Linux Gazette,
gazette@ssc.com
Copyright © 1998 Specialized Systems Consultants, Inc.
"Linux Gazette...making Linux just a little more fun!"
_________________________________________________________________
The Answer Guy
By James T. Dennis, linux-questions-only@ssc.com
Starshine Technical Services, http://www.starshine.org/
_________________________________________________________________
Contents:
* Regarding Compile Errors with Tripwire 1.2
* Applix Spreadsheet ELF Macro Language
* Answer Guy Issue 18 -- Procmail Spam Filter
* Great Procmail Article
* Linux Cluster Configuration
* IP Masquerading/Proxy?
_________________________________________________________________
Regarding Compile Errors with Tripwire 1.2
From: Tc McCluan, tc@4dcomm.com
I was on http://www.starshine.org/linux/ and since I am unable to
compile Tripwire 1.2 on my system (redhat 4.2 with 2.0.33 kernel) I am
trying all avenues of help.
I have tried the recommendation in the /contrib/README.linux but I
still get the same error message. I have tried many combinations, but
still no luck.
Following are the list of errors I am getting, hopefully you can spot
where this compile is failing. Thanks in advance,
You could look for my Tripwire patch at
http://www.starshine.org/linux/
... or you could grab the RPM file from any Red Hat "contrib" mirror
like:
ftp://ftp.redhat.com/pub/contrib/i386/tripwire-1.2-1.i386.rpm
... for a precompiled binary or:
ftp://ftp.redhat.com/pub/contrib/SRPMS/tripwire-1.2-1.src.rpm
... for sources that you should be able to build cleanly.
So far I really haven't found a tripwire configuration that I really
like. I can never quite get the balance between what aspects to ignore
(permission and ownership changes on /dev/tty*, /dev/pty*, etc) and
which ones I need to watch.
So, if anyone out there as a really good tw.config file that really
minimizes the superfluous alerts and maximized the intrustion
detection, I'd like to hear about it.
Also if anyone has a YARD or other rescue disk builder that is
customized for creating write-protected tripwire boot/root diskette
sets (for periodic integrity auditing of Linux systems) I'd like to
see a step-by-step Mini-HOWTO or tutorial (maybe as a submission to
Linux Gazette).
-- Jim
_________________________________________________________________
Applix Spreadsheet ELF Macro Language
From: Paul T. Karsh ITTC-237B 8-286-xxxx, karchpte@acm.org
I happened on the Linux Gazette in the process of searching for some
information on "scripting" macros in the Applixware spreadsheet.
Although this is not strictly a Linux question, I hope you can help me
with some "pointers" (links ?) on how to learn this language. The
Applixware help is no help and the company at which I consult does not
have the on-line Applixware books nor the hardcopy "macro" manual.
I played with Applixware a little bit -- but was highly discouraged to
find that its file conversion package couldn't handle more recent
versions of MS Word and Excel. That was my main interest in the
product since I occasionally get file attachments in these proprietary
formats -- and sometimes they are potential customers.
As for the issue of learning this Macro language without having the
appropriate documentation. I would ask your client where their manuals
and/or installation CD is -- if they can't produce it and are
unwilling to order a replacement then I would question their decision
to use the product.
Applixware is a commercial product. Assuming this is on a Linux system
you'd probably want to contact Red Hat Corporation to order
replacement manuals (I think RH is the sole Linux distributor for
Applixware -- just as Caldera is the sole distributor for the Linux
version of WordPerfect).
If they have the installation CD -- borrow it and install its online
documentation on some system somewhere (long enough to get the
information your need). Be sure to remove that installation unless the
appropriate licensing arrangements are made, of course.
Is there somewhere on the net (FTP or anything) where I can get an
intro to this? I tried the Applixware site; it just seems to be page
after page of PR.
I would like to see far more technical content on their web site as
well. (The same desire applies to other hardware and software company
sites).
-- Jim
_________________________________________________________________
Answer Guy Issue 18 -- Procmail Spam Filter
From: Anthony E. Geene, agreene@pobox.com
I'm not a procmail user, but I've found that most spam is sent using
envelope addresses, the standard recipient headers are not addressed
to the actual recipient. So I set up filters to catch my mailing list
mail and any mail that is addressed to a list of my vailid addresses.
Other mail is put elsewhere for later review.
Such a method is relatively simple and would catch all but the more
sophisticated spammers.
It is a good suggestion. It doesn't work if you have some people that
prefer to Bcc: you (use "blind carbon copies"). Naturally many
people's mail user agents (MUA's) like elm, pine, etc don't have
obvious options for Bcc:'s -- others do (and most Unix/Linux MUA's
allow some way to do it -- even if it isn't *obvious*).
There are probably a number of other "false positive" situations. As
you say most automated mailing lists have headers that would trigger
on your criteria. The obvious response to these problems is to make a
list of all the exceptional cases (of which you are aware) and add
appropriate rules to precede your anti-spam filter.
In addition it is important to ensure that your disposition of
apparently bogus messages is a refile to a specific mail folder. You
don't want to file it to /dev/null!
As you check your "probably junk" folder you can manually refile the
exceptions -- and optionally add new rules to "pre-approve" lists of
your favorite correspondents.
Note: if you keep a list of correspondents and a list of known
spammers, and you write a recipe to check the list you may be
concerned about the amount of time spent in 'grep'. Here's a hint:
keep the list sorted and use the 'look' command.
(The advantage of 'look' is that it does a "binary" search (think
about successive approximation to "zero in on" the desired lines) on a
sorted file -- and returns the lines that match. While the overhead of
'grep' grows in a linear fashion (the search doubles in time as the
file doubles in size) that of 'look' grows much more slowly (it's
proportional to the square root of number of records/lines in the
file). Similar results would be attained if one used 'dbm' hashes
(indexes) -- but there is greater overhead in programming (Perl offers
modules to support dbm, gdbm, ndbm and other hashing libraries -- it
also has much higher load time overhead as a result of it's
generality).
The point is that even on a small file (100 lines) I can see about a
10% difference in overhead. After a few thousand lines the difference
is substantial (grep takes twice as long to run).
None of this matters much on your personal workstation which has only
one active user and receives a couple hundred e-mail items per day.
However -- if you're filtering on the company mailhub, or at your
ISP's location -- it's worth it to reduce your impact.
-- Jim
_________________________________________________________________
Great Procmail Article!
From: Anthony E. Geene, agreene@pobox.com
I read your procmail article in issue 14 of the Linux Gazette. It was
the best explanation of how procmail works that I've seen yet.
I just wanted to say Thanks,
Anthony,
Thanks for the feedback. BTW there is a new article on use TDG (The
Dotfile Generator) as a GUI front end for creating procmail scripts. I
haven't finished reading it yet -- but it looks pretty good to me.
In your earlier mail you mentioned that you aren't using procmail yet.
This article on TDG and my explanation of what's going on "under the
hood" may yet change that. (Also, somewhere on that morass of
half-baked pages that I keep as a "website" are some links to other
procmail and mail filtering resources).
-- Jim
_________________________________________________________________
Linux Cluster configuration
From: Antonio Sindona, Antonio.Sindona@trinacria.it
I'd like to create a *Linux cluster configuration* to have some degree
of fault-tolerance (Linux normally works ... hardware not always ! ;-)
). Do You know if somebody tried to develop something to solve this
problem ?
The first place I'd look for info on fault tolerance for Linux would
be: Linux High Availability HOWTO
http://sunsite.unc.edu/pub/Linux/ALPHA/linux-ha/High-Availability-HOWT
O.html
Then take a look at:
Linux Parallel Processing HOWTO
http://yara.ecn.purdue.edu/~pplinux/pphowto.html
... and:
MP and Clustering for Linux
http://linas.org/linux/mp.html
One of the most famous Linux parallel computing projects (which has
been written up in the _Linux_Journal_ among other places) is the
Beowulf Project:
http://sdcd.gsfc.nasa.gov/ESS/linux.html
After you've been overwhelmed by reading all of that you can slog
through all of the links at:
Linux Parallel Processing Using Clusters
http://yara.ecn.purdue.edu/~pplinux/ppcluster.html
.... which include links to some classic Unix projects like "Condor,"
PVM, and MPI.
After reading all of those you'll undoubtedly decide that Linux is
years ahead of Microsoft in the field of clustering. (MS' "wolfpack"
project is still vaporware last I heard). However, lest we grow
complacent we should consider some features that Linux needs to
compete with mainframe and mini clustering technologies (like those in
VMS, and the ones that HP managed to eke out of their aquisition of
Apollo -- when they gutted DomainOS, from what I hear).
The two features Linux needs in order to attain the next level of
clustering capacity are "transparent checkpointing" and "process
migration."
"Transparent checkpointing" allows the kernel to periodically take a
comprehensive snapshot of a process' state (to disk or to some network
filesystem) and allows the OS to restart a process "where it left off"
in the event of a system failure.
(System failures that damage the checkpoint files notwithstanding, of
course).
"Process Migration" allows a node's kernel to push a process onto
another (presumably less heavily loaded) system. The process continues
to run on the new system without any knowlege of the transition.
At first it seems like "checkpointing" would cost way too much in
performance. However, it turns out that relatively little of your
system's RAM has been modified from the disk images (binaries and
libraries) in any given time frame. I've heard reliable reports that
this has almost trivial overhead on a Unix/Linux like system.
It's easy to see how "checkpointing" is a necessary feature to support
process migration. However, it's not enough. You also need mechanisms
to allow the target kernel to give the incoming process access to all
of the resources that it had allocated (open file descriptors, other
interprocess channels, etc). For Unix like systems you also have to
account for the process structure (the PID of the process can't
change) -- and there has to be some implicit inter-node communications
to maintain the process groups (to get a process' exit status to its
parent and to allow members of a process group to get status and send
signals to it.
There have been a number of operating systems that have implemented
checkpointing and process migration features. Chorus Mi/X, Berkeley
Sprite and Amoeba (a project that the father of Minix, Andrew S.
Tanenbaum, collaborated on) come to mind.
(see http://www.am.cs.vu.nl/ for info on Amoeba,
http://HTTP.CS.Berkeley.EDU/projects/sprite/ for Sprite, and
http://www.chorus.com for Chorus Mi/X info).
One Unix package that is supposed to offer these features is Softway
Ltd's Hibernator II. Just SGI and a Fujitsu mainframe version are
supported. This is probably an expensive commercial package and we
shouldn't hold our breath for a Linux port.
* http://softway.com.au/softway/products/hibernator.html
The MOSIX project also supports transparent process migration (imagine
that copy of emacs being moved from one overloaded CPU to an idle
machine while you were using it). It is currently available on BSD/OS.
However we're in luck! As I was typing this and checking my URL's and
references I noticed the following statement on their pages:
``MOSIX for Linux (RedHat) is now under development''
(Yay!).
You can read more about MOSIX (and see this note yourself) at:
http://www.cs.huji.ac.il/mosix/ (Hebrew University, Israel)
http://www.cnds.jhu.edu/mirrors/mosix/txt_main.html
One OS project that I've been keeping my eye on for awhile has been
EROS (http://www.cis.upenn.edu/~eros/). This isn't widely available
yet -- but I have high hopes for it. It will use a "persistence" model
that implicitly checkpoints the state of the entire system (all
processes and threads).
EROS is not "Unix" though it should eventually support a Unix/Linux
compatible subsystem (called Dionysix). The major difference is that
EROS is a pure "capabilities" system. ``Capabilities'' are the key to
a security model that is much different than the traditional
identity/group (Unix), process privileges (VMS and Posix.6), and ACL
(NT, Netware, etc) that are common in other operating systems. Read
Mr. Shapiro's web pages for more info on that.
I personally think we (in the Linux community) have quite a bit to
learn from other operating systems -- their strengths and their
weaknesses. To anyone of us who would say "But those are just obscure
systems. Nobody is running those!" I would point out that millions of
PC users still have that same reaction to Linux.
So, to learn *far* more than you ever wanted to know about operating
systems *other* than DOS, MacOS, and Unix take a look at the links on
my short page about OS':
http://www.starshine.org/jim/os/
-- Jim
_________________________________________________________________
IP Masquerading/Proxy?
From: Jack Holloway
Ok... I'm alittle foggy on the terminology... if I have a machine on
an ethernet network that is hooked to the internet, and I want all of
the other machines on the network to connect to the internet THROUGH
the machine connected to the internet, I need to use IP masquerading
or proxy server stuff?
You can use IP Masquerading and/or any sort of proxy systems.
IP Masquerading is a particular form of NAT (network address
translation).
The one machine (your Linux box) that is connected to your LAN and to
the Internet is the "router" or "gateway." ("routers" work at the
"transport" layer, while "gateways" work at the "applications" layer
of the OSI reference model). (More on that later).
One "real" (IANA issued) IP address is assigned to the "outer"
interface and attached to the Internet (through your ISP). This will
typically be a PPP link through your router/gateway's modem -- though
it might be any network interface that you can get Linux to use.
One the other interface (typically an ethernet card) you assign one
out of any of the "private" or "reserved for disconnected networks" IP
address ranges as defined in RFC1918 (previously in RFC1597 and 16??).
These RFC1918 addresses are guaranteed to never be issued to any
Internet host (so those of use using them on our networks will never
create an ambiguity with *our* router by attempting to access a
machine *outside* our network that has an IP address that duplicates
one *inside* of our network).
The RFC1918 address blocks are:
10.*.*.* (one class A net)
172.16.*.* through 172.31.*.* (16 class B's)
192.168.0.* through 192.168.255.* (255 class C's)
You can pick any of those RFC1918 address blocks and you can subnet
them anyway that's convenient. I use 192.168.64.0 for my home LAN.
Within my LAN I use the .1 address (192.168.64.1) for my Linux
gateway/router's ethernet -- it gets its other (real) IP address
dynamically from my ISP when 'diald' establishes a connection (diald
is a daemon that automatically invokes my ppp connection whenever
traffic routing to the network is required -- I actually have another
RFC1918 address assigned to the SLIP connection that diald uses for
internal purposes). I run a caching nameserver on this box (which
we'll call "gw").
All systems on my LAN execute a line like the following:
route add -net 192.168.64.0 eth0
... in their rc scripts at some point. This configures them to all
agree where packets for this network go. This is called a "static"
route.
I then point the /etc/resolv.conf on all of the "client" machines on
my LAN to "gw" and add a default route to each of them that looks
like:
route add default gw 192.168.64.1
# other traffic goes to host named "gw"
(the "client" machines don't have to be Linux and don't have to have
any special support for IP Masquerading -- you just assign them IP
addresses like 192.168.64.2, etc. to each of them).
In the "gw" server I have the kernel compiled with masquerading and
"forwarding" support enabled (of course). I don't put in the default
static route -- that would be a loop. "gw" also has a different
/etc/resolv.conf file -- one that points to a couple of my ISP
nameservers.
Note: One trick I've learned about resolv.conf files -- You only get
three nameserver entries (in most versions of the bind libraries) --
so I repeat the first and the last one. When a query times out (for a
client) it moves to the second nameserver. Meanwhile the first
nameserver still has a good chance of getting a response (DNS over
today's busy Internet times out more often than nameservers fail). So,
a timeout on the second nameserver leads to a repeat request on the
first one -- which has probably received and cached a response by this
time. I could explain that in more detail -- but the real gist is: try
it. It helps.
Now, back to masquerading:
All it takes for masquerading to work is to run the command
LAN="192.168.64.0/24"
ipfwadm -F -a accept -m -S $LAN -D 0.0.0.0/0
... which means:
use the "IP firewall administrative" program to make the following
change to the "forwarding" (-F) table:
add/append (-a) a rule to accept for masquerading (-m) any packet
from (-S or "source address") my LAN (which is a shell variable I
defined in the preceding line) that is going to (whose
"destination" -D) is anywhere (0.0.0.0/0).
Here's how that works. When the kernel receives a packet that's not
destined for the localhost (the gateway itself) it checks to see if
forwarding is enabled, then it looks in the routing table to see where
the packet should go. My gateway's default route is pointing to the
sl0 interface (the SLIP interface that diald maintains to detect
outgoing traffic) -- when diald detects traffic on sl0 -- it runs my
PPP connection script which changes the default route to point to my
ISP's routers (which is part of the information that's negotiated via
PPP along with my dynamic IP address). Now the packet is "forwarded"
from interface to the other. Assuming that the packet came from my LAN
(via the ethernet card in "gw" the kernel's packet filtering
("firewall") code takes over.
ipfw inspects the packet to see if it was part of an existing TCP
session (part of a connection that it has already been working with).
If it is than ipfw notes the TCP "port" that this session is assigned
to, otherwise ipfw just picks another port. If it picks a new port it
adds an entry to it's masquerading table that records the packet's
original source address and source port. The "client" machine on my
LAN is expecting any reply packets to come back to the appropriate
source port (which is how it knows which process' "socket" to write
the reply packets to) -- ipfw then re-writes the packet headers,
changing the source address to match the one on ppp0 (the "real IP
address for which my ISP knows a route), and changing the source port
to the one it selected.
When ipfw receives reply packets the kernel routes them to sockets
which ipfw owns (the source port on my outgoing packets becomes the
destination port on the reply packets). ipfw then looks that socket up
in its table, retrieves the *original* source addr and port (for the
outgoing packet that generated this reply) rewrites the destination
fields (on the *reply* packet). Finally the (now re-written) packet is
routed to the LAN.
Effectively IP Masquerading makes a whole LAN full of machines look
like one really busy one to the rest of the Internet. While a typical
workstation might only have a few dozen active network connections
available, a masquerading gateway might have hundreds or thousands. As
a practical matter the TCP/IP protocol provides a 16 bit field for
"ports" and Most Unix systems can't handle more than a few thousand
concurrent open connections (sockets) and file descriptors. (This has
to do with the tables that the kernel allocates for the data
structures that manage all this -- regardless of whether masquerading
is active or not). Luckily you're unlikely to have enough bandwidth to
approach Linux' capacity.
I'm sorry for the length of that description. Note that it is purely
conceptual (I've never read the code, I've just deduced what it must
be doing from what I know of how TCP works).
Ouch! That's a big question there! Ok, firstly, do own IPs for every
machine on your network? (That is, do you have an internet unique IP
for each machine) If so, all you want is routed. If you don't, then to
'routed' is deprecated. In addition he doesn't need routed or gated to
talk to his ISP (and almost certainly can't use it with them -- they
won't listen to his routes unless he goes out and gets an AS number
and negotiates a contract for "peering" with them which would absurd
unless he were becoming a multi-home ISP or something like that).
The case where routed or gated makes sense is with his own
internetwork of LAN's. If he has several ethernet segments and is
moving systems around them frequently (or adding new IP devices to
them) then it would be be useful. For simpler and for more structured
LANs (each ether segment gets a subnet -- a global, static routing
table is distributed to all routers) you don't need or want 'routed'
or 'gated'.
If he had a block of ISP (or IANA) issued IP addresses, his ISP would
have to include routing to them (they don't make sense otherwise).
Usually this amounts to some static routes that they maintain in their
systems -- specifically some entries that are invoked whenever your
system authenticates on one of their terminal servers or routers.
You don't have to run any software on your end to make use of this
routing. (That's a confusing statement -- you have to run PPP or SLIP
to connect to them -- but once you're connected they will route
packets to you even if your routes back to them are completely
missing).
As I've described above -- you just have to have your own LAN routing
set up properly. That means that each system on your LAN has "-net"
routes unto your ethernet and a "default gw" route to your
router/gateway (masquerading host).
browse the web you can use a proxy server(which looks to the outside
world as if only the proxy is actually on the net.). If you want to
telnet etc. out, you will need IP-Masquerading, which isn't the most
reliable way of doing things. ask me further in email if you need more
detail!
I disagree with several points here. Both masquerading *and* proxying
look like "only the proxy is actually on the net." -- because only the
router/gateway has an IP address with valid Internet routes. The rest
of your LAN is "hidden" (behind your "gw") because those IP addresses
don't have valid Internet routes. The are IP addresses but they are
not *Internet* addresses!
Proxying is an applications layer solution. Masquerading and NAT are
transport layer. The difference is what data structures the software
is dealing with.
At the network layer we're working with "data frames." This is what an
ethernet bridge or switch uses -- the MAC (BIA) addresses. That's also
the layer at which ARP (address resolution protocol) works. It's how
one host finds finds the ethernet card address of another system
that's on the same LAN (how our client machines "find" our router/gw).
At the transport layer we deal with packets. These have IP addresses
(as opposed to the MAC -- media access control -- addresses in the
ethernet "frame" header). This is where the masquerading happens. As
I've described masquerading involves a relatively "dumb" (mechanical)
bit of packet patching with some table reference and maintenance.
Technically there are some details I left out -- like recomputing the
packet checksums.
The problem is that the transport layer conveys no information about
the applications protocol for which it is a carrier. For "normal" TCP
protocols (like HTTP and telnet) this is no problem. However, FTP and
a few other protocols do "bad" things. In particular an FTP session
consists of *two* TCP sessions (a control session which is initiated
from the client to the server) and a data session which is initiated
from the server back to the client! The IP address and port to which
this "return connection" goes is passed to the server via the control
connection. This last detail has caused more firewall designers and
admins to rip out their hair than all the cheap combs from China. In
the context of masquerading it means that the masquerading server must
monitor the *data* (the stuff in the payloads of the packets) and make
some selective patches therein. In the other cases we only touched the
headers of each packet -- never the contents of their payloads.
So, this is the part of Masquerading that is unreliable. Linux IP
Masquerading is by no means the only flavor -- though it's probably
the most widely used by now. Linux as several modules for dealing with
unruly protocols -- so the usually work.
However, I've found it more reliable to use the TIS FWTK ftp-gw
(Trusted Information Systems http://www.tis.com, Firewall Toolkit).
This is a proxy.
Proxy packages work at the applications layer. You have to have
support for each applications protocol (http, ftp, telnet, rlogin,
smtp, etc) that you want to allow "through" your firewall. They come
in two forms: SOCKS and FWTK (There are many of them besides these --
but all of them follow one *model* or the other).
In the FWTK model the user opens his or her initial connection to the
firewall (I 'ftp' to gw.starshine.org). The firewall (gateway) is
running the FWTK proxy *instead of* (or *in addition to*) the normal
server (ftpd). If it is "in addition to" than one or the other must be
on a different port or using a different IP Alias on the machine (more
on that later). Now my FTP server (ftp-gw) prompts me to "login"
For a normal FTP server I'd type my name (or "ftp" or "anonymous").
For ftp-gw I'm trying to go *though* this machine and unto one that's
on the other side (on the Internet). So I have to provide more
information. So I type:
ftp@sunsite.unc.edu
... or
webauthor@www.svlug.org
... or whatever. The gateway ftp server then opens a connection to my
target (everthing *after* the @ sign) and passes my name (everything
before the @ sign) to *its* login prompt.
The TIS FWTK comes with a number of other small proxies -- and most of
them work in a similar fasion. (There are also options to limit *who*
can access *what* and *when* (via administrator edited access control
lists).
The key point here is that FWTK doesn't require any special client
software support. The users have to be trained how to traverse the
firewall and the have to remember how to do it.
FWTK is only appropriate for relative small groups of technically
savvy users (who are easy to train in this and won't make the
sysadmin's life a constant hell of walking everyone through this extra
connectivity step).
SOCKS has a model that works for larger groups of less savvy users.
However, it requires that you install SOCKS aware versions of your
client applications. So you have to replace your normal telnet, ftp,
rlogin, etc with a "socksified" version. In many cases it is possible
to effectively "socksify" all of your client utilities by replacing a
shared library (Unix/Linux) or a DLL (Windows). Many commercial TCP
clients and utilities are built with SOCKS support (Netscape Navigator
and Communicator are prime examples). I think the Trumpet shareware
utilities for Windows are another.
The hassle is installing and configuring this software on every client
system. However, the advantage is that none of the users has to
remember, or even know, about the firewall. The SOCKS applications
will automatically negotiate sessions through the firewall.
There are some protocols that are inherently easy or even unnecessary
to proxy. For example DNS doesn't need to be proxied. You run your
caching copy of named and let all of the client machines talk to and
trust it. This gives a great performance boost to most of the clients
and saves quite a bit of bandwidth on the critical link to the ISP.
There is no reason that I can think of not to run a caching nameserver
somewhere on your Internet connected LAN.
HTTP is a protocol that benefits quite a bit from proxying. It is
trivial to add caching features a web proxy -- and I think just about
all of them do so.
SMTP is a protocol that doesn't need proxying (from the standpoint of
the clients on your LAN). You configure an internally accessible
system to accept mail and it will relay it to your gateway via
whatever means you configure. A typical model would be that outgoing
mail is collected on an internal hub, which is configured to relay it
to the external gateway, which, in turn, relays it to the ISP and on
to the world. To see what this looks like read the "Received" headers
in some of your mail.
The externally visible mail gateway can route mail back to the
internal hub -- which can run POP and/or IMAP servers for the clients
to use to actually get their mail. (You could have the internal hub
route all of the mail directly to people's desktops via SMTP too.
The reason you generally don't need proxying for SMTP is that most
sites use some form of masquerading (mail appears to come from the
"domain" rather than from a particular host whithin the domain). FWTK
includes smapd -- and there is an independent and free smtpd which act
as proxies for sendmail. Here the intend is to have a small simple
program receive mail and pass it along to the larger, vastly more
complicated 'sendmail' itself. (I don't want to get into the raging
debates about sendmail vs. qmail etc -- suffice it to say there are
many alternatives).
Note that masquerading and proxying are not mutually exclusive. I use
masquerading and I have ftp-gw and squid (caching web service)
installed. I could also install SOCKS on the same gateway.
Incidentally I mentioned that it's possible to run ftpd and ftp-gw on
the same machine without putting them on different ports. Here's two
ways of doing that:
IP Aliasing method:
1. You install ftpd and ftp-gw
2. You create an IP Alias (you add an extra address to your gateway
system's internal interface with a command like:
ifconfig eth0:1 192.168.64.129
3. You configure your TCP Wrappers to virtual host a service by
adding a line like this to your /etc/hosts.allow file:
in.ftpd@192.168.64.129: 192.168.64. : twist /usr/local/fwtk/ftp-gw
This will "twist" any ftp request *to that IP alias* into an ftp-gw
session. FTP requests to any other interface address will be
handled in the usual way (tcpd will launch the ftp daemon that's
listed in inetd.conf).
That's all there is to that method. Note that you can to other
interesting things with this sort of virtual hosting, if you're
clever.
Loopback Twist method:
1. Install ftpd and ftp-gw (as you would for the other method).
2. Configure tcp wrappers to allow normal ftp access *from* the
localhost address (127.0.0.1)
3. Configure tcp wrappers to twist any other ftp requests into ftp-gw
That looks like this (in the /etc/hosts.allow file):
in.ftpd: 127.0.0.1 : ALLOW
in.ftpd : ALL : twist /usr/local/fwtk/ftp-gw
WARNING! This second line would allow *anyone* (from inside or
outside) of your LAN to access the proxy. However, ftp-gw reads a file
-- /usr/local/etc/netperm-table according to the way I compiled mine
-- to determine who is allowed to access each of its proxy services.
So, this line is neither as dangerous as it looks nor as safe as it
should be. Changing it to:
in.ftpd : LOCAL : twist /usr/local/fwtk/ftp-gw
... is safer and more appropriate.
One key point here is that you can use proxies on your masquerading
route/gateway to allow access from the "outside" back *into* services
inside your LAN. Usually you want to prevent this (the whole point of
a firewall). However you can use tcpd and netperm to allow specific
'friendly' networks to get to servers on one of your LAN's, despite
the fact that there are no routes directly to those machines.
This brings us back to other forms of NAT. I mentioned at the get-go
that masquerading is one form of NAT. It specifically involves a "many
to one" arrangement. (The "many" clients on your LAN appearing as
"one" connection to the Internet).
Another form of NAT is "many to many" -- where you have a table
translations. Thus each of your systems might be configured to use one
address, and be translated to appear as if it came from anoter. I
personally don't see much use for this arrangement. The one case I
could see for it might be if you had a net of devices that you
couldn't renumber, which had "illegal" or "invalid" addresses.
One other form of NAT involves a different "many to many" translation
-- its not currently available for Linux but it's used in the Cisco
Local Director product. This is a trick for doing IP level load
balancing. You have a "reverse masquerade" host accept requests to "a"
busy server (one service on one IP address) and you have it masquerade
the session to any of multiple "inside" machines that have the same
service and content available.
For load balancing it's trivially easy to use DNS "round robin
records" -- so I don't see much application for this form of NAT
either.
Anyway -- that's all I have the energy to type for now.
I hope this explains the terms and concepts and gives you enough
examples to set up what you want. For the most part you can just use
the one magic ipfwadm command to "turn on" masquerading. The rest is
just the configuration of your network and of your ISP connection --
which you've presumably already done.
-- Jim
_________________________________________________________________
Copyright © 1998, James T. Dennis
Published in Linux Gazette Issue 27 April 1998
_________________________________________________________________
[ TABLE OF CONTENTS ] [ FRONT PAGE ] Back Next
"Linux Gazette...making Linux just a little more fun!"
_________________________________________________________________
Autologin with mingetty
By John Kodis
_________________________________________________________________
In Issue 26 of the Linux Gazette, Todd Blake,
tbb@enterprise.aacc.cc.md.us, wrote in to ask:
"I like most people am the only person to use my linux system at
home. What I'd like to do is when my system is done booting to have
me automatically login as my main user account (not as root though)
on one virtual console (the first) and leave all other consoles and
virtual consoles alone, so that someone telneting in will get a
login prompt like normal, just that I won't. I'd still like the
other VC's have logins for others to login and other reasons. I've
tried just putting /bin/sh in /etc/inittab and that didn't work,
and I'm stumped. Does anyone have any ideas on this?"
I was in the same situation. I saw this question come up regularly in
various newsgroups, but never with a satisfactory solution being
proposed. Recently I came up with a solution that does just what Mr.
Blake requested. I did this by making a few changes to Florian
LaRoche's mingetty program, which is used issue the login prompt on
virtual consoles in most Linux distributions. These changes allow a
user to be automatically logged onto the console terminal as soon as
the system boots. I got the idea for this patch after reading about a
similar feature provided on SGI's Irix operating system.
Here's the description of the autologin feature that I've added to the
mingetty.8 man page:
--autologin username Log the specified user onto the console
(normally /dev/tty1) when the system is first booted without
prompting for a username or password.
When the autologin option is supplied, mingetty will check that the
controlling terminal is the console (normally /dev/tty1), that a
reasonable username has been supplied, and that this is the first
autologin request since the system has booted. If all of these
conditions have been met, a request for an unauthenticated login is
passed to the login program. Otherwise, a normal interactive login
is performed.
The login program may deny the request for an unau- thenticated
login. Typically this will happen when the user is root, has a UID
of 0, or whenever a normal interactive login would be denied due to
the access restrictions specified in the nologin, usertty, or
securetty files.
Only a single autologin request will be issued after a system boot.
If the automated login request is denied, or if the user logs out,
mingetty will revert to performing normal interac- tive logins for
all subsequent login requests.
I've placed unified diffs against the mingetty-0.9.4 version of
mingetty.c and mingetty.8 on my web page at
http://www5.jagunet.com/~kodis/. The patched version of mingetty logs
me in on the first virtual console when my computer first boots, while
leaving all the normal Unix security measures in effect for all but
this one specific console login.
To use this patch, you'll have to first obtain the sources for the
mingetty program, preferably with any patches used in your Linux
distribution. After applying the patch file from my web page, you will
have to rebuild the mingetty program, and install it and the patched
mingetty.8 man page in the appropriate directories after saving the
original versions.
The inittab entry for the first VC will then have to be modified to
put the autologin feature into effect. In my /etc/inittab file, this
line now reads:
1:12345:respawn:/sbin/mingetty --noclear --autologin kodis tty1
Rebooting after making these changes will insure that init has spawned
the new version of mingetty, and if all is well, will automatically
log you on to the console.
Since I normally use X whenever I'm logged in at the console, I've
added the following few lines of code to my .zlogin and .bash_profile
scripts. This code queries "Start X [Yn]? " when initially logged in
from the first virtual console, and waits 10 seconds for a response.
Entering Y or allowing the timeout to occur results in X being
started. On exiting X, a similar timed query asking "Log out [Yn]? "
is issued, giving the option of logging out or being dropped into a
text console.
case `tty` in
/dev/tty[1])
echo -n "Start X [Yn]? "
expect \
-c 'stty raw' \
-c 'set timeout 10' \
-c 'expect -nocase n {exit 1} -re . {exit 0}'
if [ $? = 0 ] ; then
startx
echo -n "Log out [Yn]? "
expect \
-c 'stty raw' \
-c 'set timeout 10' \
-c 'expect -nocase n {exit 1} -re . {exit 0}'
if [ $? = 0 ] ; then
logout
fi
fi
echo
;;
esac
These few changes combine to make getting logged on and running X on a
Linux box as easy as turning the power on. Here's hoping that this
proves useful for Mr. Blake and any of your other readers who find
themselves in this situation.
_________________________________________________________________
Copyright © 1998, John Kodis
Published in Issue 27 of Linux Gazette, April 1998
_________________________________________________________________
[ TABLE OF CONTENTS ] [ FRONT PAGE ] Back Next
_________________________________________________________________
"Linux Gazette...making Linux just a little more fun!"
_________________________________________________________________
Checking Out SPARC-Linux with SLXT
Grab a bargain SPARC
By John Little
_________________________________________________________________
There are lots of Sun SPARCstations coming onto the second-hand
market, or even being given away for free, nowadays. The attractions
of a SPARC are numerous. The graphics resolution of a typical
SPARCstation is 1152x900 (either monochrome, 8-bit or 24-bit colour),
all machines have built-in ethernet controllers and all come with
on-board SCSI.
Unfortunately, there are also a couple of drawbacks. It's not unusual
for these machines to come onto the market with only very small
internal disks (dual 100MB or a single 200MB is fairly common), or
even minus disks completely and, as anyone who has bought one recently
will tell you, SCSI disks are still more expensive, megabyte for
megabyte, than their IDE cousins.
There's also a SPARC-Linux specific problem, commonly referred to as
the "IPC slowdown bug" which, as the name suggests, plagues some of
the low-end Sun4c architecture machines, especially the IPC,
SPARCstation 1 and 1+ models. This doesn't affect all machines (which
is one of the reasons that a fix is proving difficult to find), but on
those which it does, even simple operations such as an "ls /etc" can
take several minutes. It's the computing equivalent of that nightmare
which everyone has had at one time or another where you're trying to
run away from something horrible, through waist-deep, sticky treacle.
So, if your SPARCstation comes without a disk, or you load SPARC-Linux
and your machine proves to be one of the ones susceptible to treacle,
what can you do?
Don't panic!
All is not lost. SPARCstations make excellent Xterminals. As already
mentioned, they come equipped for the job with on-board ethernet and
high resolution graphics. Even the most treacle-bound IPC will provide
adequate performance for most users when served by an i386 level
machine and absolutely stunning performance when served by a machine
of Pentium-level performance. The secret is, of course, that
application processing is offloaded onto the server, while the
SPARCstation runs only a cut-down kernel and the Xserver process. This
is basically a SPARC-Linux implementation of Seth Robertson's Xkernel
package. The principal of operation is the same, but the binaries,
libraries and code are 100% Linux (it is important to note here that
there's no Sun code included in the package, so you do not need a Sun
"Right To Use" software licence to run the SPARC-Linux Xterminal
package).
NOTE - People are frequently confused by the Xterminal concept and the
fact that when they log-in to an Xterminal they find themselves in a
shell on the server. Perhaps the easiest way to understand it is to
think of the Xterminal as simply being a display attached to the
server (which, in effect, it is) and of the Xterminal hardware as
being a remote video card.
The SLXT package contains a SPARC-Linux, network-bootable kernel for
sun4c and sun4m architectures, as well as scripts to automate the
installation process and the administration of Xterminal clients. The
scripts are Linux specific, but the package can be installed manually
(on virtually any system which provides tftpboot and X support) in
about ten to fifteen minutes by an experienced system administrator.
The author has run SPARC-Linux Xterminal clients from Solaris servers,
as well as from a variety of Linux machines.
Because the kernel is cut down, it will run quite happily on a machine
which has only 12MB of main memory (an 8MB machine will boot, but will
eventually crash with "out of memory" errors). In fact, because the
system only runs the kernel and Xserver processes, any more than about
24MB of main memory is wasted, as it will never be accessed. The
kernel is small because it does not contain any disk or floppy
drivers. This also means that the SPARC-Linux Xterminal package can be
booted on an existing, diskfull machine with no fear of accidentally
overwriting the filesystems, thus making it possible to have the same
machine boot, say, Solaris from an internal disk, or come up as an
Xterminal when booted over the net. Of course, at around 2.5MB, the
SLXT package is also much easier to download than the full SPARC-Linux
distribution if you just want to check whether your system will run
the Linux kernel.
Booting SLXT
Before you can boot your SPARC client machine, you'll need to make a
note of the ethernet address (the add_xterm administration script will
ask for this information). This is visible, along with information on
the boot PROM revision and memory size, immediately after the power on
selftest has completed. Your machine will probably be set up to boot
directly from disk, so you may need to hold down the "Stop" and the
"a" keys simultaneously to prevent the ethernet address from scrolling
off the screen (this key sequence is commonly referred to as an "L1-A"
in Sun circles because the "stop" key is also the first key on the
left-hand keypad of a Sun keyboard).
After entering the ethernet address and choosing a hostname and IP
address for your client, add_xterm will update the configuration files
and the ARP and RARP caches on your server. You can then boot your
SPARC client using "boot net" (from the "ok" prompt), or "ble()" (from
the ">" prompt), depending upon which revision of boot PROM your
machine has.
The most common question asked about the SLXT boot process is "Why
does it take so long to boot?".
The answer is that the machine is downloading a complete kernel image
from the server and then executing it, unlike a normal SunOS or
Solaris boot, where the bootstrap reads in a second-stage loader,
which in turn downloads the kernel. Be patient! Once the kernel is
downloaded, the time taken to start the Xserver process and display a
login prompt is very much shorter than the rest of a typical
SunOS/Solaris boot. You'll need to be very quick to catch a glimpse of
the SPARC-Linux, beer-swilling penguin.
More Information
The SLXT package includes a FAQ, a CHANGES file and a package info
file. Unfortunately, at the time of writing the version on SunSite had
not been updated for some time (the last update, along with dozens of
other packages, is still languishing in the Linux/Incoming directory).
The latest revision, along with documentation, should always be
available from the author's home site at
http://www2.gol.com/gaijin/Linux, though.
_________________________________________________________________
What do you need to run your SPARC as an Xterminal client?
* You must have your SPARCstation connected to a network on which
there is at least one other machine. This second, "boot server"
machine must have a minimum of 7MB of free space available for the
SPARC-Linux Xterminal package, and should have a complete X11
tree. It can be anything from a standalone i386 Linux system
upwards (although it obviously makes sense to use a server which
is more powerful than the clients, especially where multiple
clients will be operating simultaneously).
* Your SPARCstation must have at least 12MB of main memory (it will
boot with 8MB, but will crash with "out of memory" errors as soon
as you start using applications). In the same vein, because the
client machine only runs a Linux kernel and the X-server process,
any more than about 24MB of memory is a complete waste.
* Your SPARCstation does NOT need a disk. There are no disk drivers
included in the kernel, so even if the machine has a hard disk
installed, it can not be accessed (this also means that it is
quite safe to use a diskfull system for testing).
* Your SPARCstation must have a frame-buffer, monitor and keyboard.
_________________________________________________________________
The gzipped-tar file, for the current version, SLXT_0.5c.tar.gz is
approximately 2.5MB and will take up slightly more than 6MB when
installed.
_________________________________________________________________
Last updated: $Date: 2003/02/03 21:50:19 $.
gaijin@pobox.com
_________________________________________________________________
Copyright © 1998, John Little
Published in Issue 27 of Linux Gazette, April 1998
_________________________________________________________________
[ TABLE OF CONTENTS ] [ FRONT PAGE ] Back Next
_________________________________________________________________
"Linux Gazette...making Linux just a little more fun!"
_________________________________________________________________
EMACSulation
by Eric Marsden
_________________________________________________________________
This column is devoted to making the best use of Emacs, text editor
extraordinaire. Each issue I plan to present an Emacs extension
which can improve your productivity, make the sun shine more
brightly and the grass greener.
Ediff: an Emacs interface to diff and patch
Never read that diff output again!
Apply patches interactively!
Merge with ease!
Ediff is a powerful package by Michael Kifer which lets you browse
through the differences between files and directories, merge files
which have been revised by coworkers, and apply patches interactively.
Let's start with the simplest use : eyeballing the differences between
two versions of a text file. Either type M-x ediff, or from the
menubar go to Tools -> Compare -> Two files (yes, it's something else
on the XEmacs menubar). Ediff will prompt you for two files to
compare, open them and ponder a bit (while running diff as a
subprocess). Emacs will open a small control window, and show you
something like this
Comparison of two files [21 kB]
(for the curious, the window manager is a slighly modified version of
Chris Cannam's almost-minimal wmx). Differing lines --or hunks in diff
parlance-- in the two files are highlighted in grey, and you can step
through them by typing n (next) or p (previous) into the control
window. The active hunk is highlighted in color, with the exact words
which differ displayed in a separate color (this process is called
refining, and is done by Emacs itself, not by diff). Naturally Ediff
works best when run under a windowing system, but it does work in
degraded mode in the console.
You can use all your normal keybindings in the two buffers being
compared; ediff-specific commands must be typed into the control
panel. To obtain help, type ? while focus is in the ediff control
panel; it should warp into a reassuring help window something like
Ediff help window [7 kB]
Merging files
Ediff can help you merge two files into a third file, a little like
the command-line tools sdiff and merge. Type M-x ediff-merge to enter
merge mode and be prompted for two filenames. The Emacs frame will
then be split in three, with the two files to be merged side by side
in windows named respectively A and B, above a buffer containing their
merge. It should look a little like this (23 kB). The normal width of
your Emacs frame may be a little limiting for two files side by side;
you can type m to widen the frame.
For each hunk you will then be able to choose which files to make
authoritative (ie which version to include in the merge). Type a to
choose the version in the buffer labelled A, b for the other buffer,
or + to include both (you can then edit the merge buffer to select
bits of both). You can also merge files with respect to an ancestor,
if for example two people have made independent changes to a common
original.
Interactive Patching
We come to one of the most amusing uses of Ediff: applying a patch
interactively from the comfort of Emacs. No more reading diffs ``by
hand'', no more fiddling around with rejects. Type M-x
ediff-patch-file to start the fun and be prompted for a patch file and
a filename. The Emacs frame will be split vertically with the original
file above, and the patched file below. You step from hunk to hunk
like for a diff, and can selectively restore certain regions from the
original file (undo parts of the patch) by typing a.
Ediff also has an excellent integration with Emacs' version control
interfaces, which lets you compare different revisions of a file. Open
a file under version control (Emacs detects this automatically) and
type M-x ediff-revision; you will be prompted for the two version
numbers to compare. Ediff will check out the two revisions and run
diff on them. This seamless integration is extended to remote and
compressed files : your patches can be compressed or on a distant
machine, and Ediff will work things out all by itself. You can even
(not tested!) apply a gzipped remote patch to an old version of a
compressed file on another machine, so there.
I've only described the most common uses of Ediff : it can also
compare three files (ediff3), compare buffers, compare directory
contents, and apply multi-file patches. Many aspects of the
presentation can be customized. It has a registry of current ediff
sessions which may be useful if you're a heavy user. Read the online
documentation to know all about it.
For they have entertained cause enough
To draw their swords. But how the fear of us
May cement their divisions, and bind up
The petty difference we yet not know.
Be't as our gods will have't! It only stands
Our lives upon to use our strongest hands.
William Shakespeare, Antony and Cleopatra
Feedback
A few people pointed out to me that ffap is not included with both
Emacsen as I claimed in last month's column, but only with GNU Emacs.
XEmacs users can obtain the latest version from Michelangelo Grigni
(the author)'s ftp site. I also incorrectly attributed a message from
Christopher B. Smith to another Linux user, Christopher B. Browne; my
apologies to both Christophers.
Next time ...
In the next issue I'll review emacsclient/gnuserv, a mechanism for
sending messages to a running Emacs process. Don't hesitate to contact
me at <emarsden@mail.dotcom.fr> with comments, corrections or
suggestions (what's your favorite couldn't-do-without Emacs extension
package?). C-u 1000 M-x hail-emacs !
PS : Emacs isn't in any way limited to Linux, since implementations
exist for many other operating systems (and some systems which only
halfway operate). However, as one of the leading bits of open-source
software, one of the most powerful, complex and customizable, I feel
it has its place in the Linux Gazette.
_________________________________________________________________
Copyright © 1998, Eric Marsden
Published in Issue 27 of Linux Gazette, April 1998
_________________________________________________________________
[ TABLE OF CONTENTS ] [ FRONT PAGE ] Back Next
_________________________________________________________________
"Linux Gazette...making Linux just a little more fun!"
_________________________________________________________________
Evangelism: A Unix Bigot and Linux Advocate's Spewings
By David A. Wagle
_________________________________________________________________
Table of Contents
* Introduction: What's the Point?
* A Conversion Story?
* Why Linux Didn't Work
+ What Learning Curve?
* The Problem and Three Solutions:
+ Big Blue, Round Two
+ OK, Take A Deep Breath!
+ Putting one foot in front of the other
* Why it isn't happening?
* Conclusion
Introduction: What's the Point?
Linux users are a notorious bunch. We tend to be vociferous OS bigots
of the first order. This is a trait that has served the software
community well. After all, if we were not that way we would never have
put the time and effort into developing, deploying, and supporting the
thing. But it also a trait that has drawbacks. Some of these drawbacks
are serious, and effect our ability to present Linux as a serious
alternative to other, more prominent OS's (using the term, in many
cases, very loosely).
I'm not going to try to present the Linux alternative in anything but
a fair and honest way. That means I'm not going to be talking about
the possibility of loosing your job for choosing Linux -- after all,
that is not a problem that is unique or limited to any one OS. The
fact is that when you choose the wrong tool for mission critical
applications, you should be called to task for that choice. This is
regardless of the OS's involved. Likewise I will not clamor on that
Linux is the one, true solution to all problems. Such a statement,
however much I'd like it to be so, is just as foolish.
But, I wish to be clear that I will not have many good things to say
about those other OS's. For the most part they are deserving of their
poor reputations and of the scorn of any true Linux afficionado.
Still, there are better and worse ways of promoting the Nearly One
True OS that is Linux. In this paper I would like to discuss some of
those options.
A Conversion Story?
A few weeks ago I helped a friend (we'll call him Mike, being that
that is his name and I could care less about his anonymity) install
Red Hat 5.0 on his system. I made certain that all the configuration
files were properly tweaked for his particular computer. I installed
KDE, and made KDM the default login method. I set up his networking,
making sure that it handled everything seamlessly in the background.
Then I showed him where the docs, howto's, mini-howto's and the like
were located. I spent time with him making sure he knew how to use
info, find, grep, ps, which, apropos and the man pages. After a few
hours of work and teaching, I went my happy way convinced that another
conversion to the Linux way (tm) had taken place. After all, Mike
hated Windows and had had nothing but problems with both 95 and NT.
But the next week when I stopped over, I found my friend was back to
running Windows 95, unhappy as ever about his daily crashes and
computer problems. It is important to understand that Mike isn't some
luser; rather, he is a sophisticated computer professional with
substantial computer knowledge. He has been a consulting parter with
me for major corporations, and has worked on developing a number of
expert systems. He knows his stuff very well. So why, then, did Mike
fail to embrace the Linux alternative?
Why Linux Didn't Work
The answer, unfortunately, is one we advocates hear all the time. The
new user of the Linux system finds that the learning curve is too
steep to be manageable. Like many other people, Mike has a real life -
he has a job, a girlfriend, various projects and hobbies, and he can
not spend all his free time learning a new way of being productive.
Moreover, he can't afford to devote the days or even weeks it might
take him to learn how to administer a system so that he can accomplish
even simple tasks. He needs to be productive today, and tomorrow, at
the same rate he was yesterday. Because Mike is already familiar with
the system and applications on the windows box, and not with those on
Linux, he could not afford to switch. When the initial learning curve
is so steep getting to be equally productive when moving from another
OS to Linux can be daunting. This is even more true if one is an
expert user on the non-Linux machine.
What Learning Curve?
Many OS Bigots (myself included on my more polemical days) will
counter that it is simply untrue that it takes that long to learn a
new system. Or we'll simply deny that Linux is really all that
complicated. Instead of recognizing any validity in the statements
made by the complainants, we attempt to invalidate the complaint by
suggesting that the person in question must be a luser instead of a
user. ``I learned Unix in a couple of hours,'' or ``Heck, just pick up
Unix Unleashed and read it,'' are statements that carry the
implication that the person being addressed is somehow not as
competent as the speaker.
This approach does more damage to the Linux (and Unix) community than
many people realize. We have good solutions to many problems, but if
we aren't willing to take the people who need those solutions
seriously, we will not be heard.
The Problem and Three Solutions:
So, the question arises, ``How do we Linux users, developers, and
advocates help those with limited time for learning new systems make
the switch?'' There are several answers to this question, but they
almost all fall into three categories. I call these categories the
OS/2 revisited approach, the suck it up approach, and the delayed
skill transfer approach. What are these methods? Glad you asked!
Big Blue, Round Two
The first, the OS/2 revisited approach, consists of making windows
available on or under the new OS. IBM had moderate success in getting
dissatisfied users to switch to their products by providing a
technically superior system that managed to provide the user with
their favorite windows applications. Linux has a number of programs
and libraries available that help with this approach. DOSEMU, the TWIN
library, WINE, WABI, and others are all efforts to provide the user
with access to his favorite MS products.
This approach has some big dividends. The user is able to transfer
many of his or her skills immediately. There is little trepidation in
wondering how to do word processing on the very same word-processor
you've been using for the last 2 years. There is far less worry about
being able to get your work done when you don't have to worry about
finding and learning new applications in order to accomplish your
normal tasks.
However, this approach does have some problems. Today, the most
obvious is that windows95 apps are not nearly as portable to Linux
emulation as are the older 3.x apps. This means that many users are
not able to bring over their favorite applications any more. Rather,
the user needs to find and obtain an outdated version of his or her
favorite product. The user then will need to worry about reformatting
old data and projects to use the older program, as well as concerning
themselves with being able to share their data seamlessly with
coworkers.
Another major drawback with this approach, as IBM found out, is that
the users are not encouraged to explore the power of the underlying
OS. ``A better memory manager for windows'' is not what Linux is
about. It is not what it does best. And, like OS/2, eventually users
who use it for that purpose will realize that the increased complexity
doesn't pay out any real dividends. The reason OS/2 failed (regardless
of what the various OS/2 pundits say, it is dead) is the same reason
these various projects will never really be the answer to Linux
advocacy. They don't really solve the problem of getting users up on
the new OS. All they do is offer a false sense of security at a cost
of complexity and a lack of compatibility with state-of-the-art
Windows environments (if there is such a thing.)
The trend to develop Windows95-like applications such as StarOffice on
Unix platforms seems to be an extension of this methodology. Instead
of embracing the tenants of ``small is beautiful'' and ``make each
program do one thing well,'' these development efforts are aimed at
reproducing the Suite on Unix. The advantage of this, is, of course,
that it is what managers expect to find on their computers. The
disadvantage is that the ``Office Suite,'' in all it's ugly, bloated,
glory is now nestled into the Unix culture. Most true devotee's of
Unix will likely dismiss these suites as being against the Unix grain.
Still, they present a way to move reluctant Windows95 people into the
Unix world.
OK, Take A Deep Breath!
The suck it up approach, also known as the sink or swim method can and
does work. I, for example, simply reformatted my hard-drive one day,
and never looked back. However, for most people in real-life business
environments, this isn't possible. Unlike most people, I really did
have lots of time to explore my system, and being in graduate school,
I had few applications I really needed to run. ``Mission Critical''
doesn't apply to most people in master's programs. Like the example of
Mike, above, the real user just doesn't have the time to waste on
learning how to be productive all over again. Still, for some users,
it can work. The key is having good teachers who are also good system
administrators on hand to help the user along. Had I been willing to
visit Mike on a daily basis to hand hold while he got up to speed, he
would probably be running on Red Hat instead of Redmond.
The advantage to this method is that it doesn't rely on a sense of
security. Unlike OS/2 revisited, the suck it up'ers have to dive into
the system, they have to tackle the learning curve, and with good
teachers it can happen fairly quickly. Most people can learn the
basics of Emacs, LaTeX, Unix shells and command lines, and the various
other Unix tools and tricks in a week or less. While there may still
be some touch and go moments when problems with system administration
raise their ugly head, for the most part, after some intensive
training and a few moments of butterflies in the stomach, the person
can manage to get along.
The problem with this approach is, of course, that it takes a leap of
faith, that most people are very leery of making. And, I might add,
they are right to be leery of doing it this way. Some people simply
won't get the new way no matter how patient you are, because they will
be stressing out over some project that they are working on. Others,
because of various concerns about being able to get the job done,
simply won't leave the tried and true - no matter how obvious it is
that it is really tried and found wanting. Let's face it, most people
are nervous about the unknown, and moving to Linux is the unknown for
someone whose only computer experience is MS or Mac based. Here again,
the aforementioned Office-ish suites can come in very handy. While
rarely the best tool for any one job, they can be used to make the
suck it up'er more comfortable in his or her new environment.
It is important to realize that there is always the occasional person
whose task still can not be adequately completed under Linux. There
are specialty apps which require MS or Mac products to run. For these
people, leaping before looking, long and hard, can be disastrous. And,
we gurus need to be aware that one story from such a person on
newsgroups and mailing lists goes as far as ten stories of positive
experiences. Trying to coerce most people into the suck it up method
is just asking for trouble. You risk your credibility about OS matters
on your ability to teach and support someone in learning a new
environment. This is a gamble that most likely won't pay off often
enough to be worth the risk. Our most powerful weapon in the Linux
community has always been our honesty and integrity when it comes to
the products we advocate. To push someone to use a system they are not
ready for can have deleterious effects on that reputation.
Putting one foot in front of the other
This brings us to the last method - the delayed skill transfer
approach. What is this? It's simple -- give Windows, NT and Mac users
Unix tools to use on their current projects! Simple, huh? The problem
is, in our zest to push the Linux point of view on people, we often
forget that we can give some demonstration of the power of the Unix
way which is utterly non-threatening to new users. By replacing the
command windows prompt with bash, by changing dir to ls, by adding
ghostview, ghostscript, emacs, perl, LaTeX and other tools to the
Windows environment, we allow for users to develop their skills and
confidence in Unix methods without compromising their ability to
currently work.
While this method may take longer to get any particular user up and
running in a completely Linux-only environment, it also offers the
most benefits with the fewest drawbacks. The benefits of the OS/2
revisited method, namely that of having tools that you are comfortable
with, is realized without the deficit of having to rely on out-dated
versions or be worried about underlying complexities. The drawbacks of
the suck it up approach are avoided as the users are given plenty of
time to become familiar with the new tools in an environment that
doesn't endanger any current projects. Thus the users are less
stressed and more open to trying new things, for the new things don't
entail the need to be concerned about not being able to accomplish
critical tasks.
Further, after a few weeks or months, those ``mission critical'' tasks
are now being accomplished on Unix tools that have been ported to the
user's (soon to be formerly) favorite platform. Thus, when the switch
over to Linux comes, the user no longer has to learn two new things -
how to be productive and how to system manage. Instead, they are
instantly productive and can learn the underlying system at their
leisure. More often than not they will come to want the extra
functionality of things like named pipes, IPC, and other Unix niceties
that are unavailable in their scaled down ports.
Why it isn't happening?
While this seems to be a fairly obvious method of helping users move
to Unix environments it seems to be one of the least attempted. There
are a few reasons for this.
* Advocates tend to be very strong in their opinion that
windows=bad, Unix=good. They are not particularly willing to
compromise their ideals for what seems like limited gains.
* Advocates tend towards seeing the computing market as a
battleground of sorts where Unix is pitted against the ``evil
empire.'' Anything that doesn't seem like a direct attack upon
Microsoft can be seen as an act of near treason.
* Linux users tend to spend lots of time under Linux, they are a bit
out of touch with the windows world. As a result, they may not be
aware of that neat new port of Bash as the command shell under 95,
or that perl can run (and do some neat registry tricks too!)
Conclusion
The point of all this is that there is more than one way to skin a cat
(or in the case of Gates-ware, a weasel). Linux advocacy can, and
should, take forms that are appropriate to the particular situation of
a particular user. A student in a computer science program with lots
of free-time probably should opt for the suck it up approach. A person
with plenty of support from a local administrator and plenty of legacy
apps might benefit greatly from the OS/2 revisited method. And, most
importantly, we can't forget that promoting Unix tools under other
OS's is a form of advocacy. More importantly, in an environment where
mission critical apps and projects abound, it may be the most
effective form of advocacy. Keep up with available ports of your
favorite Unix tools under other systems, and you can increase your
conversion success rate!
About this document ...
Evangelism: A Unix Bigot and Linux Advocate's Spewings
This document was generated using the LaTeX2HTML translator Version
98.1 release (February 19th, 1998)
Copyright © 1993, 1994, 1995, 1996, 1997, Nikos Drakos, Computer Based
Learning Unit, University of Leeds.
The command line arguments were:
latex2html -split 0 lj_advocacy.tex.
The translation was initiated by David Wagle on 1998-03-23
_________________________________________________________________
Copyright © 1998, David Wagle
Published in Issue 27 of Linux Gazette, April 1998
_________________________________________________________________
[ TABLE OF CONTENTS ] [ FRONT PAGE ] Back Next
_________________________________________________________________
"Linux Gazette...making Linux just a little more fun!"
_________________________________________________________________
A Glimpse of Icon
By Clinton Jeffery and Shamim Mohamed
_________________________________________________________________
Motivation
_________________________________________________________________
Many languages introduce special capabilities for specific kinds of
applications, but few present us with more powerful control structures
or programming paradigms. You may be comfortable sticking with a
language you already know, but if you are challenged to write complex
programs and are short on time, you need the best language for the
job. Icon is a high-level programming language that looks like many
other programming languages but offers many advanced features that add
up to big gains in productivity. Before we get to all that, let us
write the canonical first program:
procedure main()
write("Hello, world!")
end
If you've installed Linux Icon, Save this in a file named hello.icn
and run icont, the Icon translator on it:
icont hello -x
icont performs some syntax checking on hello.icn and transforms the
code into instructions for the Icon virtual machine, which will be
saved in hello. The -x option tells icont to execute the program also.
We are introducing many concepts, so don't expect to understand
everything the first time through -- the only way to learn a language
is to write programs in it; so get Icon, and take it for a test drive.
Genealogy
Despite its name, Icon is not a visual programming language -- its
look-and-feel descends from Pascal and C. The important thing about
Icon is not that its syntax is easy to learn. Icon's semantics, which
generalize ideas from SNOBOL4, succeed in adding considerable power to
the familiar notation found in most programming languages. This is
noteworthy because most languages that add real power (APL, Lisp, and
SmallTalk are examples) do so with a syntax that is so different that
programmers must learn a new way of thinking to use them. Icon adds
power `under the hood' of a notation most programmers are already
comfortable with.
Icon was developed over several years at the University of Arizona by
a team led by Ralph Griswold. Today, it runs on many platforms and is
used by researchers in algorithms, compilers, and linguistics as well
as system administrators and hobbyists. The implementation and source
code are in the public domain.
_________________________________________________________________
Variables, Expressions, and Type
_________________________________________________________________
Icon's expression syntax starts out much as do most languages. For
example, i+j represents the arithmetic addition of the values stored
in the variables i and j, f(x) is a call to f with argument x,
variables may be global or local to a procedure, and so on.
Variable declarations are not required, and variables can hold any
type of value. However, Icon is a strongly typed language; it knows
the type of each value and it does not allow you to mix invalid types
in expressions. The basic scalar types are integers, real numbers,
strings, and sets of characters (csets). Integers and strings can be
arbitrarily large; and strings can contain any characters. There are
also structured types: lists, associative arrays, sets and records.
Icon performs automatic storage management.
Goal-directed Expression Evaluation
Icon's major innovation is its expression evaluation mechanism. It
avoids certain problems widely found in conventional languages in
which each expression always computes one result. In such languages,
if no valid result is possible, a sentinel value such as -1, NULL, or
EOF (end-of-file) is returned instead. The program must check for such
errors using boolean logic and if-then tests, and the programmer must
remember many different sentinel values used in different
circumstances. This is cumbersome. Alternative ideas such as
exceptions have been developed in some languages, but they introduce
complexity and problems of their own.
Success and Failure
In Icon, expressions are goal-directed. When it is evaluated, every
expression has a goal of producing results for the surrounding
expression. If an expression succeeds in producing a result, the
surrounding expression executes as intended, but if an expression
cannot produce a result, it is said to fail and the surrounding
expression cannot be performed and in turn fails. This powerful
concept subsumes Boolean logic and the use of sentinel values, and
allows a host of further improvements. As an example, consider the
expression i > 3 -- if the value i is greater than 3 the expression
succeeds, otherwise it fails.
Control structures such as if check for success, so
if i > 3 then ...
does the expected thing. Since the expression semantics are not
encumbered with the need to propagate boolean (or 0 and 1) values,
comparison operators can instead propagate a useful value (their right
operand), allowing expressions such as 3 > i > 7 which is standard in
mathematics, but doesn't work in most languages.
Since functions that fail do not need to return an error code
separately from the results, detecting cases such as end-of-file is
simpler, as in:
if line := read() then write(process(line))
On end-of-file, read() fails, causing the assignment expression tested
in the if-part to fail. When the test fails, the then branch is not
executed so the call to write() does not occur. Since failure
propagates through an expression, the above example is equivalent to
write(process(read())
Generators
Some expressions can naturally produce more than one result. These
expressions are called generators. Consider the task of searching for
a substring within a string, and returning the position at which the
substring occurs, as in Icon's find() function:
find("or", "horror")
In conventional languages, this would return one of the possible
return values, usually the first or the last. In Icon, this expression
is capable of returning all the values, depending on the execution
context. If the surrounding expression only needs one value, as in the
case of an if test or an assignment, only the first value of a
generator is produced. If a generator is part of a more complex
expression, then the return values are produced in sequence until the
whole expression produces a value. In the expression
find("or", "horror") > 3
the first value produced by find(), a 2, causes the > operation to
fail. Icon resumes the call to find(), which produces a 4, and the
expression succeeds.
The most obvious generator is the alternation operator |. The
expression
expr
1
| expr
2 is a generator that produces its lefthand side followed by its
righthand side, if needed by the surrounding expression. Consider
f(1|2) -- f is first invoked with the value 1; if that does not
produce a value, the generator is resumed for another result and f
will be called again with the value 2. As another example of the same
operator,
x = (3 | 5)
is equivalent to but more concise than C's (x == 3) || (x == 5). When
more than one generator is present in an expression, they are resumed
in a LIFO manner.
(x | y) = (3 | 5)
is the Icon equivalent of C's
(x == 3) || (x == 5) || (y == 3) || (y == 5)
In addition to | , Icon has a generate operator ! that generates
elements of data structures, and a generator to that produces ranges
of integers. For example, !L generates the elements of list L, and 1
to 10 generates the first ten positive integers. Besides these
operators that generate results, most generators in Icon take the form
of calls to built-in and user-defined procedures. Procedures are
discussed below.
Iteration
Icon has the ordinary while loop where the control expression is
evaluated before each iteration. For generators, an alternative loop
is available where the loop body executes once per result produced by
a single evaluation of the control expression. The alternative loop
uses the reserved word every and can be used in conjunction with the
to operator to provide the equivalent of a for-loop:
every i := 1 to 10 do ...
The point of every and to is not that you can use them to implement a
for-loop; Icon's generator mechanism is quite a bit more general. The
every loop lets you walk through all the results of a generator giving
you iterators for free. And every isn't limited to sequences of
numbers or traversals of specific data structures like iterators in
some languages; it works on any expression that contains generators.
every f(1 | 1 | 2 | 3 | 5 | 8)
executes the function f with the first few fibonacci numbers, and the
example could be generalized to a user-defined generator procedure
that produced the entire fibonacci sequence. Using generators requires
a bit of practice, but then it is fun!
_________________________________________________________________
Procedures
_________________________________________________________________
Procedures are a basic building block in most languages, including
Icon. Like C, an Icon program is organized as a collection of
procedures and execution starts from a procedure named main(). Here is
an example of an ordinary procedure. This one generates and sums the
elements of a list L, whose elements had better be numbers (or
convertible to numbers).
procedure sum(L)
total := 0
every total +:= !L
return total
end
A user can write her own generator by including a
suspend expr
in a procedure where a result should be produced. When a procedure
suspends, it transfers a result to the caller, but remains available
to continue where it left off and generate more results. If the
expression from which it is called needs more or different results in
order to succeed, the procedure will be resumed. The following example
generates the elements from parameter L, but filters out the zeros.
procedure nonzero(L)
every i := !L do
if i ~= 0 then suspend i
end
The fail expression makes the procedure fail, i.e. causes control to
go back to the calling procedure without returning a value. A
procedure also fails implicitly if control flows off the end of the
procedure's body.
_________________________________________________________________
String Processing
_________________________________________________________________
Besides expression evaluation, Icon offers compelling features to
reduce the effort required to write complex programs. From Icon's
ancestor SNOBOL4, the granddaddy of all string processing languages,
Icon inherits some of the most flexible and readable built-in data
structures found in any language.
Strings
Parts of Icon strings are accessed using the subscript operator.
Indexes denote the positions between characters, and pairs of indexes
are used to pick out substrings. If s is the string "hello, world"
then the expressions
s[7] := " linux "
s[14:19] := "journal"
change s into "hello, linux journal", illustrating the ease with which
insertions and substitutions are made. A myriad of built-in functions
operate on strings; among them are the operators for concatenation (s1
|| s2) and size (*s).
String Scanning
The string analysis facility of Icon is called scanning. A scanning
environment is set up by the ? operator:
s ? expr
A scanning environment has a string and a current position in it.
Matching functions change this position, and return the substring
between the old and new positions. Here is a simple example:
text ? {
while move(1) do
write(move(1))
}
move is a function that advances the position by its argument; so this
code writes out every alternate character of the string in text.
Another matching function is tab, which sets the position to its
argument. String analysis functions examine a string and generate the
interesting positions in it. We have already seen find, which looks
for substrings. These functions default their subject to the string
being scanned. Here is a procedure that produces the words from the
input:
procedure getword()
while line := read() do
line ? while tab(upto(wchar)) do {
word := tab(many(wchar))
suspend word
}
end
upto(c) returns the next position of a character from the cset c; and
many(c) returns the position after a sequence of characters from c.
The expression tab(upto(wchar)) advances the position to a character
from wchar, the set of characters that make up words; then
tab(many(wchar)) moves the position to the end of the word and returns
the word that is found.
_________________________________________________________________
Regular Expressions
_________________________________________________________________
The Icon Program Library (included with the distribution) provides
regular expression matching functions. To use it, include the line
link regexp at the top of the program. Here is an example of
`search-and-replace':
procedure re_sub(str, re, repl)
result := ""
str ? {
while j := ReFind(re) do {
result ||:= tab(j) || repl
tab(ReMatch(re))
}
result ||:= tab(0)
}
return result
end
_________________________________________________________________
Structures
_________________________________________________________________
Icon has several structured (or non-scalar) types as well that help
organize and store collections of arbitrary (and possibly mixed) types
of values. A table is an associative array, where values are stored
indexed by keys which may be of arbitrary type; a list is a group of
values accessed by integer indices as well as stack and queue
operations; a set is an unordered group of values, etc.
Tables
A table is created with the table function. It takes one argument: the
default value, i.e. the value to return when lookup fails. Here is a
code fragment to print a word count of the input (assuming the getword
function generates words of interest):
wordcount := table(0)
every word := getword() do
wordcount[word] +:= 1
every word := key(wordcount) do
write(word, "\t", wordcount[word])
(The key function generates the keys with which values have been
stored.) Since the default value for the table is 0, when a new word
is inserted, the default value gets incremented and the new value
(i.e. 1) is stored with the new word. Tables grow automatically as new
elements are inserted.
Lists
A list can be created by enumerating its members:
L := ["linux", 2.0, "unix"]
Lists are dynamic; they grow or shrink through calls to list
manipulation routines like pop() etc. Elements of the list can be
obtained either through list manipulation functions or by
subscripting:
write(L[3])
There is no restriction on the kinds of values that may be stored in a
list.
Records and Sets
A record is like a struct in C, except that there is no restriction on
the types that can be stored in the fields. After a record is
declared:
record complex(re, im)
instances of that record are created using a constructor procedure
with the name of the record type, and on such instances, fields are
accessed by name:
i := complex(0, 0)
j := complex(1, -1)
if a.re = b.re then ...
A set is an unordered collection of values with the uniqueness
property i.e. an element can only be present in a set once.
S := set(["rock lobster", 'B', 52])
The functions member, insert, and delete do what their names suggest.
Set intersection, union and difference are provided by operators. A
set can contain any value (including itself, thereby neatly
sidestepping Russell's paradox!).
_________________________________________________________________
Graphs
_________________________________________________________________
Since there is no restriction on the types of values in a list, they
can be other lists too. Here's an example of a how a graph or tree may
be implemented with lists:
record node(label, links)
...
barney := node("Barney", list())
betty := node("Betty", list())
bambam := node("Bam-Bam", list())
put(bambam.links, barney, betty)
An Example
Let us now do a little example to illustrate the above concepts. Here
is a program to read a file, and generate a concordance i.e. for every
word, print a list of the lines it occurs on. We want to skip short
words like `the' though, so we only count the words longer than 3
characters.
global wchar
procedure main(args)
wchar := &ucase ++ &lcase
(*args = 1) | stop("Need a file!")
f := open(args[1]) | stop("Couldn't open ", args[1])
wordlist := table()
lineno := 0
while line := read(f) do {
lineno +:= 1
every word := getword(line) do
if *word > 3 then {
# if word isn't in the table, set entry to empty list
/wordlist[word] := list()
put(wordlist[word], lineno)
}
}
L := sort(wordlist)
every l := !L do {
writes(l[1], "\t")
linelist := ""
# Collect line numbers into a string
every linelist ||:= (!l[2] || ", ")
write(linelist[1:-2])
}
end
procedure getword(s)
s ? while tab(upto(wchar)) do {
word := tab(many(wchar))
suspend word
}
end
If we run this program on this input:
Sing, Mother, sing.
Can Mother sing?
Mother can sing.
Sing, Mother, sing!
the program writes this output:
Mother 1, 2, 3, 4
Sing 1, 4
sing 1, 2, 3, 4
While we may not have covered all the features used in this program,
it should give you a feeling for the flavour of the language.
_________________________________________________________________
Co-expressions
_________________________________________________________________
Another novel control facility in Icon is the co-expression, which is
an expression encapsulated in a thread-like execution context where
its results can be picked apart one at a time. Co-expressions are are
more portable and more fine-grained than comparable facilities found
in most languages. Co-expressions let you `capture' generators and
then use their results from multiple places in your code.
Co-expressions are created by
create expr
and each result of the co-expression is requested using the @
operator.
As a small example, suppose you have a procedure prime() that
generates an infinite sequence of prime numbers, and want to number
each prime as you print them out, one per line. Icon's seq() function
will generate the numbers to precede the primes, but there is no way
to generate elements from the two generators in tandem; no way except
using co-expressions, as in the following:
numbers := create seq()
primes := create prime()
every write(@numbers, ": ", @primes)
More information about co-expressions can be found at
http://www.drones.com/coexp/ and a complete description is in the
Icon language book mentioned below.
_________________________________________________________________
Graphics
_________________________________________________________________
Icon features high-level graphics facilities that are portable across
platforms. The most robust implementations are X Window and Microsoft
Windows; Presentation Manager, Macintosh, and Amiga ports are in
various stages of progress. The most important characteristics of the
graphics facilities are:
* simplicity, ease of learning
* windows are integrated with Icon's existing I/O functions
* straightforward input event model
As a short example, the following program opens a window and allows
the user to type text and draw freehand on it using the left mouse
button, until an ESC char is pressed. Clicking the right button moves
the text cursor to a new location. Mode "g" in the call to open stands
for "graphics". &window is a special global variable that serves as a
default window for graphics functions. &lpress, &ldrag, and &rpress
are special constants that denote left mouse button press and drag,
and right mouse button press, respectively. &x and &y are special
global variables that hold the mouse position associated with the most
recent user action returned by Event(). "\e" is a one-letter Icon
string containing the escape character.
procedure main()
&window := open("LJ example","g")
repeat case e := Event() of {
&lpress | &ldrag : DrawPoint(&x,&y)
&rpress : GotoXY(&x,&y)
"\e" : break
default : if type(e)=="string" then writes(&window, e)
}
end
A complete description of the graphics facilities is available on the
web at http://www.cs.arizona.edu/icon/docs/ipd281.html
_________________________________________________________________
POSIX Functions
_________________________________________________________________
An Icon program that uses the POSIX functions should include the
header file posixdef.icn. On error, the POSIX functions fail and set
the keyword &errno; the corresponding printable error string is
obtained by calling sys_errstr().
Unix functions that return a C struct (or a list, in Perl) return
records in Icon. The fields in the return values have names similar to
the Unix counterparts: stat() returns a record with fields ino, nlink,
mode etc.
A complete description of the POSIX interfaces is included in the
distribution; an HTML version is available on the web, at
http://www.drones.com/unicon/. We look at a few small examples here.
_________________________________________________________________
An Implementation of ls
_________________________________________________________________
Let us look at how a simple version of the Unix ls command may be
written. What we need to do is to read the directory, and perform a
stat call on each name we find. In Icon, opening a directory is
exactly the same as opening a file for reading; every read returns one
filename.
f := open(dir) | stop(name, ":", sys_errstr(&errno))
names := list()
while name := read(f) do
push(names, name)
every name := !sort(names) do
write(format(lstat(name), name, dir))
The lstat function returns a record that has all the information that
lstat(2) returns. One difference between the Unix version and the Icon
version is that the mode field is converted to a human readable string
-- not an integer on which you have to do bitwise magic on. (And in
Icon, string manipulation is as natural as a bitwise operation.)
The function to format the information is simple; it also checks to
see if the name is a symbolic link, in which case it prints the value
of the link also.
link printf
procedure format(p, name, dir)
s := sprintf("%7s %4s %s %3s %8s %8s %8s %s %s",
p.ino, p.blocks, p.mode, p.nlink,
p.uid, p.gid, p.size, ctime(p.mtime)[5:17], name)
if p.mode[1] == "l" then
s ||:= " -> " || readlink(dir || "/" || name)
return s
end
_________________________________________________________________
Polymorphism and other pleasant things
_________________________________________________________________
It's not just stat that uses human-readable values -- chmod can accept
an integer that represents a bit pattern to set the file mode to, but
it also takes a string just like the shell command:
chmod(f, "a+r")
And the first argument: it can be either an opened file or a path to a
file. Since Icon values are typed, the function knows what kind of
value it's dealing with -- no more fchmod or fstat. The same applies
to other functions -- for example, the Unix functions getpwnam,
getpwuid and getpwent are all subsumed by the Icon function getpw
which does the appropriate thing depending on the type of the
argument:
owner := getpw("ickenham")
root := getpw(0)
while u := getpw() do ...
Similarly, trap and kill can accept a signal number or name; wait
returns human-readable status; chown takes a username or uid; and
select takes a list of files.
_________________________________________________________________
Using select
_________________________________________________________________
The select() function waits for input to become available on a set of
files. Here is an example of the usage -- this program waits for typed
input or for a window event, with a timeout of 1000 milliseconds:
repeat {
while *(L := select([&input, &window], 1000)) = 0 do
... handle timeout
if &errno ~= 0 then
stop("Select failed: ", sys_errstr(&errno))
every f := !L do
case f of {
&input : handle_input()
&window : handle_evt()
}
}
If called with no timeout value, select will wait forever. A timeout
of 0 performs a poll.
_________________________________________________________________
Networking
_________________________________________________________________
Icon provides a much simpler interface to BSD-style sockets. Instead
of the four different system calls that are required to start a TCP/IP
server using Perl, only one is needed in Icon--the open function opens
network connections as well as files. The first argument to open is
the network address to connect to -- host:port for Internet domain
connections, and a filename for Unix domain sockets. The second
argument specifies the type of connection.
Here is an Internet domain TCP server listening on port 1888:
procedure main()
while f := open(":1888", "na") do
if fork() = 0 then {
service_request(f)
exit()
} else
close(f)
stop("Open failed: ", sys_errstr(&errno))
end
The "na" flags indicate that this is a network accept. Each call to
open waits for a network connection and then returns a file for that
connection. To connect to this server, the "n" (network connect) flag
is used with open. Here's a function that connects to a `finger'
server:
procedure finger(name, host)
static fserv
initial fserv := getserv("finger") |
stop("Couldn't get service: ", sys_errstr(&errno))
f := open(host || ":" || fserv.port, "n") | fail
write(f, name) | fail
while line := read(f) do
write(line)
end
Nice and simple, isn't it? One might even call it Art! On the other
hand, writing socket code in Perl is not much different from writing
it in C, except that you have to perform weird machinations with pack.
No more! Eschew obfuscation, do it in Icon.
UDP
UDP networking is similar; using "nu" as the second argument to open
signifies a UDP connection. A datagram is sent either with write or
send, and is received with receive. Here is a simple client for the
UDP `daytime' service, something like rdate(1):
s := getserv("daytime", "udp")
f := open(host || ":" || s.port, "nu") |
stop("Open failed: ", sys_errstr(&errno))
writes(f, " ")
if *select([f], 5000) = 0 then
stop("Connection timed out.")
r := receive(f)
write("Time on ", host, " is ", r.msg)
Since UDP is not reliable, the receive is guarded with select (timeout
of 5000 ms), or the program might hang forever if the reply is lost.
_________________________________________________________________
Icon and other languages
_________________________________________________________________
The popular languages Perl and Java have been covered in LJ, and we
think it is worth discussing how Icon stacks up against these
dreadnaughts.
Perl and Icon
Perl and Icon are both used for similar purposes. Both languages offer
high-level data structures like lists, associative arrays, etc. Both
make it easy to write short prototypes by not requiring extensive
declarations; and both were intended by their designers to be `user
friendly' i.e. intended to make programming easier for the user rather
than to prove some theoretical point.
But when it comes to language design, Perl and Icon are not at all
alike. Perl has been designed with very little structure -- or, as
Larry Wall puts it, it's more like a natural language than a
programming language. Perl looks strange but underneath the loose
syntax its semantics are those of a conventional imperative language.
Icon, on the other hand, looks more like a conventional imperative
language but has richer semantics.
Advantages of Perl
Perl's pattern matching, while not as general a mechanism as Icon's
string scanning, is more concise for recognizing those patterns that
can be expressed as regular expressions. Perl's syntax looks and feels
natural to long-time die-hard UNIX gurus and system administrators,
who have been using utilities such as sh, sed, and awk. For some
people, Perl is especially appealing because mastering its
idiosyncracies places one in an elite group.
Some misfeatures of Perl
Let us look at some things that are (in our opinion) undesirable
qualities of Perl. These problems do not negate Perl's ingenious
features, they merely illustrate that Perl is no panacea.
Namespace confusion: it is a bad idea to allow scalar variables,
vector variables and functions to have the same name. This seems like
a useful thing to do, but it leads to write-only code. We think this
is primarily why it's hard to maintain Perl programs. A couple of
things are beyond belief -- $foo and %foo are different things, but
the expression $foo{bar} actually refers to an element of %foo!
Parameter passing is a mess. Passing arrays by name is just too
confusing! Even after careful study and substantial practice, we still
are not absolutely certain about how to use *foo in Perl. As if to
make up for the difficulty of passing arrays by reference, all scalars
are passed by reference! That's very unaesthetic.
Why are there no formal parameters? Instead, one has to resort to
something that looks like a function call to declare local variables
and assign @_ to it. Allowing the parentheses to be left off
subroutine calls is also unfortunate; it is another `easy to write,
hard to read' construct. And the distinction between built-in
functions and user-defined subroutines is ugly.
Variables like $` are a bad idea. We think of special characters as
punctuation, we don't expect them to be (borrowing Wall's terminology)
nouns. And the mnemonics that are required are evidence that these
variables place an additional burden of memorization upon the
programmer. (Quick, if you write Perl programs: What's `$('?)
The distinction between array and scalar contexts also leads to
obfuscated code. Certainly after you've been writing Perl for a while,
you get used to it (and might even like it), but again, this is just
confusing. All the warnings in the Perl documentation about being
certain you are evaluating in the right context is evidence of this.
Java and Icon
Java takes the middle road in between C/C++ and the class of `very
high level languages' such as Icon and Perl. Java and Icon use a
similar virtual machine (VM) model. Java's VM is both lower-level and
more machine-independent than the Icon VM, but these are
implementation artifacts and it would be possible to implement Java on
the Icon VM or Icon on the Java VM.
The important differences between Java and Icon are differences of
philosophy. The Java philosophy is that everything is an object,
nothing is built-in to the language, and programmers should learn
class libraries for all non-trivial structures and algorithms. Java's
lack of operator overloading means that its object-oriented notation
allows no "shorthand" as does C++. Java's simplicity is a welcome
relief after C++, but its expressive power is so weak compared to Icon
(and several other very high level languages) that it is hard to argue
that Java can supplant these languages. Most of Java's market share is
being carved out of the C and C++ industries.
How to Improve Java
Java has few bad mistakes. The Sumatra Project has itemized some of
them in The Java Hall of Shame at
http://www.cs.arizona.edu/sumatra/hallofshame/. Most of Java's
misfeatures are sins of omission, because the language designers were
trying to be elegant and minimal. We would like to see a Java dialect
with features such as Icon's goal-directed evaluation, Perl's pattern
matching, and APL's array-at-a-time numeric operators; a description
of such a dialect is at http://segfault.cs.utsa.edu/godiva/.
_________________________________________________________________
Getting Icon
_________________________________________________________________
Users who become serious about the language will want a copy of `The
Icon Programming Language', by Ralph and Madge Griswold, Peer-to-Peer
Communications 1997, ISBN 1-57398-001-3.
Lots of documentation for Icon is available from the University of
Arizona, at http://www.cs.arizona.edu/icon/ There is also a newsgroup
on Usenet: comp.lang.icon.
The Icon source distribution is at:
ftp://ftp.cs.arizona.edu/icon/packages/unix/unix.tar.gz
The POSIX functions are in the following patch that you need to apply
if you wish to build from sources:
ftp://ftp.drones.com/unicon-patches.tar.gz
Linux binaries (kernel 2.0 ELF, libgdbm 2.0.0, libX11 6.0, libdl
1.7.14, libm 5.0.0 and libc 5.2.18) for Icon (with X11 and POSIX
support) are available at
ftp://ftp.drones.com/icon-9.3-3.i386.rpm Icon
ftp://ftp.drones.com/icon-ipl-9.3-3.i386.rpm Icon Program
Library
ftp://ftp.drones.com/icon-idol-9.3-3.i386.rpm Idol:
Object-oriented Icon
ftp://ftp.drones.com/icon-vib-9.3-3.i386.rpm VIB: The Visual
Interface Builder
ftp://ftp.drones.com/icon-docs-9.3-3.i386.rpm Documentation
_________________________________________________________________
Copyright © 1998, Clinton Jeffery and Shamim Mohamed
Published in Issue 27 of Linux Gazette, April 1998
_________________________________________________________________
[ TABLE OF CONTENTS ] [ FRONT PAGE ] Back Next
_________________________________________________________________
"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
W elcome 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]
T his column is dedicated to the use, creation, distribution, and
discussion of computer graphics tools for Linux systems.
Last month's comment on GGI, made mostly as a passing remark,
generated quite a bit of email. A few were very nice letters
explaining where I was mistaken in my perception of GGI. I now have
to admit that I was wrong about what GGI is with respect to X. It
does not try to replace X and for that I'm grateful. But even after
getting numerous emails on the subject from GGI developers and
supporters and reading all the material at the GGI site (plus
discussion on various forums including slashdot.org), I'm still not
convinced GGI is the right thing to do. Call it a gut feeling.
I also got not just a few letters that were a little less than
friendly. So to them, I'll put it plainly - convince the commercial X
server vendors GGI is a good idea and I'll believe it. I trust them.
That said, I should also point out that as a reader of this column you
should make your own decisions. Go to the GGI Web site and read their
material. Don't trust it simply because you read it here. Writers
make mistakes too. The web makes it very easy to distribute
information, but there are very few checks in place to force writers
to be accurate. The morale: verify your information with more than
one source.
One other thing: one responder very politely suggested that I should
know more about what I write before distributing it in a place that
carries such "authority" - the Linux Gazette. He is correct: I need
to try to be as accurate as possible. But to those who were not so
polite, try to remember: this is just a hobby. I'm not really a
graphics expert and I do get things wrong. If you're going to nudge
me in the right direction, please do so politely. And please, no more
email on GGI. The kernel team is better qualified to decide GGI's
fate in Linux than I. I'm not even certain any of the kernel
developers read this column!
Ok, on to the work at hand. This month I conclude the two part status
update on X servers with information on Metro Link. Last month, if
you recall, I covered XFree86/S.u.S.E and Xi Graphics. Also in this
months issue of the Muse is a little bit of information I gathered
while trying to find some decent offline storage media. I'll kill the
ending - I ended up with an Iomega Jaz drive. But you'll still want
to read about why I chose it and what it takes to install the beast.
Finally, I do a little review of XFPovray. This is an XForms based
front end to POV-Ray, the 3D raytracing engine. I used it recently in
working on another cover for the Linux Journal.
Enjoy!
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.
indent
XFree86 3.3.2 is released
XFree86 version 3.3.2 is now available. The XFree86 3.3 distribution
is available in both source and binary form. Binary distributions are
currently available for FreeBSD (2.2.2+ and 3.0-CURRENT), NetBSD (1.2
and 1.3), OpenBSD, Interactive Unix, Linux (ix86 and AXP), SVR4.0,
UnixWare, OS/2, Solaris 2.6 and LynxOS AT.
The XFree86 documentation is available on-line on their Web server.
The documentation for 3.3 can be accessed at
http://WWW.XFree86.org/3.3/.
The XFree86 FAQ is at http://WWW.XFree86.org/FAQ/.
The XFree86 Web site is at http://WWW.XFree86.org indent
Moonlight Creator - 3D modeller
There's a relatively new GPL modeller available. It's call moonlight
creator and can be found at http://www.cybersociety.com/moonlight/
This modeller generated almost as much email as my comment on GGI -
and I didn't even say anything about it last month!
______________________________________________________________________
Pad++
The NYU Center for Advanced Technology has released a new drawing tool
with some object placement and scaling features possibly worthy of
attention as they continue to extend The Gimp.
Precompiled binaries for several flavors of UNIX.
http://www.mrl.nyu.edu/
Click on Pad++.
[INLINE] [INLINE]
LParser Source Code Released
Laurens Lapré has released the source code for his popular LParser
tool. LParser creates 3D forms using a descriptive language called an
L-System. It can be used to produce 3D trees, plants and other
organic items. Output formats include VRML, POV-Ray, and DXF.
On his web page Larens writes:
Source code of the lparser ZIP file (18Kb) can also be downloaded, for
those who want to port or just play with new options. The code is
straight, no frills ANSI-C with even less documentation but it
should run on pretty much anything with a C or C++ compiler. My
current job will leave me with neither the time nor the
inclination to do serious code hacking so I'm throwing the code
into the wind, hoping that it will germinate and produce lots of
mutated offspring ! The Lparser source may be freely distributed.
The Web page for the LParser tool is at
http://www.xs4all.nl/~ljlapre/.
SART - 3D Rendering Library for Guile
SART is a 3D rendering library for Guile. It supports zbuffering,
raytracing and radiosity, with advanced textures, and image processing
and other features. This is the first public release announcement, as
the 0.5a2 version is in the developers opinion sufficiently stable and
simple enough to compile to meet a wider circle of developers (and
even users).
SART is freely distributable under GPL. To read more, visit the
webpage:
http://petra.zesoi.fer.hr/~silovic/sart
The develper asks:
Now would somebody help me interface this thing with script-fu and/or
guile-gtk?
[INLINE]
BMRT 2.3.6 Announcment:
Larry Gritz sent out this announcement this past month:
Hello, and thanks to everybody for putting up with my extended Beta
period. They say each new group of users discovers a new class of
bugs. Indeed, with the BMRT port for Windows and the nice RIB
support of Rhino (www.rhino3d.com), lots of difficulties with
trimmed NURBS came to the surface and were subsequently fixed.
Thanks to those who stuck it out with me.
BMRT 2.3.6 is finally officially shipping. Er, well, you know
what I mean -- it's on the FTP site.
Please get the latest and replace the beta, if you had it. I
managed to squash many bugs in the beta, and also reduced both
time and memory by about 15% for large scenes!
Other News: Tony Apodaca and I are co-organizing a course for this
summer's Siggraph conference. The course is titled "Advanced
RenderMan: Beyond the Companion", and will taught by myself and
Tony, Ronen Barzel (Pixar), Clint Hanson (Sony Imageworks),
Antoine Durr (Blue Sky|VIFX), and Scott Johnston (Fleeting Image
Animation).
Hope to see some of you there!
Enjoy the software,
-- lg
______________________________________________________________________
Did You Know?
...that the Linux Focus online magazine has articles on OpenGL, GLUT,
hardware acceleration issues, and POV-Ray? Take a look at
http://mercury.chem.pitt.edu/~angel/LinuxFocus/ in issues #2 and #3
(that latter is the current issue).
...there is an article on the future of VRML on the C|Net News Web
site:
VRML spec to drive 3D on Net
By Erich Luening
Staff Writer, CNET NEWS.COM
http://www.news.com/News/Item/0,4,19992,00.html
...there is a Java based modeller that works under Netscape's Java
environment? Take a look at Mondfarilo: the Java Applet at
http://userpages.itis.com/philip/applet.html. The modeller includes
support for blobs and lathe objects and can produce the model
information as POV-Ray 3.0 source (although it only does it to a
window - you have to use cut and paste to save it to a file). the
...a description of the Kodak DC120 .KDC File Format can be found at
http://www.hamrick.com/dc120/. This format is the one used by the
popular Kodak DC120 digital camera. There is Windows command line
source there for converting the files to JPEG or BMP formats. Anyone
looking for a project might look into porting this to Linux for use
with, for example, NetPBM, ImageMagick, or the GIMP.
...and speaking of digital cameras, did you know there is a small
software package called PhotoPC for Linux that supports a number of
digital cameras, including: Agfa, Epson PhotoPC models, Olympus
Digital cameras line, Sanyo, and Sierra Imaging. Take a look at the
PhotoPC Web page at http://www.average.org/digicam/.
...there is a good editorial on the future of games on Linux at
Slashdot.org. The editorial was written by Rob Huffstedtler. Its a
good piece, and I have to say I agree with Rob's sentiments about
commercial software - it isn't evil and shouldn't be viewed that way.
Any development on Linux - free or commercial - helps spread the
word. Linux isn't just about free software. Its about having a
choice, whether you are a developer or a user.
...the address for the AMAPI modeller has changed (I don't know how
long ago this happened, but I was just notified by a reader):
ftp://sunsite.unc.edu/pub/Linux/apps/graphics/modeling/amapi.linux-elf
.us.tar.gz
or
http://sunsite.unc.edu/pub/Linux/apps/graphics/modeling/amapi.linu
x-elf.us.tar.gz
...there is a very good article on the future of 3D gaming on Linux,
including an interview with Dave Taylor, at PlanetQuake.
[INLINE]
Reader Mail
Nick Cali (Mktnc@aol.com) wrote:
Just want to drop a line thanking you for your effort at the Gazette
and with Linux. Really, thanks a lot.
'Muse: You're quite welcome. I had gotten some rather harsh email
from someone recently that had me considering dropping out of the
Linux world altogether. Getting little notes like this, however,
helps keep me going. Thanks!
Tristan Savatier (tristan@mpegtv.com) wrote:
In Issue 26 of the Linux Gazette
(http://www.ssc.com/lg/issue26/gm.html) the link:
Linux Multimedia Page -> http://www.digiserve.com/ar/linux-snd/
should be renamed: Linux MIDI and Sound Page.
'Muse: Although it is too late to change it in that issue, I'll make
a note of it in the next issue. Many thanks for the update
Glenn McCarter <gmccarter@hotmail.com> wrote to the IRTC Discussion
List:
I have uploaded a POV-Ray include file "stereo.inc" to my website. It
can produce a stereoscopic view of any POV-Ray scene. This was
the technique I used in my current IRTC entry, "Dawn Patrol". The
url is http://www.geocities.com/SoHo/Gallery/2006/include.htm.
Feel free to download and experiment. Non POV-Ray users: you can
also take a look at the text file to understand the approach
involved. Any raytracing program should be able to utilize this
technique. Feedback and comments welcomed.
'Muse: If anyone takes a look at this and wants to offer some
commets, feel free to drop me a line. Keep in mind that Glenn may or
may not be a Linux/Unix person. You should keep that in mind if you
contact him.
David R. Heys originally asked the GIMP Discussion List (or possibly
the IRTC-L list, I think I may have logged this incorrectly):
It's been more years than I can count since I've been in school
learning the various formulae for calculating waves, points within
objects, distances, etc. As well, all those old school books are
long gone. Can anyone recommend a good, comprehensive book? I'm
looking for something that will summarize the theories and
formulae and present it in layman's terms, or as close to layman's
terms as possible.
Jerry Anning <clem@dhol.com> replied:
The Schaum's Outline series of books, published by McGraw-Hill, are
mostly good no-nonsense material. Some of them move a little fast
if you are learning the material for the first time, but they are
excellent for reference and refresher. If you have a little
"mathematical maturity" and take the time to work the problems,
you can learn the basics of new subjects with them as well. The
most info-rich ones from a ray tracing perspective are probably
Analytic Plane and Solid Geometry, Trigonometry, Matrices, and
Mathematical Handbook. Descriptive Geometry and Projective
Geometry have their uses, too. For rendering specific math, the
standard book is Computer Graphics Principles and Practice by
Foley, vanDam, et al. Here you can learn about splines,
antialiasing theory and many other useful things. I also suggest
that you visit the nearest vocational college bookstore and look
for books on shop trigonometry, particularly compound angles.
Standard math books give this material very short shrift at best.
To design things like polyhedra and complex csg's compound angles
are very useful. If you find a used copy of Bowditch, or some
other navigation manual, you can learn a few useful things about
sections of spheres as well. Good luck.
'Muse: I thought this information might be of general interest to my
readers. I know this is a question I've been asked a few times in the
past, but didn't have quite as complete an answer. By the way, for
those that don't know, CSG is constructive solid geometry - the
joining of simple shapes to make more complex ones.
David Robertson <saga@cs.otago.ac.nz> from the Computer Science
Department of the University of Otaga wrote:
I enjoyed your summary of X Windows hardware support (or lack
thereof). There is a very interesting web page at
http://parallel.nas.nasa.gov/Parallel/Projects/FOGL/index.html
which gives NASA Ames position regarding Mesa hardware support.
Sadly the page has not been updated since last October, despite
the date at the bottom of the page.
'Muse: Thanks for the info Dave. If any of my readers missed it, the
first part of the X Servers Update was in last month's issue of the
Muse. This month I conclude the report with information on Metro
Link.
Alejandro <Cmm.compu@lanet.losandes.com.ar> wrote:
I read your four article in Linux Journal, now I'm trying to update my
version of gimp. I download a file in rpm format, but it doesn't
work. Could you please tell me where to find the las versions of
Gimp, and what file I should download?
'Muse: www.gimp.org will point you to the latest versions of both the
GIMP and GTK. If you have updated GTK recently, then you need to
update GIMP. Also, if you've updated the GIMP, you'll need updated
GTK libraries. The two are tied together pretty closely right now
since both are getting ready to go to their respective 1.0 releases.
You're problem, assuming the file you downloaded was a newer version
of the GIMP than what you already had on your system, is probably that
the version of GIMP you downloaded doesn't work with the GTK libraries
you have. In that case, you need to get a compatible version of the
GTK libraries.
Larry S. Marso (larry@marso.com) wrote to the GIMP User list:
The manual says that Wacom's Artpad is supported, but that patches are
required to take advantage of some features, including the
pressure sensitive pen. (The ArtzII is the 6x8 tablet version).
Where are such patches?
Dmitry Yaitskov replied:
If you haven't found them yet, take a look at:
http://www.msc.cornell.edu/~otaylor/gtk-gimp/step-by-step.html
But I had some problems with pressure sensitivity, like random
pointer lockups and such, and generally did not like the feel of
that much, so although I still use the patched version of gimp
-.99.18 - I turned pressure sensitivity off.. I have ArtPad II.
And to this, Larry S. Marso added:
I should mention that I've found the patched 0.99.18 for Wacom ArtZII
absolutely flawless (including the pressure sensitivity feature).
Well, I wish it was faster ... and had more options. But I've
never experienced "pointer lockups and such". The gsumi app
available on the same web site provides a bitmap drawing
capability at extremely high resolution (the default is 4000x4000)
with pressure sensitive drawing (including caligraphic tips).
Great for creating postscript signatures, and also for high
resolution drawings suitable for subsequent manipulation by Gimp.
______________________________________________________________________
[INLINE]
No time for Web Wonderings this month. I'll try to come up with
something for next month.
______________________________________________________________________
Musings
Offline storage using a Jaz Drive
In playing with all the graphics software I've talked about in this
column over the past year, I've managed to fill up the relatively
modest 4Gig of disk space I have in the two systems currently running
in my home. When I finish with a project I generally don't need to
keep all the work files on my main hard disks. I also don't want to
get rid of them - they may have something I can use in a later
project. So I need some form of offline storage.
Last year I attempted to address the problem by installing a 450Mb
floppy tape drive on my file server. Once installed, this worked
fairly well with the zftape driver and the taper backup software, but
initially I had quite a time getting the zftape driver installed.
From the point of view of cost the floppy tape drive is a good solid
solution. A floppy tape drive currently runs less than $150US. From
the point of view of convenience, well, it takes a long time to backup
1G of data onto a tape drive running off of a floppy controller.
Taper does provide a fairly convenient curses based interface for
selecting the files to be backed up or retrieved, but my needs were
less administrative. I simply wanted to copy over a directory tree
to some offline media and then clean up that tree. Later, if I needed
them, I wanted to be able to copy them back in. I'm wasn't quite at
the point where offline media management was a real problem - I didn't
need special tools for keeping track of what I had on the offline
media. What I needed was a removable hard disk.
Fast forward to this year. Technology once again has heard the cry of
the meek and a flurry of removable hard disk solutions are now hitting
the shelves. One of the first, and currently the most popular if you
believe the noise in the trade magazines, is the Iomega Zip drive.
This is a drive with a cartridge that looks somewhat like a fat floppy
disk. The cartridge holds 100Mb of data, good enough for 3 or 4 of my
smaller projects or one large project. The drives are running under
$130US (I've seen them as low as $119) and the cartridges are about
$20 each, cheaper if bought in bundles of 3 or more. The drives are
available as either parallel or SCSI connected devices.
The problem with this solution is simply size. 100Mb of data can be
generated fairly fast using the GIMP - I've had swap files from this
tool larger than that. I also had a hard time finding an external
drive. Most of the drives I could find locally were internal drives.
This was probably just a local distribution or supply problem, but
then I didn't look very hard for these drives once I'd decided they
simply were too small.
The next step up from this for Iomega is the Jaz drive. The first
versions of these drives, which is what I purchased, hold about 1G of
data. The latest versions will support the old 1G cartridges and the
newer 2G cartridges. An external SCSI version is available so I was
able to connect the drive to my recently purchased Adaptec 2940 (which
is what I hooked my scanner to) without having to dig into the innards
of my hardware. Again, convenience is a key here - I was willing to
pay a little more for ease of use.
There are a number of removable hard drive solutions on the market
today, however I wasn't able to find information on support for any of
these devices except the Iomega drives. This information is available
at the Jaztool page. Jaztool is a package for managing the drive,
which I'll discuss in a moment. Strangely, the Jaz Drive Mini-Howto
does not appear to be on the Linux Documentation Project pages,
although a Mini-Howto for the Zip drive can be found there.
Since the drive is connected to a SCSI controller there aren't any
Jaz-specific drivers necessary. You just need to find a SCSI card
with supported drivers. I chose the Adaptec 2940 because the driver
for it (aic7xxx) was a loadable module that was precompiled in the Red
Hat 4.2 distribution that I currently use. In other words, I was able
to simply plug the card in, run insmod aic7xxx, and the card was
running. The 2940 has a high density SCSI connector which is the same
sort of connector used by the Jaz drive. I had previously purchased a
high density to 25 pin cable converter to connect my 2940 to the UMAX
scanner (which has the 25pin connector), so I simply stuck the Jaz
driver between the scanner and the adapter. The Jaz drive comes with
a converter, if you need it (the UMAX scanner did not). Total time
for hardware install - about 20 minutes.
As mentioned earlier, there is a tool for managing the Jaz drive
called Jaztool. This package provides a software means to eject,
write protect or read/write enable, and retrieve drive status.
Password protection is available but not officially supported. The man
page gives information on how to use this feature if you wish to give
it a try. Mode 5 (password protected write and read) is not supported
by jaztool, even though the Jaz drive supports it. You cannot access
the cartridge that comes with the drive in write mode, so you'll need
to use the jaztool program to allow you write access to that
cartridge. The Jaz Drive Mini-Howto explains how to do this quite
clearly. The disk can be mounted as delivered using the VFAT
filesystem type, which means that long file names can be used. This
removes the need to reformat disk with native Unix filesystem.
However, the disk that comes packaged with drive is nearly full. It
contains a large number of MS-related tools for DOS, Win3.1, Win95 and
WinNT. Since I didn't need these I simply mounted the drive and used
rm -rf * on it to clean it up. Once I'd done that, I decided to go
ahead and just place an ext2 filesystem on the driver. This is simple
enough following the information provided in the Jaz Driver Mini-Howto
on the Jaztools page at http://www.cnct.com/~bwillmot/jaztool/.
Speed on the drive is quite good - the Jaz drive has an average of
12ms seek times, compared to the 29ms of the Zip drive. This provides
the sort of file management I was looking for by allowing me to simply
copy files to and from the drive and at a speed comparable to my
regular disk drives. Its certainly faster than the floppy tape
solution.
As I was writing this article I started to consider if I had gotten my
moneys worth. The Jaz drive runs about $299US for an external SCSI
drive, about $199US for internal drives. Compared to the floppy tape
I got about twice the storage space for about twice the price. At
least I thought I had, until I added in the cost of the SCSI card and
the media. The cost for the SCSI card I can significantly reduce by
making full use of the 7 devices I can connect to it, but it still ran
about $240US. The media, on the other hand is significantly higher.
Travan 3 tapes (which are what you use with the floppy tape drive) run
about $30US or so (I think - its been awhile since I purchased them).
The Jaz cartridges are $125US each! You can save a little by
purchasing them in packs of 3 for about $300US. The good news here is
that recent court rulings have allowed another company (whose name
escapes me right now) to sell Zip and Jaz compatible media here in the
US. The result should be a drop in the price of the media over the
next 6 months to a year. The one cartridge I have now will hold me
for another couple of months at least. By then, keeping my fingers
crossed, I'll be able to get a 3 pack for $250 or less.
So, adding the Iomega Jaz drive was simple enough. The information
and software provided by Bob Willmot (the Jaztools author) made
getting the cartridge running almost a no-brainer. And I now have
over a Gigabyte of external storage that I can access nearly as fast
as my regular hard drives. All things considered, its been one of my
better investments.
[INLINE]
X Server Update Part II - Metro Link
Last month I provided the first part of an update on 3D support
available in X Servers and from other places. I had gotten a number
of emails from readers asking where they could find drivers for
various 3D video cards. I also wanted to find out to what extent the
X Input Extension is supported. Since I hadn't done so in the past, I
decided to contact the various X server vendors and see what they had
to say on the subject.
I sent out a query to the 4 X server vendors I knew of: Xi Graphics,
Metro Link, XFree86 and S.u.S.E. The query read as follows:
Do you have any information which I may use in my column related to
your current or planned support for 3D hardware acceleration
(specifically related to OpenGL/Mesa, but not necessarily so)? What
about support for alternative input devices via the X Input
Extension. The GIMP, and its X toolkit Gtk, both make use of X Input
if available and I expect many other tools will do so as well in the
near future.
Last months article covered 3 vendors, Xi Graphics and
XFree86/S.u.S.E, plus the Mesa package. This month I'll cover Metro
Link. Due to a bit of poor time managment on my part, I wasn't able
to cover Metro Link at the same time as the others. My apologies to
all parties for this.
While reading this article please keep in mind that my intent was to
simply query for information about X Input and 3D hardware support.
It is not intended for this to be a comparison of the vendors products
nor do I offer any editorial on the quality of their products. I have
tried to remove some of the marketing information both from last
months article and this months, but I also want to be fair to the
respondents and provide as much of the information that they provided
that is relevent to the topic.
My first contact with Metro Link was through the assistance of Dirk
Hohndel at S.u.S.E., who forwarded my request to Garry M. Paxinos.
Garry was quite helpful and offered information on his own and had
Chris Bare contact me with additional information.
Garry first provided me with a few dates:
* March 30 - Metro-X 4.3 server release.
* May - CDE 2.1.10
* July - Hardware Accelerated OpenGL
This he followed up with a little more detail:
We have a Level II OpenGL source code license from SGI. This makes it
difficult for us to work with GPL'd source. We have been shipping
a software only version of OpenGL since October 8, 1995. Due to
both the competitive nature of this activity and that things might
change before release, it is rather difficult for us to have
detailed comments on:
+ Architectural issues.
+ Chip/Board Support
+ Relationships with Chip/Board Vendors (most are under NDA
anyway)
+ Relationships with OS vendors
We plan on making our plans public when we get closer to our
release. Count on quite a few press releases.
-Top of next column-
[INLINE]
More Musings...
* XFPovray
[INLINE]
Current plans are for 3 to 4 specific chip types to be supported in
our initial OpenGL hardware release. We plan on supporting at
least two different CPUs in that release. We've had a policy
since our FCS (First Customer Shipment) back in 1995 that all
customers will receive a copy of the hardware version when it is
released.
Garry noted that Metro Link supports 5 different CPUs: x86, PPC,
Alpha, 68k, and Sparc. He also mentioned that they support multiple
operating systems. Although I didn't mention it last month, both
XFree86 and Xi Graphics servers are also available for other operating
systems besides Linux.
Not long after my first contact with Garry, Chris Bare provided a more
detailed description of what is in the works. Chris is the engineer
responsible for Metro Link's X Input Support.
Metro-X 4.3 (due out in the next month or so as I write this) will
include support for dynamically loadable X Input driver modules.
The 4.3 release will include drivers for Elo Graphics, Carroll,
Micro Touch and Lucas/Deeco touch screens. We are also going to
make available a skeleton driver and documentation for anyone
interested in supporting devices on their own. This technology
will also be donated to Xfree86 for inclusion in one of their
future releases.
Our graphical configuration tool provides a fast and accurate
on-screen calibration procedure for any supported touch screen.
Future plans include support for the Wacom tablet as a loadable X
Input module and support for 3D input devices like the Space Orb.
We are interested in supporting any device there is a reasonably
demand for, so if there are any devices your readers have asked
about, please let me know.
As you can see, Metro Link did not list specific boards which they
plan to support. Neither XFree86 nor Xi specifically mentioned any
boards last month. There appears to be quite of bit of work in the
pipe line, however, and according the Garry we should see a flurry of
announcements in the relative near term. Chris does point out some
specific input devices that will be supported in the next release,
however.
Contact Information
* Announcement: comp.os.linux.announce
* Web Site: http://www.metrolink.com
* Business: sales@metrolink.com, which is an autoresponder
* Human sales contact: holly@metrolink.com
Garry added: We do make announcments to c.o.l.a. And we are working
on updating our web site including plans on keeping it up to date. The
sales@metrolink.com address is our standard public address.
However, that is an autoresponder. The address holly@metrolink.com
is referenced in the autoreply and is the 'human' that handles any
sales questions manualy.
[INLINE]
Resources 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
Slashdot.org
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
comp.graphics.rendering.raytracing
comp.graphics.rendering.renderman
comp.graphics.api.opengl
comp.os.linux.announce [INLINE]
Future Directions
Next month: XFont3D/Font3D probably. Beyond that I'm not certain
yet.
Let me know what you'd like to hear about!
______________________________________________________________________
© 1998 Michael J. Hammel
_________________________________________________________________
Copyright © 1998, Michael J. Hammel
Published in Issue 27 of Linux Gazette, April 1998
_________________________________________________________________
[ TABLE OF CONTENTS ] [ FRONT PAGE ] Back Next
_________________________________________________________________
"Linux Gazette...making Linux just a little more fun!"
_________________________________________________________________
More...
Musings
indent
© 1998 Michael J. Hammel
indent
XFPovray 1.2.4/1.3.1
Recently I was commissioned to work on another cover for the Linux
Journal. The cover will be out in a few months and I don't want to
say too much about it right now, but part of what I needed to do for
it was create some 3D text. I've been familiar with how to do this
for some time, using any of a number of tools: AC3D, POV-Ray, Font3D,
and so forth. I have found the quickest 3D text can be created using
Font3D and POV-Ray. The results are generally pretty good. I hope to
give you some insight into Font3D and its XForms front end, XFont3D,
next month.
After the fonts were created I needed to run POV-Ray. This is a
terrific command line tool for creating 3D images that uses its own
language for defining a 3D scene. The scene file is fed to the
rendering engine using any combination of the many command line
options. The only real problem with POV-Ray is that is has so many
options it is easy to forget which ones use which particular syntax.
Fortunately, Robert S. Mallozzi has written a very useful XForms based
front end to the POV-Ray renderer: XFPovray. The tool, like many for
Linux, is available in source. It requires the XForms v0.88 or later
library and will work with POV-Ray 3.0. I had been running the 1.2.4
version for the work on the cover art, but while writing this article
I found that Robert had released a newer version. I downloaded that
one and had no problems building it. Its just a matter of editing 2
files (if necessary), and running xmkf; make; make install. You'll
need to be root to run the default install, since the Imakefile is set
up to install in /usr/local/bin.
[INLINE]
Figure 1: XFPovray v1.3.1 interface
The interface to 1.3.1 is a little different from the 1.2.4 version,
using a smaller footprint for the initial window. The Render options
are also now in a notebook widget. Overall the interface is more
compact. Unfortunately, I found that something wasn't quite right
with my configuration. At times the menus would not cause window
refreshes when the menu was close, leaving bits of the menus covering
other parts of the underlying windows. This may be a bug in XForms
0.88, but the 1.2.4 version of XFPovray didn't seem to have this
problem. Because of this, I'm going to review the 1.2.4 version, with
just a few comparisons made to the 1.3.1 version. The features of
both are very similar and both versions are available on the XFPovray
web site. If you have problems with the 1.3.1 version you can grab
the 1.2.4 version. [INLINE]
Figure 2: XFPovray 1.2.4 interface
XFPovray provides the user the ability to run the POV-Ray renderer on
existing scene files and to edit those files. To edit a scene file
you need to first configure the editor of choice. Select the
Options->Configure menu item from the menu bar of the main window. A
dialog will open allowing you to configure the editor you wish to use,
along with the location of the POV-Ray executable, an image viewer and
a number of other general items. After you click on the Accept button
you will need to use the Options->Save State menu option to save the
configuration to XFPovray's configuration file directory. This wil be
$HOME/.xfpovray by default.
Once you've selected an editor you are ready to edit a file. Click on
the Scene File button to open a dialog box. This button sets the
default scene file to be rendered. You should do this first before
trying to edit any of your include files. The dialog box that opens
is a file selection box. This dialog has changed in the 1.3.1 version
to a format that is a little more standard for such dialogs. Figures
3 and 4 show the two versions of the file selection dialog.
[INLINE] [INLINE]
Figure 3: File Selection box for XFPovray 1.2.4 Figure 4: File
Selection box for XFPovray 1.3.1
The Scene File button only establishes the file which will be passed
to the renderer. It does't open the editor on that file. To open the
editor you next choose the Edit Scene button. Again, the File
Selection window opens. In the 1.3.1 version the default file in this
dialog is the file you chose with the Scene File button. In the 1.2.4
version you start in whatever directory you started XFPovray in
originally. You can edit a file by clicking on it or use the dialog
to choose another file. Once you've selected a file the editor will
open into that file and your ready to do your work.
The View Image button will simply launch an image viewer on a
particular image file. The Config File button will display the
configuration file used for POV-Ray (not for XFPovray). The settings
for many of these can be changed from Render Options (buttons in
1.2.4, a notebook with tabs in 1.3.1), although there doesn't appear
to be a way to save the changes from the interface. If the defaults
are not to your liking, you can always edit the configuration file
(xfpovray.ini) by hand.
The rendering options cover a large number of POV-Ray options, but a
few options are not yet supported (see the web page for details on
what isn't supported). Figures 5 and 6 show the Rendering Options
windows for the two versions of XFPovray. Figure 6 was cropped from
the main window to save a little space. The render options in version
1.2.4 are displayed in the space occcupied by the povray banner
image. Figure 7 shows the tabs in the Render Options window for
version 1.3.1. As you can see, there are quite a few options you can
configure from these windows. Keep in mind that version 1.2.4 has the
most of the same options as 1.3.1, except with 1.2.4 you access them
from a set of Render Options buttons in the main window.
[INLINE]
Figure 5: Render Options, version 1.2.4
[INLINE]
Figure 6: Render Options, version 1.3.1
Figures 7 and 8 show some of the possible templates you can use when
editing a scene file. Templates are examples of the various
primitives and command syntax you will use in a POV-Ray scene file.
To use these templates, you first select the template you want to add
to your scene file (we're assuming the scene file is already opened
and currently being edited). This copies the template to the primary
X selection buffer. This is the same buffer you use when you
highlight some text in an xterm window. To use the copy of the
template you first enter insert mode in your editor and then use the
middle mouse button (or both buttons on a 2 button mouse that is
emulating a 3 button mouse) to paste the selection into your file.
Note that when you select the template from the menus you won't see
any sort of confirmation that the template has been placed in the
selection buffer.
[INLINE]
Figure 7: The solid primitive templates
[INLINE]
Figure 8: Camera primitve templates
Once you've finished editing the file you can render a preview of the
image. Use the Render Options/Output feature to specify the size of
the preview. You can even use the Inc Preview button to sample the
effects provided by the standard include files! The preview uses the
selected texture, color, or whatever on a sphere. You can specify the
direction of lights and the camera position for the preview as well.
This makes selecting the features to add to an objects texture much
simpler and less error prone. Although there is still a bit of trial
an error involved with creating the textures, you can at least sample
some of the effects quickly and easily.
One last thing you should know before trying XFPovray. I mentioned
earlier that I tried both the 1.2.4 and 1.3.1 versions. If you run
the earlier version first, then upgrade to the 1.3.1 version the
program seems to recognize the differences in the configuration
files. However, if you have problems with 1.3.1 and want to fall back
to 1.2.4 you will need to first clean out the files in the
$HOME/.xfpovray directory. The earlier version will get confused by
the changes to the config files that 1.3.1 uses. Its not a real
concern, of course, if you don't try to back track to from the later
to the earlier version.
All in all, XFPovray is quite a useful tool. When I was working on my
3D text I first generated the include files of the text using
Font3D/XFont3D. After that, I was able to work completely from within
XFPovray to sample the images and experiment with minor changes
quickly. I never had to run the POV-Ray executable by hand, which was
a real bonus since I never can remember the correct command line
options. If you do much work with POV-Ray, I think you'll enjoy using
XFPovray as your editing/rendering front end.
indent
© 1998 by Michael J. Hammel
_________________________________________________________________
Copyright © 1998, Michael J. Hammel
Published in Issue 27 of Linux Gazette, April 1998
_________________________________________________________________
Back
"Linux Gazette...making Linux just a little more fun!"
_________________________________________________________________
Linus Speaks at SVLUG Meeting
By Chris DiBona
_________________________________________________________________
SVLUG Photo Album
_________________________________________________________________
When we gave the job of arranging speakers to Sam Ockman, we never
doubted his ability to bring in terrific speakers. His first speaker
for our January meeting was his personal hero, H. Peter Anvin. For
February, we had two speakers: Eric Raymond of "The Cathedral and the
Bazaar" fame and Bruce Perens of Debian. Therefore, the question
became "How do you top these Linux luminaries?" Sam's answer was our
March speaker, Linus Torvalds.
Until December, the Silicon Valley Linux Users Group (of which I am
the Vice President) had met in the back dining room of the local
Carl's Jr. (local burger chain). Carl's held around 40-50 people
tightly. We had been talking about moving the meeting from this spot
for some time, and some of our members who worked at Cisco pleaded to
get a room for us for the Eric Raymond meeting in February. As
expected, this meeting was standing room only, and we knew that with
Linus coming we needed a much larger space. Again, Cisco (with Ben
Woodard pushing it through) came through for us with a room rated for
350 people in their Gateway Conference center.
About a half hour before the meeting began, the chairs were full and
people began to sit on the floor, against the walls and all around the
room. Approximately 500 people had come to hear Linux speak. We were
lucky--the air conditioning was in good shape, and the fire marshal
didn't show up.
The meeting began and after the user-group formalities were complete,
Linus was presented with the VA Research Excellence in Open Source
Software Award, co-sponsored by Red Hat and O'Reilly. The prize was a
loaded dual Pentium 333 from VA Research. In fact, Linus made out very
well, receiving not only the computer just mentioned, but also a Palm
Pilot professional from Klaus Schulz of 3Com and a six-pack of real
beer from local legend Rick Moen. It should be noted that Linus didn't
know about any of these awards before coming to the meeting.
Accompanied by thunderous applause, Linus stood before the podium and
expressed his shock at the number of people who had showed up to hear
him speak. He had been under the impression that it would be a small,
intimate meeting like the first one he had attended last year at the
burger joint.
He began his speech by telling the group what he wouldn't be talking
about. He said he wouldn't be talking about user issues or MIS
issues--all he would talk about was what he was doing with the kernel.
The hour-long speech (not counting the Q&A afterward) was a technical
discussion of how he is improving SMP (symmetric multi-processing)
support in the kernel. He talked about the challenges of moving from a
single kernel resource lock for all CPUs as in the 2.0.x kernels to
individual resource locks for the new kernels. He discussed the ways
these changes affect things internally for the kernel, and how it
affects the handling of shared memory, interrupts and I/O. Linus also
spent some time talking about how the file system is being changed
internally for better performance. The speech will be available
on-line by the time this article goes to print (see Resources below),
I'd recommend that you download it and listen to the whole thing.
In addition to videotaping the speech and taking still photos, the
meeting in its entirety was broadcast over the MBone (Internet
protocol multicast backbone). After Linus had finished speaking, all
of the door prizes were given out, and everyone left the meeting
happier and smarter than they were the day before. Special thanks are
due to Linus Torvalds for speaking and to everyone else involved in
making this meeting a success.
Resources
* SVLUG: http://www.svlug.org/
* REDHAT: http://www.redhat.com/
* VA Research: http://www.varesearch.com/
* O'Reilly: http://www.ora.com/
_________________________________________________________________
Copyright © 1998, Chris DiBona
Published in Issue 27 of Linux Gazette, April 1998
_________________________________________________________________
[ TABLE OF CONTENTS ] [ FRONT PAGE ] Back Next
_________________________________________________________________
"Linux Gazette...making Linux just a little more fun!"
_________________________________________________________________
Markup Languages and lout2
By Murray Adelman
_________________________________________________________________
lout is a markup processor written by Jeffrey Kingston which produces
Postscript output instead of a device independent file. It's
underlying design was developed by the author and it allows it to
offer essentially the capabilities of LaTeX with the simplicity of
maintenance and resource requirements of troff. At the same time it is
easier to make changes to its behaviour than it is with the other two.
The details of the design are beyond the scope of this article. It is
described in the documentation and I will discuss where you can read
about it in more detail at the end of the article when I discuss
documentation.
Basser lout is an implementation of lout for the UNIX operating system
and that is the one I will discuss. It is the one that would be
installed on Linux. From now on when I say lout, I will mean Basser
lout. The package provides special languages for graphics, tables,
equations, and graphs as well as macro facilities. It is able to
automatically handle cross references, create indexes, tables of
contents and bibliographies from a database all in an integrated
environment.
Installing Lout
lout can be obtained from ftp//:ftp.cs.su.oz.au/jeff/lout This article
is based upon version 3.08 which is in the file lout.3.08.tar.gz.
There might be a newer version by the time you read this, but the
author of lout tells me these step-by-step instructions will still
apply.
I strongly suggest you also get lout.teq.2.0.tar.gz. You can have a
preview of the users' guide if you get lout.3.08.user.ps.gz. This
(after it is uncompressed) can be viewed with a postscript previewer
or (its two hundred pages) can be printed out.
When you unpack lout.3.08.tar.gz (using tar -zxpf lout.3.08.tar.gz),
you will have a directory called lout.3.08 which includes the source
files, a makefile, several directories, and a few other files.
Binaries are not provided. The makefile is very well written and the
source compiles cleanly under Linux. I tried it with a.out using
version 1.2.3 and with ELF using versions 1.3.35 and 1.2.20 of the
kernel, and none of them gave any trouble. The instructions for how to
compile are at the top of the makefile and you need make little
changes to the original one. (If you are paranoid like me you will cp
makefile makefile.dist before editing this file.) The mandatory
changes are to reset the directories BINDIR, LIBDIR, DOCDIR, and
MANDIR. If you have root privileges you can set them to whatever you
like except that the installation process assumes that BINDIR, and
MANDIR already exist. This is a good idea since BINDIR must be on
every users' PATH and MANDIR must be in their MANPATH. If you are
indecisive, let me suggest:
BINDIR = /usr/local/bin
LIBDIR = /usr/local/lib/lout
DOCDIR = /usr/doc/lout
MANDIR = /usr/local/man/man1
If you want to install it in an unconventional place, in directories
that don't exist then create the directories BINDIR and MANDIR. I will
refer to these directories generically as BINDIR, DOCDIR, etc. from
now on.
Most of the other macros should be left as is. Make sure OSUNIX is set
to 1 and the others, OSDOS and OSMAC are set to 0 (zero). (They
already were in my copy). That is:
OSUNIX = 1
OSDOS = 0
OSMAC = 0
If you want French and/or German support read the instructions (in the
makefile) for the macros USELOC and LOC_XX. (Where XX is FR or DE.)
For just English support you should have:
CHARIN = 1
CHAROUT = 0
USELOC = 0
#LOC_FR = fr
#LOC_DE = de
Uncomment the relevant commented ones for language support. Choosing
one of the languages will allow lout to speak to you in those
languages when it gives messages. There is also support for formatting
in many languages including language specific hyphenation rules. These
options can be chosen at run time.
Now just do make lout followed by make c2lout when this is finished,
followed by make install. This last command does a lot, including
customizing the installation to your setup. You have to do some hand
editing of some files if your site doesn't use A4 paper. This is a
matter of editing a text file with a text editor and it is well
documented in the makefile. If you prefer your error messages in a
language other than English. You will find instructions in the
makefile for this.
The next step is to do make clean to get rid of all the extra files
produced in the building of the binaries. This leaves the original
sources intact. It also leaves your modified makefile intact. If you
understand where the different files go, you might want to try it out
before cleaning up, because if the installation procedure is at fault
you can fix up your makefile and try again, saving compiler time.
If you have some time on your hands, you can test the installation by
making the user's guide. The instructions are in a README in the
DOCDIR/user directory. It takes some time, especially on a slow
computer. If you follow the instructions the result will be a
Postscript file called op. I renamed mine to users.ps and I keep it
permanently in the DOCDIR/user directory set to be world readable.
This, of course, requires a Postscript viewer. I strongly suggest that
you have ghostview installed if you want to use lout seriously. The
user's guide is a huge document of about two-hundred pages, complete
with a table of contents and an index. You will eventually need it! If
you don't want to make it yourself, you can uncompress
lout.3.08.user.ps.gz.
As a quicker and far less exhaustive test you can use the file
sample.lt that I use for illustrating the language below. It is
complete and self contained. lout writes a few files and leaves them
on the disc when it is finished, for future use with the same
document, so choose a directory where you have write privilege and
will be able to easily locate and remove these extra files when you
are through testing and experimenting with them. Here is sample.lt:
(1) @SysInclude{doc}
(2) @Doc @Text @Begin
(3) @LD @Heading{Hello World}
(4)
(5) Hello
(6) -90d @Rotate{World Hello World 1.5 @Scale Hello}
(7) World Hello
(8) +45d @Rotate{World}
(9) Hello World Hello World Hello World
(10) @ShadowBox{Hello World}
(11) .7 @Scale{Hello .7 @Scale{ World .7 @Scale{Hello}}}
(12) World
(13) red @Color Hello World! Hello World
(14) @Box paint{grey} white @Color{Hello World Hello World}
(15) green @Color 120p @Font .
(16) @End @Text
Then do:
lout sample.lt>sample.ps
You should get the prompt back in a few seconds with no error messages
in-between. Now on disk you have the files: sample.lt (This is the
source file you wrote yourself), lout.li, sample.ld, and sample.ps.
You can now print or preview the file sample.ps. I have added a number
of effects. These effects are all built into lout and should be shown
off. I am not claiming that the other formatters won't do the same
thing, but lout will do it better for reasons I will go into later.
The Language
Like TeX, lout partitions characters into the categories: letters,
punctuation, space, quote, escape, and comment. Letters are the upper
and lower alphabetic and the character @. Punctuation characters are
the usual ones including the various forms of braces and funnily
enough, the numerals. Spaces are the space, tab, and newline
characters. The last three categories have only one member each. Quote
has ' , escape has \, and comment has #. The comment character at any
place on a line in the source file causes lout to ignore the rest of
the line.
You will deduce from the file sample.lt that commands start with @.
That is a custom rather than a law. A command can be named by any
string of letters. If you wish to write filters later to manipulate
your source file using regular expressions, I suggest that you keep to
the custom. This naming freedom comes with responsibility. Remember in
sample.tex there were concatenations of commands with no space between
them. TeX will deduce that a command has ended when it sees the sign
of a new one beginning. This is not the case with lout. If lout sees a
string starting with @ that it doesn't recognize as a command it
notify you of the fact on the screen for your information. Look at
last line of sample.lt. There are two commands @End and @Text. If you
were to forget the space between them and write @End@Text, lout would
see that the string is not bound to a known command and would treat it
like text. Seeing that it starts with an @ it would politely warn you
that the command is unknown. On the other hand if line (13) were to
start with red@Color, the string would just be typeset literally with
no warning. There is no command \Color as part of standard TeX but if
there were and you wrote red\Color, TeX would still know that \Color
was a command.
Another unusual feature of the lout markup language is that its
commands take arguments on both the left and on the right. The command
Color takes the color as the left argument and the text to bear this
color as a right one. Our example at the beginning of line (13) will
print "Hello" in red. In general arguments that control things go on
the left and arguments representing things acted upon go on the right,
but again this is custom rather than law. The name of a command is
delimited on the left and on the right by either a space or a
punctuation symbol. So, as a matter of fact, line (15) could have been
written green @Color 120p @Font. (No space between "Font" and ".".)
The same would be true if the period were replaced by the numeral 1,
but if the period were replaced by the letter "a" the space would be
necessary.
lout works recursively by creating more complex objects out of simpler
objects. A character is an object. A catenation of characters form an
object. A command applied to a string of characters forms an object,
and so on. The whole document is an object. The general rule for lout
is that a space in the source file between objects produces a space in
the final document, but space needed to delimit objects does not. This
is consistent for any character in the space category. That is "Hello"
separated from "World" by five space characters will be the same as if
they were separated by five newlines which is the same as if they were
separated by five tabs. All would result in there being five spaces in
the final document.
Let me go through sample.lt. Line (1) tells lout to read the file doc
in the directory LIBDIR/include. This is called a setup file. It gives
the general layout parameters such as margins, spaces above and below
headers, style of page number, etc. It also calls in two other files
called docf and dl in the same directory. These provide the standard
commands. You can copy any of these to your working directory and
modify them. You would then call them by the command @Include instead
of @SysInclude[footnote 8. If you know something about SGML you will
see a similarity.. If they are in a different directory from the
working one, you must give an absolute pathname. There are no
environment variables to specify your private cache of setup files,
but a directory can be specified on the command line with the -I flag.
I suggest that you make a directory called something like myinclude in
your home directory and alias the command lout to lout -I ~/myinclude.
Then invocations of lout will cause a search in myinclude for any
files specified by the @Include command. The next line contains a
standard invocation to begin the text part of a file. These three
commands or longer substitutes must be in each file.
Line (2) is the statutory declaration for the actual text to begin and
line (3)is the first line of the document. The string @LD there is the
command for a Left Display. This groups its argument into an object
and leaves suitable vertical space above and below it. The default is
one line above and one line below. It justifies its argument with the
left margin. If @LD were replaced by @D, the display would be
centered. The @Heading{Hello World} makes a new object consisting of
the string Hello World with the font size and face for a heading. By
default this simply is bold face at the same size as the body. This
illustrates lout's behaviour with respect to arguments. A string up to
a white space is considered a single argument. Here is an analysis of
the formation of the header. {Hello World} is an object. Thus @Heading
acts upon the object {Hello World} to make a new object which is the
string "Hello World" placed in bold face. Then @LD acts on this object
to place it vertically the way a display should be placed and to align
it with the left margin. The net result using the default settings
will be "Hello World" in bold face with a blank line under it.
Line (4) is blank. Recall that this will produce a single space in the
document. Since the header ends the line, this won't be visible so the
blank line has no effect. In contrast, the other formatters treat two
newlines differently from one. I like this consistency, but I have the
same complaint about taking newlines literally as I do with troff.
lout offers the option of using either TeX's or troff's treatment of
white spaces instead of the default one. The TeX rule consistently
collapses multiple spaces into one space. Unlike "real" TeX, a blank
line will just produce a space in the document and not a new
paragraph. In my opinion this is the best of all worlds. If you want
to go this route then you have to write a macro equivalent to TeX's
\hspace which requests that a specific amount of horizontal space be
left. I will show you one such later when I discuss macros.
Line (5) begins the body of the section. Line (6) uses a facility that
is unique to lout. The command @Rotate rotates the object appearing as
the right argument by the amount specified in the left one. I haven't
discussed the units of measure used by lout but you can guess that d
denotes degrees. Rotations are by default counter-clockwise so -90d
means rotate ninety degrees clockwise. The object to rotate is the
complicated one to the right in curly brackets. I have put other
geometric operations inside this object. The last "Hello" in the
rotated string is the subject of the command @Scale which means to
scale it. The argument on the left says how much, in this case a
factor of 1.5. A scaling factor being a pure number needs no units.
Note that the victim of the scaling has no curly braces around it.
This is because it is automatically delimited by a white space.
Line (7) consists of simple text, because it is on a new line, it is
separated from the rotated object by a space and so is a new object
with a space before lt in the final document.
Line (8) is another rotation, this time forty-five degrees counter
clockwise. The brackets around its argument "World" are not necessary,
I just put them there to show that you can if you want.
Line (9) is just plain text. So far everything I have described will
be set on the same line. It is indeed a high and very deep line
because of the rotated objects, but nonetheless a line. The horizontal
and vertical spacing needed for it has been taken care of
automatically.
Line (10) puts "Hello World" in a shadow box. One of those things that
have a shadow in the lower right corner to give a three dimensional
effect.
On line (11) "@Scale" has as its argument the object {.7 @Scale{ World
.7 @scale{Hello}} and .7 as a parameter. This, in turn has the object
.7 @Scale {World .7 @Scale {Hello}} as its argument and .7 as its
parameter, and so on. The net result is of the three words "Hello",
"World", and "Hello" each one smaller than the one on its left. This
illustrates the recursive nature of lout in building new objects out
of already created objects. (I chose those particular ones to taper
off because this is the end of the first line using the default page
setup.
You can guess that line (12) adds a bit of color to the document. The
only thing to remember is that only the "Hello" will be red. The use
of the colors offered by Postscript are built in to the formatter.
With a black and white printer the color just won't show up, but there
will be no error generated.
Line (14) looks complicated, but it follows the rules of lout syntax
and is hence was not hard to create with the documentation in front of
me. The first command is @Box which draws a rectangular box around its
argument. Some commands can take options and @Box is one of them. The
paint option specifies what color to "paint" the inside of the box.
The next part is the object inside the box. The thing in the box is a
white colored string "Hello World Hello World". Note that there is no
need to put curly braces around the whole thing because white is an
argument to @Color and the whole shebang just makes a white object.
This is further illustrated on line (15) where a huge period is
colored green. The new command is @Font which takes a left and a right
argument. The left one is the size and the right argument is the
subject of the font change. In this case we produce a period in a one
hundred-twenty point font and color it green. You might have noticed
that troff allows relative font changes to be additive. That is you
can ask that a font be made larger or smaller by so many points.
Although I didn't illustrate it, TeX on the other hand favors
multiplicative relative changes, that is you can change to a multiple
of the font size. lout offers both. You can specify an additive change
by +2p @Font, which will add two points to the current font size, or
you can specify a multiplicative change by 1.2f @Font. The unit f
denotes the current font size and 1.2f means the current font size
multiplied by a factor of 1.2. Line (16) contains the compulsory
command to end a document. It must be put in all documents.
If you have ghostview installed, and if you have the file sample.lt on
disk, you can preview it by first doing lout sample.lt > sample.ps and
then ghostview sample.ps when the prompt returns. If you have a color
monitor and a color X server you should see the color effects. You
can, of course, print the Postscript file.
There are packages provided as part of the distribution for tables,
equations, graphics, and graphs. These are more integrated than they
are in troff. The equation one is very similar to the eqn of troff.
The example I gave for troff will work with lout almost verbatim. In
the section on installation I strongly suggested getting
lout.teq.2.0.tar.gz. This is a modified equation package using
Computer Modern Fonts for the mathematical symbols. I have made some
tests and I think the results do look better using it. There are
instructions on how to use it in the documentation. If you plan to do
a lot of mathematical typesetting you should install it. It is dead
easy to do. Just edit the makefile that comes with the package to tell
it where the various files for lout have been installed. and do make.
No compiling or linking is performed and the process is quick.
According to the literature that comes with the distribution, this
packages has not been included in the lout distribution for legal
reasons. The creator of the fonts requires conditions in the license
that are not compatible with the GNU license under which lout is
distributed.
The tables package has a different syntax from that of troff, but
seems to operate with the same philosophy. The results are good with
the examples I played with but it doesn't offer the scope and
flexibility of tbl for making really complex non-standard tables; but
then again, what does?
As I said, graphics are built into lout. Nonetheless there is a
graphics package to provide you with advanced features. It provides
the basic objects usually found in drawing packages such as squares,
circles, ellipses, and Bezier curves. These are all parameterized to
allow relevant specification of size and shape. Many of the commands
and parameters are lout versions of Postscript command. The important
difference is that lout does the formatting whereas Postscript
requires you (with the help of its programming constructs) to account
for every point on the page. troff's pic package offers two levels of
drawing. One is a "user-friendly" level in which you describe the
drawing verbally and one that is more complicated to use which serves
as a basis for the other level, and which allows automating some
drawing operations which would otherwise be tedious. lout's
instruction set seems to lie somewhere in between. On the other hand
it is more manageable for the casual user than TeX's xypic package.
There is also a package for producing graphs, and one for formatting C
and Pascal code from the sources. My line of work doesn't involve
using them and I haven't tried them as yet.
lout as it is distributed is not likely to require extra macro
packages. You can do just about any job you need by modifying the
existing ones. It, of course, also has facilities for writing your own
commands. Let me give you a simple one called @Hspace. If you take my
advice and use the TeX spacing option you will find it useful:
def @Hspace
right x
{|x}
It is named after one that does the same job in TeX where it is called
\hspace. It takes one argument and leaves that much horizontal space.
For example @Hspace .5i will leave a horizontal space of one-half
inch. Because of the way lout puts one object to the right of the
previous one. There doesn't appear to be a way to write an equivalent
of TeX's \vskip. There is, of course, a primitive for leaving vertical
space.
The documentation that comes with lout instruct you to put definitions
(macros) in a file called mydefs which is automatically read in when
lout processes a document. I have experimented with putting them in
source file along with the text with varying success. Ones that only
use primitives, like @Hspace, can be put at the very top of a document
before the SysInclude command. Others that use commands like @Color
seem not to work unless they are in mydefs.
A consequence of the liberality of naming commands is that if you
write the definition
def teh
{the}
Whenever you make the common typing mistake of typing "the" as "teh",
lout will automatically change it to the right word. Of course you
have to make a separate one with a capital "T" and you have to make
sure the term "teh" doesn't appear in your document. This only uses
lout primitives and can be put at the beginning of the document.
I have used the word recursive in an informal sense above, but lout is
recursive in the technical sense also. You can call a command within
itself. This is the underlying principle behind its design. There are
useful recursive examples given in the expert's guide. Reading it will
give you some idea of how lout is implemented. I recommend chapter 1
of the expert's guide for general reading. I will give a useless but
fun example here that I hope will illustrate the point. The lines
def @Banner
{red @Colour Hello blue @Color World @Banner}
@Banner
will write a red "Hello" followed by a white space followed by a blue
"World" repeated until a line is filled. If you want to try it, be
sure to put this definition in the mydefs.lt file and the invocation
of it (third line) in a source file.
This recursive behaviour is used more seriously in the implementation
of lout. It is one of the "secret ingredients" that allows lout to
offer so many facilities in such little space. See the "Expert's
Guide" that comes with the distribution for more details.
lout like LaTeX is a logical markup language. The author indicates
what textual elements he or she wants at a given point and the
formatter will take care of the details. With different kinds of
documents these details might be different. For example a section in a
book is numbered differently from one in a simple article. Like LaTeX,
lout takes care of these differences by providing different style
files for different document structures. The ones offered in the
distribution are the doc, report, book, and slides. The doc style is
for simple basic documents such as a scholarly article. The report
style is for technical reports. The book style is obviously for books,
and the slides style is for making one or a series of overhead
projector slides. If you have a color printer, you can use the color
facilities in lout to great advantage with the slides style. There are
variants of each of these files for output other than Postscript.
It is difficult to change the defaults in LaTeX style files. I gave an
indication of such a change. It is easier in troff except for the
somewhat artificial devices of setting registers with strings of
numbers. Syntactically, lout is dead easy to change. The only
difficulty is in knowing where to put the changes. You are told this
in the documentation.
Let me give an example. Suppose you want to change the doc style so
that it more closely imitates the output of troff's mm macros. (Not
that I recommend doing this!) In particular you want to set the
default font size to ten points, you want to make block style
paragraphs the default style, and you want the headings to be in
italics. Assume that you wish to do this locally rather than
system-wide. Then you have to make yourself a new style file to change
the paragraph style. First copy LIBDIR/include/doc to the working
directory call it troffdoc. Now open up the file with a text editor.
You will see the following near the top of the file.
@Use { @DocumentLayout
# @InitialFont { Times Base 12p } # initial font
# @InitialBreak { adjust 1.20fx hyphen } # initial break
# @InitialSpace { lout }# initial space style
# @InitialLanguage { English } # initial language
# @InitialColour { black } # initial colour
# @OptimizePages { No } # optimize page breaks?
# @HeadingFont { Bold } # font for @Heading
# @ParaGap { 1.30vx } # gap between paragraphs
# @ParaIndent { 2.00f } # first-line indent for @PP
# @DisplayGap { 1.00v } # gap above, below displays
# @DisplayIndent { 2.00f } # @IndentedDisplay indent
# @DefaultIndent { 0.5rt } # @Display indent
........
This is a list of the parameters that can be set (the list is longer.
I have included roughly what I need for this example.) Notice that the
settings are commented out. First uncomment the line with @InitialFont
and change the 12p to 10p. Now you have your ten-point default. Now go
down to the line @ParaIndent. Uncomment it and change the 2.00f to 0f.
Now you have no indentation for paragraphs. The vertical space between
paragraphs is pretty good as it stands so leave @ParaGap as it is. Now
we want to take care of the font for the headings. Right above the
ParaGap line is one with @HeadingFont. Uncomment this and change Bold
to Slope. Now you are there. Save the file. and change the top line of
your source from @SysInclude{doc} to @Include{troffdoc}. Now you have
it. If you want to make it system wide, and you have root privileges
you can put it in LIBDIR/include or if you wish to be dictatorial,
modify doc itself.
All three formatters offer facilities for making cross references and
a table of contents. LaTeX and troff offer an interface with programs
that will automatically produce bibliographies from databases and
indexes. lout is unique in offering these two built in. Given that you
want these features, lout is the easiest of the three formatters to
install, maintain and use. My installation takes up 4.3Mb and this
includes the teq package that I recommended and a package for
producing bar codes. This makes it a pretty modest formatter.
I spoke about the ensemble of the other two programs. There is not
much to say about that for lout. Everything is built in and is
accomplished by using flags on the command line or by requesting that
the relevant files be read in. Each setup file has a list of
parameters at its beginning. You can change them, or you can change
this parameter in your source file. For example, I made some changes
to how the section headers would look in both LaTeX and troff. To
change spacing above and below the header in lout I would simply put
@DisplayGap{.75v} at the beginning of my file. This would change the
default spacing of one space to three-quarters of a space and make the
document more compact. This is considerably simpler than what must be
done for LaTeX. It is easier to remember than the somewhat artificial
method in troff of setting a string register.
One problem with TeX has always been that it takes an expert to
manage. Unfortunately most system administrators are not interested in
test formatting and so in many sites an "off-the-shelf" version is
installed and the users accept the defaults or learn to change them
themselves. On the other hand, a system administrator who knows
nothing about lout could change the relevant line in the
LIBDIR/include/doc file to read as above and the change will be
universal. Ordinary users can make their private default by writing
out the parameters to be changed in a file on the path specified by
the -I flag described earlier. In extreme cases they can even copy the
default setup file to such a place and modify any or all the
parameters. With a modified doc in a private directory @Include{doc}
is placed at the top of the document instead of @SysInclude{doc}.
I mentioned earlier that lout produces a Postscript file where the
other two produce device independent ones. This means that the lout
language can offer equivalents of all of the Postscript geometric and
color commands. Since these commands are programmed into the
formatter, it puts the objects created by them in a first class box.
This is as opposed to Tex and troff which allow Postscript commands to
be sent to a suitable driver while ignoring them during the creation
of the device independent file. In this case it is up to you to
provide a second class box to make room for objects created and/or
transformed by the Postscript commands. The price you pay for this is
a loss of device independence. ghostscript fixes a lot of this problem
(see the section on Postscript) but if you have a high quality
non-postscript laser printer with resident fonts, you have to abandon
those fonts and get new ones. Your gain is the added flexibility of
Postscript though.
The new version of LaTeX, LaTeX2[epsilon], has a package called
graphics that extends the markup language to allow for rotation and
scaling. There is another package called color that extends the
language for employing color. Packages come out as the need for them
becomes clear. For example there is one called fancybox that makes
shadow boxes. However, graphics and color will only work with certain
Postscript drivers at present. Thus you have to give up device
independence when you use them. (I can't give you the complete
collection of packages needed to match lout's capabilities. The
documentation with some of them is scant. Keep in mind, however, that
LaTeX2[epsilon] is in an experimental version. LaTeX3 when it comes
out might have a complete package for graphic which can then be
documented in the "standard literature".)
I have been assuming that documents consist mainly of text with
incidental graphics inserted. There are other kinds of documents, such
as advertising layouts, that should be looked at as graphics with
incidental text inserted. For the reasons given in the last paragraph,
lout has to be considered as the best tool for this. Closely related
to this is the option of producing Encapsulated Postscript (EPS) which
produces graphics files meant to be included inside a larger document.
This option is invoked with the -EPS flag.
lout also offers the option of producing ASCII output. In order to do
this you use the -P flag on the command line and change whichever
setup file you are using to one with an "f" attached to its name. (So
you would have @SysInclude{docf} in place of line (1) of sample.lt.
This will not be necessary in the next version, doc will work with
both outputs. If one is to judge from the text newsgroups, being able
to produce both ASCII for on-line documentation, and high quality hard
copy with the same source file is a very desirable feature. It is one
shared by troff but not by LaTeX.
There is a trend to use fonts other than the standard Adobe fonts
provided with Postscript printers. Traditional fonts like Garamond and
various exotic fonts for special purposes can be bought for a
reasonable price nowadays. lout is the easiest formatter in which to
install new fonts and I will close this lout specific section by
outlining how to do this.
First of all, with your new fonts you should have a set of outline
(glyph) files. They have the extension .pfa or .pfb and they are of no
concern to lout. They are installed in your postscript printer or in
ghostscript. See the earlier section on Postscript for instructions on
how to do the latter.
Secondly you should have a set of metric files. These are what lout
wants to work with. These files have the extension .afm for "Adobe
font metrics". lout uses these without modifications.
I will continue to use LIBDIR to denote the directory in which the
lout library has been installed (/usr/local/lib/lout by default.)
There is a directory called LIBDIR/font and that is where the font
metric files are placed. You can give them any name you like that
doesn't coincide with the ones already there. The default fonts have
names in mostly in capitals without an extension. They are
abbreviations that describe the font. For example Times Roman is
denoted by TI-Rm and Times Italic is denoted by TI-It. To make things
more concrete let me use the same Charter fonts that I installed in
ghostscript earlier as a running example.
There are four files for the Charter fonts (at least in my version):
bchr.afm, bchri.afm, bchb.afm, bchbi.afm. (By the way, the initial "b"
in the name is for Bitstream the producers of the font.) These are the
metrics for Roman, Italics, Bold and Bold Italics respectively. I have
decided to call them CH-R, CH-I, CH-B, and CH-BI in the lout
installation. I copy the files into LIBDIR/font with their new names.
For example cp bchr.afm LIBDIR/font/CH-R. If you are sure you won't
need them for something else, such as installing them in TeX or groff
then you can move them instead of copying them. They are now installed
and the next step is to tell lout about them.
Change to the directory LIBDIR/include and open the file fontdefs with
a text editor. This file has long lines that should not be broken so
make sure your editor is not set to automatically break lines. The
file will be hard to read with a standard eighty column screen, but
there is not much to it. If you are using X you can elongate the
window.
The general format of the file is all in one line:
fontdef <lout family> <lout face> {&ltzPostscript> <font-metric file> <characte
r map file> <Recode?>}
fontdef is the command that tells lout that what follows is a font
definition. You will put that on each line of the as the first entry.
It is the only command you need know about to install a font. <lout
family> is the family name with which you will refer to the general
family. You can choose this. I choose the name Charter. <lout face> is
the style of face. The default body face (often called Roman) is
labeled Base, Italics is labeled Slope, Boldface is labeled Bold and
Bold Italics is labeled BoldSlope. In theory you can change these, but
I don't recommend it as if you do some of the built-in default font
selections of lout won't work properly. You will have to be prepared
to give every font change command in its full form. <Postscript> is
the official Postscript name. You obtain that from the .afm file as I
described in the Postscript section. However note that it is written
differently in this file than it is in the Fontmap file in that it is
missing a leading "/". That slash is part of the ghostscript language
and is not used by lout. The Postscript name includes the family and
the face. <font-metric file> is the name of the file you put in
LIBDIR/font containing the font metrics. <character map file> is the
file that tells lout which place on the font table each character is
to be found. For any font consisting of standard alphabetical
characters (as opposed to special symbols) you will use LtLatin1.LCM.
The various mapping files are to be found in LIBDIR/maps, but you
needn't be bothered with them unless you want to do something special,
like install a new symbol font. Most of the font families don't offer
a separate symbol font anyway but rely upon the standard Postscript
one. This is what lout assumes. The last entry <Recode?> consists of
the word Recode or the word NoRecode. This is to tell lout whether to
use the character mapping. Again, unless you are planning to do
something unusual, you should choose Recode.
Next, where to put the entries for your new font. The existing
fontdefs file starts out with all of the font definitions that come
with lout. Put you new ones right after them. So scroll down the file
until you see the last line starting with fontdef and put yours right
underneath. Comments are denoted by # at the beginning of the line so
you complete entry can look like:
### Added by me 1 December 1996
fontdef Charter Base {CharterBT-Roman CH-R LtLatin1.LCM Recode
}
fontdef Charter Slope {CharterBT-Italic CH-I LtLatin1.LCM Recode
}
fontdef Charter Bold {CharterBT-Bold CH-B LtLatin1.LCM Recode }
fontdef Charter BoldSlope {CharterBT-BoldItalic CH-BI LtLatin1.LCM Re
code }
That is all there is to it. Your fonts are now installed. Now if you
begin your document with
@SysInclude{doc}
@Document
@InitialFont{Charter Base 12p}
//
@Text @Begin
it will be typeset in the Charter font. The command @I will call for
Charter Italics, and so on. If you call for special symbols they will
come from the symbol font which is installed by default in lout.
Note that you are free to assign lout font families to any set of font
files as with the virtual font construction in Tex. That is you can
take Base from the font foo with official Postscript name foo-Roman
and Slope from the font bar with official Postscript name bar-Italic.
If you call this new font Newfoo, your entry in the fontdefs file will
begin like this
fontdef Newfoo Base {foo-Roman ...
fontdef Newfoo Slope {bar-Italic ...
This is handy because some font families have a face missing. You just
have to find one that blends in with the existing faces. This is what
is done by typesetters and you can find books that tell you which ones
blend with which.
All that I have said about installing fonts assume that the fonts are
encoded with eight bits. This means that eight bit words are used to
describe each character in the font, allowing a font to contain 256
characters. If you use TeX you might be aware that the original
version only used seven bit words to name the characters in a font.
This was changed in later versions, but the Computer Modern fonts
weren't recoded for this change. The result is that each standard TeX
font can only have 128 characters. What gets left out are the European
special characters that are not used in English (various accents,
crossed out els, etc). Instead they are formed by digraphs--the
overstriking of two different characters. lout assumes that these
extra characters are available and it is not set up to form
digraphs[footnote 9. Of course macros can be written to form them.].
Other symbols that are on the ordinary alphabetical fonts in
Postscript are to be found on the Computer Modern symbol font and code
has to be written to point lout in the right direction. Thus if you
want to install a Postscript version of the Computer Modern fonts in
lout, such as the free BaKoMa ones, you have to do a lot more work.
There is an eight bit encoding of the Computer Modern font now,
sometimes known as the "Cork encoding", and when a Postscript version
of these comes out, it will be easy to install Computer Modern in
lout.
Summary
In a nutshell, lout offers all of the capabilities of LaTeX requiring
considerably less resources. It doesn't do quite as good a job putting
together the fragments that make up large delimiters, large square
root signs, and the like, but it still does a good job. The difference
is small enough so that I wouldn't use it as a criterion for choosing
one above the other. All three of the formatters I described do a good
job with bread and butter typesetting, that is line and paragraph
breaking and and sane hyphenation. I wouldn't make my choice on this
basis either.
lout seems to run slower than LaTeX for an equivalent job and requires
more passes to resolve references that are written to an extra file,
such as cross-references. If you have a slow machine, or do huge
documents with a lot of cross-references, tables of contents, and so
on, and if time is a factor, then you might find lout to slow for you.
On the other hand, lout allocates memory dynamically and so you won't
run out of memory with a complex document as you can with LaTeX.
Like LaTeX, lout offers logical markup and it is far easier to
customize the layout files than it is to customize LaTeX style files.
On the other hand, TeX offers a more convenient macro interface. You
can write them anywhere in the document or in a separate file to be
input at any point of the document, whereas with lout you have to
write some in a separate file which is kept in the working directory.
(There do seem to be comands that change the scoping rules, but they
are not well documented.) This is hardly a disadvantage if you use one
directory per document, or if you group small documents that need the
same macros in the same directory, but if you keep several documents
in the same directory, each needing macros with the same name, but
with different actions, then you will have to do some editing of the
layout file. It also makes it difficult to send a document in a single
file if it uses user-defined macros. Many TeX-perts feel that it is a
bad idea to put all of the macros in one file anyway; for the same
reason it is not a good idea to have all of the source in one file for
a large programming project. In the case of TeX, there is enough
difference in different installations so that often a large document
produced in one site has to be mildly edited before it is processsed
or printed at another. It is far easier to find these problems if the
document is logically divided into modules. (I tend to tar, gzip and
then uuencode my documents before sending them by email. They pass
safely through the most primitive mailing routes this way. It does
depend upon the person on the other end having versions of uudecode,
gunzip and tar, but there are versions of these for most operating
systems.)
Of the three formatters that I described, "Barefoot" LaTeX is the
weakest for drawing facilities lout is the strongest. LaTeX with
suitable packages and lout as it is produce geometric transformations
of objects in first-class boxes, lout is the more versatile. The gpic
package that comes with groff falls down in that department, but it is
by far the most user-friendly package for drawing. It can be used to
produce pictures that can be imported into LaTeX with the -t option
which turns it into a GNU version of tpic (as usual with more features
than the original.) Pictures made with gpic can be saved as Postscript
files and easily imported into lout.
You have to buy troff and LaTeX documentation. There are standard
books for LaTeX which I mentioned earlier. The other book that should
be on your shelf if you use LaTeX is "The TeXbook" by Donald Knuth,
also published by Addison Wesley. A new version of LaTeX2[epsilon] is
issued every six months so there is no chance that any book can keep
up-to-date. New packages usually come with documentation, but
sometimes it is pretty scant and requires considerable knowledge of
TeX to decipher. Problems and solutions are usually posted in the
comp.text.tex newsgroup. Good books on troff, and especially the mm
macros are getting hard to find. My favorite, which is out of print at
present, is "UNIX Text Processing" by Dougherty and O'Reilly,
published by Hayden. O'Reilly and Associates also publish the Berkeley
4.4BSD User's Supplementary Documents which contains documentation on
troff but doesn't discuss pic or the mm macros. There is no newsgroup
for troff specifically, but it problems and solutions are often posted
to the comp.text group.
lout comes with its own documentation. The user's guide is a book and
compares with the textbooks for the other processors. If you want to
go deeper into its internal workings there is the expert's guide.
There are examples in both of them. I have bound the user's guide in
two parts. The first comprises chapters 1-5 which contains the
document formatting information and the second comprises chapters 6-11
which contains information on the individual packages. You won't see
textbooks on lout on the shelves of bookstores and so if don't like
the documentation provided, you are stuck. There is sometimes
discussion on comp.text about lout and there is a mailing list. To
subscribe send an email to lout-request@nlif.spb.su with subscribe in
the Subject field.
I haven't said much about recovery from error. All of the formatters
are pretty cryptic in this department. lout and troff are both the
strong silent type that only say something when they need to. If lout
runs into an error it will give you the line and the relative place on
the line where it is detected. Raw troff gives nothing away except
that there is an error. It does provide macro writers with a mechanism
for error reporting and the mm package is pretty informative. TeX
gives you a running commentary of what pages are being output, and
what files are being read in. When it comes upon an error it gives
tells you in what file and in what line of the file the error was
found. It also opens an interactive window and offers several options
for handling the error. I mentioned some of the more interesting ones
earlier. This constant activity on the screen while TeX is running
might make it appear to finish faster than lout which leaves you
staring at a blank screen until something goes wrong. Just as you have
to learn how to write markup, you must learn how to interpret error
messages. I know from experience that you get better with experience.
There are what I would call external disadvantages to using lout. By
that I mean those that are caused by the fact that it is relatively
new and not used by a large number of people. This means, first of
all, that you won't find, for instance a "lout mode" written for the
emacs editor. Although the drawing facilities that come with lout are
pretty extensive, they need some "sugar coating". For example, it is a
nuisance to draw commutative diagrams in the present language[footnote
9, I assume from browsing the site ftp://ftp.cs.su.oz.au/jeff/lout
that there is a commutative diagrams package in the offing.]. I would
like a more user friendly way of putting named blocks of graphics
together. (See Chapter 9 of the User's guide for how it needs be done
at the present.)
The other external disadvantage is that publishers are most likely not
equipped to handle lout source code. For camera-ready documents this
is no problem, but if the camera-ready source is to be produced by the
publisher, then the entire document will have to be re-keyed.
Similarly if you want to email a source file to a colleague, he or she
will have to have lout installed to read it.
To some extent these are problems that can fix themselves with time.
For all we know somebody might be writing an Emacs mode for lout at
this very moment. As far as publishers are concerned; over the years I
have heard bitter complaints from fellow mathematicians that so-and-so
publisher won't accept TeX document with such-and-such macro packages.
The situation changes as the package gets more popular and proves its
usefulness.
_________________________________________________________________
Copyright © 1998, Murray Adelman
Published in Issue 27 of Linux Gazette, April 1998
_________________________________________________________________
[ TABLE OF CONTENTS ] [ FRONT PAGE ] Back Next
_________________________________________________________________
"Linux Gazette...making Linux just a little more fun!"
_________________________________________________________________
Using the Flame Plug-In for Backgrounds
By Larry Ayers
_________________________________________________________________
Introduction
Lately I've happened upon a technique for making unobtrusive but
pleasing screen backgrounds using Scott Draves' Flame plug-in for the
Gimp. These backgrounds possess characteristics common to many fractal
images, especially those created with some variation of the Iterated
Function Systems (IFS) algorithms. They aren't symmetrical, but there
is some mysterious organizing principle which gives them a
quasi-organic appearance, though they don't really resemble any
organic forms (on this planet, at least!). They also can be
reminiscent of microphotographs or scanning-electron-microscope
photographs.
Before I outline the technique I've been using, here are some examples
of these tile-able images:
flame background #1 flame background #2
flame background #3
_________________________________________________________________
These images were originally 512x512 pixels but they have been reduced
to half size for faster loading. They are usable as backgrounds at
this size but are more detailed and interesting in the original size.
I've also converted them to GIF format (from JPEG) and reduced their
color-usage. This has degraded the images somewhat. Generate one from
scratch to see the finely detailed tracery which Flame can render.
_________________________________________________________________
Procedure
Before starting the Flame plug-in (in the Filters->Render sub-menu)
it's a good idea to first create a new blank image. It will appear
with the default white background; flood-filling it first with a
background color or pattern saves a lot of time later. After the Flame
pattern has been applied to the image it can be difficult to alter the
background without affecting the fractal portion of the image. Two
layers could be used instead, but this is intended to be a quick
procedure. Any background image will eventually become nearly
unnoticeable after a while, so it's handy to have a fast means of
creating new and interesting ones.
Once your background is satisfactory, select the Flame plug-in (a
screenshot of an earlier version of the interface is in one of my
articles in LG #24, Updates and Correspondence ). The main window will
display a thumbnail image of a pattern rendered with random parameters
and one of several built-in color-maps. Controls in the window allow
tweaking several variables, such as position, zoom-level, and
color-map. Click on the Shape Edit button and a new window will appear
with nine thumbnail images, the center one being the original and the
others variants of it. Click on any of these (with the left mouse
button) and it will become a parent to eight new versions. There are
several different types of mutations (such as spherical, sinusoidal,
or horseshoe) available from the Variations menu. Though not
immediately evident, clicking the right mouse button on any of the
nine selects it and it will take the place of the original image in
the main window when the "Ok" button is clicked, dismissing the Edit
window.
Make any adjustments in the main window, perhaps even returning to the
Edit window if necessary, before clicking the main window's "Ok"
button; once this is clicked there is no going back without starting
all over. Though all of Flame's thumbnails are displayed with a black
background, the only part of the rendering which is applied to the
empty destination image is the foreground, thus the need for the
preparatory background filling described above.
The Make Seamless plug-in (in the Filters->Map menu) isn't suited for
every sort of image, but these Flame-generated images usually tile
well. After saving the image in the format of your choice, try it out
with xv -root -quit [filename] on an empty desktop. Though there are
several utilities available which will load a random background image
when X starts up, my favorite set-up is to have a simple image or
background color load in my .xinitrc, then set up a window-manager
sub-menu with a few favorite tile-able images. Here is an example from
my .fvwm2rc:
AddToMenu Backgrounds "Backgrounds" Title
+ "Flame1" Exec exec xv -root -quit ~/.backgrounds
/ft1.jpg
+ "Flame2" Exec exec xv -root -quit ~/.backgrounds
/flt5.jpg
+ "Bluetile" Exec exec xv -root -quit ~/.backgrounds
/bluetile.jpg
+ "Marble" Exec exec xv -root -quit ~/.backgrounds
/marb2.jpg
Have fun!
_________________________________________________________________
Copyright © 1998, Larry Ayers
Published in Issue 27 of Linux Gazette, April 1998
_________________________________________________________________
[ TABLE OF CONTENTS ] [ FRONT PAGE ] Back Next
_________________________________________________________________
"Linux Gazette...making Linux just a little more fun!"
_________________________________________________________________
The Maxwell Word-Processor
By Larry Ayers
_________________________________________________________________
An interesting announcement was posted in late February to the
comp.os.linux.announce newsgroup concerning the free availability of a
new word-processor for Linux. It seems that the Maxwell word-processor
had been developed by a British software company, Tangent Data
Limited, with the intention of selling it as a commercial product, but
for some reason the project was scrapped and the company was wound up.
The three programmers involved (two of whom were partners in the firm)
decided to release on the web a statically-linked Motif binary
package.
I didn't really need a word-processor, but curiosity got the better of
me, especially since it was just a one-and-one-half megabyte download.
It wasn't hard to install (just unpack into /usr/local) but when I
started it from an rxvt window, many seconds went by, with no disk
activity. Evidently the license daemon is still automatically
summoned, but since there isn't any licensing to do it gets confused
and hangs for a while before reluctantly allowing the program to
start. Finally a small control window appeared with a button on it
inviting me to "open a document window"; I tried, and the window would
appear for a fraction of a second before dying of terminal
segmentation fault. Oh, well...off to /dev/null with that one, but
before consigning the directory to oblivion, I noted the e-mail
address to which comments and bug-reports should be directed, and
pasted the error-messages into an e-mail message. Within a couple of
hours I had a reply from Tom Newton, one of the developers, in which
he stated that they had received other, similar reports from users
with 16 bpp displays (which is what I use). That evening I received
another message, this one bcc-ed to what must have been quite a few
other Linux users who had written. It seems that so many people had
tried to download the Maxwell archive that the ISP was swamped, and
requested that the file be moved elsewhere. Before uploading it to
Sunsite's incoming directory, the developers fixed the 16-bpp bug. The
message also hinted that the application might end up GPL-ed, with
full source available.
So I tried it again, and this time it would successfully start up. The
document window is a typical Motif word-processor interface, with the
usual menu- and button- bars. Here's a screenshot:
Maxwell Document Window
_________________________________________________________________
Features and Limitations
I use mostly free software, and one annoying trait I've noticed in
many commercial applications for Linux is the neglect of perfectly
serviceable utilities which are found on just about any Linux system.
As an example, the ispell program is an efficient and dependable
spell-checker, easily incorporated into other programs. Nonetheless
many word-processors include their own spell-checking dictionaries and
routines, one reason for their bulk.
Looking over the Maxwell files, I was interested to see that in the
binary directory there are only two real files, the main executable
and the license manager. The remainder of the files are symbolic links
to file, grep, ghostscript, lpr, and ispell. Evidently the developers
are familiar with Linux and saw no reason to re-invent several wheels.
I imagine the savings in work was a factor as well.
The fonts are also represented by symlinks to a few of the fonts in
the /usr/X11R6/lib/X11/fonts/type1 directory, with each one
accompanied by an .mfm file, which stands for Maxwell Font Metrics.
These files are automatically generated by Maxwell when it starts up
and finds new fonts or symlinks installed. Adding new fonts isn't
difficult (thanks to Tom Newton for this information!); just symlink
them from your usual font directory (often /usr/X11R6/lib/X11/fonts)
to /usr/local/maxwell/fonts/Type1 and add entries to the fonts.scale
and fonts.dir files in the same directory (these are installed as
symlinks, but don't have to be).
Symlinks may have to be altered in order to enable the spellchecker. A
subdirectory, /usr/local/maxwell/dict, should be created if it doesn't
already exist, and the various *.hash files which ispell uses should
be symlinked there; these are often found in /usr/lib/ispell. When
this is correctly done a typical spell-check window can be summoned.
Maxwell saves files in its own binary format which is translated into
Postscript before being sent to the printer. I don't have a printer
which understands Postscript, but any print-filter which will call
ghostscript with the necessary switches should work; it does for me. A
disadvantage to this approach is that print quality will be dependent
upon how well ghostscript supports your printer. Rich Text Format
(RTF) is also supported and these files can be successfully loaded by
WordPerfect. There seems to be quite a clamor in the Linux newsgroups
for a word-processor which can load and save MS-Word format files, but
Maxwell lacks this feature. The MS word-processors do support RTF, so
there is some potential for file interchange between MS apps and
Maxwell.
At first I thought Maxwell used its own font-rendering routines rather
than the native X services, as scalable fonts are displayed on the
screen free of the jagginess X applications usually suffer from when
non-bitmap fonts are rendered. The rendering is better than this, but
not quite as anti-aliased as the Gimp's or Ghostscript's output. Tom
Newton (in an e-mail message) stated that Maxwell uses native X calls
but small chunks of text are rendered separately before the position
of the next chunk is calculated.
This is a worthwhile and notable feature; it has no effect on print
quality but makes for more readable text on-screen when using
different font sizes.
Some of the features, such as the table-creation facility and graphics
inclusion, need more work. Attempting to include a graphics file in a
document will cause Maxwell to crash if it is running on a 16 bpp
display. Tables can be included, but though the fields dynamically
resize themselves I didn't find any way to add padding or borders
around fields.
Basic page and character layout is handled much as in other
word-processors, with dialog-windows as well as menus and button-bars.
In short, most standard word-processor functions work well, something
which can't be said for the various free word-processor projects I've
tried, many of which have been seemingly abandoned. All but LyX, that
is, but LyX is sui generis.
Conclusion
There has been a remarkable lack of public comment from the Linux
community concerning Maxwell, considering how often the plea for a
free word-processor is reiterated. I suspect that many people
downloaded it, found that it wouldn't (in the initial version) run on
a 16 bpp display, and discarded it. As I stated above, this has been
remedied, and the current version is well worth a try. If the source
was released under the GPL I'm sure interest would pick up and further
enhancements would begin to appear.
After much of this article was written a third release (version 0.5.2)
was uploaded to Sunsite. A few bugs have been fixed, and the annoying
and time-consuming license manager has been removed, so the start-up
is much quicker. According to Tom Newton, who has been putting
together these releases, this will be the final binary version; if the
source isn't released Maxwell will probably fade into obscurity.
So what will Maxwell's eventual fate be? The two former partners in
Tangent Data own the rights and haven't decided what to do with it. A
possibility of GPL status has been mentioned which would be
interesting and useful to us all. One possibility would be to release
source for the current build and then sell plug-ins or modules which
would add features such as additional file-exchange filters. Support
could be a fee-based service as well. This approach is being developed
for the Gimp by the new WilberWorks company.
Even if the source isn't made available Maxwell is usable in its
current state for basic word-processing, helping fill the gulf which
currently exists between text editors and the large and feature-laden
applications such as StarOffice, Applix, and WordPerfect.
_________________________________________________________________
Copyright © 1998, Larry Ayers
Published in Issue 27 of Linux Gazette, April 1998
_________________________________________________________________
[ TABLE OF CONTENTS ] [ FRONT PAGE ] Back Next
_________________________________________________________________
"Linux Gazette...making Linux just a little more fun!"
_________________________________________________________________
WordNet logo
_________________________________________________________________
WordNet: A Fast and Flexible Word Database
By Larry Ayers
_________________________________________________________________
Introduction
There have been times when I've wished I had dictionary program with a
Linux interface. One of my favorite print dictionaries is the American
Heritage Dictionary, which I've used and appreciated for many years.
Dux Software has been offering a Linux version of their computer
interface to the dictionary (combined with a thesaurus) for some time
now, but I was deterred by the $49.95 price-tag, considering the
existence of a perfectly usable print copy of the book, sitting on a
shelf not six feet from where I'm typing this. But there are powers
which the computer-based dictionary possesses which can be quite
useful. A computer excels at searching for information in a database,
and combined with the power of regular expressions a digital
dictionary has significant advantages.
The only free digital dictionary I've come across was an old edition
of Webster's, available from Project Gutenberg in the form of two
large text files. These could be searched for a word with grep, but I
was looking for something with an X interface; grep would also find
instances of words used within a definition, which would clutter up
the output. Of course there are on-line WWW dictionaries, which are
fine for people who are on-line most of the time. Users accessing the
net via a dial-up connection with an ISP are unlikely to be online
while writing text for which a dictionary would be needful. I happened
across a usenet posting recently which led me to to this site, and
before long I was downloading a 13 mb. archive containing a
dictionary/thesaurus called WordNet.
WordNet Basics
The usenet announcement of the most recent WordNet release contained a
good description of the package:
WordNet is a powerful lexical reference system that combines
aspects of dictionaries and thesauri with current psycholinguistic
theories of human lexical memory. It is produced by the Cognitive
Science Laboratory at Princeton University, under the direction of
Professor George Miller. In WordNet, words are defined and grouped
into various related sets of synonyms. Not only is the system
valuable to the casual user as a powerful thesaurus and dictionary,
but also to the researcher as one of the few freely available,
lexical databases. WordNet is available via an on-line interface
and also as easy-to-compile C source code for Unix.
WordNet consists of interlinked databases of words, synonyms,
antonyms, and usage examples. In the best unix tradition, this data
can be manually accessed via the command-line. This makes it
relatively easy to create script-based interfaces which can simplify
the usage of the tool and provide a windowed, menu-driven front-end.
The distribution contains the source code for the basic utilities and
a Tcl/Tk interface, as well as statically linked binaries and the
database files.
One difference between WordNet and a traditional dictionary is the
lack of etymologies, a feature typically used much less often than the
simple display of meaning and syntax. The inclusion of thesaurus-like
features more than makes up for this lack.
A full WordNet installation, consisting of the data-files and the
command-line and statically-linked executables, occupies more than
thirty megabytes of disk space. This is an ideal job for the e2compr
kernel-level transparent file-compression system; I compressed the
database directory and reduced it from thirty megabytes to eleven and
one-half, with no noticeable speed penalty. See LG #18 (June 1997) for
an introduction to e2compr.
Examples
Here are a few examples of command-line use of WordNet:
%->wn gazette -over
Overview of noun gazette
The noun gazette has 1 sense (no senses from tagged texts)
1. gazette -- (a newspaper)
Overview of verb gazette
The verb gazette has 1 sense (no senses from tagged texts)
1. gazette -- (publish in a gazette)
wn is the command-line search tool, and the switch -over shows an
overview of meaning and parts of speech the word can have.
%->wn gaz -grepn
Grep of noun gaz
gaza strip
gazania
gazania rigens
gaze
gazebo
gazella
gazella subgutturosa
gazella thomsoni
gazelle
gazelle hound
gazette
gazetteer
The switch -grepn searches the noun database for any noun containing
the string gaz; there are variants of this switch: -grepv, -grepa, and
-grepr, which respectively search for verbs, adjectives, and adverbs.
The various grep switches can be used to determine the correct
spelling of a word when you are certain of the spelling of only a
syllable or portion of the word.
%->wn quell -framv
Sample Sentences of verb quell
2 senses of quell
Sense 1
squelch, quell
*> Somebody ----s something
Sense 2
quell, stay, appease
*> Something ----s
*> Something ----s somebody
The -framv switch used above shows how the word is used in sentences.
%->wn quell -simsv
Synonyms (Grouped by Similarity of Meaning) of verb quell
Sense 1
squelch, quell
=> suppress, stamp down, inhibit, subdue, conquer, curb
--------------
Sense 2
quell, stay, appease
=> meet, satisfy, fill, fulfill
--------------
The -simsv switch shows verb synonyms, and a variant -simsn lists the
noun synonyms of a word.There are a plethora of other wn switches for
finding antonyms, homonyms, and several other more obscure lexical
types, many of which have easier-to-use equivalents in the Tcl/Tk
windowed interface, wnb, which stands for WordNet Browser.
Using The Browser
Here are screenshots of the browser window and a subsidiary sub-string
window, which takes the place of the -grep[nvar] switches used with
wn.
Main wnb window
Substring (grep) window
This is a convenient and easy-to-use interface, with all functions
available from the menus. The output, though, isn't wrapped to fit the
screen, so to avoid having to scroll sideways to see it all the window
should be resized so that it is wider horizontally. You might be
tempted (as I was) to try compiling the source code, so that the wnb
executable will use your own Tcl/Tk libraries rather than the bulky
statically-linked libraries compiled into the supplied executable
file. Unless you happen to have the particular patch-level of Tcl-7.6
and Tk-4.2 which the source needs, it probably won't compile (at least
it wouldn't for me). If the wnb interface was just a Tk script, it
wouldn't be a big job to modify it so that it uses a particular Tcl/Tk
installation, but wnb has its own specialized wish interpreter, which
complicates updating the source for a newer version of Tcl/Tk. Since
the supplied Tcl/Tk interface is just a convenient way of viewing the
output from wn, perhaps a GTK, Qt, or Emacs-LISP interface could be
coded; this would make a welcome addition to the KDE and GNOME
projects. I've found that a handy way to run wn is in a separate
wide-and-short XEmacs shell-buffer frame.
Documentation and License Issues
The documentation supplied with the distribution is complete and
clearly written; it's all an end-user should need. HTML, Postscript,
and man-page formats are included to cater to various reading
preferences. If you are curious about the psycholinguistic theoretical
underpinnings of the project, a Postscript file (5papers.ps) is
available from the web-site.
While writing this article I happened to be paging through the
introductory essays in the American Heritage dictionary. One of these
essays was written by one of the linguists responsible for the work
which inspired the WordNet project, Henry Kucera. It's called
Computers in Language Analysis and Lexicography, and it's a more
general (though dated) overview of psycholinguistics than the above
mentioned collection of papers. If you're wondering just what in the
world the "Browne Corpus" is (mentioned on the WordNet web-site), this
essay explains it clearly.
WordNet isn't licensed under the GPL, but the license isn't very
restrictive at all. The utilities and programs needed to create the
word databases are not distributed, but the supplied files are
sufficient for most needs.
FTP Sites
WordNet can be obtained from its home site, but this is a really slow
site, and I had better luck obtaining the archive from this mirror
site in Germany. As useful as this package is, it really should be
mirrored elsewhere as well.
_________________________________________________________________
Copyright © 1998, Larry Ayers
Published in Issue 27 of Linux Gazette, April 1998
_________________________________________________________________
[ TABLE OF CONTENTS ] [ FRONT PAGE ] Back Next
_________________________________________________________________
"Linux Gazette...making Linux just a little more fun!"
_________________________________________________________________
Words Within Words, New Phrases From Old
By Larry Ayers
_________________________________________________________________
Introduction
Sometimes after a long stint of putting words together it can be
amusing and relaxing to play with them for a while. Recently I
discovered an anagram search program for Linux which has some
interesting capabilities not found in other anagram programs I've
seen. I'll also discuss an XEmacs mode called Conx which does much the
same sort of transformation on sentences or blocks of text.
agm and xagm
Fraser McCrossan is the author of agm and its Tcl/Tk interface xagm.
Like WordNet's wn (reviewed elsewhere in this issue) agm is a
command-line program, with xagm displaying its output in an X window.
I appreciate programs with this sort of dual nature because they tend
to be more portable. If Tcl/Tk isn't available the output could be
formatted and displayed using another GUI toolkit, or simply used as a
console program.
I found this release (1.3.1) of agm in Sunsite's incoming directory,
but the archive was truncated. The included sample dictionary file was
incomplete, but this file isn't needed to use the program (a corrected
version was later uploaded which contains the complete dictionary
file). Agm has the useful ability to make use of any text file as a
source of words, and if you have ispell installed the dictionary file
(in /usr/dict or /usr/lib/ispell) can be a good collection of words
for agm. Just symlink it to /usr/local/lib/words. Several files can be
concatenated on the command line and used simultaneously; the
(incomplete) included dictionary file was created by combining several
Project Gutenberg files, including a 1913 edition of Webster's
Dictionary, a Shakespeare play, a couple of Mark Twain's works, the
Jargon File, and three thesauri. This can be done temporarily, i.e.
for a single search, or a new word file can be created; the default
location is shown above, but this can be changed in the Makefile. The
ability to select input files would be especially useful for
non-English-speaking users.
Here are screenshots of two xagm windows:
Main agm window
agm's output window
_________________________________________________________________
A simple anagram search just takes a couple of seconds, but the time
needed grows exponentially as the input words or phrases grow longer.
Luckily there is an abort button in the Tcl version, and of course a
command-line agm search can be aborted with control-c. Restricting the
number of words in the output anagrams speeds the process up
considerably, as there are so many combinations with multiple
two-and-three-letter words. These anagrams tend to be less
interesting, so a search with the switch -c2 is a good choice to start
with.
The supplied man-page will tell you everything you need to know and
more about agm, but the Tcl/Tk xagm interface is easy enough to use
that the man-page shouldn't even be needed unless you want to compile
a custom word-list. You might want to take a look at the xagm script
and make sure the first line points to your preferred Tk wish
interpreter.
The only source I know of for the program is the Sunsite incoming
directory; the filename is agm-1.3.1.tar.gz. It will be moved
eventually but shouldn't be too hard to find.
_________________________________________________________________
Conx-ing Text
Buried in one of the directories of LISP files in any XEmacs
installation is an odd and interesting word amusement called Conx.
Based on an earlier implementation by Skef Wholey, Conx was rewritten
in Emacs Lisp by Jamie Zawinski in 1991, and was last modified in
1994.
Conx is similar to the older Emacs mode Dissociated Press (accessed
with the command alt-x dissociated-press). Dissociated Press acts on
the current buffer, scrambling words and sentences to produce odd and
sometimes humorous juxtapositions. Conx-mode takes this concept
further, allowing a series of either selected regions or entire files
to be loaded into a sort of word database, then releasing scrambled
output into an ever-growing buffer; the process is terminated with
Control-g.
There are just a few commands for controlling this mode:
* alt-x conx-region reads a selected area into the database
* alt-x conx-buffer reads in an entire buffer (these commands are
cumulative when repeated)
* alt-x conx-init clears the database for a fresh start
* alt-x conx begins the conx process, outputting scrambled text
into a new temporary buffer
* alt-x conx-save saves the current database to a file
* alt-x conx-load reads a saved database, which is faster than
starting from scratch with the same text.
Conx-mode reminds me of the novelist William Burroughs' "scissors and
paste" method of combining text from various sources; he used this
technique in some of his published works. Semi-random text generation
can be useful as well as amusing. Sometimes it can help lift you out
of verbal ruts and provide a new view of familiar text and usage.
In conclusion, here is an example of conx-mode applied to several
paragraphs from two sources: Sir Thomas Browne's seventeenth-century
work Religio Medici and Mark Twain's Huckleberry Finn.
Place where a hair ball would belch a community. Schism,
lonesomeness. Men away all the bullfrogs councils, and riddles of
Tertullian. Hurry, sparks was the sandy bottom where truth, to
t'other side of the cottonwoods and an old man hove a mile of one
single heresy it to confirm and an article to know by trade. Tar
and cool and things we paddled over again meant morning about knee
deep, and confirmed opinion of the rule of the church, or another,
time. Pagans first cast at a spelling book.
_________________________________________________________________
Copyright © 1998, Larry Ayers
Published in Issue 27 of Linux Gazette, April 1998
_________________________________________________________________
[ TABLE OF CONTENTS ] [ FRONT PAGE ] Back Next
_________________________________________________________________
"Linux Gazette...making Linux just a little more fun!"
_________________________________________________________________
Comparing WordPerfect and LyX
by Larry Ayers
_________________________________________________________________
Introduction
Some months ago I bought a copy of SDCorp's Linux port of Corel's
WordPerfect 7, and have spent a fair amount of time learning to use
it; during the same time-period I have also been using various
pre-beta releases of LyX 0.11, and more recently the new 0.12 release.
In this article I will attempt to compare the two pieces of software,
both of which are intended to produce high-quality printed documents,
but which have such radically different methods of accomplishing this
task. It's not quite an apples-and-oranges comparison, but approaches
that state.
WordPerfect 7
The WordPerfect Corporation is now owned by the Canadian firm Corel,
but a group of former WordPerfect programmers and other employees in
Utah (WordPerfect's former home) have formed a company called SDCorp.
This company has ported WordPerfect 7 to Linux and other unix
variants, and have made the port available as a downloadable demo (see
their web-site); the program is also available on CDROM. The demo can
be registered by purchasing an e-mailable key-file.
A few years ago WordPerfect was one of the most popular
word-processors available, first under DOS then later in Windows
versions. It still possesses a significant user-base, but it has been
losing ground recently to the ubiquitous Microsoft Word
word-processors. Any text-processing system which uses a proprietary
document format is reliant upon either other users making use of the
same format or the availability of high-quality document filters for
translating documents into other formats. Microsoft has made this
situation more difficult by continually "upgrading" their Word format
in a more-or-less backwards-incompatible fashion, forcing other
software firms to rewrite their document filters.
WP occupies an increasingly rare niche in the text-processing world,
as it's a full-featured word-processor but isn't one component of a
massive "suite" of related programs, such as MS-Word, Applix, and
StarOffice (at least in the Linux version; the Windows version is sold
as a suite component). This has advantages and disadvantages. On the
plus side you don't have to bother with making room for components
which you might not need, and the tendency towards bloat is lessened.
On the other hand, some users like the interoperability of a suite's
components, and disk space is cheap these days. If you want a
word-processor which is quick to start up, can print well on most
printers (including inexpensive dot-matrix machines), and does a good
job with included graphics files, WordPerfect is a good choice. Of
course, the price is a sticking point for Linux users accustomed to
high quality free software. What you get for the money is a wide
variety of good printer drivers, many input and output filters for
different document formats, easy graphics inclusion, and a time-tested
interface and document-processing engine. This word-processor is also
less memory-hungry than some competing products, requiring roughly the
same resources as does GNU Emacs.
One reason for WordPerfect's popularity is the "reveal codes" feature,
which shows an editable view of the current file with the internal
formatting codes visible. This gives the user more control of the
underlying text-processing, comparable to but not as extensive as the
flexibility LaTeX tagging allows.
WordPerfect has its own documentation browser, complete with a handy
topic-search utility. Unfortunately the help is nowhere near as
complete and detailed as the exhaustive hardcopy manuals which used to
be included with the DOS versions.
Making new fonts available to WordPerfect isn't immediately intuitive;
there is a separate program called xwpfi in the /shbin10 directory
which facilitates this process. Rod Smith has written an informative
series of web-pages which contain useful techniques for dealing with
WordPerfect and fonts; they are available at this site.
The April 1998 issue of the Linux Journal has a quite favorable review
of WordPerfect written by Michael Shappe. Since that review was
written the retail price has been reduced, and there is a fifty dollar
discount if you have an old version of WordPerfect or a registered
copy of any of several competing products. Incidentally, I've never
noticed the slight keyboard lag Michael Shappe mentions in his review;
my hardware is roughly equivalent to his, but for me WordPerfect keeps
up with typing as well any text editor under X. He did mention that
his test machine is a laptop, so the difference in video drivers and
screen type may have something to do with his slow response.
SDCorp has recently announced student pricing as well, which brings
the price ($59.00) closer to those of some competing products.
LyX
From the free (or open-source) software world comes a different sort
of program with similar purposes. Lyx makes no attempt to display the
exact appearance of the document, just a version which is readable and
looks good on the screen. Rather then WYSIWYG (what you see is what
you get) the developers describe it as WYSIWYM (what you see is what
you mean). The major difference is the reliance upon a configured
LaTeX installation. A typical TeTex installation (the flavor of LaTeX
supplied with both Redhat and Debian) occupies about thirty megabytes
of disk-space (add another five to six mb. for LyX), while a
WordPerfect installation needs over seventy. So a LyX installation is
really more compact, but some people are put off by the reliance upon
LaTeX, as it has a reputation of being abstruse, suited to academics
rather than to ordinary people desiring to compose and print out
nicely-formatted documents. One of the design goals of LyX is to
shield the user from needing to know too much about LaTeX and how it
works, though provision is made for users who would like to include
LaTeX commands directly.
LaTeX users often edit their marked-up text in a text editor (Emacs
with AucTeX is popular), leaving either xdvi or a Postscript previewer
such as gv or ghostscript running so that an updated view of the
formatted document can be viewed at will. This also works well with
LyX, though it will seem to be a cumbersome approach to users
accustomed to the single document view of a standard word-processor.
Using LyX I more often don't view the formatted document until a late
draft, as the LyX-formatted view, though not identical to the printed
output, is close enough for writing purposes.
If you have previously tried the last beta release, 0.10.7, 0.12 will
come as a pleasant surprise. After dozens of developer's releases in
the past year many bugs have been dealt with (and new features added),
but even more significant from a new user's perspective is the greatly
improved documentation. Several levels of help and introductory
document files are included, ranging from very basic (intended for
people who have no experience with LaTeX) to an exhaustively complete
reference manual. Midway is the very well-done User's Guide, which
helped me get up to speed quickly. All of the documentation is
available from the menu-bar. Naturally (since LyX is still in beta)
some of the documentation is still incomplete, but in its current
state it is superior to much of the commercial software documentation
I'm familiar with.
An interesting site-specific document is generated during installation
and is subsequently available from the help-menu. It's called
LatexConfig.lyx; it consists of an inventory of LaTeX packages found
on your system along with pointers for obtaining useful packages which
may be lacking.
LaTeX (and thus LyX) is unparalleled in its handling of documents with
complex structure, dynamically keeping track of section numbers,
footnotes, and references even in book-length documents. WordPerfect's
abilities in this area are sufficient for most needs, but lack some of
the dynamic updating LyX is capable of.
Though most non-academic users have little use for accurate rendering
of mathematical equations, LyX provides an easy-to-use and convenient
interface to LaTeX's mathematical modes. WordPerfect includes an
Equation Editor which can do most of what LyX can, but it's much less
intuitive. I was able to enter equations into a LyX document without
reading the manual, whereas WordPerfect's interface is cryptic, and it
seems some study of the documentation would be necessary to get very
far with it.
Many LaTeX users are still a little irked that while LyX can convert
its internal format to usable LaTeX, converting an existing LaTeX
document still isn't supported. Included with the LyX source (though
not with binary distributions) is a Perl script which can do limited
conversion from LaTeX to LyX. It doesn't work with all documents, but
might be worth a try. This sort of conversion is planned for a future
version of LyX, along with compile-time user-interface toolkit
configurability. In other words, LyX could be compiled with either the
current XForms toolkit, GTK, Qt, or perhaps Motif. There have been
numerous complaints about the appearance and usability of the XForms
widget-set, with which LyX has been developed; personally I don't
think it all that objectionable, but being able to choose would still
be welcome.
Recently Matthias Ettrich, who started the LyX project a couple of
years ago, impulsively (along with one of the main KDE developers)
ported LyX to KDE, using the Qt tool-kit. Strictly speaking, there was
nothing wrong with doing this, as the source for LyX is free. But some
of the other LyX developers were unhappy about this, as it raised the
possibility of a fork in the development, and they were informed about
this port after the fact. The source for the Qt LyX port is available
from the main KDE site; it wouldn't compile for me, but you may have
better luck (for some reason, I've never been able to compile the KDE
stuff). After a few more beta source releases binaries of KLyX will be
made available.
Conclusion
These are both high-quality packages, but if either of my two teen-age
kids needs to type something for school I'll steer them towards
WordPerfect. It can be immediately be used by someone familiar with MS
word-processors. LyX has a little more of a learning curve, and its
dependence on a working TeX installation is often seen as a drawback
by those unfamiliar with TeX. Any up-to-date Linux distribution
includes configured TeX packages which are easy to install. LyX has
the advantage of using a more portable document format; files saved as
LaTeX source can be edited in any text editor. It's also free, and
under active development.
Since the initial release of WP 7 for Linux there have been no
bug-fixes, either as revised binaries or patches (that I know of). I
imagine the resources devoted to working on the SDCorp port hinge on
the quantity of copies sold. I wonder just how many licenses have been
sold; in the free software world, program enhancements and bug-fixes
tend to be proportional to the number of users and user/developers.
Commercial software doubtless is affected in similar ways.
In my case, I've been able to get higher-quality printed output with
WP than with LyX, but the reverse is probably true for users with
different printers. Luckily the demo of WordPerfect will let you
determine just how well the appropriate printer driver works with a
specific system. Rod Smith's above-mentioned web-pages are an
invaluable reference for setting up printers and fonts for WP, while
the LyX documentation contains a good overview of configuring
Ghostscript and dvips for use with LyX. It's not necessarily an
either-or situation; I like having both programs available, as they
each have their strengths.
_________________________________________________________________
Copyright © 1998, Larry Ayers
Published in Issue 27 of Linux Gazette, April 1998
_________________________________________________________________
[ TABLE OF CONTENTS ] [ FRONT PAGE ] Back Next
_________________________________________________________________
"Linux Gazette...making Linux just a little more fun!"
_________________________________________________________________
Pattern Matching with Regular Expressions in C++
By Oliver Mueller
_________________________________________________________________
Regular expressions are the most flexible way to search for text
patterns. Since over twenty years they were used in several Unix tools
and utilities such as grep, sed, or awk. This article guides you to
implement this Unix base search technique in C++.
Everybody who has worked with a Unix system knows the useful regular
expressions. You find them in grep, awk, or emacs for example and they
are the most flexible way to specify search patterns. Everybody who
has ever used a tool like grep wants never miss its flexibility--or is
there anybody who wants?
The great usability of search tools such as grep is a result of
regular expressions. Remove these pattern matching technique from
grep, substitute it by another search algorithm, e.g., Boyer-Moore,
and the resulting tool is a toy--a fast toy, but a toy! (Do you know a
DOS tool called find which is a result like this...)
But joking apart. Pattern matching with regular expressions is the
basis of many search algorithms in many tools under Unix and so under
Linux, too. The power of this search technique is undisputed.
The target of this article shall be the implementation of regular
expressions in a reusable C++ class. This article shall be your guide
and introduction to the fascinating world of "pattern matching".
Principles
First of all a few principles about pattern matching with regular
expressions.
To specify a pattern you have to use a computer processable notation.
This notation, or language, is in our case the regular expression
syntax.
The regular expression language consists of symbols and operators. The
symbols are simply the characters of the pattern. To describe the
relations between this symbols the following operators are used
(listed in descending priority):
* Closure: A string of equal symbols with variable length or an
optional symbol. (This is the true heart of pattern matching.)
* Concatenation: If there are two symbols in the pattern successive,
the corresponding characters in the text will have to be
successive, too.
* Alternation: One of the alternative symbols must occur in the text
in which the pattern is searched.
In addition to these left associative operators brackets can be used
to modify the operation priorities.
The closure operators in most regular expression implementations are:
* the asterisk (*) which means a repetition of zero or more
occurrences of a symbol
* the plus (+) which means a repetition of one or more occurrences
of a symbol the question mark
* (?) which means a optional occurrence of a symbol
Examples: A* matches empty string, "A", "AA", "AAA", etc. A+ matches
"A", "AA", "AAA", etc. A? matches empty string or "A".
To specify a concatenation no special operator character must be used.
A string consisting of each other following symbols are a
concatenation. ABC matches "ABC" for example.
An alternation is described with a "|" between the alternative regular
expressions. A|B matches either "A" or "B".
In extended regular expression implementations a few other operators
used to describe complex patterns more efficient. But this article
shall be only a little introduction into the syntactical possibilities
and not a detailed reference.
The Automaton
To search for a pattern which is specified by a regular expression you
cannot compare each character of the pattern and the text. Caused by
the closure and the alternation there are so many possible ways in
complex patterns that they cannot all proved by a "conventional"
algorithm. A more efficient technique must be applied. The best way is
to build and simulate an automaton for the pattern. To describe a
search pattern specified by a regular expression you can use
non-deterministic or deterministic finite state automata.
An automaton can assume several states. It can pass from one state
into an other depending on a specific input event which is in our case
the next input symbol respectively character. And here is the
difference between deterministic and non-deterministic finite state
automata. A deterministic automaton has only one next state for a
specific input symbol. A non-deterministic automaton can have several
next states for the same input symbol.
Both kinds of automata can be used for every imaginable regular
expression. The two types of automata have there own advantages and
disadvantages. For everybody who wants to know more about these
automata types in context with regular expressions the book /1/ can be
recommended. In our implementation we will use non-deterministic
automata. It's the most used strategy to implement a pattern matching
algorithm and it's a bit easier to construct a non-deterministic than
a deterministic automaton basing on a regular expression.
Figure 1 shows a state transition diagram of a non-deterministic
finite state automaton for the pattern a*(cb|c*)d. It contains all
types of operations--an alternation, two closures and tree
concatenated symbols. Note that the bracket which contains the
alternative symbols is one symbol for the concatenation. The start
state is the rectangle at the left side. The finite state is shown at
the right side--rectangle with diagonal line.
[INLINE]
Figure 1. Non-deterministic finite state automaton for pattern a*(cd|c*)d.
This little pattern and its automaton demonstrates the problems of
pattern matching very well. At state No. 7 it is not sure which state
will be the next for a input character "c". The states 4 and 9 are
possible ways. The automaton has to find out--to guess--the right way.
If the text string "aaccd" shall be matched for example the automaton
will start at state No. 0--the start state. The next state, No. 2, is
a zero state. This means that there is no character which must match
to enter this state.
The first input symbol is a "a". The automaton goes to state No. 1
which is the only way. After matching the "a" the next input character
will be read and the next state is No. 2 again. For the next input
character which is also a "a". the last two steps are repeated. After
this the only possible way is to go to state No. 3 and 7.
Here we are in the state which may cause problems. The next input is a
"c". Here we see the true power of the automaton. It can guess the
right way which will be state No. 9 and not No. 4. This is the soul of
a non-deterministic strategy: the possible solutions are found out.
They are not described by an algorithm which works "step by step".
In the real world of programming we have to prove all possible ways,
of course. But more about the practical side a bit later.
After the decision pro No. 9 the automaton goes over 9, 8 (1st c
matches), 9, 8 (2nd c matches), 10 and 11 (d matches) to state No. 12.
The end state was reached and the result is that the text "aaccd"
matches to pattern "a*(cb|c*)d".
Design
A regular expression implementation can always be split into a
compiler, which generates a automaton from the given pattern, and an
interpreter or simulator, which simulates the automaton and searches
for the pattern.
The heart of the compiler is the parser which bases on the following
context free grammar:
list ::= element | element "|" list
element ::= ( "(" list ")" | v ) ["*"] [element]
This EBNF diagram (=Extended Backus-Naur Form) describes the (reduced)
regular expression grammar. It is not possible to explain context free
grammars or the EBNF in this article. If you are not familiar with
these topics I can recommend /1/ and /3/ for example.
In our sample implementation we will only implement the basic
operators | and *. The other closure operators + and ? we will not
implement. But with the help of Figure 2 it will no problem for you to
implement it, too.
The complete regular expression functionality will be encapsulated in
the object class RegExpr. It contains the compiler and the
interpreter/simulator. The user is only confronted with the two
constructors, one overloaded operator and four methods for compiling,
searching, and error handling.
The pattern can be specified by calling the constructor RegExpr(const
char *pattern), by using the assign operator = or the compile(const
char *pattern) method. If re is an object of RegExpr the following
lines will set the pattern "a*(cb|c*)d":
RegExpr re("a*(cb|c*)d");
or RegExpr re; re = "a*(cb|c*)d";
or RegExpr re; re.compile("a*(cb|c*)d");
To search in a text buffer or string you can use the methods search()
and searchLen(). The difference between these methods is that
searchLen() expects a reference to a unsigned integer variable as an
additional parameter. In this variable the length of the matching
substring is return. Note that the closures, but also the alternation,
cause that the length of the found substring can vary, e.g., a*
matches "", "a", "aa", etc.
In tools, such as grep, you won't need this additional information.
Here you can use search instead of searchLen(). This method is a
simple inline which calls searchLen() with a "dummy" variable.
[INLINE]
Figure 2. These are the automata for the closure implementation.
The error handling is complete exception based. If the compiler
indicates a syntax error in the currently processed regular expression
it will throw an exception of type xsyntax. You can catch this
exception in your program and call the method getErrorPos() which
returns the character position at which the error occurred. This may
look like this:
try {
re.compile("a*(cb|c*)d");
} catch(xsyntax &X) {
cout
Another error which can occur is "out of memory". This
error--caused by
the new operator--isn't uniform processed by current C++ compilers. gcc
for example handle such an error with a program termination. Some
compiles throw exceptions. The rest does absolutely nothing and waits
for other errors which will definitely occur. You solve this problem
in every ANSI C++ compiler by using the function set_new_errorhandler()
(declared in new.h) to set a routine to handle this error. In most cases
I write a little routine to throw an exception which indicates this error
type and set this routine as error handler for the new operator. This is
by the way an easy solution to program a portable error handling which
can be used by all ANSI C++ compilers and under every operating system.
A RegExpr object contains a method called clear_after_error() to clear
itself when a error occurred respectively a exception was thrown. A
call of this method is necessary because an error leaves the compiler or
simulator in a indefinable state which can cause fatal errors at other
method calls.
The Compiler
The grammar which was previously shown in an EBNF diagram is implemented
in the methods list, element and v. list and element represent the
productions of the EBNF. v is a method which implements the special
symbol v. This symbols means in the grammar a character which is not a
metacharacter (|, *, etc.). It can also be a backslash sequence like \c
where c is any character. By using the backslash the special significance
of a metacharacter can be removed.
This three methods operate on a array called automaton. The array
consists of struct variables which contain information of the states
of the automaton. Every state entry contains the indices of the next
state(s) and the character which have to match. If the state is a zero
state this information will be a zero byte ("\0").
[INLINE]
Figure 3. The parse tree of "a*|b".
Our implementation is a top down parser. It uses directly the recursive
strategy of the context free grammar--every production is coded as
a function. The parser splits the who pattern respectively regular
expression into lower parts until it reaches a terminate symbol. Figure
3 shows the parse tree for "a*|b". First list is entered which
branches into non-terminate element, terminal "|" and non-
terminate list. element detects v and "*" and goes down to
"a". The other list
part goes directly down to "b" by passing element and v. The parse
tree of our sample regular expression can be seen in Figure 4.
[INLINE]
Figure 4. The parse tree of "a*(cb|c*)d"
Every non-terminate symbol represents a function call in our parser. The
top down strategy is the easiest way to implement a parser from a context
free grammar respectively EBNF diagram. You see the most important thing
here is an error free grammar specification!
Inside this methods the states of the automaton are generated. For every
character of the regular expression a state will be created. The only
exception is the operator | which will be compiled to two states.
The methods return to its caller always the entry point (index of state)
to the generated part automaton. The end of the part automaton is always
the last current state which index is stored in the attribute state of
RegExpr. You see the several part automata in Figure 5.
[INLINE]
Figure 5. A Several Part Automata
The red numbers indicate the new generated states for the operation. The
succession of the numbers is defined by the parser which reads a string
from left to right. The returned entry point or state is marked, too. You
realize that it is very important to tell the calling function where
the entry point is because it isn't always the one with the lowest index!
The states--and so the whole automaton--are generated in this way step
by step by a top down parser. It isn't very helpful for you to write
more about this automaton creation. It's better you type in the sources,
compile it and watch the algorithm in action by using a debugger.
A little annotation to the automaton. It is implemented by the static
array automaton in RegExpr. This is definitely a poor rudimentary
implementation. In a practical and useful program you have to use a
better strategy, e.g. an aggregate object class in RegExpr which works
with a dynamic array.
Note that this implementation of the automaton can cause fatal errors
if the pattern is to large! It has no checking function which breaks
pattern compilation if there are no more states.
But it is not difficult to implement the automaton as class which
administrates it in a dynamic array or a linked list.
The Automaton Simulation
After the compilation of the pattern we can execute the generated code
respectively simulate the automaton. The complete intelligence of the
search algorithm is implemented in the method simulate().
It was previously hinted that the automaton guesses the right answer but
this a theoretical view. A computer simulation of a non-deterministic
finite state automaton must prove every possible matching way through
this automaton. Sedgewick (/3/) has implemented a interesting algorithm
to do this. Our algorithm shall base on this technique.
Sedgewick's system has some disadvantages for practical application. The
First disadvantage is that its grammar needs a character after a closure
otherwise it can't find it. But this is a problem which can be solved by
a patch very soon--and our implementation has already solved this. The
second problem is a bit more complex. Sedgewick's implementation quits
after the first match. This means that it doesn't find the longest
matching string. For example: If you search for "a*a" in
"xxaaaaaxx"
it will find only "a" instead of "aaaaa". Our
implementation will solve this problem.
The idea that a program can guess the right way might sound
ridiculous. But the heart of such a software is to prove all possible way
and accept the last matching as the right. Here is a parallel proceeding
the decisive key.
Every branch of the automaton will be tested and if not fitting
removed. It's a bit a "trial and error" method. Every possible way will
be tested parallel with the others and removed when not matching the
current processed character of the search through text.
The basic element of this algorithm is a deque. A deque is a double ended
queue. It's a hybrid between stack and buffer. You can push and pop data
(stack) but also put (buffer). In other words: You can add data to the
head and to the tail of this data structure.
This behavior is important for our algorithm. The deque is split into
two parts:
1. top part for the current processed character of the search through
text
2. bottom part for the next character
The next state values of zero states are stored on the top part because
they implement the structure which is necessary to detect a match
of the current character. The next state values of non-zero states
(the_char != '\0') are put to the bottom part because they point to the
next character. Between these part is a special value stored--next_char
(-1). It indicates that the next character of the text shall be processed.
The main loop in simulate gets a state from this deque and tests the
conditions. If the character in the_char of this state matches the
current processed character in the searched through text the indexes of
the next states (next1 and next2) will be put at the end of the deque. If
the read state is a zero state the next state values will be put on the
start of the queue. If the state is next_char (-1) the next character
in the searched through text will be processed. In this case next_char
is put at the end of the deque.
The loop will be terminated if the end of the text is reached or the deque
is empty. The last case arises when no more matching parts are found.
As so far it sound like the version of Sedgewick but the difference is
that when state becomes zero the loop won't terminate. It is accepted
as a matching part and this information is stored but the loop will go
ahead! It will search for possible other matches.
After the termination of the loop I returns the last matching result
or--if the pattern wasn't found--the start position of the search
minus one.
A Little Sample Application
To download the listings and makefile, click
here.
eg.cc is a little egrep implementation. It shall demonstrate the usage
and the power of RegExpr. eg reads from standard input or from a optional
specified file and print every line which contains the pattern:
Usage: eg pattern [file]
RegExpr is in this (minimal) implementation not perfect of course but it
will be a good basis for experiments. A few things which can be changed
or implemented are:
* The closures ? and +
* Implementation of automaton as object with dynamic array or linked
list as state administration
* Character classes [...]
* Metacharacter . for any character
* Other operators known from sed or ed {...}
* Start and end line metacharacters--^ and $
Last but not least I hope that you will have a bit fun with this
implementation. If you have some suggestions, questions, or ideas please
let me know.
Resources
* Aho, Alfred V. / Sethi, Ravi / Ullman, Jeffrey D.: COMPILERS
Principles, Techniques and Tools. Reading (Mass.): Addison Wesley
1986
* Mueller, Oliver: Mustererkennung mit Delphi-Suchen und Ersetzen von
regulaeren Ausdruecken. mc extra (DOS International) 7/96
* Sedgewick, Robert: Algorithms. Reading (Mass.): Addison Wesley 2nd
Ed. 1992
__________________________________________________________________________
Copyright © 1998, Oliver Mueller
Published in Issue 27 of Linux Gazette, April 1998
__________________________________________________________________________
[ TABLE OF CONTENTS ]
[ FRONT PAGE ]
Back
Next
__________________________________________________________________________
"Linux Gazette...making Linux just a little more fun!"
__________________________________________________________________________
Book Review: Web Security Sourcebook
By Kirk Petersen
__________________________________________________________________________
[INLINE]
* Authors: Aviel D. Rubin, Daniel Geer and Marcus J. Ranum
* Publisher: John Wiley and Sons
* E-mail: info@qm.jwiley.com
* URL: http://www.wiley.com/
* Price: $23.99 US
* ISBN: 047118148X
Web Security Sourcebook claims to be "a serious security
source book for Web Professionals and users."
Each chapter
covers one aspect of security, ranging from basic browser security to
firewall design.
The material covered in Web Security Sourcebook is fairly
simple--I would expect that
any Linux user could easily understand everything
presented in the book.
The target audience for Web Security Sourcebook
is anyone with some computer experience but with little knowledge
of computer security. It is mostly a summary of beginning, and some
intermediate, topics.
Chapter Summary
The first chapter, "Caught in Our Own Web", is the introduction to
the book. The authors present a quick history of the Web split
into four stages: the beginning, HTTP, server-side scripts and
client-side scripts. Security features (authentication,
confidentiality, etc.) are quickly outlined.
Chapter two, "Basic Browser Security", outlines
the features of Netscape Navigator and Microsoft Internet Explorer. The
authors cover all of the preferences that deal with security and
comment on how they should be configured.
A section on Internet Explorer's Content
Advisor (basically a Web "ratings" system) is included.
The next chapter is mostly about user privacy. There is a
section that describes certificates, mostly describing their flaws,
a very brief section on passwords and a good description of cookies.
Then the authors turn to privacy and anonymity. Simple proxies, Chaum
mixes and anonymous remailers are also described.
Chapters four and five address the security concerns of client-
and server-side scripts. Security issues of Java, Javascript and
ActiveX are outlined. The section on server-side security covers system
security as well as web-server security. It is mostly aimed at
Unix users.
The next chapter, "Advanced Server-Side Security"
consists mainly of CGI scripts and server-side includes. Information about
code signing and auditing tools is also provided.
"Creating Secure CGI Scripts" is the name of chapter seven.
It informs the reader of a few common security holes in
CGI scripts. It also outlines Perl, Tcl and Python as three capable
CGI scripting languages.
Chapter eight is an introduction to firewalls. The authors
describe what firewalls can do and how they interact with various
protocols. The placement of the firewall is explained in the second
part of the chapter.
Chapters nine and ten outline transactions on the Web. IPSEC is
discussed in detail. Secure HTTP, SSL and PCT are explained. The
authors then explain several "digital money" standards. A good
comparison is done between six of the competing standards.
The final chapter outlines the future of security on the Web. It
explains the problem of building in security "after-the-fact". The authors
point out some issues that often affect security, although they aren't
always thought of in that sense (such as "deliberate
incompatibility").
The chapter ends with a section titled "What we need in the
future".
The book includes two appendices. The first one is a brief
description of encryption, hash functions, digital signatures and so on.
The second one is a list of all the books and URLs that the authors
mentioned in the book.
Conclusion
Web Security Sourcebook
is fairly light reading and can be finished quickly. The writing is
adequate, although there are places where I found the descriptions lacking
or imprecise.
One thing that I often find annoying about security-related writings
is the use of scare tactics.
Web Security Sourcebook does have its share of scare tactics, but
for the most part uses realistic stories that honestly try to
inform the reader.
The information that Web Security Sourcebook presents is useful although
a bit shallow. The book tries to cover a lot of ground and is only
350 pages. If the book had been devoted solely to practical security fixes,
it might have impressed me. However, it included only a few specifics and
then went on to describe firewalls and transaction standards (which would
also have been interesting in more detail).
If you want an introduction to Web security and you have very little
experience with any sort of computer security, you might be interested in
Web Security Sourcebook. If you know much about encryption, or have
studied firewalls, or know about quite a few Web client and/or server
security holes, you will probably be disappointed by this book.
If you want to learn everything that was covered
in this book and you have the money, I would suggest getting a specific
book on each of the three or four concepts that Web Security
Sourcebook covers.
__________________________________________________________________________
Copyright © 1998, Kirk Petersen
Published in Issue 27 of Linux Gazette, April 1998
__________________________________________________________________________
[ TABLE OF CONTENTS ]
[ FRONT PAGE ]
Back
Next
__________________________________________________________________________
"Linux Gazette...making Linux just a little more fun!"
__________________________________________________________________________
Linux Weekend Mechanic
Welcome to The Linux Weekend Mechanic!
Published in the April, 1998 Edition of the Linux Gazette
Copyright © 1997 John M. Fisk <fiskjm@ctrvax.vanderbilt.edu>
The Linux Gazette (tm) is Copyright © 1997,1998 Specialized Systems
Consultants Inc.
__________________________________________________________________________
Closing Up Shop
I'm leaving y'all for another woman...!
Faith and John
My wonderful wife... :-)
Yup, I'm afraid that it's time to permanently close up shop here at the 'ol
Weekend Mechanic. Time constrains and just the day to day necessities are
starting to catch up and I just simply need to spend more time taking care of
family matters. I sat down and figured out the time the other day: I've been
in some form of training -- undergraduate, graduate, or residency -- for the
past 13 1/2 years! I'm about to take a sabbatical :-)
But before I go, I need to take a minute and say thanks to an awful lot of
folks: to Tim, at Tennessee Commerce Net, who graciously offered to host the
Linux Gazette way back in the summer of 1995; to Matt Welsh for his kind offer
to bring the LG under the wing of the LDP; to Marc Ewing, Donnie Barnes, &
Erik Troan, the "Boys at RedHat" who sent their encouragement (as
well as CD's, a t-shirt, books, and the familiar Red Hat... thanks!) way back
when; to Phil Hughes for his interest in and willingness to take over the LG
when it simply became too much; to Marjorie Richardson, for actually taking
over the day to day care and feeding of this thing (as well as shouldering
the hassles and burdens that come with this job -- such as truant columnists
such as your's truly...); to the myriad of authors and contributors who have
much more faithfully than me contributed to the success of the LG by giving of
their time and talents...
And mostly, to my lovely wife, without whose unflagging love, support, and
encouragement (and willingness to be an all-too-frequent "computer
widow") none of this could have happened. To all of you I want to humbly
say,
Thanks folks, it's been great.
So what are we now up to?
Well, as most of you know, I finished up at
Middle Tennessee State University this past December and immediately
started working for Dr. Ed Shultz in the Information Management Department
here at Vanderbilt. We've licensed a clinical database system from a Dr.
Prakash Nadkarni at the Yale University Medical Center. Dr. Nadkarni's
Advanced Clinical Trials Database System (ACT/DB) is a rather sophisticated
clinical trials data management system currently hosted in the Oncology arena.
My job has simply been to get the system working and integrated into the
larger clinical information system here at Vandy, which has so far proven to
be an interesting and often challenging endeavor. For those who might be
interested in such things, Dr. Nadkarni has an article in this month's (March,
1998) Journal of the American Medical Informatics (JAMIA) describing the
ACT/DB system. We've also submitted an abstract for a theater presentation of
the system at the upcoming AMIA meeting (again, for you medical informatics
type folks out there... :-)
I'm also working now on trying to set up a formal Medical Informatics
Fellowship through the National Library of Medicine here at Vanderbilt. A
good deal of my time is now spent trying to get ready for this, especially as
the August 1 submission deadline approaches.
Anyway, if you've made it this far, thanks for hanging in there. I really do
owe one last HUGE bit of thanks...
Dear Linus,
Thanks so much for one drop-dead kool kinda OS!
Your fan,
John
I'll see y'all around. Take care,
John
__________________________________________________________________________
Mail Me a Note
Got any comments, suggestions, criticisms or ideas?
Feel free to drop me a note at:
John M. Fisk <fiskjm@ctrvax.vanderbilt.edu>
Document Information:
$Id: issue27.txt,v 1.2 2003/02/03 21:50:19 lg Exp $
__________________________________________________________________________
Copyright © 1998, John Fisk
Published in Issue 27 of Linux Gazette, April 1998
__________________________________________________________________________
[ TABLE OF CONTENTS ]
[ FRONT PAGE ]
Back
Next
__________________________________________________________________________
"Linux Gazette...making Linux just a little more fun!"
__________________________________________________________________________
X Window System Terminals
486 X Terminal
A New Use for Old and Outdated PCs
by Rich Kaszeta
__________________________________________________________________________
Summary:
This page describes how to convert low-end 386/486 PC's into standalone
X Window Systems terminals which can serve as graphical terminals to
your existing Linux/Unix workstations.
Background:
Here at the Mechanical Engineering
Dept. at the University of Minnesota, we inherited a number of old
IBM PS/Valuepoint 486 machines (16 Meg memory, 200 Meg HD) with
keyboards and monitors, and were trying to find a way to get some good
use out of them.
Originally, we discussed placing Linux on them (our department
already has dozens of Pentium-class Linux machines which are quite
popular), but decided that with their low disk space and memory they
wouldn't run fast enough to suit our current users' needs, and that it
wasn't economical to upgrade them.
Our solution was to install a minimal Debian Linux system on them
(base install plus basic networking, X, and a few utilities), and
configure them to act as X terminals, allowing us to provide
extremely cheap fully-graphical terminals, which are used in graduate
student offices and as X interfaces to our headless Unix servers.
XDM: The basic concept:
xdm is a "display manager", providing X login windows to
users. The traditional use of xdm is to provide a graphical login on
the local display on an X11 workstation, so that the user does not
need to start up X "by hand".
However, xdm can also provide graphical X11 logins to
remote machines, such as NCD Xterminals. The only requirement is that
the remote machine speak X.
What we are describing here is configuring a cheap PC to act just
like one of these Xterminals.
Setting up the X Terminals
Setting up the 486 PCs as graphical X terminals fairly
straightforward, consisting of just a few steps:
1. Installing a minimal Debian Linux system on each PC
2. Configuring each PC to start up X and query an XDM server to get a
list of hosts to connect to.
3. Configuring one or more XDM servers to provide "chooser" services
to the X terminals.
4. Configuring XDM and the chooser to be more aesthetically pleasing
and useful.
I'll discuss each of these steps in turn.
Installing a minimal Linux system:
Since our existing Linux systems run Debian Linux we chose to use it for
these PCs as well.
On each system, we installed just the basic Debian system from
floppy, which provides a very bare-bones Linux system with networking
support. No user accounts were created, since none are needed (since
no users actually log into the machine itself).
Next, Debian packages of XFree86 3.3 were loaded on each system.
We loaded the base X11 libraries, the X extensions, the S3 X server
(since the PS/Valuepoints have 2-meg S3-based video card), and all the
X11R6 fonts.
Finally, we installed a few additional packages for convenience,
including basic networking utilities (netbase), ssh
(to allow use to remotely log in through a secure channel), and
nvi since the systems staff here doesn't like the default
Debian text editor.
Configuring each PC to start up X:
The first step was configuring X to run locally on each PC. An
XF86Config file was created for the machines using the standard
'xf86config' utility, with a couple of considerations:
* The "Emulate3Buttons" option was enabled, since the mice that came
with the machines are only 2-button mice.
* While the 2-meg S3 card in the Valuepoints is capable of up to
1152x900x16bit resolution, we chose to run 1024x768x8bit, since it
runs at a more comfortable refresh rate, better viewability on the
15-inch IBM monitors, and provides better compatibility with local
applications than 16-bit color.
* For added security, "DontZap" is specified so that users cannot
inadvertently kill the X server.
* We added additional SGI-defined colors to /usr/lib/X11/rgb.txt so
that the X-stations could talk to our SGIs without errors.
* You may wish to set up a font server somewhere.
Once we were satisfied with the configuration of the X server, we
then tested if it could connect to a workstation running xdm ("rayleigh" in
this example):
X -quiet -query weber
which gives us the standard xdm login window for "weber":
standard xdm login window
So, we now know everything is basically working. If we just want the PC to
talk to a single workstation, then we are basically done. The only
remaining step is to make sure that X is started upon bootup. We can
do this with a script in /etc/init.d/xterm.
On a Debian system, we install it with 'update-rc.d xterm defaults
99'. (The procedure for Redhat, Slackware, etc., is similar).
We then reboot the machine to make sure it starts X upon boot.
Configuring an XDM server to provide a "chooser":
We've already set up a basic X Terminal. However, it can only talk to
a single machine. If we would like it to be able to connect to a
number of other machines, we'll have to have at least one machine in
our network configured to provide a host "chooser" to our X terminals.
In this discussion, the machine providing "chooser" xdm services is
called "weber" (note that in this example "weber" is a Linux box, but
it could be any xdm-enabled workstation).
The first step is to configure weber to provide the chooser to
hosts that connect through an "indirect" XDM connection. This is
controlled by the Xaccess file (located in
/etc/X11/xdm on Debian machines, it may be located under
/usr/lib/X11 or another location on other machines).
Typically, the default Xaccess file on most systems is fairly
well commented and includes a number of simple examples, so it's
pretty easy to figure out.
Basically, you have to add a line to the file of the form
hostname CHOOSER host-a host-b
where hostname is the name of the host to provide the chooser
to (it can be a wildcard such as "*" or
"*.domain.name", the CHOOSER tells xdm to
provide a chooser to these hosts, and the remainder of the line is a
list of machine names to list in the chooser. If you use the special
hostname BROADCAST, it will list all xdm-enabled machines on
the local network.
So, if we want all machines to be given a chooser that allows them
to select any machine on the local network, we'd make sure
Xaccess has the line
* CHOOSER BROADCAST
However, in our system we have a number of machines in different
subnets, so we can't rely on a broadcast to find them all. So we use
* CHOOSER machine list ...
instead.
Additionally, we can specify different lists for different
machines. As mentioned previously we wanted to use one of the PCs as
a graphical terminal for our headless SGI workstation (which runs
xdm). So we have this machine, "console", be given a list of only the
server machines:
console.me.umn.edu CHOOSER server1 server2 ...
The next step is to modify the X terminal to connect to the XDM
server using an 'indirect' query. We first test it by logging into
the X terminal PC, and starting X with
X -indirect weber
and we should then see the chooser come up:
standard chooser
Functional, but a little ugly.
So now that we know it works, we change our
/etc/init.d/xterm script, replacing the
"-query rayleigh" with "-indirect weber".
Configuring the chooser through X resources and scripts:
Well, now that we've got everything basically working, all that we
have left is to clean up the configuration of the chooser so it is a
little more useable and visually pleasing.
The chooser can be configured using X resources. By changing these
resources we can do things such as change the chooser fonts, the
layout of the list, and the colors. These resources are set in
/etc/X11/xdm/Xresources (or a similar location on non-Debian
machines).
On our systems, we wanted to do the following:
* Change the header to say "Available MEnet Systems"
* Change the fonts to be more legible
* Make the list two column, with a gap between the columns, and
sorted vertically.
* Move the scrollbar to the right.
* Enlarge the window slightly.
To accomplish this, we edited /etc/X11/xdm/Xresources to
insert the following:
Chooser*geometry: 810x500+300+225
Chooser*allowShellResize: false
Chooser*ShapeStyle: Oval
Chooser*viewport.forceBars: true
Chooser*label.font: *-new century schoolbook-bold-i-normal-*-240-*
Chooser*label.label: Available MEnet Hosts
!Chooser*list.font: -*-*-medium-r-normal-*-*-230-*-*-c-*-iso8859-1
!Chooser*Command.font: *-new century schoolbook-bold-r-normal-*-180-*
#ifdef COLOR
Chooser*label.foreground: white
Chooser*label.background: midnightblue
Chooser*Command.background: gray80
Chooser*list.columnSpacing: 25
Chooser*list.defaultColumns: 2
Chooser*list.forceColumns: true
Chooser*list.verticalList: true
Chooser*internalBorderColor: black
Chooser*Command.font: -adobe-helvetica-bold-r-*-*-12-*
Chooser*viewport.useRight: true
#endif
Finally, we wanted to get rid of the default X11 "thatch" pattern
on the root window, since it gives a horrid moire effect on small
monitors. To do this, we tell xdm to use a shell script, called
"chooser.script" instead of the normal "chooser". This script simply
sets the background to "skyblue4" and runs the normal chooser. We set
this in /etc/X11/xdm/xdm-config, adding the line
DisplayManager*chooser: /usr/lib/X11/xdm/chooser.script
where "chooser.script" is
#!/bin/sh
xsetroot -solid skyblue4
/usr/lib/X11/xdm/chooser $*
The final result looks like:
customized chooser
Much nicer, no?
A lot more customization is possible, through both
X resources and the XDM configuration scripts. Consult the
xdm man page for more details.
Conclusion:
With relatively little work, and very little subsequent
administration (the X terminals seldom crash, and don't need software
updates), we converted a bunch of "junker" PCs into rather useful X
terminals (I've even done a 386 this way and it runs fine).
As a final note, it's important to point out the while the
particular systems I've described here are PCs running Debian Linux,
the same technique applies equally well to resuscitation of any older
X11-capable machines, such as older Suns (Sparc ELCs), HPs, and
SGIs...
Rich Kaszeta
__________________________________________________________________________
Copyright © 1998, Rich Kaszeta
Published in Issue 27 of Linux Gazette, April 1998
__________________________________________________________________________
[ TABLE OF CONTENTS ]
[ FRONT PAGE ]
Back
Next
__________________________________________________________________________
Linux Gazette Back Page
Copyright © 1998 Specialized Systems Consultants, Inc.
For information regarding copying and distribution of this material see the
Copying License.
__________________________________________________________________________
Contents:
* About This Month's Authors
* Not Linux
__________________________________________________________________________
About This Month's Authors
__________________________________________________________________________
Murray Adelman
Murray is an academic mathematician; trained at the University of
Pennsylvania and teaching at Macquarie University in Sydney Australia
for the last twenty odd years. At a time when UNIX was new to our
department he stumbled across the Berkely User Supplementary Documents
and got interested in troff. He also vowed to save up and get a UNIX
system of his own. Linux saved him from the saving up part.
In his professional work he has used mostly TeX, but maintains an
interest in markup languages in general, including SGML.
Larry Ayers
Larry lives on a small farm
in northern Missouri, where he is currently engaged in building a
timber-frame house for his family. He operates a portable band-saw mill,
does general woodworking, plays the fiddle and searches for rare
prairie plants, as well as growing shiitake mushrooms. He is also
struggling with configuring a Usenet news server for his local ISP.
Jim Dennis
Jim
is the proprietor of
Starshine Technical Services.
His professional experience includes work in the technical
support, quality assurance, and information services (MIS)
departments of software companies like
Quarterdeck,
Symantec/
Peter Norton Group, and
McAfee Associates -- as well as
positions (field service rep) with smaller VAR's.
He's been using Linux since version 0.99p10 and is an active
participant on an ever-changing list of mailing lists and
newsgroups. He's just started collaborating on the 2nd Edition
for a book on Unix systems administration.
Jim is an avid science fiction fan -- and was
married at the World Science Fiction Convention in Anaheim.
Chris DiBona
Chris is a computer security specialist for StrongCrypto Inc. He
can be reached at chris@dibona.com. His personal web site is located at
http://www.dibona.com/.
John M. Fisk
John is most noteworthy as the former editor of the Linux Gazette.
After three years as a General Surgery resident and
Research Fellow at the Vanderbilt University Medical Center,
John decided to ":hang up the stethoscope":, and pursue a
career in Medical Information Management. He's currently a full
time student at the Middle Tennessee State University and hopes
to complete a graduate degree in Computer Science before
entering a Medical Informatics Fellowship. In his dwindling
free time he and his wife Faith enjoy hiking and camping in
Tennessee's beautiful Great Smoky Mountains. He has been an avid Linux fan,
since his first Slackware 2.0.0 installation a year and a half
ago.
Michael J. Hammel
Michael
is a transient software engineer with a background in
everything from data communications to GUI development to Interactive Cable
systems--all based in Unix. His interests outside of computers
include 5K/10K races, skiing, Thai food and gardening. He suggests if you
have any serious interest in finding out more about him, you visit his home
pages at http://www.csn.net/~mjhammel. You'll find out more
there than you really wanted to know.
Clint Jeffery
Clint is an assistant professor in the Division of Computer Science
at the University of Texas at San Antonio. He writes and teaches about
program execution monitoring, visualization, programming languages, and
software engineering. Contact him at
jeffery@cs.utsa.edu or read about
his research at
http://www.cs.utsa.edu/faculty/jeffery.html
He received his Ph.D. degree from the University of Arizona.
Richard Kaszeta
Richard is currently both a Unix Systems Administrator and a
PhD Student in the Mechanical Engineering Department of the University
of Minnesota, and currently administers more than 25 Linux machines
running Debian Linux. In addition to Linux, his hobbies include scuba
diving, ultimate frisbee, and cooking. You can visit his home page at
http://www.menet.umn.edu/~kaszeta.
John Kodis
John has been involved in a wide range of scientific and
real-time software development efforts. He is currently the software
development manager for a large satellite image ingest, archive,
processing, and distribution system. He enjoys tinkering with Linux,
writing Perl, playing with his two kids, and trying to keep pace with
the rapid growth of the Gnome project.
John Little
John, who worked for Sun for nine years, is from the U.K., lives
in Japan and works in Tokyo for an American company. He wears a range
of increasingly bizarre hats in an (mostly futile) effort to hide his
incipient baldness. He can be reached by e-mail at gaijin@pobox.com.
Eric Marsden
Eric is studying computer
science in Toulouse, France, and is a member of the local Linux Users
Group. He enjoys programming, cycling and Led Zeppelin. He admits to
once having owned a Macintosh, but denies any connection with the the
Eric Conspiracy Secret
Labs.
Shamim Mohamed
Shamim met Unix in 1983 and was introduced to Linux
at version 0.99 pl12. He is the author of Icon's POSIX interface and
produced the linux distributions described in this article.
These days he is a Silicon Valley polymath and
factotum, and an instrument rated pilot flying taildraggers. He's at
spm@drones.com |
http://www.drones.com/shamim/.
He received his Ph.D. degree from the University of Arizona.
Oliver Mueller
Oliver works
as programmer and is principal of a software developing firm. He is also
author and writes for several computer magazines and book publishers. His
email address is ogmueller@t-online.de.
Kirk Petersen
Kirk is a recent graduate of The Evergreen State College
and is working at NOAA in Seattle. He spends his spare time working on
various Linux software projects. E-mail him at kirk@muppetlabs.com or
check out his web page at http://www.muppetlabs.com/~kirk/.
Dave Wagle
Dave's a slightly quarky theology graduate student who has made a living
for the last 10 years developing, deploying, supporting and otherwise
wrestling with Unix and relational databases. He's married, has 2
kids, and an odd fondness for Kierkegaard. Write him at: davew@cloudnet.com.
__________________________________________________________________________
Not Linux
__________________________________________________________________________
Thanks to all our authors, not just the ones above, but also those who wrote
giving us their tips and tricks and making suggestions. Thanks also to our
new mirror sites.
This month we say good-bye to our "Weekend Mechanic", John Fisk. John began
Linux Gazette as a learning project for himself, never dreaming how
popular it would become with the Linux community. When he turned LG
over to SSC, I was very pleased he planned to continue writing for
LG. I appreciate all of
John's contributions and will miss having his column in our pages. I
know you will too.
Bye, John, keep having fun!
__________________________________________________________________________
Marjorie L. Richardson
Editor, Linux Gazette, gazette@ssc.com
__________________________________________________________________________
[ TABLE OF CONTENTS ]
[ FRONT PAGE ]
Back
__________________________________________________________________________
Linux Gazette Issue 27, April 1998,
http://www.linuxgazette.com
This page written and maintained by the Editor of Linux Gazette,
gazette@ssc.com