Ok, you're not AC so I'll bite. Number one, OSX really does just work for me. I like Linux, I like CentOS for my servers, but I've spent far too much time trying for instance to get my old yet beautiful SGI-1600SW LCD monitors to work; no joy. Number two, I have no trouble supporting family members who use a mac, even a laptop even with wireless. Number three, can I plug my Mini-DV camera into my firewire port and get the video downloaded, edited and burned on a linux laptop? Full disclosure, there was an issue with a recent System Update that borked Quicktime for my camera and I had to download the Quicktime installer and re-stall. Four, I can look at most of Darwin, I can rebuild the kernel (again I think) - but I don't have too. Honestly the best thing about Linux for me is that there is much more software that now works nicely on my mac!
Lastly and this is an earnest question - is there a C++ dev environment that compares favorably to Xcode. The best I've seen so far is CDT in Eclipse, and as much as it pains my to say it, neither work better than VisualStudio for native platform development.
Even later - you can compare our IDs, I've been here awhile.
I can agree to a degree with what you say, however I found bra-ket notation quite useful in getting through QM at Caltech. Sometime you what to know that you are integrating and sometimes you just want to keep track of terms. Same thing using index notions to manipulate the tensors in general rel - can't say I understood the formal math, but I was able to use the notation to work my problems. I particularly like that you bring up the issue with physicists and infinitesimals. My understanding is that for quite some time mathematicians were not fond of Dirac's delta function; that it was not formally well defined (until the 80s ?). But it was exceptionally useful to the physicists who are much more concerned with obtaining physically meaningful results - rather than using mathematically sound notation;-).
Do you know what Feynman said about the relative status of math and physics?
It is over in the sense that I do not expect to see a 30GHz processor any time soon. Not too long ago I had to account for the fact that if I did not get my product out in nine months, the target computer would be twice as fast. In 1977 I had a 1MHz 8bit PC. In 1990 I had a 25MHz 32 bit CPU. 1996 200MHz, in 2002 2GHz. Do you think we will see a factor of 10 to 30Ghz by 2011? Sorry. But I do expect number of cores to double every 18 months. I expect 80 core CPU in 5 years. I'm not sure that the software development tools will keep pace. I doubt that I'll be able to use the 80 cores unless it is through a library call.
Maybe there is still a point for bragging rights, but the physics says there is little point in trying for 30GHz for a CPU. And Intel is going with the physics, I assume AMD uses the same physics.
We had a similar problem at Infocom with some reviewers. The next game we sent out had a room with with a book shelf. One of the books had an inscription unique to each person receiving a review copy. It was quite easy at that point to catch the leaker.
This is unrelated to the original story...
I thought it relevant because I think that Theo is incorrect in asserting that there would be no infringement based on the GPL if all of the code had been replaced function by function. It is my understanding that Copyright also pertains to derivative work even if no line remaining is verbatim from the original. As you point out, it would be hard to prove, which I agree, never the less it would be a violation.
If you were right, all functionally equivalent code should share the same license.
If you develop functionally equivalent software without ever looking at other source code you would not be in violation. From reading the posts, that seems to be what the bc43xx team did. They split into two groups, one group looks at an existing driver, either source code, or object code and develops a specification for how to communicate to the chip. The second team writes code to the specification without looking at code or obj. I can imagine that this seems equally derivative, but the spec is about what the code does, not how it does it.
Consider this other example: You take a GFDL text, let's say, a Wikipedia page. Then you modify it line by line until it becomes equal to the corresponding [Encyclopaedia] Britannica page. Does it make the Britannica subject to the GPL?
This is an interesting analogy. Two thoughts, first one would be violating Britannica Copyright in doing this, not subjecting them to GPL. Second, the GFDL, on my brief reading, actually suggests one must only give credit back as far as five previous revisions, and so it seems to be fundamentally different than the GPL.
I will continue to read and try to understand the GPL in relation to these real world events, but I am glad I am an engineer and not a lawyer.
What you describe as development behind closed doors, I would describe as producing a derivative work. As far as I can tell, if I take GPL code, and then line by line replace it with 'my own' code I am producing a derivative work. Even if I replace all of the original lines, or functions, or units of source, the work I produce would be derivative and subject to the GPL. It may be hard to prove that I used the original source, but it would in fact be a violation of the GPL. Do you disagree?
I am trying to understand your post in terms of the GPL, which is a license. As far as I can tell, if I take GPL code, and then line by line replace it with 'my own' code I am producing a derivative work. Even if I replace all of the original lines, or functions, or units of source, the work I produce would be derivative and subject to the GPL. It may be hard to prove that I used the original source, but it would in fact be a violation of the GPL. Do you disagree?
Yes, gcc 4.2 supports OpenMP. As others note, parallel programming is still not trivial. But OpenMP is very nice. I have a write up on building and testing gcc 4.2 on OS X here: http://alphakilo.com/openmp-on-os-x-using-gcc-42/.
Serious advantages are that OpenMP can be retrofitted to existing C/C++ and Fortran code. I know that everyone prefers to start from scratch and use Erlang or some other solution, but in a project I am working on, we already have about a million lines of C++.
Current OpenMP implementations favor SMP machines, but one can go even further with the Intel OpenMP for clusters solution. I have not tried it myself yet, but I understand that it makes the issue of non-shared memory across the cluster machines transparent.
As in all cases YMMV. But, if your code is amenable to parallelizing, OpenMP is a pretty straight forward way to go.
In the long run, all costs are marginal comparing to personnel expense.
I mostly agree, at least in my experience personnel are 50% or more of my budget; the largest single dollar cost. But time has a cost as well, and here is where I prefer that people not reinvent the wheel because it costs time. I would rather that my team know about both the open source options and the payed for options and pick the best solution among the options. But I find that it usually takes longer to get the payed for options installed and running, so we often have a good solution up and running before we can get the payed for options in the same state. Lastly, I am finding myself tired of the 30 day trial. My when I use a complex development tool, like Rhapsody, it takes me more than 30 days to find the warts. And they all have warts, so once again at least with the open version, if I really hate the warts I can fix them. Fixing it myself does not happen often, but in one case ages ago I was able to fix the gcc 1.34 ARM backend, and that was a huge win.
Advance warning: the work is hardly complete. I've been keeping some notes so that I could post a walk through.
And I have not done the step of pointing XCode at the 4.2 that I built. See: http://alphakilo.com/openmp-on-os-x-using-gcc-42/
Mostly I seem to have been lucky that 4.2 compiled as is on my Powerbook, because it did not do so on my Dual G5 which is of course where I would like to use OpenMP. I'll have to figure out what is on my PB that is not on my G5. And I have an 8 core linux box at work that I might go to instead.
One request Athanasios. If you do try this, I'd like some feedback. Thanks.
The Powerbook reference should have identified me as an acolyte of Steve! Add to that I am stuck in my day job using VS 2003 for some management reason I forget at the moment. But that aside, do you use OpenMP in VS2005, or know of people who are doing so? I just went over the full 2.5 spec so I can map out some strategy for trying OpenMP with our existing software. It is almost 1M lines, and was not designed with Multi-threading in mind. I do think there will be places I can use OpenMP, and the ability to specify exactly where and how gives me some optimism.
I have some small amount of experience with OpenMP http://openmp.org/ , which allows one to modify C++ or Fortran code using pragmas to direct the compiler regarding parallelization of the code. And the Codeplay white paper made this sound much like it implements one of the dozen or so OpenMP patterns. I am fairly skeptical that Codeplay has any advantage over OpenMP, but the white paper lists some purported advantages. I will not copy them here and take the fun out of reading them for yourself. I will list OpenMP advantages.
1: OpenMP is supported by Sun, Intel, IBM, $MS(?) etc, and implemented in gcc 4.2.
2: OpenMP has been used successfully for about 10 years now, and is on a 2.5 release of the SPEC.
3. It is Open - the white paper for Codeplay mentions it being protected by patents. (boo hiss)
4. Did I mention that it is supported in gcc 4.2 which I built it on my Powerbook last week and it is very cool?
So maybe Codeplay is a nice system. Maybe they even have users and can offer support. But if you are looking to make your C++ code run multi-threaded with the least amount of effort I've seen ( It is still effort! ) take a look at OpenMP. In my simple tests it was pretty easy to make use of OpenMP, and I am looking forward to trying it on a rather more complicated application.
If you could have perfectly insulated cylinder liner and piston head you would improve the efficiency of the engine. You are correct, you would burn the fuel hotter, but you want it to burn as hot as possible. Since the Carnot cycle is the best you can get, efficiency = 1-(TEMPlow/TEMPhigh); you clearly want TEMPhigh to be as high as possible. The waste heat in this perfect case is carried out as hot exhaust gas through non-conducting exhaust pipes.
Apple DOS File Formats:
* I: Integer BASIC programs (stored in a compact format, not plain-text).
* A: AppleSoft BASIC programs (also stored in a packed, space-saving format).
* B: Binary files, either executable machine-language programs, or data files.
* T: ASCII text files (or plain-text, unpacked basic programs).
I also seem to think you could list a program, or indeed any output to disk. "LIST PR#6" or some such.
But it has been quite awhile.
I inferred from the article that one might add these devices to the radiator to recapture lost heat, and that it would be done for cars already in use. But your question is quite valid. The actual reason for a radiator in a car engine that has one, is to keep the temperature of the engine low enough so that the moving parts continue to move, that the oil lubricates, and that parts don't actually melt. If one had materials that could take the heat, say piston liners that were excellent insulators and still allowed the piston to move, and all of the excess heat simple exited the cylinder you would not need a radiator. Or if you owned a Beetle, a 2CV, or some other vehicle with an air cooled engine you would not need a radiator.
But fundamental to thermodynamics is that you can not have a cycle more efficient than the Carnot Cycle http://en.wikipedia.org/wiki/Thermodynamic_cycle. This give a max efficiency = 1-(TEMPlow/TEMPhigh), so you always want that low temp to be as low as possible - for a car engine that would be the ambient air. If you have your device, then the hot side is on the engine, and the low side is in the air. But the device itself will get hot, an you will have to blow a lot of air on the cold side to keep it cold. It you let the whole device rise to the same temperature you get no conversion.
The researchers coated two gold electrodes with molecules of benzenedithiol, dibezenedithiol or tribenzenedithiol, then heated one side to create a temperature differential. For each degree Celsius of difference, the researchers measured 8.7 microvolts of electricity for benzenedithiol, 12.9 microvolts for dibezenedithiol, and 14.2 microvolts for tribenzenedithiol. The maximum temperature differential tested was 30 degrees Celsius (54 degrees Fahrenheit).
So the device is a thermocouple. You give is a temperature difference and it generates a small voltage. Notice that the current generated is not mentioned, so we can not even tell how much power is generated. If there is something new here it is that we have an organic Seebeck junction instead of the typical solid state junction.
The article mentions your car's radiator as an example of wasted heat - no doubt - but to use that heat you need to provide, and maintain a heat differential across your 'recapture device'. Likely the device will just act as an insulator, and your radiator will no longer function. If not you will find that you need some huge fan to blow even more air past the radiator, and now the amount of energy you recover is less than that needed to drive your fan.
I also think that the 30% efficiency mentioned for electricity generation is a bit on the low side.
Don't hold your breath.
You could have the first thread processor split the text by white space. Then each block of characters is assigned to any number of processors to find the matching token. I've seen some parsers where the entire document was
read in, converted into an array of tokens before returning back to the calling routine.
I'm in the midst of a project that is trying to use multiple threads, and this example is not far off from the thinking that is going on; by some of the engineer who have not done MT before. Assuming a normal 8 or 16 processor SMP there is a cost of communication between threads that is actually pretty high compared to having a single processor do some character comparison on text. Not saying you couldn't make the above work, but in the example of parsing, the job usually needs to be done from beginning of a translation unit to end. You could not in general start in the middle of a c++ file and expect a parser to make sense of it. That said, if your program has many files, you can parse and compile each on in parallel, with no communication needed between threads, in which case you get a big win. That's where parallel make is your friend.
I remember something along those lines. Are you suggesting that there is more information than 6 reals and a spin? Have a look at http://www.physicsforums.com/showthread.php?t=1121 61 which talks about the wave function of the photon, but I suggest that at least in the experiment originally described in this article we are not free to consider the photon over all space. We know that the photon passed through the mask and that places serious limits on what the wave function can look like.
Ok, you're not AC so I'll bite. Number one, OSX really does just work for me. I like Linux, I like CentOS for my servers, but I've spent far too much time trying for instance to get my old yet beautiful SGI-1600SW LCD monitors to work; no joy. Number two, I have no trouble supporting family members who use a mac, even a laptop even with wireless. Number three, can I plug my Mini-DV camera into my firewire port and get the video downloaded, edited and burned on a linux laptop? Full disclosure, there was an issue with a recent System Update that borked Quicktime for my camera and I had to download the Quicktime installer and re-stall. Four, I can look at most of Darwin, I can rebuild the kernel (again I think) - but I don't have too. Honestly the best thing about Linux for me is that there is much more software that now works nicely on my mac! Lastly and this is an earnest question - is there a C++ dev environment that compares favorably to Xcode. The best I've seen so far is CDT in Eclipse, and as much as it pains my to say it, neither work better than VisualStudio for native platform development. Even later - you can compare our IDs, I've been here awhile.
You win my favorite sig of the week.
I can agree to a degree with what you say, however I found bra-ket notation quite useful in getting through QM at Caltech. Sometime you what to know that you are integrating and sometimes you just want to keep track of terms. Same thing using index notions to manipulate the tensors in general rel - can't say I understood the formal math, but I was able to use the notation to work my problems. I particularly like that you bring up the issue with physicists and infinitesimals. My understanding is that for quite some time mathematicians were not fond of Dirac's delta function; that it was not formally well defined (until the 80s ?). But it was exceptionally useful to the physicists who are much more concerned with obtaining physically meaningful results - rather than using mathematically sound notation ;-).
Do you know what Feynman said about the relative status of math and physics?
I would mod you up if I could - great music.
It is over in the sense that I do not expect to see a 30GHz processor any time soon. Not too long ago I had to account for the fact that if I did not get my product out in nine months, the target computer would be twice as fast. In 1977 I had a 1MHz 8bit PC. In 1990 I had a 25MHz 32 bit CPU. 1996 200MHz, in 2002 2GHz. Do you think we will see a factor of 10 to 30Ghz by 2011? Sorry. But I do expect number of cores to double every 18 months. I expect 80 core CPU in 5 years. I'm not sure that the software development tools will keep pace. I doubt that I'll be able to use the 80 cores unless it is through a library call.
Maybe there is still a point for bragging rights, but the physics says there is little point in trying for 30GHz for a CPU. And Intel is going with the physics, I assume AMD uses the same physics.
We had a similar problem at Infocom with some reviewers. The next game we sent out had a room with with a book shelf. One of the books had an inscription unique to each person receiving a review copy. It was quite easy at that point to catch the leaker.
That should be 2.5 to 3 years FTFAbstract.
This is unrelated to the original story...
I thought it relevant because I think that Theo is incorrect in asserting that there would be no infringement based on the GPL if all of the code had been replaced function by function. It is my understanding that Copyright also pertains to derivative work even if no line remaining is verbatim from the original. As you point out, it would be hard to prove, which I agree, never the less it would be a violation.
If you were right, all functionally equivalent code should share the same license.
If you develop functionally equivalent software without ever looking at other source code you would not be in violation. From reading the posts, that seems to be what the bc43xx team did. They split into two groups, one group looks at an existing driver, either source code, or object code and develops a specification for how to communicate to the chip. The second team writes code to the specification without looking at code or obj. I can imagine that this seems equally derivative, but the spec is about what the code does, not how it does it.
Consider this other example: You take a GFDL text, let's say, a Wikipedia page. Then you modify it line by line until it becomes equal to the corresponding [Encyclopaedia] Britannica page. Does it make the Britannica subject to the GPL?
This is an interesting analogy. Two thoughts, first one would be violating Britannica Copyright in doing this, not subjecting them to GPL. Second, the GFDL, on my brief reading, actually suggests one must only give credit back as far as five previous revisions, and so it seems to be fundamentally different than the GPL.
I will continue to read and try to understand the GPL in relation to these real world events, but I am glad I am an engineer and not a lawyer.
I'd mod you up - this seems to be missing from most comments, that if you put the GPL in as a placeholder and work from there it is derivative.
What you describe as development behind closed doors, I would describe as producing a derivative work. As far as I can tell, if I take GPL code, and then line by line replace it with 'my own' code I am producing a derivative work. Even if I replace all of the original lines, or functions, or units of source, the work I produce would be derivative and subject to the GPL. It may be hard to prove that I used the original source, but it would in fact be a violation of the GPL. Do you disagree?
I am trying to understand your post in terms of the GPL, which is a license. As far as I can tell, if I take GPL code, and then line by line replace it with 'my own' code I am producing a derivative work. Even if I replace all of the original lines, or functions, or units of source, the work I produce would be derivative and subject to the GPL. It may be hard to prove that I used the original source, but it would in fact be a violation of the GPL. Do you disagree?
Yes, gcc 4.2 supports OpenMP. As others note, parallel programming is still not trivial. But OpenMP is very nice. I have a write up on building and testing gcc 4.2 on OS X here: http://alphakilo.com/openmp-on-os-x-using-gcc-42/.
Serious advantages are that OpenMP can be retrofitted to existing C/C++ and Fortran code. I know that everyone prefers to start from scratch and use Erlang or some other solution, but in a project I am working on, we already have about a million lines of C++.
Current OpenMP implementations favor SMP machines, but one can go even further with the Intel OpenMP for clusters solution. I have not tried it myself yet, but I understand that it makes the issue of non-shared memory across the cluster machines transparent.
As in all cases YMMV. But, if your code is amenable to parallelizing, OpenMP is a pretty straight forward way to go.
Thanks! Spelling is not my forte.
Advance warning: the work is hardly complete. I've been keeping some notes so that I could post a walk through. And I have not done the step of pointing XCode at the 4.2 that I built. See: http://alphakilo.com/openmp-on-os-x-using-gcc-42/
Mostly I seem to have been lucky that 4.2 compiled as is on my Powerbook, because it did not do so on my Dual G5 which is of course where I would like to use OpenMP. I'll have to figure out what is on my PB that is not on my G5. And I have an 8 core linux box at work that I might go to instead.
One request Athanasios. If you do try this, I'd like some feedback. Thanks.
The Powerbook reference should have identified me as an acolyte of Steve! Add to that I am stuck in my day job using VS 2003 for some management reason I forget at the moment. But that aside, do you use OpenMP in VS2005, or know of people who are doing so? I just went over the full 2.5 spec so I can map out some strategy for trying OpenMP with our existing software. It is almost 1M lines, and was not designed with Multi-threading in mind. I do think there will be places I can use OpenMP, and the ability to specify exactly where and how gives me some optimism.
1: OpenMP is supported by Sun, Intel, IBM, $MS(?) etc, and implemented in gcc 4.2.
2: OpenMP has been used successfully for about 10 years now, and is on a 2.5 release of the SPEC.
3. It is Open - the white paper for Codeplay mentions it being protected by patents. (boo hiss)
4. Did I mention that it is supported in gcc 4.2 which I built it on my Powerbook last week and it is very cool?
So maybe Codeplay is a nice system. Maybe they even have users and can offer support. But if you are looking to make your C++ code run multi-threaded with the least amount of effort I've seen ( It is still effort! ) take a look at OpenMP. In my simple tests it was pretty easy to make use of OpenMP, and I am looking forward to trying it on a rather more complicated application.
Mod Parent Up please - he crushes GP with actual data!
If you could have perfectly insulated cylinder liner and piston head you would improve the efficiency of the engine. You are correct, you would burn the fuel hotter, but you want it to burn as hot as possible. Since the Carnot cycle is the best you can get, efficiency = 1-(TEMPlow/TEMPhigh); you clearly want TEMPhigh to be as high as possible. The waste heat in this perfect case is carried out as hot exhaust gas through non-conducting exhaust pipes.
It's been awhile, but my recollection is that saving as
But fundamental to thermodynamics is that you can not have a cycle more efficient than the Carnot Cycle http://en.wikipedia.org/wiki/Thermodynamic_cycle. This give a max efficiency = 1-(TEMPlow/TEMPhigh), so you always want that low temp to be as low as possible - for a car engine that would be the ambient air. If you have your device, then the hot side is on the engine, and the low side is in the air. But the device itself will get hot, an you will have to blow a lot of air on the cold side to keep it cold. It you let the whole device rise to the same temperature you get no conversion.
You could have the first thread processor split the text by white space. Then each block of characters is assigned to any number of processors to find the matching token. I've seen some parsers where the entire document was read in, converted into an array of tokens before returning back to the calling routine.
I'm in the midst of a project that is trying to use multiple threads, and this example is not far off from the thinking that is going on; by some of the engineer who have not done MT before. Assuming a normal 8 or 16 processor SMP there is a cost of communication between threads that is actually pretty high compared to having a single processor do some character comparison on text. Not saying you couldn't make the above work, but in the example of parsing, the job usually needs to be done from beginning of a translation unit to end. You could not in general start in the middle of a c++ file and expect a parser to make sense of it. That said, if your program has many files, you can parse and compile each on in parallel, with no communication needed between threads, in which case you get a big win. That's where parallel make is your friend.
My spelling is nothing to brag about - but that was in fact intentional. I'm glad someone actually noticed.
I remember something along those lines. Are you suggesting that there is more information than 6 reals and a spin? Have a look at http://www.physicsforums.com/showthread.php?t=1121 61 which talks about the wave function of the photon, but I suggest that at least in the experiment originally described in this article we are not free to consider the photon over all space. We know that the photon passed through the mask and that places serious limits on what the wave function can look like.