Then in reality; what you are consequently saying is; "While you are crossing paths with my personal property, you must close your eyes and plug your ears. This is to protect my privacy." Is that about it?
No. You're confusing (intentionally or not) a number of completely separate issues.
First, my comment was specifically about the meaning, background, history, and implications of the "if you have nothing to hide..." line. This is a biggy, and this is the specific part of the message that I was commenting on, and this specific incident is irrelevant... the mere fact that the OP even brought it up affirmatively, rather then to dismiss it, bothers me. Seriously, it does.
Setting that aside, simply to respond to your message:
Second, access to private property is not assumed. You are technically trespassing whenever you enter private property, with very specific and limited exceptions, like walking up a driveway to knock on someone's door if you have a reason to do so... and even those exceptions are not absolute: if you're walking up the driveway to sell something and there's a posted "no soliciting" sign you're breaking the law if you ignore it.
Third, even when you are allowed to cross someone's property for a legitimate purpose, you're not allowed to do anything you want while you're there. Taking photographs of their property, while on their property, and publishing them... that's definitely over the line.
You may get upset by me standing on a public road and gawking at it for the whole day, but there is not anything you can do about that
It wasn't a public road. In one case it was a private road, in another case it was actually their driveway.
I'm sure this isn't Google's normal operating procedure... both of these happened on the same day with the same van... but it seems clear to me that the guy driving the van made a mistake and it's in Google's best interests to correct it.
And the birth of that phrase, together with ESR's "Cathedral&Bazaar" and the Netscape source code release, did represent the beginning of the popularization of the idea of free software as a business opportunity.
It recognised the fact that whatever-you-call-it software was already viable in business. All the examples you cite, and many more, already existed.
Free software was not a sales argument.
Free software, in the GNU sense, was also late on the scene. The people who were already writing and using free software, tangible software, all the other names freely redistributable source code had from the '70s and early '80s, we were pretty ticked off at the way the FSF co-opted the term. Because their kind of "free software" wasn't a sales argument. But the people who made free software, open source software, whatever you call it software... the people who made it work... we were already creating it and using it and sharing it long before any of the "big names" made their splashes by taking things that were already happening and convincing people they invented it.
It's great to have a name for the movement that already existed, and I'll celebrate that, but the movement wasn't created by the summit, any more than it was started by the GNU Manifesto.
The name is *useful*, but it's just a name, it's not the same as the thing it refers to.
Different languages have different commenting and escaping mechanisms. Tcl doesn't "break comments" any more than the fact that you can't nest/*... */ comments in C means that C "breaks comments".
In Tcl, "#" is a comment *statement*. If it doesn't appear where a statement is expected, it's not a comment. In Tcl, this is a single comment:
This is similar to the ":" comment command in the UNIX shell, the "(" comment word in forth, and the "REM" comment statement in Basic. HTML and XML comments have restrictions as well.
Also, {...} *is* an escaping mechanism in Tcl. Anything inside balanced {...} is not even seen by the compiler/interpreter until it's evaluated. The only things that need to be escaped inside {...} are unbalanced "{" or "}".
Finally, if you want to really bake your brain, figure out how this works:
#!/bin/sh # Run this in the Tcl interpreter\ tclsh8.4 "$0" ${1+"$@"}
OK, then Tcl doesn't have comments. It has wakalixes. Wakalixes are just like comments, but don't elicit profanity from people who think there's some god-given definition of "comments" that it's blasphemy to ignore.
If it is read and interpreted by the compiler, and not as a compiler directive
Tcl doesn't have "compiler directives". The reason Tcl doesn't have "compiler directives" is actually pretty central to the reason why Tcl comments work the way they do.
If you run the preprocessor over the code
Tcl has no preprocessor. The reason Tcl doesn't have a preprocessor is actually pretty central to the reason why Tcl comments work the way they do.
Forth and Lisp don't have preprocessors either, for the same reason.
Forth doesn't even have comments, it has wakalixes, just like Tcl.
Comments are things you can insert into the code and the compiler/interpreter FUCKING WELL IGNORES THEM!
Meditate on this Tcl program until you understand it.
set string1 {Hello; # this is a sentence containing a pound sign} set string2 {puts "Hello"; # this is a wakalix starting with a pound sign}
Tcl isn't an ad-hoc language trying to map english-language concepts (like "it's a fucking comment") into something that computers can deal with, it's a language based on a syntax and set of semantics that has consequences on the design of the language.
It's not alone in this. Consider comments in Forth. Comments in Forth are implemented by making the opening parenthesis of the comment a Forth word:
: ( 29 word drop ; immediate
This means that when the Forth outer interpreter reads something like this:
: myword ( a b --- c )
The colon command (another immediate word) calls !bl word! to read the next input text up to a blank (myword), adds it to the symbol table, and (depending in the implementation) switches to compile mode or calls the compiler. Then the interpreter/compiler reads the open parenthesis, looks it up in the dictionary, sees it's immediate, and executes the definition of the word "(". This calls !29 word!, which reads the input up to the closing parenthesis, and discards it.
This means that in Forth you can't put comments "anywhere", you can only put them where the interpreter/compiler expects to read/execute a word.
I've already explained what happens to comments in Tcl in more detail in another message, so I won't repeat it here.
Yah, I get that problem a lot. I use my "project.sourceforge.net" page for the documentation. Sourceforge provides forums and news and bug trackers and so on and I don't see any point in duplicating that.
They're not just sending RSTs. read teh whole article, you've got routers sending SYN/ACK packets as well, pretending to be the destination host... even when that host does not exist. That's the part that's forgery.
I stand by my original assessment: my non-developer co-workers should never write code (Tcl or otherwise) if they've not had so much as a single university-level "Programming 101" course.
Maybe, maybe not. I've been a network administrator and support guy for a group of 150 PhD programmers, and some were very good but some, well... the code they write sucks asteroids through soda straws.:)
Those are the same case. A comment comes at the beginning of a statement.
set foo [list {#valid list item} {bar} {baz}]; # { unmatched brace in a comment produces error here
There's no distinction in Tcl between {#valid list item} and {#a code block starting with a comment}.
Here's another example that might help you understand:
### chunk one set separators {# ! @ % --} if {[lindex $separators $token] >= 0} {# It's a separator
lappend seplist $token
set token [next_token] }
### chunk two set separators {# ! @ % --} set block {# It's a separator
lappend seplist $token
set token [next_token] }
if {[lindex $separators $token] >= 0} $block
These two "if" statements are the same, as far as Tcl is concerned. A Tcl block consists of Tcl statements separated by newlines and semicolons. Each tcl statement is a list, with the first element of the list being a command, and the rest being the arguments. So that "if" statement is the command "if" with two arguments, or it's a three element list containing "if", {[lindex $separators $token] >= 0} and $block.
Whether the block is the result of a variable substitution or not isn't relevant. So the parser operates on lists, one list at a time. If a block is used, it gets JIT interpreted as that code and the resulting code is stored in the object alongside the list format, so the next time around it doesn't get recompiled and execution stays in the bytecode interpreter... but that's a side effect of the implementation. As far as the language is concerned it's all just strings that may be lists, code, or plain text.
"Free" software was a concept that I think really emerged with the release of GNU Emacs.
Software Tools, Fig-Forth, Small C, many families of truly free and open software were already in broad use well before then. These are not "shared source" like the old academic UNIX license or IBM's operating systems, they were free software in every sense of the word.
I was part of this community in the early '80s, and for a lot of us the GNU Manifesto was received with a big fat "so what". We were already doing what he was calling on people to do, we just weren't doing it in the academic circles he moved in.
It's hard to find successful examples of higher-level applications that are open source. I think this is fundamental in the nature of open-source software and will never change: open-source software comes about when developers build things that they themselves want to use. Things that aren't used by developers won't be implemented in open-source fashion; there is no incentive for anyone to do this.
I partly agree with this, but there are also end-user applications where there is virtually no commercial software and a lot of good open source software. I'm not sure what the mechanism is that creates these open source niches, but (for some example) virtually all the software available for doctors and technicians to deal with DICOM images from CAT scans and the like seems to be open source... and some (like OsiriX) is tremendously good.
Well, source shared with customers wasn't quite the same thing as open source... the main difference being that you couldn't redistribute it. That's what Microsoft has been calling "shared source". In the early '80s a friend of mine and I started putting together a company called "Tangible Software", with the idea that our distinction would be that our customers would get our code, and could work on it and share changes back with us, but it never got further than that because we went on to other things.
But with that as a point in the timeline, I'd say it was really the '70s that closed source really started getting rolling, and what-would-become-open-source started becoming a separate community in reaction to it. It wasn't Microsoft that was behind it, either, there were a number of companies selling binary-only software for personal computers by the mid '70s, and Radio Shack and Dick Smith's were full of binary-only programs by '78.
It was the growth of stable APIs and instruction sets that let it happen. IBM was possibly the last big company still shipping OS source, but programs that ran on top of the relatively stable APIs that operating systems provided were binary long before then.
Because it's simple. Deliberately so. It's inspired by Lisp.
There's 11 rules that define the complete syntax for Tcl, everything else including control structures is built up on top of that.
I'm responsible for some of the complexity that IS in there, originally there wasn't a distinction between {...} lists and "..." strings at all: I'm the one who suggested that variable substitution be allowed inside "...".
But if you have an expression like set foo "bar"; # (oops forgot a closing paren it will refuse to work.
No, that one's OK, but if you have set foo "bar"; # {oops forgot a closing brace it may not work.
The reason is that the parsing of comments happens at the block level, but the parsing of blocks happens at the list level. So {# this list happens to start with "pound sign"} is a list. The fact that that list might happen to be code as well doesn't make a difference when it's parsing lists.
The primary driver for free software was the post office. DECUS tapes, Dr Dobbs' Journal, Software Tools, all the user group floppy collections. Then the primary driver for free software became the phone company. Usenet, Fidonet, BBSes. The Internet didn't get into the game, really, until the '90s... free/open/watchamacallit software was decades old by then.:)
Inconceivable!
Sorry, obviously #4 is "Never quote from 'The Princess Bride' without checking your sources."
Then in reality; what you are consequently saying is; "While you are crossing paths with my personal property, you must close your eyes and plug your ears. This is to protect my privacy." Is that about it?
No. You're confusing (intentionally or not) a number of completely separate issues.
First, my comment was specifically about the meaning, background, history, and implications of the "if you have nothing to hide..." line. This is a biggy, and this is the specific part of the message that I was commenting on, and this specific incident is irrelevant... the mere fact that the OP even brought it up affirmatively, rather then to dismiss it, bothers me. Seriously, it does.
Setting that aside, simply to respond to your message:
Second, access to private property is not assumed. You are technically trespassing whenever you enter private property, with very specific and limited exceptions, like walking up a driveway to knock on someone's door if you have a reason to do so... and even those exceptions are not absolute: if you're walking up the driveway to sell something and there's a posted "no soliciting" sign you're breaking the law if you ignore it.
Third, even when you are allowed to cross someone's property for a legitimate purpose, you're not allowed to do anything you want while you're there. Taking photographs of their property, while on their property, and publishing them... that's definitely over the line.
I believe the intent of this "test" is that it means it's not a blanket exception, but is one applied on a case-by-case basis.
What happened to "Never go up against a Sicilian when Death is on the line?"
More over; this still comes down to the basics of; "if you have nothing to hide, then what is the problem?"
If you don't understand why "if you have nothing to hide, then what is the problem?" is a problem, then you really don't understand this issue.
So why are you looking at the pictures of their house?
I'm not. Next?
You may get upset by me standing on a public road and gawking at it for the whole day, but there is not anything you can do about that
It wasn't a public road. In one case it was a private road, in another case it was actually their driveway.
I'm sure this isn't Google's normal operating procedure... both of these happened on the same day with the same van... but it seems clear to me that the guy driving the van made a mistake and it's in Google's best interests to correct it.
And the birth of that phrase, together with ESR's "Cathedral&Bazaar" and the Netscape source code release, did represent the beginning of the popularization of the idea of free software as a business opportunity.
It recognised the fact that whatever-you-call-it software was already viable in business. All the examples you cite, and many more, already existed.
Free software was not a sales argument.
Free software, in the GNU sense, was also late on the scene. The people who were already writing and using free software, tangible software, all the other names freely redistributable source code had from the '70s and early '80s, we were pretty ticked off at the way the FSF co-opted the term. Because their kind of "free software" wasn't a sales argument. But the people who made free software, open source software, whatever you call it software... the people who made it work... we were already creating it and using it and sharing it long before any of the "big names" made their splashes by taking things that were already happening and convincing people they invented it.
It's great to have a name for the movement that already existed, and I'll celebrate that, but the movement wasn't created by the summit, any more than it was started by the GNU Manifesto.
The name is *useful*, but it's just a name, it's not the same as the thing it refers to.
But OSS *does* use "many eyes", so the original post still remains unexplained.
In the second paragraph, elide "In Tcl, this is a single comment:", I missed that when I removed an example.
In Tcl, "#" is a comment *statement*. If it doesn't appear where a statement is expected, it's not a comment. In Tcl, this is a single comment:
This is similar to the ":" comment command in the UNIX shell, the "(" comment word in forth, and the "REM" comment statement in Basic. HTML and XML comments have restrictions as well.
Also, {...} *is* an escaping mechanism in Tcl. Anything inside balanced {...} is not even seen by the compiler/interpreter until it's evaluated. The only things that need to be escaped inside {...} are unbalanced "{" or "}".
Finally, if you want to really bake your brain, figure out how this works:
Either its a comment or it is not.
OK, then Tcl doesn't have comments. It has wakalixes. Wakalixes are just like comments, but don't elicit profanity from people who think there's some god-given definition of "comments" that it's blasphemy to ignore.
If it is read and interpreted by the compiler, and not as a compiler directive
Tcl doesn't have "compiler directives". The reason Tcl doesn't have "compiler directives" is actually pretty central to the reason why Tcl comments work the way they do.
If you run the preprocessor over the code
Tcl has no preprocessor. The reason Tcl doesn't have a preprocessor is actually pretty central to the reason why Tcl comments work the way they do.
Forth and Lisp don't have preprocessors either, for the same reason.
Forth doesn't even have comments, it has wakalixes, just like Tcl.
Comments are things you can insert into the code and the compiler/interpreter FUCKING WELL IGNORES THEM!
Meditate on this Tcl program until you understand it.
set string1 {Hello; # this is a sentence containing a pound sign}
set string2 {puts "Hello"; # this is a wakalix starting with a pound sign}
if {$string1 != ""} $string2
Can someone explain exactly why I should care if some filmmaker stops making movies based on video games or not?
No, really, I don't understand why this is "stuff that matters".
Tcl isn't an ad-hoc language trying to map english-language concepts (like "it's a fucking comment") into something that computers can deal with, it's a language based on a syntax and set of semantics that has consequences on the design of the language.
It's not alone in this. Consider comments in Forth. Comments in Forth are implemented by making the opening parenthesis of the comment a Forth word:
: ( 29 word drop ; immediate
This means that when the Forth outer interpreter reads something like this:
: myword ( a b --- c )
The colon command (another immediate word) calls !bl word! to read the next input text up to a blank (myword), adds it to the symbol table, and (depending in the implementation) switches to compile mode or calls the compiler. Then the interpreter/compiler reads the open parenthesis, looks it up in the dictionary, sees it's immediate, and executes the definition of the word "(". This calls !29 word!, which reads the input up to the closing parenthesis, and discards it.
This means that in Forth you can't put comments "anywhere", you can only put them where the interpreter/compiler expects to read/execute a word.
I've already explained what happens to comments in Tcl in more detail in another message, so I won't repeat it here.
Yah, I get that problem a lot. I use my "project.sourceforge.net" page for the documentation. Sourceforge provides forums and news and bug trackers and so on and I don't see any point in duplicating that.
They're not just sending RSTs. read teh whole article, you've got routers sending SYN/ACK packets as well, pretending to be the destination host... even when that host does not exist. That's the part that's forgery.
I stand by my original assessment: my non-developer co-workers should never write code (Tcl or otherwise) if they've not had so much as a single university-level "Programming 101" course.
:)
Maybe, maybe not. I've been a network administrator and support guy for a group of 150 PhD programmers, and some were very good but some, well... the code they write sucks asteroids through soda straws.
Some people "get it", and some don't.
set foo [list {#valid list item} {bar} {baz}]; # { unmatched brace in a comment produces error here
There's no distinction in Tcl between {#valid list item} and {#a code block starting with a comment}.
Here's another example that might help you understand: These two "if" statements are the same, as far as Tcl is concerned. A Tcl block consists of Tcl statements separated by newlines and semicolons. Each tcl statement is a list, with the first element of the list being a command, and the rest being the arguments. So that "if" statement is the command "if" with two arguments, or it's a three element list containing "if", {[lindex $separators $token] >= 0} and $block.
Whether the block is the result of a variable substitution or not isn't relevant. So the parser operates on lists, one list at a time. If a block is used, it gets JIT interpreted as that code and the resulting code is stored in the object alongside the list format, so the next time around it doesn't get recompiled and execution stays in the bytecode interpreter... but that's a side effect of the implementation. As far as the language is concerned it's all just strings that may be lists, code, or plain text.
"Free" software was a concept that I think really emerged with the release of GNU Emacs.
Software Tools, Fig-Forth, Small C, many families of truly free and open software were already in broad use well before then. These are not "shared source" like the old academic UNIX license or IBM's operating systems, they were free software in every sense of the word.
I was part of this community in the early '80s, and for a lot of us the GNU Manifesto was received with a big fat "so what". We were already doing what he was calling on people to do, we just weren't doing it in the academic circles he moved in.
It's hard to find successful examples of higher-level applications that are open source. I think this is fundamental in the nature of open-source software and will never change: open-source software comes about when developers build things that they themselves want to use. Things that aren't used by developers won't be implemented in open-source fashion; there is no incentive for anyone to do this.
I partly agree with this, but there are also end-user applications where there is virtually no commercial software and a lot of good open source software. I'm not sure what the mechanism is that creates these open source niches, but (for some example) virtually all the software available for doctors and technicians to deal with DICOM images from CAT scans and the like seems to be open source... and some (like OsiriX) is tremendously good.
Well, source shared with customers wasn't quite the same thing as open source... the main difference being that you couldn't redistribute it. That's what Microsoft has been calling "shared source". In the early '80s a friend of mine and I started putting together a company called "Tangible Software", with the idea that our distinction would be that our customers would get our code, and could work on it and share changes back with us, but it never got further than that because we went on to other things.
But with that as a point in the timeline, I'd say it was really the '70s that closed source really started getting rolling, and what-would-become-open-source started becoming a separate community in reaction to it. It wasn't Microsoft that was behind it, either, there were a number of companies selling binary-only software for personal computers by the mid '70s, and Radio Shack and Dick Smith's were full of binary-only programs by '78.
It was the growth of stable APIs and instruction sets that let it happen. IBM was possibly the last big company still shipping OS source, but programs that ran on top of the relatively stable APIs that operating systems provided were binary long before then.
Can you explain what you mean by "ears"?
Who turns on signatures?
And why is the Tcl interpreter so brain-dead?
Because it's simple. Deliberately so. It's inspired by Lisp.
There's 11 rules that define the complete syntax for Tcl, everything else including control structures is built up on top of that.
I'm responsible for some of the complexity that IS in there, originally there wasn't a distinction between {...} lists and "..." strings at all: I'm the one who suggested that variable substitution be allowed inside "...".
But if you have an expression like
set foo "bar"; # (oops forgot a closing paren
it will refuse to work.
No, that one's OK, but if you have
set foo "bar"; # {oops forgot a closing brace
it may not work.
The reason is that the parsing of comments happens at the block level, but the parsing of blocks happens at the list level. So {# this list happens to start with "pound sign"} is a list. The fact that that list might happen to be code as well doesn't make a difference when it's parsing lists.
The primary driver for free software was the post office. DECUS tapes, Dr Dobbs' Journal, Software Tools, all the user group floppy collections. Then the primary driver for free software became the phone company. Usenet, Fidonet, BBSes. The Internet didn't get into the game, really, until the '90s... free/open/watchamacallit software was decades old by then. :)