Javadoc / doxygen style documentation is great for understanding the details. It is terrible for giving an overview. Look at the Cocoa documentation, for example. If you get all of the Headerdoc (Apple's doxygen equivalent) documentation, it comes to about 8,000 pages. You really, really, don't want to have to read all of that to know how to use the APIs - most people can't keep that much detail in their heads anyway. You want a few high-level overview documents that you can read in their entirety and then refer to the API documentation for reference.
For an open source example, look at LLVM. They have doxygen docs and they have some high-level subsystem docs (e.g. 'How to write an LLVM backend'). The bits that are the easiest to work with are the bits that have both.
Given the difficulty of installing CM, I'd imagine that most people who do are well aware of the fact that they do so at their own risk and shouldn't complain to their network service provider if it doesn't work. Oh, and there are several orders of magnitude more iPhone 5 users than CM users, so even if they complained at the same rate it would be very easy for you not to hear from any of the latter.
I disagree. Part of the reason that publishers of this kind of book can get away with charging schools so much for books is the perception that writing a textbook is really hard. Showing you can get to a first draft state in three days then that shows how it might be a better investment for school systems to pay authors directly. A big part of the problem is that textbook prices are not itemised. If you're a school district that wants to buy, say, 10,000 textbooks, then you get quoted a price by the publisher. You have no idea how much of this is the cost of the authors' time, the cost of copyediting, the cost of printing and distribution, and the publisher's profit. It is, however, very easy to get quotes for just the printing / binding part, especially now that there are so many on-demand printers online. Copyediting costs are typically close to fixed per page, irrespective of content. If you can work out that paying a few competent people to write a book that you then own the rights to costs the same amount as buying from a big publisher and then replacement copies are much cheaper then that's a huge win for open source textbooks.
You are doing it wrong. LaTeX is source code and so it can be put in any revision control system. We store a load of LaTeX documents in svn and it's very easy to review minor changes just by reading the commit emails. You can't do that with something like Word - everyone needs to check out the document and open it in Word. For reviewing larger sets of changes, I use the latexdiff tool. This annotates changed sections between two arbitrary versions. For stuff I'm sending off to my publisher, I just add change bars so that the copyeditor or proofreader can recheck those sections. For things I'm editing collaboratively, I'll make it highlight the old and new text.
I've also done collaborative work with Word and it was painful in comparison. The rest of the company agreed, and later paid me to produce a custom LaTeX document class for them that matched their publication style so that they could ditch Word. If you have more than two people collaborating, then the Word model is very cumbersome.
The problem with writing a textbook like this is that you need to know two fields: the topic of the textbook and education. It's very easy to find people who know one, finding people who know both is hard. It's also really hard to correctly pitch textbooks aimed at children so that they're approachable without being patronising. There's a reason I stick to writing books for adults: it's orders of magnitude easier.
Sociopaths don't learn how to stop hurting people, they just learn not to get caught the next time.
That's not true. A sociopath merely lacks empathy - they may be aware that they are hurting someone, but they don't understand why that's a bad thing. Placed in an incentive system where hurting people is penalised and provides no advantages, they'll do what's best for them and stop.
No, that's insulting. Good trolling seems to be a dying art these days. A good troll post says something that sounds plausible, and encourages responses. During the thread, it becomes less and less reasonable, but the aim is to make the other person say something unreasonable first or to make them waste a large amount of effort replying. If you want to see a good troll, read some of the threads started by roman_mir.
1 at close ranges you might want to have the pilot actually looking in the direction he is going
You probably don't want a pilot at all, but if you do then you want as much solid material between him and the outside as possible. B5 was guilty of this error: even big warships seemed to put the bridge in the most vulnerable part of the ship. The Minbari knew better, but the Vorlons apparently convinced them that this was a sissy way of designing ships when it came to the White Star. It makes almost as little sense as putting the pilot in the head for battlemechs.
We even saw how ineffective that would be in a few episodes. Galactica was hit by nukes a few times, and even a nuke going off in one of the ships in the convoy didn't do a huge amount of damage to unarmoured civilian ships. The Cylon fleet would have maybe lost some fighters if they'd been too close, but that's about it.
I think people are more forgiving with Stargate as this is allien technology
We were, right up until the episode where Teal'c got stuck in the pattern buffer. Before then, the Stargate was something that basically worked by magic: There was no point quibbling about how it worked because it was just assumed to work because of some physics that we don't understand. Oh, and there was also the thing they added as a plot device where electromagnetic signals sent from the receiving end would keep the gate open. Yet, oddly, they usually managed to shut even when neither end was in a hard vacuum...
Re:i never understood this thinking
on
Sexism In Science
·
· Score: 1
The problem is unintended consequences. These policies often end up reinforcing stereotypes rather than overcoming them. When you make it easier for people in some class to get a particular kind of job, you create an expectation that members of that class in that job are going to be less good at it than people from outside that class. This is really bad for the members of that class who are actually good at their job, because they have to work twice as hard to prove that they are there on merit, which makes it harder for them to be promoted, harder for them to be taken seriously by customers, and so on.
A better approach is to spend more effort rewarding and recognising the people who did get into these positions on merit.
In Europe is illegal to pay less to an employee for the same job, regardless of their gender, which totally exposes their lies
Defining 'the same job' is quite difficult. Where I work, there are two salary scales for people at approximately my level with the top of the second being 50% higher than the bottom of the first. People are appointed somewhere on one of these two scales and then generally bumped one point on the relevant scale each year. The level at which they are appointed is based on experience and qualifications, but it is relatively subjective. This system is entirely legal in the EU, but if you wished to be discriminatory then it would be relatively easy to appoint members of one group on the lower scale and members of the other group on the higher scale. The favoured group would then be making about 30% more on average. It would be very difficult to prove discrimination, because it is very difficult to find people with exactly the same skills and qualifications.
No, and there is some work doing this, but memory then needs to be explicitly turned off, and that's often quite difficult to do sensibly. You then have the same problem as most power saving algorithms: that you get a performance hit when you need to come out of the low-power state and it's quite difficult working out when the transitions should take place.
Power. Even in standby mode, RAM is powered. The power consumption scales linearly with the amount of RAM. There's a reason why even Cortex A15 tablets (which can access 64GB of physical memory) only ship with 2GB...
I keep hearing that president's life is protected to protect us all from such a turmoil. How well do we think we know the imaginary turmoil would actually happen? Who gives a hoot if the president is alive?
There's a very good reason for that: their code is mostly written in portable C, to make it possible to compile with a variety of compilers, but C lacks any standard way of exposing vector types. They have three choices:
Use vendor-specific vector extensions (in particular, GCC/Clang and Visual Studio have different extensions, so code can't be shared between Windows and Mac if they do this)
Rely on autovectorisation support in the compiler (ICC and XLC are reasonably good at this, Path64 is a bit better, most other things suck)
Use assembly.
The compiler doesn't do a good job because, as I said at the start of the post that you replied to, it doesn't have as much information about the code as the assembly programmer. Specifically, it doesn't have the information that operations on pixels are independent and that the data in the input and output both satisfy the alignment requirements for vector operations. More modern image processing applications will typically write this kind of operation in OpenCL C, which does allow all of this information to be expressed (along with the fact that the input and output don't alias and that the computation is data-parallel) and so will do a much better job of optimisation. They'll also run on the GPU where possible and so often end up being an order of magnitude or so faster than hand-optimised x86 assembly.
Standalone.asm, inline assembly or intrinsic are just implementation details
True, in the same way that using a quicksort or a bubblesort is just an implementation detail. Using stand-alone assembly means that the compiler has to create an entire call frame and ensure that all caller-safe registers are preserved, even if your asm code doesn't touch any of them. Using inline assembly is a bit better, but the compiler still often has to treat your asm as a full barrier and so can't reorder operations around it to make most efficient use of the pipeline. Using intrinsics means that the register allocator and instruction scheduler are entirely free to make any changes that they need to, as long as the end result is the same. More importantly, the entire middle part of the optimiser pipeline knows nothing about the assembly except that it is some opaque blob that uses some values and produces some others.
Note: This doesn't apply to the MS compiler, which somehow manages to do a worse job with intrinsics than inline assembly.
Note 2: Some of this doesn't apply with LLVM if you are using the integrated assembler, because the inline asm is parsed to machine code operations that then have the normal instruction selector and peephole optimisers run.
Compilers almost always do a much better job than humans if provided with the same input. The advantage that humans have is that they are often aware of extra information that is not encoded in the source language and so can apply extra invariants that the compiler is not aware of. A human is also typically more free to change data formats, for example for better cache usage, whereas a compiler for a language like C is required to take whatever layouts the programmer provided.
The problem with place-and-route is that the search space is enormous and automated tools typically use purely deterministic algorithms, whereas humans use a lot more backtracking. A simulated annealing approach, for example, can often do a lot better (check the literature, there are a few research systems that do this).
However, a similar program by an expert Assembly Language programmer would have left "good enough" behind because the assembly language programmer would know how to tweak his code using the most efficient commands, and cut out the 'fats" by optimizing the loops and flows.
This is, on a modern architecture, complete bullshit. Whoever is generating the assembly needs to be aware of pipeline behaviour, the latency and dispatch timings of every instruction and equivalences between them. Even if you just compare register allocation and use the same instruction selection, humans typically do significantly worse than even mediocre compilers. Instruction selection is just applying a (very large) set of rules: it's exactly the sort of task that computers do better than humans.
He's using the US English definition of liberal, which is a synonym for the US English definition of socialist and communist. It means 'person or idea that I don't like'.
1) whats the point in developing Open Source software for use in education if the framework/operating system on which it runs is not also open source.
The thing that Stallman and his followers usually miss the importance of: incremental deployment. If you replace all of your proprietary Windows applications with open source ones, then it's usually relatively easy to then replace Windows with a free operating system. Windows and Linux/*BSD/Whatever then all run all of the applications you want, but Windows is more expensive, so the choice is easy.
No, vinyl became the standard for audiophiles when the first generation cheap CD players became mainstream, because they had really crap audio quality. I tried listening to one recently, and it sounds noticeably worse than a 128kb/s AAC ripped from the same source but played back on something with a vaguely modern DAC. In comparison, vinyl was a lot better. Unfortunately, a lot of audiophiles then gave up on CDs entirely and never noticed when the electronics became good enough that they sounded better than vinyl, or became snobbish about the particular kind of distortion that you get from vinyl being better than the kind of distortion you get with digital recordings.
Javadoc / doxygen style documentation is great for understanding the details. It is terrible for giving an overview. Look at the Cocoa documentation, for example. If you get all of the Headerdoc (Apple's doxygen equivalent) documentation, it comes to about 8,000 pages. You really, really, don't want to have to read all of that to know how to use the APIs - most people can't keep that much detail in their heads anyway. You want a few high-level overview documents that you can read in their entirety and then refer to the API documentation for reference.
For an open source example, look at LLVM. They have doxygen docs and they have some high-level subsystem docs (e.g. 'How to write an LLVM backend'). The bits that are the easiest to work with are the bits that have both.
Given the difficulty of installing CM, I'd imagine that most people who do are well aware of the fact that they do so at their own risk and shouldn't complain to their network service provider if it doesn't work. Oh, and there are several orders of magnitude more iPhone 5 users than CM users, so even if they complained at the same rate it would be very easy for you not to hear from any of the latter.
I disagree. Part of the reason that publishers of this kind of book can get away with charging schools so much for books is the perception that writing a textbook is really hard. Showing you can get to a first draft state in three days then that shows how it might be a better investment for school systems to pay authors directly. A big part of the problem is that textbook prices are not itemised. If you're a school district that wants to buy, say, 10,000 textbooks, then you get quoted a price by the publisher. You have no idea how much of this is the cost of the authors' time, the cost of copyediting, the cost of printing and distribution, and the publisher's profit. It is, however, very easy to get quotes for just the printing / binding part, especially now that there are so many on-demand printers online. Copyediting costs are typically close to fixed per page, irrespective of content. If you can work out that paying a few competent people to write a book that you then own the rights to costs the same amount as buying from a big publisher and then replacement copies are much cheaper then that's a huge win for open source textbooks.
You are doing it wrong. LaTeX is source code and so it can be put in any revision control system. We store a load of LaTeX documents in svn and it's very easy to review minor changes just by reading the commit emails. You can't do that with something like Word - everyone needs to check out the document and open it in Word. For reviewing larger sets of changes, I use the latexdiff tool. This annotates changed sections between two arbitrary versions. For stuff I'm sending off to my publisher, I just add change bars so that the copyeditor or proofreader can recheck those sections. For things I'm editing collaboratively, I'll make it highlight the old and new text.
I've also done collaborative work with Word and it was painful in comparison. The rest of the company agreed, and later paid me to produce a custom LaTeX document class for them that matched their publication style so that they could ditch Word. If you have more than two people collaborating, then the Word model is very cumbersome.
The problem with writing a textbook like this is that you need to know two fields: the topic of the textbook and education. It's very easy to find people who know one, finding people who know both is hard. It's also really hard to correctly pitch textbooks aimed at children so that they're approachable without being patronising. There's a reason I stick to writing books for adults: it's orders of magnitude easier.
Sociopaths don't learn how to stop hurting people, they just learn not to get caught the next time.
That's not true. A sociopath merely lacks empathy - they may be aware that they are hurting someone, but they don't understand why that's a bad thing. Placed in an incentive system where hurting people is penalised and provides no advantages, they'll do what's best for them and stop.
No, that's insulting. Good trolling seems to be a dying art these days. A good troll post says something that sounds plausible, and encourages responses. During the thread, it becomes less and less reasonable, but the aim is to make the other person say something unreasonable first or to make them waste a large amount of effort replying. If you want to see a good troll, read some of the threads started by roman_mir.
1 at close ranges you might want to have the pilot actually looking in the direction he is going
You probably don't want a pilot at all, but if you do then you want as much solid material between him and the outside as possible. B5 was guilty of this error: even big warships seemed to put the bridge in the most vulnerable part of the ship. The Minbari knew better, but the Vorlons apparently convinced them that this was a sissy way of designing ships when it came to the White Star. It makes almost as little sense as putting the pilot in the head for battlemechs.
We even saw how ineffective that would be in a few episodes. Galactica was hit by nukes a few times, and even a nuke going off in one of the ships in the convoy didn't do a huge amount of damage to unarmoured civilian ships. The Cylon fleet would have maybe lost some fighters if they'd been too close, but that's about it.
I think people are more forgiving with Stargate as this is allien technology
We were, right up until the episode where Teal'c got stuck in the pattern buffer. Before then, the Stargate was something that basically worked by magic: There was no point quibbling about how it worked because it was just assumed to work because of some physics that we don't understand. Oh, and there was also the thing they added as a plot device where electromagnetic signals sent from the receiving end would keep the gate open. Yet, oddly, they usually managed to shut even when neither end was in a hard vacuum...
The problem is unintended consequences. These policies often end up reinforcing stereotypes rather than overcoming them. When you make it easier for people in some class to get a particular kind of job, you create an expectation that members of that class in that job are going to be less good at it than people from outside that class. This is really bad for the members of that class who are actually good at their job, because they have to work twice as hard to prove that they are there on merit, which makes it harder for them to be promoted, harder for them to be taken seriously by customers, and so on.
A better approach is to spend more effort rewarding and recognising the people who did get into these positions on merit.
In Europe is illegal to pay less to an employee for the same job, regardless of their gender, which totally exposes their lies
Defining 'the same job' is quite difficult. Where I work, there are two salary scales for people at approximately my level with the top of the second being 50% higher than the bottom of the first. People are appointed somewhere on one of these two scales and then generally bumped one point on the relevant scale each year. The level at which they are appointed is based on experience and qualifications, but it is relatively subjective. This system is entirely legal in the EU, but if you wished to be discriminatory then it would be relatively easy to appoint members of one group on the lower scale and members of the other group on the higher scale. The favoured group would then be making about 30% more on average. It would be very difficult to prove discrimination, because it is very difficult to find people with exactly the same skills and qualifications.
If you jail people for lying then we have to put all of Congress in jail.
You say that, but I'm sure that there are downsides as well.
No, and there is some work doing this, but memory then needs to be explicitly turned off, and that's often quite difficult to do sensibly. You then have the same problem as most power saving algorithms: that you get a performance hit when you need to come out of the low-power state and it's quite difficult working out when the transitions should take place.
Power. Even in standby mode, RAM is powered. The power consumption scales linearly with the amount of RAM. There's a reason why even Cortex A15 tablets (which can access 64GB of physical memory) only ship with 2GB...
Damn! The Air Force beat me to it.
I keep hearing that president's life is protected to protect us all from such a turmoil. How well do we think we know the imaginary turmoil would actually happen? Who gives a hoot if the president is alive?
The traditional way of predicting what will happen involves examining similar occurrences in the past. Fortunately, for this case there is a example that is still within living memory.
The compiler doesn't do a good job because, as I said at the start of the post that you replied to, it doesn't have as much information about the code as the assembly programmer. Specifically, it doesn't have the information that operations on pixels are independent and that the data in the input and output both satisfy the alignment requirements for vector operations. More modern image processing applications will typically write this kind of operation in OpenCL C, which does allow all of this information to be expressed (along with the fact that the input and output don't alias and that the computation is data-parallel) and so will do a much better job of optimisation. They'll also run on the GPU where possible and so often end up being an order of magnitude or so faster than hand-optimised x86 assembly.
Standalone .asm, inline assembly or intrinsic are just implementation details
True, in the same way that using a quicksort or a bubblesort is just an implementation detail. Using stand-alone assembly means that the compiler has to create an entire call frame and ensure that all caller-safe registers are preserved, even if your asm code doesn't touch any of them. Using inline assembly is a bit better, but the compiler still often has to treat your asm as a full barrier and so can't reorder operations around it to make most efficient use of the pipeline. Using intrinsics means that the register allocator and instruction scheduler are entirely free to make any changes that they need to, as long as the end result is the same. More importantly, the entire middle part of the optimiser pipeline knows nothing about the assembly except that it is some opaque blob that uses some values and produces some others.
Note: This doesn't apply to the MS compiler, which somehow manages to do a worse job with intrinsics than inline assembly.
Note 2: Some of this doesn't apply with LLVM if you are using the integrated assembler, because the inline asm is parsed to machine code operations that then have the normal instruction selector and peephole optimisers run.
Compilers almost always do a much better job than humans if provided with the same input. The advantage that humans have is that they are often aware of extra information that is not encoded in the source language and so can apply extra invariants that the compiler is not aware of. A human is also typically more free to change data formats, for example for better cache usage, whereas a compiler for a language like C is required to take whatever layouts the programmer provided.
The problem with place-and-route is that the search space is enormous and automated tools typically use purely deterministic algorithms, whereas humans use a lot more backtracking. A simulated annealing approach, for example, can often do a lot better (check the literature, there are a few research systems that do this).
However, a similar program by an expert Assembly Language programmer would have left "good enough" behind because the assembly language programmer would know how to tweak his code using the most efficient commands, and cut out the 'fats" by optimizing the loops and flows.
This is, on a modern architecture, complete bullshit. Whoever is generating the assembly needs to be aware of pipeline behaviour, the latency and dispatch timings of every instruction and equivalences between them. Even if you just compare register allocation and use the same instruction selection, humans typically do significantly worse than even mediocre compilers. Instruction selection is just applying a (very large) set of rules: it's exactly the sort of task that computers do better than humans.
Proofreading, what's that?
It's an occupation created to solve a very important and necessary social purpose: to keep grammar Nazis off the streets.
You imply that only liberals buy Apple products
He's using the US English definition of liberal, which is a synonym for the US English definition of socialist and communist. It means 'person or idea that I don't like'.
1) whats the point in developing Open Source software for use in education if the framework/operating system on which it runs is not also open source.
The thing that Stallman and his followers usually miss the importance of: incremental deployment. If you replace all of your proprietary Windows applications with open source ones, then it's usually relatively easy to then replace Windows with a free operating system. Windows and Linux/*BSD/Whatever then all run all of the applications you want, but Windows is more expensive, so the choice is easy.
No, vinyl became the standard for audiophiles when the first generation cheap CD players became mainstream, because they had really crap audio quality. I tried listening to one recently, and it sounds noticeably worse than a 128kb/s AAC ripped from the same source but played back on something with a vaguely modern DAC. In comparison, vinyl was a lot better. Unfortunately, a lot of audiophiles then gave up on CDs entirely and never noticed when the electronics became good enough that they sounded better than vinyl, or became snobbish about the particular kind of distortion that you get from vinyl being better than the kind of distortion you get with digital recordings.
I hope they're publishing this widely. It's the first article I've seen that leads me to believe that antivirus might actually work...