...making Linux just a little more fun!

July 2004 (#104):


The Mailbag


HELP WANTED : Article Ideas
Submit comments about articles, or articles themselves (after reading our guidelines) to The Editors of Linux Gazette, and technical answers and tips about Linux to The Answer Gang.


2.6's constant complaining about untranslated keyboard keys

Mon, 14 Jun 2004 13:02:11 -0700 (PDT)
Bradley Chapman (kakadu_croc from yahoo.com)
atkbd.c: Unknown key released (translated set 2, code 0x7a on isa0060/serio0).
atkbd.c: This is an XFree86 bug. It shouldn't access hardware directly.
atkbd.c: Unknown key released (translated set 2, code 0x7a on isa0060/serio0).
atkbd.c: This is an XFree86 bug. It shouldn't access hardware directly.

Does anybody get this at all on their 2.6 Linux systems? I get it all the time and have just dismissed it, but now I'm curious if anyone has bothered to figure out why it happens.

Also, I've just got ahold of a Gmail account, but I haven't been able to decide what to do with it. Does anyone else have a similar dilemma? ;-)

Brad


getting email from an external server

Mon, 14 Jun 2004 14:30:12 -0400
sbasurto (sbasurto from playboyunderwear.com)

Good afternoon, My question is...

I setup an Internet server with debian the lastest version, I also configure a squid proxy 2.4 estable6 with squidGuard as redirector, a dhcp, a dns, and ipchains.

The configuration looks like:

            190.0.0.3
Workstation|---------|--|
                        |    eth0   --------------    eth1       -----
            190.0.0.4   |-|190.0.0.1|Linux Server|192.168.0.1|---|DSL|
Workstation|---------|--|           --------------               -----
                                         x.x.x.x                   |
                                      ---------------   Internet   |
                                      | Mail Server |--------------|
                                      ---------------

What I am expecting - Run send/recive email messages in what ever email client in a workstation within my lan and get the email from the external server or send email with the external server.

What is happening - Run send/recieve email messages in Outlook with the right configuration and it sends a "Conection Refused by the Server" or "Conection Timeout".I understand that maybe what I am looking for is a pop3 and smtp poxy server, nevertheless I install pop3.proxy and smtp.porxy servers in my linux box an it does not retrieve or send the email from workstation to the external server. I configure fetchmail too an it work but within the server, if I try to get email from a workstation it crash.

What I already did -

  1. I already run tcpdump in the eth where the internet conection is (In my case eth1). In this point I want to mention that in the output of tcpdump I never saw the header for the retrive of the email message from the client(Workstation) to the server, nevertheless the conection to Internet is working fine.
  2. I also stop my firewall because may be a misconfiguration of the firewall can block my email, but even without firewall, it crash.
  3. I installed a pop3 and smtp proxies, and get them run as an inetd service, but without sucess. I mean the proxy run but can retrieve email from workstation.
  4. Finally I had this configuration working with SuSE the problem is that I do not know exactly how I did it.

At this point I hope some one of you can help me or tell me what I am doing wrong. Or tell me whatever documentation where I can get an answer.

Regards

Sergio B.J


Scripting languages compared

Sun, 13 Jun 2004 08:34:47 +0100
Jimmy O'Regan (The LG Answer Gang)
[Jimmy O'Regan]
http://merd.sourceforge.net/pixel/language-study/scripting-language
sh wins, closely followed by Perl and Ruby.
Read that backwards, in terms of winning order and: \o/ -- Thomas
Well, he's wrong about "sh" not having a debugger, particularly since he's using Bash; "-x" certainly fits the bill. Step-by-step execution, no, but I think that would go under "full interpreter in debugger".
As to his length comparisons for different programs - certainly in regard to Perl - he had me cracking up. E.g., the Perl entry for 'env' has his actual home directory name spelled out...
The rest of it, I'm afraid, demonstrates his lack of knowledge of the several languages I can vouch for rather than being an accurate comparison of any sort (he did mostly OK with "sh", though. :) -- Ben
Ok, it's your chance, gentle readers. Would anyone like to take a more thorough and in-depth view about how the languages compare? We come not to flame Caesar, but to praise him... code samples maybe, but a fair treatment is called for at the very least. -- Heather

GENERAL MAIL


Compliments to you all.

Fri, 4 Jun 2004 13:15:18 +0100
Steve Brown (sp_brown from hotmail.com)

Hi there,

I've just finished reading some of the June issue, I got the feeling that you are all a little dejected - don't be! You all produce a fantastic read, absolutely superb - much better than that other one (I did write and tell them they were crap, but they didn't reply funnily enough).

Thanks, Steve. I don't know that I'd call it dejection - it's more of a realization of a lot of work ahead, at least for me. Given that I enjoy it, though, that's no bad thing. -- Ben

I used to use an Amiga (still own it sans powerpack) and I spent hours and hours learing to program in C (very very simple stuff), shell scripts and the like. I loved the learning process and the usability of it all. I was forced into buying a PC (following the demise of the power pack) and it came complete with Win95, what a nightmare -I couldn't find out how any of it worked without paying for the information one way or another. Then I came across Mandrake 8, actually I was desperately looking for something other than Windows, and my little world changed. All the information I could ever want and then some.

One of my earliest discoveries was your good selves. My favourite Amiga mag was Amiga Shopper - a good mix of basic newbie stuff and more advanced information - programming, how the machine works and so on. It pandered to my newbie needs and as I grew in knowledge so I gained even more from the magazine.

Your magazine offers something similar, a good mix without pandering too much to the total newbie. So many magazines seem to offer a three monthly cycle of tutorials with little new material.

I was actually considering recycling a bit of our previous material. Jim Dennis' "Routing 101" is an evergreen that can definitely stand to be exposed to new minds; my own Perl and shell tutorials (it turns out that somehow one of the articles I wrote for it never got published!), too. Yes, people can find them in the old issues - but I suspect that many of our readers don't go trolling through the archives but just read us once a month.
(If anyone's got suggestions on a previous article that's worth dusting off, my mailbox is always open.) -- Ben

The only thing I'd like to see is how to build/design a program in for Linux, don't care what language, just how to design, program and test it, to give a good correct program.

[grin] See those very tutorials that I've mentioned. I suggest starting with shell scripting and climbing up from there. -- Ben

My Amiga programs were very simple, single user affairs, and I really don't get OOP and multi user stuff yet. I mean how do you prevent buffer over-runs and memory loss for example.

Those aren't an issue in the modern scripting languages (shell, Perl, Python, etc.) In C, well, see my response to Tom. Unless you really know what you're doing, C can be very dangerous indeed. -- Ben
[Tom Brown] Tip: If you want to learn how to program in OOP, spend a little time learning Borland's Delphi (it uses a Pascal variant). It has nearly all the power of C++, and is easier to use than Visual Basic. Once you get all the C++ syntax out of the way, you'll learn OOP in no time. Then you can move on to something like C++, Java, or C#. I had the same trouble you did, and that's what worked for me.
[Jimmy O'Regan] You mean Kylix, which is the Linux version. There's also the Lazarus IDE (http://www.lazarus.freepascal.org) for Free Pascal (http://www.freepascal.org).
I've snipped a bit of replies that were a sideline about programming details themselves - with the Gang chiming in, it might make a good thread or an article in upcoming months. -- Heather

In the meantime, I shall continue to enjoy your magazine.

Some other thoughts: Get more people to link to you and advertise your site more, most people would do it out of gratitude for all the good work you guys do.

Something like that is in process now; it's one of those things that I mentioned discussing with Heather. -- Ben

Find every occurence of the .com one and get a link to your site on there as well - surfers will compare sites and you'll win hands down!

Thanks. A couple of our people were doing just that, right after the separation. -- Ben

Take care and all the best,

Steve Brown

Note: I had to use a Hotmail account (yeuchh) as my dog took a fancy to copper cored wire and ate every single wire sticking out the back of my box, he only left me with a monitor lead. Next time I'm gonna leave it switch on.

[laugh] If you write it up and send it to me, it'll end up in "The Foolish Things We Do With Our Computers" column sometime soon. -- Ben
...and indeed, you can see it here! Any foolish things you've done to your computers? Send 'em in... -- Heather

Hi Ben, thank you for the reply.

I'll keep an eye out for those tutorials. I've got the O'Reilly Learning Perl Book and I'm still getting over the stage of "it looks like garbage", familiarity will sort all of that out no doubt. I seem to recall your one-liner articles, I found those fascinating as they demonstrated the problem solving methods you use, and gave a good insight in how to use what's already there.

[Ben] Actually, I was talking about my 5-part "Learning Perl" series. Take a look at http://linuxgazette.net/authors/okopnik.html .

Aahh, I'd forgotten about these gems, thank you.

I'm glad to see that buffer overruns etc. are not a problem in Perl or Python, I'll just avoid C, I'm most familiar with it as a language but it's some time since I actually used it. Thanks for the example program, I'm looking forward to looking at that and trying to work out why it isn't correct.

[Ben] As Thomas has already noted (something I originally missed due to being tired and mostly asleep), it's a buffer overflow due to strncpy not terminating the string - a truly idiotic design decision. From libc's info:
 - Function: char * strncpy (char *restrict TO, const char *restrict
          FROM, size_t SIZE)
     This function is similar to `strcpy' but always copies exactly
     SIZE characters into TO.

     If the length of FROM is more than SIZE, then `strncpy' copies
     just the first SIZE characters.  Note that in this case there is
     no null terminator written into TO.
no null terminator oh my.
At that point, as they say, the rest^H^H^H^Hsystem is history...

Nope, I would never have got this, I'll still run the example to see what happens 'first hand' though.

[Ben] The actual mechanism, which can be seen by disassembling the corefile, is a stack smash via a free() call overrun.
jail@Fenrir:~$ gdb -q -c core smash
Core was generated by `./smash
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'.
Program terminated with signal 11, Segmentation fault.
Reading symbols from /lib/libc.so.6...done.
Loaded symbols for /lib/libc.so.6
Reading symbols from /lib/ld-linux.so.2...done.
Loaded symbols for /lib/ld-linux.so.2
#0  0x40096acf in _int_free () from /lib/libc.so.6
(gdb) x/i $eip
0x40096acf <_int_free+191>:     mov    %eax,0xc(%edx)
(gdb) info reg eax edx
eax            0x34333231       875770417
edx            0x44434241       1145258561
(gdb)
Joel Eriksson did a very impressive demo of getting root with the above proglet in the vulndev forum. He used Solar Designer's shellcode, computed the EIP, and pushed the shellcode onto the stack; voila . This, of course, required the proglet to be SUID. Took ~20 lines of C.

I'm still challenged with a modem, I've got a HCF modem that refused to work correctly when I upgraded my motherboard, I'm going to dig it out and play with it some more [grin].

[Ben] http://linmodems.org :)

Yeah, my modem used to work, but I just upgraded from a Duron to Athlon XP on a new board and the modem didn't work correctly, as I had a spare external modem, although only 33.6 kbs, I used that instead, too lazy to sort it out. Now my dog's busy digesting big chunks of the power supply I'm forced to get HCF modem running.

Take care,

Steve Brown.


Re: Dual "Linux Gazette"?

Sun, 6 Jun 2004 13:49:40 -0400
Ben Okopnik (LG Technical Editor)
Question by God Rudy (Dpfrdtrky from netscape.net)

Hello Linux Gazette and Editor;

[Ben] Hi, Rudy -

I hope that this is the correct mailbox for my "old" question. About last december i noticed that "www.linuxgazette.com" changed it pages drasticaly, to the bad. Through a longer search, i found "linuxgazette.net" (the "old version").

What happend?

I was reading backissues of both versions trying to find some answers --> no much succes!

[Ben] The answer can be found in the cover article that I wrote when we separated from SSC (the hosts of LG.com) - take a look at http://linuxgazette.net/issue96/reborn.html . We've actually been trying to contact readers like yourself, trying to get the word out that the original Gazette and the original mission are still very much in operation and going full force; unfortunately, we have not had much success, particularly since SSC has acted very hostile indeed throughout the entire process and has supressed any mention of us in their pages.
We still have a large number of readers, mirrors, and translators, but I wish there was a way to notify people like yourself of the change. If you have any ideas on that score, please feel free to let me know.

Rudy (just another garden variety God :-)

[Ben] Aren't we all? :)

Hello Ben;

Thanks.

Found it! I was expecting something with more "flags". I was just looking for the wrong thing :-)

Rudy


Re: Foolish things....

Sun, 13 Jun 2004 10:15:00 -0400
Charlie Pearce (cjp from linuxmail.org)

--- First thing I just want to say, thanks to yourself and the rest of the team past and present for producing the great thing that LG is. I've just discovered it and am enjoying reading through the archives finding many a gem.

Thanks, Charlie! I've forwarded your compliments to The Answer Gang; they deserve to share in the glory. :)

Anyway here's my foolish story, feel free to add it to a future issue if you wish:

[snip] Added to the upcoming issue - we've had enough responses to put one out this month. --Ben


Re: Linux Gazette Redux :)

Wed, 26 May 2004 13:57:13 +0200
Huibert Alblas (huibert_alblas from web.de)

Hello Ben (and the others)!

Thanks for your mail, "das hat mich wirklich gefreut" (sorry but I don't know how to translate this one to english, maybe Karl Heinz can help?)

Halb. Welcome home. :) -- Thomas
[Ben] Hey, Halb - great to see that my email has dragged you out of hiding! :)
According to http://babelfish.altavista.com it translates as "that really made me happy" - which is a very pleasant sentiment indeed. Thank you!
[Sluggo] That's the literal translation, and it works fine. More colloquially one might say, "It's a pleasure to hear from you."
As far as I know, wirklich means 'really' in the sense of 'truly' (not falsely), or perhaps 'indeed'. But in sentances like the one above, 'rally' means 'very much'. It comes out to the same thing, but does it in a different way. :)
'gefreut' also has a sense of rejoicing and perhaps relief. So it's more than just 'happy' as in "You gave me a flower and I was happy".

Haven't heard of you and the gang for a long time either.

I was a little bit confused when (over a year ago, as far as I can remember) I got a mail from (hmm, forgot his name) claiming he was the editor of the LinuxGazette, and that he was breaking up with TAG (or something)

Then I stop receiving mails from TAG, so I thought the Project was dead.

Never! -- Thomas
Nope, in fact if anything that's why we split - sure looked like the CMS was gonna kill it. -- Heather

I visited the LinuxGazette site a few times, but didn't realy like it.

[Ben] That would have been Phil Hughes. We broke away from SSC - I wrote a nice little blurb about it here:
http://linuxgazette.net/issue96/reborn.html
The old TAG list got shut down shortly after that; Phil wanted to convert the whole site to CMS, which in my opinion would have killed LG (and for his "version", it obviously has.)
Your experience, interestingly enough, represents my exact viewpoint of what's happened with many of our readers: those who did not catch news of the changeover - and if you, a member of TAG, missed it, what does that say about the average reader? - simply decided that the old LG was no more. One of the things I'd really like to do is somehow get through to those readers wherever possible, and in general get the word out that the Linux Gazette is alive, is publishing, and is better than ever.

Since then a lot has changed in my live, At the time of the TAG breakup I was without work, shortly afterwards I got a job offer at the Metro Group (one of the worlds largest trading companies)

I landet in a Team of 3 people doing Java/Oracle based Enterprise Portal and Backend Development, very interseting stuff, but a lot of new stuff to learn.

[Ben] [grin] In my opinion, that's how any job should be. If there's not a lot to learn, you're not moving forward. Nobody said that was easy - but then nothing worthwhile in life is.

I starting to help getting away from usnig winNT based development to debian. Opensource is definetly going strong in our litle corner of the company, Who knows where it will end.

I'm also getting maried next year :-)

[Ben] Wow. Felicitations to you and your bride, then. Please be sure to give us a URL to the photos. :)

Anyways, I just visited http://linuxgazette.net and saw the the site is "back to normal" (but looks better!)

[Ben] Thanks! A lot of credit is due to Rob Tougher who did a wonderful job of building the CSS. It's been tweaked a bit since then, but he's the man.

I will subscribe to list, but only if it stays below 50 mails/day, before my subscription was cut there was a lot of noise on the list from people talking (mainly) to each other.

Then you should be ok -- but bear in mind things fluctuate.
Well, there is a lot of spam, but we're looking into fixing this. And as for the chatter -- that was due to the move from SSC. There is a bit of chatter here at the moment, most of which is not Linux related, I should add. -- Thomas
One of our threads this month actually was a technical aside to a line of chatter that began off-topic. You never can tell with the Gang, til it's all said and done! But, not 50 plus a day, no. -- Heather

Don't get me wrong, I have nothing against people having fun communicating, but I won't have the time to keep track of another 50+ mails/day.

I will install the current Gazette on my palm to read on the way home.

Back on topic: Articles.

Yes, we need articles. Please, put fingers to keyboard and type away! :) -- Thomas

Have Fun!

Huibert Alblas

You'll be seeing Halb's article soon :D -- Heather
[Ben] Right now, I'm actually looking for ideas on how to get the word out and the direction in which to take LG; having become the Editor-in-Chief, I now have to take care of the baby - and I'm a fussy babysitter. :) The ideas that have been proposed so far - making LG a bit more professional to involve the corporate crowd and advertising in other Linux-related media, as well as a number of other specific things to do - sound really good to me; however, I'm still open to input.
You read it here. Gentlefolk, if you've ideas - let us know! -- Heather


Linux Gazette article in issue 103

Mon, 07 Jun 2004 12:51:10 -0400
C. Numan (anonymous)
Regarding the PopupALT article. -- Heather

Jimmy:

I read your article on extensions for Mozilla. Thanks for highlighting some! I get more and more impressed with what you can do with Mozilla / FireFox.

I noticed you wondered this at one point:

PopupAlt Popup ALT does exactly what is says on the tin: it provides a popup of an image's ALT tag when the mouse is placed over it. This feature, which was present in Netscape 4, was removed from Mozilla for some unknown reason.

I believe it was taken out since the correct HTML spec says the alt tag is only to be displayed if the browser can not display images. It is not supposed to be a "pop up" info. I couldn't find it, but I think there is some tag to display a pop up when the mouse hovers.

[Ashwin N.] The "title" attribute in the "img" tag is shown as popup text by most browsers when the mouse cursor is hovered over the image.
<img src="your_image.jpeg" title="This should show up when you hover your mouse over this">

Anyways, it is a cool extension to show the information, but Mozilla as default is now more correctly rendering the page. In fact, the W3 says that the alt tag should be used very carefully, and I've seen some really long alt tags - this causes problems if your browser translates to voice or braille, which is the purpose for the alt tag. See: http://www.w3.org/TR/html401/struct/objects.html#alternate-text

Just thought you might be interested in some of the history.

C.


linuxgazette.net down......

Thu, 3 Jun 2004 22:50:02 +0200
Martin Bock (mbock-stade from t-online.de)

Hi folks,

you've asked for it, you'll get it: A few thoughts of my own about missing mail to TAG.

  1. The "average" PC user today differs from the average PC user three or five years ago. Today there are a lot of more people using computers at work or at home. The majority of these peoples are interested in doing stuff like writing mails and letters, surfin' the web and other non-sophisticated stuff like this. Most of them feel no need to find out why things work for them and how they could could customize or improve something.
  2. There are a lot of distributions around, which install with a few mouse clicks a usable system. There is no need to think (and ask) about partitions, filesystems, configuration and so on. In most cases there is no need to edit files e.g under '/etc/ppp/' - it's all done by ${install-tool} with drop-down- and dialog-boxes.
  3. Linux is grown up -- there are lots of information around (at? on? I dunno) the internet. Best of it: They are only one "google" away.

I appreciate the project "Linux Gazette" (hey, there are all issues from the beginning on my workstation's and my laptop's hard disks). But: I feel, nowadays Linux Gazette shouldn't focus on basic- and newbie-support, but should do more stuff one ore two steps further.

BTW: The link on my site points to your (true[tm]) Linux Gazette.

Keep on rollin ...

Nice Regards

Martin Bock


GAZETTE MATTERS


Asking 2c-tips of TAG

Mon, 24 May 2004 20:37:26 +0100
Thomas Adam (thomas_adam from bonbon.net)

I am a little bit concerned the people here (especially those that are more established) don't fully understand what constitutes a 2c-tip. A 2c-tip is just that -- something that is short and easy and can be done in a few steps. Asking whether it is appropriate (Neil!) just causes us more grief to wade through meta questions!

This might be in the form of a configuration tweak, or a minuture program that performs a given task, etc. Often though, larger tips are turned into TAG column entries -- and vice versa.

Often what would be flagged by Heather and I as a TAG entry might well form off-shoots to 2c-tips if the quality of the thread in question is not worthy.

But we will publish anything not only explicitly marked as a 2c-tip, but also what we deem appropriate to be one. We certainly don't filter out sent in tips -- only vary rarely. The only thing I will say to you is that don't always expect to submit one and see it in the preceeding release of LG. Heather and I decide which tips get published when.

[jra] If you can figure out how to publish tips in an issue of LG that's already gone out, my hat's off to you, Thomas.
[Ben] The method is covered in Jim's "Retro" series. It's based on that capability of Linux that Linus talked about, executing an infinite loop in three seconds...
[Jason Creighton] Yes, it's quite a clever method. Instead of going to all the work of updating every copy of the LG everywhere, we just insert the tips in the past before all the mirrors pick up the issue.
The one problem is that executing an infinite loop in three seconds can only place information in the future. In order to place it in the past, we must use a Windows box, which, as everyone knows, takes an infinite amount of time to execute a three second loop.

Send them in.... you know you want to.

-- Thomas Adam


Author FAQ...

Wed, 23 Jun 2004 09:11:30 -0400
Ben Okopnik (LG Technical Editor)

...is now updated:

http://linuxgazette.net/faq/author.html

Thanks to Jimmy for doing a lot of the preparatory proofreading.
Comments, corrections, and ideas welcome.


Licensing

Fri, 18 Jun 2004 08:47:35 -0400
Ben Okopnik (LG Technical Editor)
[Ben] OK, I've done my bit of research and rewrite, etc., etc., etc. - thank you, Rick and Jimmy, for contributing to my knowledge of the topic.
If you readers think that discussion might be interesting to you, let us know. Most of the Gang here found it rather dry. -- Heather
[Ben] I've decided that the OPL is a good license for us to stick with, as long as the optional stuff is not asserted; consequently, I've updated our <http://linuxgazette.net/copying.html> page - it was a) in the "old" LG format and b) showed the draft version of the OPL. Both are now fixed. Starting with the next issue, the front page will now explicitly state
All content released under the Open Publication License v1.0 (options A and B not applied)
and the individual articles will be tagged with
Copyright © 2004, [author_name]. Released under the Open Publication license
Comments, as always, are welcome.


[LG 101] mailbag #2 - Stephen Bint

Mon, 7 Jun 2004 11:22:35 +1000
Peter Maxwell (peter.maxwell from anu.edu.au)
Question by gfa2c (gfa2c from gmx.net)

Stephen Bint died in February. I wouldn't have known except that back then google turned up his sister's web log:

http://www.livejournal.com/users/smaoineamh/2004/02/27

http://www.livejournal.com/users/smaoineamh/2004/03/06

Apologies is this is old news (after all you published the question 2 months ago) but I guess it is just possible that no regular Linux Gazette readers were able to help.

-- Peter Maxwell

We sorrow that he's gone, but he stuck to his principles. There's plenty to be said for that. -- Heather

This page edited and maintained by the Editors of Linux Gazette
HTML script maintained by Heather Stern of Starshine Technical Services, http://www.starshine.org/

Published in Issue 104 of Linux Gazette, July 2004

More 2 Cent Tips!

See also: The Answer Gang's Knowledge Base and the LG Search Engine


a question about linker script

Ben Okopnik, Jimmy O'Regan, Philip O Brien (The LG Answer Gang)
Question by Liang Jun-Ming (helo54ljm from yahoo.com.tw)

Dear Mr.Okopnik

My name is Liang Jun-Ming,a student from Taiwan.

I'm suffering from a programming problem,I would very much appreciate receving an answer from you ! I wrote a testing program named hello.s , and a linker script named ldscript as follows:

See attached liong.hello.s.asm.txt

after " as hello.s -o hello.o" and "ld -Tldscript hello.o -o hello" I get an executable named hello.

My question is:

What does "AT(0x3000000)" mean ?

Does it mean that the loader will load this executable at "physical address " 0x3000000 ?

I know the "virtual address" of the first byte of this executable would be 0x1000, but in Linux , can we put data at any physical address as we wish ? If it does, why the program still works even if the RAM is 32M in my PC ?(0x3000000 > 32M). What tool in Linux can we have to let us "watch" the contents of memory by specifying "physical addresses"? If it doesn't, what is the function when we write "AT(xxxx)" ? Hope I can receive an answer when you are not busy. Thank you very much!

[Ben] Hi, Jun-Ming -
I'm afraid your question is somewhat misdirected: I'm not an assembly expert, under Linux or otherwise. My suggestion to you would be to start at http://linuxassembly.org and go from there - their front page reads

...............

Welcome to the Linux Assembly!
If you are looking for information on assembly programming under UNIX-like operating systems (Linux/BSD/ BeOS/etc), this is the right place to be. Here you can find various resources, ranging from tutorials and documentation, to actual programs written in assembly language. As time passes, we will try to provide as much information on the subject as possible, so stay tuned.

...............

That seems like the right place for your query.
[Jimmy O'Regan] The AT() keyword is for things like ROMs. I recommend you read the GNU Linker manual:
http://www.gnu.org/software/binutils/manual/ld-2.9.1/html_chapter/ld_3.html#SEC21

Dear Answer Gang:

According to the GNU linker ld manual:

the AT() keywod specifies the load address of a section, and it says "this feature is designed to make it easy to build a ROM image..."

Query,

  1. the address specified by AT() keyword to load is the "physical address" of ROM ? and we can really put code in ROM in this way ?
  2. the "ROM" the document mentioned is the actual element in board, or just RAM of imitating the Read-Only-Memory ?

( forgive me for a Chinese student's poor English !)

[Jimmy] The AT() keyword can be used for ROMs - if you want to write a replacement BIOS (such as Linux BIOS: http://www.linuxbios.org), you will have to do use the AT() keyword; or if you are creating a ROM images for later use in an emulator, or to write to a physical ROM.
You can also use the AT() keyword for boot loaders/kernels, which need to be at a specific location in RAM to be executed; and in a normal program. If the program has a specified load address, and is loaded on an MMU-less system, or in an OS which doesn't use the MMU, then you get access to that specific area of memory, but in an OS (such as Linux) which makes use of the MMU, the address is transparently remapped to an address within the space allocated to your program by the kernel.
Jimmy also asked a friend... -- Heather
[Jimmy] Sorry about the format this takes; I asked a friend from college if he could answer the linker script question, the answer is in the attached IRC log. There's a lot of overview in there which I thought was interesting. Philip's credentials are that he wrote an operating system for his degree thesis, based on KeyOS (http://keyos.sourceforge.net), to which he contributed code under a pseudonym (the college made some claims about copyright...).
Logged from the UnderNet IRC on Jun 20.
-- Heather

...............


<JimRegan> So, can you answer that question?
<JimRegan> Cos noone at LG can.

<Crypty> question?

<JimRegan> In the html file I sent

<Crypty> its the offset that that section is loaded at.
<Crypty> the offset from the loadaddr

<JimRegan> ?

<Crypty> and the 0x1000 is the size of the section if i remember correctly
<Crypty> or at least i think thats it.
<Crypty> had to figure it out for writing my boot loader, which i couldnt get to work right, caused fatal exception when it switched to ring 0 to enter PMODE.....
<Crypty> ended up having to use Grub, but handed up my effort to the examiners, they were impressed i got it to ge tthat faer.

<JimRegan> So... in a ROM, it'd go from the beginning of memory, otherwise it's relative to where it loaded
<JimRegan> If the ROM is loaded at 0

<Crypty> .text is actually the code by the way, not the strings.
<Crypty> and yes, but all programs see their address as 0, but the OS handles their requests for memory locations and adds their offset in the memory manager

<JimRegan> The strings go in .data

<Crypty> yes
<Crypty> the code is put in a large offset to avoid overflows causing mistooks in the code.

<JimRegan> So it's not necessary to specify the location, unless you have some weird backwards compatibility problem, or are writing an OS?

<Crypty> but the OS can preempt this and actually fool the program by pretending it loaded the code at that offset and translating the addresses on the fly
<Crypty> well, it is also to specify locations in writing an OS or other "pure application"

<JimRegan> So, in short, you can't just put code wherever the heck you want in a modern OS?

<Crypty> but a decent OS will just ignore the offsets and pretend instead
<Crypty> no, the OS itself has to obey the offset rules, as the memory manager will not be loaded at that point.

<JimRegan> I mean if that's executed in a running OS.

<Crypty> so it cant pretent and every thing is relying on exact offsets for a form of crude task switching.
<Crypty> oh, yes.

<JimRegan> Like the MacOS did?

<Crypty> but even without a ld script, it should still use a default set of offsets for linking, depending on ythe executable format, coff, elf, bin etc..

<JimRegan> OK, I think that'll answer the question. Do I have your formal permission to send this for potential publication?

<Crypty> the offsets are set by default on set types of exe, so that the os can just go , heh I know this type, and not have to search for markers in the code etc.
<Crypty> no, hehe I better read up and make sure its right first.. its been over a year.

<JimRegan> Ah. Cool.
<JimRegan> Well, what you've said makes what I read in the LD manual make sense.

<Crypty> oh well in that cvase.. sure.. just dont sign my name to it, klast thing i need is people with questions :-) or worse some git flaming me for not getting it quite right.

<JimRegan> AT ( ldadr )
<JimRegan> The expression ldadr that follows the AT keyword specifies the load address of the section. The default (if you do not use the AT keyword) is to make the load address the same as the relocation address. This feature is designed to make it easy to build a ROM image. For example, this SECTIONS definition creates two output sections: one called `.text', which starts at 0x1000, and one called `.mdata', w
<JimRegan> hich is loaded at the end of the `.text' section even though its relocation address is 0x2000. The symbol _data is defined with the value 0x2000:

<Crypty> but that said I think i got it right, been a while but I think i remember it right
<Crypty> oh, good I did remember it right.. yeah, go me!

<JimRegan> So, do I get a definite OK now?

<Crypty> hehe I am still one of the knigits of ye olde ASM coding :-)
<Crypty> yeah sure.

<JimRegan> Thanks.

<Crypty> you can tell me if some one flames you for getting it slightly skew ways,
<Crypty> but it is a good enough explainatin to the question i think

<JimRegan> Nah. People are generally polite in pointing out mistakes.
<JimRegan> God knows I've made enough of them.

<Crypty> AT() is definitly the offset it gets loaded at and the x1000 is the size of the section, they are seperate in that one specifies properties of the process after its loaded and one specifies properties of the EXE.

...............


Launching Firefox 0.9

Raj Shekhar (rajshekhar from hotpop.com)

Hello

I had used the following script for launching Firefox (earlier named firebird) (See my article Mozilla Firebird - A review (http://linuxgazette.net/issue97/shekhar.html) to see how you can use this).

#!/bin/sh
/usr/lib/mozilla-firebird/MozillaFirebird  -remote "openURL('$@', new-tab)" ||
exec /usr/lib/mozilla-firebird/MozillaFirebird "$@";

However, with the 0.9 release (the latest one, which is even more slick and fast), this stopped working. Instead of launching the new tab, the Profile Manager UI pops up. This was reported as bug http://bugzilla.mozilla.org/show_bug.cgi?id=246168 in the Mozilla Bugzilla.

The reason for this is the change in the format of calling the remote command. The new way of doing this is:

firefox -a firefox -remote openURL(<url>,new-tab)

Note that there should be no space between the the comma and the command after the url (new-tab in this case, you can also use new-window to start a new window) or you get a "Error: Failed to send command: 509 internal error".

So the script to launch firefox becomes

#!/bin/sh
/usr/lib/firefox/firefox -a firefox  -remote "openURL("$@",new-tab)" ||
exec /usr/lib/firefox/firefox "$@";
[Ben] I just had the same problem with the new Mozilla upgrade; the trouble is in the brain-dead URL parser at the end of the wrapper script. Although I fixed it, it very quickly became useless: I downloaded Mozilla 1.7 from http://mozilla.org, and its wrapper script works fine.
Oh, and since you brought this issue up: just yesterday, I was reading about Mozilla's "remote" methods in order to fix the above problem - and still forgot, completely, that there's a "native" way to test if Mozilla is running or not.
Wonder if I can trade this brain in for a newer model?
mozilla -remote "ping()" 2>/dev/null && mozilla -remote "openurl($1,new-window)" || mozilla $1


Checkinstall

Neil Youngman (neil.youngman from wirefast.com)

This one courtesy of LWN. You want to build a package from the latest source, but have it managed by your favourite package manager. Checkinstall claims to automate the process for Debian (presumably any system using dpkg?), Slackware and RPM based systems. I gotta have it ;-)

http://checkinstall.izto.org

Publication by LWN is hereby permitted

[Thomas] I have used both, and my personal preference would be the use of stow over checkinstall. :)
Typing stow as a keyword into the search box at freshmeat.net also reveals some interesting competitors, and a front end for stow.
Also, Allan Peda had an article on this topic in Issue 75, Simple Package Management With Stow -- Heather


Periodic table of the operators

Jimmy O'Regan (The LG Answer Gang)

One for Ben: a periodic table of Perl 6's operators.

http://www.ozonehouse.com/mark/blog/code/PeriodicTable.html

[Ben] "Today, we're going to learn about one of the varieties of serious mental disturbance. Here, for example, is a distinctly pathological case..." :)
It's got some amount of cuteness to it, but I think you'd have to be a bit obsessed to actually do the thing up. Reminds me of an excellent model of the Titanic, about 8' long IIRC, built out of matchsticks - all the way down to the deck chairs and the oars in the lifeboats - that I saw at an exhibition of artworks done by mental patients. Much of the work was incredible, brilliant, and unrepeatable in many cases - and the stories (such as that of a woman who made these shockingly beautiful patterns from threads she'd pluck out of rags... and almost all of whose work had been thrown away because it was just "trash" made by "crazy Nancy") would break your heart.


"Remote" authentication with PHP

Lew Pitcher (lpitcher from sympatico.ca)

Hi Guys

Here's another contribution. Hopefully, you can publish it as a 'two cent tip'


As part of a PHP web app I'm playing with, I needed to authenticate the web client user with a remote system. Unfortunately, this system is a mainframe and setting up a web-enabled authentication product on it is somewhat timeconsuming and requires a lot of administrivia. I wanted to avoid all that, so I had to come up with another way to authenticate web users remotely.

The one TCP/IP networked app our mainframe has available is FTP. Now, the FTP protocol implements security processes with the 'USER' and 'PASS'word commands, and our host security people have ensured that the host FTP server requires these two functions. In our case, the 'USER' and 'PASS' functions on the server interface with the ACF2 security system to validate that the given userid and password combination are correct, and will not let an FTP connection in if they aren't.

I use this little tidbit of information to let me authenticate web users of my Linux box by forcing their web browsers to pop up the Authentication panel, and sending their entered userid and password information to the host in an FTP 'USER' and 'PASS'word command sequence. If the host's FTP rejects the sequence, then the user isn't authorized, but if the host's FTP accepts the sequence, then the user is valid to the host. In either case, I don't actually transfer files over the FTP link; I simply close it unused. I only need it for the authentication.

Neat or what?

Here's an example PHP script that demonstrates the process. It needs an ftp server in order to work, and is (for demonstration purposes) set up to talk to the ftp server at localhost...

<?php

  /*
  ** LoginPrompt() sends headers and html with the intent of
  ** inducing the web-browser to display it's built-in userid/password
  ** prompt.
  ** It sends a WWW-Authenticate header to give the authentication specs,
  **          a HTTP 401 on the current page requested by the browser, and
  **          a dummy HTML page to be displayed if the user cancels the
  **            login prompt
  ** It then exits, causing php to terminate the current transaction
  ** without further output
  */
  function LoginPrompt($URL)
  {
    /* force the login popup to show up */
    Header("WWW-Authenticate: Basic realm=\"System Login\"");
    Header("HTTP/1.0 401 Unauthorized");

    /* if the user hits Cancel, send him to a place he cant hurt us from */
    echo "<meta HTTP-EQUIV=\"Refresh\" CONTENT=\"0; URL=$URL\">";

    exit;
  }

  $userid = $_SERVER['PHP_AUTH_USER'];
  $passwd = $_SERVER['PHP_AUTH_PW'];

  $validuser = "no";

  if ($userid && $passwd)
  {

    /* connect to FTP server, see if it accepts the given userid & password */
    $conn = ftp_connect("localhost") or die("Cant connect");
    if (@ftp_login($conn,$userid,$passwd))  $validuser = "yes";
    ftp_close($conn);

    if ($validuser == "no") /* bad user - try the login again */
      LoginPrompt("http://www.php.net/manual/en/features.http-auth.php");
  }
  else /* first time into this page - force the 1st login prompt */
    LoginPrompt("http://www.php.net/manual/en/features.http-auth.php");

  phpinfo();

?>


Xserver spits Xclient hosts

Chris Christensen (Chris.Christensen from aspenresearch.com)
This is in reply to:
http://linuxgazette.net/103/lg_tips.html#tips.4 -- Thomas Adam

Regarding Xserver spits multiple windows to foreign Xclient:

I have no knowledge of Exceed. I use cygwin to connect to unix/linux boxes. You have to configure/install cygwin with X (and ssh, if you're going to use that, and why not?). Crucial step is to start an xwdm (blackbox I think, whatever is available on Cygwin) first, and start linux x-apps from inside the xwdm (start with an xterm!). The full screen x-windows display manager is actually running locally, while the windowed apps are in the dm.

Chris C


Fun game in 64 LoC

Ben Okopnik (LG Technical Editor)

Ambassador of Pain - quite entertaining for 64 lines of code. (That's in C, mind you; if it was Perl, I'd be expecting Quake3, including the PAK file. :)

http://raffi.at/view/code/aop


Grokdoc

Jimmy O'Regan (The LG Answer Gang)

A while back, Groklaw mentioned that they wanted to have a Linux usability test, and technical documentation written for new users. They've started a wiki (based on the Wikipedia software) to do this:

http://www.grokdoc.net/index.php/Main_Page


This page edited and maintained by the Editors of Linux Gazette
HTML script maintained by Heather Stern of Starshine Technical Services, http://www.starshine.org/

Published in Issue 104 of Linux Gazette, July 2004

The Answer Gang

LINUX GAZETTE
...making Linux just a little more fun!
(?) The Answer Gang (!)
By Jim Dennis, Karl-Heinz Herrmann, Breen, Chris, and... (meet the Gang) ... the Editors of Linux Gazette... and You!


We have guidelines for asking and answering questions. Linux questions only, please.
We make no guarantees about answers, but you can be anonymous on request.
See also: The Answer Gang's Knowledge Base and the LG Search Engine



Contents:

¶: Greetings From Heather Stern
(?)Linux says "unknown scancode" for all keys
(?)Suggestions for *low* end systems?
(?)software CD player does not play thru speakers (Linux RH 9, Dell Dimension 2350)
(?)Mixing Fvwm with applets

(¶) Greetings from Heather Stern

Greetings, folks, and welcome once again to the world of The Answer Gang.

Statistics, hmmm... things are starting to look up... still want poeple to get the word out though. The real Linux Gazette is over here at .Net. Tell your friends.

No real peeves with our querents this time, so we have the belly laugh of the month instead - a piece of spam telling us what a great deal we can get on free unlimited technical support. Whee!

Thomas and I have been busy, and not just onanking away on pubbing the TAG mail. We've had quite a happy time chatting with each other now that we've gotten voice over IP working. It was a rocky road though...

Lesson Zero. Get sound working on your own. If you can't hear linus torvalds talking or your favorite musical strum or a nice little MP3, don't hold your breath that you'll hear anything on the "phone" either.

Lesson One. Thou shalt have a working microphone. One that you have to solder back together will not cut the mustard (but it will cut in and out even when everything else works). He got a nice cheap deal for one finding on online special. I got a nice echo canceling one built into my headset.

Lesson Two. Thou shalt plug they speakers or headphones into the right holes on the soundcard. Otherwise they don't make much noise. Whoops.

Lesson Three. This mainly affected him; I have a static IP and correct reverse DNS to go with it - but VOIP hates network address translation. Hates hates hateses the nasty NATses. Rumors that kphone has figured out a way to deal with this couldn't be tested because if it does, it's specific to that one app, and while kphone likes his box fine, it hates me, crashes (should that be krashes?) in moments after launch. Hmm. Rumors of the ease of use of SIP applications have been exaggerated... or they don't survive NAT either.

Port forwarding was tried without success, because he has a windows box speaking to his cablemodem, thanks to the brain damageed code it needs to make a connection. The Linux support for that device is starting to shape up, though.

Meanwhile, Gnomemeeting did the trick. As long as I've already launched (so my client goes and registers with an LDAP database out there somewhere) and he initiates the call (little hard to reach his Linux box directly with the NAT) then it handles all the gory details.

We had to mess with codec for our voices too. I hear his voice fine when I set speex-15k. He likes what he hears of me when he sets Alaw. This doesn't make much sense to me, since in theory both of these are just beyond the scope of our rated bandwidth, but it works anyway. So don't take its recommended limits for gospel - goof around, try all the codecs. For long distance project work with a bunch of people, IRC works great. Wikis are pretty good too (check out that Wikipedia, our Answer Guy has grown very enamored of it and is helping out on a few topics). I'm pretty pleased with how my upgrade to my own SysadMoin worked out. But for working with only a person or two at a time, sometimes chatting directly can cut through confusion - "body language" carries a lot better in voice than emoticons - and give more time for brainstorming. Or being silly, as the case may be. We can split ginger beers and laugh about Ben leaving his dark glasses in the pretzels again.

I think it's a pretty good way to celebrate Independence Day - hands free and proud! Have a happy Summer.


(?) Linux says "unknown scancode" for all keys

From Justin Ekis

Answered By: Thomas Adam, Karl-Heinz Herrmann, Benjamin A. Okopnik

Hello I went to look at the kernel messages with dmesg today, but surprise! All that I got was line after line of this:

keyboard: unknown scancode e0 64

dmesg and /var/log/messages are just about useless, flooded with that.

It's the same scancode every time too. the command showkey -s shows that my wireless keyboard does send an extra scancode after each key along with the normal scancodes. This is apparently some kind of status notification. I was surprised that the keyboard worked at all since it required a special driver under Windows so I almost expected something like this.

(!) [Thomas] You did not tell us which distribution you are running. Not that it really matters, but each distribution has a slightly different way of handling console keymaps.

(?) Oh yes, sorry. I'm running Slackware 9.1

(!) [Thomas] You should ensure, regardless that:
/etc/console/bootmap.gz
is correct, but I suspect it is since you were able to write us the e-mail.
If you're running debian, it is just a case of doing:
dpkg-reconfigure console-data
However, your errors are usually indicative that your keyboard mappings are off. The only thing I would have suggested is that you used loadkeys and dumpkeys, and if that doesn't work to define the keycodes yourself, via keymaps and setkeycodes( 8).

(?) Strange, there is no directory called /etc/console here. I'm sure my keymap is good though. Other than the warning the keyboard works flawlessly and it doesn't happen when I use a standard keyboard. I prefer my wireless one though.

(!) [K.-H] Well -- I've no idea how to change the keymap -- but if the keyboard is basically working and the only annoying thing is the flooded syslogs how about dropping these messages? As what kind of syslog messages are they logged? kernel? info level or higher? The old syslogd has restricted options to accept or dump messages of a particular type (not content filter). I know that SuSE 9.x offered a new improves syslogd as an alternative -- so that might even be able to do some fancy filtering on the message content (and dump your keycode warning). Won't help for the boot-log but /var/log/messages won't be floded anymore.
To read the boot log /var/log/boot.msg without the garbage you can run grep with negative filter like:
grep -v "your keycode" /var/log/boot.msg | less

(?) The keyboard works but I don't like my log being made so huge by all that junk.

I went to look at the kernel messages with dmesg today, but surprise! All that I got was line after line of this:

keyboard: unknown scancode e0 64

dmesg and /var/log/messages are just about useless, flooded with that. It's the same scancode every time too.

(!) [Ben] I just had a similar problem, although it wasn't a flood as it is for you; perhaps 10 of these messages every hour. Before I could get around to fixing it, I upgraded my kernel from 2.6.3 to 2.6.5 - and the problem went away. So, even though I can't take credit for finding the solution (or even the exact problem), there it is.
The "scan codes", as far as I could tell, were being generated by some kernel driver seeing a signal from a piece of hardware with which it wasn't completely familiar and spitting out the unknown signal as a "scan code". In my case, I'm pretty sure that it was the new Synaptics touchpad - which definitely required a new driver.

(?) Suggestions for *low* end systems?

From tag

Answered By: Thomas Adam, Jay R. Ashworth, Jimmy O'Regan, John Karns

In all the years of installfesting, hackery, hints, and consulting, I get a lot more questions from ordinary folk about how to make last years... or sometimes last decade's... hardware run half decently rather than walk with a limp.

Lots of articles I see about the latest and greatest, or what K and Gnome have improved for everyone this season, just aren't too useful to folks buying a laptop at the local surplus shop though. Low memory is almost always a more painful limit than low CPU oomph, though that too, is a factor.

(!) [Thomas] Well, let's see. My P166, with 32MB RAM ran X11 (version 3 and 4) not too badly. Granted, it wouldn't run KDE or GNOME, but if you were patient, it would run X, and you could get somne usability out of it....
What helped were a number of things:
1. A low resolution colour-depth (8/16 bits) is always a good idea. This frees up quite a lot of memory. Usually a high colour-pallet is only ever needed if you're a gamer -- and that just isn't going to be the case on the sort of hardware you're referring to. Some window managers (fvwm is one such window manger) allow you to set this, aside from the defaults set by the X-server.
2. Using a window manager (hellllo, "fvwm" :)) as opposed to a desktop environment is preferable. This means that interal cruft such as built in file managers are external and hence loaded only when needed. This helps to reduce memory consumption until such application need to be invoked which may be never. And even then, if a GUI file manager is needed I'd recommend 'emelfm'.
3. Using an alternative to X11 pure might be an option for really low-end specs. Such things as: TinyX, mgr (yay, I love mgr, although sadly archived) and even Y-Windows (yes, I have named that right).
(!) [Thomas] There is also the RULE project, which is probably best just for this scenario where low-end hardware is being used. "Run Up to date Linux Everywhere" is excellent.
http://www.rule-project.org
(!) [Jay] And don't plan on running FireFox unless you're willing to compile it yourself. :-}
(!) [Thomas] That wasn't in existence back then. I was using netscape 4 at a push. I did help with LFS -- it took five days straight to compile XFree86 3 :) I kid you not....
(!) [Jimmy] Software designed for handhelds is probably the best bet. Aside from kdrive/Tiny X, there's
Nano-X/Microwindows: http://www.microwindows.org Twin: http://linuz.sns.it/~max/twin OpenGUI: http://www.tutok.sk/fastgl MiniGUI: http://www.minigui.org PicoGUI: http://picogui.org
Nano-X is somewhat X compatible, Twin is curses based, and PicoGUI will run on Linux on the Palm. Even OPIE will run in 10 megs of RAM.
(!) [Heather] If they're in a networked environment, there's always letting a tougher machine do some of the work (hellloooooo LTSP) but that's cheating.
(!) [John] That was my thought too. One thing I would add is to check out the Knoppix Cluster release / edition. I ran into a real snag with plain LTSP when I trying to implement a diskless cluster network, where the main app of interest was in MM flash. The 3.x version of LTSP didn't support any version of Mozilla, or Netscape later than 4.x via the incorporated busybox pkg. I managed to resolve that issue, but was unable to resolve the problem of having the LAN bw eaten by the flash animation, by getting the browser to run locally in the slave memory rather than on the server.
After about 8 instances, the (100 mbps) LAN came to a crawl. We ended up succombing to adding hd's and running as normal hosts :(. Sometime later I discovered that the Knoppix cfg overcomes the problem by running all apps in the local nodes RAM. I believe that Knoppix uses LTSP, but has it configured to do what I couldn't get it to do. Some day I'll take a look to examine the LTSP cfg that Knoppix uses.

(?) software CD player does not play thru speakers (Linux RH 9, Dell Dimension 2350)

From Ted Kubaska

Answered By: Thomas Adam, Jason Creighton

I'm having some difficulty getting my CD player to play through my speakers. I have a Dell Dimension 2350 running Red Hat 9. I got this Red Hat 9 by downloading the ISOs from the Red Hat site. When I bring up the saw CD player, the screen comes up, I can see the elapsed time tick by, but there is no sound coming from my speakers. I can plug into the headphone jack on the CD drive and get sound.

(!) [Jason] The problem is probably the fact that there's actually two ways to play CDs. One way is for the software to just tell the CD drive to start playing: The sound will play in the little jack on every CD drive in existance that nobody ever uses anyway. There's also supposed to be a cable running from the CD drive to the soundcard inside a computer, which is how things work normally.
(!) [Thomas] While this is true, this is only applicable if you're using a CD-Player that extracts sound using analog. While most do, Windows applications don't (Media-Player being an example). For the case of laptops, sound is extracted using raw audio.
(!) [Jason] So the sound never actually gets to the software. And in this case, the sound never actually gets to the sound card because a connection is obviously missing on your laptop.
The other way to play CDs is read the CD "raw" and then just send the sound to the sound card.
Some software tries to do it one way, some the other.
Try this:
$ play -t cdr /dev/hdc
(!) [Thomas] In more recent versions of play(1), if you're using ALSA, you must tell it so.
(!) [Jason] where /dev/hdc is whatever your CD-ROM drive happens to be.

(?) Thanks. Jason's explanation of the two ways to play CDs clears up a lot of confusion. I have succeeded in getting my CD to play thru my speakers (with xmms, not the CD player that comes up with RED Hat -> Sound & Video -> CD Player).

I have not yet taken the skins off of my Dell Dimension 2350 (this is not a laptop as some thought, but Dell's low end tower, a 2 GHz P4) but will do so after the mail I got. Just to check the cable people have referred to. From what I read so far I think my sound card is integrated on my motherboard and not actually a separate card. The RedHat Hardware browser says 82801DB AC'97 Audio, Mfg Intel, Driver i810_audio.

(!) [Thomas] i810_audio is courtesy of Intel and probably at the time this was written was still quite new. It's certainly not the best soundcard out there (or should I say embedded chip) but it does the job quite well.

I issued a play -t cdr /dev/cdrom and a play -t /mnt/cdrom and got no response at all.

(!) [Thomas] This is because "/mnt/cdrom" in this context doesn't point to anything. One does not mount audio CDs and so the actual device (/dev/cdrom) must be used.

(?) I was pointed to an earlier TAG discussion

http://linuxgazette.net/issue80/tag/4.html

From the information there I downloaded xmms-cdread-0.14a.tar.gz from ftp://mud.stack.nl/pub/OuterSpace/willem, unzipped, untarred, built and installed. I am now listening to CD output thru my speakers!

(!) [Thomas] This method is still using audio-extraction which often makes the CD-ROM drive spin around very fast. This can be quite noisy, especially on laptops.

(?) All is not perfect, however. If I put in a new CD, the default CD player starts up automatically. This player does not work and never has. I have clicked on preferences for this player (the knife and fork icon) in an attempt to not have it load automatically. I specified no action on CD

(!) [Thomas] You don't say what window/desktop manager you're using, but if I recall correctly. RH9 uses GNOME as the default desktop manager. It's possible that the settings were/are not saved until you logged out...

(?) load; but it still comes up and tries to play when I load a new CD. I see the elapsed time tick by and get no sound thru the speakers. I have to kill this player and bring up xmms, click on play, and then all is well.

(!) [Thomas] This comes back to what Jason and I said earlier about how audio is extracted. Since XMMS defaults to using Raw audio, and other players use analog, without the use of such a cable, you just won't hear any sound.

(?) Mixing Fvwm with applets

From John Karns

Answered By: Thomas Adam, Heather Stern

Hey, another fvwm user! BAC, Thomas, have you experimented with running windowmaker applets under fvwm? I really like a lot of the applets WM offers, (e.g., wmmount), but can't seem to get it to work inside of the fvwmbutton module.

(!) [Thomas] Yes, I have. If you're running them from within FvwmButtons, that puts a slightly yet subtle slant on how things are done, since you'll have to ensure that a few conditions are set.

(?) That seems a much better way than having small 48x48 pixel windows scattered around the root window. One alternative might be to use the WM docking window (if that's the right term), but I would still prefer the fvwm buttonbar (or whatever it's called). Might there be some other nice(i.e., esthetic) way to gather them?

(!) [Thomas] Because the WMapplets are from another Window Manager, the hints they use are somewhat alien to Fvwm pure. Hence, the freedesktop.org people define EWMH (extended window manager hints). These essentially allow you to run embedded apps like WMapplets, the KDE kicker, etc.
But I cannot be anymore specific than that since you don't say what is happening. I'm not even sure if WM* apps use EWMH.

(?) Thanks for the pointer. I'll browse their site when I get the time. From reading the fvwm docs, I don't really understand the concept of hints, from what you're saying here. My understanding was that they are window properties containers (of sorts) which pertain to such minor things as border shadowing.

(!) [Thomas] Kind of. EWMH hints are an unofficial extension of ICCCM 2.0 which the freedesktop.org team have developed. Essentially, this implies the use of KDE and GNOME, and allows for their own 'embedded' features to be used with Fvwm if needed, since Fvwm is EWMH-compliant.
But what are EWMHs? They simply allow the interaction between window managers, applications and the utilities that form part of a desktop environment. This was originally written to replace Gnomehints. And as such it has been implemented in GNOME >=2 and KDE >=2
AFAIK, WM* apps are not. Indeed, you can check this for yourself. If you want to know whether an application uses EWMHs then do:
[n6tadam@station n6tadam]$ xprop | grep _NET_WM_STRUT
_NET_WM_STRUT(CARDINAL) = 0, 0, 0, 2
Here, the numbers indicate the screen space that the application in question is using. Thus, you can "filter" out that area of the screen so that an application window doesn't obscure it when maximising it. To achieve that, one can use:
EWMHBaseStructs 0 0 0 2
In their ~/.fvwm2rc file. Why am I telling you this? I don't know really, but it is just useful, since it can also be applied to FvwmButtons.
To go back to your original question though, "hints" are just that -- properties of windows that can be configured or acted upon in some way.
Indeed, You can use a combination of things. It really depends on how you want them gathered. You can define an IconBox for icons minimised, with will place them in a region of the screen.

(?) Also, since I installed SuSE 9 on this laptop (fvwm2 ver 2.5.7), the buttonbar no longer works with swallowed apps. Have you run into any of that? I still haven't visited the

Lately I read the fvwm stuff from issue #3 and discovered a few things that had escaped me, and a few I'd forgotten about, like the ability to drag windows between VD's via the pager.

(!) [Thomas] FvwmPager can do more than you probablu realise. As you say, you can drag windows to other VD's and pages without even seeing the window directly.

(?) Also, from what I could gather by reading the fvwm man pages, it seemed to me that they state that buttons in the buttonbar are pretty limited in functionality, (e.g., toggled state like coolmail). I hope I'm simply misunderstanding the issue, and that it is possible to put a fairly complex applet like wmmount inside of the buttonbar.

(!) [Thomas] But of course! One can quite literally do anything with fvwm. Ironically, what lets it down is the sheer volume of all the possible things it can do.
As an example, if you wanted to have wmmount swallowed by FvwmButtons, and then issue a command to it such that clicking on it mounted a device, and then umounted it, you can do something like the following, assuming you have the icon/applet swallowed:
AddToFunc ToggleMount
+ None (Mount, CirculateHit) Exec exec xterm -T Mount -n Mount -e mount $0
+ I Iconify
+ I Next (Mount, CirculateHit) Close
+ I Exec exec umount $0
Then from within FvwmButtons:
*FvwmButtons: (Action ToggleMount)
This might be long-winded, and indeed, the facility of wmmount might even provide this mechanism, but it demonstrates what can be done. I should point out that I haven't tested it, but it ought to work.

(?) As old as it is, from my viewpoint, there are still some aspects to fvwm that other wm's never caught up to. IMO, it's a good compromise between lightweight and the heavier DT environs like KDE and Gnome. However, the cfg process is pretty much manual via edit of .fvwm2rc

(!) [Thomas] And I hope it stays manual. There are some 500+ style options for Fvwm. There is no way one can enumerate this for a GUI. You wouldn't be able to convey the options to the user efficiently.
I did look, and even suggest this at one point, but I have come to the arrangement that it really is not a viable thing to do. There is always the dotfile generator, but this is hideously out of date, and I really do not suggest you use it.
John, if you like, upload your ~/.fvwm2rc file (or send it to me via e-mail) and I will have a look at it and fix it for you. I'll also change the syntax to conform to 2.5.X should there be any discrepencies.

(?) Thanks, I'll probably take you up on the offer. I've spent 3 or 4 hours trying different things, without success.

(!) [Thomas] Then I am more than happy to go through it. I'll even throw in some comments and explanations en route. :)
(!) [Thomas] Well unfortunately John never did reply. But seriously, Fvwm is not as cumbersome as it first seems, and if you really don't like MWM (which has been labelled as butt ugly by a certain man wearing Dark Sunglasses.... :) ) then you can see what can be done with a little effort here:
http://www.fvwm.org/screenshots/desktops
(!) [Heather] Ok, I'm late to the thread, but I concur there are some very cool things you can do with this stuff. For a push in the right direction, I'm including my own configuration, which Thomas helped me with, because a lot of the tricks I was using on my own are from Ye Olden Fvwm 1.0 days, and it needed a nice touch-up.
All of these parts go in a .fvwm directory under my home, which happens to be /home/heather. So you'll find yourself going into these files and changing at least that burned in location... unless your username happens to be heather. The dotfile really has to be a dotfile, and take the .txt extension off, of course.
Now for the warning label. I have great color vision and my monitor is really bright, so my config is very dark. If you vision isn't as good as mine, or your monitor isn't as vibrant, consider replacing the darker blue with the rgb.txt named color NavyBlue or MidnightBlie. They just weren't Navy or Midnight enough for me :)
I use a simple starfield background. I actually cooked this one up years ago, back when I still lived fulltime on (gasp!) Windows95. There was this great poster I liked, and I kind of took a look at it then did a starfield of my after the manner of it, except of course mine didn't have any things flying around in front of it like theirs did, and mine tiled in a friendly fashion, and for the sake of memory, didn't have that beautiful range of gradient color. Feel free to go get your own bit of darkness from an astronomy site, if you prefer.

See attached heather.stars16a.xpm

Everything is based around the .fvwm2rc file. In older flavors of fvwm that was expected in your homedir, but now it's expecetd in ~/.fvwm directory instead, to support you having a batch of extra parts.
The sneakiest thing in this is the trick to make the button which invokes sticky status, change appearance permanently for a stuck window, and change back if it's unstuck. My thanks to Thomas for showing me the events interface.

See attached heather.dot.fvwm2rc.txt

I do some seriously strange things with my buttons layout. Seems like every distro I ever looked at has a giant googly pair of Xeyes chasing the cursor around, but I think they need to not be so huge. I do like having a load monitor, but it doesn't look good if it doesn't cover the full height. So some juggling is called for,
The buzzword for making "live" apps like Xeyes and xload stay involved is a swallowed app - it doesn't need to be designed as an applet, it just has to submit safely to having its geometry resized.
I love icons but frankly I can find better things to do with some of my screen estate, so maybe I want a few, but for some common tasks I use smaller icons than others. I like a system load check but not taking too much space, and I really abuse multiple pages, definitely preferring that instead of multiple workspaces (though Fvwm supports those too).
Caveat for those with fancy video cards - you want workspaces (like K desktop favors) or pages (like I do), not bigger virtual screens (controlled in XF86Config-4). Sliding around looking for where the real center of the screen is and wondering where you lost your control corner or iconbox are not the way to spend your workday. My pages have a 2x4 layout, for 8 pages total, and this has generally been plenty for me.

See attached heather.ConfigFvwmButtons.txt

Unless I configure that darn pager explicitly, though, it comes out pasty white. Agggh! My poor vampiric eyeballs. Again, if your color vision likes brighter colors, or you hate purple, pick something brighter from the named colors in rgb.txt. I used here, the "brighter" NavyBlue, because the pages are tiny enough I wanted better contrast. You might want them brighter yet, and make it just plain Blue.
There's a nice app named xcolors that will show all the colors for you, i but you have to launch it with extra window page space already available below ypur active window, because the window is too tall (showing every color takes some space) and it's too stupid to have a scrollbar. There's a gtk app that does a cleaner job of showing the colors but I forget what it's called.

See attached heather.ConfigFvwmPager.txt

The sparkling touch of color on my active window is thanks to me using s few tiny pixmaps instead of MWM-like vector corners. For the inactive window I still use the vectors - they're faster, and they don't look bad (I do wonder if I should do something cuter for sticky, but I've been lazy). I got these from the fvwm95 icons kit, but for sanity and portability, I copied them into .fvwm/icons, a directory.
Sticky means, it will "go" with me. I like that, bad puns in a tiny setting...

See attached icons.mini-go.xpm

Ironically the icon that looks like a box, so is nice for maximize, is named iconify.

See attached icons.mini-iconify.xpm

If it's stuck to the window, it looks vaguely like a 4-color windows icon.

See attached icons.mini-icons.xpm

dot in box for max, dot with no box for iconify.

See attached icons.mini-rball.xpm

X for eXit works for me.

See attached icons.mini-x.xpm

Of course the window controls belong to the window manager, so mentioning that for the menu ocrner...

See attached icons.mini.fvwm.xpm

Last but not least, I have a couple of personal menus. One gives me access to a number of differently colorized Xterms; I use them so much color helps me recall which one's which even when I forget to retitle them.
The other makes it easy to pop up web browsers, since I like to view the world from different angles sometimes. "Netscape" on there is the somewhat ancient Netscape 4.77 -- Netscape 7 and Mozilla don't seem to be good neighbors, they keep stepping on each other's config files. I use NS4 to spot buggy HTML code, because it has just horrid rendering when the code's wrong and it sticks out like a sore thumb. Lynx I just happen to like 'cuz it's speedy.

See attached main-nenu.heather.txt

Did I miss anything? Oh of course. A screen shot It's a bit on the large side, but I told you I had a big monitor. That dark shot of the GIMP is also a goodie of mine, a GTK theme I whipped up for myself which I call DarkGems, because I stole gemlike features from a half dozen E and GTK themes. But this is about Fvwm, not about GTK, so I'll save that for another time.
I also applied a minor hack on fvwm to not stipple my sticky title bars. For most folks I think it'd be more a pain to recompile fvwm just to leave that out, and then want to keep up to date, so I'll leave that out too. It was in icons.c and the borders.c if you feel adventuresome.
Just making your desktop a little more fun ...


This page edited and maintained by the Editors of Linux Gazette
Copyright © its authors, 2004
Published in issue 104 of Linux Gazette July 2004
HTML script maintained by Heather Stern of Starshine Technical Services, http://www.starshine.org/

Published in Issue 104 of Linux Gazette, July 2004

News Bytes

By Michael Conry

News Bytes

Contents:

Selected and formatted by Michael Conry <address>

Submitters, send your News Bytes items in PLAIN TEXT format. Other formats may be rejected without reading. You have been warned! A one- or two-paragraph summary plus URL gets you a better announcement than an entire press release. Submit items to address


Linux Links

The Father of ASCII dies A tribute to Bob Bremer, one of the greats of the computer industry.

The Making of BSD Hacks describes one way to do open source revision control and document creation for book publishing.

relink, a package management tool.

Optimization complexities explored.

Thin GNU/Linux clients find application in libraries.

ACM Queue magazine focuses on open source.

Setting up encrypted partitions under Linux and dm-crypt.

How to talk to Microsoft about Linux

How to do due diligence

Open Source publishing

Embedded Processor and System-on-Chip Quick Reference Guide


News in General


 Sun's Looking Glass

Sun have announced that they are releasing Project Looking Glass, their 3D desktop, under the GPL. This follows the release of JDIC (JDesktop Integration Components) under the LGPL. JDIC allows Java developers to write desktop software, including viewer components, screen savers, and panel applets.


 Real/Helix

Real have anounced that they are adding the GPL as a licencing option for Helix Player, making it fully open source.


Distro News


 Skole

Skolelinux is a distro from Norway aimed to be a counterweight to the dominance of closed-source software in education and government.


 Cobind

OSNews review of the Cobind distribution. This is a Fedora-derived distribution aimed at newcomers to the GNU/Linux scene.


 Debian

It has been reported that the AMD 64 port of Debian is now ready for inclusion in unstable. (courtesy DWN)


Software News


 Snort

O'Reilly has announced the publication of Snort 2.1 Intrusion Detection, Second Edition. This book provides a guide to the use of Snort, and in particular details the new features introduced in version 2.1. A CD-ROM is included containing Snort 2.1 and related utilities.


 Mozilla

The Mozilla Foundation has announced the release of new versions of:


 OpenOffice.org

OpenOffice.org has announced the availability of the new 1.1.2 version of the open source office suite, codenamed Hakone.


Mick is LG's News Bytes Editor.

[Picture] Originally hailing from Ireland, Michael is currently living in Baden, Switzerland. There he works with ABB Corporate Research as a Marie-Curie fellow, developing software for the simulation and design of electrical power-systems equipment.

Before this, Michael worked as a lecturer in the Department of Mechanical Engineering, University College Dublin; the same institution that awarded him his PhD. The topic of this PhD research was the use of Lamb waves in nondestructive testing. GNU/Linux has been very useful in his past work, and Michael has a strong interest in applying free software solutions to other problems in engineering.

Copyright © 2004, Michael Conry. Released under the Open Publication license unless otherwise noted in the body of the article. Linux Gazette is not produced, sponsored, or endorsed by its prior host, SSC, Inc.

Published in Issue 104 of Linux Gazette, July 2004

Using Windows Keyboard Media Buttons In Linux

By Tom Brown

A lot of people making the move from Windows to Linux have a Windows keyboard with extra buttons along the top. Some of these buttons control the browser, while others control audio/video playback. As many have already discovered, these buttons don't work in Linux. At least, they don't by default.

The problem with these buttons is that, while they communicate with the computer via keycodes like the regular keys, these codes aren't standard ASCII. For example, the Microsoft Natural Keyboard Pro uses two keycodes for each button press. The first code is a flag to indicate that the next one will identify which button was pressed.

The process I'm going to describe is taken from KDE version 3.2. Versions prior to that lack the interface to KHotKeys that the latest one has.

Identify Your Keyboard to KDE

The first step is to make sure your keyboard is properly identified to KDE. Go to the KDE Control Center - you'll find it listed in the "KMenu" (click the icon where the "start" button would be in Windows). Once the Control Center is up and running, click the "Regional & Accessibility" (or similar - it may be called "Accessibility" in other Linux distributions - Mandrake, for example) icon in the left-hand panel, the contents of which will change. From this new list, select "Keyboard Layout". Now on the right-hand panel, go to the "Layout" tab, and make sure the "Enable keyboard layouts" check box is checked. Pull-down the "Keyboard model" combo list box, and select your keyboard. It may originally say something like "Generic 101-key PC". You'll find a lot of keyboards listed, from a lot of manufacturers, so hopefully yours will be in there. In my case, I selected "Microsoft Natural Keyboard Pro / Microsoft Internet Keyboard Pro".

Now comes the fun part. With your keyboard properly identified, KDE will now recognize those extra keyboard buttons when you press them. All you have to do is tell it how to translate them into the proper action. The technique I'm going to show you involves a KDE program called "KHotKeys". Some people recommend that an action like changing the audio volume is more properly done using the program "KMix" (a sound mixer). Unfortunately, this didn't work in my case. Every time I raised and lowered the master volume in KMix, instead of controlling the volume on my Sound Blaster Live card, it made funky changes to the tone. YMMV. If KMix works fine for you, then use it for volume control. The other reason I did it my way, and ignored those recommendations, is that I wanted all of my changes in one place.

KHotKeys

You currently have "Keyboard Layout" selected in the KDE Control Center list on the left-hand side of the screen. Move the mouse to "KHotKeys" at the bottom of the list. If this isn't anywhere in the list, make sure you are using KDE 3.2 or later (the version of KDE you're running will appear in the right-hand panel of the Control Center when you first open it up). Click on "KHotKeys", and the right-hand panel will contain the KHotKeys configuration screen.

KHotKeys is a powerful program that allows you to define actions corresponding to certain keystrokes. It also allows you to assign actions to mouse gestures. We're interested, however, in how to assign an action to a keypress - and, by extension, to the press of one of those media buttons.

Running a Program

We'll do something simple first. Many keyboards have a button marked "Mail". We're going to define an action for that button so that it launches Mozilla's email module. First, click the button marked "New Action" at the bottom of the config screen. Under "Action Name" in the "General" tab, replace "New Action" with something easy to remember, like "Mail". Pull-down the "Action Type" list box, and select "Keyboard Shortcut -> Command/URL (simple)". Make sure the "Disable" checkbox is empty. Enter anything you want in the "Comment" box. Go to the "Keyboard Shortcut" tab, and click the mouse in the tab's only button. You'll see a dialog box. Press the "Mail" button on the keyboard, and the dialog box goes away. With my keyboard, this results in the button displaying "XF86Mail". Go to the "Command/URL Settings" tab. Enter the command line to be executed, including the full path, and any arguments. To run the mail module of Mozilla 1.6 on my machine, I used the following command:

/opt/mozilla/run-mozilla.sh /opt/mozilla/mozilla-bin -mail

Depending on what program (or shell script) you're running, the command could be more or less complicated than this. If I just wanted to run the Mozilla browser (for the "Web/Home" button, for instance), I would have used:

/opt/mozilla/mozilla

Using DCOP to Control a Running Program

DCOP, or Desktop Communications Protocol, is a generic way for applications to communicate with one another. You have seen this sort of thing in Windows, which uses a technology called OLE Automation (a part of "COM", or "Common Object Model"). DCOP is the method we will use to send commands to an already-running program.

From the "General" tab of KHotKeys, create a new action, and set the "Action Type" to "Keyboard Shortcut -> DCOP Call (simple)". From the "Keyboard Shortcut" tab, identify the button you want to use, just as you did with the previous example. Next, the "DCOP Call Settings" tab may seem a bit confusing if you've never worked with DCOP before. At the bottom of the tab is a button labeled "Run KDCOP". Kdcop is a GUI application that allows you to browse the callable functions exposed by all running DCOP applications in a standard tree view. Click the button to start kdcop. Start the program you want to control, locate its name in kdcop, and click the plus sign icon next to the name to expand it.

For this example, I'm going to use Jukebox (or "Juk"), an audio player that comes with many Linux distributions. When you expand the entry "juk" in kdcop, you see five entries. For this example, we want the one named "Player". Expanding this "Player" node, we see a long list of supported function calls. Now all we have to do is find the things we want to control. Let's say we want the button to start juk playing music. Scroll down the list until you see "void play()". That looks like programmer stuff, doesn't it? Don't worry, you don't have to know what it all means to make use of it. It's easy.

Copy the top tree entry (in this case, type "juk") into the "Remote application" box. Then, copy the next node entry in the tree (in this case, type "Player") into the "Remote object" box. Finally, copy the command, without the "void", or the parenthesis (in this case, type "play") into the "Called function" box. Note that all of these are case-sensitive.

Both kdcop and the KDE Control Center support drag-and-drop, so you could also click and drag "void play()" to the KHotKeys window, and drop it on any of the edit boxes. This results in "dcop juk Player play " (note the trailing space) being pasted into the edit box. This is an easy way to get the three entries you need for the "DCOP Call Settings" tab. In this example, type "juk" into the "Remote application" box, "Player" into the "Remote object" box, and "play" into the "Called function" box. Now, if you did this the way I did, and dropped everything into "Called function", deleting everything up to the word "play", then you made the same mistake I made as well. For some reason, the system adds a space to the end of the text, so the system looks for a command called "play " instead of "play", and the button won't work. Using drag-and-drop here is more trouble than it's worth, in my opinion. It would be nice if you could just drop the entry onto the tab, and have it populate all the fields for you, but that's not how it works right now.

Translating a Button into a Standard Keypress

If the application you're trying to control doesn't support DCOP, then you have to simulate the pressing of a specific key combination on a button press. For example, if you're using Mozilla 1.6, you can't use the DCOP method to control the browser. Fortunately, you can convert a button into a standard keypress that Mozilla understands. Once you have created a New Action for KHotKeys, select an "Action Type" of "Keyboard Shortcut -> Keyboard Input (simple)" from the pull-down list box in the "General" tab. From the "Keyboard Shortcut" tab, identify the button you want to use, just as you did with the examples above. On the "Keyboard Input Settings" tab, enter the keystrokes you want the button translated to. Special keys have to be spelled out. For example, to display your Home Page in Mozilla 1.6, you hold down the "Alt" key, while pressing the "Home" key. You type this into the "Keyboard input" field as (without the quotation marks, and without any spaces): "Alt+Home". Warning: this button-to-key translation doesn't care what application you're in. Think about what you're doing before you assign the keyboard input to avoid unexpected results. Note that this isn't limited to one keystroke. You could use "Hello World" if you wanted to.


[BIO] Tom has been a software developer since the early days of the Commodore 64, with such commercial classics as Prototerm-64 and Colorez-128, and has seen lots of operating systems come and go. Every one he's liked is either discontinued (OS/2) or out of business (Commodore Amiga). He currently likes Red Hat Linux, which won't be supported after April '04. As a result, we've been trying to get him to fall in love with Windows, but so far no luck.

Copyright © 2004, Tom Brown. Released under the Open Publication license unless otherwise noted in the body of the article. Linux Gazette is not produced, sponsored, or endorsed by its prior host, SSC, Inc.

Published in Issue 104 of Linux Gazette, July 2004

How To Make a StereoGram with GIMP, Blender and StereoGraph

By Kapil Hari Paranjape

1. Introduction

PIC
Do you see what I see?

Single Image Stereograms (SIS) are two-dimensional images that seem to be three-dimensional; these 3-d images appear to "pop up" (or "pop down") out of the printed paper. The amount of training the typical human nervous system requires to see such images seems to vary from person t