My god, how many times do we have to go over the same ground?
Using a method to do something unintended does not cause bugs, it makes them more likely and is bad form.
I don't know what to say here. If you really believe this, I don't think there is much more to discuss, as we are clearly operating on different wavelengths (and I hope you never ever get a job as a computer programmer!). Consider another example:
function sqrt(x). Precondition: x is a positive real number. Postcondition: result' = a positive real number such that result' * result' = x
Your statement is "Using a method to do something unintended does not cause bugs,...". Do you really think that calling sqrt(-1), given that specification above, is not a bug?!?! If you do think it is a bug, can you explain how this example is different to the one in the Browser selection box, where a function with a specification
function sort(array, comp). Precondition: comp is a comparison function that defines a strict weak ordering on array. Postcondition: array' satisfies comp(array'[i], array'[i+1]), for i=0,1,...,N-2, where N = length(array).
is called with a comparitor comp that doesn't satisfy a strict weak ordering?
You might be correct, that the naive quicksort algorithm as presented on Wikipedia would actually produce a proper random shuffle, if given a `coin toss comparitor' as input. But my point still stands: the naive algorithm isn't optimal, because you can do better than choosing random pivots, and also for small arrays quicksort is inefficient anyway. In any production implementation of quicksort, it isn't going to recurse all the way down to length 1 arrays, rather it will stop at length 3, or maybe more, and use some other sort function on the short array.
If you don't choose the pivots to be uniformly distributed, the resulting shuffle is biased. For example, if you choose the middle element to be the pivot, then on an array of length 3, ABC, with B as the pivot element, you get ACB,CAB,BAC,BCA each with probability 0.125, and ABC,CBA with probability 0.25. There is nothing in the specification of QuickSort that says that this is an invalid implementation! Note that the Javascript doesn't even specify QuickSort as the algorithm to begin with. The chances of any browser implementing the Javascript sort function via the exact implementation of QuickSort that you wrote above essentially zero.
Sorry, that wasn't clear: I meant to say O(N^2) operations. I'm using the convention that a single iteration of bubble sort is a loop over all the elements in the array, comparing (and optionally swapping) elements a[i] and a[i+1], so that each iteration is O(N) operations. The complete bubble sort is, for worst case, O(N^2) because it takes in worst case ~N iterations.
Yeah that is exactly what I wanted because the article was about why a particular javascript implementation produced a poor distribution for the browser selection screen in the EU browser ballot. That is a specifc bug in a specific implementation.
No, the bug was not in any specific implementation of Javascript. The bug was in the code that called sort() with invalid input. It is unreasonable to expect that a function will do what you want it to do, if what you want is outside of the specifications of the function. Here is a challenge for you: produce a sort function, that functions as a usual sort function when provided with a comparitor that defines a strict weak ordering, but when supplied with a comparitor that produces random coin toss output produces an unbiased random shuffle. I think you will have great difficulty doing this! It will almost certainly result in a non-optimal function.
I can tell you that failure to do array bounds checking before loads/stores will lead to bugs as well.
No, that is very rare indeed. The only times where lack of array bounds checking is an actual bug is where the index into the array is not well controlled (eg, it came from user input). In 99% of cases, the index into the array is some previously computed value, and if it happens to lie outside the array bound, then an error has already occurred, somewhere prior to the array indexing. That doesn't mean that array bounds checking isn't useful: it is very useful, but the bug that led to the array index out of bounds has already happened by the time the indexing itself occurs. It is only a diagnostic tool, like a CCTV camera recording the identity of a murderer - by the time you see the recording, the murder already happened.
And if you run bubble sort, as described in basic algorithms, it will always terminate (regardless of the comparator) since progress is always made via the loop indexing.
The usual implementation of bubble sort keeps a flag to indicate whether any swaps were performed on the current iteration. If no swaps were performed, the algorithm exits because (for a well defined comparitor) the array must be in order. Keep looping until no swaps were performed.
It is also possible to loop for exactly N iterations, because it can be proven (again, for a well defined comparitor) that at most N iterations will be performed. But this is slower on average, because it ALWAYS performs O(N^2) iterations, whereas if you check the number of swaps and terminate once the array is in order, the average case can be less then O(N^2). For example, if the array is already sorted, the algorithm can exit after 1 iteration.
any reasonable sorting algorithm should terminate very quickly even with the incorrect comparison function
What gives you that idea? Ideally, if you supply an invalid comparitor to a sort function, then a quality implementation will do whatever is best to aid debugging (especially if it has a debug mode activated). Some examples of what I would expect: crash with a segfault and activate a debugger; throw an exception; go into an infinite loop and wait for a programmer to attach a debugger.
The worst possible case would be to execution to continue as if there was no error, when in fact the postcondition of sort() is not satisfied and the state of the program may be logically inconsistent.
But issue was poor distribution in the random numbers
No, the random numbers themselves were just fine. If there was a problem with the random number generator, then the results in the section 'Fixing the Microsoft Shuffle' in the article would have not produced a uniform distribution.
The real problem is explained clearly in the article:
If you know anything about sorting, you can see the problem here. Sorting requires a self-consistent definition of ordering. The following assertions must be true if sorting is to make any sense at all:
[...snip definitions of less-than and equivance operators...] All of these statements are violated by the given Microsoft comparison function. Since the comparison function returns random results, a sort routine that depends on any of these logical implications would receive inconsistent information regarding the progress of the sort.
Garbage In, Garbage Out.
If you want to analyze the behavior of a specific implementation of an algorithm given input that violates the preconditions, then lookup the source code for your javascript interpreter. That may be a fun exercise to do, if you are bored, but it isn't very illuminating unless you want to understand why browser X produced that specific distribution. If you call sort() on data that doesn't satisfy the requirements of a comparitor, then you are not actually sorting the data. You can follow through the algorithm and see what it would do instead, but for sure it isn't sorting it. Consider for example the behavior of a typical hand-coded routine for sorting an array length 3 (sorry about intending, can't figure out how to get it to work properly in ecode):
sort3(a,b,c) { if (b < a) { if (c < b) { swap(a,c); } else { swap(a,b); if (c < b) swap(b,c); } } else { if (c < b) { swap(b,c); if (b < a) swap(a,b); } } }
For an exercise, try following through the probabilities of each outcome, if we replace the comparison operation with a coin toss. An unbiased random shuffle should have an equal probability of producing each permutation of the array. For 3 numbers, there are 6 possible permutations so each outcome should have probability 1/6. Is that satisfied here? (hint: no!) Try the same exercise with [insert your favorite sort algorithm here]... Try it with bubble sort too. That is probably what Rob had in mind with the 'may cause infinite loop' comment.
Unless you have some non-garbage to contribute to this discussion, I'm out of here.
You are still confusing idealized algorithms with real-world implementations. Where in the javascript specification does it say that the sort() function must use QuickSort? And even more specifically, where does it say that the QuickSort implementation will coincide exactly with the idealized version you learned in CS101 ?
In practice, implementations of sort() generally use something other than QuickSort whenever the array (or partition) is smaller than some (small) fixed size. This is because using QuickSort to sort a very short array is actually quite slow, much slower than other algorithms (consider for example the sequence of operations performed by QuickSort on an array of 3 numbers, compared with a simple hand-coded direct sort). So, even if the Javascript implementations in question are using an algorithm based on QuickSort for large arrays, it is quite likely that for the array of 5 numbers it is using a completely different algorithm. How are you to know whether that algorithm is guaranteed to terminate if given ill-formed input?
that does not tell us what the distribution errors are caused by
Huh? The distribution errors are caused by the comparitor, that violates the precondition for the sort() function. Full stop, end of story. The actual distribution will be likely depend sensitively on the details of the sort implementation, which it almost certainly the case is since it appears to be a different distribution for every browser. If you can get hold of the source code of the javascript interpreter you might be able to see how sort() was implemented in a specific case, and understand how the actual distribution arose, but that isn't a very useful thing to do. It may well change in the next 0.01 version of the browser anyway.
Wow, did you 'graduate' from the same school as the Microsoft programmer who wrote this code?
The sort function requires that the comparison function defines a strict weak ordering. Anything else violates the precondition, and the result of calling sort with a bad comparitor is completely unspecified. Not long ago on comp.lang.c++.moderated there was a query from someone complaining about what appeared to be a bug in their standard library sort() function, which was consistently crashing. It turned out their comparitor was faulty, and the sort function was rolling off the end of the array and accessing beyond the array bound.
Reminds me of my days when I was a counterculture Left-wing hippie radical (basically, what "mainstream" Democrats are today).
That is ridiculous. The USA Democrats are certainly to the left of the Republicans, but I would suggest that they are to the right of any mainstream political party in Europe. But perhaps you can suggest any counter example?
"Directly" has nothing to do with it; everything uses energy in its production...
We've gone from "everything generates CO2", to "everything uses energy". This is some progress!
the vast majority of energy produces CO2 - including humans attached to rickshaws
No, that is false. There is no reason why that activity needs to generate net CO2. The cycle is: plants absorb CO2 from atmosphere and turn it into biomass, including food. Human eats food which gives him/her energy to power the rickshaw and breaths out CO2. As long as there is no fossil fuel use and no net loss of biomass, the total change in CO2 in this cycle is zero.
That is demonstrably bullshit. There are plenty of economic activities that don't generate CO2. In fact, coming from the opposite direction, there are very few activities that directly generate CO2. Most wealth generating activities (eg, manufacturing, services) don't directly generate CO2, but rather consume energy. Energy generation doesn't necessarily require generating CO2 (eg, renewable sources or nuclear).
Plus, there are side benefits to reducing CO2 output. Reducing the amount of polluting industry will lead to a direct increase in population health and productivity, and ultimately to living standards. This may not be enough to completely counterbalance 'lost' wealth due to not having cheap energy from fossil fuels, but it certainly isn't true to say that reducing CO2 will inevitably reduce economic activity. In fact, I think it would go the other way: if it takes more effort to generate energy by non-CO2 generating means, then more economic activity will be devoted to doing that. Perhaps that means that the end products (goods, services) become slightly more expensive, but that isn't inevitable either, and there are offsets (reduced pollution, fewer environmental costs).
Your comment in your other reply, "Less efficient, more expensive energy translates directly into lower economic activity." is nonsense. There is no such direct relationship. If energy is more expensive, then it will tend to push economic activity into areas of production that are less energy intensive. It doesn't mean that there is inevitably less economic activity overall.
Actually, you can tell, but in the opposite sense: it is exceptionally rare to get a natural diamond that has absolutely no imperfections; even the best usually have some minor flaw. On the other hand, it is relatively common to produce an artificial diamond that is flawless. De Beers and other companies have gone to quite some lengths to keep these diamonds away from the consumer market.
Any person in any country in the world could buy a bag of Monsanto corn...
Are you sure about that? I'm not a farmer, and I don't know anyone who has had anything to do with Monsanto corn, but I wouldn't be surprised if there was a contract that you need to sign before buying Monsanto GM corn.
I note that this is essentially the opposite strategy that Microsoft has pursued. Microsoft Research division has a reputation for taking in extremely good and promising talent and then seeing essentially zero outcome from it. Microsoft basically use MS Research as a place to coral people that they don't want anyone else to hire, for fear that they will do something disruptive to Microsoft. Microsoft don't know what to do with them, but as long as they are not working for a competitor, they are no threat. So they basically bury them.
Not so, the constitution is supposed to apply to everyone, certainly everyone on US soil. That is why they use Guantanamo bay, Cuba: to avoid bringing people to US territory, and avoid the 'complication' of the constitution.
These so-called "scientists" actually went to the other extreme by trying to hide the divergence and present a view that was not supported by their actual research.
That is BS. If you bothered to read the refutations, the divergences are themselves a subject of many publications, and this has been out in the open forever.
I do agree that access to the raw data could be better, and even that some of the statistical methods etc have been applied poorly (or even incorrectly). You might even find, somewhere in the stack of tens of thousands of climate science publications, some that misrepresent the data, perhaps even deliberately. Not all scientists are as expert as they should be in statistics, and scientists are human and have human frailties (although that doesn't excuse anything). But this does not appear to be one of those cases. You are reading far too much into one email, and you clearly are not aware of the context.
If all of the science of global climate change depended on a single set of proxy data, then you would have a point. But it doesn't, and you don't.
Yes, actually since posting off that reply, I found a link on skepticalscience that does exactly that, it is a small effect but quite measureable. But yeah the whole thing is silly, I don't think anyone is arguing that the CO2 is not antropogenic, the 'argument' is elsewhere.
Most/all countries do have some kind of medical licensing bureau and required certification for practising as a medical doctor. Of course, that is no guarantee that the system works - especially in the case where you describe where a corporation is behind the fraud and can probably exert some leverage within the system itself.
But I don't think that is an excuse for replacing a proper system of oversight of doctors with a system where bureaucrats with no medical expertise can override decisions and cut off payments at a whim.
Right, but as I understand it, the total exchange of CO2 in the global carbon cycle is much bigger than the total atmospheric CO2. Each year a large fraction of the atmospheric CO2 is absorbed by vegetation and a similar amount is released by decaying biomass and burning fossil fuels, of which I think somewhat less than 10% can be attributed to human activity. The increase of atmospheric CO2 per year is a small faction of the overall cycle, so this would tend to overwhelm any attempt to trace the source of CO2.
See my previous reply. True, I had completely forgotton about isotopes. But I'm doubtful that you could turn this into a useful test of atmosphereic CO2 composition. Even if you can, does anyone argue about the source anyway? I don't see anyone arguing this point.
Try reading that again: "adding in the real temps [...] to hide the decline."
So, it is some kind of proxy for measuring the historical temperatures (in this case, tree rings), and this proxy data, for some completely different reason (pollution affecting the tree growth, for example??), shows a decline in the last couple of decades.
The real temperatures (ie, the ones that are actaully measured, like with a thermometer) show an increase, so use the real measurements for the final 20 years of the data.
There would be more of a problem if this wasn't disclosed somewhere. But even then, it is an argument about how the proxy data is presented. The real temperature data doesn't show a decline.
CO2 is a molecule, containing one carbon atom and two oxygen atoms. One CO2 molecule is indistinguishable from another[*], so in principle no there is no test to determine whether any particular CO2 molecule coems from a fossil fuel or from another source.
The obvious thing to do however is to measure and estimate the amount of man-made CO2, by summing up the CO2 emitted by smoke stacks, agriculture, forest clearing etc. Given this, I don't think anyone denies that the CO2 increase in the atmosphere comes from any natural source. In fact, so far the inceases in CO2 in the atmosphere has been less than humans have been emitting, due to some natural carbon sinks. For example, small amounts of carbon (but huge on a planetary scale) get dissolved in the oceans. These sinks have limits though, when the natural carbon sinks start to saturate it will only make the problem worse.
[*] Ok, a pedant might argue that it has some internal degrees of freedom, nuclear hyperfine levels etc, that are irrelevant here.
So if I get a doctors note for a sore back but Manulife have pictures of me enjoying a football match then they have no right to reverse the doctors' diagnosis?
I think they should have no right to reverse the doctor's diagnosis. I think they do have the right to insist that you get another diagnosis from another doctor, and I think they do have the right to send the name of the doctor who performed the original diagnosis and the evidence to some kind of medical fraud tribunal. But I do not agree with a layman overturning an expert opinon. By all means question the qualifications of the expert, or second opinion, etc, but don't think that a layman knows best, even in cases where it would appear 'obvious'. In too many cases, 'obvious' turns out to be not obvious not at all.
Of course, but that is a rather blunt tool. It also means that users cannot compile their own codes, for example. So it is useless if the users are also software developers.
It also does nothing to stop scripts from running, which is quite significant since you can certainly get some serious software that is written in eg perl, python, or even java. Indeed, there is probably an open source C interpreter somewhere one could use to run pretty much anything. Ideally the interpreter will be itself written in POSIX sh!;-)
Not even that, unix/linux has always allowed users to install software into their home directory. There is very little that can be done to prevent that actually; even on windows, it is only the package management conventions that disallow local installations.
My god, how many times do we have to go over the same ground?
I don't know what to say here. If you really believe this, I don't think there is much more to discuss, as we are clearly operating on different wavelengths (and I hope you never ever get a job as a computer programmer!). Consider another example:
Your statement is "Using a method to do something unintended does not cause bugs, ...". Do you really think that calling sqrt(-1), given that specification above, is not a bug?!?! If you do think it is a bug, can you explain how this example is different to the one in the Browser selection box, where a function with a specification
is called with a comparitor comp that doesn't satisfy a strict weak ordering?
You might be correct, that the naive quicksort algorithm as presented on Wikipedia would actually produce a proper random shuffle, if given a `coin toss comparitor' as input. But my point still stands: the naive algorithm isn't optimal, because you can do better than choosing random pivots, and also for small arrays quicksort is inefficient anyway. In any production implementation of quicksort, it isn't going to recurse all the way down to length 1 arrays, rather it will stop at length 3, or maybe more, and use some other sort function on the short array.
If you don't choose the pivots to be uniformly distributed, the resulting shuffle is biased. For example, if you choose the middle element to be the pivot, then on an array of length 3, ABC, with B as the pivot element, you get ACB,CAB,BAC,BCA each with probability 0.125, and ABC,CBA with probability 0.25. There is nothing in the specification of QuickSort that says that this is an invalid implementation! Note that the Javascript doesn't even specify QuickSort as the algorithm to begin with. The chances of any browser implementing the Javascript sort function via the exact implementation of QuickSort that you wrote above essentially zero.
Sorry, that wasn't clear: I meant to say O(N^2) operations. I'm using the convention that a single iteration of bubble sort is a loop over all the elements in the array, comparing (and optionally swapping) elements a[i] and a[i+1], so that each iteration is O(N) operations. The complete bubble sort is, for worst case, O(N^2) because it takes in worst case ~N iterations.
No, the bug was not in any specific implementation of Javascript. The bug was in the code that called sort() with invalid input. It is unreasonable to expect that a function will do what you want it to do, if what you want is outside of the specifications of the function. Here is a challenge for you: produce a sort function, that functions as a usual sort function when provided with a comparitor that defines a strict weak ordering, but when supplied with a comparitor that produces random coin toss output produces an unbiased random shuffle. I think you will have great difficulty doing this! It will almost certainly result in a non-optimal function.
No, that is very rare indeed. The only times where lack of array bounds checking is an actual bug is where the index into the array is not well controlled (eg, it came from user input). In 99% of cases, the index into the array is some previously computed value, and if it happens to lie outside the array bound, then an error has already occurred, somewhere prior to the array indexing. That doesn't mean that array bounds checking isn't useful: it is very useful, but the bug that led to the array index out of bounds has already happened by the time the indexing itself occurs. It is only a diagnostic tool, like a CCTV camera recording the identity of a murderer - by the time you see the recording, the murder already happened.
The usual implementation of bubble sort keeps a flag to indicate whether any swaps were performed on the current iteration. If no swaps were performed, the algorithm exits because (for a well defined comparitor) the array must be in order. Keep looping until no swaps were performed.
It is also possible to loop for exactly N iterations, because it can be proven (again, for a well defined comparitor) that at most N iterations will be performed. But this is slower on average, because it ALWAYS performs O(N^2) iterations, whereas if you check the number of swaps and terminate once the array is in order, the average case can be less then O(N^2). For example, if the array is already sorted, the algorithm can exit after 1 iteration.
What gives you that idea? Ideally, if you supply an invalid comparitor to a sort function, then a quality implementation will do whatever is best to aid debugging (especially if it has a debug mode activated). Some examples of what I would expect: crash with a segfault and activate a debugger; throw an exception; go into an infinite loop and wait for a programmer to attach a debugger.
The worst possible case would be to execution to continue as if there was no error, when in fact the postcondition of sort() is not satisfied and the state of the program may be logically inconsistent.
Did you actually read the article?
No, the random numbers themselves were just fine. If there was a problem with the random number generator, then the results in the section 'Fixing the Microsoft Shuffle' in the article would have not produced a uniform distribution.
The real problem is explained clearly in the article:
Garbage In, Garbage Out.
If you want to analyze the behavior of a specific implementation of an algorithm given input that violates the preconditions, then lookup the source code for your javascript interpreter. That may be a fun exercise to do, if you are bored, but it isn't very illuminating unless you want to understand why browser X produced that specific distribution. If you call sort() on data that doesn't satisfy the requirements of a comparitor, then you are not actually sorting the data. You can follow through the algorithm and see what it would do instead, but for sure it isn't sorting it. Consider for example the behavior of a typical hand-coded routine for sorting an array length 3 (sorry about intending, can't figure out how to get it to work properly in ecode):
For an exercise, try following through the probabilities of each outcome, if we replace the comparison operation with a coin toss. An unbiased random shuffle should have an equal probability of producing each permutation of the array. For 3 numbers, there are 6 possible permutations so each outcome should have probability 1/6. Is that satisfied here? (hint: no!) Try the same exercise with [insert your favorite sort algorithm here]... Try it with bubble sort too. That is probably what Rob had in mind with the 'may cause infinite loop' comment.
Unless you have some non-garbage to contribute to this discussion, I'm out of here.
You are still confusing idealized algorithms with real-world implementations. Where in the javascript specification does it say that the sort() function must use QuickSort? And even more specifically, where does it say that the QuickSort implementation will coincide exactly with the idealized version you learned in CS101 ?
In practice, implementations of sort() generally use something other than QuickSort whenever the array (or partition) is smaller than some (small) fixed size. This is because using QuickSort to sort a very short array is actually quite slow, much slower than other algorithms (consider for example the sequence of operations performed by QuickSort on an array of 3 numbers, compared with a simple hand-coded direct sort). So, even if the Javascript implementations in question are using an algorithm based on QuickSort for large arrays, it is quite likely that for the array of 5 numbers it is using a completely different algorithm. How are you to know whether that algorithm is guaranteed to terminate if given ill-formed input?
Huh? The distribution errors are caused by the comparitor, that violates the precondition for the sort() function. Full stop, end of story. The actual distribution will be likely depend sensitively on the details of the sort implementation, which it almost certainly the case is since it appears to be a different distribution for every browser. If you can get hold of the source code of the javascript interpreter you might be able to see how sort() was implemented in a specific case, and understand how the actual distribution arose, but that isn't a very useful thing to do. It may well change in the next 0.01 version of the browser anyway.
Wow, did you 'graduate' from the same school as the Microsoft programmer who wrote this code?
The sort function requires that the comparison function defines a strict weak ordering. Anything else violates the precondition, and the result of calling sort with a bad comparitor is completely unspecified. Not long ago on comp.lang.c++.moderated there was a query from someone complaining about what appeared to be a bug in their standard library sort() function, which was consistently crashing. It turned out their comparitor was faulty, and the sort function was rolling off the end of the array and accessing beyond the array bound.
That is ridiculous. The USA Democrats are certainly to the left of the Republicans, but I would suggest that they are to the right of any mainstream political party in Europe. But perhaps you can suggest any counter example?
We've gone from "everything generates CO2", to "everything uses energy". This is some progress!
No, that is false. There is no reason why that activity needs to generate net CO2. The cycle is: plants absorb CO2 from atmosphere and turn it into biomass, including food. Human eats food which gives him/her energy to power the rickshaw and breaths out CO2. As long as there is no fossil fuel use and no net loss of biomass, the total change in CO2 in this cycle is zero.
That is demonstrably bullshit. There are plenty of economic activities that don't generate CO2. In fact, coming from the opposite direction, there are very few activities that directly generate CO2. Most wealth generating activities (eg, manufacturing, services) don't directly generate CO2, but rather consume energy. Energy generation doesn't necessarily require generating CO2 (eg, renewable sources or nuclear).
Plus, there are side benefits to reducing CO2 output. Reducing the amount of polluting industry will lead to a direct increase in population health and productivity, and ultimately to living standards. This may not be enough to completely counterbalance 'lost' wealth due to not having cheap energy from fossil fuels, but it certainly isn't true to say that reducing CO2 will inevitably reduce economic activity. In fact, I think it would go the other way: if it takes more effort to generate energy by non-CO2 generating means, then more economic activity will be devoted to doing that. Perhaps that means that the end products (goods, services) become slightly more expensive, but that isn't inevitable either, and there are offsets (reduced pollution, fewer environmental costs).
Your comment in your other reply, "Less efficient, more expensive energy translates directly into lower economic activity." is nonsense. There is no such direct relationship. If energy is more expensive, then it will tend to push economic activity into areas of production that are less energy intensive. It doesn't mean that there is inevitably less economic activity overall.
Actually, you can tell, but in the opposite sense: it is exceptionally rare to get a natural diamond that has absolutely no imperfections; even the best usually have some minor flaw. On the other hand, it is relatively common to produce an artificial diamond that is flawless. De Beers and other companies have gone to quite some lengths to keep these diamonds away from the consumer market.
Are you sure about that? I'm not a farmer, and I don't know anyone who has had anything to do with Monsanto corn, but I wouldn't be surprised if there was a contract that you need to sign before buying Monsanto GM corn.
I note that this is essentially the opposite strategy that Microsoft has pursued. Microsoft Research division has a reputation for taking in extremely good and promising talent and then seeing essentially zero outcome from it. Microsoft basically use MS Research as a place to coral people that they don't want anyone else to hire, for fear that they will do something disruptive to Microsoft. Microsoft don't know what to do with them, but as long as they are not working for a competitor, they are no threat. So they basically bury them.
Not so, the constitution is supposed to apply to everyone, certainly everyone on US soil. That is why they use Guantanamo bay, Cuba: to avoid bringing people to US territory, and avoid the 'complication' of the constitution.
That is BS. If you bothered to read the refutations, the divergences are themselves a subject of many publications, and this has been out in the open forever.
I do agree that access to the raw data could be better, and even that some of the statistical methods etc have been applied poorly (or even incorrectly). You might even find, somewhere in the stack of tens of thousands of climate science publications, some that misrepresent the data, perhaps even deliberately. Not all scientists are as expert as they should be in statistics, and scientists are human and have human frailties (although that doesn't excuse anything). But this does not appear to be one of those cases. You are reading far too much into one email, and you clearly are not aware of the context.
If all of the science of global climate change depended on a single set of proxy data, then you would have a point. But it doesn't, and you don't.
Yes, actually since posting off that reply, I found a link on skepticalscience that does exactly that, it is a small effect but quite measureable. But yeah the whole thing is silly, I don't think anyone is arguing that the CO2 is not antropogenic, the 'argument' is elsewhere.
Right, I also found http://www.skepticalscience.com/human-co2-smaller-than-natural-emissions.htm which contains a good explanation of isotopic measurements of atmospheric carbon.
Most/all countries do have some kind of medical licensing bureau and required certification for practising as a medical doctor. Of course, that is no guarantee that the system works - especially in the case where you describe where a corporation is behind the fraud and can probably exert some leverage within the system itself.
But I don't think that is an excuse for replacing a proper system of oversight of doctors with a system where bureaucrats with no medical expertise can override decisions and cut off payments at a whim.
Right, but as I understand it, the total exchange of CO2 in the global carbon cycle is much bigger than the total atmospheric CO2. Each year a large fraction of the atmospheric CO2 is absorbed by vegetation and a similar amount is released by decaying biomass and burning fossil fuels, of which I think somewhat less than 10% can be attributed to human activity. The increase of atmospheric CO2 per year is a small faction of the overall cycle, so this would tend to overwhelm any attempt to trace the source of CO2.
See my previous reply. True, I had completely forgotton about isotopes. But I'm doubtful that you could turn this into a useful test of atmosphereic CO2 composition. Even if you can, does anyone argue about the source anyway? I don't see anyone arguing this point.
Try reading that again: "adding in the real temps [...] to hide the decline."
So, it is some kind of proxy for measuring the historical temperatures (in this case, tree rings), and this proxy data, for some completely different reason (pollution affecting the tree growth, for example??), shows a decline in the last couple of decades.
The real temperatures (ie, the ones that are actaully measured, like with a thermometer) show an increase, so use the real measurements for the final 20 years of the data.
There would be more of a problem if this wasn't disclosed somewhere. But even then, it is an argument about how the proxy data is presented. The real temperature data doesn't show a decline.
CO2 is a molecule, containing one carbon atom and two oxygen atoms. One CO2 molecule is indistinguishable from another[*], so in principle no there is no test to determine whether any particular CO2 molecule coems from a fossil fuel or from another source.
The obvious thing to do however is to measure and estimate the amount of man-made CO2, by summing up the CO2 emitted by smoke stacks, agriculture, forest clearing etc. Given this, I don't think anyone denies that the CO2 increase in the atmosphere comes from any natural source. In fact, so far the inceases in CO2 in the atmosphere has been less than humans have been emitting, due to some natural carbon sinks. For example, small amounts of carbon (but huge on a planetary scale) get dissolved in the oceans. These sinks have limits though, when the natural carbon sinks start to saturate it will only make the problem worse.
[*] Ok, a pedant might argue that it has some internal degrees of freedom, nuclear hyperfine levels etc, that are irrelevant here.
I think they should have no right to reverse the doctor's diagnosis. I think they do have the right to insist that you get another diagnosis from another doctor, and I think they do have the right to send the name of the doctor who performed the original diagnosis and the evidence to some kind of medical fraud tribunal. But I do not agree with a layman overturning an expert opinon. By all means question the qualifications of the expert, or second opinion, etc, but don't think that a layman knows best, even in cases where it would appear 'obvious'. In too many cases, 'obvious' turns out to be not obvious not at all.
It also does nothing to stop scripts from running, which is quite significant since you can certainly get some serious software that is written in eg perl, python, or even java. Indeed, there is probably an open source C interpreter somewhere one could use to run pretty much anything. Ideally the interpreter will be itself written in POSIX sh! ;-)
Not even that, unix/linux has always allowed users to install software into their home directory. There is very little that can be done to prevent that actually; even on windows, it is only the package management conventions that disallow local installations.