The difference between religions is how likely they tend towards extremism based on their founding doctrines.
I disagree with that. The difference between cultures is how oppressed their people are (since more oppressed people tend to lash out). The difference between religions is whether or not they've been through an enlightenment reformation phase. That's why there is likely to never be such a thing as a Methodist terrorist or a Baha'i terrorist.
Slight nit: If the religion has been through an enlightenment reformation phase, it's possible that there are remnant anti-enlightenment-reformation backlash movements. US-style Christian fundamentalism and Wahhabism are examples of this.
After all, where's the hue and cry when a non muslim is the target of this tiny minority?
Just because it's largely unreported by the mainstream media doesn't mean it doesn't exist. We all know that "some person says something perfectly reasonable" is the world's most boring headline.
As bad as the fundamentalist Christians are, I've never seen them worry too much about dressing "modestly" and run around calling people who don't meet their standards "whores".
You say that as if women and girls aren't pressured to look and dress in certain ways in mainstream secular culture.
The [butyric acid] has also been used as a noxious, nausea-inducing repellent by anti-whaling protesters to disrupt Japanese whaling crews (link)
A friend of mine who volunteers for Sea Shepherd claims that the purpose isn't to disrupt the crew, but to make the whale meat inedible. Make of that what you will.
To the Right(tm), the world is split into two parts: "good guys" and "bad guys". Every person, every nation and every non-state actor in the world can be placed in one of these two categories. All issues of morality, foreign policy and so on can be answered by identifying who, in the alleged moral dilemma, is the "good guy" and who is the "bad guy".
To the Left(tm), the world is split into two parts: "oppressors" and "oppressed". Every person, every nation and every non-state actor in the world can be placed in one of these two categories. All issues of morality, foreign policy and so on can be answered by identifying who, in the alleged moral dilemma, is the "oppressor" and who is the "oppressed".
Israel is "good guys" and "oppressor", and Palestine is "bad guys" and "oppressed".
This is the first time that the concept of worship has appeared in this thread. Having said that, since you brought it up, not everything that falls under the heading of "religion" involves "worship".
It's probably not worth discussing details here, because any discussion will inevitably, at some point, get bogged down in details. But the short answer is: Using third-party libraries which adhere to C++ standards.
Libraries which adhere to C++ standards use collections which are concept-compatible with the STL or provide a glue layer to support it. Libraries which adhere to C++ standards throw exceptions if undesired-but-recoverable events happen, such as parse errors. I need to write more glue code than would otherwise be necessary to get Qt to work with these.
But perhaps the problem is one of perception. Writing glue code and insulation layers is inevitable in any nontrivial application (or, even more crucially, any product line of applications). Perhaps it's unrealistic to expect Qt to be infrastructure like Boost or the STL. Rather, it should be on an equal footing with any other third-party library which needs nontrivial work to successfully integrate.
It's clear that this guy doesn't work for a software company, decently managed or otherwise. He works for a trade college, the management of which likely does not understand managing software development projects.
You're talking like a Union crane driver, who wont do anything except drive cranes.
To be fair, that situation happened as a direct result of decades upon decades of exploitation by employers who heaped more and more responsibility on workers without compensating them for it. Something had to snap eventually.
It's useful to compare this to the current situation with school teachers. These days, we require that they perform tasks as diverse as customer relationship management, counseling and even detection of child abuse. We do not compensate them for extra responsibilities.
The good thing about being in the IT business is that we have more scope for choosing our employers. I agree with everyone else who said (in various ways) that doing more than is required in this job makes you more valuable to your next employer. This is a luxury that people in other industries don't have, and you owe it to yourself to use it.
A sysadmin is not a programmer. The skill sets are different but are lumped under the general IT fog. I hardly consider writing a script that cleans up log files on my Windows and Linux boxes to be in the same realm as writing an application that handles the hiring process and workflow for HR.
The boundary between the two is very fuzzy. I don't know how many times I've tried to persuade people to use good programming practices (e.g. source code management), who retort that writing 1000 line Matlab scripts isn't really "programming".
For lack of better terminology, I distinguish between "programming" (a task that many people do, including sysadmins and accountants who produce Excel macros) and "software development" (a job description performed by specialists skilled in the art).
Anyway, what you wrote sounds very much like the classic case of trying to take a framework designed to be used in certain way, and use it "your way", such as use exceptions in certain way.
I'll agree with everything you said with only one nit: What you call "your way" is the normal C++ way. The problem isn't that Qt has an impedance mismatch with me, it's that it has an impedance mismatch with C++. It even made sense at the time. However, given that it's nominally written in C++ and for C++, it causes problems today.
A large part (maybe even majority) of Qt developers don't really like STL or boost or even exceptions.
I'm not a Qt developer, I'm a C++ developer. If Qt doesn't work well with C++, then I can't use it.
That's not a problem if you can do everything in Qt. For many types of application (including most of the stuff in a base desktop environment, which is what TFA is about), the GUI is the only hard bit. Qt is a fine tool for this common case.
That's not the type of application I want to do. Qt may make moderately difficult stuff easier, but it makes complex stuff much harder than it needs to be.
The most frustrating part is that fixing it really wouldn't be that difficult. I'm not asking that Qt throw exceptions, or propagate exceptions across signal/slot boundaries. Your third-party widget isn't exception-safe? Fine, I won't use it. I can live with that. STL compatibility can be provided with just a little bit of glue code which you never pay for if you never use it.
All I'm really asking from Qt is a little more care and a little more documentation. On the "care" side, I want to make sure that Qt's internal state is sane if an exception is thrown. On the "documentation" side, I want to know that if I do this:
auto_ptr<QSomething> something(new QSomething);
...then I want to know when Qt has taken ownership of the object. This is documented nowhere (or, at least, wasn't last time I looked).
It doesn't seem that unreasonable to me.
(I should point out that the situation with KDE is even worse. Mixing C++ and Qt is hard, but mixing C++ and KDE is nigh impossible.)
For the record, the problem isn't what happens if that line throws an exception. It's what happens if a subsequent line throws an exception.
In my experience C++ exceptions are a complete waste of time, I try-catch the call to some crappy third party library and what happens? Boom goes the application anyway.
Even in a desktop application for which you intend the app to die should an exception to be thrown, close attention to exception handling can make the difference between a good user experience and a bad user experience.
Even desktop applications usually have objects which hold physical resources. Files are the most common case, such as temporary files which should get cleaned up or data which could be irrevocably corrupted if things die in the middle of an operation.
Exceptions that can't catch aren't worth having and my code uses error codes instead, works a million times better.
Exceptions were invented because error codes are unsafe. Unless you're using Haskell, compilers don't check to see if you've checked an error code. Plus, they don't work with constructors. Besides, pretty much all of the non-crappy libraries (e.g. Boost) that you should want to use throw exceptions. You need to deal with exception safety even if you never throw an exception.
Plus you can't throw exceptions over signal/slot boundaries, [...]
...yet. I expect that Qt5 will support this on C++0x platforms, using exception_ptr.
Well first of all this isn't Qt, it's a system built using Qt like KDE. Secondly, I don't know when Qt was ever just a GUI toolkit. It's trying to be a full on standard library - not like stdlib, but like Java, C# etc. covering GUI, file systems, networking, databases, multimedia, threads, collection classes and so on - basically you're supposed to be able to write fully functional applications without ever using anything but Qt classes.
...which made a certain amount of sense back in the day before the ISO C++ standard, and when C++ standard libraries had widely varying performance and compliance.
Today, this decision is more of a liability than a strength. C++ now comes with some of this stuff standard, and Boost has even more. The inevitable consequence is that programmers spend a significant proportion of their time writing code to fix the impedance mismatch between Qt and standard C++ (though the STL-style iterators help).
If that weren't bad enough, Qt is still not exception-safe. It's getting better with every release, but it's still not guaranteed, and largely undocumented. I haven't looked at the Qt 4.8 codebase, but the example code is still full of the most novice of novice errors:
QSomething* something = new QSomething();
(BTW: If you don't see the problem in the above line of code, you are a C++ novice. There is no shame in this, but you probably shouldn't be developing Qt without a code reviewer looking over your shoulder.)
Name one good, moral action that could not have been conceived of by a person of no faith. Tough question, right? Ok, here's an easier one: Name me one wicked action that was committed in the name of religion.
To compare like with like, you should name one good, moral action that could not have been conceived of by a person of faith, and one wicked action that could not have been committed were there no religion.
You may wish to recall that the invasion of Iraq was committed in the name of "freedom" and "democracy".
Steven Weinberg famously said that for good people to do bad things requires religion. It makes a nice bumper sticker, but thanks to Stanley Milgram we have hard evidence that this isn't true.
I think it is rather strong to characterise Hitchens as a hypocrite [...]
At the same time as he was doing the rounds with a book subtitled "how religion poisons everything", he was sending his daughter to a Quaker school. You should have seen the mental gymnastics he went through to justify that one.
Actually, you really should. He was brilliant in that Hitchens way, though still fundamentally hypocritical.
Unfortunately, "state-of-matter-ist" doesn't roll off the tongue.
Nonetheless, support Bose-Einstein condensate rights!
The difference between religions is how likely they tend towards extremism based on their founding doctrines.
I disagree with that. The difference between cultures is how oppressed their people are (since more oppressed people tend to lash out). The difference between religions is whether or not they've been through an enlightenment reformation phase. That's why there is likely to never be such a thing as a Methodist terrorist or a Baha'i terrorist.
Slight nit: If the religion has been through an enlightenment reformation phase, it's possible that there are remnant anti-enlightenment-reformation backlash movements. US-style Christian fundamentalism and Wahhabism are examples of this.
After all, where's the hue and cry when a non muslim is the target of this tiny minority?
Just because it's largely unreported by the mainstream media doesn't mean it doesn't exist. We all know that "some person says something perfectly reasonable" is the world's most boring headline.
As bad as the fundamentalist Christians are, I've never seen them worry too much about dressing "modestly" and run around calling people who don't meet their standards "whores".
You say that as if women and girls aren't pressured to look and dress in certain ways in mainstream secular culture.
The [butyric acid] has also been used as a noxious, nausea-inducing repellent by anti-whaling protesters to disrupt Japanese whaling crews (link)
A friend of mine who volunteers for Sea Shepherd claims that the purpose isn't to disrupt the crew, but to make the whale meat inedible. Make of that what you will.
To the Right(tm), the world is split into two parts: "good guys" and "bad guys". Every person, every nation and every non-state actor in the world can be placed in one of these two categories. All issues of morality, foreign policy and so on can be answered by identifying who, in the alleged moral dilemma, is the "good guy" and who is the "bad guy".
To the Left(tm), the world is split into two parts: "oppressors" and "oppressed". Every person, every nation and every non-state actor in the world can be placed in one of these two categories. All issues of morality, foreign policy and so on can be answered by identifying who, in the alleged moral dilemma, is the "oppressor" and who is the "oppressed".
Israel is "good guys" and "oppressor", and Palestine is "bad guys" and "oppressed".
So you would deny gases legal personhood? That sounds racist to me.
This is the first time that the concept of worship has appeared in this thread. Having said that, since you brought it up, not everything that falls under the heading of "religion" involves "worship".
It's probably not worth discussing details here, because any discussion will inevitably, at some point, get bogged down in details. But the short answer is: Using third-party libraries which adhere to C++ standards.
Libraries which adhere to C++ standards use collections which are concept-compatible with the STL or provide a glue layer to support it. Libraries which adhere to C++ standards throw exceptions if undesired-but-recoverable events happen, such as parse errors. I need to write more glue code than would otherwise be necessary to get Qt to work with these.
But perhaps the problem is one of perception. Writing glue code and insulation layers is inevitable in any nontrivial application (or, even more crucially, any product line of applications). Perhaps it's unrealistic to expect Qt to be infrastructure like Boost or the STL. Rather, it should be on an equal footing with any other third-party library which needs nontrivial work to successfully integrate.
Rather, you personally infer a personality from the word "God".
I suggest you don't read anything by Einstein. It'll probably confuse you.
"Good quotes are accurate, great quotes are apocryphal." - Plato
It's clear that this guy doesn't work for a software company, decently managed or otherwise. He works for a trade college, the management of which likely does not understand managing software development projects.
Been there, done that.
You're talking like a Union crane driver, who wont do anything except drive cranes.
To be fair, that situation happened as a direct result of decades upon decades of exploitation by employers who heaped more and more responsibility on workers without compensating them for it. Something had to snap eventually.
It's useful to compare this to the current situation with school teachers. These days, we require that they perform tasks as diverse as customer relationship management, counseling and even detection of child abuse. We do not compensate them for extra responsibilities.
The good thing about being in the IT business is that we have more scope for choosing our employers. I agree with everyone else who said (in various ways) that doing more than is required in this job makes you more valuable to your next employer. This is a luxury that people in other industries don't have, and you owe it to yourself to use it.
A sysadmin is not a programmer. The skill sets are different but are lumped under the general IT fog. I hardly consider writing a script that cleans up log files on my Windows and Linux boxes to be in the same realm as writing an application that handles the hiring process and workflow for HR.
The boundary between the two is very fuzzy. I don't know how many times I've tried to persuade people to use good programming practices (e.g. source code management), who retort that writing 1000 line Matlab scripts isn't really "programming".
For lack of better terminology, I distinguish between "programming" (a task that many people do, including sysadmins and accountants who produce Excel macros) and "software development" (a job description performed by specialists skilled in the art).
One would not fire a doorman for sitting around idle, just as one would not fire a firefighter who is waiting for the next fire.
To be fair, some companies seem to think that if firefighters spend 50% of their time waiting for the next fire, then half the firemen could be fired.
I'll agree with everything you said with only one nit: What you call "your way" is the normal C++ way. The problem isn't that Qt has an impedance mismatch with me, it's that it has an impedance mismatch with C++. It even made sense at the time. However, given that it's nominally written in C++ and for C++, it causes problems today.
A large part (maybe even majority) of Qt developers don't really like STL or boost or even exceptions.
I'm not a Qt developer, I'm a C++ developer. If Qt doesn't work well with C++, then I can't use it.
That's not a problem if you can do everything in Qt. For many types of application (including most of the stuff in a base desktop environment, which is what TFA is about), the GUI is the only hard bit. Qt is a fine tool for this common case.
That's not the type of application I want to do. Qt may make moderately difficult stuff easier, but it makes complex stuff much harder than it needs to be.
The most frustrating part is that fixing it really wouldn't be that difficult. I'm not asking that Qt throw exceptions, or propagate exceptions across signal/slot boundaries. Your third-party widget isn't exception-safe? Fine, I won't use it. I can live with that. STL compatibility can be provided with just a little bit of glue code which you never pay for if you never use it.
All I'm really asking from Qt is a little more care and a little more documentation. On the "care" side, I want to make sure that Qt's internal state is sane if an exception is thrown. On the "documentation" side, I want to know that if I do this:
auto_ptr<QSomething> something(new QSomething);
...then I want to know when Qt has taken ownership of the object. This is documented nowhere (or, at least, wasn't last time I looked).
It doesn't seem that unreasonable to me.
(I should point out that the situation with KDE is even worse. Mixing C++ and Qt is hard, but mixing C++ and KDE is nigh impossible.)
For the record, the problem isn't what happens if that line throws an exception. It's what happens if a subsequent line throws an exception.
Even in a desktop application for which you intend the app to die should an exception to be thrown, close attention to exception handling can make the difference between a good user experience and a bad user experience.
Even desktop applications usually have objects which hold physical resources. Files are the most common case, such as temporary files which should get cleaned up or data which could be irrevocably corrupted if things die in the middle of an operation.
Exceptions were invented because error codes are unsafe. Unless you're using Haskell, compilers don't check to see if you've checked an error code. Plus, they don't work with constructors. Besides, pretty much all of the non-crappy libraries (e.g. Boost) that you should want to use throw exceptions. You need to deal with exception safety even if you never throw an exception.
...yet. I expect that Qt5 will support this on C++0x platforms, using exception_ptr.
To be fair, his system was probably completely protected from the threat vector of a 20-something carrying a blank CD labelled "Lady Gaga".
Well first of all this isn't Qt, it's a system built using Qt like KDE. Secondly, I don't know when Qt was ever just a GUI toolkit. It's trying to be a full on standard library - not like stdlib, but like Java, C# etc. covering GUI, file systems, networking, databases, multimedia, threads, collection classes and so on - basically you're supposed to be able to write fully functional applications without ever using anything but Qt classes.
...which made a certain amount of sense back in the day before the ISO C++ standard, and when C++ standard libraries had widely varying performance and compliance.
Today, this decision is more of a liability than a strength. C++ now comes with some of this stuff standard, and Boost has even more. The inevitable consequence is that programmers spend a significant proportion of their time writing code to fix the impedance mismatch between Qt and standard C++ (though the STL-style iterators help).
If that weren't bad enough, Qt is still not exception-safe. It's getting better with every release, but it's still not guaranteed, and largely undocumented. I haven't looked at the Qt 4.8 codebase, but the example code is still full of the most novice of novice errors:
QSomething* something = new QSomething();
(BTW: If you don't see the problem in the above line of code, you are a C++ novice. There is no shame in this, but you probably shouldn't be developing Qt without a code reviewer looking over your shoulder.)
The DMCA is a compromise. No compromise is perfect. Having seen it in action, we now know that it could do with a bunch of tuning.
SOPA/PIPA is, by comparison, not a compromise. It's a one-sided deal.
That explains why my pineal gland is angry. Hitchens was the incarnation of Greyface!
Name one good, moral action that could not have been conceived of by a person of no faith. Tough question, right? Ok, here's an easier one: Name me one wicked action that was committed in the name of religion.
To compare like with like, you should name one good, moral action that could not have been conceived of by a person of faith, and one wicked action that could not have been committed were there no religion.
You may wish to recall that the invasion of Iraq was committed in the name of "freedom" and "democracy".
Steven Weinberg famously said that for good people to do bad things requires religion. It makes a nice bumper sticker, but thanks to Stanley Milgram we have hard evidence that this isn't true.
I think it is rather strong to characterise Hitchens as a hypocrite [...]
At the same time as he was doing the rounds with a book subtitled "how religion poisons everything", he was sending his daughter to a Quaker school. You should have seen the mental gymnastics he went through to justify that one.
Actually, you really should. He was brilliant in that Hitchens way, though still fundamentally hypocritical.
The fact that they're so loud is evidence that they're not in the majority and they know it.