The main problem with Java is that it is monoparadigmatic, very limited, underpowered, and not only gives you few language tools to solve problems, it also kills of ANY attempts to try new ideas. Try to code in a functional style for instance. Or, true generic programming - and NOT the sad joke called "generics". Or, try inserting new features using the language; it won't work without serious performance losses. These are advanced techniques, and Java fails here. C++ does not - just look at the immense variety of techniques, tricks and features Boost give you, for instance. Or, try to replicate the STL in Java.
C++'s main problem is not that it is a "bastard child of object orientedness", if you limit yourself to 1995-style OOP-only C++, you are using about 5% of the language's power. Its main problem is the crappy syntax, which makes it quite hard to use generic programming and metaprogramming - and these two are the ACTUAL center of C++. Java does not even remotely have this amount of versatility and expressiveness, not even close. There is no full alternative to C++; this is unfortunate, since C++ is really a mess. Extracting the generic/meta programming core and refactoring it into a new language that completely focuses on it would be wise; D seems to be a chance for this to happen, but they are too unfocused. We'll see.
So, Java is a fine alternative to C++ ONLY if you want to teach basic OOP. More advanced OOP? LISP, Smalltalk, ObjC. Very different paradigma? Erlang, Forth, Prolog, Scheme, Haskell. Compile-time metaprogramming and generic programming? C++.
True. I forgot about this point in my reply below. This is another reason why a hybrid makes sense: use ray tracing only where cache misses are overshadowed by much higher costs when using rasterization (like shadows or refraction).
Hybrids do make a lot of sense. The author's argument is the need for a spatial partitioning structure if one mixes ray tracing with rasterization. This is a no-brainer; you'd have such a structure anyway.
In fact, his points actually show why a hybrid is perfect: most surfaces are not shiny, refractive, a portal, etc. Most are opaque - and a rasterizer is much better for this (since no ray intersection tests are necessary). He shows pathological scenes where most surfaces are reflective; however, most shots do show a lot of opaque surfaces (since Quake 4 does not feature levels where one explores a glass labyrinth or something).
Yes, if a reflective surface fills the entire screen, its all pure ray tracing - and guess what, that is exactly what happens in a hybrid. Hybrid does not exclude pure ray tracing for special cases.
Ideally, we'd have a rasterizer with a cast_ray() function in the shaders. The spatial partitioning structure could well reside within the graphics hardware's memory (as an added bonus, it could be used for predicate rendering). This way haze, fog, translucency, refractions, reflections, shadows could be done via ray tracing, and the basic opaque surface + its lighting via rasterization.
Now, I keep hearing the argument that ray tracing is better because it scales better with geometric complexity. This is true, but largely irrelevant for games. Games do NOT feature 350 million triangles per frame - it just isn't necessary. Unless its a huge scene, most of these triangles would be used for fine details, and we already have normal/parallax mapping for these. (Note though that relief mapping usually doesn't pay off; either the details are too tiny for relief mapping to make a difference, or they are large, and in this case, traditional geometry displacement mapping is usually better.) So, coarse features are preserved in the geometry, and fine ridges and bumps reside in the normal map. This way, triangle count rarely exceeds 2 million triangles per frame (special cases where this does not apply include complex grass rendering and very wide and fine terrains). The difference is not visible, and in addition the mipmap chain takes care of any flickering, which would appear if all these details were geometry (and AA is more expensive than mipmaps, especially with ray tracing).
This leaves us with no pros for pure raytracing. Take the best of both worlds, and go hybrid, just like the major CGI studios did.
"Easy" does not necessarily mean "as feature-stripped as Java". Python, too, is easy, but far more powerful and flexible. (Unfortunately, it is also quite slow, even with Psyco.) Java just does not offer much - and PLEASE, do not confuse the standard library with the language. It doesn't have to compete with Lisp, but as said, even C# is adding features which are sorely missing in Java.
Also, OF COURSE one has little choice when a job position requires Java. I did not deny this. And I KNOW "real business" usually demands C#/Java. I even mentioned the reasons why. It does not invalidate any of my points. It is very VERY bad if CS students never use anything else than Java. Java is a mediocre language, made for your "real business". It is a necessary evil we have to live with. Fine. But please, don't sell it as a new revelation or something. Maybe someday the Java folks finally let the language evolve into something better, but I wouldn't hold my breath.
Java may be the next step in the evolution of the expendable "real business" code-monkey, but it is a step back for CS.
Its actually not over the top. Even C# is more advanced - and it started as a Java clone. In fact, C# is getting lambdas, and F# will be a Caml adoption..Net is moving on, the Java crowd still think that keeping it primitive is the best way to go.
You mention the need for writing "stuff that works". Well, my goal is not to write stuff in the most complicated way possible just because the code looks cool. On the contrary; knowledge about more paradigma and techniques means more tools for development, and you can easily find a better tool to a job. If you only know the theoretical patterns Java offers, you know very little. Both because of the Java limitations and because Java coders are drilled to use the standard library. In the minds of many graduates, if its not in the standard library, then it cannot be done. This cannot be good.
And sorry, sooner or later you HAVE to know at least a bit about how a computer works, how memory works, how pointers work. This is not a C legacy, this is fundamental knowledge, and should be mandatory even if you are only going to use Java in your job.
I agree with you about learning how to learn. However, it is sorely missing. Sadly, many universities have become Java code monkey factories. No, students should not learn everything to a "T", BUT they should get the basics. So many coders don't even know the features I mentioned EXIST. When they start their careers, they will most likely learn vertically, e.g. extend their current knowledge, BUT not horizontally (completely new stuff). The university should help you find the directions, right now they only point towards Java.
However, you are correct on the second point as well: programs written using all these language features require someone equally proficient in them to debug and maintain.
Which brings up an important issue: advanced features means more intrinsic complexity. Four-level nested boost::bind is a sure way to a lunatic asylum:), but its getting a lot easier with C++0x concepts. Still, Java chose the simple way: dumb it down. Unfortunately, it means that A+ developers either never develop their potential to the max, or are quite frustrated with the language.
Well, if C# adopts at least some of the features, things start to look better. A highly-optimized Lisp toolchain, a finished D 2.0 with a decent toolchain, and a C# with C++/D-style generic programming & metaprogramming (without the sick C++ syntax) are on my personal wish list.
reading this article about HD DVD losing another supporter, and right below the article, Blu-Ray ads constantly appear...... so the HD DVD ads are dead too!
Java is one more step in evolution which normally the professors hate because it moves them away from the machine. But mankind has more important things to do (watching LOST and Sopranos) than twiddling with RPG.
Wrong. Java is a step *back*. Not because of the abstraction, mind you, but simply because Java is such a severely limited language. 30-40 years ago amazing new things were developed in CS, none of these are included in Java. Lambda? Map-Reduce? Purely functional code? Caml-style pattern matching? Conditions? People say Java made C++ obsolete, which is completely wrong, since C++ is far more powerful than Java (thanks to generic programming and metaprogramming). Just have a look at Boost, or C++0x, and try to replicate the features in Java - WITHOUT runtime overhead (this is one key feature of generic/meta programming - a lot of computation can be done at *compile*-time).
Actually, the next step in evolution should be Lisp, since it is one of the the most powerful and flexible languages in existence. There is nothing in the language that intrinsically prohibits Lisp performing as well as C++, its mostly the tools that lack development (for comparison, g++ has had a hell of a lot of improvements; the 2.x series was awful). If you avoid certain things like eval, Lisp code can be optimized well enough. There is a Scheme compiler called Stalin which does just that, and it can even outperform comparable C code.
So, if you want to abstract away from the machine, why use Java instead of Lisp? IMO there are other reasons for Java: 1) its a braindead easy language. 2) you only need mediocre programmers, since Java is easy enough for them, and there are much more mediocre programmers than good ones. 3) as a consequence, programmers are expendable, jobs can be outsourced etc. One C++/Lisp/Haskell expert could replace an entire Java team. Not good for the company, since this guy becomes indispensable, and can demand more salary etc. 4) Universities can claim to have more success in teaching, since the number of guys with a CS degree is higher. 5) Companies need less teaching courses, because of (1). 6) Java has been overhyped for a while now, and many CTOs are so clueless, they just buy into it.
Well, you can disagree at my opinion about Java, but it is a fact that CS students *should* learn about the functional paradigm, what lambdas are, closures, and so on as well as what pointers are, how the memory works, what the garbage collector actually does etc. However, this is not the case - and THIS is a serious problem.
Natural selection is quite obviously in effect among OSS projects, only the criteria for success is the ability to attract developers rather than users.
But the consequence of failure is very different. Nothing bad happens to the developer if no one is attracted to the project. In commercial games, one flop often means the company is shut down and you lose your job.
Why is it that open source so often implies a total lack of care for details and usability?
Lack of natural selection. If a commercial game's user interface sucks, few people will buy and play it, unless its overly hyped. Reviewers tear apart the game, word of mouth names it a real stinker, it doesn't sale, developer either goes bankrupt or learns from the mistake. Or doesn't - and goes bankrupt, eventually.
Open-source projects don't depend on sales. While this allows for experimental genres and fresh ideas, it also takes away some incentive to polish the product's user interface (bugs OTOH are more likely to be fixed).
1) As another poster pointed out, we have been sending and receiving EM transmissions for only a hundred years. The amount of star systems with a distance of less than 100 ly to the sun is not high. 2) It is very well possible that advanced civilizations this close to our own star system existed, but perished or moved long ago. Or, they are no longer using EM transmissions, but another way of communication we do not yet know or understand. For example, it is not unthinkable that a civilization ceases to use satellites and long-distance EM communications and broadcast, instead relying on a sophisticated fiberoptic wire network. In fact, its something that has been considered by several countries already. (Easier to fix, packet-based data transfer generalizes transfers so the same wires can be used for all kinds of data etc.) 3) As a possible consequence of (2), it is possible that they ARE aware of us, but simply refuse to reply. Many reasons are possible; they may be very reclusive, xenophobic, or simply not interested in us. 4) Another consequence of (2) is that they may have been sending out EM data as well - but ceased to do a long time ago. We may have missed their transmissions. 5) Maybe we just don't understand them? What if they are sending laser pulses but we do not recognize them as information? 6) Another idea is that the civilizations closest to us are in a far more primitive state than us. They may be in their equivalent of a stone age. It is interesting how everybody instantly thinks of alien civilizations being ancient and advanced - the opposite is possible as well...
Now, a lot of this is speculation. In sum: EM transmissions are not the holy grail. Their absence alone indicate very little, and prove nothing.
Re:coders vs. sysadmins
on
Hacking VIM
·
· Score: 1
Well, I code for a living. I usually use vim. So, am I a walking oxymoron now? That would be so cool.
So you are open about your beliefs. More power to you. But this is not always a good idea; a person with a liberal view on sexuality will face SEVERE consequences in intolerant quasi-fascist states like Utah. Most gays in Utah either move or hide. Or get slaughtered. Knowledge is power. Knowledge about you is power over you.
This assumes you have control over the way it is used. This is rarely the case. Most of the time you get to know about these plots when its too late already. In other words, usually its like pandora's box.
Just search for senator sex scandals and the subsequent end of their careers. Another example: before WW2, it was common to ask immigrants about their ethnic origin. This information was archived, and later used when concentration camps for Japanese were created. Or, imagine ultra-orthodox "Born Again" christians take over the US government, and start "cleansing" (read: slaughtering) the "tainted" (read: anybody practicing sex, any religion except Christianity, civil rights activists etc.). The rule aboe is the reason why only YOU should have authority about disclosing your personal information, and why you should be careful.
You know, you've had a terrible day at work, fought with your wife, got pissed because of some other bad news, then you get into your car to drive home, and this robot goes "Hi! The sun is shining! Everybody is haaappyyy! Smmiiiile!"
This reflects the great deficiency regarding design. XNA/MS Game Studio all have predefined stuff that gets used often. In the OSS world such presets do not exist, however. In addition, anything that does not relate to programming often just does not exist in the OSS realm. I'm talking about 2D/3D graphics artists, game designers (no, most game programmers are NOT prepared for this task), musicians, sound FX guys etc.
Many artists will make things for money ONLY. The altruistic spirit of OSS does not translate well to game art (with a few exceptions). Usually, the artists doing things for free are usually the bad ones, and the ones demanding lots of cash are the real deal. But without the latter, any game looks and sounds 1995ish, no matter how good the code is.
You don't have to. Just extract the facial features (which are unique), and match them against a set of known photographs. Blurring does not remove them unless you blur a LOT. The only reliable way of hiding the identity remains the black bar in the actual pic (not just superimposed).
And ray tracing scales better than raster graphics with scene complexity.
I repeat: Forget about the triangle throughput benchmarks, they are useless, especially for games. As Carmack said, game developers dont want _more_ triangles, they want _pretty_ triangles, which means that fillrate is usually the important factor.
Yet again RT is seen as the magical wand that will make everything look nice.
Hint: CGI studios do NOT use RT exclusively. In fact they use *rasterizers*, and resort to RT for stuff that is hard to fake with rasterizing (shadows, translucency, refraction, reflection,....)
Why? Because rasterizers are cheaper. Forget about the triangle throughput benchmarks, they are useless, especially for games. As Carmack said, game developers dont want _more_ triangles, they want _pretty_ triangles, which means that fillrate is usually the important factor. And here, raytracers royally suck, because they scale very badly with screen resolution. There is absolutely no point in raytracing an opaque, bumpmapped triangle, a rasterizer can produce the same result much faster; raytracing won't push that triangle's image quality. Raytracing has no advantages regarding illumination (especially not global one which needs to be preprocessed anyway) or shading. So please stop hyping RT so much.
The problem is, while the computer can read the mind, it cannot read anything useful. Its like trying to read DCT blocks in JPEG files directly - you cannot do anything useful with it until you know you need to IDCT it. Its even more relevant with entropy coding; without the proper model you cannot do _anything_ at all with the bitstream.
Thus, reading the mind is actually the easy part. Making sense out of the information is the real deal. It is even harder because brain "data" doesn't seem to be binary, or exact. There are theories that the brain almost exclusively works with probabilities _only_. This mirrors reality quite well; in reality, nothing is "exact".
Percentage is one reason, but a big one (if not the main one) is that supporting Linux is expensive. Technically, the platform isn't that hard to support, but there are *many* distros out there. Many companies are waiting for one or a couple of distros to become dominant enough. Ubuntu, Fedora, Suse, Debian, Redhat are potential candidates. It is also very important to rule out setups with modified kernel, since they can have unpredicatable side-effects. In fact, this rule extends to all software packages which are about to be supported. THEN commercial support is possible. There are too many variables otherwise, and those poor helpdesk guys have to KNOW all known issues.
Windows XP has several versions (Home, Professional...) but the differences are often subtle enough to make it easy to treat them as one. Vista, I don't know. OSX is a no-brainer, its a totally locked platform, support is quite cheap.
Maybe an Ubuntu with support for vendor repositories (for patches) would be an option. But right now, Linux support is just too expensive. Quite ironic, actually: OSX is the most locked down of all those platforms, and the cheapest to support. With Linux its the other way round.
No, they have moderate complexity because more is just not necessary. In the world of games, *pretty* triangles are wanted, not *many* triangles. Pretty much the only reason for geometric complexity is displacement mapping, which is not used everywhere (and even then its just for getting detail cheaply). At a certain limit geometry just does not pay off. I don't need a million triangles to render a good-looking car, for example.
The main problem with Java is that it is monoparadigmatic, very limited, underpowered, and not only gives you few language tools to solve problems, it also kills of ANY attempts to try new ideas. Try to code in a functional style for instance. Or, true generic programming - and NOT the sad joke called "generics". Or, try inserting new features using the language; it won't work without serious performance losses. These are advanced techniques, and Java fails here. C++ does not - just look at the immense variety of techniques, tricks and features Boost give you, for instance. Or, try to replicate the STL in Java.
C++'s main problem is not that it is a "bastard child of object orientedness", if you limit yourself to 1995-style OOP-only C++, you are using about 5% of the language's power. Its main problem is the crappy syntax, which makes it quite hard to use generic programming and metaprogramming - and these two are the ACTUAL center of C++. Java does not even remotely have this amount of versatility and expressiveness, not even close. There is no full alternative to C++; this is unfortunate, since C++ is really a mess. Extracting the generic/meta programming core and refactoring it into a new language that completely focuses on it would be wise; D seems to be a chance for this to happen, but they are too unfocused. We'll see.
So, Java is a fine alternative to C++ ONLY if you want to teach basic OOP. More advanced OOP? LISP, Smalltalk, ObjC. Very different paradigma? Erlang, Forth, Prolog, Scheme, Haskell. Compile-time metaprogramming and generic programming? C++.
True. I forgot about this point in my reply below. This is another reason why a hybrid makes sense: use ray tracing only where cache misses are overshadowed by much higher costs when using rasterization (like shadows or refraction).
Hybrids do make a lot of sense. The author's argument is the need for a spatial partitioning structure if one mixes ray tracing with rasterization. This is a no-brainer; you'd have such a structure anyway.
In fact, his points actually show why a hybrid is perfect: most surfaces are not shiny, refractive, a portal, etc. Most are opaque - and a rasterizer is much better for this (since no ray intersection tests are necessary). He shows pathological scenes where most surfaces are reflective; however, most shots do show a lot of opaque surfaces (since Quake 4 does not feature levels where one explores a glass labyrinth or something).
Yes, if a reflective surface fills the entire screen, its all pure ray tracing - and guess what, that is exactly what happens in a hybrid. Hybrid does not exclude pure ray tracing for special cases.
Ideally, we'd have a rasterizer with a cast_ray() function in the shaders. The spatial partitioning structure could well reside within the graphics hardware's memory (as an added bonus, it could be used for predicate rendering). This way haze, fog, translucency, refractions, reflections, shadows could be done via ray tracing, and the basic opaque surface + its lighting via rasterization.
Now, I keep hearing the argument that ray tracing is better because it scales better with geometric complexity. This is true, but largely irrelevant for games. Games do NOT feature 350 million triangles per frame - it just isn't necessary. Unless its a huge scene, most of these triangles would be used for fine details, and we already have normal/parallax mapping for these. (Note though that relief mapping usually doesn't pay off; either the details are too tiny for relief mapping to make a difference, or they are large, and in this case, traditional geometry displacement mapping is usually better.) So, coarse features are preserved in the geometry, and fine ridges and bumps reside in the normal map. This way, triangle count rarely exceeds 2 million triangles per frame (special cases where this does not apply include complex grass rendering and very wide and fine terrains). The difference is not visible, and in addition the mipmap chain takes care of any flickering, which would appear if all these details were geometry (and AA is more expensive than mipmaps, especially with ray tracing).
This leaves us with no pros for pure raytracing. Take the best of both worlds, and go hybrid, just like the major CGI studios did.
You obviously didn't understand my reply.
"Easy" does not necessarily mean "as feature-stripped as Java". Python, too, is easy, but far more powerful and flexible. (Unfortunately, it is also quite slow, even with Psyco.) Java just does not offer much - and PLEASE, do not confuse the standard library with the language. It doesn't have to compete with Lisp, but as said, even C# is adding features which are sorely missing in Java.
Also, OF COURSE one has little choice when a job position requires Java. I did not deny this. And I KNOW "real business" usually demands C#/Java. I even mentioned the reasons why. It does not invalidate any of my points. It is very VERY bad if CS students never use anything else than Java. Java is a mediocre language, made for your "real business". It is a necessary evil we have to live with. Fine. But please, don't sell it as a new revelation or something. Maybe someday the Java folks finally let the language evolve into something better, but I wouldn't hold my breath.
Java may be the next step in the evolution of the expendable "real business" code-monkey, but it is a step back for CS.
Its actually not over the top. Even C# is more advanced - and it started as a Java clone. .Net is moving on, the Java crowd still think that keeping it primitive is the best way to go.
In fact, C# is getting lambdas, and F# will be a Caml adoption.
You mention the need for writing "stuff that works". Well, my goal is not to write stuff in the most complicated way possible just because the code looks cool. On the contrary; knowledge about more paradigma and techniques means more tools for development, and you can easily find a better tool to a job. If you only know the theoretical patterns Java offers, you know very little. Both because of the Java limitations and because Java coders are drilled to use the standard library. In the minds of many graduates, if its not in the standard library, then it cannot be done. This cannot be good.
And sorry, sooner or later you HAVE to know at least a bit about how a computer works, how memory works, how pointers work. This is not a C legacy, this is fundamental knowledge, and should be mandatory even if you are only going to use Java in your job.
I agree with you about learning how to learn.
However, it is sorely missing. Sadly, many universities have become Java code monkey factories. No, students should not learn everything to a "T", BUT they should get the basics. So many coders don't even know the features I mentioned EXIST. When they start their careers, they will most likely learn vertically, e.g. extend their current knowledge, BUT not horizontally (completely new stuff). The university should help you find the directions, right now they only point towards Java.
However, you are correct on the second point as well: programs written using all these language features require someone equally proficient in them to debug and maintain.
:), but its getting a lot easier with C++0x concepts. Still, Java chose the simple way: dumb it down. Unfortunately, it means that A+ developers either never develop their potential to the max, or are quite frustrated with the language.
Which brings up an important issue: advanced features means more intrinsic complexity. Four-level nested boost::bind is a sure way to a lunatic asylum
Well, if C# adopts at least some of the features, things start to look better. A highly-optimized Lisp toolchain, a finished D 2.0 with a decent toolchain, and a C# with C++/D-style generic programming & metaprogramming (without the sick C++ syntax) are on my personal wish list.
reading this article about HD DVD losing another supporter, and right below the article, Blu-Ray ads constantly appear ......
so the HD DVD ads are dead too!
Just remove that try statement, and let the exception be caught by your top level handler.
Well, the whole point is that this exception should not be necessary at all. Just have 2 ints on the stack...
Java is one more step in evolution which normally the professors hate because it moves them away from the machine. But mankind has more important things to do (watching LOST and Sopranos) than twiddling with RPG.
Wrong. Java is a step *back*. Not because of the abstraction, mind you, but simply because Java is such a severely limited language. 30-40 years ago amazing new things were developed in CS, none of these are included in Java. Lambda? Map-Reduce? Purely functional code? Caml-style pattern matching? Conditions? People say Java made C++ obsolete, which is completely wrong, since C++ is far more powerful than Java (thanks to generic programming and metaprogramming). Just have a look at Boost, or C++0x, and try to replicate the features in Java - WITHOUT runtime overhead (this is one key feature of generic/meta programming - a lot of computation can be done at *compile*-time).
Actually, the next step in evolution should be Lisp, since it is one of the the most powerful and flexible languages in existence. There is nothing in the language that intrinsically prohibits Lisp performing as well as C++, its mostly the tools that lack development (for comparison, g++ has had a hell of a lot of improvements; the 2.x series was awful). If you avoid certain things like eval, Lisp code can be optimized well enough. There is a Scheme compiler called Stalin which does just that, and it can even outperform comparable C code.
So, if you want to abstract away from the machine, why use Java instead of Lisp?
IMO there are other reasons for Java:
1) its a braindead easy language.
2) you only need mediocre programmers, since Java is easy enough for them, and there are much more mediocre programmers than good ones.
3) as a consequence, programmers are expendable, jobs can be outsourced etc. One C++/Lisp/Haskell expert could replace an entire Java team. Not good for the company, since this guy becomes indispensable, and can demand more salary etc.
4) Universities can claim to have more success in teaching, since the number of guys with a CS degree is higher.
5) Companies need less teaching courses, because of (1).
6) Java has been overhyped for a while now, and many CTOs are so clueless, they just buy into it.
Well, you can disagree at my opinion about Java, but it is a fact that CS students *should* learn about the functional paradigm, what lambdas are, closures, and so on as well as what pointers are, how the memory works, what the garbage collector actually does etc. However, this is not the case - and THIS is a serious problem.
Natural selection is quite obviously in effect among OSS projects, only the criteria for success is the ability to attract developers rather than users.
But the consequence of failure is very different. Nothing bad happens to the developer if no one is attracted to the project. In commercial games, one flop often means the company is shut down and you lose your job.
Why is it that open source so often implies a total lack of care for details and usability?
Lack of natural selection. If a commercial game's user interface sucks, few people will buy and play it, unless its overly hyped. Reviewers tear apart the game, word of mouth names it a real stinker, it doesn't sale, developer either goes bankrupt or learns from the mistake. Or doesn't - and goes bankrupt, eventually.
Open-source projects don't depend on sales. While this allows for experimental genres and fresh ideas, it also takes away some incentive to polish the product's user interface (bugs OTOH are more likely to be fixed).
Its not as easy:
1) As another poster pointed out, we have been sending and receiving EM transmissions for only a hundred years. The amount of star systems with a distance of less than 100 ly to the sun is not high.
2) It is very well possible that advanced civilizations this close to our own star system existed, but perished or moved long ago. Or, they are no longer using EM transmissions, but another way of communication we do not yet know or understand. For example, it is not unthinkable that a civilization ceases to use satellites and long-distance EM communications and broadcast, instead relying on a sophisticated fiberoptic wire network. In fact, its something that has been considered by several countries already. (Easier to fix, packet-based data transfer generalizes transfers so the same wires can be used for all kinds of data etc.)
3) As a possible consequence of (2), it is possible that they ARE aware of us, but simply refuse to reply. Many reasons are possible; they may be very reclusive, xenophobic, or simply not interested in us.
4) Another consequence of (2) is that they may have been sending out EM data as well - but ceased to do a long time ago. We may have missed their transmissions.
5) Maybe we just don't understand them? What if they are sending laser pulses but we do not recognize them as information?
6) Another idea is that the civilizations closest to us are in a far more primitive state than us. They may be in their equivalent of a stone age. It is interesting how everybody instantly thinks of alien civilizations being ancient and advanced - the opposite is possible as well...
Now, a lot of this is speculation. In sum: EM transmissions are not the holy grail. Their absence alone indicate very little, and prove nothing.
Well, I code for a living. I usually use vim.
So, am I a walking oxymoron now? That would be so cool.
So you are open about your beliefs. More power to you. But this is not always a good idea; a person with a liberal view on sexuality will face SEVERE consequences in intolerant quasi-fascist states like Utah. Most gays in Utah either move or hide. Or get slaughtered. Knowledge is power. Knowledge about you is power over you.
This assumes you have control over the way it is used. This is rarely the case. Most of the time you get to know about these plots when its too late already. In other words, usually its like pandora's box.
There is a simple rule:
What is known about you can be used against you.
Just search for senator sex scandals and the subsequent end of their careers.
Another example: before WW2, it was common to ask immigrants about their ethnic origin. This information was archived, and later used when concentration camps for Japanese were created.
Or, imagine ultra-orthodox "Born Again" christians take over the US government, and start "cleansing" (read: slaughtering) the "tainted" (read: anybody practicing sex, any religion except Christianity, civil rights activists etc.).
The rule aboe is the reason why only YOU should have authority about disclosing your personal information, and why you should be careful.
is this: http://stage6.divx.com/
You know, you've had a terrible day at work, fought with your wife, got pissed because of some other bad news, then you get into your car to drive home, and this robot goes "Hi! The sun is shining! Everybody is haaappyyy! Smmiiiile!"
This reflects the great deficiency regarding design. XNA/MS Game Studio all have predefined stuff that gets used often. In the OSS world such presets do not exist, however. In addition, anything that does not relate to programming often just does not exist in the OSS realm. I'm talking about 2D/3D graphics artists, game designers (no, most game programmers are NOT prepared for this task), musicians, sound FX guys etc.
Many artists will make things for money ONLY. The altruistic spirit of OSS does not translate well to game art (with a few exceptions). Usually, the artists doing things for free are usually the bad ones, and the ones demanding lots of cash are the real deal. But without the latter, any game looks and sounds 1995ish, no matter how good the code is.
So, if you want GOOD game art, start donating.
You don't have to. Just extract the facial features (which are unique), and match them against a set of known photographs. Blurring does not remove them unless you blur a LOT. The only reliable way of hiding the identity remains the black bar in the actual pic (not just superimposed).
And ray tracing scales better than raster graphics with scene complexity.
I repeat: Forget about the triangle throughput benchmarks, they are useless, especially for games. As Carmack said, game developers dont want _more_ triangles, they want _pretty_ triangles, which means that fillrate is usually the important factor.
Yet again RT is seen as the magical wand that will make everything look nice.
....)
Hint: CGI studios do NOT use RT exclusively. In fact they use *rasterizers*, and resort to RT for stuff that is hard to fake with rasterizing (shadows, translucency, refraction, reflection,
Why? Because rasterizers are cheaper. Forget about the triangle throughput benchmarks, they are useless, especially for games. As Carmack said, game developers dont want _more_ triangles, they want _pretty_ triangles, which means that fillrate is usually the important factor. And here, raytracers royally suck, because they scale very badly with screen resolution. There is absolutely no point in raytracing an opaque, bumpmapped triangle, a rasterizer can produce the same result much faster; raytracing won't push that triangle's image quality. Raytracing has no advantages regarding illumination (especially not global one which needs to be preprocessed anyway) or shading. So please stop hyping RT so much.
The problem is, while the computer can read the mind, it cannot read anything useful. Its like trying to read DCT blocks in JPEG files directly - you cannot do anything useful with it until you know you need to IDCT it. Its even more relevant with entropy coding; without the proper model you cannot do _anything_ at all with the bitstream.
Thus, reading the mind is actually the easy part. Making sense out of the information is the real deal. It is even harder because brain "data" doesn't seem to be binary, or exact. There are theories that the brain almost exclusively works with probabilities _only_. This mirrors reality quite well; in reality, nothing is "exact".
Percentage is one reason, but a big one (if not the main one) is that supporting Linux is expensive. Technically, the platform isn't that hard to support, but there are *many* distros out there.
Many companies are waiting for one or a couple of distros to become dominant enough. Ubuntu, Fedora, Suse, Debian, Redhat are potential candidates. It is also very important to rule out setups with modified kernel, since they can have unpredicatable side-effects. In fact, this rule extends to all software packages which are about to be supported. THEN commercial support is possible. There are too many variables otherwise, and those poor helpdesk guys have to KNOW all known issues.
Windows XP has several versions (Home, Professional...) but the differences are often subtle enough to make it easy to treat them as one. Vista, I don't know. OSX is a no-brainer, its a totally locked platform, support is quite cheap.
Maybe an Ubuntu with support for vendor repositories (for patches) would be an option. But right now, Linux support is just too expensive. Quite ironic, actually: OSX is the most locked down of all those platforms, and the cheapest to support. With Linux its the other way round.
No, they have moderate complexity because more is just not necessary. In the world of games, *pretty* triangles are wanted, not *many* triangles. Pretty much the only reason for geometric complexity is displacement mapping, which is not used everywhere (and even then its just for getting detail cheaply). At a certain limit geometry just does not pay off. I don't need a million triangles to render a good-looking car, for example.