but they are still forced to pay for both the public school and private. That is wrong.
More or less wrong than the richest country in the world ranking behind several South American countries in core health statistics?
Look, we don't live in a society of individuals. We haven't for a couple of hundred years. At any given time, there are hundreds of people you depend on just for your mere survival. That's just what the modern economy and its division of labor has wrought. In such an interdependent society, it makes no sense to categorically reject the idea of doing some things for the good of the society, rather than just the good of the individual. I agree it's something that should be used judiciously, but calling it plain "wrong" is ridiculous.
There are enormous social and economic costs stemming from poor social services. Every _individual_ pays this social cost, directly or indirectly. We pay for prisons and policemen to house drug-addicts or the mentally-imbalanced who can't get proper access to treatment. We deal with beggers in the streets, and roving gangs of young people who have nowhere better to go.
So don't think for a minute that the problem is one of individuals paying for society's problems, versus not. It's just a question of how you decide to pay for it.
It's a mediocre idea, but one that's better than the idea we're running with now. My dad's been working in public health for about 35 years, all over the world. He was telling me the other day that there are ex Soviet-bloc countries that have better child and maternal health statistics than major US cities. That's just plain _broken_.
Except it doesn't. You can design a socialized medical system where people with money are perfectly free to choose their own insurance or to visit private doctors. This might be a problem for you if you don't have the scratch, but then again, in the current system, if you don't have money, you're not making your own health decisions anyway --- some damn HMO is.
List-comprehensions are literally just syntax-suger for map:
target_list = map(lambda x: F(G(x)), source_list)
The braces are the call to map, the bit before the "for" is the body of the lambda, the bit after the "for" and before the "in" is the argument list of the lambda, and the bit after the "in" is the second parameter of the map.
ML is not a dynamic language, nor is O'Caml. Nor, I think is Haskell.
That's what I said: "On the static side, you have..."
They're all called "functional languages" but that's orthogonal to being dynamic (ie, allowing code to change at run time).
Actually, I was referring more to static versus dynamic typing. Statically-typed languages like ML can have implementations that allow code to change at run-time (SML/NJ).
So your list of static languages should have C#, Java, ML, O'Caml & Haskell.
It was a list of high-level languages. C# and Java don't count.
There are a several other languages in the same performance league (Dylan, Clean, etc). However, I was trying to focus on languages one could comfortably use in production. Thus, I limited my suggestions to languages with an official standard, multiple actively-developed implementations, and a decent-sized user community behind them.
Scheme and Common Lisp are both Lisp dialects, but both have very different cultures behind them. Major differences (very CL-biased):
- Common Lisp was designed with a strong bent towards practical utility. It has a lot of features* and features that aren't necessarily clean**, but are included because of usefulness or backwards compatibility reasons. Scheme was designed first and foremost to be a very clean, pure language. It's easy to learn, and you can hold the whole thing in your head without much effort.
- Common Lisp is a big standard, which means practical code can be written without implementation-specific libraries. Scheme code tends to depend heavily on implementation libraries as a result of a smaller standard. In _practice_ there is a fairly substantial body of portable Common Lisp libraries. In _practice_, most Scheme libraries tend to be fairly implementation-specific, though some implementations (PLT, Chez) have rather extensive libraries. CL has Cliki and ASDF, which gives you CPAN-like installation of a fairly nice set of libraries. I don't believe Scheme has anything similar.
- Common Lisp is a multi-paradigm language. It supports functional programming, imperative programming, and OOP. It has really good iteration constructs (LOOP, Iterate package), and a good object system (CLOS). Common Lisp programmers tend to write code that's a mix of functional and imperative styles. Scheme is decidedly a functional language. It has no object-system built in, no fancy iteration constructs built in, and Scheme programmers tend to write code in a very functional style.
- Common Lisp is in practice faster. It has features like optional declarations to help out the compiler, and the native-code compilers for CL have had a lot of work put into them. Scheme is also quite fast, but I don't get the impression that Scheme implementations (except maybe for the commercial Chez Scheme) are in the same league.
*) Package (module) system, CLOS, generic sequences, LOOP, etc. **) Scheme has one namespace for functions, values, and types. Common Lisp has multiple namespaces. In CL, you can name a variable "list", without worrying about it conflicting with the function "list". The syntax disambiguates the uses. Also, Common Lisp has a low-level, procedural macro feature. You can use the full language during macro-expansion (say to expand the macro differently based on the contents of a file). In Scheme, you get a weaker, but safer, template substitution-based macro system.
I generally think patents are overused, but I do think there is a place for them. I work for a company whose major asset is IP we've spent five years and millions of dollars developing. When we're done developing the technology, one of our sources of revenue will be licensing the tech to (much larger) companies that can build commercial products with it. Without patent protection, thee companies could just wait while we take the risk to develop the tech, then use it for free.
Companies like Rambus have given IP companies a bad name, but there is a legitimate place for them. Getting continued support for a risky R&D project at a large company can be difficult. At the same time, in some industries, little companies don't have the resources to effectively commercialize the technology they develop. Consider companies like MIPS and ARM. They license IP cores to bigger companies like TI that have the extensive resources necessary to fab microprocessors. TI et-al get CPU-design specialists to develop cores, and MIPS and ARM don't have to worry about running a non-core fab business. Patents facilitate this. Why should such working arrangements be dismantled because patents are being abused in other areas?
What do any of these things have to do with live update in Lisp and Erlang? Look, I'm not questioning your experience in general here. What I'm saying is that unless you've worked with a live update system in one of the languages that treats live update as a core feature (Common Lisp, Erlang, and Smalltalk), you really are missing the perspective necessary to comment on the feature.
Much moreso than ML, Scheme, or JS, Common Lisp, Smalltalk, and Erlang are languages for practical production work. A lot of experience with real-world systems have gone into the implementations of these languages, at multiple companies over a period of over two decades. All of this time, live-update has remained an important feature of these implementations. Either the idea is not as bad in production use as you seem to think, or the Lisp/Smalltalk/Erlang folks at Franz, LispWorks, Ericsson, Xerox, Apple, IBM, etc, are just misguided.
I am insistant that in most cases this is counter-productive.
I don't think you have enough (or any) experience with the feature to be able to make that sort of judgement. Live updates are a tool, like any other tool, they can be used poorly or well.
One of the reasons is that you cannot know for sure what is running on production.
It depends on the system. Commercial Smalltalk environments that support this feature let you introspect into the code running in the system. At the same time, proper configuration management tools can also be used to keep track of changes to live images.
Let's just hope that the author of every change that goes to production spent time adding the change to the source control system of the code and that the code is tested before it is injected into production.
The way these systems are usually used, the changes are entered into the source code of the system, and then incrementally compiled into the running image. Thus, you can SCM the change like any other source-level change. And yes, one would inject untested changes into a running system, but you have the same possibilities of putting untested changes into production even without live updates. You can't fix a people problem like this by eliminating an otherwise useful feature.
I notice that you don't defend, or even mention, a right to convert to a religion which has no such problematic commandments.
What would that be? Maybe Buddhism? Surely you don't mean Christianity...
Why are you defending Muslims as if Islam is some immutable trait? Indeed, is not defending Muslims qua Muslims equivalent to defending Islam?
By and large, you cannot escape the culture into which you're born. I was raised in the US, by parents who were at best non-religious, and more often, actively hostile to religion. However, every time I get into a taxicab with a driver from the Middle East, he sees my last name and assumes I'm a Muslim. There is no getting around that.
Like it or not, when you use the term "Islam", you're not just referring to a religion, you're referring to a group of people. A very diverse group of people, who all follow the religion in very different ways, who live within very different governmental systems, and who are defined less by their religion than by all the other factors of their culture.
What's muddy about Abdul Rahman being on trial for his life for converting to Christianity?
The fact that in more than one "Muslim" nation, together encompassing hundreds of millions of Muslims, such a trial would be a blatant violation of a secular legal code? The simple fact is Afghanistan is a primitive, uncivilized place, Islam or not. When you lump Afghanis together with the people of moderate Muslim nations, using the blanket label of "Islam", it's really no more useful that lumping, say, the Apartheid government of South Africa with the blanket label of "Whites" or "Westerners".
What sort of decent, rational person would withhold judgement against the murderers inside his own religion while resenting outsiders for raising the violence and oppression as an issue?
This is actually a very natural reaction, very common in almost every large group of people. Do you think educated black people identify with Michael Vick any more than an educated Bengali identifies with a Afghani villager? Yet, you see the resentment and defensiveness in the black community whenever somebody attacks Vick. Or, to use another example, do you think Catholics feel any need to apologize for the behavior of certain of their Church officials regarding the molestation issue? None that I have met seem to. Interestingly enough, the Catholic situation is even more interesting, because unlike in Islam, there is a central entity that is assumed to speak for all Catholics. When that central entity commits a crime, all Catholics _should_ feel some degree of culpability, but they don't.
Moderate Muslims don't feel the need to apologize for the actions of extremists for the same reason that anti-war Americans don't feel the need to apologize for the actions of Bush et al. Yet, they get angry when people attack Islam as a whole for the same reason these Americans get angry when Europeans make derisive comments about Americans as a whole. Logical? Perhaps not, but human nature, yes.
Where's the internal debate in Islam where these things are being rejected?
You're obviously not familiar with the politics of secular/moderate Islamic nations. I don't really expect you to ameliorate your ignorance, but it would be nice if you did.
There is nothing Islamic about beating women. Koran 4:34, The Women [umich.edu]:
The translations I've seen do not have "beat" in them. Your point is well-taken, though.
Now you'll accuse me of "creating resentment".
Well, yes. The Bible says all sorts of horrible things about women, and how they should be punished for what in modern society are routine actions. It seems, for example, that I can get my wife stoned to death if she cannot prove that she was a virgin when I married her. Given that, when some husband murders his wife for sleeping around, is it fair for me to go into a tirade about Christian violence?
Wars of independence can be expensive, and it's not surprising that there was a high toll in a situation like this where a much weaker power was opposing a much stronger one.
That said, there are various opinions within Bangladesh on the matter of independence. Many educated Bengalis will tell you that the separation of Pakistan from India was not a particularly good idea. At the same time, given the continued militarization and renewed Islamization of Pakistan, I think you'll find increasingly fewer educated people who will say the separation of Bangladesh from Pakistan was not a good idea.
There is of course, a vast number of people who don't think the secularization of Bangladesh was a good idea, and have, since the inception of the country, been trying to turn back the clock. Though, these views are largely representative of the poor, uneducated masses of the country, and I'll be blunt in saying that their opinion really doesn't matter. You'll find that most intellectuals in the country are strongly in favor of the measures that have been imposed by the government over the last few years to crack down on radical Islam.
Compilation-wise, it depends on the compiler. Any compiler will let you distribute what's called a FASL (a compiled image of a file). Command line options to the Lisp program will then let you load these fasls (this can be wrapped in a script). Some compilers (Allegro, LispWorks, Corman, ECL) will let you generate native executables.
Some suggestions: If you're already an Emacs maven, SLIME is a good idea. If you're not, LispWorks has a free demo with IDE that's quite nice. If you're on Windows, Google "Lisp in a Box" for some pre-packaged environments with SLIME. Compiler choice depends on platform. On *NIX, SBCL is the obvious free choice, and Allegro and LispWorks are good for-pay options. I can't really say what the situation is on Windows (I use SLIME/SBCL on a Mac), but you can probably ask on #lisp.
Nobody live-updates a running Erlang (or Lisp, which does the same thing), without deploying the code into a test environment first. The thing that live-update let's you do is take a well-tested and well-debugged piece of code and inject it into a running service without stopping the service.
AT&T uses Lisp for some of their call routing equipment for the same reason. If you need to add a new feature to a switch, you cannot drop the call's it's handling to swap out the software.
There are also lot's of uses of live-updating in non-productive environments. For example, it can be used as a development model, drastically reducing the edit/compile/debug cycle. When I write Lisp code (I presume Erlang programmers would be similar here), I rarely restart the program I'm debugging to recompile it. For example, my current Lisp image has an uptime of about 2 days. That means for the last two days, I've been incrementally compiling and testing my changes into the same running process.
It's also very helpful when the test scenario for the software is complicated. I maintain some software that does data collection/analysis of spectrum traces. Testing the software involves hooking up an antenna to a big awkward machine and going outside. The program is unfortunately written in C, which means I waste a lot of time shuttling back and forth between the test environment and the compiler. If I could stop the trace in the middle, make small changes, and keep going, my testing time would go way down.
Re:I know why it's been 10 years
on
Programming Erlang
·
· Score: 2, Insightful
I agree partly with your sentiments on debugging - although I don't think it would be a huge problem.
It's not a problem, because no functional programming language has a buggy map. There is no need to debug into map, it's a primitive like floating-point addition (which actually abstracts a much more complex algorithm than map!)
Re:I know why it's been 10 years
on
Programming Erlang
·
· Score: 4, Insightful
Also next to impossible to maintain, debug, or understand.
Uh, if you don't know functional programming, then yeah. If you do, it's instant to understand, and can be maintained more easily because there is less of it to maintain.
Your argument basically amounts to "stuff I don't know is hard to understand". No shit. New notation and concepts have to be learned, yes, but there is a point to learning them. It makes things simpler and easier once you have learned them. Consider, why do people in signal processing do all sorts of Z transforms and Fourier transforms and whatnot on data? Surely it's _easier_ to just think of a sound signal as a series of amplitudes at discrete time intervals? The thing is --- it isn't. Once you learn all that math, you can do stuff with signals by hand that you couldn't even have dreamed off if you'd used a less powerful technique.
Re:I know why it's been 10 years
on
Programming Erlang
·
· Score: 2, Informative
So, think, what are you actually trying to accomplish in the first block of code, in terms of the end-result.
You're computing a list, target, where each item is computed by F(G(x)), where x is an item from source_list, taken in order.
Note that stuff like "iterating over source_list", and "appending to target" are not really important. They are certain necessary steps in one possible implementation of what you're trying to accomplish, but they're just incidental --- they're not part of the end result.
Now, map is a function that takes two arguments: a function that takes one parameter and a list. It constructs a new list equal in length to the source list, with each element obtained by calling the function on one element of the source list. Ie: if you do map(square_number, [1, 2, 3]) you get [1 4 9].
Now, let's look at the functional code. The first line is a function definition for the function compose2.
compose2 = lambda F, G: lambda x: (F(G(x))
lambda is a way of introducing a literal function, much like "1" is a literal integer. lambda F, G:... means a function that takes two parameters, F and G, and returns... (note the return is implicit. In this case, the compose2 variable is assigned to a lambda that takes two functions F and G, and returns a third function that takes a value x and computes F(G(x)). Note that this is exactly the function we want to use to compute our list.
Now let's look at the second line:
target = map(compose2(F,G), source_list)
The code first calls compose2 with parameters F and G to get a function that computes F(G(x)). Note that this function is exactly in the form expected by map. Then it calls map with that function, and the source list. Map will internally apply F(G(x)) to each x in source_list, and retrn a list containing the results.
Note that usually stuff like compose2 will be a standard library function, because this sort of thing is so common. In that case, your original five lines of code, becomes a single line, that expresses exactly the end result you want, without being cluttered with incidental details like iterating over or appending to a list.
I should point out that I don't know Erlang, or whatever language that snippet is in. The second example is nonetheless easy for someone used to functional programs to understand, much like the first example is easy for an imperative programmer to understand, even one that doesn't know Python.
Re:What's missing from Erlang...
on
Programming Erlang
·
· Score: 4, Informative
But that's what I'm holding out for, is a high-level language with good performance that at least approaches C.
There's basically a handful of languages that would meet your needs here. On the dynamic side, you've got Common Lisp. On the static side, you've got ML, O'Caml, or Haskell.
After that, your options trail-off significantly. The other dynamic languages are all much slower than Lisp (more in the league of Python than in the league of C), and the other static languages (C#, Java), are much lower-level/less productive.
The quote is incorrect. It refers to unbelievers (those that do not believe in God), not to non-Muslims. At the time when Islam was spreading, it largely had contact with Christianity and Judaism, and it is not particularly antagonistic to these religions. Yes, Muslims believe that Christians will burn in hell and be tortured for eternity, but then again, the opposite is true as well.
Let me preface this by saying that I have no desire to defend Islam, as I find it as ridiculous as any of the big-three organized religions. My interest is only in defending Muslims.
What I'm trying to get at is that saying "Islam tries to get you killed for disagreeing" muddies the actual situation, and creates resentment among moderate Muslims. There is no "Church of Islam", with the power to speak for all Muslims, which is issuing fatwas saying that certain people should be killed. There are certain elements within Islam that take these sorts of actions, and they are more or less common depending on the country and the demographics. I'll use Bangladesh as an example, since I'm familiar with it (my parents were born there). In Bangladesh, Islamic law has no official authority*. The legal code is based on English common law, not Sharia law. Indeed, in 2001, the High Court declared all fatwas to be illegal, because village clerics were abusing them. So when you lump Bengalis in there with Iranians in some sort of non-existent "Islamic" monolith, don't be surprised if people react negatively.
*) That is not to say that pseudo-Islamic ideas aren't used by some people to wield power over others. In rural areas, clerics (conveniently with no religious training whatsoever) will use fatwas to, for example, order the beating of women that challenge social norms. However, I think the "Islam" angle of such happenings is overstated. There is nothing Islamic about beating women. At a technical level, the Quran gives women many basic rights that women in Europe did not get until well over a thousand years later. The problem in these situations is not really Islam, but the fact that poor, uneducated villagers just do stupid things. To put it into perspective, consider the whole Michael Vick dogfighting thing. People who defend him note that he didn't know better, because this sort of violent, inhuman "sport" was part of his "[redneck] southern culture". Well, I grew up in the south, and have seen enough of it to believe this, at least for some pockets of the region. Now, imagine your most dumbest, most back-water Virginia or Georgia redneck, time-wrap him back a hundred years, reduce his level of education and income by an order of magnitude, and you have the sort of dumb Bengali villager that is willing to whip a women because some mufti told him to. Do you honestly believe you even need to bring Islam into the discussion to explain the behavior?
That's not the quote. The quote is more along the lines of "the lowest animals in god's sight are unbelievers" (ie: those that do not believe in God). Not much different than, say,
"In flaming fire taking vengeance on them that know not God, and that obey not the gospel of our Lord Jesus Christ:" (2 Th.1:8)
The Skeptic's Annotated Bible has a pretty nice laundry list of all the horrible things in the Bible (and the Quran and the book of Mormon too, by the way). The bottom line is that these books were all written by a bunch of angry people living in the desert (christ, if I lived in the Middle East I'd be pissed too), and people should pick and choose the bits of them that don't suck.
The real problem is that the Muslims actually believe all the crap in the Quran, while most Christians these days only pay lip service to the crap in the Bible.
I see what you're trying to get at, but I think you have to remember one thing. "Islam" is not an entity, like say the Church of Scientology or the Catholic Church. Like "Protestantism", Islam is decentralized religion with many sects. There are certain entities within the Islamic world that will try to have you killed for what you say, but at the same time, there are lots of non-radical groups of Muslims (encompassing hundreds of millions of people in several countries around the world), in which this sort of thing doesn't happen. This is especially true in Muslim countries where the legal system is not based on Islamic law.
I'm not advocating government intervention here, but more active social ostracization. Society is far too accepting of these lunatics (as evidenced by the fact that we somehow have 3 presidential candidates who actively spout this nonsense).
Of all the ways parents fail their children, not teaching them to think has to be one of the worst, yet simultaneously it is one of the most accepted. People are shocked at parents whose emotional abuse of their children leave them emotionally scarred as adults, but are at most mildly bemused at parents whose intellectual abuse of their children leave them intellectually disabled as adults.
"My belief/moral/cultural system is superior to theirs."
At what point can we say that a certain set of beliefs (not necessarily a whole system, but certain ones) are indeed superior? Stupid ideas in religious have been losing the war ever since the Enlightenment. When can we draw the line on certain things? I mean, for god's sake, even the Pope has excepted evolution, can't we call out people who teach their children otherwise for what they're really doing --- lying blatantly to their children about fundamental truths of the world?
As a parent, I wonder what kind of hot water I'd get myself into if I raised children to believe that 2 +2 = 7, or that the alphabet has 37 characters. I mean, even if it's not illegal, most people would consider such a behavior to be at least very cruel and permanently damaging.
but they are still forced to pay for both the public school and private. That is wrong.
More or less wrong than the richest country in the world ranking behind several South American countries in core health statistics?
Look, we don't live in a society of individuals. We haven't for a couple of hundred years. At any given time, there are hundreds of people you depend on just for your mere survival. That's just what the modern economy and its division of labor has wrought. In such an interdependent society, it makes no sense to categorically reject the idea of doing some things for the good of the society, rather than just the good of the individual. I agree it's something that should be used judiciously, but calling it plain "wrong" is ridiculous.
There are enormous social and economic costs stemming from poor social services. Every _individual_ pays this social cost, directly or indirectly. We pay for prisons and policemen to house drug-addicts or the mentally-imbalanced who can't get proper access to treatment. We deal with beggers in the streets, and roving gangs of young people who have nowhere better to go.
So don't think for a minute that the problem is one of individuals paying for society's problems, versus not. It's just a question of how you decide to pay for it.
It's a mediocre idea, but one that's better than the idea we're running with now. My dad's been working in public health for about 35 years, all over the world. He was telling me the other day that there are ex Soviet-bloc countries that have better child and maternal health statistics than major US cities. That's just plain _broken_.
Except it doesn't. You can design a socialized medical system where people with money are perfectly free to choose their own insurance or to visit private doctors. This might be a problem for you if you don't have the scratch, but then again, in the current system, if you don't have money, you're not making your own health decisions anyway --- some damn HMO is.
List-comprehensions are literally just syntax-suger for map:
target_list = map(lambda x: F(G(x)), source_list)
The braces are the call to map, the bit before the "for" is the body of the lambda, the bit after the "for" and before the "in" is the argument list of the lambda, and the bit after the "in" is the second parameter of the map.
ML is not a dynamic language, nor is O'Caml. Nor, I think is Haskell.
That's what I said: "On the static side, you have..."
They're all called "functional languages" but that's orthogonal to being dynamic (ie, allowing code to change at run time).
Actually, I was referring more to static versus dynamic typing. Statically-typed languages like ML can have implementations that allow code to change at run-time (SML/NJ).
So your list of static languages should have C#, Java, ML, O'Caml & Haskell.
It was a list of high-level languages. C# and Java don't count.
There are a several other languages in the same performance league (Dylan, Clean, etc). However, I was trying to focus on languages one could comfortably use in production. Thus, I limited my suggestions to languages with an official standard, multiple actively-developed implementations, and a decent-sized user community behind them.
Scheme and Common Lisp are both Lisp dialects, but both have very different cultures behind them. Major differences (very CL-biased):
- Common Lisp was designed with a strong bent towards practical utility. It has a lot of features* and features that aren't necessarily clean**, but are included because of usefulness or backwards compatibility reasons. Scheme was designed first and foremost to be a very clean, pure language. It's easy to learn, and you can hold the whole thing in your head without much effort.
- Common Lisp is a big standard, which means practical code can be written without implementation-specific libraries. Scheme code tends to depend heavily on implementation libraries as a result of a smaller standard. In _practice_ there is a fairly substantial body of portable Common Lisp libraries. In _practice_, most Scheme libraries tend to be fairly implementation-specific, though some implementations (PLT, Chez) have rather extensive libraries. CL has Cliki and ASDF, which gives you CPAN-like installation of a fairly nice set of libraries. I don't believe Scheme has anything similar.
- Common Lisp is a multi-paradigm language. It supports functional programming, imperative programming, and OOP. It has really good iteration constructs (LOOP, Iterate package), and a good object system (CLOS). Common Lisp programmers tend to write code that's a mix of functional and imperative styles. Scheme is decidedly a functional language. It has no object-system built in, no fancy iteration constructs built in, and Scheme programmers tend to write code in a very functional style.
- Common Lisp is in practice faster. It has features like optional declarations to help out the compiler, and the native-code compilers for CL have had a lot of work put into them. Scheme is also quite fast, but I don't get the impression that Scheme implementations (except maybe for the commercial Chez Scheme) are in the same league.
*) Package (module) system, CLOS, generic sequences, LOOP, etc.
**) Scheme has one namespace for functions, values, and types. Common Lisp has multiple namespaces. In CL, you can name a variable "list", without worrying about it conflicting with the function "list". The syntax disambiguates the uses. Also, Common Lisp has a low-level, procedural macro feature. You can use the full language during macro-expansion (say to expand the macro differently based on the contents of a file). In Scheme, you get a weaker, but safer, template substitution-based macro system.
I generally think patents are overused, but I do think there is a place for them. I work for a company whose major asset is IP we've spent five years and millions of dollars developing. When we're done developing the technology, one of our sources of revenue will be licensing the tech to (much larger) companies that can build commercial products with it. Without patent protection, thee companies could just wait while we take the risk to develop the tech, then use it for free.
Companies like Rambus have given IP companies a bad name, but there is a legitimate place for them. Getting continued support for a risky R&D project at a large company can be difficult. At the same time, in some industries, little companies don't have the resources to effectively commercialize the technology they develop. Consider companies like MIPS and ARM. They license IP cores to bigger companies like TI that have the extensive resources necessary to fab microprocessors. TI et-al get CPU-design specialists to develop cores, and MIPS and ARM don't have to worry about running a non-core fab business. Patents facilitate this. Why should such working arrangements be dismantled because patents are being abused in other areas?
What do any of these things have to do with live update in Lisp and Erlang? Look, I'm not questioning your experience in general here. What I'm saying is that unless you've worked with a live update system in one of the languages that treats live update as a core feature (Common Lisp, Erlang, and Smalltalk), you really are missing the perspective necessary to comment on the feature.
Much moreso than ML, Scheme, or JS, Common Lisp, Smalltalk, and Erlang are languages for practical production work. A lot of experience with real-world systems have gone into the implementations of these languages, at multiple companies over a period of over two decades. All of this time, live-update has remained an important feature of these implementations. Either the idea is not as bad in production use as you seem to think, or the Lisp/Smalltalk/Erlang folks at Franz, LispWorks, Ericsson, Xerox, Apple, IBM, etc, are just misguided.
Have you used live updates in a Lisp, SmallTalk, or Erlang environment? If not, then what the hell are you squawking about?
I am insistant that in most cases this is counter-productive.
I don't think you have enough (or any) experience with the feature to be able to make that sort of judgement. Live updates are a tool, like any other tool, they can be used poorly or well.
One of the reasons is that you cannot know for sure what is running on production.
It depends on the system. Commercial Smalltalk environments that support this feature let you introspect into the code running in the system. At the same time, proper configuration management tools can also be used to keep track of changes to live images.
Let's just hope that the author of every change that goes to production spent time adding the change to the source control system of the code and that the code is tested before it is injected into production.
The way these systems are usually used, the changes are entered into the source code of the system, and then incrementally compiled into the running image. Thus, you can SCM the change like any other source-level change. And yes, one would inject untested changes into a running system, but you have the same possibilities of putting untested changes into production even without live updates. You can't fix a people problem like this by eliminating an otherwise useful feature.
I notice that you don't defend, or even mention, a right to convert to a religion which has no such problematic commandments.
What would that be? Maybe Buddhism? Surely you don't mean Christianity...
Why are you defending Muslims as if Islam is some immutable trait? Indeed, is not defending Muslims qua Muslims equivalent to defending Islam?
By and large, you cannot escape the culture into which you're born. I was raised in the US, by parents who were at best non-religious, and more often, actively hostile to religion. However, every time I get into a taxicab with a driver from the Middle East, he sees my last name and assumes I'm a Muslim. There is no getting around that.
Like it or not, when you use the term "Islam", you're not just referring to a religion, you're referring to a group of people. A very diverse group of people, who all follow the religion in very different ways, who live within very different governmental systems, and who are defined less by their religion than by all the other factors of their culture.
What's muddy about Abdul Rahman being on trial for his life for converting to Christianity?
The fact that in more than one "Muslim" nation, together encompassing hundreds of millions of Muslims, such a trial would be a blatant violation of a secular legal code? The simple fact is Afghanistan is a primitive, uncivilized place, Islam or not. When you lump Afghanis together with the people of moderate Muslim nations, using the blanket label of "Islam", it's really no more useful that lumping, say, the Apartheid government of South Africa with the blanket label of "Whites" or "Westerners".
What sort of decent, rational person would withhold judgement against the murderers inside his own religion while resenting outsiders for raising the violence and oppression as an issue?
This is actually a very natural reaction, very common in almost every large group of people. Do you think educated black people identify with Michael Vick any more than an educated Bengali identifies with a Afghani villager? Yet, you see the resentment and defensiveness in the black community whenever somebody attacks Vick. Or, to use another example, do you think Catholics feel any need to apologize for the behavior of certain of their Church officials regarding the molestation issue? None that I have met seem to. Interestingly enough, the Catholic situation is even more interesting, because unlike in Islam, there is a central entity that is assumed to speak for all Catholics. When that central entity commits a crime, all Catholics _should_ feel some degree of culpability, but they don't.
Moderate Muslims don't feel the need to apologize for the actions of extremists for the same reason that anti-war Americans don't feel the need to apologize for the actions of Bush et al. Yet, they get angry when people attack Islam as a whole for the same reason these Americans get angry when Europeans make derisive comments about Americans as a whole. Logical? Perhaps not, but human nature, yes.
Where's the internal debate in Islam where these things are being rejected?
You're obviously not familiar with the politics of secular/moderate Islamic nations. I don't really expect you to ameliorate your ignorance, but it would be nice if you did.
There is nothing Islamic about beating women.
Koran 4:34, The Women [umich.edu]:
The translations I've seen do not have "beat" in them. Your point is well-taken, though.
Now you'll accuse me of "creating resentment".
Well, yes. The Bible says all sorts of horrible things about women, and how they should be punished for what in modern society are routine actions. It seems, for example, that I can get my wife stoned to death if she cannot prove that she was a virgin when I married her. Given that, when some husband murders his wife for sleeping around, is it fair for me to go into a tirade about Christian violence?
This resentment needs to be aimed where
Wars of independence can be expensive, and it's not surprising that there was a high toll in a situation like this where a much weaker power was opposing a much stronger one.
That said, there are various opinions within Bangladesh on the matter of independence. Many educated Bengalis will tell you that the separation of Pakistan from India was not a particularly good idea. At the same time, given the continued militarization and renewed Islamization of Pakistan, I think you'll find increasingly fewer educated people who will say the separation of Bangladesh from Pakistan was not a good idea.
There is of course, a vast number of people who don't think the secularization of Bangladesh was a good idea, and have, since the inception of the country, been trying to turn back the clock. Though, these views are largely representative of the poor, uneducated masses of the country, and I'll be blunt in saying that their opinion really doesn't matter. You'll find that most intellectuals in the country are strongly in favor of the measures that have been imposed by the government over the last few years to crack down on radical Islam.
Compilation-wise, it depends on the compiler. Any compiler will let you distribute what's called a FASL (a compiled image of a file). Command line options to the Lisp program will then let you load these fasls (this can be wrapped in a script). Some compilers (Allegro, LispWorks, Corman, ECL) will let you generate native executables.
Some suggestions: If you're already an Emacs maven, SLIME is a good idea. If you're not, LispWorks has a free demo with IDE that's quite nice. If you're on Windows, Google "Lisp in a Box" for some pre-packaged environments with SLIME. Compiler choice depends on platform. On *NIX, SBCL is the obvious free choice, and Allegro and LispWorks are good for-pay options. I can't really say what the situation is on Windows (I use SLIME/SBCL on a Mac), but you can probably ask on #lisp.
Nobody live-updates a running Erlang (or Lisp, which does the same thing), without deploying the code into a test environment first. The thing that live-update let's you do is take a well-tested and well-debugged piece of code and inject it into a running service without stopping the service.
AT&T uses Lisp for some of their call routing equipment for the same reason. If you need to add a new feature to a switch, you cannot drop the call's it's handling to swap out the software.
There are also lot's of uses of live-updating in non-productive environments. For example, it can be used as a development model, drastically reducing the edit/compile/debug cycle. When I write Lisp code (I presume Erlang programmers would be similar here), I rarely restart the program I'm debugging to recompile it. For example, my current Lisp image has an uptime of about 2 days. That means for the last two days, I've been incrementally compiling and testing my changes into the same running process.
It's also very helpful when the test scenario for the software is complicated. I maintain some software that does data collection/analysis of spectrum traces. Testing the software involves hooking up an antenna to a big awkward machine and going outside. The program is unfortunately written in C, which means I waste a lot of time shuttling back and forth between the test environment and the compiler. If I could stop the trace in the middle, make small changes, and keep going, my testing time would go way down.
I agree partly with your sentiments on debugging - although I don't think it would be a huge problem.
It's not a problem, because no functional programming language has a buggy map. There is no need to debug into map, it's a primitive like floating-point addition (which actually abstracts a much more complex algorithm than map!)
Also next to impossible to maintain, debug, or understand.
Uh, if you don't know functional programming, then yeah. If you do, it's instant to understand, and can be maintained more easily because there is less of it to maintain.
Your argument basically amounts to "stuff I don't know is hard to understand". No shit. New notation and concepts have to be learned, yes, but there is a point to learning them. It makes things simpler and easier once you have learned them. Consider, why do people in signal processing do all sorts of Z transforms and Fourier transforms and whatnot on data? Surely it's _easier_ to just think of a sound signal as a series of amplitudes at discrete time intervals? The thing is --- it isn't. Once you learn all that math, you can do stuff with signals by hand that you couldn't even have dreamed off if you'd used a less powerful technique.
So, think, what are you actually trying to accomplish in the first block of code, in terms of the end-result.
... means a function that takes two parameters, F and G, and returns ... (note the return is implicit. In this case, the compose2 variable is assigned to a lambda that takes two functions F and G, and returns a third function that takes a value x and computes F(G(x)). Note that this is exactly the function we want to use to compute our list.
You're computing a list, target, where each item is computed by F(G(x)), where x is an item from source_list, taken in order.
Note that stuff like "iterating over source_list", and "appending to target" are not really important. They are certain necessary steps in one possible implementation of what you're trying to accomplish, but they're just incidental --- they're not part of the end result.
Now, map is a function that takes two arguments: a function that takes one parameter and a list. It constructs a new list equal in length to the source list, with each element obtained by calling the function on one element of the source list. Ie: if you do map(square_number, [1, 2, 3]) you get [1 4 9].
Now, let's look at the functional code. The first line is a function definition for the function compose2.
compose2 = lambda F, G: lambda x: (F(G(x))
lambda is a way of introducing a literal function, much like "1" is a literal integer. lambda F, G:
Now let's look at the second line:
target = map(compose2(F,G), source_list)
The code first calls compose2 with parameters F and G to get a function that computes F(G(x)). Note that this function is exactly in the form expected by map. Then it calls map with that function, and the source list. Map will internally apply F(G(x)) to each x in source_list, and retrn a list containing the results.
Note that usually stuff like compose2 will be a standard library function, because this sort of thing is so common. In that case, your original five lines of code, becomes a single line, that expresses exactly the end result you want, without being cluttered with incidental details like iterating over or appending to a list.
I should point out that I don't know Erlang, or whatever language that snippet is in. The second example is nonetheless easy for someone used to functional programs to understand, much like the first example is easy for an imperative programmer to understand, even one that doesn't know Python.
But that's what I'm holding out for, is a high-level language with good performance that at least approaches C.
There's basically a handful of languages that would meet your needs here. On the dynamic side, you've got Common Lisp. On the static side, you've got ML, O'Caml, or Haskell.
After that, your options trail-off significantly. The other dynamic languages are all much slower than Lisp (more in the league of Python than in the league of C), and the other static languages (C#, Java), are much lower-level/less productive.
The quote is incorrect. It refers to unbelievers (those that do not believe in God), not to non-Muslims. At the time when Islam was spreading, it largely had contact with Christianity and Judaism, and it is not particularly antagonistic to these religions. Yes, Muslims believe that Christians will burn in hell and be tortured for eternity, but then again, the opposite is true as well.
Let me preface this by saying that I have no desire to defend Islam, as I find it as ridiculous as any of the big-three organized religions. My interest is only in defending Muslims.
What I'm trying to get at is that saying "Islam tries to get you killed for disagreeing" muddies the actual situation, and creates resentment among moderate Muslims. There is no "Church of Islam", with the power to speak for all Muslims, which is issuing fatwas saying that certain people should be killed. There are certain elements within Islam that take these sorts of actions, and they are more or less common depending on the country and the demographics. I'll use Bangladesh as an example, since I'm familiar with it (my parents were born there). In Bangladesh, Islamic law has no official authority*. The legal code is based on English common law, not Sharia law. Indeed, in 2001, the High Court declared all fatwas to be illegal, because village clerics were abusing them. So when you lump Bengalis in there with Iranians in some sort of non-existent "Islamic" monolith, don't be surprised if people react negatively.
*) That is not to say that pseudo-Islamic ideas aren't used by some people to wield power over others. In rural areas, clerics (conveniently with no religious training whatsoever) will use fatwas to, for example, order the beating of women that challenge social norms. However, I think the "Islam" angle of such happenings is overstated. There is nothing Islamic about beating women. At a technical level, the Quran gives women many basic rights that women in Europe did not get until well over a thousand years later. The problem in these situations is not really Islam, but the fact that poor, uneducated villagers just do stupid things. To put it into perspective, consider the whole Michael Vick dogfighting thing. People who defend him note that he didn't know better, because this sort of violent, inhuman "sport" was part of his "[redneck] southern culture". Well, I grew up in the south, and have seen enough of it to believe this, at least for some pockets of the region. Now, imagine your most dumbest, most back-water Virginia or Georgia redneck, time-wrap him back a hundred years, reduce his level of education and income by an order of magnitude, and you have the sort of dumb Bengali villager that is willing to whip a women because some mufti told him to. Do you honestly believe you even need to bring Islam into the discussion to explain the behavior?
That's not the quote. The quote is more along the lines of "the lowest animals in god's sight are unbelievers" (ie: those that do not believe in God). Not much different than, say,
"In flaming fire taking vengeance on them that know not God, and that obey not the gospel of our Lord Jesus Christ:" (2 Th.1:8)
The Skeptic's Annotated Bible has a pretty nice laundry list of all the horrible things in the Bible (and the Quran and the book of Mormon too, by the way). The bottom line is that these books were all written by a bunch of angry people living in the desert (christ, if I lived in the Middle East I'd be pissed too), and people should pick and choose the bits of them that don't suck.
The real problem is that the Muslims actually believe all the crap in the Quran, while most Christians these days only pay lip service to the crap in the Bible.
I see what you're trying to get at, but I think you have to remember one thing. "Islam" is not an entity, like say the Church of Scientology or the Catholic Church. Like "Protestantism", Islam is decentralized religion with many sects. There are certain entities within the Islamic world that will try to have you killed for what you say, but at the same time, there are lots of non-radical groups of Muslims (encompassing hundreds of millions of people in several countries around the world), in which this sort of thing doesn't happen. This is especially true in Muslim countries where the legal system is not based on Islamic law.
I'm not advocating government intervention here, but more active social ostracization. Society is far too accepting of these lunatics (as evidenced by the fact that we somehow have 3 presidential candidates who actively spout this nonsense).
Of all the ways parents fail their children, not teaching them to think has to be one of the worst, yet simultaneously it is one of the most accepted. People are shocked at parents whose emotional abuse of their children leave them emotionally scarred as adults, but are at most mildly bemused at parents whose intellectual abuse of their children leave them intellectually disabled as adults.
"My belief/moral/cultural system is superior to theirs."
At what point can we say that a certain set of beliefs (not necessarily a whole system, but certain ones) are indeed superior? Stupid ideas in religious have been losing the war ever since the Enlightenment. When can we draw the line on certain things? I mean, for god's sake, even the Pope has excepted evolution, can't we call out people who teach their children otherwise for what they're really doing --- lying blatantly to their children about fundamental truths of the world?
As a parent, I wonder what kind of hot water I'd get myself into if I raised children to believe that 2 +2 = 7, or that the alphabet has 37 characters. I mean, even if it's not illegal, most people would consider such a behavior to be at least very cruel and permanently damaging.