> I've heard that LISP is very useful to people researching AI. Why is this?
> Where can I find some LISP & AI links on the web?
A very short and simplistic answer to this is that language is very
flexible. If you're gonna program a computer to simulate
intelligence, then a good start is to have a language where a
programmer can describe things not just at a high level, but also in a
way that feels native to the domain of the problem at hand. The Lisp
programming languages are more easy modified. It just makes sense.
It's not a good language for AI, absolutely speaking, but it's far
better than anything else out there to my knowledge.
I don't think the AI shines through in any way. I think that people
who do AI tend to use something in the Lisp family because of
tradition almost as much as the bulk of the wanting-to-be-cutting-edge
neophytes choose Java. Not that there's anything wrong with Java in
this example, but still, lots of people use it because of hype and
heresy, and word-of-mouth (and of course the relative ease of finding
a job with that skillset).
Lisp is a bit different. First off, fewer firms use Lisp. Speaking
about CL specifically, it's not the most widely-used language. It has
not been popular for web dev't either. Furthermore, there are only a
few supported commercial implementations. And how many people are
coding AI systems these days anyway? Only a small percentage of the
programs written today are AI-related.
anyway, CL is what I believe to be a language that's excellent for
expressing complex ideas.
read about it and get tools and resources at http://www.alu.org.
dave
Well, to be fair, Java is world's easier than C++, and so is
a good evolution considering what it's replacing. You have to
realize that easy-to-use embedded container libraries and the
like are a new concept to old-school programmers. :) God
forbid they see what you can do with map and a lambda function. :)
Java also has this "standardized kitchen sink" notion, where
every possible thing under the sun is being thrown into the JDK
as a part of the toolkit. This has a good side and a down side, but
forget ye not that the good side of it is driving alot of
the masses towards Java (and probably will continue to do
so for quite a while, especially as Java becomes more prevalent
and native compilers become more popular).
> anyway, CL is what I believe to be a language that's excellent for
> expressing complex ideas.
The metalinguistic capabilities of the language are just way
cool, dude. I'm currently working in an environment which
opaquely embeds continuation code behind various macro calls
in conjunction with a scheduler which understands the continuation
(it's a simulation environment, hence the presence of the
scheduler). This environment allows expressions like this:
(race
(call-cab 'yellow-cab)
(call-cab 'red-top)
(sequentially
(sleep 20)
(fail self)))
Which is to say, "get a cab -- either red or yellow -- within
20 simulated time unts, or the show is over, buster". Keep in
mind that this very small 6 line code fragment tells the
simulation scheduler the maximum amount of simulation time
that can go by for 3 different lisp forms and sees that it
happens. The same scheduler can be told to prioritize certain
ongoing tasks or that certain ongoing tasks conflict with
eachother.
C//
> > anyway, CL is what I believe to be a language that's excellent for
> > expressing complex ideas.
>
> The metalinguistic capabilities of the language are just way
> cool, dude. I'm currently working in an environment which
> opaquely embeds continuation code behind various macro calls
> in conjunction with a scheduler which understands the continuation
> (it's a simulation environment, hence the presence of the
> scheduler). This environment allows expressions like this:
>
> (race
> (call-cab 'yellow-cab)
> (call-cab 'red-top)
> (sequentially
> (sleep 20)
> (fail self)))
>
> Which is to say, "get a cab -- either red or yellow -- within
> 20 simulated time unts, or the show is over, buster". Keep in
> mind that this very small 6 line code fragment tells the
> simulation scheduler the maximum amount of simulation time
> that can go by for 3 different lisp forms and sees that it
> happens. The same scheduler can be told to prioritize certain
> ongoing tasks or that certain ongoing tasks conflict with
> eachother.
I don't really see how your macros are so legible or obvious given
what you're trying to do.
But Courageous's post does give an example of what part of a program
might look like in Lisp. Lisp programs can vary structurally more
than programs written in most other languages.
hope this helps.
dave
(p.s. pick up ANSI Common Lisp, by Paul Graham, if you can.)
> I don't really see how your macros are so legible or obvious given
> what you're trying to do.
Well, I was neither trying to show legibility nor obviousness.
As it turns out, every single form in the above expression involves
either dealing with a continuation or dealing with the scheduler.
Full tasks are being spun up and are competing with eachother (in
the race), but one of the tasks (in the sequentially) is causing
the overall body of the (not shown) function to fail if 20
simulated seconds go by, possibly giving up on the race form.
Note the term "20 simulated seconds". Schedulng the passage of
fictional time versus real time is a fairly non-trivial task.
Equivalent lisp would be a real headache. What I was showing was
the ability to generate another language within Lisp. Which is
what the SCORE (simulation core) language is, as shown in the
example above.
I'm sure there are a vast sea of other examples, written by
other individuals who've customized a language to fit their
domain space. This is very easy to do in Lisp. Few other languages
can claim that.
This ability to transmogrify the language into something more
suitable to the domain space is probably one of the reasons the
AI community continues to use Lisp.
SCORE itself is a specialized language/environment for doing
human performance modelling. It's pretty good at it.
C/
Since CL does not have first-class continuations just what exactly do you
mean by this?
- DM
`Upward' continuations are easily done with CATCH/THROW in
CommonLisp. `Downward' continuations are usually used for
co-routining, and can be emulated via `stack-groups' or other
process-scheduling hacks.
Thanks, I am really very interested in this topic!
- DM
> > Well, that's a good question since I didn't write that
> > section of the code. I was looking through some of the
> > macro code today, and couldn't find the initial
> > continuation generators. I've asked the author, however,
> > and will get back to you.
> Thanks, I am really very interested in this topic!
BTW, typing (apropos 'continuation) in my ACL interpreter
shows the presence of the construct and variations in
several packages, but not, of course, in common lisp.
Looking through the code, I could find no obvious package
prefixes on any of our continuation stuff. I was told
once that it was part of Scheme (by someone who quite
well could have been confused), and this, of course,
confused me even more, as we are compiling with ACL.
Is the SCM package in ACL a Scheme support package?
(I noted some continuation stuff in an SCM package,
but my ACL docs don't explain the package).
Anyway, I'm sure the author will get back with me in
a day or two. I'm very interested in this two.
BTW, there is a stack-free version of Python available
(http://www.stackless.com) which offers continuations,
coroutines, microthreads, etc. I'm still experimenting
with it.
C/
Sometimes things that are referred to as "continuations" are not true
first-class continuations, they're just functional arguments.
--
Barry Margolin, bar...@genuity.net
Genuity, Burlington, MA
*** DON'T SEND TECHNICAL QUESTIONS DIRECTLY TO ME, post them to newsgroups.
Please DON'T copy followups to me -- I'll assume it wasn't posted to the group.
I was pondering how that might be in our current setting.
The thing is, when we type (sleep 30) -- which is not the
lisp sleep -- it kicks it back to the simulation shcheduler
such that the next line of lisp code isn't executed until
30 units of model time have passed. While I can imagine
something other than a first class continuation accounting
for this, lord would it be hairy.
C/
Threads?
But I'm not sure how this is relevant to the question. I was responding to
someone who said they did (apropos 'continuation) and saw some matches.
All this means is that someone used the word "continuation" in the name of
a function or variable. Just because they use the word in a name, doesn't
mean they're actually implementing that concept.
In particular, many of Genera's macros are implemented like:
(defmacro with-open-file ((var &rest open-arguments) &body body)
`(with-open-file-internal #'(lambda (,var) ,@body) ,@open-arguments))
(defun with-open-file-internal (continuation &rest open-arguments)
(let (stream)
(unwind-protect
(progn
(setq stream (apply #'open open-arguments))
(funcall continuation stream))
(when stream
(close stream)))))
For whatever reason, they conventionally referred to the functional
arguments to these helper functions as continuations. But they're not what
we typically mean by continuations in computer science.
Possibly, albeit insufferably expensive if so. This requires
that the the thread go completely to sleep until a wakeback
occurs, right? Ergo, a simulation with 1000 entities would
require 1000 threads. Ouch.
Unless CL threads are microthreadish?
> But I'm not sure how this is relevant to the question. I was responding to
> someone who said they did (apropos 'continuation) and saw some matches.
> All this means is that someone used the word "continuation" in the name of
> a function or variable.
Oh, right. Yeah, I knew that. You can't really tell anything from
the apropos, this was just part of my hunt to determine where the
devil the stuff is coming from. The macro code in the SCORE language
definition is pretty hard to read, as I'm pretty new at lisp.
C/
SCM seems to stand for Source Code Management. There is no
continuation stuff in it, and it has nothing to do with Scheme.
It is explained in the manual in source_file_recording.htm.
#:Erik
Why all this groundless _angst_ before you even know what they are?
Why make all these random guesses and scare yourself with with?
| Unless CL threads are microthreadish?
Read the manual, see how they work, talk to the vendor, heed their
advice, use something else if it doesn't work to your satisfaction.
The scheduler in Allegro CL doesn't seem to have any problems with
1000 threads. 1000 threads that are created only to run (sleep 10)
and terminate, allocate about 5M of memory and spend less than 1 s
CPU on my system. That doesn't seem to be worth any angst.
#:Erik
> > >I was pondering how that might be in our current setting.
> > >The thing is, when we type (sleep 30) -- which is not the
> > >lisp sleep -- it kicks it back to the simulation shcheduler
> > >such that the next line of lisp code isn't executed until
> > >30 units of model time have passed. While I can imagine
> > >something other than a first class continuation accounting
> > >for this, lord would it be hairy.
> >
> > Threads?
>
> Possibly, albeit insufferably expensive if so. This requires
> that the the thread go completely to sleep until a wakeback
> occurs, right? Ergo, a simulation with 1000 entities would
> require 1000 threads. Ouch.
>
> Unless CL threads are microthreadish?
Most CL implementations do their Lisp-side threading in user-land,
thereby gaining the advantage of very light-weight threads, and a
fairly cheap way of maintaining the usual CL semantics w.r.t. to
dynamic binding, etc.
Some implementations also allow foreign code to run in multiple
kernel-land threads, and some implementations are currently
experimenting with (or already supporting) kernel-land lisp threads.
While kernel-land threads allow a single process to take advantage of
multiple processors on SMP machines, this comes at a price, and so I'd
expect that even if future implementations will support kernel-land
threading, they'll continue to support user-land and possibly
multiplexed user-land threading.
Regs, Pierre.
--
Pierre Mai <pm...@acm.org> PGP and GPG keys at your nearest Keyserver
"One smaller motivation which, in part, stems from altruism is Microsoft-
bashing." [Microsoft memo, see http://www.opensource.org/halloween1.html]
You know, we own licenses for ACL, but not much documentation
seems to exist. How criticical are the ACL manuals themselves,
and how extensive are they? (yes, I have all the .html, is that
the whole shebang?)
C/
Well, the manuals are quite extensive once you sit down with them.
However, I'm not too thrilled about the HTML delivery because of the
unsolved navigation problem in the WWW incarnation of hypertext (it
had been solved prior to the WWW, of course; HTML is the MS-DOS of
hypertext). I have asked (begged) for PDF files so I can at least
have something that reads better than the HTML delivery and which
also prints better than the HTML files come out like from the sucky
browsers. Franz Inc have indicated they will accomodate some of my
wishes for the ACL 6.0 release. Until then, the ACL 4.3 manuals are
still in use, simply because they are printed and bound.
#:Erik
I'm curious: what do you see as the navigation problem to which HTML
missed the solution?
--
"To summarize the summary of the summary: people are a problem."
Russell Wallace
mailto:rwal...@esatclear.ie
The ability of one document to introduce a link between two other
documents, sometimes known as a "meta-link". Where implemented,
they are easily used to track how you arrived at a given document,
and thus you can browse your "journey" through a number of
documents. This particular "application" can be implemented by many
other means, but the general facility that would make it simple and
easy is missing from HTML.
I think of HTML links as GOTO. The effort required to keep from
getting messy outweights the merits of their proper use.
(The even-more-impenetrable-than-the-SGML-standard SGML-related
standard on Hypertext and Timeน, actually got this completely right,
incorporating all available hypertext research at the time it was
published, and subsequently updated intelligently to account for
further development. Unfortunately, it uses SGML for its own
meta-notation, which makes it an order of magnitude more complex
than necessary, and it relies so heavily on the entity structure,
which is the least understood aspect of SGML and also completely
missed by "the HTML generation", that it takes more effort to study
it than even most would-be experts can ever hope to be rewarded for
having done.)
#:Erik
-------
น ISO/IEC 10744:1997 Information technology -- Hypermedia/Time-based
Structuring Language (HyTime), 468 pages.
> * Russell Wallace <rwal...@esatclear.ie>
> | I'm curious: what do you see as the navigation problem to which HTML
> | missed the solution?
>
> The ability of one document to introduce a link between two other
> documents, sometimes known as a "meta-link". Where implemented,
> they are easily used to track how you arrived at a given document,
> and thus you can browse your "journey" through a number of
> documents. This particular "application" can be implemented by many
> other means, but the general facility that would make it simple and
> easy is missing from HTML.
Can you give an example? I presume that a browser history is an example
of "this particular application" being "implemented by ... other means"
but I don't see how having bidirectional links in HTML would add any
functionality.
Erann Gat
g...@jpl.nasa.gov
I actually posted rant as a bug to sourceforge on this. I prefer info,
docbook, pdf, and even ps over html.
TB> Actually I
TB> would *really like* paper manuals as printing and binding is a
TB> pain even with a souped up double-sided printer which we don't
TB> currently have.
Double-sided printing and spiral binding facility can be acquired for about
$700-800 if you shop around (this is what it cost me for all new equipment
thru auctions and such). This is not much since you're likely to spend
around $500 anyway on a decent 10+ ppm laser printer with postscript.
This will only help you if the vendor provides something that produces
reasonable hard copy. I detest printing html.
BM
The idea is not a "bidirectional links", but the bibliographic
reference, which was a quite well developed concept prior to HTML.
I wrote: "The ability of one document to introduce a link between
two other documents'. This is not a bidrectional link in the first
place. It's a third-party link if you want. There is no anchor
marked up as such in either of the documents involved, and the link
is certainly not in the documents in question. Instead, the anchors
are described in the third document through various means of naming
nested objects and the link between them is then established, with a
purpose, such as a comment describing how the two anchor points
related.
HTML missed the opportunity (to put it mildly) to aid in locating
and naming the structured, nested objects in a document, as well, so
it's no wonder people can't really escape thinking about links and
anchors _in_ the documents without spending some effort thinking
about why it doesn't even make sense to predefine which words or
ranges of text should be elevated to anchorhood. After all, most of
prefer to buy the marker pens separately from the books and color on
our own, but with HTML, only pre-colored books are available.
#:Erik
> Can you give an example? I presume that a browser history is an example
> of "this particular application" being "implemented by ... other means"
> but I don't see how having bidirectional links in HTML would add any
> functionality.
Well, it certainly wouldn't be hard to add more functionality than any
browser I've ever used! (which I admit is basically just various
incarnations of netscape and ie (as well I guess as mosaic and chimera
in the old days)) I find the forward and back buttons terminally
deficient, and the history facilities pretty much so (IE's seems
better than netscapes). Where is the obvious graphical representation
of your browsing history?
(Actually, does anyone know how hard it would be to get netscape to
tell some external program every time it visited a url?)
--tim
> I have asked (begged) for PDF files so I can at least
> have something that reads better than the HTML delivery and which
> also prints better than the HTML files come out like from the sucky
> browsers. Franz Inc have indicated they will accomodate some of my
> wishes for the ACL 6.0 release. Until then, the ACL 4.3 manuals are
> still in use, simply because they are printed and bound.
Because I think Franz people read this, I'll add a `me too' to this,
even though they probably already know. Actually I would *really
like* paper manuals as printing and binding is a pain even with a
souped up double-sided printer which we don't currently have. I would
pay for these in fact.
--tim
> This will only help you if the vendor provides something that produces
> reasonable hard copy. I detest printing html.
This is even more offtopic...
I haven't actually tried it on Franz's documentation but there's a
wonderful program called html2ps which can do really quite a
reasonable job with a lot of HTML -- certainly enormously better than
Netscape and so on.
Actually it's a seriously horrible perl script, but it does work very
well, if slowly. (Except when new perl releases randomly break some
obscure part of perl requiring deeply obscure fixes. But that's perl
for you: a language defined by its single implementation which somehow
manages to have the kind of obscure compatibility problems I somehow
never see when porting between 3 CL systems on 3 OSs.)
--tim
> This is even more offtopic...
>
> I haven't actually tried it on Franz's documentation but there's a
> wonderful program called html2ps which can do really quite a
> reasonable job with a lot of HTML -- certainly enormously better than
> Netscape and so on.
I have, happy as clam, returned to LaTeX again for documentation.
With pdflatex which comes readily installed with the latest teTeX
(starting with version 1.0, I think) package, I deliver all the
pretty-looking documentation in PDF (in fact, I have completely
stopped creatin DVI, everything is compiled to PDF), and I publish
them on my own internal webserver in HTML, which is easily generated
from the LaTeX source with hyperlatex
(http://www.cs.ust.hk/~otfried/Hyperlatex/).
(I'm also considering using pdflatex as a means from auto-generating
reports and documentation from lisp programs, why wait for XML-
based tools to arrive when you can use the power of TeX?)
--
(espen)
[...]
> (I'm also considering using pdflatex as a means from auto-generating
> reports and documentation from lisp programs, why wait for XML-
> based tools to arrive when you can use the power of TeX?)
You too?
Some time ago, I auto-generated huge amounts of useless documentation
doing something like:
(defun make-headers-document (infile outfile find-fn print-fn)
(with-open-file (instream infile)
(ltx:with-latex-document
(:output outfile :packages '(("babel" ("german"))
("inputenc" ("latin1"))
("fontenc" ("T1"))
("hyperlatex"))
:title (concatenate 'string "File: " infile)
:author "Rudi Schlatte")
(while-bind (next-block (funcall find-fn instream))
(funcall print-fn next-block)))))
find-fn snarfs a block of code (procedure or whatever), print-fn
semi-parses it and prints whatever it sees fit.
It is really a pleasure to see twenty-odd page documents of boring
documentation being churned out by a program instead of by myself...
I even made up some sort of markup for the comments in the source,
giving me a crude kind of literate programming. Perhaps I will play
with cross-indices a bit, then the documentation will be better than
written by hand (and always semi-accurate to boot).
I'm enclosing the Latex package; note that it is not very refined
since it was hacked together late one night; these are just the
building blocks. I will have some time and motivation to enhance it a
bit during the next month, though. Comments, Critique & Code welcome.
;;; -*- Lisp -*-
;;; Bare-bones Latex output from Common Lisp.
;;; Written by Rudi Schlatte <rsch...@ist.tu-graz.ac.at>
;;; Use it as you please.
;;; Issues:
;;; No math mode (did not need it for what this was written for)
;;; Almost no useful commands (there will be things like
;;; (section "The section title" :toc-entry "sec-title" :label "foo" ...)
;;; at some point in the future.
(defpackage "LATEX-GEN" (:nicknames "LTX") (:use "COMMON-LISP")
(:export "WITH-LATEX-DOCUMENT" "LATEX-COMMAND-0" "LATEX-COMMAND-1"
"WITH-LATEX-ENVIRONMENT" "OUTPUT" "LF" "PAR" "ESCAPE-CHARACTERS"))
(in-package "LATEX-GEN")
(defvar *latex-stream* cl:*standard-output*
"All Latex output goes here. Bound by with-latex-document macro.")
(defmacro while (test &body body)
`(loop (unless ,test (return))
,@body))
(defun output (control-string &rest arglist)
"Output to *latex-stream* as per format."
(apply #'format *latex-stream* control-string arglist))
(defun lf ()
"Latex linefeed."
(output "~&"))
(defun par ()
"Latex paragraph (empty line)."
(output "~&~%"))
(defun escape-characters (string
&optional (the-chars "$&%#_{}") (escape-char #\\))
(with-output-to-string (result-string)
(loop for char across string
when (find char the-chars :test #'char=)
do (write-char escape-char result-string)
do (write-char char result-string))
result-string))
(defun latex-option-list (string-list)
(format nil "~@[[~{~A~^,~}]~]" string-list))
(defun print-header (class option-list package-list title author date)
"Prints the LaTeX document preamble.
class: document class name.
option-list: list of document class options.
package-list: list with (package-to-use [(option-list)]) entries.
title: document title.
If nil, none of \\title, \\author, \\date will be printed.
author: document author
date: creation date. if nil, \\date will not be printed."
(output "\\documentclass~A{~A}~%"
(latex-option-list option-list) class)
(output
;; This is hairy; package name comes before list of options
;; but gets printed afterwards; also options can be non-existent,
;; so I test before jumping around in the arglist
"~@[~{~{\\usepackage~*~#[~;[~{~A~^,~}]~]{~@*~A}~%~#[~;~*~]~}~}~]~%~%"
package-list)
(when title
(latex-command-1 "title" title) (lf)
(latex-command-1 "author" author) (lf)
(when date
(latex-command-1 "date" date) (lf))
(par)))
(defmacro with-latex-environment ((name &optional option-list) &body body)
`(progn
(output ,(concatenate 'string "~&\\begin"
(latex-option-list option-list) "{" name "}~%"))
,@body
(output ,(concatenate 'string "~&\\end{" name "}~%"))))
(defun latex-command-0 (name)
"Output Latex command \"name\" (no arguments)"
(output "\\~A" name))
(defun latex-command-1 (name contents)
"Output Latex Command \"name\" (one mandatory argument)"
;; FIXME: We sanitize the contents string here, escaping LaTeX
;; special characters. This may not be the right thing for some
;; commands. Eventually, there will be (section "Foo") & Cie. and
;; they will take care of their arguments themselves.
(output "\\~A{~A}" name (escape-characters contents)))
(defmacro with-latex-document ((&key (output *standard-output*)
(class "article")
(options nil)
(packages nil)
(title nil)
(author "")
(date nil))
&rest body)
`(ctypecase ,output
(string (with-open-file (*latex-stream* ,output
:direction :output)
(print-header ,class ,options
,packages ,title
,author ,date)
(with-latex-environment ("document")
(when ,title
(latex-command-0 "maketitle") (par))
,@body)))
(stream (let ((*latex-stream* ,output))
(print-header ,class ,options ,packages ,title
,author ,date)
(with-latex-environment ("document")
(when ,title
(latex-command-0 "maketitle") (par))
,@body)))))
> I'm curious: what do you see as the navigation problem to which HTML
> missed the solution?
You may check the site of user interface and usability expert Jakob
Nielsen:
There are documents--be sure to peek around, I don't have the URLs
handy--where he states something along the lines that current Web
technology offers stone age tools compared to early hypertext research.
Paolo
--
EncyCMUCLopedia * Extensive collection of CMU Common Lisp documentation
http://cvs2.cons.org:8000/cmucl/doc/EncyCMUCLopedia/
> browser I've ever used! (which I admit is basically just various
> incarnations of netscape and ie (as well I guess as mosaic and chimera
> in the old days)) I find the forward and back buttons terminally
If you have a Unix box handy, have a look at Lynx: you'll love it :)
X11 Netscape has a window property _MOZILLA_URL that tells you what URL
it's at, and has at least since version 2.0. I seem to recall that,
with Xlib, you can use PropertyChangeMask to be notified when a window
property changes with XPropertyEvents, and I think you can then use
XGetTextProperty to get the URL.
I think you can use SubstructureNotifyMask on the root window to be
notified when new windows pop up.
Obviously there are race conditions all over the place here --- a new
Netscape window can visit several URLs before you manage to select
PropertyChangeMask on it, and the property could change several times
between when you handle the XPropertyEvent and when you manage to
XGetTextProperty.
ObLisp: Does anyone use CLX? Does it suck as badly as Xlib?
--
<kra...@pobox.com> Kragen Sitaker <http://www.pobox.com/~kragen/>
The Internet stock bubble didn't burst on 1999-11-08. Hurrah!
<URL:http://www.pobox.com/~kragen/bubble.html>
The power didn't go out on 2000-01-01 either. :)
> * g...@jpl.nasa.gov (Erann Gat)
> | I presume that a browser history is an example of "this particular
> | application" being "implemented by ... other means" but I don't see
> | how having bidirectional links in HTML would add any functionality.
>
> The idea is not a "bidirectional links", but the bibliographic
> reference, which was a quite well developed concept prior to HTML.
Seems to me that bibliographic references have precisely the semantics
of hyperlinks. They are pointers contained in one document that point
to a second document. There is no third document involved.
> I wrote: "The ability of one document to introduce a link between
> two other documents'. This is not a bidrectional link in the first
> place. It's a third-party link if you want. There is no anchor
> marked up as such in either of the documents involved, and the link
> is certainly not in the documents in question. Instead, the anchors
> are described in the third document through various means of naming
> nested objects and the link between them is then established, with a
> purpose, such as a comment describing how the two anchor points
> related.
OK, third-part link then. I still don't see what you would *do*
with such a link that you can't do using HTML as it stands.
Here are two related documents, A and B:
"This is document A, a short treatise on the topology of mazes of
twisty little passages, all alike."
"This is document B, a rather more lengthy exposition on the topology
of mazes of twisty little passages, all different."
Neither document A or B contain any links.
Now I write document C which contains one of your third-party links:
"This is document C, a meta-analysis of maze topology studies
...
<THIRD-PARTY-LINK HREF1=document-A HREF2=document-B>
..."
What happens? How does this link get rendered? What happens when you
click on it?
E.
> Now I write document C which contains one of your third-party links:
>
> "This is document C, a meta-analysis of maze topology studies
> ...
> <THIRD-PARTY-LINK HREF1=document-A HREF2=document-B>
> ..."
>
> What happens? How does this link get rendered? What happens when you
> click on it?
I think what Erik is talking about is a mechanism that lets a
third-party document refer to individual portions of other documents,
without the need to add anchors at the relevant places in those other
documents. Assume that I want to create a tutorial of some
programming language. I could write my little thing, adding lots of
links pointing to select portions of other sources -- official
documentation, standards, FAQs, etc -- with no need for anchors in
those other documents at the places to which I wish to refer. Think
of it as me creating a path through the documents of others to suit me
and my audience. And to do this, we need something more than HTML.
(And when I click on any of those links in my document, it may just
show that select portion of that other document. And another click
may show the entire document. Or I may simply ask my browser to
inline the select portion of the other text into my document,
effectively creating quotes.)
Or maybe Erik isn't talking about that at all, but I still would like
it...
- Lars.
--
There's something I don't like
About a band that always smiles
-- Dead Kennedys
Phil Karn at Qualcomm (whom some of you old-timers may remember as
being "KA9Q" and the author of the "NOS" TCP/IP suite for a DOS PC)
has written a neat little hack that may do what you want:
<URL:http://people.qualcomm.com/karn/code/httproute/>
This package contains a daemon, written as a Perl script plus
configuration file, that provides a simple HTTP router, banner
advertisement blanker, cache and cookie cutter. You configure
your web browser to use it as a web proxy.
-Rob
p.s. I've been intending to rewrite it in Scheme, but haven't gotten
around to it yet...
-----
Rob Warnock, 41L-955 rp...@sgi.com
Applied Networking http://reality.sgi.com/rpw3/
Silicon Graphics, Inc. Phone: 650-933-1673
1600 Amphitheatre Pkwy. PP-ASEL-IA
Mountain View, CA 94043
Well, you can also use CL-HTTP as a proxy. This is an example
to get rid of unwanted ads:
(in-package :http)
(defparameter *default-image*
(url:url "http://www.ision.net/i/start/logo.gif"))
(defparameter *unwanted-hosts*
'("ad.doubleclick.net" "adserv.spiegel.de" "m.doubleclick.net"))
(defparameter *unwanted-url-strings*
'("werb" "anzei" "banners" "ads" "pic"))
(defmethod invoke-proxy-service :around ((server proxy-server-mixin)
uri
(method (eql :get))
request-http-version)
(let ((path (url:path uri)))
(when (or (member (url:host-string uri)
*unwanted-hosts*
:test #'string-equal)
(some (lambda (unwanted-string)
(some (lambda (uri-part)
(search unwanted-string uri-part))
path))
*unwanted-url-strings*))
(setf (server-url server) *default-image*
uri *default-image*))
(call-next-method server uri method request-http-version)))
Yes, this is actually true.
| They are pointers contained in one document that point to a second
| document. There is no third document involved.
This is obviously false, however.
| OK, third-part link then. I still don't see what you would *do*
| with such a link that you can't do using HTML as it stands.
That's frankly not my problem, and you're not listening enough that
I care to spend all the time it would take to explain it to you.
| What happens? How does this link get rendered? What happens when
| you click on it?
Sigh. How do the "links" you already have in HTML get rendered?
What happens when you "click" on them? What, exactly, do you expect
to be _different_?
I don't have the patience for this. Sorry.
#:Erik
> even though they probably already know. Actually I would *really
> like* paper manuals as printing and binding is a pain even with a
> souped up double-sided printer which we don't currently have. I would
An interesting opinion in favor of printed documentation is that of Bruce
Tognazzini (he was Apple's "user interface evangelist" for several years):
How to Publish a Great User Manual
http://www.asktog.com/columns/017ManualWriting.html
there is (was?) software that lets you put "public" annotations on other
pages - i guess it works by providing a proxy that checks a central
"post-it" server as it downloads the requested document. this isn't what
anyone has been discussing, exactly, but it could be persuaded/extended
to provide similar functionality (everyone would have to use the proxy
and server, it's not exactly scaleable...)
however, i can't remember the name or where i heard about it. and
anyway, i suspect hardly any pages have comments, and those that do
will be drivel. perhaps it has some kind of community concept - so
perhaps a c.l.l community would share annotations. or erik could have
his own (private write, public read) (which gets nearer what i think he
wanted, but in a horrible round-about way).
andrew
http://www.andrewcooke.free-online.co.uk/index.html
Sent via Deja.com http://www.deja.com/
Before you buy.
> I don't have the patience for this. Sorry.
That's good, because my patience for you is also wearing quite thin.
Why don't you do us both a favor and stop responding to my questions?
Let someone else do it.
> * Erann Gat
> | Seems to me that bibliographic references have precisely the semantics
> | of hyperlinks.
>
> Yes, this is actually true.
>
> | They are pointers contained in one document that point to a second
> | document. There is no third document involved.
>
> This is obviously false, however.
Why is this obviously false? This is a question directed to anyone
in the group *except* Erik (whose patience I do not wish to try any
further). If it's so obvious then surely there will be dozens
of people out there who know.
E.
> Why is this obviously false? This is a question directed to anyone
> in the group *except* Erik (whose patience I do not wish to try any
> further). If it's so obvious then surely there will be dozens
> of people out there who know.
Yes, I was puzzled by this too. The only thing I could think of
was the fact that bibliographic references may refer to a section
or page range of a second document and not only a _point_ in it.
--
(espen)
Because you ask me questions. It's called cause and effect.
| Why is this obviously false?
Ask librarians, not programmers, if you want to know about
bibliographic references.
Now go away and don't destroy the rest of this discussion with your
attitude problems. Let somewone else ask the questions.
#:Erik
Well, the old Mosaic had this thing but only for private annotations. Kind-a
useful (all the more if the underlying pages just would stay where they are
;-)
As for public annotation, I know it has been tried in the domain of
biological databases (the now defunct gdb had something like this, and
swissprot has something similar). In all these cases, it only worked
properly if you know the annotators were any good.
Philip
--
/dev/brain: character special (53/0)
-----------------------------------------------------------------------------
Philip Lijnzaad, lijn...@ebi.ac.uk | European Bioinformatics Institute,rm A2-24
+44 (0)1223 49 4639 | Wellcome Trust Genome Campus, Hinxton
+44 (0)1223 49 4468 (fax) | Cambridgeshire CB10 1SD, GREAT BRITAIN
PGP fingerprint: E1 03 BF 80 94 61 B6 FC 50 3D 1F 64 40 75 FB 53
> there is (was?) software that lets you put "public" annotations on other
> pages - i guess it works by providing a proxy that checks a central
> "post-it" server as it downloads the requested document. this isn't what
> anyone has been discussing, exactly, but it could be persuaded/extended
> to provide similar functionality (everyone would have to use the proxy
> and server, it's not exactly scaleable...)
>
http://crit.org does this. Seems to be kind of slow, though.
Jochen
--
C++ : an octopus made by nailing extra legs onto a dog
Please ignore HTML and the WWW in any discussion of hypertext. They
are like bringing PostScript and laser printers into a discussion of
literature.
There is no worse implementation of hypertext concepts than the
in-band anchors that requires changing both (there are only two in
HTML) documents if you need a particular connection. In fact, the
HTML/WWW implementation of "hypertext" is so fundamentally flawed
that it is probably a great disservice to hypertext to call it
"hypertext" to begin with, and as witness, the inability of people
to consider a bibliographic references that does not match the HTML
_implementation_.
Consider the glossary that defines hypertext links _to_ its defined
terms. Instead of myriad explicit links in each document in the
document set covered by the glossary, the links may be defined as
whatever matches a rule in those documents. A rendering engine
would load the glossary and apply the rules to highlight glossary
terms, or perhaps make them more accessible by popping up a small
window with the definition. Instead of this being coded explicitly
wherever a glossary term is used, it would all be arranged in the
glossary, once.
Consider the root document of a document set that contains rules for
which documents (such as the glossary) whose rules should apply to
which documents in the set. Conventional bibliographic references
expresses such relationships with annotations in the library records.
Note that there is no unique text to highlight or click on in this
case. This is meta-information for the hypertext system.
Consider the critique of a document that includes excerpts from it
and does so using in-lined hypertext links instead of copies of the
text itself. Consider the meta-critique that contains a full list
of all such references for the purposes of scholarly research and
ratings. The former would not necessarily be able to influence the
base document when somebody reads it, such as to inform the reader
adbout the critique, but the latter would, as well as responses and
rejoinders in a debate where various authors both discuss the type
of critique and rate them.
Consider the continuous publication of a medical journal where it is
incredibly important to link from articles in the past to new and
updated articles in the future with crucial information about the
role of the update. A new article would typically contain a small
passage that it updates, contradicts, etc, previous articles. It is
not uncommon for the journal librarian/editor to supply such links
in a separate bibliographic unit, such as a side-bar. A mechanized
hypertext system would represent such links with meta-documents that
_all_ the articles in the system would point to for updates to
themselves.
Consider the continuous application and concurrent drafting of laws
and regulations in a society. The entire legal world is intertwined
in extremely interesting ways from a theoretical hypertext point of
view. Political discussions often take the form of contributing to
a decision on what may be done within the framework of certain
regulations, such as budgets, legal authorities and procedures, etc.
Counter-arguments frequently attack the hypertextual nature of the
argument instead of the textual contents in the shape of denying or
rejecting an interpretation of such authority or its application.
Court arguments frequently involve comparing prior applications and
cases to present cases. Yet, each document produced contains only a
small number of the hypertextual links involved: the remainder are
implicit or take the shape of "to"-links instead of "from"-links.
In the world of bibliographic references, there is a lot more going
on than just pointing to books or pages, or a footnote someplace
that has an ISBN. Trivializing the bibliographic reference to
whatever HTML can represent is like arguing that PostScript cannot
represent irony, so therefore it is only characters, like all other
characters, or denying that laser printers can reason because they
produce documents that contain reasoning. (Nobody argues that laser
printers can reason, just as nobody argues that hypertext links can
be "discovered" from context and contents, which is a strawman
argument frequently used against advanced hypertext theory.)
For those who want to understand how hypertext started, I urge you
to read Vannevar Bush's original article in the Atlantic Monthly.
In particular, he discusses machine-aided annotations in a way that
would make it impossible for anyone who had read that article to
even think that hypertext links were contained _in_ documents --
that is merely an implementation optimization applicable in a few
circumstances and not at all generally. Generally, we make links
into, between, and out of read-only documents that we do not own or
control. HTML does not allow us to work with documents we do not
own or control except by pointing at them as static objects.
#:Erik
> In the world of bibliographic references, there is a lot more going
> on than just pointing to books or pages, or a footnote someplace
> that has an ISBN.
ok, I was thinking in terms of old-fashioned bibliographic references
printed on dead trees (disregarding any software which might be
involved in producing it), which basically is a simple one-way pointer
which involves only two documents (and which has its flaws too: we all
know from school how section and page number references to a textbook
become invalid when a new version of it is out...)
--
(espen)
This is unfortunately a very misguided view of the old-fashioned
bibliographic reference. I'm sorry to say so, but the bibliographic
reference includes a lot more than one-way "pointers", which is a
special case or a narrow view, depending on how you look at it. If,
for instance, I wish to compare CLtL2 with CLtS (S for Standard),
you can either regard my two bibliographic references in any given
comparison on a given point as two one-way pointers from my document
into those two documents, but that is very nearly irrelevant to the
purpose and actual references involved. A reader of a comparison
would naturally want to have both text available and would have to
regard my commentary on their _relationship_ as the real purpose of
my text. My document thus contains third-party hypertext links (and
bibliographic references) with that purpose between two other
documents.
This may not be all that obvious to a reader of modern literature,
but pick up any commentary on religious writings and track down the
references to the Bible, say. This is a lot more explicit than the
intertwined legal world I referred to, but it also less available to
most people today. (I wouldn't know about it all were it not for
the many people who use SGML and HyTime for dealing with the rich
set of references in precisely such literature.)
On the other hand, what you refer to as "old-fashioned" may be a
trivialization of the bibliographic reference into the _expression_
of a bibliographic reference that follows certain formal rules. The
fact that there is an enormous number of ways to express a reference
(such that actually locating the document that has been referred to
may be very, very difficult), should not obscure the more abstract
concept. Instead, I'd hope that the plethora of ways to refer to
texts should communicate the failure of trivializations to capture
the author's (or indexer's or librarian's) purpose and intent.
#:Erik
For those interested...
http://www.theatlantic.com/unbound/flashbks/computer/bushf.htm
Will