Dynamic typing where you can create new identifiers implicitly is pretty scary to me.
You're mistaken about the meaning of "dynamic typing." To put it simplistically: a dynamic type system is one where the type of the object or value bound to an identifier can only be known at runtime; or, in other terms, any variable may be set to any object of any type. Static typing, conversely, is when the types of the values bound to the identifiers is known at compilation time.
Python doesn't have the ability to "create new identifiers implicitly" any more or any less than C. In both languages, the implementation can statically analyze the code at each block to determine which identifiers are used in that block, and generate code that preallocates them in a stack frame. In both cases, which identifiers are used in each function can be determined from static analysis of the code. To make it dead simple: the Python parser, when parsing a function, can enumerate every single variable used in that function, just as well as a C parser can do the same for a C function.
A third example that's "in between" C and Python: OCaml is statically typed like C, but most identifiers are introduced without type declarations, like in Python. This is because OCaml has type inference; it can figure out the type of (nearly) all expressions and identifiers at compilation time.
And yet a fourth example, just to make the concept of static vs. dynamic typing more subtle: Java's type system has both static and dynamic components. Each identifier in a Java program must have a declared type, but all identifiers may be bound at runtime to objects of a subtype of the declared type. The declared type of the identifier provides a compilation-time guarantee that the values of the identifier will belong to a set of types; still, the objects must carry around type tags, and many operations require checking the tagged type of the objects at runtime.
You forgot to mention that it will fail for the exact same reasons that Good Old-Fashioned AI has always failed. All the classifications in the ontology, when actually applied to any real-world problem, will turn out to be unexpectedly and hopelessly fragile.
You're getting away from the point though. Google isn't taking up-skirt pictures. They aren't using a telephoto lens. They aren't recording private conversations. And no one is walking around naked! Google is taking pictures from a normal vantage point.
Systematically so as to provide complete coverage of the areas they photograph, indexed geographically and linked to a database of street addresses, which is further linked to other kinds of databases.
This is a very big and important difference. Google isn't taking a handful of photos as art, or even as casual snapshots. Why should the case law that protects common, everyday photography also cover what they're doing?
(Of course, things are going to get a lot worse once the camera makers start adding GPS to cameras, and the photos that people post to the web come with EXIF tags that record precise geographical location...)
There's this stuff called "spectrum" and it is not really "owned" by anyone. The government, acting on behalf of the people collectively, sells the rights to proscribed use of that spectrum in the interests of maximizing competition and creating the most benefit to citizens.
Gee, that sure sounds like the government sold the companies the spectrum, and now the companies own it. (Litmus test: can the companies that won a bid on a spot sell it to third parties?)
Not really. "Sequentially" is not inherent to the meaning of "foreach" - it's really just "do some action for each element of the sequence". Most of those can be parallelized.
Suppose I need to write a function that takes an ordered list of strings, and concatenates them in the order in which they appear in the list. The normal manner of writing this fucntion does the following things: (a) initialize a string buffer the build up the result; (b) use foreach to loop over the list elements, and append the contents of each string to the result buffer.
Are you seriously telling us that this is an incorrect implementation of the algorithm, because the program is allowed at runtime to process the elements in any order?
Foreach does assume order and sequence, and imperative algorithms have always relied on this. But it's even worse, because it's not just order and sequence: foreach also allows for completely unrestricted communication from early runs through the loop to later ones. The partial result produced in a later iteration through a foreach loop is allowed to depend in any way on the result from the previous iterations through the same loop. The example algorithm above is an example: each iteration through the loop relies on previous iterations having appended each previous string to the buffer, and having done so in the order in which they occur in the string.
In a language with side effects, such as C#, it's just as easy to write a non-parallelizable map as it is to write a non-parallelizable foreach - you just have to rely on the result of the previous iteration (and who said the mapping function can't have side effects?).
The contract for map is so. If you're using map and your mapping "function" is stateful, then the result is undefined. If you wrote such a mapping function, your code has a latent bug, even if it shows the correct behavior in the current implementation of the language. The whole point of map, again, is to perform a computation where there are no data dependencies between elements.
If you must transform a collection in a way where the processing each element depends on the results from processing other elements in the same collection, you shouldn't use map; you should use a higher-order operator that codifies what information each step of the computation receives from the rest. This is the whole point, and the whole problem with foreach; every time you process a collection, there is a structural relation between the input, the correct output, and the computations that may be performed on the input to produce that output. Each higher-order function encodes one such structural relation. With a programs written to use such functions, therefore, it at the very least much easier to discover opportunities for reordering and parallelism.
Suppose you had a definitive, 100% guaranteed answer to the "discovered vs invented" question. What would it allow you to do that you couldn't do before?
That approach is not logical positivism. It's Pragmatism. Two completely different schools. Logical positivists regard all statements as meaningless that do not have a truth value determined by either the logical system itself (tautologies, contradictions) or by contingent empirical facts ascertainable through observation. Pragmatists, on the other hand, don't believe in truth-conditional semantics; the meaning of a linguistic expression is a function of the practical consequences of its use.
When faced with an awkward question, logical positivism asks: what would the answer tell me about the future?
Logical positivism? You mean the school of philosophy that was thoroughly discredited by the 50's? You know, Schlick, Carnap, Ayers, etc.?
And also, what has "the future" got to do with anything here? Perhaps what you mean is: what is the empirical content of the position in question? If there is none, then the position is "metaphysical" (which is the fancy, logical positivist way of saying "bullshit").
To be fair, I find that a lot of high-level (business layer) code I write today consists of "foreach (...) {... }". It would seem that there are quite a few opportunities to parallelize there.
...which the compiler can't discover, because foreach describes a mechanism (looping through a sequence, in order), and not a high-level transformation.
Compare foreach with map. Map is a higher order function that takes a function and a collection, and results in a collection of the same size and structure as the original, but with each element replaced by the result of applying the supplied function to it. Note that the value of each element in the result depends only on the corresponding element of the input. It's trivial to parallelize map.
You can parallelize map easily because it has a favorable contract that specifies the relationship between its inputs and its outputs, and it just so happens that this contract is amenable to parallel execution. A smart compiler, upon seeing a use of map, can trivially tag it as a parallelism candidate.
But since foreach specifies a sequential looping mechanism, there are no guaranteed relations between the input and output (in fact, not even any simple way to determine what should be treated as inputs and outputs). When you write a foreach loop to perform the equivalent of a map, you're underspecifying the transformation you're performing on your collection, and overspecifying the mechanism. That's bad programming.
You mention Parallel LINQ, and this is very relevant. LINQ is based on operations similar to map, that transform sets into sets. LINQ queries, since they abstractly describe the relation between an input and the desired output, can be executed in a number of ways: (a) the system can translate them into SQL queries and send them to a database server to execute; (b) the system can execute them serially; (c) the system can execute them in parallel.
It's not unusual that utilities board will demand that 99.98 or 99.99 of the time, someone picks up the phone, they'll get a dial-tone, first try.
Getting a dialtone doesn't guarantee success in placing a call. These are completely different problems. If you don't get a dialtone, it means that the network is broken. If you get "sorry, all circuits are busy," it means that the network is working, but its bandwidth along the segment you want has hit the maximum.
There are certainly standards that require telephone networks to drop some calls in favor of others (emergency calls can knock out other calls from busy exchanges), but it is certainly normal for telephone service to hit circuit limits during emergencies.
[...] and continue to let ISPs deceptively advertise "unlimited" Internet access. Yes, technically, the advertising is truthful, but it is intentionally misleading, and we are all paying the price for it.
How is it any more misleading than your phone company telling you you can use your phone any day, any time of the day, despite the fact that if too many people try to use it at once, you start hitting limits on the number of simultaneous active circuits? One can even argue it's less misleading, because an IP network degrades more gracefully than a circuit-switched network; even when you can't get full bandwidth, you may still get half, while with the phone network, it's all or nothing.
Unfortunate thing is, some other countries actually bit the bullet and invested in building that infrastructure that is so unreasonable, and now companies are going there instead and bringing their capital investment with them. South Korea comes to mind.
You seriously think South Korea built enough backbone to support all of their population using it at the same time? Do you seriously think South Korean ISPs don't "oversell" their bandwidth too?
You can make all the noise you want about how unreasonable it is to build ten lane highways, it doesn't change the fact that the infrastructure hasn't seen adequate investment by the big telecommunication monopolies, not just by some absolute measure pulled out of the sky, but relative to other nations.
Strawman. The thing that GP was replying to has nothing to do with whether American ISPs have built enough bandwidth or not, or whether they've done it out of greed or whatever.
Let's review what you said in your earlier post:
Line costs are like a house. You add up the capacity, you divide it by the amount of capacity you promise people, that's how many people you can support on your service.
So for example, if an ISP has a 45Gbps uplink, and promise 1.55Mbps to each subscriber, then they can only support 30,000 subscribers on that uplink.
That's a bad argument, and GP called you on it. Line costs for the uplink aren't "like a house," they're like the street network that connects your house to the rest of the country. The uplink is a shared resource, and the question is how to use it most efficiently, so that its users get the service they need for as low a price as possible.
People don't build networks the way you described, because it's economically inefficient. GP provided examples of many networks that aren't built like that: power, water, roads, telephone. The point of building a shared network is to lower every subscriber's cost for the amount of service they do use. A simple modification of your model is to add a percentage utilization factor. Let's suppose the correct factor is 30%; an ISP should build enough bandwidth to support 30% of its users getting full speed at once. This means that the 45Gbps uplink in the example above would support 100,000 subscribers. Since the cost of the uplink is now shared by more users, this means that each user may now pay less for their connection.
Now, you can argue that the ISPs don't have enough uplink or backbone capacity. Fine; in the modified model, this means the ISPs have built their network with too low of an utilization factor. The problem is that you're framing your claim that the ISPs are "fraudulently" selling capacity as a claim that the architecture of their network is wrong, because they don't build out a 100% utilization network. And that's just dumb.
In the absence of laws to the contrary (and I am quite certain there are no laws to the contrary), yes.
What do you mean by "laws"? Do you just mean statutes, or do you also include case law? Do you have some argument to the effect that the kind of publication they are doing should not be seen as a new case of an existing tort?
I presume you mean teenaged as in "under the age of consent".
I mean teenaged as in "consistent with being under the age of consent." This is, however, embellishment to the question, rather than essential to it. Even if she wasn't under the age of consent, just because you accidentally saw her naked doesn't give you the right to publish photos of that.
He's not responsible for seeing her, if he walked past on public property (or had permission on private property), because he didn't act in any way he didn't have a right to.
So he's "rightfully" seen her naked, then? Let me remind you of what you wrote: "And we have the right to publish photos of anything we've rightfully seen."
But if he took out a camera, or kept a camera going that was already recording, once he knew (or could reasonably have guessed) that an underage person was being recorded, he was responsible.
Yes, we have statutes that specifically address the issue of underage persons (though I'm not convinced you're interpreting them right; there are situations where one may lawfully take and publish photos of naked minors (even without the consent of parents or guardians, in some cases)). Now suppose she wasn't underage.
This isn't complicated at all. There are privacy rights, and there are other restrictions. When you do something, you're responsible, unless you didn't know you were doing it, but only if you need not have known, as a sensible person. Your mother presumably taught you all this. It's no different in the "real world". Listen to your mama, and you won't go far wrong.
Thanks for the condescension. Now can you just please admit that you were wrong when you said that "we have the right to publish photos of anything we've rightfully seen"?
And we have the right to publish photos of anything we've rightfully seen.
My former housemate once walked past a house and, accidentally, saw a naked teenaged girl through a window. Did he wrongfully see her? If not, did he have the right to take and publish a naked photo of her?
People walk past my house every day. I have no reasonable expectation that someone will not see the front of my house. Likewise, I have no reasonable expectation that someone will not take a picture of it, regardless of their purpose. If it can be seen by one person without license, it can be seen be all people without license.
By the same token, if you take all your clothes off in front of your window, you have no reasonable expectation that somebody will not see you naked from the street. Likewise, you have no reasonable expectation that someone will not take a picture of it. And if that person can see you naked without a license, so can everybody, so the person has a right to publish that picture--and to make money off it.
There's a key problem here: you're failing to distinguish between the right to take a photo, and the right to use such a photo in a particular manner. Just because Google has the same right as you do to take a photo of my house, doesn't mean that they have the right to use it in the specific ways they do.
You don't have a reasonable expectation that somebody will not see you naked if you take off your clothes somewhere where people are likely to see you; you still do have a reasonable expectation that others will not take publish such photos for gain without your explicit permission. Likewise, just because you don't have a reasonable expectation that somebody will not take a photo of your house, doesn't mean you may not have a reasonable expectation that somebody will incorporate such a photo into a publically accessible geographical database cross-linked with street addresses. Google may be reasonably called to court to argue why they should be allowed to publish such a database, and a court may reasonably rule that they are not.
By your definition here it would be impossible for a couple of tourists to take their picture on a famous bridge in most major cities, asking all the businesses and homes potentially in view on both sides of the river for permission would be prohibitive.
Regardless of whether it follows from his definition, there is a legal difference (in the USA, in general) between an intentional, recognizable depiction of a specific person or building, versus a picture that just happens to include the person or building. If I take a picture of a crowd that just happens to include you, the range of uses I can make of that photo is broader than those I could make of a portrait that included only you. By the same token, there's a difference between a photo of a building, and a photo that just happens to have that building it.
And you're missing an even more fundamental issue here: the difference between the right to take a photo and the right to use a photo in a specific manner. If I see you in a public place, I have a right to take a photo of you. I don't thereby have the right to put your photo in a print ad for a company, with a fake quote in the bottom saying that you approve of that company's products or services.
Photography in the US is permitted in public places, and does not require permission in advance.
But not all uses of photos taken in public places are permitted, and many require permission in advance. Sure, Google are allowed to take the photos. Are they allowed to publish them in the specific way they do, linking them all together in a publically accessible geographic information system that they use to promote their business interests? That's a serious question.
You have no expectation of privacy with regard to Google Street View photographs, or any other "shutterbug" snapping pictures on your street, provided the photos were taken from public property, and were not done in such a way as to grossly invade your space (telephoto lenses into your bathroom window, for example).
The problem here is that you (and the law, arguably, I'll grant) are equating Google Street View with random shutterbugs. There's a difference between a dude taking random photos of houses that they see on the street, for their own private enjoyment, and a corporation systematically taking photos of every street in an area, and linking them into a publically searchable, geographical database that can be easily correlated with all other sorts of public databases.
Your argument, frankly, is uncomfortably similar to someboday back in the early days of portable cameras had argued that if you, walking on the street, see a woman undressing in her window, you should be allowed to take and publish photos of her, on the premise that anybody who was walking by at that moment could see her naked. The point of the comparison is that a new piece of technology (in your case, Google Street View, in my case, a portable photo camera) changes the privacy implications of something being visible from public property. Before portable cameras, a visibly naked woman through a window would only be seen by those who just happened to walk by at that moment; after portable cameras, a photo of said event could potentially be seen by millions of people over many years. Likewise, a photo of your house didn't have the same implications before the arrival of publically searchable geographical information systems that cross-reference systematically collected databases of street view photos to the street addresses depicted, which can be easily further correlated to all kinds of public records trivially accessible online.
Ponder the following (hypothetical) case: if the photo of the naked woman at the window is disseminated on the Internet along with its approximate location, Google Street View can be used to confirm or disconfirm hypotheses about the exact street address where the woman lives; this address, in turn, can potentially be used to obtain her name and phone number. This is a serious privacy implication of Google Street View, that goes beyond the privacy implications that such a photo may have had in the era before the Internet. I expect there to be countless other such implications.
Note that I've not argued so far whether Google are within their rights to offer Street View; so far I'm just trying to make you see that there is a very serious question whether they are within their rights. In the USA at least, the right to privacy is a right that's been recognized and interpreted by case law. Case law proceeds by deciding particular disputes, and often must revise or expand upon previous case law to deal with new situations or technology. Privacy law must balance people's right to control the dissemination and use of information about them, with other people's right to obtain and use such information, and different kinds of information and uses are judged differently; you're not allowed to conceal your criminal record from others, for example. You can't just flatly claim that the law allows Google to provide Street View, because the law is not final, and the courts may well require you to provide positive argument about why the law should not forbid Google from providing it.
Given that notes are brief statements of fact by definition [...]
That's the key flawed assumption you're making. Notes aren't necessarily that; notes can in fact be word-by-word transcriptions of what the lecturer said. There are many books out there that are nothing other than edited student notes of lectures; Saussure's Cours de linguistique générale is one, as are many of Wittgenstein's posthumous books.
There are very many fine lines here; the general sort of question is to what extent the notes in question reflect the knowledge taught by the lectures, versus to what extent they reflect the specific form that the lecture took. Notes run all the spectrum from "brief statements of fact" to, again, verbatim transcription. Also, your assumption that the content of lectures is "statements of facts" is wrong. Whether the content of a lecture is factual or not is irrelevant. What's relevant is the right balance between the lecturer's intellectual property rights over the use of their original work, versus the students' free speech rights to discuss or critique it. And guess what? It tends to hinge on details, not generalities.
You're missing the real problem. [...] If net company X has a total of 100M of bandwidth they can sell, and they only sell it in 5M chunks and only to 20 people, then everyone can download at their max speed, no one notices, everyone is happy. Sadly, that's not what company X is doing. They have 100M of bandwidth, this is sure. They sell it in 5M chunks. But instead of only selling it to 20 people, they sell to 40. If all 40 people use the 5M of pipe they were promised, company X shits bricks, at best each customer is only getting half of their promised bandwidth, and people are cranky.
Yes. That's not a bug, that's a feature. The point of a communications network is to make the most efficient shared use of limited bandwidth. Compare:
In a public broadcasting network, a station can get full bandwidth all the time, but the station must be the unique sender in its channel, and everybody else must receive the exact same data at the exact time.
In the plain old telephone network, subscribers get "24/7" service, but each call gets a full-bandwidth circuit, but there's a limited number of circuits; when this limit is exceeded, you get zero bandwidth. Everyone can use the phone at any time as long as everybody doesn't try to use it at the same time. The content of one call is independent from the content of every other call.
In a packet-switched network, there are no circuits, so there's no upper bound on the number of channels, but subscribers must still share limited bandwidth. Everyone can get full bandwidth at any time as long as everybody doesn't get full bandwidth all the time. However, unlike the phone network, where you get either full bandwidth or zero bandwidth, you get a gradual drop-off of bandwidth as the number of simultaneous users goes up.
Your problem is that you want broadcast network bandwidth guarantees from a packet-switched network. Not gonna happen.
The only important thing to know about SQL is that it is a declarative language, i.e. in the same family as Prolog. Common to them is that you state how you would want the world to look like, and let the language runtime figure out how to actually do it.
Only most of the time. To really master SQL (or Prolog, for that matter), you need to understand how the system actually carries out your queries, and how to optimize that process for the 20% of the queries that end up taking 80% of the time. In most SQL databases, this is done through a number of mechanisms, for example:
Indexing tables on the columns used in the slow queries.
Hinting the query in order to guide the optimizer into making better choices.
Improving the query itself so that the optimizer can pick a better plan. For example, sometimes adding seemingly redundant conditions to a query speeds it up, because it gives the optimizer information that it couldn't figure out on its own.
Using materialized views or equivalent features to precompute frequently reused, expensive relations.
What you're doing is pattern-matching the expressions to the left-hand sides function definitions, substituting according to the right-hand sides, and using those to simplify step-by-step to a final answer.
In logic programming, on the other hand, there are no functions, just predicates. Append(A,B,C) is a three-place predicate that is only true if A, B and C are bound to lists such that, if you appended A to B, you'd get C. In pseudo-code, again:
The first predicate is only satisfied if the first argument is an empty list, and if the other two are equal lists: i.e., the append of empty list to B is B. Likewise for the second. The third one is satisfied if all these conditions are met:
* The head of the first and third lists is the same value. * The append of the tail of the first list and the second list is the tail of the third list.
While the functional program operates by applying functions over the "input" lists to produce an "output" list, the logic program accepts any combination of values and unspecifed variables for the argument slots, and searches for values that, replaced for the variables, make the predicate true. To append two lists, you can specify the first two args and give a variable for the third:
append([1,2], [3,4], C)? => C = [1,2,3,4]
...or you can specify the second and third only:
append(A, [3,4], [1,2,3,4])? => A = [1,2]
... or even just the third one, in which case, the program produces the following answers (only one at a time; after it's given you an answer, you can request it to produce another one):
append(A, B, [1, 2, 3, 4])? => A = [], B = [1,2,3,4] => A = [1], B = [2,3,4] => A = [1,2], B = [3,4] => A = [1,2,3], B = [4] => A = [1,2,3,4], B = []
You can do even more complicated queries than that:
You're mistaken about the meaning of "dynamic typing." To put it simplistically: a dynamic type system is one where the type of the object or value bound to an identifier can only be known at runtime; or, in other terms, any variable may be set to any object of any type. Static typing, conversely, is when the types of the values bound to the identifiers is known at compilation time.
Python doesn't have the ability to "create new identifiers implicitly" any more or any less than C. In both languages, the implementation can statically analyze the code at each block to determine which identifiers are used in that block, and generate code that preallocates them in a stack frame. In both cases, which identifiers are used in each function can be determined from static analysis of the code. To make it dead simple: the Python parser, when parsing a function, can enumerate every single variable used in that function, just as well as a C parser can do the same for a C function.
A third example that's "in between" C and Python: OCaml is statically typed like C, but most identifiers are introduced without type declarations, like in Python. This is because OCaml has type inference; it can figure out the type of (nearly) all expressions and identifiers at compilation time.
And yet a fourth example, just to make the concept of static vs. dynamic typing more subtle: Java's type system has both static and dynamic components. Each identifier in a Java program must have a declared type, but all identifiers may be bound at runtime to objects of a subtype of the declared type. The declared type of the identifier provides a compilation-time guarantee that the values of the identifier will belong to a set of types; still, the objects must carry around type tags, and many operations require checking the tagged type of the objects at runtime.
You forgot to mention that it will fail for the exact same reasons that Good Old-Fashioned AI has always failed. All the classifications in the ontology, when actually applied to any real-world problem, will turn out to be unexpectedly and hopelessly fragile.
Systematically so as to provide complete coverage of the areas they photograph, indexed geographically and linked to a database of street addresses, which is further linked to other kinds of databases.
This is a very big and important difference. Google isn't taking a handful of photos as art, or even as casual snapshots. Why should the case law that protects common, everyday photography also cover what they're doing?
(Of course, things are going to get a lot worse once the camera makers start adding GPS to cameras, and the photos that people post to the web come with EXIF tags that record precise geographical location...)
Gee, that sure sounds like the government sold the companies the spectrum, and now the companies own it. (Litmus test: can the companies that won a bid on a spot sell it to third parties?)
Of course nobody reports that. It's not news!
The biggest problem with Facebook Beacon isn't the opt-out (though that is indeed a problem). The problems with it are:
1. It broadcasts users' purchases to Facebook, which then broadcasts them to other users.
2. Facebook gets paid to coopt their users' identities to promote their commercial partners' products. This is really the nastiest one, if you ask me.
3. According to the lawsuit recently filed against Blockbuster and Facebook, it continues to unlawfully share information about users who have opted out.
I don't think that MySpace using information volunteered by its users to target ads to them is unlawful at all.
Suppose I need to write a function that takes an ordered list of strings, and concatenates them in the order in which they appear in the list. The normal manner of writing this fucntion does the following things: (a) initialize a string buffer the build up the result; (b) use foreach to loop over the list elements, and append the contents of each string to the result buffer.
Are you seriously telling us that this is an incorrect implementation of the algorithm, because the program is allowed at runtime to process the elements in any order?
Foreach does assume order and sequence, and imperative algorithms have always relied on this. But it's even worse, because it's not just order and sequence: foreach also allows for completely unrestricted communication from early runs through the loop to later ones. The partial result produced in a later iteration through a foreach loop is allowed to depend in any way on the result from the previous iterations through the same loop. The example algorithm above is an example: each iteration through the loop relies on previous iterations having appended each previous string to the buffer, and having done so in the order in which they occur in the string.
The contract for map is so. If you're using map and your mapping "function" is stateful, then the result is undefined. If you wrote such a mapping function, your code has a latent bug, even if it shows the correct behavior in the current implementation of the language. The whole point of map, again, is to perform a computation where there are no data dependencies between elements.
If you must transform a collection in a way where the processing each element depends on the results from processing other elements in the same collection, you shouldn't use map; you should use a higher-order operator that codifies what information each step of the computation receives from the rest. This is the whole point, and the whole problem with foreach; every time you process a collection, there is a structural relation between the input, the correct output, and the computations that may be performed on the input to produce that output. Each higher-order function encodes one such structural relation. With a programs written to use such functions, therefore, it at the very least much easier to discover opportunities for reordering and parallelism.
That approach is not logical positivism. It's Pragmatism. Two completely different schools. Logical positivists regard all statements as meaningless that do not have a truth value determined by either the logical system itself (tautologies, contradictions) or by contingent empirical facts ascertainable through observation. Pragmatists, on the other hand, don't believe in truth-conditional semantics; the meaning of a linguistic expression is a function of the practical consequences of its use.
Logical positivism? You mean the school of philosophy that was thoroughly discredited by the 50's? You know, Schlick, Carnap, Ayers, etc.?
And also, what has "the future" got to do with anything here? Perhaps what you mean is: what is the empirical content of the position in question? If there is none, then the position is "metaphysical" (which is the fancy, logical positivist way of saying "bullshit").
...which the compiler can't discover, because foreach describes a mechanism (looping through a sequence, in order), and not a high-level transformation.
Compare foreach with map. Map is a higher order function that takes a function and a collection, and results in a collection of the same size and structure as the original, but with each element replaced by the result of applying the supplied function to it. Note that the value of each element in the result depends only on the corresponding element of the input. It's trivial to parallelize map.
You can parallelize map easily because it has a favorable contract that specifies the relationship between its inputs and its outputs, and it just so happens that this contract is amenable to parallel execution. A smart compiler, upon seeing a use of map, can trivially tag it as a parallelism candidate.
But since foreach specifies a sequential looping mechanism, there are no guaranteed relations between the input and output (in fact, not even any simple way to determine what should be treated as inputs and outputs). When you write a foreach loop to perform the equivalent of a map, you're underspecifying the transformation you're performing on your collection, and overspecifying the mechanism. That's bad programming.
You mention Parallel LINQ, and this is very relevant. LINQ is based on operations similar to map, that transform sets into sets. LINQ queries, since they abstractly describe the relation between an input and the desired output, can be executed in a number of ways: (a) the system can translate them into SQL queries and send them to a database server to execute; (b) the system can execute them serially; (c) the system can execute them in parallel.
Getting a dialtone doesn't guarantee success in placing a call. These are completely different problems. If you don't get a dialtone, it means that the network is broken. If you get "sorry, all circuits are busy," it means that the network is working, but its bandwidth along the segment you want has hit the maximum.
There are certainly standards that require telephone networks to drop some calls in favor of others (emergency calls can knock out other calls from busy exchanges), but it is certainly normal for telephone service to hit circuit limits during emergencies.
How is it any more misleading than your phone company telling you you can use your phone any day, any time of the day, despite the fact that if too many people try to use it at once, you start hitting limits on the number of simultaneous active circuits? One can even argue it's less misleading, because an IP network degrades more gracefully than a circuit-switched network; even when you can't get full bandwidth, you may still get half, while with the phone network, it's all or nothing.
You seriously think South Korea built enough backbone to support all of their population using it at the same time? Do you seriously think South Korean ISPs don't "oversell" their bandwidth too?
Strawman. The thing that GP was replying to has nothing to do with whether American ISPs have built enough bandwidth or not, or whether they've done it out of greed or whatever.
Let's review what you said in your earlier post:
So for example, if an ISP has a 45Gbps uplink, and promise 1.55Mbps to each subscriber, then they can only support 30,000 subscribers on that uplink.
That's a bad argument, and GP called you on it. Line costs for the uplink aren't "like a house," they're like the street network that connects your house to the rest of the country. The uplink is a shared resource, and the question is how to use it most efficiently, so that its users get the service they need for as low a price as possible.
People don't build networks the way you described, because it's economically inefficient. GP provided examples of many networks that aren't built like that: power, water, roads, telephone. The point of building a shared network is to lower every subscriber's cost for the amount of service they do use. A simple modification of your model is to add a percentage utilization factor. Let's suppose the correct factor is 30%; an ISP should build enough bandwidth to support 30% of its users getting full speed at once. This means that the 45Gbps uplink in the example above would support 100,000 subscribers. Since the cost of the uplink is now shared by more users, this means that each user may now pay less for their connection.
Now, you can argue that the ISPs don't have enough uplink or backbone capacity. Fine; in the modified model, this means the ISPs have built their network with too low of an utilization factor. The problem is that you're framing your claim that the ISPs are "fraudulently" selling capacity as a claim that the architecture of their network is wrong, because they don't build out a 100% utilization network. And that's just dumb.
What do you mean by "laws"? Do you just mean statutes, or do you also include case law? Do you have some argument to the effect that the kind of publication they are doing should not be seen as a new case of an existing tort?
I mean teenaged as in "consistent with being under the age of consent." This is, however, embellishment to the question, rather than essential to it. Even if she wasn't under the age of consent, just because you accidentally saw her naked doesn't give you the right to publish photos of that.
So he's "rightfully" seen her naked, then? Let me remind you of what you wrote: "And we have the right to publish photos of anything we've rightfully seen."
Yes, we have statutes that specifically address the issue of underage persons (though I'm not convinced you're interpreting them right; there are situations where one may lawfully take and publish photos of naked minors (even without the consent of parents or guardians, in some cases)). Now suppose she wasn't underage.
Thanks for the condescension. Now can you just please admit that you were wrong when you said that "we have the right to publish photos of anything we've rightfully seen"?
My former housemate once walked past a house and, accidentally, saw a naked teenaged girl through a window. Did he wrongfully see her? If not, did he have the right to take and publish a naked photo of her?
By the same token, if you take all your clothes off in front of your window, you have no reasonable expectation that somebody will not see you naked from the street. Likewise, you have no reasonable expectation that someone will not take a picture of it. And if that person can see you naked without a license, so can everybody, so the person has a right to publish that picture--and to make money off it.
There's a key problem here: you're failing to distinguish between the right to take a photo, and the right to use such a photo in a particular manner. Just because Google has the same right as you do to take a photo of my house, doesn't mean that they have the right to use it in the specific ways they do.
You don't have a reasonable expectation that somebody will not see you naked if you take off your clothes somewhere where people are likely to see you; you still do have a reasonable expectation that others will not take publish such photos for gain without your explicit permission. Likewise, just because you don't have a reasonable expectation that somebody will not take a photo of your house, doesn't mean you may not have a reasonable expectation that somebody will incorporate such a photo into a publically accessible geographical database cross-linked with street addresses. Google may be reasonably called to court to argue why they should be allowed to publish such a database, and a court may reasonably rule that they are not.
Regardless of whether it follows from his definition, there is a legal difference (in the USA, in general) between an intentional, recognizable depiction of a specific person or building, versus a picture that just happens to include the person or building. If I take a picture of a crowd that just happens to include you, the range of uses I can make of that photo is broader than those I could make of a portrait that included only you. By the same token, there's a difference between a photo of a building, and a photo that just happens to have that building it.
And you're missing an even more fundamental issue here: the difference between the right to take a photo and the right to use a photo in a specific manner. If I see you in a public place, I have a right to take a photo of you. I don't thereby have the right to put your photo in a print ad for a company, with a fake quote in the bottom saying that you approve of that company's products or services.
But not all uses of photos taken in public places are permitted, and many require permission in advance. Sure, Google are allowed to take the photos. Are they allowed to publish them in the specific way they do, linking them all together in a publically accessible geographic information system that they use to promote their business interests? That's a serious question.
The problem here is that you (and the law, arguably, I'll grant) are equating Google Street View with random shutterbugs. There's a difference between a dude taking random photos of houses that they see on the street, for their own private enjoyment, and a corporation systematically taking photos of every street in an area, and linking them into a publically searchable, geographical database that can be easily correlated with all other sorts of public databases.
Your argument, frankly, is uncomfortably similar to someboday back in the early days of portable cameras had argued that if you, walking on the street, see a woman undressing in her window, you should be allowed to take and publish photos of her, on the premise that anybody who was walking by at that moment could see her naked. The point of the comparison is that a new piece of technology (in your case, Google Street View, in my case, a portable photo camera) changes the privacy implications of something being visible from public property. Before portable cameras, a visibly naked woman through a window would only be seen by those who just happened to walk by at that moment; after portable cameras, a photo of said event could potentially be seen by millions of people over many years. Likewise, a photo of your house didn't have the same implications before the arrival of publically searchable geographical information systems that cross-reference systematically collected databases of street view photos to the street addresses depicted, which can be easily further correlated to all kinds of public records trivially accessible online.
Ponder the following (hypothetical) case: if the photo of the naked woman at the window is disseminated on the Internet along with its approximate location, Google Street View can be used to confirm or disconfirm hypotheses about the exact street address where the woman lives; this address, in turn, can potentially be used to obtain her name and phone number. This is a serious privacy implication of Google Street View, that goes beyond the privacy implications that such a photo may have had in the era before the Internet. I expect there to be countless other such implications.
Note that I've not argued so far whether Google are within their rights to offer Street View; so far I'm just trying to make you see that there is a very serious question whether they are within their rights. In the USA at least, the right to privacy is a right that's been recognized and interpreted by case law. Case law proceeds by deciding particular disputes, and often must revise or expand upon previous case law to deal with new situations or technology. Privacy law must balance people's right to control the dissemination and use of information about them, with other people's right to obtain and use such information, and different kinds of information and uses are judged differently; you're not allowed to conceal your criminal record from others, for example. You can't just flatly claim that the law allows Google to provide Street View, because the law is not final, and the courts may well require you to provide positive argument about why the law should not forbid Google from providing it.
That's the key flawed assumption you're making. Notes aren't necessarily that; notes can in fact be word-by-word transcriptions of what the lecturer said. There are many books out there that are nothing other than edited student notes of lectures; Saussure's Cours de linguistique générale is one, as are many of Wittgenstein's posthumous books.
There are very many fine lines here; the general sort of question is to what extent the notes in question reflect the knowledge taught by the lectures, versus to what extent they reflect the specific form that the lecture took. Notes run all the spectrum from "brief statements of fact" to, again, verbatim transcription. Also, your assumption that the content of lectures is "statements of facts" is wrong. Whether the content of a lecture is factual or not is irrelevant. What's relevant is the right balance between the lecturer's intellectual property rights over the use of their original work, versus the students' free speech rights to discuss or critique it. And guess what? It tends to hinge on details, not generalities.
But the way a set of facts is presented can be protected by copyright.
Neither you nor the guy you're arguing with knows enough about this case to decide which party is in the right.
Yes. That's not a bug, that's a feature. The point of a communications network is to make the most efficient shared use of limited bandwidth. Compare:
Your problem is that you want broadcast network bandwidth guarantees from a packet-switched network. Not gonna happen.
Only most of the time. To really master SQL (or Prolog, for that matter), you need to understand how the system actually carries out your queries, and how to optimize that process for the 20% of the queries that end up taking 80% of the time. In most SQL databases, this is done through a number of mechanisms, for example:
Here's an example: in functional pseudo-code, the list append function is defined like this:
:- append(TailA, B, TailC);
append(a, []) = [];
append([], a) = [];
append(head:tail, b) = head : append(tail, b);
When you evaluate append([1,2], [3,4]), the evaluation proceeds as follows:
append([1,2], [3,4])
=> append(1:[2], [3,4])
=> 1 : append([2], [3,4])
=> 1 : append(2 : [], [3,4])
=> 1: 2 : append([], [3,4])
=> 1 : 2 : [3,4]
=> [1,2,3,4]
What you're doing is pattern-matching the expressions to the left-hand sides function definitions, substituting according to the right-hand sides, and using those to simplify step-by-step to a final answer.
In logic programming, on the other hand, there are no functions, just predicates. Append(A,B,C) is a three-place predicate that is only true if A, B and C are bound to lists such that, if you appended A to B, you'd get C. In pseudo-code, again:
append([],B,B);
append(A,[],A);
append([HeadA:TailA], B, [HeadA:TailC])
The first predicate is only satisfied if the first argument is an empty list, and if the other two are equal lists: i.e., the append of empty list to B is B. Likewise for the second. The third one is satisfied if all these conditions are met:
* The head of the first and third lists is the same value.
* The append of the tail of the first list and the second list is the tail of the third list.
While the functional program operates by applying functions over the "input" lists to produce an "output" list, the logic program accepts any combination of values and unspecifed variables for the argument slots, and searches for values that, replaced for the variables, make the predicate true. To append two lists, you can specify the first two args and give a variable for the third:
append([1,2], [3,4], C)?
=> C = [1,2,3,4]
...or you can specify the second and third only:
append(A, [3,4], [1,2,3,4])?
=> A = [1,2]
... or even just the third one, in which case, the program produces the following answers (only one at a time; after it's given you an answer, you can request it to produce another one):
append(A, B, [1, 2, 3, 4])?
=> A = [], B = [1,2,3,4]
=> A = [1], B = [2,3,4]
=> A = [1,2], B = [3,4]
=> A = [1,2,3], B = [4]
=> A = [1,2,3,4], B = []
You can do even more complicated queries than that:
append(A, A, [1,2,1,2])?
=> A = [1,2]