I'd pay 3x as much for the same drive if it gave me the peace of mind of *not failing*.
Er, you can just buy two disks and software RAID-1 (mirror) them. If one of the disks fails, the system _should_ seamlessly move to using the other; with crappy IDE controllers, it might not, but at the worst you just need to replace the bad disk and reboot.
I know you _can_ set it up if you know how but I was wondering if there is any plug-and-play solution. Like how Beowulf clusters used to involve some manual setting up until Red Hat with their 'Extreme Linux' product made it as easy as sticking in a CD.
I agree that floppies suck, but as boot media they're just about acceptable. I mean, if the floppy drive does fail the worst that can happen is the machine fails to boot - you don't lose any data. But the ideal is to have neither floppy nor CD but a bootable network card.
NFS is certainly possible, but it is slow. The network block device sounds like it could give far better performance, although with a bit more setting up (you need to make/usr read-only and have a ramdisk or perhaps a separate block device for the other things).
I was thinking about doing without a hard disk and just booting from a Knoppix CD. All my interesting data is over the network anyway - all a hard disk would be used for is to install software, which Knoppix makes obsolete, and to store temporary files, which can be done in a ramdisk at today's memory prices. The only trouble is finding a suitably huge Knoppix or equivalent (perhaps on DVD rather than CD) that comes with everything you'd ever want to run.
Alternatively if you have several networked PCs you could probably use Linux's network block device to share a single, read-only/usr/ filesystem between all of them. This should be a lot faster than NFS because it is shared at the disk block level and can be cached with normal disk cache on each PC (because read-only). With a modern Ethernet card and a fast (full of RAM) fileserver, it wouldn't be much slower than local disk. And if it is too slow, just throw in another gig of RAM with some of the money you saved not buying hard disks. The biggest advantage of doing this is that RAM doesn't fail nearly as often as hard disks, and it doesn't make annoying spinning noises.
(Users' home directories, of course, are mounted read-write using NFS or other network filesystem.)
I wonder if there is a Linux distribution where you stick in a boot floppy, have the workstation contact a server to mount the network block device and boot up automatically (setting up a ramdisk for/var and/tmp). Or even eliminate the boot floppy and use network booting. This would be a seriously easy way to deploy Linux in an organization - no need to repartition the disk or install anything. It would also be a big cost saving for new hardware (no need for a floppy drive, hard disk, or CD player - just a network card with boot ROM). Beowulf clusters have been doing this sort of thing for ages, it's time the desktop did so too.
I think the root of the problem is that RMS considers copyright restrictions on opinion writings or on other personal statements to be acceptable, although he doesn't think copyright is appropriate for software. Whereas Debian is applying the same 'free software' principles to the whole of their distribution.
The Debian Free Software Guidelines started out as a codification of the idea of 'free software' as promoted by the FSF. If the FSF thinks that GFDL-licensed documentation is free, perhaps the DFSGs should be updated to reflect that.
From a technical interest point of view, it can be most interesting to compare with another chip of the same clock speed, because then you can see things like how much work gets done per clock cycle.
It's more important for reviews to focus on the advantages and disadvantages of a whole family of chips rather than on one particular model clocked at one particular speed. This is particularly important when the product hasn't even been released yet. A chip family like the Pentium 4 or the Althon 64 may last for several years with minor changes, while price points and clock speeds are altered all the time.
Do you think that a new review should be written every time AMD's or Intel's marketing department decides to alter the wholesale price for a particular clock speed?
Instead, many reviews try to compare like with like between two CPU families, so that even when the relative prices have changed a buyer can still use the information to compare whatever the current alternatives are.
Lastly, we don't even know what price the Althon 64 will be marketed at. How can they possibly test work per dollar?
You need to store the picture electronically on the card - then a card reader (a handheld computer, POS system or whatever) will display it on screen. All the data on the card is digitally signed by the guvmint. Then unless you know the private key it should be pretty impossible to forge ID cards.
Ideally, there shouldn't be any information on the card which is not digitally signed - so it should just be a smooth piece of plastic with 'id card' on it. OK, maybe it would have some picture or cartoon of a bunny or mushroom or other abstract thing so that you could recognize your id card if you lost it - but it shouldn't have your name or address printed on the outside, because such information is liable to forgery.
Of course France is a member, that's why we have the awkward acronyms like 'UTC' which are halfway between French and English. (coordinated universal time versus temps universel coordonné)
Still, given that every message sent by PayPal has a big banner at the bottom saying 'do not use any URL not beginning with https://www.paypal.com/', I'm not inclined to trust the x.com address even if it does come with an explanation on Slashdot and a plausible-looking whois record.
You don't need to hire a person (a 'saboteur') especially to test your employees' resistance to social engineering. Instead, have a policy that whenever IT staff are contacted for anything, the first question they ask is 'what is your password'. If you tell them - bzzt, wrong, you should never tell your password to anyone, please change it and then try again with your support request.
This would probably make the whole company immune to that particular form of social engineering within a short while. The problem is, it would piss off the users and could be dangerous if the particular stupid user you catch out is the chief executive.
I guess Red Hat thought that Wine wasn't important enough to bother including a compatibility library. Which is reasonable since it is still prerelease software anyway and Red Hat has never marketed their distro as being able to run Windows apps.
Wine was probably removed from Red Hat 9 because it is incompatible with the new threading library (NPTL or whatever it's called). The Wine people have now come up with a workaround, but a real 'port' to the new thread system isn't done yet.
Enlightenment can do semi-transparent windows while dragging - this was available as an option in the Red Hat 6.0 desktop. But I think it was done in software.
I was thinking if you == retailer. The retailer might not be free to determine the price he sells at. If you want to ensure that the retailer is free to choose his own price according to consumer demand and competition, you may have to prevent the manufacturer from imposing conditions on retailers.
I was thinking particularly of the old Net Books Agreement in the United Kingdom whereby publishers would set a price for booksellers. The excuse was that it preserved the smaller bookshops who couldn't compete in a free market. But the agreement was contrary to some competition law (an EC treaty provision, I think).
BTW the two things you asserted, 'you are allowed to determine what distribution methods you use' and 'you are free to determine the price you sell your product at', are contradictory. If the manufacturer can impose arbitrary conditions on resellers, then those resellers are not free to choose what price they sell at. They may have to comply with a minimum price set by the manufacturer.
Are you sure they have the 'right' to do it? In many countries policies like this (limiting resale to certain outlets, setting a minimum price, etc) are considered anticompetitive and subject to investigation if the company concerned has a large market share.
Thank you for your response and to the several others who also replied. I've chosen to reply to yours since it seems the most detailed.
Exception handling to break out of a loop - hmm, yes, I hadn't thought about that. It does seem a bit OTT to raise and catch an exception just for that - a whole 'try/except' block when a simple 'continue LABEL' would have sufficed - but whatever.
OK, I think I understand what is happening with strings. If they are immutable then there is no way to implement a function like Perl's chomp() which modifies the string passed in. This is not necessarily a bad thing. But still I would like to pass a reference to a variable somehow, for example saying 'please leave the result in this variable'. That can be done with a reference to the string itself, in a language where strings are mutable, or it can be done with a symbolic reference to the variable name (cf 'set' in Tcl and Perl's typeglobs). It doesn't seem that Python has either of these. I guess the way to have a string 'modified' in a function call is the same in Python as in Java - stick it into a one-element array and pass that.
I have written some code with nested function definitions, to work around the deficiencies of 'lambda' as you describe. But they didn't work as I expected. For example
def f():
x = 50
def g():
x = 40
g()
print x f()
This prints '50', showing that g() cannot access the variable in its enclosing scope. It's not a closure in the true sense. The only way I could find to make this work was to resort to global variables - gah!
(FWIW the version of Basic I used did allow arbitrary expressions inside a DEF FN... I've never really liked the dogma that you cannot both return a value and cause a side effect.)
I've been using Python for a few months now. I hope people won't mind if I post a shopping list of what seem to be missing features in the language, and ask if there is a way round them.
- Python has 'break' and 'continue' like C. But these only affect the innermost loop. Is there a way to break out of an enclosing loop? (In Perl you can label a loop and then say 'next LABEL', etc.)
- Failing that, is there a way to get goto statements in Python? They can sometimes be an elegant way to express something, contrary to popular myth. (Eg tail recursion.)
- How can I pass a variable by reference? For example, to take a reference to a string, pass it to a function and have that function modify the string passed in. More generally, is there a way to store references?
- Python advertises its support for first-class functions, but I can't seem to get closures to work. The 'lambda' keyword won't accept assignment or even sequencing inside the function body. So anonymous functions you might want to pass around can't do much beyond trivial operations. You can get around this to some extent by making named functions in every case and passing those around, but even then they don't seem to act properly as closures, picking up variables from their local scope. (I'm using Python 2.2.1 BTW.)
- Is there a do/while statement in Python? Plain 'while' is there but occasionally an 'at least once' loop is what you need. Is there an addon package or library for Python that provides a 'do' construct?
As you may have guessed, these are the things I really miss in going from Perl to Python. The cleaner syntax isn't a big enough payoff for going without some fairly important language features. The project Vyper sounded very promising in its attempt to add real lexical scoping and functional programming features to Python, but it doesn't seem to be active any longer. A real pity. In the meantime, where I have a choice, I'll keep using Perl, despite its syntactic oddities and historical baggage.
Sourceforge has special CVS-ssh servers where the only command you can run on the remote end is 'cvs'. So short of an exploit in that program, you don't have general shell access. It would be possible for NetBSD to do the same I suppose.
Wouldn't most of the book apply to Apache on any platform? (In particular, Apache on Windows, provided mod_perl has been ported to Windows.) So perhaps it was not necessary to mention the operating system at all.
Instructions about 'how to build the Apache source code' are OS-specific, but it probably makes more sense to write a book assuming that Apache is already installed, since the procedure for installing it varies so much (rpm/deb/binary tgz/build-from-source/GNU stow/Windows installer/etc).
It sounds like the mknod problem could be solved with something like devfs. If devices always live in/dev/ and new device nodes cannot be created from userspace, then a chrooted environment really does restrict what devices you can access.
I'm not familar with raw I/O - does this need a device file to open() first or do you specify the major and minor device numbers as part of the system call in some evil way?
Re:How is it a Linux Review without the Distro?
on
Linux SMP Round-Up
·
· Score: 1
If they include a kernel compile benchmark, they should try with different levels of -j. -j 2 will run two jobs at once, but perhaps higher levels would give slightly better performance since one those two jobs will be blocked on disk access some of the time.
Is there a standard benchmark suite for Linux that includes kernel compiles as well as some synthetic tests?
In your minitower you could fit two thin 2.5inch disks in a single 3.5inch half-height bay. I agree there's not much you can do for the laptop though.
Er, you can just buy two disks and software RAID-1 (mirror) them. If one of the disks fails, the system _should_ seamlessly move to using the other; with crappy IDE controllers, it might not, but at the worst you just need to replace the bad disk and reboot.
I know you _can_ set it up if you know how but I was wondering if there is any plug-and-play solution. Like how Beowulf clusters used to involve some manual setting up until Red Hat with their 'Extreme Linux' product made it as easy as sticking in a CD.
/usr read-only and have a ramdisk or perhaps a separate block device for the other things).
I agree that floppies suck, but as boot media they're just about acceptable. I mean, if the floppy drive does fail the worst that can happen is the machine fails to boot - you don't lose any data. But the ideal is to have neither floppy nor CD but a bootable network card.
NFS is certainly possible, but it is slow. The network block device sounds like it could give far better performance, although with a bit more setting up (you need to make
I was thinking about doing without a hard disk and just booting from a Knoppix CD. All my interesting data is over the network anyway - all a hard disk would be used for is to install software, which Knoppix makes obsolete, and to store temporary files, which can be done in a ramdisk at today's memory prices. The only trouble is finding a suitably huge Knoppix or equivalent (perhaps on DVD rather than CD) that comes with everything you'd ever want to run.
/usr/ filesystem between all of them. This should be a lot faster than NFS because it is shared at the disk block level and can be cached with normal disk cache on each PC (because read-only). With a modern Ethernet card and a fast (full of RAM) fileserver, it wouldn't be much slower than local disk. And if it is too slow, just throw in another gig of RAM with some of the money you saved not buying hard disks. The biggest advantage of doing this is that RAM doesn't fail nearly as often as hard disks, and it doesn't make annoying spinning noises.
/var and /tmp). Or even eliminate the boot floppy and use network booting. This would be a seriously easy way to deploy Linux in an organization - no need to repartition the disk or install anything. It would also be a big cost saving for new hardware (no need for a floppy drive, hard disk, or CD player - just a network card with boot ROM). Beowulf clusters have been doing this sort of thing for ages, it's time the desktop did so too.
Alternatively if you have several networked PCs you could probably use Linux's network block device to share a single, read-only
(Users' home directories, of course, are mounted read-write using NFS or other network filesystem.)
I wonder if there is a Linux distribution where you stick in a boot floppy, have the workstation contact a server to mount the network block device and boot up automatically (setting up a ramdisk for
I think the root of the problem is that RMS considers copyright restrictions on opinion writings or on other personal statements to be acceptable, although he doesn't think copyright is appropriate for software. Whereas Debian is applying the same 'free software' principles to the whole of their distribution.
The Debian Free Software Guidelines started out as a codification of the idea of 'free software' as promoted by the FSF. If the FSF thinks that GFDL-licensed documentation is free, perhaps the DFSGs should be updated to reflect that.
From a technical interest point of view, it can be most interesting to compare with another chip of the same clock speed, because then you can see things like how much work gets done per clock cycle.
It's more important for reviews to focus on the advantages and disadvantages of a whole family of chips rather than on one particular model clocked at one particular speed. This is particularly important when the product hasn't even been released yet. A chip family like the Pentium 4 or the Althon 64 may last for several years with minor changes, while price points and clock speeds are altered all the time.
Do you think that a new review should be written every time AMD's or Intel's marketing department decides to alter the wholesale price for a particular clock speed?
Instead, many reviews try to compare like with like between two CPU families, so that even when the relative prices have changed a buyer can still use the information to compare whatever the current alternatives are.
Lastly, we don't even know what price the Althon 64 will be marketed at. How can they possibly test work per dollar?
You need to store the picture electronically on the card - then a card reader (a handheld computer, POS system or whatever) will display it on screen. All the data on the card is digitally signed by the guvmint. Then unless you know the private key it should be pretty impossible to forge ID cards.
Ideally, there shouldn't be any information on the card which is not digitally signed - so it should just be a smooth piece of plastic with 'id card' on it. OK, maybe it would have some picture or cartoon of a bunny or mushroom or other abstract thing so that you could recognize your id card if you lost it - but it shouldn't have your name or address printed on the outside, because such information is liable to forgery.
Of course France is a member, that's why we have the awkward acronyms like 'UTC' which are halfway between French and English. (coordinated universal time versus temps universel coordonné)
Still, given that every message sent by PayPal has a big banner at the bottom saying 'do not use any URL not beginning with https://www.paypal.com/', I'm not inclined to trust the x.com address even if it does come with an explanation on Slashdot and a plausible-looking whois record.
I should add that the correct response by a user, when asked 'tell me your password', is to reply 'Simon didn't say!'.
You don't need to hire a person (a 'saboteur') especially to test your employees' resistance to social engineering. Instead, have a policy that whenever IT staff are contacted for anything, the first question they ask is 'what is your password'. If you tell them - bzzt, wrong, you should never tell your password to anyone, please change it and then try again with your support request.
This would probably make the whole company immune to that particular form of social engineering within a short while. The problem is, it would piss off the users and could be dangerous if the particular stupid user you catch out is the chief executive.
I guess Red Hat thought that Wine wasn't important enough to bother including a compatibility library. Which is reasonable since it is still prerelease software anyway and Red Hat has never marketed their distro as being able to run Windows apps.
Wine was probably removed from Red Hat 9 because it is incompatible with the new threading library (NPTL or whatever it's called). The Wine people have now come up with a workaround, but a real 'port' to the new thread system isn't done yet.
Enlightenment can do semi-transparent windows while dragging - this was available as an option in the Red Hat 6.0 desktop. But I think it was done in software.
I was thinking if you == retailer. The retailer might not be free to determine the price he sells at. If you want to ensure that the retailer is free to choose his own price according to consumer demand and competition, you may have to prevent the manufacturer from imposing conditions on retailers.
I was thinking particularly of the old Net Books Agreement in the United Kingdom whereby publishers would set a price for booksellers. The excuse was that it preserved the smaller bookshops who couldn't compete in a free market. But the agreement was contrary to some competition law (an EC treaty provision, I think).
BTW the two things you asserted, 'you are allowed to determine what distribution methods you use' and 'you are free to determine the price you sell your product at', are contradictory. If the manufacturer can impose arbitrary conditions on resellers, then those resellers are not free to choose what price they sell at. They may have to comply with a minimum price set by the manufacturer.
Are you sure they have the 'right' to do it? In many countries policies like this (limiting resale to certain outlets, setting a minimum price, etc) are considered anticompetitive and subject to investigation if the company concerned has a large market share.
Thank you for your response and to the several others who also replied. I've chosen to reply to yours since it seems the most detailed.
Exception handling to break out of a loop - hmm, yes, I hadn't thought about that. It does seem a bit OTT to raise and catch an exception just for that - a whole 'try/except' block when a simple 'continue LABEL' would have sufficed - but whatever.
OK, I think I understand what is happening with strings. If they are immutable then there is no way to implement a function like Perl's chomp() which modifies the string passed in. This is not necessarily a bad thing. But still I would like to pass a reference to a variable somehow, for example saying 'please leave the result in this variable'. That can be done with a reference to the string itself, in a language where strings are mutable, or it can be done with a symbolic reference to the variable name (cf 'set' in Tcl and Perl's typeglobs). It doesn't seem that Python has either of these. I guess the way to have a string 'modified' in a function call is the same in Python as in Java - stick it into a one-element array and pass that.
I have written some code with nested function definitions, to work around the deficiencies of 'lambda' as you describe. But they didn't work as I expected. For example
def f():
x = 50
def g():
x = 40
g()
print x
f()
This prints '50', showing that g() cannot access the variable in its enclosing scope. It's not a closure in the true sense. The only way I could find to make this work was to resort to global variables - gah!
(FWIW the version of Basic I used did allow arbitrary expressions inside a DEF FN... I've never really liked the dogma that you cannot both return a value and cause a side effect.)
I've been using Python for a few months now. I hope people won't mind if I post a shopping list of what seem to be missing features in the language, and ask if there is a way round them.
- Python has 'break' and 'continue' like C. But these only affect the innermost loop. Is there a way to break out of an enclosing loop? (In Perl you can label a loop and then say 'next LABEL', etc.)
- Failing that, is there a way to get goto statements in Python? They can sometimes be an elegant way to express something, contrary to popular myth. (Eg tail recursion.)
- How can I pass a variable by reference? For example, to take a reference to a string, pass it to a function and have that function modify the string passed in. More generally, is there a way to store references?
- Python advertises its support for first-class functions, but I can't seem to get closures to work. The 'lambda' keyword won't accept assignment or even sequencing inside the function body. So anonymous functions you might want to pass around can't do much beyond trivial operations. You can get around this to some extent by making named functions in every case and passing those around, but even then they don't seem to act properly as closures, picking up variables from their local scope. (I'm using Python 2.2.1 BTW.)
- Is there a do/while statement in Python? Plain 'while' is there but occasionally an 'at least once' loop is what you need. Is there an addon package or library for Python that provides a 'do' construct?
As you may have guessed, these are the things I really miss in going from Perl to Python. The cleaner syntax isn't a big enough payoff for going without some fairly important language features. The project Vyper sounded very promising in its attempt to add real lexical scoping and functional programming features to Python, but it doesn't seem to be active any longer. A real pity. In the meantime, where I have a choice, I'll keep using Perl, despite its syntactic oddities and historical baggage.
The day you get 100 'free CDs' every day and have to foot the postage charge yourself, you might have a valid complaint.
Sourceforge has special CVS-ssh servers where the only command you can run on the remote end is 'cvs'. So short of an exploit in that program, you don't have general shell access. It would be possible for NetBSD to do the same I suppose.
Wouldn't most of the book apply to Apache on any platform? (In particular, Apache on Windows, provided mod_perl has been ported to Windows.) So perhaps it was not necessary to mention the operating system at all.
Instructions about 'how to build the Apache source code' are OS-specific, but it probably makes more sense to write a book assuming that Apache is already installed, since the procedure for installing it varies so much (rpm/deb/binary tgz/build-from-source/GNU stow/Windows installer/etc).
It sounds like the mknod problem could be solved with something like devfs. If devices always live in /dev/ and new device nodes cannot be created from userspace, then a chrooted environment really does restrict what devices you can access.
I'm not familar with raw I/O - does this need a device file to open() first or do you specify the major and minor device numbers as part of the system call in some evil way?
If they include a kernel compile benchmark, they should try with different levels of -j. -j 2 will run two jobs at once, but perhaps higher levels would give slightly better performance since one those two jobs will be blocked on disk access some of the time.
Is there a standard benchmark suite for Linux that includes kernel compiles as well as some synthetic tests?