The problem with Java is that its GUI toolkit is slow.
Oh, I see... could that possibly be because it's written in Java?;)
Actually, I kind of agree with you, in that I think Java is usually "fast enough". However, I have never ever seen any real-world examples where Java is faster than C. I can't recall ever seeing any actual proof of JIT run-time optimizations which are better than can be generated with a "static native" compiler w/profiling (except in artificial settings where you can obviously just select your benchmarks to give the results you want). If you know about any such examples, I would love to see them.
One can, of course, theorize that e.g. branch prediction can be done better by a JIT than at compile time (which is certainly true in theory), but I really don't think it's that much of an issue since the processors are already so good at branch prediction themselves.
declarations and definitions in separate files. This is an aid to the compiler, not the person;
Wrong. Compilers do not need separate interface definitions. They might just as well use the source files and find all the definitions there.
There is actually a very good (programmer-centric) reason for doing having separate interface/implementation: If you want to remain completely (binary or source) interface-compatible you just lock down the interface file. If the language is strongly typed and pedantic about matching type/function/value definitions exactly it will complain if you accidentally change the declaration of a function (this is particularly easy to do accidentally in type-inferenced languages like ML). Thus, you can ensure interface compatibility in this very simple way.
(Of course, in C/C++ this is not nearly that useful because compilers usually don't actually check any of this. But it works very well).
It's 65dBa at 500 feet. Since loudness decreases/increases quadratically (which I think it does, not 100% sure though) with distance it would be much louder when you're closer to the vehicle.
If an accident happened and the laws did change, would not the owners of the patents be looking for damages against the government? Or can the US government simply say 'we changed the rules, and you are out of luck'?
I don't think you can sue the government for damages based on any particular law they pass. I think the best you can hope for is to get the law repealed if it is deemed unconstitutional by the Supreme Court (if they even decide to hear the case).
IANAL, however, so take this with a metric ton of salt.
I don't think your "DRM virus" would be protected under the DMCA since the spreading of the "virus" would probably break other laws
I'm not 100% sure, but I believe the "he was breaking the law [spreading the virus], so I'm allowed to break the law [decrypting the virus]" defense is invalid. That doesn't mean that original virus spreader is not a criminal, though. It just means that the antivirus people also become criminals. (There might be a specific exemption for this in the DMCA though. Don't know it all that well since I live on the other side of the pond).
Also note, that there are other ways to represent ("store") iteration, for instance it is very common in FP to use tail recursive functions to represent iterations. Note that this works quite well in the absence of assignment (and runs just as fast if you have a language/compiler which can optimize tail recursive calls). There is no need for an "assignment" operation until you look at the assembly/hardware level.
I am well aware that there is a mathematical difference between infinity and "arbitrarily large" (and indeed diffent variations on infinty itself, such as countably infinite, uncountably infinite, etc.), but the difference is irrelevant wrt. tape size in the context of TMs.
Note that in the original post, "arbitrarily large" included being able to modify the tape size at run-time.
The mathematical difference is irrelevant wrt. TM tape size, because if you just always have the tape size increase dynamically to accomodate the read head position then the arbitrarily large tape is indistinguishable from an infinite tape (from the POV of the TM). Also, no computation that ever terminates can possibly require the use of infinite (note: not just arbitrarily large) amounts of tape. (I would do a rigorous proof that they are equivalent, but frankly I can't be assed right now.:))
Now, whether or not the universe is finite in storage capacity is a question that I don't think we can answer.
Well, I certainly can't answer it, but I think most physicists believe that the amount of energy in the universe is fixed and that the lifetime of the universite is finite. That would imply that there is only such much information that one can ever hope to store (simply because of time/energy contstraints).
Just to add a bit to the other replies: Flash also has a very low limit on the number of total writes to any particular "cell" before that cell "dies". (IIRC it was something like 100.000, but at any rate, it was low).
You can get around this by using alternative types of file systems which spread the writes evenly across the drive (I suppose a log-based file system would be close to ideal), but even so this is a serious limitation.
Since they're battery backed, you could also just have a RAID of SSDs. That should lower the likelihood of failure to tolerable (i.e. "not gonna happen") levels.
especially in databases where the data set that you have to sort is often so big that it doesn't fit into memory. The (usual) solution is to use a variation on the well-known Merge Sort algorithm, where blocks are merged into larger and larger "runs" of sorted data (which are then merged). (The number of runs of course depends on how much data there is and how much memory you have).
There is no difference between inifite tape and arbitrary amounts of tape (i.e. "you can get arbitrarily much more tape if you just ask nicely"), at least for a Turhing machine. Internet notwithstanding, computers cannot ever obtain arbitrary amounts of memory, they are limited by the amount of possible information storage capacity of the universe (with is AFAAK bounded).
Concepts like the Mandelbrot fractal absolutely require this form of manipulation.
The concept of a Mandelbrot fractal requires nothing of the sort. It's just a variation of function composition: f(f(f(...))), where, instead of asking the obvious question, "what is the result", you ask the question "how many times you have to apply f until the result goes out of bounds?". The fact that someone chooses to implement that using iteration and assignment is irrelevant to the underlying mathematical structure. You can, in general, view assignment as function application (that's sort of what functional programming languages do).
You have to work much, much harder in C++ to get anywhere near FORTRAN performance, so much so that it's almost never worth the effort.
One of the most dangerous things (optimization-wise) in C++, I've found is the temporary-creation problem. You have to be insanely careful to avoid creating temporaries to get any sort of reasonable performance... (or maybe I just need a better compiler than GNU GCC?)
Templates powerful and dangerous.
Not quite sure why you would consider them dangerous, but they are Turing Complete (i.e. they are a compile-time language all of their own). Which some people have used to create this. It looks almost as fast as Fortran, but the syntax is a lot more complex than just A*B for a matrix-multiplication.
As far as Heisenburg's uncertainty theorem and quantum mechanics goes, it can be inserted into the simulator using rand().
rand() is not truly random like quantum events are. Further, such a function cannot be constructed without going back to some truly random events, i.e. quantum events. Which means that you cannot simulate rand() -- you have to have a connection to the most "basic" level of reality.
No, he isn't. To be able to use ssh/sftp all users need to have a shell account on the server(*). Thus, ssh/sftp cannot replace anonymous FTP.
(*) Though, I suppose one could have a "guest/guest" account which could not execute any commands. Still seems a bit dangerous to me if you only ever want to serve files anonymously.
Oh, and as to "limited storage": If he installed it in the first place there just may have been enough storage to have it installed, dontchathink? Besides, I think the limited storage argument only applies to embedded systems (or "appliance" systems).
If ncurses doesn't work, and bash depends on ncurses wouldn't bash not work?
The double negative aside: If bash depends on ncurses, then bash would not work without ncurses installed. That's the whole point of having (listed) dependencies! If the dependency is more "soft" (i.e. the software can run without ncurses present, but can also take advantage of ncurses if present), then the Debian people usually just have it as a "suggested" dependency. I'm not saying that the Debian folks don't make dependency mistakes, but touting that as some huge shortcoming of apt (and its lik) is disingenious.
Dual license means that people get to choose which license they get (all of) the code under, license A or license B. (This is what Trolltech have done with QT, you can choose between the GPL or a commercial license).
Wrt. the Win2K source code: If the Win2K source code were dual-licensed with one license being GPL, then, sure, you could take that code and start a new GPL project from it. However, it isn't/wasn't, therefore you would be infringing on Microsofts copyright to that code by distributing it (or derivative works!).
It should also be noted that only the copyright holders of the code can release it under any given license; it doesn't count if someone takes the stolen Win2K code and just slaps the GPL in at the top of each file.
Oh, I see... could that possibly be because it's written in Java?
Actually, I kind of agree with you, in that I think Java is usually "fast enough". However, I have never ever seen any real-world examples where Java is faster than C. I can't recall ever seeing any actual proof of JIT run-time optimizations which are better than can be generated with a "static native" compiler w/profiling (except in artificial settings where you can obviously just select your benchmarks to give the results you want). If you know about any such examples, I would love to see them.
One can, of course, theorize that e.g. branch prediction can be done better by a JIT than at compile time (which is certainly true in theory), but I really don't think it's that much of an issue since the processors are already so good at branch prediction themselves.
Wrong. Compilers do not need separate interface definitions. They might just as well use the source files and find all the definitions there.
There is actually a very good (programmer-centric) reason for doing having separate interface/implementation: If you want to remain completely (binary or source) interface-compatible you just lock down the interface file. If the language is strongly typed and pedantic about matching type/function/value definitions exactly it will complain if you accidentally change the declaration of a function (this is particularly easy to do accidentally in type-inferenced languages like ML). Thus, you can ensure interface compatibility in this very simple way.
(Of course, in C/C++ this is not nearly that useful because compilers usually don't actually check any of this. But it works very well).
It's 65dBa at 500 feet. Since loudness decreases/increases quadratically (which I think it does, not 100% sure though) with distance it would be much louder when you're closer to the vehicle.
I don't think you can sue the government for damages based on any particular law they pass. I think the best you can hope for is to get the law repealed if it is deemed unconstitutional by the Supreme Court (if they even decide to hear the case).
IANAL, however, so take this with a metric ton of salt.
just defensive, then why don't they just publish the "invention" and say "This invention is in the public domain"?
Guess it just goes to show that Microsoft believe in the "just repeat it often enough and it becomes true" principle(*).
NO! You must always Duck and Cover(TM) when you see the flash!
Freudian slip?
I'm not 100% sure, but I believe the "he was breaking the law [spreading the virus], so I'm allowed to break the law [decrypting the virus]" defense is invalid. That doesn't mean that original virus spreader is not a criminal, though. It just means that the antivirus people also become criminals. (There might be a specific exemption for this in the DMCA though. Don't know it all that well since I live on the other side of the pond).
to what I said.
Also note, that there are other ways to represent ("store") iteration, for instance it is very common in FP to use tail recursive functions to represent iterations. Note that this works quite well in the absence of assignment (and runs just as fast if you have a language/compiler which can optimize tail recursive calls). There is no need for an "assignment" operation until you look at the assembly/hardware level.
Note that in the original post, "arbitrarily large" included being able to modify the tape size at run-time.
The mathematical difference is irrelevant wrt. TM tape size, because if you just always have the tape size increase dynamically to accomodate the read head position then the arbitrarily large tape is indistinguishable from an infinite tape (from the POV of the TM). Also, no computation that ever terminates can possibly require the use of infinite (note: not just arbitrarily large) amounts of tape. (I would do a rigorous proof that they are equivalent, but frankly I can't be assed right now.
Well, I certainly can't answer it, but I think most physicists believe that the amount of energy in the universe is fixed and that the lifetime of the universite is finite. That would imply that there is only such much information that one can ever hope to store (simply because of time/energy contstraints).
Just to add a bit to the other replies: Flash also has a very low limit on the number of total writes to any particular "cell" before that cell "dies". (IIRC it was something like 100.000, but at any rate, it was low).
You can get around this by using alternative types of file systems which spread the writes evenly across the drive (I suppose a log-based file system would be close to ideal), but even so this is a serious limitation.
Since they're battery backed, you could also just have a RAID of SSDs. That should lower the likelihood of failure to tolerable (i.e. "not gonna happen") levels.
especially in databases where the data set that you have to sort is often so big that it doesn't fit into memory. The (usual) solution is to use a variation on the well-known Merge Sort algorithm, where blocks are merged into larger and larger "runs" of sorted data (which are then merged). (The number of runs of course depends on how much data there is and how much memory you have).
There is no difference between inifite tape and arbitrary amounts of tape (i.e. "you can get arbitrarily much more tape if you just ask nicely"), at least for a Turhing machine. Internet notwithstanding, computers cannot ever obtain arbitrary amounts of memory, they are limited by the amount of possible information storage capacity of the universe (with is AFAAK bounded).
The concept of a Mandelbrot fractal requires nothing of the sort. It's just a variation of function composition: f(f(f(...))), where, instead of asking the obvious question, "what is the result", you ask the question "how many times you have to apply f until the result goes out of bounds?". The fact that someone chooses to implement that using iteration and assignment is irrelevant to the underlying mathematical structure. You can, in general, view assignment as function application (that's sort of what functional programming languages do).
One of the most dangerous things (optimization-wise) in C++, I've found is the temporary-creation problem. You have to be insanely careful to avoid creating temporaries to get any sort of reasonable performance... (or maybe I just need a better compiler than GNU GCC?)
Not quite sure why you would consider them dangerous, but they are Turing Complete (i.e. they are a compile-time language all of their own). Which some people have used to create this. It looks almost as fast as Fortran, but the syntax is a lot more complex than just A*B for a matrix-multiplication.
if the program contains lots of strings with embedded spaces. :)
(Well, probably not measurably faster, but you could probably shave a few bytes off the executable... depending on padding and such)
with the kind of growth the spammers are promising it might even be a GIRL with a huge fucking johnson.
rand() is not truly random like quantum events are. Further, such a function cannot be constructed without going back to some truly random events, i.e. quantum events. Which means that you cannot simulate rand() -- you have to have a connection to the most "basic" level of reality.
No, he isn't. To be able to use ssh/sftp all users need to have a shell account on the server(*). Thus, ssh/sftp cannot replace anonymous FTP.
(*) Though, I suppose one could have a "guest/guest" account which could not execute any commands. Still seems a bit dangerous to me if you only ever want to serve files anonymously.
almost as good as free(*) money.
(*) If you feel an urge to point out that it isn't really free, please don't. We already know.
Oh, and as to "limited storage": If he installed it in the first place there just may have been enough storage to have it installed, dontchathink? Besides, I think the limited storage argument only applies to embedded systems (or "appliance" systems).
The double negative aside: If bash depends on ncurses, then bash would not work without ncurses installed. That's the whole point of having (listed) dependencies! If the dependency is more "soft" (i.e. the software can run without ncurses present, but can also take advantage of ncurses if present), then the Debian people usually just have it as a "suggested" dependency. I'm not saying that the Debian folks don't make dependency mistakes, but touting that as some huge shortcoming of apt (and its lik) is disingenious.
So there.
First: Why do you think you need to uninstall ncurses?
Second: Bash and other critical things may depend on ncurses to function. Deal with it.
Dual license means that people get to choose which license they get (all of) the code under, license A or license B. (This is what Trolltech have done with QT, you can choose between the GPL or a commercial license).
Wrt. the Win2K source code: If the Win2K source code were dual-licensed with one license being GPL, then, sure, you could take that code and start a new GPL project from it. However, it isn't/wasn't, therefore you would be infringing on Microsofts copyright to that code by distributing it (or derivative works!).
It should also be noted that only the copyright holders of the code can release it under any given license; it doesn't count if someone takes the stolen Win2K code and just slaps the GPL in at the top of each file.