Richard Clarke in his book Cyber War calls for some of the same kinds of controls. He calls for banning attacks on civilians, especially the banking system. He also calls for arms inspectors and an obligation of nations to assist in finding the source of attacks that come from within their borders. He calls for a "Cyber War Limitation Treaty" that would also ban putting logic bombs in civilian infrastructure. I really liked this part of the book.
The experimental Tearline Wiki system we've developed at Galois might suit your needs. Inside the firewall, you use MediaWiki with the Tearline system, and get a combined view of your internal wiki(s), possibly different wikis on different sub-nets, and you can integrate it with Wikipedia or other internet-based wikis to get the global context of the article.
As others have said, integrating your content with other people's content can be a legal issue.
Contact me if you want more information on Tearline:)
I can illustrate the concept of a null-free language with examples from Haskell.
With Haskell types, you can specify all the valid values of a particular bounded type (the same is true for non-bounded types, but its more obvious for bounded ones):
data Day = Monday | Tuesday | Wednesday | Thursday | Friday | Saturday | Sunday
Something of type "Day" cannot be NULL. It must be one of the days of the week. It's impossible to construct a value of a "Day" type without "assigning" it one of these values.
But then what if you want to handle a case where it might be none of these? There's another type for that called "Maybe", and you can wrap "Day" (or any type) in "Maybe" to indicate that it might be none of these. So "Just Monday" is a value simultaneously indicating non-null, and providing the Day value. "Nothing" indicates NULL or "none of the above".
For instance, if you write a function which gives the next day of the week, given a day of the week, it should input Day and output Day. It doesn't make sense for either its input or its output to be NULL. That is, it should have type "Day -> Day".
But if you want to handle for instance, a case of user input or parsing, where they might not give a valid day, then you should use the type "Maybe Day" or something similar.
Values of "Nothing" in Haskell roughly correspond to NULL except that the type system differentiates cases where something might be NULL and cases where something promises not to be NULL.
This turns out to be a useful distinction:)
peace,
isaac
Re:For crying out loud...
on
Brute Force
·
· Score: 1
It's not actually the case that Haskell "forces" functional purity, at least not in the way the submitter seems to think. You can do things that are a LOT like non-pure functions, you just have to use Monads. You have the so-called "unsafe" functions, which perform side-effects in otherwise "pure" functions.
So you might ask, "If you're going to write code like that in Haskell, why not just use C++." The answer is because even when using Haskell in a non-idiomatic way, Haskell is still more beautiful:)
Monads are a means of threading "stateful" code in a very clean and predictable way through your programs. The parent's comment, "Very localized state (in one function) is easy enough, but anything more pervasive and you soon become more familiar with monads than you ever wanted to be," is sorta like saying, "You can write high-level code in C++, but you will soon become more familiar with objects than you ever wanted to be."
They are indeed a part of the language, and definitely a new concept, but monads aren't nearly as confusing as people seem to think, certainly not more confusing than objects, it's just a reputation issue that makes people think monads are confusing. Take it from a random-joe hacker like me. You don't need a PhD to perform IO in Haskell.
For instance, here's a basic implementation of 'cat' in Haskell:
import System.Environment(getArgs)
main = do {a <- getArgs; lines <- mapM readFile a; putStr (concat lines);}
The code:
a <- b
is similar to assignment.
getArgs just reads in the command-line arguments as a list, so 'a' represents a list of the filenames.
readFile takes a file name, reads the contents, and returns it as a list of lines.
mapM means 'perform this computation once for each item in this list'
putStr is obvious, concat just takes a list of lists and turns it into a single list.
There's also a very cool version control system called darcs that's written in Haskell, and recently an implementation of Perl 6 called Pugs in Haskell.
peace,
isaac
distributed systems are more interesting
on
Subversion 1.1 Released
·
· Score: 4, Informative
I like Subversion just fine as a "better CVS" but if you're looking for a better version control system altogether, I would look into distributed version control systems like arch, or if you're looking for something with a better learning curve, darcs is really cool, and is implemented in the glorious Haskell programming language.
Distributed systems like these have a lot of advantages over the CVS/SVN model.
"Apt-Secure" has a nice sense of "which package sources are trusted". That means, APT maintains a list of places to get packages from. Some of these sources are trusted, and their packages can be cryptographically verified to be truly from those sources.
If there's a new version of a package from an "untrusted" source, it'll ask you if you're sure you want to upgrade that package.
I think it's silly to have package go and upgrade themselves, especially where each package has it's own way to perform the upgrade, and you have to trust each vendor's security implementation (instead of a single central one). A bunch of packages running off and upgrading themselves, each with its own security model (if any) is a great way to open yourself up to a man-in-the-middle attack several times a day. The OS should handle this in a consistent, secure way that the administrator can understand.
I, personally would like a rating system for movies that is more discriptive, ie "why is this movie rated R?" I've seen sometimes a bit vector with "Volance, Sexual content, Nudity, Brief Nudity, blah blah blah" which is nice when trying to pick a movie.
I guess that the problem is this doesn't really say too much about the _message_ of the movie: how are we going to rate, "What will my child get from this movie?" If we assume (which no one seems to be doing) that children actually learn things explicitly, understand plots, and analyze things intellectually, I think we'd find it much harder to decide what a child should watch.
One of my fears is that a parent would rely on a rating system instead of watching the movie (game, CD, whatever) themselves. But even that is better than the "availability" problem that someone mentioned reguarding Wal-Mart. Wal-Mart imposes a standard on what they will sell, making certain things (music for instance) unavailable to anyone who would like to buy it, no matter what their age is.
Besides, censoring on age ignores the fact that age groups don't have homongonous maturity levels.
And the "community censorship" is actaully the most frightening to me. If someone has standards that are different from the community they live in, it's likely that such legal forms of censorship can make them feel even more isolated.
I am more worried about the power of the media (in censorship and other things) than the power of the government;)
"Computer science courses teach skills and techniques, but they don't teach critical thinking the way physics does,"
Now that's a great quote. It's probably true at some universities. At a certain university, there's lots of debate among undergrads about the "theoretical vs practical" teaching of computer science. Basically, there's complaining that, though the introductory classes teach component engineering, function specifications, algorithms &C, they should actually be teaching us how to use Visual Basic so that we can get internships the summer after our sophmore year.
Fortunitally, some students prefer to learn real computer science.
Also Ms. Corning comments later in the article point to something that was brought up 20(?) years ago in a book called Mindstorms (Pampert?) about the Logo programming language. This teacher(Ms. Corning) seems to think that computers are a fancy full-color chalk board. Mindstorms warned that we shouldn't try to use computers to program children (ie fit computers into the current education model, at least in the US) but when children learn to program computers, they'll learn geometry and other math at the same time.
"Computers can teach information, but they don't teach a way to ask questions or conduct experiments where you don't know the correct answer ahead of time,"
Again, what kind of computer use is this quote assuming? It's the same comment as above: Computers shouldn't program children. It takes a different kind of _teaching_ to integrate the really powerful uses of computers into the education of a child.
I'd argue that a computer can be used to learn basic scientific principals, or the scientific method. If children were encouraged to be creative with the computers, and to solve problems (as in LOGO) they would discover the scientific method with only a little bit of direction.
But as long as education is thought of as "the road to a career," students will go for easy money. That's what they had 12-16 years of school for, right?
Then again, I speak only from personal experience with education. Perhaps some of you out there have been encouraged to be creative and think for yourselves.
Richard Clarke in his book Cyber War calls for some of the same kinds of controls. He calls for banning attacks on civilians, especially the banking system. He also calls for arms inspectors and an obligation of nations to assist in finding the source of attacks that come from within their borders. He calls for a "Cyber War Limitation Treaty" that would also ban putting logic bombs in civilian infrastructure. I really liked this part of the book.
peace,
isaac
The experimental Tearline Wiki system we've developed at Galois might suit your needs. Inside the firewall, you use MediaWiki with the Tearline system, and get a combined view of your internal wiki(s), possibly different wikis on different sub-nets, and you can integrate it with Wikipedia or other internet-based wikis to get the global context of the article.
As others have said, integrating your content with other people's content can be a legal issue.
Contact me if you want more information on Tearline :)
peace,
isaac
I can illustrate the concept of a null-free language with examples from Haskell.
With Haskell types, you can specify all the valid values of a particular bounded type (the same is true for non-bounded types, but its more obvious for bounded ones):
data Day = Monday | Tuesday | Wednesday | Thursday | Friday | Saturday | Sunday
Something of type "Day" cannot be NULL. It must be one of the days of the week. It's impossible to construct a value of a "Day" type without "assigning" it one of these values.
But then what if you want to handle a case where it might be none of these? There's another type for that called "Maybe", and you can wrap "Day" (or any type) in "Maybe" to indicate that it might be none of these. So "Just Monday" is a value simultaneously indicating non-null, and providing the Day value. "Nothing" indicates NULL or "none of the above".
For instance, if you write a function which gives the next day of the week, given a day of the week, it should input Day and output Day. It doesn't make sense for either its input or its output to be NULL. That is, it should have type "Day -> Day".
But if you want to handle for instance, a case of user input or parsing, where they might not give a valid day, then you should use the type "Maybe Day" or something similar.
Values of "Nothing" in Haskell roughly correspond to NULL except that the type system differentiates cases where something might be NULL and cases where something promises not to be NULL.
This turns out to be a useful distinction :)
peace,
isaac
Fortunately, Matt spells better than me ;)
--review author
It's not actually the case that Haskell "forces" functional purity, at least not in the way the submitter seems to think. You can do things that are a LOT like non-pure functions, you just have to use Monads. You have the so-called "unsafe" functions, which perform side-effects in otherwise "pure" functions.
So you might ask, "If you're going to write code like that in Haskell, why not just use C++." The answer is because even when using Haskell in a non-idiomatic way, Haskell is still more beautiful :)
Monads are a means of threading "stateful" code in a very clean and predictable way through your programs. The parent's comment, "Very localized state (in one function) is easy enough, but anything more pervasive and you soon become more familiar with monads than you ever wanted to be," is sorta like saying, "You can write high-level code in C++, but you will soon become more familiar with objects than you ever wanted to be."
They are indeed a part of the language, and definitely a new concept, but monads aren't nearly as confusing as people seem to think, certainly not more confusing than objects, it's just a reputation issue that makes people think monads are confusing. Take it from a random-joe hacker like me. You don't need a PhD to perform IO in Haskell.
For instance, here's a basic implementation of 'cat' in Haskell:
The code:
is similar to assignment.getArgs just reads in the command-line arguments as a list, so 'a' represents a list of the filenames.
readFile takes a file name, reads the contents, and returns it as a list of lines.
mapM means 'perform this computation once for each item in this list'
putStr is obvious, concat just takes a list of lists and turns it into a single list.
There's a paper, Tackling the awkward squad: monadic input/output, concurrency, exceptions, and foreign-language calls in Haskell about how to do these kinds of "real-world" things in Haskell.
There's also a very cool version control system called darcs that's written in Haskell, and recently an implementation of Perl 6 called Pugs in Haskell.
peace,
isaac
I like Subversion just fine as a "better CVS" but if you're looking for a better version control system altogether, I would look into distributed version control systems like arch, or if you're looking for something with a better learning curve, darcs is really cool, and is implemented in the glorious Haskell programming language.
Distributed systems like these have a lot of advantages over the CVS/SVN model.
"Apt-Secure" has a nice sense of "which package sources are trusted". That means, APT maintains a list of places to get packages from. Some of these sources are trusted, and their packages can be cryptographically verified to be truly from those sources.
If there's a new version of a package from an "untrusted" source, it'll ask you if you're sure you want to upgrade that package.
I think it's silly to have package go and upgrade themselves, especially where each package has it's own way to perform the upgrade, and you have to trust each vendor's security implementation (instead of a single central one). A bunch of packages running off and upgrading themselves, each with its own security model (if any) is a great way to open yourself up to a man-in-the-middle attack several times a day. The OS should handle this in a consistent, secure way that the administrator can understand.
peace,
isaac
The Ohio Supercomputer Center has a similar cluster here
Though I don't see anything about its speed in terms of gigaflops
And here's one press release here.
That's some really good news. I didn't know there was yet a way to put the PBG3 to sleep. I've been reading old "Powerbook Support" pages, I guess.
Do you recommend any pages that are pretty up-to-date?
peace,
ijones
I, personally would like a rating system for movies that is more discriptive, ie "why is this movie rated R?" I've seen sometimes a bit vector with "Volance, Sexual content, Nudity, Brief Nudity, blah blah blah" which is nice when trying to pick a movie.
;)
I guess that the problem is this doesn't really say too much about the _message_ of the movie: how are we going to rate, "What will my child get from this movie?" If we assume (which no one seems to be doing) that children actually learn things explicitly, understand plots, and analyze things intellectually, I think we'd find it much harder to decide what a child should watch.
One of my fears is that a parent would rely on a rating system instead of watching the movie (game, CD, whatever) themselves. But even that is better than the "availability" problem that someone mentioned reguarding Wal-Mart. Wal-Mart imposes a standard on what they will sell, making certain things (music for instance) unavailable to anyone who would like to buy it, no matter what their age is.
Besides, censoring on age ignores the fact that age groups don't have homongonous maturity levels.
And the "community censorship" is actaully the most frightening to me. If someone has standards that are different from the community they live in, it's likely that such legal forms of censorship can make them feel even more isolated.
I am more worried about the power of the media (in censorship and other things) than the power of the government
peace,
ijones
"Computer science courses teach skills and techniques, but they don't teach critical thinking the way physics does,"
Now that's a great quote. It's probably true at some universities. At a certain university, there's lots of debate among undergrads about the "theoretical vs practical" teaching of computer science. Basically, there's complaining that, though the introductory classes teach component engineering, function specifications, algorithms &C, they should actually be teaching us how to use Visual Basic so that we can get internships the summer after our sophmore year.
Fortunitally, some students prefer to learn real computer science.
Also Ms. Corning comments later in the article point to something that was brought up 20(?) years ago in a book called Mindstorms (Pampert?) about the Logo programming language. This teacher(Ms. Corning) seems to think that computers are a fancy full-color chalk board. Mindstorms warned that we shouldn't try to use computers to program children (ie fit computers into the current education model, at least in the US) but when children learn to program computers, they'll learn geometry and other math at the same time.
"Computers can teach information, but they don't teach a way to ask questions or conduct experiments where you don't know the correct answer ahead of time,"
Again, what kind of computer use is this quote assuming? It's the same comment as above: Computers shouldn't program children. It takes a different kind of _teaching_ to integrate the really powerful uses of computers into the education of a child.
I'd argue that a computer can be used to learn basic scientific principals, or the scientific method. If children were encouraged to be creative with the computers, and to solve problems (as in LOGO) they would discover the scientific method with only a little bit of direction.
But as long as education is thought of as "the road to a career," students will go for easy money. That's what they had 12-16 years of school for, right?
Then again, I speak only from personal experience with education. Perhaps some of you out there have been encouraged to be creative and think for yourselves.
peace,
ijones