My main complaint with VirtualBox is how weak and confusing the Virtual Box snapshop manager is compared to VMWare. VMware is just light-years ahead here. VirtualBox completely fails if you need to do multiple "what-if" situations with installing software or do non-destructive reverts or branched snapshots.
Actually no. Pointer math isn't affected by the representation of NULL, as you're never going to add an offset to NULL and dereference the result, are you?
So you're saying this would work still if NULL pointers were not zero? Remember, if you have a nonzero NULL, casting 0 to a pointer (i.e. ((obj*)0) ) results in some nonzero value internally (say like 0xdeadbeef).
struct foo { int a,b,c; };
#define offsetof(obj,fld) ((int)(&(((obj*)0)->fld)))
printf("The offset of c is 0x%08x",offsetof(foo,c));
The above prints out "The offset of c is 0x00000008". Change NULL to 0xdeadbeef and the above prints out "The offset of c is 0xdeadbef7".
And you never add pointers to each other, because it makes no sense. offsetof() is fine too - it can be defined in the system header file in an appropriate way.
There times where I have seen code reinterpret a pointer of one type and end up doing pointer math with a different type. A simple enough example is a hack that's often used to allocate a single buffer large enough to contain several different objects. We had a guy here write a memory system that checked for buffer overflows by using a front-porch / back-porch data buffers that would often catch corruption. Internally, the memory system did something similar to this:
There you have code doing math with dissimilar pointers (albeit incrementally) but "pc" does end up being the result of pointer math from a pointer of "MemLink" and "MemFrontPorch".
I don't see why a non-zero NULL would break any of that, especially the offsetof() thing?
So you're saying this would work still if NULL pointers were not zero? Remember, if you have a nonzero NULL, casting 0 to a pointer results in some nonzero value (say like 0xdeadbeef).
struct foo { int a,b,c; };
#define offsetof(obj,fld) ((int)(&(((obj*)0)->fld)))
printf("The offset of c is 0x%08x",offsetof(foo,c));
The above prints out "The offset of c is 0x00000008". Change NULL to 0xdeadbeef and the above prints out "The offset of c is 0xdeadbef7".
Just out of curiosity sake, although the standard allows NULL pointer to have storage other than zero, is there any real world compiler where this is true?
If so, it would break most code that uses unions with pointers for storage (i.e. load-in-place fixups) and code that relies on extra bits and bit-patterns shared with pointers (i.e. lots of lockfree code stuffs data into what is assumed to be unused bits in pointers). It would probably break a lot of code that uses pointer math as well -- for example, anything using an "offsetof()" style macro.
Basically, I think that people have to KNOW that NULL is going to be represented as 0 (by their compiler) to write some of the code that actually is used in the production world. Any compiler that didn't do this would break so much code that it would not be usable by the general coding population.
Comparing it to IE7 is a little bit like Ford comparing their new car to a horse and cart.
I'd say it's a fair comparison - granted a comparison against IE8 beta would be better. But comparing Apple's browser to the most recently fully supported browser released (IE7) from a different software company (MS) should not be considered unfair. MS has invested millions if not billions in IE development over the years. I'm pretty sure that MS has invested significantly more than Apple in Browser technology.
The fact that IE sucks so much after all this money and time in development and that it's getting it's butt kicked on both standards and performance is a damning statement of Microsoft's competance as a software company.
Yeah, I was going to mention the same thing about system calls requiring a context switch but there are other types of context switches as well.
Actually, in the broadest sense, a context switch can be considered any significant change made to the CPU Machine State.
For example, Intel originally implemented MMX as a CPU context switch that turned off the ability to do floating point (since MMX shared FP registers) and had to be restored via EMMS (Exit MMX MAchine State). When exiting MMX mode, the Pentium had to do some very slow heavy duty internal work that made EMMS take a long time and this significantly hampered MMX programs. Newer CPU's still use the EMMS instruction but shadow registers so they do not actually perform an internal context switch. Also, SSE avoided this context switch by introducing new registers rather than reusing old registers.
I refuse to take anyone or anything seriously that the word, or any form of the word "Synergy"
Silly names are common in the game industry. The PS3 calls it's internal coprocessors Synergistic Processor Units (SPU's for short which is annoying because it's the same acronym as the PS2's audio processor). Then again, they called the PS2 CPU the "Emotion Engine".
OK, let's say you're working on a REAL CHEAP game that you're selling yourself for $20-30. So you spend 3 days and $995 learning enough to make your game even incrementally better (in the game industry we call that "Polish" BTW and that Polish / Flair / Tweaking / Tuning is what separates many great games from simply good games).
Then all you have to do is sell around 50 more copies of your improved game to pay off your investment. Plus what you learn stays with you for future games. I would argue that even "garage" game companies like the ones you mention could get enough out of GDC to justify the cost.
Give GDC a chance. Maybe you should actually go or talk to regular developers who have gone rather than taking the word of one embittered person who is no longer working with the conference.
BTW, if you're a casual programmer and working in your spare time on indie games for artistic reasons, sure GDC may be a bit expensive but there is a student pass for that as well. Plus, I have friends who have volunteered there. You work about 1/3 to 1/2 of the time and you're able to attend lectures for free. If there's something you really want to learn going on while you're supposed to volunteer, you can swap time with other volunteers.
But for a real game developer who makes their living off making profitable games, GDC *IS* cheap for what you get.
The games being produced for next gen have budgets of $20-40 million. Anything with physical media (not DL) on PS3 or 360 is gonna have a minimum budget of $4-5 million -- it costs a good chunk of that just to get through all the submission and physically disc stamping costs -- not to mention advertising and actual development costs. Being able to make a $30 million dollar game a lot better using techniques that cost $995 to learn is relatively cheap.
Actually, it's only $995 for the Classic Pass right now (Early Reg) -- if you are "alumni" (attended in the past), you can get in for around $800. If you are willing to share your knowledge and present, you can get a full pass for FREE - two of my coworkers are doing a presentation on how we got MK vs DC to run at 60FPS on Unreal and they got free passes. (I can't refute that we're a AAA title since we were in the top ten in Dec for both 360 and PS3 but at the time his presentation was approved, we hadn't even shipped yet and no one knew how well we would do.)
No matter how you look at it, the cost is relatively cheap to a career game developer for three days of intense learning unavailable anywhere else. The pass itself is the cheapest part of the trip (flights ~= $400-500 + San Fran Hotel in Union Square ~= $200-300 / night).
GDC is *THE* only conference where *ALL* the real top smart guys in the industry are guaranteed to show up for a week and honestly share their knowledge. Microsoft, Sony, Nintendo, NVidia, AMD/ATI, Intel, as well as hundreds of individual developers from companies small (i.e. 2 guys in a garage) to large (EA) present their latest techniques and ideas.
more present rather than future of games
That's actually part of the usefulness. Nearly everything you learn is something that was *ALREADY* successfully integrated in a game. If you want theory or stuff that will be cool when the GFX and CPU become 100X faster, go to SIGGRAPH. GDC, at least for me, has always been about learning stuff you can use *RIGHT* NOW* !!!
You forgot to mention GDC next month which is certainly an important Game Developer Conference. It's not "pure" academics in the sense that most of the talks are not PhD papers being presented like SIGGRAPH (although some of the presentations are indeed PhD papers or purely academic excercises).
Most of the presentations are just a kick-ass developer with some PowerPoint slides sharing how they developed a system in their game. But nearly all the talks are from Real World Game Developers highlighting what actually worked for them.
If you're interested in going, you still have 24 hours to save a bunch of $$$ on Early Registration.
I think that "Darwinism" is used by scientists to describe classical evolution.
And just like "Newtonian" physics, the basic principals are correct (as long as you avoid extremes both large like the speed of light and black holes or small on the atomic scale). Just because many contradictory discoveries have been made since doesn't mean we should throw out Newtonian physics as a tool.
As a professional video game programmer, this story, if true, scares the bejeepers out of me. Playstation (2 and 3) are already much harder to program (relative to PC's and XBOX) and Intel has yet to make a graphics chip that doesn't totally suck. The combination doesn't sound like an ideal development platform.
Actually, now that I think of it... didn't Vista and XBOX 360 have all of those same editions already ?
You'll have to add a couple more... Like "XBOX 3 Starter" where you can only play 3 games on it and then it will tell you that you need to pay $150 for a software "upgrade" if you want to play any new games on the system.
This is very insightful. Since Windows already runs AutoUpdate in the background, why waste more resources by having separate update processes running for iTunes, RealPlayer, AntiVirus, Sun Java, Adobe Acrobat, Flash, etc. Why not let 3rd party developers plug into a secure update architecture that lets companies update their signed apps with patches signed with the same signature from a secure server?
And I want to be in control of if it's going to crap or not.
You've already lost control of allowing update apps to run on Windows thru Automatic Updates or if you've installed: A) Adobe Acrobat, B) iTunes / Quicktime, C) RealPlayer, D) Sun Java VM (jqs/jusched), E) Any AntiVirus program. Nearly all programs for windows nowdays come with auto-update baggage that runs constantly in the background -- Google just happens to have come to the game later.
That's why went ahead and paid for the version 6 update to run on Vista (I had 5 on XP) even though I had VirtualBox running under Vista. VirtualBox is pretty good for simple stuff but it absolutely breaks down in some areas where VMWare rules - snapshot management for example. VirtualBox has very simple linear snapshots that it still manages to make confusing and can only revert destructively. VMWare has branching snapshots (and cloning) with the ability to non-destructively revert to any snapshot.
FWIW, his wife's computer had two problems and they basically boiled down to this: Roxio and Flash. One problem he solved and the other he was unable to address.
Each one was pegging out a core in a dual-core machine totally bogging it down. He mucked around to disable the unnecessary AVI demux filter installed by Roxio (which is a bloated piece of junk anyhow) but he was never able to figure out why Flash was going crazy so he just left that broken on her machine and figured that with two cores, if one core is pegged at 100% due to a borked app, you can still get stuff done.
It's so easy to break or degrade the performance of a Windows Machine. However, completely fixing performance issue on a Windows Machine is *HARD* (Darn Near Impossible) -- even for one of the smartest guys at Microsoft who has spent his career working deep inside Windows System Internals.
My solution is to keep my system as clean as possible and I run multiple VM's on top of it for stuff that's not as clean. I use VMWare and VirtualBox -- VirtualBox is great for the way it integrates windows from the guest into the host and VMWare is good for debugging or if you need to work with snapshots.
Despite the fact that this device uses DDR2 RAM running at more than 6 GB/sec, it can not saturate 2 SATA interfaces
What would be much smarter is if someone came out with a PCI express card that took RAM slots so it could provide a RAM disk with 6GB/sec throughput instead of the limited ~600 MB/s (SATA 3GB/s X 2 RAID0). On top of that, add multiple memory buses (on card RAID again) to the DIMMs so it could hit the theoretical 16GB/s you get with 16 lanes of PCIe 3.0.
It'd be much nicer if he just gave us the Raw Benchmark times and let us calculate the correct values rather than his statistic percentages which seem to change how they are calculated depending on the case and are sometimes wrongly describe (as in the impossible scenario you mention in your post - more than "100% slowdown "is awfully hard to get without warping reality).
You don't even need to bribe standards bodies. You can just suggest some valid implementation ideas and happen to mention that you own a patent on them after everyone is using them. Heck you can even amend your patents along the way to include the ideas presented to the standards body by your competitors.
So bribes are not required... merely ruthlessness -- RAMBUS and the JEDEC standards body comes to mind. Then again, if you do this, you risk getting caught and fined by the regulators.
My main complaint with VirtualBox is how weak and confusing the Virtual Box snapshop manager is compared to VMWare. VMware is just light-years ahead here. VirtualBox completely fails if you need to do multiple "what-if" situations with installing software or do non-destructive reverts or branched snapshots.
Actually no. Pointer math isn't affected by the representation of NULL, as you're never going to add an offset to NULL and dereference the result, are you?
So you're saying this would work still if NULL pointers were not zero? Remember, if you have a nonzero NULL, casting 0 to a pointer (i.e. ((obj*)0) ) results in some nonzero value internally (say like 0xdeadbeef).
struct foo { int a,b,c; };
#define offsetof(obj,fld) ((int)(&(((obj*)0)->fld)))
printf("The offset of c is 0x%08x",offsetof(foo,c));
The above prints out "The offset of c is 0x00000008". Change NULL to 0xdeadbeef and the above prints out "The offset of c is 0xdeadbef7".
And you never add pointers to each other, because it makes no sense. offsetof() is fine too - it can be defined in the system header file in an appropriate way.
There times where I have seen code reinterpret a pointer of one type and end up doing pointer math with a different type. A simple enough example is a hack that's often used to allocate a single buffer large enough to contain several different objects. We had a guy here write a memory system that checked for buffer overflows by using a front-porch / back-porch data buffers that would often catch corruption. Internally, the memory system did something similar to this:
MemLink *pa; MemFrontPorch *pb; MemBackPorch *pc;
pa=(MemLink *)malloc(sizeof(*pa)+sizeof(*pb)+sizemem+sizeof(*pc));
pb=(MemFrontPorch *)(pa+1); pc=(MemBackPorch *) (((int)(pb+1))+sizemem);
There you have code doing math with dissimilar pointers (albeit incrementally) but "pc" does end up being the result of pointer math from a pointer of "MemLink" and "MemFrontPorch".
I don't see why a non-zero NULL would break any of that, especially the offsetof() thing?
So you're saying this would work still if NULL pointers were not zero? Remember, if you have a nonzero NULL, casting 0 to a pointer results in some nonzero value (say like 0xdeadbeef).
struct foo { int a,b,c; };
#define offsetof(obj,fld) ((int)(&(((obj*)0)->fld)))
printf("The offset of c is 0x%08x",offsetof(foo,c));
The above prints out "The offset of c is 0x00000008". Change NULL to 0xdeadbeef and the above prints out "The offset of c is 0xdeadbef7".
Alien Sex is Danger Sex.
Just out of curiosity sake, although the standard allows NULL pointer to have storage other than zero, is there any real world compiler where this is true?
If so, it would break most code that uses unions with pointers for storage (i.e. load-in-place fixups) and code that relies on extra bits and bit-patterns shared with pointers (i.e. lots of lockfree code stuffs data into what is assumed to be unused bits in pointers). It would probably break a lot of code that uses pointer math as well -- for example, anything using an "offsetof()" style macro.
Basically, I think that people have to KNOW that NULL is going to be represented as 0 (by their compiler) to write some of the code that actually is used in the production world. Any compiler that didn't do this would break so much code that it would not be usable by the general coding population.
Comparing it to IE7 is a little bit like Ford comparing their new car to a horse and cart.
I'd say it's a fair comparison - granted a comparison against IE8 beta would be better. But comparing Apple's browser to the most recently fully supported browser released (IE7) from a different software company (MS) should not be considered unfair. MS has invested millions if not billions in IE development over the years. I'm pretty sure that MS has invested significantly more than Apple in Browser technology.
The fact that IE sucks so much after all this money and time in development and that it's getting it's butt kicked on both standards and performance is a damning statement of Microsoft's competance as a software company.
Yeah, I was going to mention the same thing about system calls requiring a context switch but there are other types of context switches as well.
Actually, in the broadest sense, a context switch can be considered any significant change made to the CPU Machine State.
For example, Intel originally implemented MMX as a CPU context switch that turned off the ability to do floating point (since MMX shared FP registers) and had to be restored via EMMS (Exit MMX MAchine State). When exiting MMX mode, the Pentium had to do some very slow heavy duty internal work that made EMMS take a long time and this significantly hampered MMX programs. Newer CPU's still use the EMMS instruction but shadow registers so they do not actually perform an internal context switch. Also, SSE avoided this context switch by introducing new registers rather than reusing old registers.
Firefox Faster In Wine
And here I was thinking inebriation led to slower brain functions!
It's well known that moderate amounts of alcohol will confer superhuman programming ability. However, you must be extremely careful with the fine tuning of the amount of booze applied to stay within 0.129% and 0.138% B.A.C.
The Internet is for Porn.
I refuse to take anyone or anything seriously that the word, or any form of the word "Synergy"
Silly names are common in the game industry. The PS3 calls it's internal coprocessors Synergistic Processor Units (SPU's for short which is annoying because it's the same acronym as the PS2's audio processor). Then again, they called the PS2 CPU the "Emotion Engine".
OK, let's say you're working on a REAL CHEAP game that you're selling yourself for $20-30. So you spend 3 days and $995 learning enough to make your game even incrementally better (in the game industry we call that "Polish" BTW and that Polish / Flair / Tweaking / Tuning is what separates many great games from simply good games).
Then all you have to do is sell around 50 more copies of your improved game to pay off your investment. Plus what you learn stays with you for future games. I would argue that even "garage" game companies like the ones you mention could get enough out of GDC to justify the cost.
Give GDC a chance. Maybe you should actually go or talk to regular developers who have gone rather than taking the word of one embittered person who is no longer working with the conference.
BTW, if you're a casual programmer and working in your spare time on indie games for artistic reasons, sure GDC may be a bit expensive but there is a student pass for that as well. Plus, I have friends who have volunteered there. You work about 1/3 to 1/2 of the time and you're able to attend lectures for free. If there's something you really want to learn going on while you're supposed to volunteer, you can swap time with other volunteers.
But for a real game developer who makes their living off making profitable games, GDC *IS* cheap for what you get.
Also I'm not sure what you mean by "only $995".
The games being produced for next gen have budgets of $20-40 million. Anything with physical media (not DL) on PS3 or 360 is gonna have a minimum budget of $4-5 million -- it costs a good chunk of that just to get through all the submission and physically disc stamping costs -- not to mention advertising and actual development costs. Being able to make a $30 million dollar game a lot better using techniques that cost $995 to learn is relatively cheap.
it now costs a bazillion dollars to attend
Actually, it's only $995 for the Classic Pass right now (Early Reg) -- if you are "alumni" (attended in the past), you can get in for around $800. If you are willing to share your knowledge and present, you can get a full pass for FREE - two of my coworkers are doing a presentation on how we got MK vs DC to run at 60FPS on Unreal and they got free passes. (I can't refute that we're a AAA title since we were in the top ten in Dec for both 360 and PS3 but at the time his presentation was approved, we hadn't even shipped yet and no one knew how well we would do.)
No matter how you look at it, the cost is relatively cheap to a career game developer for three days of intense learning unavailable anywhere else. The pass itself is the cheapest part of the trip (flights ~= $400-500 + San Fran Hotel in Union Square ~= $200-300 / night).
GDC is *THE* only conference where *ALL* the real top smart guys in the industry are guaranteed to show up for a week and honestly share their knowledge. Microsoft, Sony, Nintendo, NVidia, AMD/ATI, Intel, as well as hundreds of individual developers from companies small (i.e. 2 guys in a garage) to large (EA) present their latest techniques and ideas.
more present rather than future of games
That's actually part of the usefulness. Nearly everything you learn is something that was *ALREADY* successfully integrated in a game. If you want theory or stuff that will be cool when the GFX and CPU become 100X faster, go to SIGGRAPH. GDC, at least for me, has always been about learning stuff you can use *RIGHT* NOW* !!!
You forgot to mention GDC next month which is certainly an important Game Developer Conference. It's not "pure" academics in the sense that most of the talks are not PhD papers being presented like SIGGRAPH (although some of the presentations are indeed PhD papers or purely academic excercises).
Most of the presentations are just a kick-ass developer with some PowerPoint slides sharing how they developed a system in their game. But nearly all the talks are from Real World Game Developers highlighting what actually worked for them.
If you're interested in going, you still have 24 hours to save a bunch of $$$ on Early Registration.
I think that "Darwinism" is used by scientists to describe classical evolution.
And just like "Newtonian" physics, the basic principals are correct (as long as you avoid extremes both large like the speed of light and black holes or small on the atomic scale). Just because many contradictory discoveries have been made since doesn't mean we should throw out Newtonian physics as a tool.
Their graphics chipsets are notoriously subpar
As a professional video game programmer, this story, if true, scares the bejeepers out of me. Playstation (2 and 3) are already much harder to program (relative to PC's and XBOX) and Intel has yet to make a graphics chip that doesn't totally suck. The combination doesn't sound like an ideal development platform.
Actually, now that I think of it... didn't Vista and XBOX 360 have all of those same editions already ?
You'll have to add a couple more... Like "XBOX 3 Starter" where you can only play 3 games on it and then it will tell you that you need to pay $150 for a software "upgrade" if you want to play any new games on the system.
Really, this should be a core part of Windows
This is very insightful. Since Windows already runs AutoUpdate in the background, why waste more resources by having separate update processes running for iTunes, RealPlayer, AntiVirus, Sun Java, Adobe Acrobat, Flash, etc. Why not let 3rd party developers plug into a secure update architecture that lets companies update their signed apps with patches signed with the same signature from a secure server?
And I want to be in control of if it's going to crap or not.
You've already lost control of allowing update apps to run on Windows thru Automatic Updates or if you've installed: A) Adobe Acrobat, B) iTunes / Quicktime, C) RealPlayer, D) Sun Java VM (jqs/jusched), E) Any AntiVirus program. Nearly all programs for windows nowdays come with auto-update baggage that runs constantly in the background -- Google just happens to have come to the game later.
Is that VMWare just fucking works.
That's why went ahead and paid for the version 6 update to run on Vista (I had 5 on XP) even though I had VirtualBox running under Vista. VirtualBox is pretty good for simple stuff but it absolutely breaks down in some areas where VMWare rules - snapshot management for example. VirtualBox has very simple linear snapshots that it still manages to make confusing and can only revert destructively. VMWare has branching snapshots (and cloning) with the ability to non-destructively revert to any snapshot.
FWIW, his wife's computer had two problems and they basically boiled down to this: Roxio and Flash. One problem he solved and the other he was unable to address.
Each one was pegging out a core in a dual-core machine totally bogging it down. He mucked around to disable the unnecessary AVI demux filter installed by Roxio (which is a bloated piece of junk anyhow) but he was never able to figure out why Flash was going crazy so he just left that broken on her machine and figured that with two cores, if one core is pegged at 100% due to a borked app, you can still get stuff done.
It's so easy to break or degrade the performance of a Windows Machine. However, completely fixing performance issue on a Windows Machine is *HARD* (Darn Near Impossible) -- even for one of the smartest guys at Microsoft who has spent his career working deep inside Windows System Internals.
My solution is to keep my system as clean as possible and I run multiple VM's on top of it for stuff that's not as clean. I use VMWare and VirtualBox -- VirtualBox is great for the way it integrates windows from the guest into the host and VMWare is good for debugging or if you need to work with snapshots.
Despite the fact that this device uses DDR2 RAM running at more than 6 GB/sec, it can not saturate 2 SATA interfaces
What would be much smarter is if someone came out with a PCI express card that took RAM slots so it could provide a RAM disk with 6GB/sec throughput instead of the limited ~600 MB/s (SATA 3GB/s X 2 RAID0). On top of that, add multiple memory buses (on card RAID again) to the DIMMs so it could hit the theoretical 16GB/s you get with 16 lanes of PCIe 3.0.
It'd be much nicer if he just gave us the Raw Benchmark times and let us calculate the correct values rather than his statistic percentages which seem to change how they are calculated depending on the case and are sometimes wrongly describe (as in the impossible scenario you mention in your post - more than "100% slowdown "is awfully hard to get without warping reality).
You don't even need to bribe standards bodies. You can just suggest some valid implementation ideas and happen to mention that you own a patent on them after everyone is using them. Heck you can even amend your patents along the way to include the ideas presented to the standards body by your competitors.
So bribes are not required... merely ruthlessness -- RAMBUS and the JEDEC standards body comes to mind. Then again, if you do this, you risk getting caught and fined by the regulators.