Pixar's animation system and renderer have very different
architectures than your friend's modeller.
Maya, for example, requires that the whole model, in dependency graph form, fits in memory at once. RenderMan does not. Clever occlusion culling in combination with "delayed read archive" geometry mean that only a small amount of the scene is in memory at any given time.
As has been mentioned previously, 64 bit has no advantage.
Yes, they can support less RAM, but they are going from 14 CPUs per box to 2 CPUs per box. Their new farm architecture actually has more RAM per CPU than the old one.
In addition, Itanium performance for CPU-bound applications is bad. No, let's rephrase that: it's shockingly bad. Part of it is that the Itanium's OSes are not yet stable, especially under load. (We've submitted several bug reports for Linux over the course of the last six months.)
Pixar's figure of merit is almost certainly rendering power per dollar of TCO, where the TCO includes network infrastructure, power, space, air conditioning and physical sysadmins.
E10ks are more about high availability than scaling. With
an E10k, you can replace entire boards while the machine is
still running. If that's what you need, Sun may be the way to go for your application.
Pixar's old render farm was based on E4500s, which are about scaling.
[...] and religious organizations continue to receive preferential tax treatments and other "special rights".
While I agree with you on most of your other points, I can't see how this breaks any reasonable definition of not establishing a religion nor prohibiting the free exercise thereof.
A religious organisation is, fundamentally, a non-profit
organisation. Many are also charities. Non-profit organisations (and charities) get preferential tax treatment. Where is the problem here?
Now if you want to see real violation of the separation of church and state, watch for the list of religious organisations which will be labelled "terrorist organisations" under PATRIOT II.
Seriously, with a language like C you can feel like you actually know ALL the rules [...]
The price you pay is that you have to write a lot more rules yourself, which takes a lot of time (and hence money).
The "beasts" as you refer to them (not that I think VB is a
serious development language) do not require you to reinvent
the wheel every time.
Yes, in C you can use libraries, but the more libraries
you use, the more rules you have to know and the less you feel
like you can know them all. Let's face it, programming is a
complex task. Either you get the complexity out of a can or you provide it yourself.
So I guess they're assuming that every single
blank videotape sold is used to pirate movies. Nice.
Have you seen the price of movies on VHS these days? On
those sums, he's assuming that every blank videotape sold is
used to pirate about four movies.
Wait, just kidding. I just totally made up those numbers.
Your figures are at least as good as his. See also Darrel
Huff's magnificent book, How To Lie With Statistics.
It will help you in your career as a lobbyist, at any rate.
You have to have copy prevention mandated by the government sooner or later because otherwise everybody's not playing by the same ground rules. For example, the standards of my cell phone have to be mandated by the FCC because everybody has to operate off the same standards. Also, all railroad tracks in this country are the same standardized width.
It may interest him to know that Australia actually has three
railway track gauges: broad gauge (5'3"), standard gauge (4'8.5")
and narrow gauge (3'6"). This is for historical reasons, mostly.
Most major interstate rail routes now use
standard gauge. However, since metropolitan rail systems do
not need to inter-operate (i.e. a Perth suburban train does not
need to run on Melbourne suburban rails), we get by on three
standards.
It's somewhat similar to how the US digital phone network
used to be. One big problem is that JV wants to make the world
into the way the US digital phone network works now: One
specification for North America (CDMA), another for everywhere
else (GSM). (Yeah, yeah, dual GSM/CDMA phones are just
becoming available. You know what I mean.)
It looks like early days yet. Off the top of my head,
I can think of a couple of areas where this might be very
useful.
In signal processing, remote sensing, image processing
and so on, we want to do "continuous" things to discrete
samples. If we can carry solutions over from the continuous
world, we may get nice algorithms.
There is a deep link between certain kinds of algebra
and formal language theory. A recent discovery is that
formal languages obey the rules of calculus. For
example, DFA construction from a regular expression turns
out to be a Taylor series expansion of the expression. (If
anyone is curious, I can supply the details.)
Perhaps this will motivate someone to bring formal languages
into the picture.
Sorry, kiddies, but when it comes to managing
licenses for that kind of software, Flexlm, for all it's
warts, beats the HELL out of the other license managers out
there.
For the software vendor, maybe. For the sysadmin, it can
easily be a nightmare, especially if you have lots of
individual products all licensed with flexlm.
Spot on with the rest of it, though. The software that
is generally "protected" with flexlm is not the sort of
software that you would want to pirate in the first place.
Besides, it's not the wAr3Z d00d that they need to
protect themselves from, it's the otherwise legitimate
installation with 25 licences who find they need 27 but
don't want to hand over another $40,000.
I'd put it more strongly than that. Reading between the
lines of the paper, don't just fix the warning. Look around
the place where the warning happened. You'll most likely
find a bug.
It's also a call for compilers to generate more warnings,
which can only be a good thing.
How does one get to be on the official list of
objectors? If I can't do it myself, I would appreciate it
if you could consider the following points. You have
probably thought of them already, but still.
I've read the draft proposed bill. What they are
proposing is to introduce a new licence for personal
copying/derivative works/whatever. Distribution, hire,
public performance and so on will still happen as they do,
and purchasing said licence will not allow you to do this.
First point: Given that music CDs and DVDs don't come
with an EULA, isn't this currently legal, and they
just want to make people pay for it? (If it's not currently
legal, it should be. Making
personal copies or derivative works and not giving them to
anyone else is not depriving anyone of a sale.)
The second point is: If the law were to come into effect,
and I could buy a licence to copy some work,
does this or does this not give me the right to obtain a
copy protection circumvention device which would give
me access to that work? Currently this
is illegal under the Copyright Amendment (Digital Agenda)
Act 2000 (aka the Australian DMCA).
That depends what you call a "texture". You can think
of a planar reflection map, for example, as just a texture
in camera space. If it's to reflect very bright lights, it
looks just plain wrong without the extra dynamic range.
I'd rather see it go the other way and have
APRA provide a way for people to pay a levy that allows them
to copy music rather than forcing the people not doing the
copying to do all the extra work.
Of course I was being silly, but my point is that if this
really their intention:
Every kid does it, so let's facilitate some
standards in the marketplace.
...then let's give it a go. Let's see some genuine
proposals for the establishment of reasonable standards to
legally allow CD piracy as a part of the market.
Speaking as ain Australian, I am willing to support the
proposal on three conditions:
People who do not infringe copyright get a rebate.
Independent artists get a cut of the levy.
In return, we get the legal right to pirate CDs and DVDs.
I've never copied a audio CD or DVD in my life. I have
made compilation CDs for two schoolteachers based on CDs
that they own for educational purposes (I believe this is
legal), but I'm willing to try if this becomes law. I
promise to make it fair by adding up the
levies that I have paid on blank CDs and only pirating CDs
worth up to the value of the levy. When I've
effectively paid for a CD, I figure I deserve a copy of
it.
What do you think, APRA?
Incidentally, I'm not quite sure how you calculate what
is a fair levy to pay for losses which are, in the admission
of the CEO of Screenrights, "incalculable". I'd like to see
how they managed to work it out.
And how does it help considering that the
only usable general-purpose language is C?
Most new general-purpose code "out there" is
written in C++, and with good reason.
Really, threads exist for one reason -- because OS developers write shitty schedulers, and because applications programmers don't understand their own data models and write shitty libraries.
You couldn't be more wrong.
Threads exist because simpler solutions are not always
appropriate.
If your code is effectively serialised, it's easier to
write a serial program. If your code is well-partitioned,
it's easier to fork off separate processes. It's those
middle-ground cases for which you need threads. It's no
accident that these also tend to be the hardest cases. As
a result, some people think threads complicate programs,
which they are not unless they are misused.
Rather, threads are used to solve problems
which are complicated to begin with.
Pipes are okay if that's what you need, but they're not
appropriate for many IPC tasks. Priority-based message
queues come close, but even with them, messages are packets
of bytes, so you have to pay to marshal and unmarshal your
data. (You also have to pay for the data to be copied
twice since it is buffered inside the pipe/mq
implementation, but this is an API problem. You really
want your data copied straight between the address spaces
without hitting a kernel or server buffer, as you would in
a microkernel IPC primitive. I digress.)
Just handing over an abstract data structure or a
pointer is far more efficient and convenient and, in some
cases, the only tractable solution.
I don't see it happening, who wants to code
on a machine that can only use one language?
You've never tried to implement a non-C language for a
Unix-like OS, have you?
High-level languages pretty much have to compile down to
C under a Unix-like OS, because of the semantics of signal
delivery, which requires a C stack and a valid stack pointer
to be present. This kills potential optimisations
(e.g. requiring a C stack to be maintained even when the
language does not require it).
Even C++ is broken under most Unix-like OSes (one exception
being Solaris), because if you cancel a thread, the destructors
for that thread's stack are not run.
The problem is that the book is being
marketed, and reviewed, as a book for "hackers," that is,
anyone who programs. Young people, of which there are
hundreds on this site, get the impression that to be a
"hacker," you need to write weird, bit-fiddly code that's
impossible to understand, much less maintain a few months
down the line.
You clearly have a different definition of "hacker" than
I do. "Anyone who programs" is not even close.
I could equally argue that Knuth's The Art of Computer
Programming is marketed to "programmers" which
gives people the mistaken impression that to be a
"programmer" you need to be able to implement a Patricia
trie or solve nonlinear recurrences by hand. These are
useful skills, but then so is the ability to write weird,
bit-fiddly code.
Oh, also, YHBT about Linux, which is actually
a great example of keeping a large system readable and
maintainable.
You clearly have a different definition of "readable"
than I do.
You do have a point on the "maintainable" aspect,
but that's only because there are a small number of people
who understand Linux well and are willing to review patches
thoroughly before accepting them. It's got little to do
with any inherent clarity in the code and everything to do
with the process.
For 99% of people, these kinds of unreadable
but "neat" optimizations are going to have no impact on
execution time whatsoever.
So? Most technical books are useless for 99% of
people. I personally have no use for The Black Art of C#
in 21 Days For Idiots. For my part, I used to write
compilers. This book would have been invaluable for me. I
guess I was in the 1%.
The only danger in this kind of book is that people will
use the techniques in it blindly, in which case they
arguably shouldn't be writing software anyway (or at the
very least should have it thorougly reviewed before
committing).
If you follow the advice in this book, you're
liable to produce code that looks like the Linux
kernel.
So if you have to produce code like the Linux
kernel, it sounds like the book for you.
Incidentally, the Linux kernel is that way for several
reasons, some of which are valid (e.g. profiling or
back-of-the-envelope calculations showed that something was
going to be a bottleneck) and some of which made sense at
the time. For an example fo the latter, see
do_pipe() in fs/pipe.c. If starting the
kernel again today, it would make a lot more sense to use
C++ which would make all those gotos unnecessary, but it's
a bit late now.
If desired, a file can be mmaped into the
array instead to provide a simple persistant
storage.
Mmap is way, way more useful than that.
The key benefit of mmap is that on decent OSes (i.e. not
NT/2000/XP), you get effectively get the buffer cache for
the file mapped into your address space. Without mmap,
you'd effectively have two copies of the file go through
memory: one in the buffer cache and one in the application.
This is not so serious if your file is a sequentially-read
stream, because the application won't hold much at a time.
However, if it's a randomly accessed file with a large
working set (e.g. in a database server), the win is huge.
This is why I've long argued for a general
discussion board to exist alongside the news commentary,
where anyone could start their own topic thread.
There's always kuro5hin, you know. This
is a true public forum, since people can post whatever they
like (subject to enough other people agreeing that they also
want to discuss it).
I've always wondered why, in today's world of
gigabytes of memory in personal computers, why such a big
deal is made about virtual memory.
Because it's important.:-)
Some people think that virtual memory means paging to
secondary memory, such as disk. It doesn't. Virtual memory
systems can support this, but many OSes (e.g. QNX) support
virtual memory with no disk paging. (OK, QNX does
support disk paging, but only as an afterthought, so that
QNX can be self-compiled. GCC takes a lot of memory.)
Virtual memory provides a virtual address space for
each process. The benefits include:
The system can avoid memory fragmentation because
contiguous virtual pages do not need to be contiguous in
physical memory.
Processes don't step on each others' address spaces.
Separate instances of the same program can share program
text space and shared libraries.
Different processes can use the same addresses for
different purposes.
Processes can share memory between each other in a
controlled manner (for example, one process may have
read-only access to some region, or memory can be
shared between a parent and child process via a read-only
or copy-on-write mechanism).
Processes on different physical machines can
share memory. (This can be done using the standard Unix
interface. No extra kernel support is required.)
Processes can view files as memory (e.g. using mmap),
reading in only as much of the file as is necessary.
Processes can allocate large regions of memory and only
have the amount of those regions which they actually use
backed up by physical memory (whether that is primary or
secondary memory).
The OS has a lot more freedom in how to lay out a
process in physical memory to optimise cache usage.
Interesting. I wouldn't be surprised on that. However:
Pixar's animation system and renderer have very different architectures than your friend's modeller.
Maya, for example, requires that the whole model, in dependency graph form, fits in memory at once. RenderMan does not. Clever occlusion culling in combination with "delayed read archive" geometry mean that only a small amount of the scene is in memory at any given time.
As has been mentioned previously, 64 bit has no advantage. Yes, they can support less RAM, but they are going from 14 CPUs per box to 2 CPUs per box. Their new farm architecture actually has more RAM per CPU than the old one.
In addition, Itanium performance for CPU-bound applications is bad. No, let's rephrase that: it's shockingly bad. Part of it is that the Itanium's OSes are not yet stable, especially under load. (We've submitted several bug reports for Linux over the course of the last six months.)
Pixar's figure of merit is almost certainly rendering power per dollar of TCO, where the TCO includes network infrastructure, power, space, air conditioning and physical sysadmins.
E10ks are more about high availability than scaling. With an E10k, you can replace entire boards while the machine is still running. If that's what you need, Sun may be the way to go for your application.
Pixar's old render farm was based on E4500s, which are about scaling.
While I agree with you on most of your other points, I can't see how this breaks any reasonable definition of not establishing a religion nor prohibiting the free exercise thereof.
A religious organisation is, fundamentally, a non-profit organisation. Many are also charities. Non-profit organisations (and charities) get preferential tax treatment. Where is the problem here?
Now if you want to see real violation of the separation of church and state, watch for the list of religious organisations which will be labelled "terrorist organisations" under PATRIOT II.
The colon syntax is not random. It's well-known and well-understood mathematical notation, namely Zermelo-Frankel set comprehension notation:
The price you pay is that you have to write a lot more rules yourself, which takes a lot of time (and hence money). The "beasts" as you refer to them (not that I think VB is a serious development language) do not require you to reinvent the wheel every time.
Yes, in C you can use libraries, but the more libraries you use, the more rules you have to know and the less you feel like you can know them all. Let's face it, programming is a complex task. Either you get the complexity out of a can or you provide it yourself.
Have you seen the price of movies on VHS these days? On those sums, he's assuming that every blank videotape sold is used to pirate about four movies.
Your figures are at least as good as his. See also Darrel Huff's magnificent book, How To Lie With Statistics. It will help you in your career as a lobbyist, at any rate.
Jack Valenti notes:
It may interest him to know that Australia actually has three railway track gauges: broad gauge (5'3"), standard gauge (4'8.5") and narrow gauge (3'6"). This is for historical reasons, mostly. Most major interstate rail routes now use standard gauge. However, since metropolitan rail systems do not need to inter-operate (i.e. a Perth suburban train does not need to run on Melbourne suburban rails), we get by on three standards.
It's somewhat similar to how the US digital phone network used to be. One big problem is that JV wants to make the world into the way the US digital phone network works now: One specification for North America (CDMA), another for everywhere else (GSM). (Yeah, yeah, dual GSM/CDMA phones are just becoming available. You know what I mean.)
It looks like early days yet. Off the top of my head, I can think of a couple of areas where this might be very useful.
In signal processing, remote sensing, image processing and so on, we want to do "continuous" things to discrete samples. If we can carry solutions over from the continuous world, we may get nice algorithms.
There is a deep link between certain kinds of algebra and formal language theory. A recent discovery is that formal languages obey the rules of calculus. For example, DFA construction from a regular expression turns out to be a Taylor series expansion of the expression. (If anyone is curious, I can supply the details.) Perhaps this will motivate someone to bring formal languages into the picture.
It's not very deep so far, but you never know.
For the software vendor, maybe. For the sysadmin, it can easily be a nightmare, especially if you have lots of individual products all licensed with flexlm.
Spot on with the rest of it, though. The software that is generally "protected" with flexlm is not the sort of software that you would want to pirate in the first place. Besides, it's not the wAr3Z d00d that they need to protect themselves from, it's the otherwise legitimate installation with 25 licences who find they need 27 but don't want to hand over another $40,000.
I'd put it more strongly than that. Reading between the lines of the paper, don't just fix the warning. Look around the place where the warning happened. You'll most likely find a bug.
It's also a call for compilers to generate more warnings, which can only be a good thing.
How does one get to be on the official list of objectors? If I can't do it myself, I would appreciate it if you could consider the following points. You have probably thought of them already, but still.
I've read the draft proposed bill. What they are proposing is to introduce a new licence for personal copying/derivative works/whatever. Distribution, hire, public performance and so on will still happen as they do, and purchasing said licence will not allow you to do this.
First point: Given that music CDs and DVDs don't come with an EULA, isn't this currently legal, and they just want to make people pay for it? (If it's not currently legal, it should be. Making personal copies or derivative works and not giving them to anyone else is not depriving anyone of a sale.)
The second point is: If the law were to come into effect, and I could buy a licence to copy some work, does this or does this not give me the right to obtain a copy protection circumvention device which would give me access to that work? Currently this is illegal under the Copyright Amendment (Digital Agenda) Act 2000 (aka the Australian DMCA).
That depends what you call a "texture". You can think of a planar reflection map, for example, as just a texture in camera space. If it's to reflect very bright lights, it looks just plain wrong without the extra dynamic range.
Of course I was being silly, but my point is that if this really their intention:
...then let's give it a go. Let's see some genuine proposals for the establishment of reasonable standards to legally allow CD piracy as a part of the market.
Speaking as ain Australian, I am willing to support the proposal on three conditions:
I've never copied a audio CD or DVD in my life. I have made compilation CDs for two schoolteachers based on CDs that they own for educational purposes (I believe this is legal), but I'm willing to try if this becomes law. I promise to make it fair by adding up the levies that I have paid on blank CDs and only pirating CDs worth up to the value of the levy. When I've effectively paid for a CD, I figure I deserve a copy of it.
What do you think, APRA?
Incidentally, I'm not quite sure how you calculate what is a fair levy to pay for losses which are, in the admission of the CEO of Screenrights, "incalculable". I'd like to see how they managed to work it out.
Most new general-purpose code "out there" is written in C++, and with good reason.
You couldn't be more wrong. Threads exist because simpler solutions are not always appropriate.
If your code is effectively serialised, it's easier to write a serial program. If your code is well-partitioned, it's easier to fork off separate processes. It's those middle-ground cases for which you need threads. It's no accident that these also tend to be the hardest cases. As a result, some people think threads complicate programs, which they are not unless they are misused. Rather, threads are used to solve problems which are complicated to begin with.
Pipes are okay if that's what you need, but they're not appropriate for many IPC tasks. Priority-based message queues come close, but even with them, messages are packets of bytes, so you have to pay to marshal and unmarshal your data. (You also have to pay for the data to be copied twice since it is buffered inside the pipe/mq implementation, but this is an API problem. You really want your data copied straight between the address spaces without hitting a kernel or server buffer, as you would in a microkernel IPC primitive. I digress.)
Just handing over an abstract data structure or a pointer is far more efficient and convenient and, in some cases, the only tractable solution.
You've never tried to implement a non-C language for a Unix-like OS, have you?
High-level languages pretty much have to compile down to C under a Unix-like OS, because of the semantics of signal delivery, which requires a C stack and a valid stack pointer to be present. This kills potential optimisations (e.g. requiring a C stack to be maintained even when the language does not require it).
Even C++ is broken under most Unix-like OSes (one exception being Solaris), because if you cancel a thread, the destructors for that thread's stack are not run.
You clearly have a different definition of "hacker" than I do. "Anyone who programs" is not even close.
I could equally argue that Knuth's The Art of Computer Programming is marketed to "programmers" which gives people the mistaken impression that to be a "programmer" you need to be able to implement a Patricia trie or solve nonlinear recurrences by hand. These are useful skills, but then so is the ability to write weird, bit-fiddly code.
You clearly have a different definition of "readable" than I do.
You do have a point on the "maintainable" aspect, but that's only because there are a small number of people who understand Linux well and are willing to review patches thoroughly before accepting them. It's got little to do with any inherent clarity in the code and everything to do with the process.
So? Most technical books are useless for 99% of people. I personally have no use for The Black Art of C# in 21 Days For Idiots. For my part, I used to write compilers. This book would have been invaluable for me. I guess I was in the 1%.
The only danger in this kind of book is that people will use the techniques in it blindly, in which case they arguably shouldn't be writing software anyway (or at the very least should have it thorougly reviewed before committing).
So if you have to produce code like the Linux kernel, it sounds like the book for you.
Incidentally, the Linux kernel is that way for several reasons, some of which are valid (e.g. profiling or back-of-the-envelope calculations showed that something was going to be a bottleneck) and some of which made sense at the time. For an example fo the latter, see do_pipe() in fs/pipe.c. If starting the kernel again today, it would make a lot more sense to use C++ which would make all those gotos unnecessary, but it's a bit late now.
The ironic thing is the same moderator probably listens to Las Ketchup.
Mmap is way, way more useful than that.
The key benefit of mmap is that on decent OSes (i.e. not NT/2000/XP), you get effectively get the buffer cache for the file mapped into your address space. Without mmap, you'd effectively have two copies of the file go through memory: one in the buffer cache and one in the application.
This is not so serious if your file is a sequentially-read stream, because the application won't hold much at a time. However, if it's a randomly accessed file with a large working set (e.g. in a database server), the win is huge.
There's always kuro5hin, you know. This is a true public forum, since people can post whatever they like (subject to enough other people agreeing that they also want to discuss it).
Because it's important. :-)
Some people think that virtual memory means paging to secondary memory, such as disk. It doesn't. Virtual memory systems can support this, but many OSes (e.g. QNX) support virtual memory with no disk paging. (OK, QNX does support disk paging, but only as an afterthought, so that QNX can be self-compiled. GCC takes a lot of memory.)
Virtual memory provides a virtual address space for each process. The benefits include:
This is just off the top of my head.
Note: This list is biassed towards theoreticians and programming language/compiler people. In no particular order: