Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Where to start

11 views
Skip to first unread message

viator

unread,
Jul 15, 2003, 1:39:45 PM7/15/03
to
Hello everyone.
I am a computer science student and new to LISP. Will some one suggest
me where to start studying the Common LISP language. I am already
proficient in C/C++/Java but the philosophy of LISP seems different
and a little mysterious to me.

Pascal Costanza

unread,
Jul 15, 2003, 2:35:18 PM7/15/03
to
In article <dc828419.03071...@posting.google.com>,
via...@rediffmail.com (viator) wrote:

I have switched [1] from Java to Lisp in April 2002, and have described
my findings at http://www.pascalcostanza.de/lisp/guide.html - maybe they help you...

Pascal

[1] Should we start a switch campaign like Apple did some while ago? ;-)

Rober...@yahoogroups.com

unread,
Jul 26, 2003, 6:08:17 AM7/26/03
to
{{Date: 15 Jul 2003 10:39:45 -0700
From: via...@rediffmail.com (viator)

I am already proficient in C/C++/Java but the philosophy of LISP
seems different and a little mysterious to me.}}

The jargon "place" means some computer memory where you can store data
that may change from time to time during program execution. The most
common place is a variable, for example the varible X can have the
value 3.6 then later change to 10.2 because of an assignment statement.
But there are many other kinds of places in programs: Cells in an array
(including a vector which is a one-dimensional array, and a string
which is a vector of characters), slots in a structure, bytes in a
machine word, ...

The philosophy of LISP is that a place can hold any type of data
whatsoever, the technique being to hold a type code together with
either the data itself (if it's very small, for example a small integer
or an ASCII character) or a machine address of the start of the data
elsewhere in memory (if it's not very small). Return values from
functions, and arguments to functions, work the same way as places.
Functions that process data generally look at the type code to decide
how to process the data, for example the function + can add any
combination of types of numbers, so it checks the type code of each
argument first to make sure it's a number (signal error if not) then to
see what coercion ("implicit casting" is the C jargon) is needed to
make the various arguments compatible for adding them together.

The philosophy of C C++ FORTRAN BASIC ALGOL COGOL etc. is that a place
can hold only one type of data, which must be declared at compile time,
and the code generated by the compile is capable of handling only the
one type of data it expects. This same applies to return values from
functions and arguments to functions.

In C++ there's a way to set up more than one type of data for a given
place, whereby the application programmer must explicitly enumerate the
various types that are allowed, and the compiler then jury-rigs type
codes for just those particular types that must be checked at runtime
to dispatch to the appropriate object-function. This is generally a
royal pain, so if you're going to have lots of such places you may be
better off programming the whole thing in LISP from the start.

In LISP there's a way to declare the type of a place, and if the only
references to this place are all declared the same, and if the
particular type would allow more efficient code if done the C C++ etc.
way, then the compiler will then put untagged data there and generate
that more efficient code. The only place this is worth doing is in
tight loops where arithmetic will be performed very many times, and
even then only if the overall program seems to be a bit slow and you
need to make it faster. Profiling the code can show which parts of the
program are executed the most times, thus direct you to speeding up
just those parts.

The other big difference between LISP and other languages is that in
LISP there's a standard way to represent program structure as data. The
READ function can read in an s-expression from a source file, and
looping on READ can read in an entire source file to create a list of
everything in the source file. (Caveat: If the source file uses
readtime macros or conditionals, you get the result after those have
been applied, rather than the source going into them.) An ordinary user
can then write code for browsing the program structure in any way
desired, making changes as desired, writing out a modified program if
desired, something basically not possible in any other language. (If
there were readtime macros or conditionals, it's a bit more work to
make changes to the file. You'd have to read the file as a string, find
the places that need changes, use FORMAT-TO-STRING to create the
replacement for that part, and then piece together the unchanged and
changed strings to create the updated file. This still beats the other
languages where you can't do the task at all.)

Related to that: Any ordinary data structure in memory can be written
out to a file in standard LISP notation, and then READ can read it back
in later to create an exact copy of what you originally had in memory.
If you need to study some data file in some other format, the usual way
to do it in LISP is to write a parser that converts that data format
into some structured representation inside LISP. Once that's done, you
can do all study of it per the structure instead of per the original
linear sequence of characters of the original file.

Any compiler must have something like a hash table for keeping track of
names of variables, so that when the same name appears a second time it
re-uses the same variable as before instead of mistakenly creating a
new variable by the same name as before. In other languages, this hash
table is available only in the compiler, and only for that one purpose,
whereas in Common LISP, hashtables are generally available to all
programs in case they should ever need one, or in case the user might
want to type in the name of a variable and thereby obtain access to the
actual variable of the program instead of a new copy by the same name.

All the tools of LISP are available from a single program environment,
including the compiler and loader and EVAL and READ and the printing
functions, so you don't need separate compiler and linker and runtime
programs, and you don't need an IDE to coordinate the separate programs
(or alternately shell commands or GUI clicks to manually switch back
and forth between them). You don't even need to use the system or IDE
'make' or "rebuild project" utility to maintain large projects, since
testing date-last-written and calling compiler as-needed can all be
programmed from within LISP, or if you do choose to use the 'make'
facility you can invoke it from inside LISP, so it can be part of some
user action which does the make then does what the user asked for,
lessening the chance the user will forget to do the make first.

The really neat thing about LISP (in addition to all the above), is
that compiled code, interpreted code from files, interpreted code keyed
in or pasted in, and interactive calls to functions, can all be
intermixed freely. Typically the most stable part of my program is
compiled, and a patch file containing things I believe are working
overlays that, and my current-session patches overlay that, and I'm
constantly trying new lines of code and combining them into new
functions to test, which then eventually miagrate to the
current-session patch then to the main patch file then to the main
compiled file.

Oh, one other wonderful thing about LISP compared to all those other
languages: You don't have to specify at compile time how much space
will be needed for each item of data, such as a string or array.
Everything (except tiny data that will fit within a tag+tinydata word)
is allocated at runtime (tiny data, and tagged pointers to allocated
data, are on the stack or in registers when being passed around), and
automatically recycled when no longer accessible from the program. So
for example, if you want to read a line from a file, you just set a
variable to the result of (READ-LINE <filehandle>) and never have to
worry about overrunning a buffer you allocated. Compare this to C where
you have to do fgets(&array,maxchars,filehandle) or somesuch and
somehow handle the case where the line wouldn't fit within the space
you allocated. Likewise, to concatenate two strings in LISP, you just
concatenate them and store the result in a place, and don't worry how
long they might be, and never have to pre-allocate space to store the
result. Likewise if you do an integer arithmetic operation, you get the
correct result even if it won't fit in a machine word, it allocates a
BIGNUM if needed to store the correct result.

You also asked about Java. I've never had any access to Java, so I
can't say how it compares to LISP on one side and C++ as the nearest on
the other side. I've heard it has automatic storage allocation and
garbage collection, like LISP. I would guess it does *not* have
anything like LISP's standard internal representation of the structure
of program code, i.e. READ and PRINT, somebody correct me if I'm
mistaken. Maybe somebody else can say how Java compares on the other
points I raised.

Eric Smith

unread,
Jul 26, 2003, 1:44:28 PM7/26/03
to
Rober...@YahooGroups.Com wrote in message news:<REM-2003...@Yahoo.Com>...

> The philosophy of LISP is that a place can hold any type of data

That's the philosophy of places. It's a very
small part of the philosophy of Lisp.

The philosophy of Lisp is to optimize the usage
of the programmer's time. Lisp is for software
development projects where a lot of work needs
to be done and the programmers scarcely have
enough time to do all of it.

For any big project there is a jargon by
which insiders communicate to each other
the technical details of that project. If
they could use a programming language based
on that jargon, they would be way ahead.
The code they wrote would simply be the
technical details of the project expressed
the way they already express them. They
wouldn't have to spend their time translating
technical ideas back and forth between the
jargon and the programming language.

Lisp is the easiest programming language on
which to build other programming languages.
It can be used to make a programming language
as close as possible to the actual jargon of
the project. Doing so is easy in Lisp, and
typically only takes a very small fraction of
the time spent on the project. The time saved
by using the jargon as the programming language
can be a lot more than even the programmers
using it are aware of. The bugs that never hit
them in the first place, which would have taken
a lot of their time, had they been using a
different programming language, are not taken
into account when discussing the advantages of
the programming language for their project.

The advantages of Lisp are so overwhelming as to
make people wonder what the disadvantages are
which prevent it from being the most popular
programming language.

One disadvantage is that it takes a lot of time
and effort to become an expert at Lisp. A lot
of professional programmers consider programming
to be a performing art, in the sense that what
they're selling is their image of being brilliant
programmers. The product they're selling is not
the actual results of their work, but the work
itself. Instead of putting their creativity into
creating the best software, they put it into
creating their own best image of being brilliant
programmers. From the point of view of such
professional programmers, Lisp is not really all
that helpful. They want to be brilliant in more
popular programming languages, regardless of the
technical merits of those languages. It doesn't
matter to them how badly Java sucks, as long as
all other Java programmers suck worse than they
do. So why should they put in the time and
effort to learn Lisp? Their hourly pay is the
same regardless of how much work they get done.

Thomas F. Burdick

unread,
Jul 26, 2003, 2:04:11 PM7/26/03
to
eric...@yahoo.com (Eric Smith) writes:

> The advantages of Lisp are so overwhelming as to
> make people wonder what the disadvantages are
> which prevent it from being the most popular
> programming language.
>
> One disadvantage is that it takes a lot of time
> and effort to become an expert at Lisp.

No doubt. However, good programmers start to get benefits almost
immediately. Even in a smallish project, you usually pass the
break-even point, where the Lisp newbie benefits from the change of
language.

> A lot of professional programmers consider programming to be a
> performing art, in the sense that what they're selling is their
> image of being brilliant programmers. The product they're selling
> is not the actual results of their work, but the work itself.
> Instead of putting their creativity into creating the best software,
> they put it into creating their own best image of being brilliant
> programmers. From the point of view of such professional
> programmers, Lisp is not really all that helpful. They want to be
> brilliant in more popular programming languages, regardless of the
> technical merits of those languages. It doesn't matter to them how
> badly Java sucks, as long as all other Java programmers suck worse
> than they do. So why should they put in the time and effort to
> learn Lisp?

This argument made a lot of sense, back all of 3 years ago, when there
was an amazingly large supply of capital for programming projects.
However...

> Their hourly pay is the same regardless of how much work they get
> done.

... maybe it's just where I'm at (the SF Bay Area), but $0/hr isn't
very compelling. For me, one major benefit of Lisp has been being
able to make bids/estimates for projects, that are an order of
magnitude smaller than the C++ bid. I guess it would seem nice to get
paid for 10x as long, but in reality that's not going to happen. In
this case, Lisp lets me be a superstar: I can do the project at all.

--
/|_ .-----------------------.
,' .\ / | No to Imperialist war |
,--' _,' | Wage class war! |
/ / `-----------------------'
( -. |
| ) |
(`-. '--.)
`. )----'

Klaus Momberger

unread,
Jul 26, 2003, 6:51:33 PM7/26/03
to
via...@rediffmail.com (viator) wrote in message news:<dc828419.03071...@posting.google.com>...
Learn elisp (Emacs-Lisp) first and find out if you like it. If you do, you can go
ahead with CL. If you don't ...., well, at least you have will have
learned something useful: how to program and customize your Emacs. ;-)

-klaus.

Marc Spitzer

unread,
Jul 27, 2003, 1:44:55 AM7/27/03
to
t...@famine.OCF.Berkeley.EDU (Thomas F. Burdick) writes:

> This argument made a lot of sense, back all of 3 years ago, when there
> was an amazingly large supply of capital for programming projects.
> However...
>
> > Their hourly pay is the same regardless of how much work they get
> > done.
>
> ... maybe it's just where I'm at (the SF Bay Area), but $0/hr isn't
> very compelling. For me, one major benefit of Lisp has been being
> able to make bids/estimates for projects, that are an order of
> magnitude smaller than the C++ bid. I guess it would seem nice to get
> paid for 10x as long, but in reality that's not going to happen. In
> this case, Lisp lets me be a superstar: I can do the project at all.

Double your price and see if they still buy for a 1/5 at least half as
much as 1/10. You are really lowballing your self.

marc

Mario S. Mommer

unread,
Jul 30, 2003, 4:19:05 AM7/30/03
to

I don't know. He might end up being displeased by the shallow binding,
the slow execution times, and the lacking numerical tower... I'd say
it is better to start with CL right away.

Message has been deleted

Rober...@yahoogroups.com

unread,
Jul 31, 2003, 11:06:08 PM7/31/03
to
{{Date: 26 Jul 2003 10:44:28 -0700
From: eric...@yahoo.com (Eric Smith)

The philosophy of Lisp is to optimize the usage of the programmer's
time.}}

That's so vague that an advocate of just about any programming language
might use the same claim. You need to pin down exactly what makes LISP
different from other programming languages.

{{Lisp is for software development projects where a lot of work needs


to be done and the programmers scarcely have enough time to do all of
it.}}

That's true of just about every commercial programming project, and yet
I've never found any employer willing to accept that LISP was the
answer to that problem.

{{For any big project there is a jargon by which insiders communicate


to each other the technical details of that project. If they could
use a programming language based on that jargon, they would be way
ahead. The code they wrote would simply be the technical details of
the project expressed the way they already express them.}}

Employers don't see it that way. They consider it more important that
the source code look like the syntax their experienced programmers are
used to, rather than look like anything experts in the application
field might understand. What you say about LISP is true, but shoots
LISP in the foot insofar as we could ever earn a living programming in
LISP.

{{The advantages of Lisp are so overwhelming ...}}

Again, a vague statement that an advocate for just about any
programming language might state with equal emotional emphasis.

{{One disadvantage is that it takes a lot of time and effort to become
an expert at Lisp.}}

I very much disagree with that, if by "expert" you mean the ability to
easily write a variety of applications using the language, not having
memorized the whole shitload of function names and documentation, but
knowing the basic data types and ways of using them and how to find
functions as needed in the language manual/spec. LISP programming is
very natural. If you want a particular kind of data object, you just
make it, and return it as the return-value of the object-making
function. If you want the data passed to another function, or stored in
a local or global variable, or included as an element in a larger
structure, you just do it. You don't have to hassle with allocating
enough memory at compile-time for the largest size it might ever be.
You just make it at run time and however much memory is needed gets
allocated from the heap. Compare that to the mess you must do in C,
where you need to allocate enough space at complile time, and carefully
make sure you don't overwrite the end of the allocated space, or even
Visual Basic where you must keep track of how much you've allocated and
re-size the array whenever you are about to put more data into it,
which happens several times when loading a file into memory unless you
do a two-pass algorithm that counts how much memory would be needed on
first pass then actually loads it on second pass.

{{So why should they put in the time and effort to learn Lisp? Their


hourly pay is the same regardless of how much work they get done.}}

Actually they get paid a lot more in other languages, compared to zero
pay in LISP. For more than ten years, there's been not a single job
available for LISP programming. While scanning job ads for the keyword
LISP, I've seen only a few ads that even mention it, the most recent in
this (SF bay) area was more than three years ago:
http://www.google.com/groups?selm=6bpO4.2662%24Hz.3010%40client
[[Want to inundate yourself with Java? ...
Qualifications include:
2-3 years of experience (minimum) in creating and shipping commercial
software.]]
So despite my 15 years LISP experience, I don't qualify for the job
because I've never shipped commercial software.

Rober...@yahoogroups.com

unread,
Jul 31, 2003, 11:16:01 PM7/31/03
to
{{Date: 26 Jul 2003 11:04:11 -0700
From: t...@famine.OCF.Berkeley.EDU (Thomas F. Burdick)

For me, one major benefit of Lisp has been being able to make
bids/estimates for projects, that are an order of magnitude smaller
than the C++ bid.}}

During the past 10+ years I've never found even one employer willing to
even consider letting me do a project using LISP, even if I could
finish a significant project in a week or two at a payrate of
$400/week. Even if I completed most of the project on my own without
pay, I haven't been able to find anyone to even look at my completed
program to test whether it works or not much less consider paying me
for spending another couple days finishing it.

Coby Beck

unread,
Jul 31, 2003, 11:48:00 PM7/31/03
to

<Rober...@YahooGroups.Com> wrote in message
news:REM-2003...@Yahoo.Com...
> Actually they get paid a lot more in other languages, compared to zero
> pay in LISP. For more than ten years, there's been not a single job
> available for LISP programming. While scanning job ads for the keyword
> LISP, I've seen only a few ads that even mention it, the most recent in

http://www.flipdog.com/js/jobsearch-results.html?loc=world_US&srch=lisp&job=1

When I did that search a year or so ago, there were 100 - 200 results, now
it is 35 :( True, they are not at all, or even mostly, solid leads to Lisp
jobs.

http://seeker.dice.com/seeker.epl?rel_code=1102&op=6

Likewise that one used to be more encouraging.

But with regard to your sweepingly defeatist statements above I can tell you
that I have had four positions as a Lisp programmer, yes paying positions.
I am on good terms with three of them and know they are still using Lisp. I
think even the minimum of thinking before saying "For more than ten years,
there's been not a single job available for LISP programming" would save you
looking a bit ridiculous.

I know it is not easy, but don't be so alarmist.

--
Coby Beck
(remove #\Space "coby 101 @ big pond . com")

Thomas F. Burdick

unread,
Aug 1, 2003, 12:51:15 AM8/1/03
to
Rober...@YahooGroups.Com writes:

If your professional persona at all resembles your persona in this
group, the problem might not be Lisp. Certainly this group lies on
the edge of our professional and private selves, so maybe you come off
very differently in a business setting. But still ... others have
been able to find work using Lisp.

Erann Gat

unread,
Aug 1, 2003, 1:23:28 AM8/1/03
to
In article <xcvu192...@famine.OCF.Berkeley.EDU>,

t...@famine.OCF.Berkeley.EDU (Thomas F. Burdick) wrote:

> Rober...@YahooGroups.Com writes:
>
> > {{Date: 26 Jul 2003 11:04:11 -0700
> > From: t...@famine.OCF.Berkeley.EDU (Thomas F. Burdick)
> > For me, one major benefit of Lisp has been being able to make
> > bids/estimates for projects, that are an order of magnitude smaller
> > than the C++ bid.}}
> >
> > During the past 10+ years I've never found even one employer willing to
> > even consider letting me do a project using LISP, even if I could
> > finish a significant project in a week or two at a payrate of
> > $400/week. Even if I completed most of the project on my own without
> > pay, I haven't been able to find anyone to even look at my completed
> > program to test whether it works or not much less consider paying me
> > for spending another couple days finishing it.
>
> If your professional persona at all resembles your persona in this
> group, the problem might not be Lisp. Certainly this group lies on
> the edge of our professional and private selves, so maybe you come off
> very differently in a business setting. But still ... others have
> been able to find work using Lisp.

I have personally hired four Lisp programmers over the last ten years.

Here's an Aggie joke for you.

There was once an Aggie who decided he wanted to win the lottery, and
being a good Aggie he did what good Aggies do in their times of need: he
prayed. "Dear Lord, I've been a good Aggie, and I would really love to
win the lottery. If you let me win the lottery I'll give up beer for a
whole week."

The next morning he ran out to get the morning paper to read the headlines
announcing that he had won the lottery, but to his astonishment he
discovered that he had not won. "Dear Lord," he prayed, "I terribly
disappointed. Yesterday I prayed to you and asked to win the lottery, but
I didn't win. So I'll tell you what: if you let me win the lottery I'll
give up beer for a whole month."

The next morning the Aggie again rushed out to get the morning newspaper,
only to be disappointed again. "Dear Lord," he prayed again, "If you'll
only let me win the lottery I'll give up beer for a year!"

The next morning he found still hadn't won. At his wit's end he prayed
one last time. "Dear Lord, I offered to give up beer for a whole year. I
don't understand why you didn't let me win the lottery after offering up
such a tremendous sacrifice. Send me a sign, Lord! Tell me, what do you
want me to do?"

To his astonishment, the heavens parted, and angelic choir sang, and a
great booming voice said, "Buy a lottery ticket!"

(And if you still don't get it, "Post a pointer to your resume!")

Joe Marshall

unread,
Aug 1, 2003, 10:00:09 AM8/1/03
to
Rober...@YahooGroups.Com writes:

> For more than ten years, there's been not a single job
> available for LISP programming.

I've been hacking lisp for $ since 1985. The market
is small, but not non-existant.

Rober...@yahoogroups.com

unread,
Aug 1, 2003, 12:04:53 PM8/1/03
to
{{Date: 31 Jul 2003 21:51:15 -0700

From: t...@famine.OCF.Berkeley.EDU (Thomas F. Burdick)
If your professional persona at all resembles your persona in this
group, the problem might not be Lisp.}}

I'm not sure what you mean by "professional persona". When I had a job,
I'd brainstorm with my supervisor about how to organize the overall
project, such as what data needed to be passed around to communicate
the needed info, what services might be provided to users, etc. Then
I'd have a task to implement something, and I'd go off and figure out
how to do it, and do it, and document how I did it and how to use my
code from the rest of the program and anything about how the user
interacts with it, and I'd set up a demo of my new code, and announce
everything to my supervisor. I kept a priority list of what needed
doing, and when one task was basically done, ready for my supervisor to
review my work, I'd start working on another task while waiting for my
supervisor to review my already-completed task. What fault do you find
in that?

{{others have been able to find work using Lisp.}}

Given that there's been not a single job opening in more than three
years in this area (see ba.jobs.offered) that even mentionned LISP, do
you know anyone in this area who has been able to find work using LISP
recently? My old buddy from the Stanford AI lab, Bill Gosper, who did
great work in LISP/MacSyma-based mathematical algorithms (closed-form
summation of hypergeometric series for example), and other ingeneous
algorithms (hash-based generation-doubler for Conway's "Life" cellular
automaton for example), has been unemployed for several years too the
last time I talked to him a couple years ago, so it's not just me
unable to find any LISP programming work in this area.

Rober...@yahoogroups.com

unread,
Aug 1, 2003, 12:45:42 PM8/1/03
to
{{Date: Thu, 31 Jul 2003 22:23:28 -0700
From: g...@jpl.nasa.gov (Erann Gat)

I have personally hired four Lisp programmers over the last ten
years.}}

When you were looking for somebody to hire, did you happen to ever see
my LISP resume?
http://www.google.com/groups?selm=rtit0cju1iv47%40corp.supernews.com
http://www.google.com/groups?selm=76llmr%241d7%241%40remarQ.com
If you saw it, why didn't you ever contact me for an interview?

Where did you post your own job ad when you were looking to hire
somebody, so that I might have a chance of seeing your opening and
contacting you to apply for your opening?

{{Here's an Aggie joke for you.}}

I don't know what the word "Aggie" means.
I checked on dictionary.reference.com before reading your joke:
- A playing marble.
- An agricultural school or college.
- A student enrolled at such a school or college.
Any of those you are joking about??

{{Post a pointer to your resume!}}

So I suppose you have no idea how to use Google Groups to find where I
already posted my resume many many times?
Hint: Go to this URL:
Linkname: Google Advanced Groups Search
URL: http://www.google.com/advanced_group_search?hl=en
In the first fill-in space, put Robert Maas. Further down, where it
asks for newsgroup, fill in ba.jobs.offered. Back up toward the first,
you see [Sort by relevance] which you should change to
[Sort by date_____], and where it says [10 messages_] change to
[30 messages_], then click on the "Google Search" button.
It'll give you Results 1 - 17 of about 26. (5 of the 26 are something
else somebody else posted that happened to match those keywords)
Near the bottom, see where it says:
In order to show you the most relevant results, we have omitted some
entries very similar to the 17 already displayed.
If you like, you can repeat the search with the omitted results
included.
so then click on that to get all 21 times I've posted my resume in
reverse chronological order from 1998 onward (I don't know why it
doesn't show any older stuff in that newsgroup). Repeat the same search
but in misc.jobs.resumes, and increase the count to 100 to catch most
of them (104 total matches, my resumes mixed in with some discussion
that others posted in response to my desperate please for employment).

Joe Marshall

unread,
Aug 1, 2003, 1:04:41 PM8/1/03
to
Rober...@YahooGroups.Com writes:

> So I suppose you have no idea how to use Google Groups to find where I
> already posted my resume many many times?

Perhaps alienating potential employers isn't the best strategy.

> Hint: Go to this URL:
> Linkname: Google Advanced Groups Search
> URL: http://www.google.com/advanced_group_search?hl=en
> In the first fill-in space, put Robert Maas. Further down, where it
> asks for newsgroup, fill in ba.jobs.offered. Back up toward the first,
> you see [Sort by relevance] which you should change to
> [Sort by date_____], and where it says [10 messages_] change to
> [30 messages_], then click on the "Google Search" button.
> It'll give you Results 1 - 17 of about 26. (5 of the 26 are something
> else somebody else posted that happened to match those keywords)
> Near the bottom, see where it says:
> In order to show you the most relevant results, we have omitted some
> entries very similar to the 17 already displayed.
> If you like, you can repeat the search with the omitted results
> included.
> so then click on that to get all 21 times I've posted my resume in
> reverse chronological order from 1998 onward (I don't know why it
> doesn't show any older stuff in that newsgroup). Repeat the same search
> but in misc.jobs.resumes, and increase the count to 100 to catch most
> of them (104 total matches, my resumes mixed in with some discussion
> that others posted in response to my desperate please for employment).

Perhaps posting to usenet isn't the best strategy, either.

Erann Gat

unread,
Aug 1, 2003, 1:25:25 PM8/1/03
to
In article <REM-2003...@Yahoo.Com>, Rober...@YahooGroups.Com wrote:

> {{Date: Thu, 31 Jul 2003 22:23:28 -0700
> From: g...@jpl.nasa.gov (Erann Gat)
> I have personally hired four Lisp programmers over the last ten
> years.}}
>
> When you were looking for somebody to hire, did you happen to ever see
> my LISP resume?

Not that I recall. Did you send me one?


> Where did you post your own job ad when you were looking to hire
> somebody, so that I might have a chance of seeing your opening and
> contacting you to apply for your opening?

comp.lang.lisp among other places. See e.g.:
gat-231095102550%40milo.jpl.nasa.gov

All of the positions were also advertised through JPL's HR department.

> {{Here's an Aggie joke for you.}}
>
> I don't know what the word "Aggie" means.
> I checked on dictionary.reference.com before reading your joke:
> - A playing marble.
> - An agricultural school or college.
> - A student enrolled at such a school or college.
> Any of those you are joking about??

Nope. Try looking up "aggie joke" on Google.

>
> {{Post a pointer to your resume!}}
>
> So I suppose you have no idea how to use Google Groups to find where I
> already posted my resume many many times?

You suppose incorrectly. And you should give some thought to the impact
that what you say might have on my inclination to hire you given that
hiring Lisp programmers seems to be very much a buyer's market at the
moment.


> Hint: Go to this URL:

You should give some more thought to what you are really trying to
achieve. Do you want a Lisp job, or do you want to educate people on how
to use Google? You may have to choose one or the other.

Here's a hint for you: Lottery tickets are only good for one lottery at a
time. If you want a shot at next week's lottery you have to buy another
ticket.

E.

Steve Long

unread,
Aug 2, 2003, 4:28:19 PM8/2/03
to

Most "posted" jobs I have seen include Lisp as a skill that "would be nice
to have", not the primary skill that they are looking for (that is usually
reserved to C++, Java, or some sort of web-based or highly custom software
skill). Remember that the person who posts the job is often not someone
knowledgeable about the required skills or the details of the position, so
you usually have to ask for more information.

Finding a software job is hard work in a business world convinced that it is
better to ship jobs overseas and outsource IT departments, so don't work
against yourself.

If I were looking for someone to work for me for more than 2 days, I would
look for someone with problem-solving skills and a history of dealing with
complex issues. All the backquotes and parens in the world won't help if the
approach to the problem was faulty.

I'm a soon-to-be-unemployed Lisp programmer/mechanical engineer, and have
one piece of advice: Don't just sell yourselves as a Lisp programmers --
sell yourselves as a "solution implementers" who, hopefully, possess at
least a little familiarity with other languages and technologies, and some
other kind of domain experience that can be sold as "applicable" to a
potential employer. Employers don't like to work hard at finding an
employee; you need to give them as much help as possible.

Don't point out that they've made a mistake by buying into the dot-Net
technology or that SQLServer is better than Oracle or that XML is just a bad
implementation of a Lisp idea, whether it is true or not, unless you are
paid to provide your professional opinion. You never know who's feelings you
will hurt. Never forget that being right is less important than being in
charge.


Regards,

Steve Long

Paolo Amoroso

unread,
Aug 4, 2003, 3:37:31 PM8/4/03
to
On Thu, 01 Aug 2003 09:45:42 -0700, Rober...@YahooGroups.Com wrote:

> When you were looking for somebody to hire, did you happen to ever see
> my LISP resume?

Maybe at the time he already had enough potential employees at hand, and
didn't need to look further.


Paolo
--
Paolo Amoroso <amo...@mclink.it>

Paolo Amoroso

unread,
Aug 4, 2003, 3:37:32 PM8/4/03
to
On Thu, 31 Jul 2003 20:06:08 -0700, Rober...@YahooGroups.Com wrote:

> pay in LISP. For more than ten years, there's been not a single job
> available for LISP programming. While scanning job ads for the keyword

Funny you should mention that. A couple of years ago I started putting
together a list of companies using Lisp in industrial settings, which is
currently available in much expanded form at the ALU CLiki site.

One of my sources were Lisp job openings posted to various online forums,
including comp.lang.lisp. Maybe you were searching the wrong forums?

Eric Smith

unread,
Aug 4, 2003, 7:48:02 PM8/4/03
to
Steve Long <sal...@hotmail.com> wrote in message news:<BB516DBB.407C%sal...@hotmail.com>...

> one piece of advice: Don't just sell yourselves as a Lisp programmers --

In today's job market for programmers, spending
a lot of time applying for programming jobs is
not very cost effective. A much better strategy
from my point of view is to take advantage of
being unemployed by using Lisp day and night to
develop whatever software you find interesting.
And then, instead of selling yourself based on
your Lisp skills, sell yourself as an expert in
the particular software you developed.

One way would be to develop your software into a
commercial product and sell it. Another way
would be to find companies that could use similar
software, and sell them on the idea of letting you
adapt yours to their needs.

One big advantage of Lisp is that with it you can
much more quickly become an expert in an arcane
software product with a complicated API. If there
is some popular software on the market which you
like to use, and you would like to develop add-on
tools for it, Lisp might be the perfect language
for that, and other users of that product might be
the perfect market for those tools. Being a user
of your own work is an important factor in its
quality and value. Using the various internet
forums dedicated to that software as your channel
of communication with potential users of your tools,
you could soon have the equivalent of a full time
job doing something you really enjoy, and with lots
of potential for gradually increasing income.

A complicated API is much easier to learn with Lisp
because once you wrap the API functions with Lisp
functions you can experiment with them at high speed
and quickly gain complete understanding of all the
quirks and issues involved. That kind of understanding
is what makes you most valuable to other users of that
API or of the product or products that use that API.
Most of them couldn't care less about Lisp.

Of course some unemployed programmers need money much
sooner than any income from such projects. But they
could still do such projects part time while doing any
kind of work they can find, programming or otherwise.
The expectation of being able to earn money in the near
future from your Lisp work can make it a lot easier to
tolerate a tedious job.

Rober...@yahoogroups.com

unread,
Aug 6, 2003, 3:25:48 PM8/6/03
to
{{Date: Fri, 1 Aug 2003 13:48:00 +1000
From: "Coby Beck" <cb...@mercury.bc.ca>
http://www.flipdog.com/js/jobsearch-results.html?loc=world_US&srch=lisp&job=1
[1p.gif] [1p.gif] Telecom Agent at JobWarehouse.com [1p.gif] July 17,
2003 [1p.gif] United States
(just an earn-big-bucks-at-home scam)
[1p.gif] [1p.gif] Application Software Engineer at Probix Inc.
[1p.gif] August 06, 2003 [1p.gif] Palo Alto, CA
* Programming expertise in i386 Assembler, C/C++, Java, Lisp, TCP/IP
stack, SNMP, Win32/UNIX API and system services
* ActiveX, DCOM and ASP
(primarily Intel assembler job)
[1p.gif] [1p.gif] Sr. Circuit Design Engineer at MicroDisplay
Corporation [1p.gif] August 06, 2003 [1p.gif] San Pablo, CA
(obviously that's circuit design, not programming)
[1p.gif] [1p.gif] Editor at RenderX [1p.gif] August 06, 2003 [1p.gif]
Palo Alto, CA
Staff, part time or freelance editor-writer to develop content
of our site, write or help write White Papers and press
releases and proof technical documentation. Reporting to
RenderX's CEO and VP of Marketing, an ideal candidate will have
contributed to sites like XML.com, XML.org, W3C, W3Journal,
ZDNet, Web Review, Web Techniques Seybold, etc.
(that job has nothing whatsoever to do with LISP programming)
[1p.gif] [1p.gif] Software Design Engineer at Starium LTD. [1p.gif]
August 05, 2003 [1p.gif] San Jose, CA
Proficiency in C language
(primarily C not LISP)
[1p.gif] [1p.gif] Senior Programmer at Strawberry Tree Inc [1p.gif]
August 03, 2003 [1p.gif] Sunnyvale, CA
18 years experience in C, C++, assembly, Pascal, Basic, LISP, and
numerous scripting languages using Windows, UNIX, Java, HTML, XML,
TCP/IP, and HTTP. Extensive experience programming real-time operating
(five languages are listed before LISP there, of which assembly is the
only one in which I have more than a half year experience, and my
particular assembly language was IBM 1620, IBM 360/370, DEC PDP-10, MOS
6502, and Intel 8080, not likely what they're currently looking for; I
don't think my 15 years LISP experience are enough to qualify here)
Extensive experience programming real-time operating
systems, embedded systems, and PCs. Active in Bluetooth wireless
(I've never done any of that. Should I apply for this job anyway?)
[1p.gif] [1p.gif] Lead Application Engineer at Design Power, Inc.
[1p.gif] August 03, 2003 [1p.gif] Cupertino, CA
http://www.flipdog.com/jobs/20030801/1e/fc/490b90fa6a9f7b2a2fef05e9c2e0.htm;jsessionid=GQ22FWESU3QFBQFIC2VCFEQ#anchor-1
(The qualifications for this job are somewhat vague, so I've included
the URL above. It doesn't really sound like a LISP programming job.)
[1p.gif] [1p.gif] Application Development Engineer at Design Power,
Inc. [1p.gif] August 03, 2003 [1p.gif] Cupertino, CA
(Similar to previous job, not LISP programming as far as I can tell)
[1p.gif] [1p.gif] Software Engineer at Advantest [1p.gif] August 03,
2003 [1p.gif] Santa Clara, CA
* Must have 5 years experience in the following:
* Software and/or hardware development
* UNIX or Windows
(I've had a shell account since 1992, and I've done a little C and LISP
programming on it, would that qualify me?)
* Proficiency in at least one language such as C, C++, Smalltalk or
lisp
(Well at least they aren't too particular about the language, so I
guess my 15 years LISP qualifies here)
* Scripting language such as PERL, shell programming, or Visual
Basic
(I've taken a beginning VB class, is that enough to qualify?)
* Basic knowledge of the range of activities in the development
life-cycle
(Do they mean like figuring out what is needed, figuring out how to
achieve it, designing the program, implementing it, testing it,
documenting it? So do I qualify?)
http://www.flipdog.com/jobs/20030801/77/b5/a24bdfbe0cff639e9e0775d992d7.htm;jsessionid=GQ22FWESU3QFBQFIC2VCFEQ#anchor-1
(That's the URL in case I need to find it again.)
Education:
* BSCS or BSEE}}
(Nope, my degree was in mathematics, so am I ineligible for this job?)

(Those are the only jobs in that collection that are within 50 miles of
where I reside.)

{{they are not at all, or even mostly, solid leads to Lisp jobs.}}

I agree. Not a single LISP programming job among the lot.

{{I have had four positions as a Lisp programmer, yes paying
positions.}}

Gee, I can match you, four paid LISP positions, in reverse
chronological order, most recent ended in 1991:
- PSL for CAI-Calculus
- Helping port PSL to Tenex
- SL for research toward instructable robot
- SL for CAI-symbolicLogic
That earliest paid-LISP-job started in 1980.

{{I am on good terms with three of them and know they are still using
Lisp.}}

Are any of them in the SF bay area, or any allow working over the net?
Do any of them have any current LISP programming positions?

Coby Beck

unread,
Aug 6, 2003, 7:44:01 PM8/6/03
to
<Rober...@YahooGroups.Com> wrote in message
news:REM-2003...@Yahoo.Com...
> {{Date: Fri, 1 Aug 2003 13:48:00 +1000
> From: "Coby Beck" <cb...@mercury.bc.ca>

> {{I have had four positions as a Lisp programmer, yes paying


> positions.}}
>
> Gee, I can match you, four paid LISP positions, in reverse
> chronological order, most recent ended in 1991:

Ok, I'll be more specific: four consecutive paid Lisp positions in the last
10 years (10 years was the period of time in which you said there was not a
single job available using Lisp)

Look, Robert, I do not want to kick anyone when they are down, but your
attitude is ridiculous. You have stated, and refused to retract or qualify,
that there are no Lisp jobs out there. I and others have provided more than
the single counter example necessary to debunk that statement.

I am reminded of a saying (I may have even picked it up here in a .sig) that
I always repeat to my 15 year-old son:

"Whether you think you can, or you think you can't, you're probably right"

Well, you think you can not find work in Lisp, I think I can. Guess what?
We are both right.

Rober...@yahoogroups.com

unread,
Aug 7, 2003, 11:09:02 AM8/7/03
to
{{Date: Fri, 01 Aug 2003 10:00:09 -0400
From: Joe Marshall <j...@ccs.neu.edu>

I've been hacking lisp for $ since 1985. The market is small, but
not non-existant.}}

Have you been able to stay with the same employer for all those 18
years, or have you found new LISP employers from time to time? If the
latter, how did you ever find the new employers, given that LISP jobs
haven't been advertised.

Rober...@yahoogroups.com

unread,
Aug 7, 2003, 12:03:14 PM8/7/03
to
{{Date: Fri, 01 Aug 2003 10:25:25 -0700
From: g...@jpl.nasa.gov (Erann Gat)

> When you were looking for somebody to hire, did you happen to ever see
> my LISP resume?
Not that I recall. Did you send me one?}}

You misunderstood my question. I meant: Did you see my LISP resume
where I posted it on ba.jobs.resumes?

I am not a spammer, so I wouldn't have sent my resume to 250 million
e-mail addresses indiscriminately, so the only way I would have sent
you my resume directly would be if you posted a job ad on
ba.jobs.offered and I happened to see it and think I might qualify for
the job. Do you recall posting any LISP job announcement there?

{{gat-231095102550%40milo.jpl.nasa.gov}}

Google says there's no such article.

{{All of the positions were also advertised through JPL's HR
department.}}

Given that JPL is hundreds of miles away from where I reside, and I'm
not aware they ever had LISP openings anyway, I would have had no
reason to specifically look in their Web site or whereever else their
HR department announces openings. Now that you've informed me, let
me check there now ...
Linkname: JPL Productions - Careers - Positions
URL: http://www.jplprod.com/careers/positions.asp
Staff Positions
* Temporary Position: Entry Level Web Developer
Freelance
* Video Editors
* Instructional Designers
* Scriptwriters
* Web Designers
I see nothing about LISP there. I looked at the first position, but it
requires image editing experience which I don't have, and I looked at
the instructional postition because most of my recent software has been
educational, but it was too vague to get any idea whether any of my
experience would be related.

{{Try looking up "aggie joke" on Google.}}

There are some collections of such, but no explanation what the term
means or where it comes from. The jokes all seem to involve somebody
who is very stupid, but with no idea why they are called "Aggie"
instead of "Moron" jokes. When I was a kid, there were "Moron" jokes
going around, like why did the moron throw the clock out the window.
So I have no idea why the meaningless word "Aggie" is used now.

{{hiring Lisp programmers seems to be very much a buyer's market at the
moment.}}

Except there aren't any buyers lately, just a bunch of resumes posted
without result.

{{Do you want a Lisp job, or do you want to educate people on how to
use Google?}}

I'd like to have a programming job or something like that related to
LISP, but I haven't seen any openings for many years, only C++ jobs
where a little LISP on the side would be desireable. So your question
seems rather moot. I've been available for most of the past 12 years,
and I've been continuing to use LISP for free during these years,
continuing to develop my programming skills, such as using LISP for CGI
applications starting in early 2001, but nobody has offered me even an
interview much less a job. I'm still available if somebody sees this
thread and wants to offer me a job.

{{If you want a shot at next week's lottery you have to buy another
ticket.}}

I assume this is some kind of metaphor regarding looking for a job.
Please explain what exactly you mean.
I've been posting my resumes (general, LISP, etc.) to ba.jobs.resumes
repeatedly since 1991, but all that effort seems to have been wasted.

Edi Weitz

unread,
Aug 7, 2003, 12:52:39 PM8/7/03
to
On Thu, 07 Aug 2003 09:03:14 -0700, Rober...@YahooGroups.Com wrote:

> {{gat-231095102550%40milo.jpl.nasa.gov}}
>
> Google says there's no such article.

<http://www.google.com/groups?selm=gat-231095102550%40milo.jpl.nasa.gov>

Hmm, you've been a programmer for how many years? And you weren't able
to find the article because a '@' was URL-encoded as '%40'? And you
want this job we have to offer? Hmm, hmm, hmm.

Edi.

Erann Gat

unread,
Aug 7, 2003, 1:26:45 PM8/7/03
to
In article <REM-2003...@Yahoo.Com>, Rober...@YahooGroups.Com wrote:

> {{Date: Fri, 01 Aug 2003 10:25:25 -0700
> From: g...@jpl.nasa.gov (Erann Gat)
> > When you were looking for somebody to hire, did you happen to ever see
> > my LISP resume?
> Not that I recall. Did you send me one?}}
>
> You misunderstood my question.

No, I understood your question perfectly well. You misunderstood my answer.

> I am not a spammer, so I wouldn't have sent my resume to 250 million
> e-mail addresses indiscriminately, so the only way I would have sent
> you my resume directly would be if you posted a job ad on
> ba.jobs.offered and I happened to see it and think I might qualify for
> the job. Do you recall posting any LISP job announcement there?

No, the job was not in the Bay area, so that would not have been appropriate.

It seems you want more than a Lisp job. You want a Lisp job in the Bay
area from someone who is willing to be educated by you on the finer points
of how to look for employees. Not being in the Bay Area I can't help you,
but I wish you the best of luck.


> {{gat-231095102550%40milo.jpl.nasa.gov}}
>
> Google says there's no such article.

Candidate evalution: gives up and blames others upon encountering any
difficulty with an assignment. Apparently unfamilliar with contemporary
character encoding standards, and how to use a search engine. Have to
wonder what else he doesn't know. We can probably do better elsewhere.


> {{hiring Lisp programmers seems to be very much a buyer's market at the
> moment.}}
>
> Except there aren't any buyers lately

How would you know? You were not even capable of finding the public
record of an earlier job opening when it was all but handed to you on a
silver platter.


> {{Do you want a Lisp job, or do you want to educate people on how to
> use Google?}}
>
> I'd like to have a programming job or something like that related to
> LISP

I have always wanted someone to hire me to sit on the beach and drink
Margaritas. I've posted my Margarita-drinking resume on usenet, and I
just can't understand why the job offers don't just come flooding in.
There must be something wrong with the world.

> but I haven't seen any openings for many years

Blacksmithing jobs have been scarce lately too.


> {{If you want a shot at next week's lottery you have to buy another
> ticket.}}
>
> I assume this is some kind of metaphor regarding looking for a job.
> Please explain what exactly you mean.

No, you're going to have to figure it out on your own.


> I've been posting my resumes (general, LISP, etc.) to ba.jobs.resumes
> repeatedly since 1991, but all that effort seems to have been wasted.

How sad. All those wasted years.

E.

Joe Marshall

unread,
Aug 7, 2003, 3:00:48 PM8/7/03
to
Rober...@YahooGroups.Com writes:

Different employers.
I've found more than one job via comp.lang.lisp, actually.


Paolo Amoroso

unread,
Aug 8, 2003, 4:42:54 AM8/8/03
to
On Thu, 07 Aug 2003 08:09:02 -0700, Rober...@YahooGroups.Com wrote:

> latter, how did you ever find the new employers, given that LISP jobs
> haven't been advertised.

You seem to have consistently ignored most of the usual Lisp community
venues.

Here is a tip. Check the following pages, and all their outgoing links:

http://alu.cliki.net/Industry%20Application
http://alu.cliki.net/Research%20Organizations
http://alu.cliki.net/Success%20Stories

Try sending your resume to all the listed companies and organizations. Good
luck,

Paolo Amoroso

unread,
Aug 8, 2003, 4:42:54 AM8/8/03
to
On Thu, 07 Aug 2003 09:03:14 -0700, Rober...@YahooGroups.Com wrote:

> You misunderstood my question. I meant: Did you see my LISP resume
> where I posted it on ba.jobs.resumes?

This may not be a primary source for employers looking for Lisp
programmers.


> I am not a spammer, so I wouldn't have sent my resume to 250 million
> e-mail addresses indiscriminately, so the only way I would have sent

What about the ai+lisp-jobs mailing list or the comp.lang.lisp newsgroup?


[about Lisp jobs at NASA JPL]


> I see nothing about LISP there. I looked at the first position, but it

If you followed comp.lang.lisp more closely, you would have known why.


> I'd like to have a programming job or something like that related to
> LISP, but I haven't seen any openings for many years, only C++ jobs

Maybe you din't check the right venues?


> I've been posting my resumes (general, LISP, etc.) to ba.jobs.resumes
> repeatedly since 1991, but all that effort seems to have been wasted.

See above.

Thien-Thi Nguyen

unread,
Aug 8, 2003, 9:51:08 AM8/8/03
to
Rober...@YahooGroups.Com writes:

> but all that effort seems to have been wasted.

it is wasted only if you don't realize it was wasted.

thi

Gorbag

unread,
Aug 8, 2003, 11:20:15 AM8/8/03
to

<Rober...@YahooGroups.Com> wrote in message
news:REM-2003...@Yahoo.Com...
> {{Date: Fri, 01 Aug 2003 10:25:25 -0700
> From: g...@jpl.nasa.gov (Erann Gat)
> > When you were looking for somebody to hire, did you happen to ever see
> > my LISP resume?
> Not that I recall. Did you send me one?}}
>
> You misunderstood my question. I meant: Did you see my LISP resume
> where I posted it on ba.jobs.resumes?
>
> I am not a spammer, so I wouldn't have sent my resume to 250 million
> e-mail addresses indiscriminately, so the only way I would have sent
> you my resume directly would be if you posted a job ad on
> ba.jobs.offered and I happened to see it and think I might qualify for
> the job. Do you recall posting any LISP job announcement there?
>

Robert,

I suggest you employ an outplacement service and learn the craft of "finding
a job." There are numerous tricks, but one of the first thing you will learn
is that posting a resume on a newsgroup is not a very effective tool. The
second thing you will learn is that you need to sell what you can do for a
company, not what you want. No company cares about Lisp per se, except the
Lisp vendors. All most companies care about is getting something done; the
use of Lisp is incidental or unimportant. First sell them on what you can do
for them, then sell them on the tools you need to do the job. The
outplacement service should assign you a personal consultant to critique
your pitch, help you find companies interested in your skills, etc. They are
not headhunters (and you will learn about the traps of using a headhunter).

You may also need to ask yourself the question: do you want to find a job
using Lisp, or do you want to stay in the bay area? If the former, there are
jobs available, if you look for them instead of waiting for them to come to
you.

I've been using Lisp in every one of my jobs over the last 20 years
(roughly). But I also put a higher value on my job than where I live (after
all, a significant portion of my life will be at work; there are always
vacations to visit interesting locales). Every job involved relocation out
of state, and in two cases, across the country. I never took a "lisp job,"
instead, I took a job where I demonstrated I could create value, and then
once I got there, I sold management on using Lisp for the project. It was
never a particularly difficult sell since they were already sold on my
expertise in the technology area they required; at that point it was simply
an issue of cost efficiency.

Best,


c hore

unread,
Aug 8, 2003, 10:50:41 PM8/8/03
to
Eric Smith wrote:
> a lot of time applying for programming jobs is
> not very cost effective. A much better strategy
> from my point of view is to take advantage of
> being unemployed by using Lisp day and night to
> develop whatever software you find interesting.
> And then, instead of selling yourself based on
> your Lisp skills, sell yourself as an expert in
> the particular software you developed.

Sounds like good advice...but scary in a way.
It suggests that gone are the days of cushy life,
guaranteed employment, and relative high pay for the
American programmer. Now, she is unemployed or about to
be unemployed or underemployed and is fighting
for her survival. I hope she does not commit
suicide as I am sad to hear some have done. The
giant sucking sound of software jobs going to the
Developing World kind of represents their revenge,
and a consequence of "globalization".
Now the American programmer is forced to evolve to
a higher plane, to prove her worth, justify her
relative high pay.

As suggested, Lisp could be a tool in this new arena,
but how many can take, and have the talent for,
this hacker-working-alone approach?

Rober...@yahoogroups.com

unread,
Aug 9, 2003, 11:41:24 PM8/9/03
to
{{Date: Sat, 02 Aug 2003 20:28:19 GMT
From: Steve Long <sal...@hotmail.com>

Most "posted" jobs I have seen include Lisp as a skill that "would be
nice to have", not the primary skill that they are looking for (that
is usually reserved to C++, Java, or some sort of web-based or highly
custom software skill).}}

Yes, that's what I've observed too. Not a single job looking for anyone
to program in LISP, wanting instead somebody with much experience in
those other languages I've never even once used, with some LISP
mentionned down in nearly a footnote. That's why I say there haven't
really been any LISP jobs advertised in several years, at least not any
that I've seen.

{{If I were looking for someone to work for me for more than 2 days, I


would look for someone with problem-solving skills and a history of
dealing with complex issues.}}

I placed top five nationwide in the Putnam math contest, which is
basically a test of my problem-solving ability/skill. Since then, I've
continued to solve new problems, in many cases new problems others
never even considered much less solved. But unfortunately employers
never even consider my problem-solving skills etc. because I don't have
3-5 years paid experience developing shrink-wrap commercial products
using C++ or Java or Oracle or Sybase or Visual Basic.

{{Don't just sell yourselves as a Lisp programmers -- sell yourselves
as a "solution implementers"}}

No good. My resume gets eliminated already, because no commercial C++
Java etc. listed, before the real hiring manager ever sees how many
different kinds of interesting complicated problems I've solved via
software.

And except for occasionally posting my LISP resume, I don't mention
LISP at all. When I went around to all the agencies/recruiters in the
entire city of Mountain View, trying to show them my CGI WebServer
demo, I didn't mention LISP at all. Even so, I could get only one
person at Volt to take a good look at it and one person at MindSource
to take a quick glance at it. That was in early 2001, before the
current recession started, and yet neither of them knew of any jobs
available for me.

Rober...@yahoogroups.com

unread,
Aug 10, 2003, 12:03:22 AM8/10/03
to
{{Date: 4 Aug 2003 16:48:02 -0700
From: eric...@yahoo.com (Eric Smith)

In today's job market for programmers, spending a lot of time
applying for programming jobs is not very cost effective.}}

But if I don't ever apply for a job, I'll be unemployed to my dying
day, right?

{{A much better strategy from my point of view is to take advantage of


being unemployed by using Lisp day and night to develop whatever
software you find interesting.}}

I did that from 1991 to 2003. So-far it hasn't helped me get employed
again.

{{And then, instead of selling yourself based on your Lisp skills, sell


yourself as an expert in the particular software you developed.}}

I've never been able to get any potential employer to even look at what
I've accomplished all on my own unpaid, or to listen to my tales of it.
I have no idea how to accomplish what you suggest I do. Employers don't
want to hear about wonderful software I've written for myself. They
want to hear how I'll do totally different software *they* wnat done,
but first they want to know I have 3-5 years paid experience putting
out shrink wrap commercial products using several languages I've never
had a chance to use even for a minute.

{{One way would be to develop your software into a commercial product
and sell it.}}

That's not possible with LISP, because in order to run any LISP program
the customer needs to already have the LISP runtime environment, which
hardly any potential customer has.

{{Another way would be to find companies that could use similar


software, and sell them on the idea of letting you adapt yours to
their needs.}}

I have no idea idea how to find any potential employer who is
interested in developing any variant of any software I developed for my
own use.

{{Using the various internet forums dedicated to that software as your
channel of communication with potential users of your tools, ...}}

I tried that with my software for teaching pre-school children how to
read and spell at a time-cost of only 10-20 minutes per day for about a
year. Not one person expressed any interest in seeing a demo of my
software, but several people accused me of child abuse for teaching
children how to read and spell, saying it's better to wait until
they're in second or third grade when it just comes naturally to them
and they don't need a program to teach them.

{{Of course some unemployed programmers need money much sooner than any


income from such projects. But they could still do such projects part
time while doing any kind of work they can find, programming or
otherwise.}}

I haven't been able to find any kind of paying work at all. For
example, when I applied at MacDonalds hamburger (on El Monte in
Mountain View), and they saw that I had a college degree, they rejected
me on the excuse I'd find a job within a couple months and leave them
and their expense training me would be wasted. That was when I had
virtually no computer programming experience, so now that I'm
unemployed again but have 22 years programming experience I'm sure
they'd reject me even more quickly if I were so foolish as to apply
there again.

Erann Gat

unread,
Aug 10, 2003, 1:31:03 AM8/10/03
to
In article <REM-2003...@Yahoo.Com>, Rober...@YahooGroups.Com wrote:

> {{One way would be to develop your software into a commercial product
> and sell it.}}
>
> That's not possible with LISP, because in order to run any LISP program
> the customer needs to already have the LISP runtime environment

That's not true. (And I might add that this is an astonishing display of
ignorance from someone touting themselves as a Lisp expert. This myth is
debunked regularly on c.l.l., to say nothing of dozens of web sites, Lisp
implementation documentation, FAQs, etc.)

E.

Paolo Amoroso

unread,
Aug 10, 2003, 6:44:59 AM8/10/03
to
On Sat, 09 Aug 2003 21:03:22 -0700, Rober...@YahooGroups.Com wrote:

> That's not possible with LISP, because in order to run any LISP program
> the customer needs to already have the LISP runtime environment, which
> hardly any potential customer has.

It has been possible to deliver Lisp applications for _years_, even with
free implementations such as CLISP and CMUCL. You don't seem to be up to
date with what goes on in the Lisp world.

Paolo Amoroso

unread,
Aug 10, 2003, 6:45:00 AM8/10/03
to
On Sat, 09 Aug 2003 20:41:24 -0700, Rober...@YahooGroups.Com wrote:

> Yes, that's what I've observed too. Not a single job looking for anyone
> to program in LISP, wanting instead somebody with much experience in
> those other languages I've never even once used, with some LISP
> mentionned down in nearly a footnote. That's why I say there haven't
> really been any LISP jobs advertised in several years, at least not any
> that I've seen.

For the n-th time: _you_ have been unable to find such advertisements.


> LISP at all. When I went around to all the agencies/recruiters in the
> entire city of Mountain View, trying to show them my CGI WebServer
> demo, I didn't mention LISP at all. Even so, I could get only one
> person at Volt to take a good look at it and one person at MindSource
> to take a quick glance at it. That was in early 2001, before the

Do you mean that intelligent life has been discovered at recruiting
agencies?

c hore

unread,
Aug 10, 2003, 7:47:37 AM8/10/03
to
Rober...@YahooGroups.Com :

> I haven't been able to find any kind of paying work at all.

How about applying at Google. It sounded like they are
doing high-powered researchy type work that could use
a researchy background. At least I think I got this
impression from links in http://www.norvig.com/ (vita section):
http://labs.google.com/why-google.html
http://www.google.com/jobs/great-people-needed.html

I assume you would have to express yourself in Python,
but then that shouldn't be too bad...

Are there any other researchy type places that are hiring
nowadays? IBM? HP Labs? PARC? DOD? NSA? CIA? FBI? etc.
Or are they ejecting all their researchers.

Eric Smith

unread,
Aug 10, 2003, 8:08:18 AM8/10/03
to
Rober...@YahooGroups.Com wrote in message news:<REM-2003...@Yahoo.Com>...

[Couldn't get anyone to even try his software.]

What then? Do you just forget about it
and let it rot, or do you keep trying to
sell it year after year while continuing
to make improvements to it?

One thing you could do is start out by
making all your products free, to try to
get people to start using them, and keep
adding more and more of them, improving
the existing ones, and spreading the word
about them, until your product line finally
becomes popular, at which point you could
gradually start to charge money for some
of them. Just because it takes months or
years to get anyone to even try your first
product for free doesn't mean you won't
eventually become successful.

If people in general seem to think some of
your products are worse than useless, that's
no reason to give up. Every time you add a
new product or improve an existing one, you
add a new possibility for success. No matter
how poor your odds are with each product and
each improvement, those odds add up, and you
can make them keep adding up more and more.

Rober...@yahoogroups.com

unread,
Aug 11, 2003, 5:46:01 PM8/11/03
to
{{Date: Mon, 04 Aug 2003 21:37:32 +0200
From: Paolo Amoroso <amo...@mclink.it>

A couple of years ago I started putting together a list of companies
using Lisp in industrial settings, which is currently available in
much expanded form at the ALU CLiki site.}}

Thanks for your hint, I think I found it:
Linkname: ALU CLiki : Industry Application
URL: http://alu.cliki.net/Industry%20Application
Is that the particular list you're referring to?

{{One of my sources were Lisp job openings posted to various online


forums, including comp.lang.lisp. Maybe you were searching the wrong
forums?}}

I was under the impression that comp.lang.lisp is for general
discussion about LISP, the programming language, not for posting job
ads. Looking at the last 100 threads according to Google now ... not a
single job ad among them all. So let me try again but searching for
articles with the keyword "employment" ... no job ad in the past year,
from more than a year ago some discussion where one person suggested
doing this search:
Searched the web for Employment Opportunities Lisp. Results 1 - 10 of
about 3,240. Search took 0.26 seconds.

Linkname: Windermere Employment Opportunities
URL: http://www.windermeregroup.com/Employment/Listings/6035.html
Last Mod: Mon, 14 Apr 2003 20:01:01 GMT
(Hey, any LISP programmer in Maryland looking for a job, see this ad
that was posted about four months ago, maybe still open?)

Linkname: Employment Opportunities in Artificial Intelligence at JPL
URL: http://www-aig.jpl.nasa.gov/jobs.html
Last Mod: Fri, 04 Jun 1999 20:15:11 GMT
Does that mean the job is still open after more than four years of
looking for an employee? Or just that some idiot at JPL forgot to take
down the obsolete Web page from more than four years ago? Or the person
lost his job and no longer has access to take down the obsolete Web
page and JPL no longer has funds to hire anybody to clean out grossly
obsolete Web pages.

Rather than browse the remaining 3,230 hits, let me be more specific:
Searched the web for Employment Opportunities Lisp california.
Results 1 - 10 of about 1,110. Search took 0.14 seconds.
(Nothing looked reasonble among first ten, so making it more specific:)
Searched the web for Employment Opportunities Lisp california 2003.
Results 1 - 10 of about 467. Search took 0.29 seconds.
Nothing there among first ten, not worth any further effort.

Back to my comp.lang.lisp search, the most recent LISP job announcement
seems to be more than three years ago, job in Texas:
http://www.google.com/groups?selm=8943lk%248rm%241%40nnrp1.deja.com

Searched Groups for employment california group:comp.lang.lisp.
Results 1 - 6 of about 9. Search took 0.71 seconds.
The most recent job ad was in 1995, at JPL in Pasadina.

The next most recent job was for NASA near where I live, but:
- experience with the development of user interfaces in X;
I've never had any such experience, nor any opportunity to get such
experience, so I didn't qualify for that 1993.Dec job.

That's it, no other LISP programming jobs in California have ever been
posted to this newsgroup, unless they somehow avoided all use of the
keyword "employment" or the keyword "California".
So the fact I didn't diligently run this same search twice a week for
the past eight years isn't why I haven't seen any LISP employment ads
for which I could possibly qualify.
If you know any keywords for finding any LISP programming jobs you
claim have been announced in this newsgroup, please tell me.

I'm very good at inventing and adapting algorithms, expressing them in
LISP, coding and debugging them, but I have no idea how to find anyone
with money willing to even look at my already-done work much less pay
me to do more work for them. Traditional methods of scanning job ads
haven't come up with any openings for years. Asking people to tell me
about any job openings they know about hasn't resulted in even one
opening since 1991.

Coby Beck

unread,
Aug 11, 2003, 7:38:58 PM8/11/03
to

<Rober...@YahooGroups.Com> wrote in message
news:REM-2003...@Yahoo.Com...
> {{Date: Mon, 04 Aug 2003 21:37:32 +0200
> Linkname: Windermere Employment Opportunities
> URL: http://www.windermeregroup.com/Employment/Listings/6035.html
> Last Mod: Mon, 14 Apr 2003 20:01:01 GMT
> (Hey, any LISP programmer in Maryland looking for a job, see this ad
> that was posted about four months ago, maybe still open?)
>
> Linkname: Employment Opportunities in Artificial Intelligence at JPL
> URL: http://www-aig.jpl.nasa.gov/jobs.html
> Last Mod: Fri, 04 Jun 1999 20:15:11 GMT
> Does that mean the job is still open after more than four years of
> looking for an employee? Or just that some idiot at JPL forgot to take
> down the obsolete Web page from more than four years ago? Or the person

How about you email them, telling them what idiots they are, and then ask
for a job? That way they won't even need to consult Erann Gat when
reviewing your application.

> Rather than browse the remaining 3,230 hits, let me be more specific:
> Searched the web for Employment Opportunities Lisp california.
> Results 1 - 10 of about 1,110. Search took 0.14 seconds.
> (Nothing looked reasonble among first ten, so making it more specific:)
> Searched the web for Employment Opportunities Lisp california 2003.
> Results 1 - 10 of about 467. Search took 0.29 seconds.
> Nothing there among first ten, not worth any further effort.

Wow. Scanned 10 links before giving up. I was out of work about 15 months
ago and did a similar search. Well, I was on results page 50 or 60
something (that's *page* not result) and followed a lead that got me my next
job.

I do not recommend this as the best approach, it is the job search
equivalent of digging through the trash hoping for a decent pair of shoes,
but it shows you what a little persaverance can lead to.

> Back to my comp.lang.lisp search, the most recent LISP job announcement
> seems to be more than three years ago, job in Texas:
> http://www.google.com/groups?selm=8943lk%248rm%241%40nnrp1.deja.com
>
> Searched Groups for employment california group:comp.lang.lisp.
> Results 1 - 6 of about 9. Search took 0.71 seconds.
> The most recent job ad was in 1995, at JPL in Pasadina.

Please realize that "I don't see it" does not equal "it doesn't exist." You
prefer to say all the people who have tried to advise you are liars or nuts?
Jobs are posted here from time to time and varying frequencies. Not alot,
but a handful per year, 2-5 I would estimate. I got a job from a posting to
c.l.l 5 years more recent the the most recent one you found.

You should stop posting now and hope people have bad memories if you really
want more help from readers of this list.

Coby Beck

unread,
Aug 11, 2003, 7:49:06 PM8/11/03
to

"Coby Beck" <cb...@mercury.bc.ca> wrote in message
news:bh99ek$25kf$1...@otis.netspace.net.au...

> but it shows you what a little persaverance can lead to.

though not how to use a spell checker..I meant "perseverance"


Rober...@yahoogroups.com

unread,
Aug 12, 2003, 12:22:59 AM8/12/03
to
{{Date: 07 Aug 2003 18:52:39 +0200
From: Edi Weitz <e...@agharta.de>

Hmm, you've been a programmer for how many years?}}

Actually I prefer E-prime, omitting all forms of "to be" in nearly all
usages except as helping verbs, to avoid treating people like objects.
I'm a human being, which is a kind of primate, which is a kind of
mammal, etc. I'm not a programmer, which is a kind of electronic
device. But I've been programming computers at least 22 years fulltime
equivalent (longer if you include part-time as if full time and fill in
the gaps when I wasn't actively programming). I've also been doing
other things such as peer counseling over the net and teaching. But
computer programming has been the only activity which has (in the past)
ever resulted in significant income for me.

{{And you weren't able to find the article because a '@' was
URL-encoded as '%40'?}}

I guess I just trusted you to tell me the correct message-ID instead of
encoding it, and I was too tired late at night to look at it carefully.
Now that I've found it, I see it was posted in 1995. Is that the most
recent LISP job you've ever offered?

{{And you want this job we have to offer?}}

Wait a minute there! Why would I want, in 2003, a job that was offered
in 1995? Why would I think it was still open after all this time? Not
to mention that it's located several hundred miles from where I reside,
do you allow working remotely on that job? If it's still open:

{{Experience in Lisp and/or Scheme is a must.}}

I had 14 years LISP at the time it was offered, 15 years now (spent a
year developing LISP software for fighting spam in various ways).

{{Experience in Lisp implementation, AI, Robotics, autonomous agents,
real-time embedded systems (especially vxWorks), C and Unix are
highly desirable.}}

I have 6 months C, a few months A.I., none of the others. Would I
qualify if the job were still open?

Is it OK if I'm skeptical of your motives, not really believing this
job is still available and would let me tele-commute from 500 miles
away?

Rober...@yahoogroups.com

unread,
Aug 12, 2003, 12:40:06 AM8/12/03
to
{{Date: Thu, 07 Aug 2003 10:26:45 -0700
From: g...@jpl.nasa.gov (Erann Gat)

It seems you want more than a Lisp job. You want a Lisp job in the
Bay area from someone who is willing to be educated by you on the
finer points of how to look for employees.}}

That's not entirely correct. It doesn't have to be a lisp job, just
something I can do well enough to be worth paying me. And you don't
have to be willing to be educated by me about anything. But it does
have to be either local in my area or allow working over the net.
Do you have any use for WebServer applications such as
educational/training services?

{{gives up and blames others upon encountering any difficulty with an
assignment.}}

No, but if I'm stuck I let you know how I'm stuck, rather than just
sitting doing nothing for weeks on end waiting for you to discover that
I'm not doing any work. While I'm stuck, I work on other tasks that are
more productive use of my time. Then when this task is unstuck, I
switch back to it as soon as feasible.

> I'd like to have a programming job or something like that related to
> LISP

{{I have always wanted someone to hire me to sit on the beach and drink
Margaritas. I've posted my Margarita-drinking resume on usenet, and
I just can't understand why the job offers don't just come flooding
in. There must be something wrong with the world.}}

There's very little if any practical value in drinking alcoholic
beverages. But there are many many useful applications that could be
programmed in LISP, so paying me to develop one of them would be good
use of somebody's money.

> but I haven't seen any openings for many years

{{Blacksmithing jobs have been scarce lately too.}}

Are you claiming LISP is as obsolete as blacksmithing??
I hope the whole newsgroup jumps on you for making such a comparison.

Rober...@yahoogroups.com

unread,
Aug 12, 2003, 12:56:07 AM8/12/03
to
{{Date: Thu, 7 Aug 2003 09:44:01 +1000
From: "Coby Beck" <cb...@mercury.bc.ca>

four consecutive paid Lisp positions in the last 10 years}}

How did you learn of those openings before you applied for them?
Were they local in the area where you reside? If so, what area?
Somewhere in BC Canada? Would any of them have allowed me to
telecommute from California?

{{You have stated, and refused to retract or qualify, that there are no
Lisp jobs out there.}}

The one you currently have, and the three that you had before but which
are now ended, are no longer available currently, correct?
Are you aware of any lisp jobs currently available?

{{I and others have provided more than the single counter example


necessary to debunk that statement.}}

I'm not aware of even one counterexample in the form of a lisp job
currently available, nor any in the past 12 years that I was able to
find out before you or somebody already filled it, except for one
CAD-support job that I interviewed for circa 1991.

Coby Beck

unread,
Aug 12, 2003, 2:01:26 AM8/12/03
to

<Rober...@YahooGroups.Com> wrote in message
news:REM-2003...@Yahoo.Com...
> {{Date: Thu, 7 Aug 2003 09:44:01 +1000
> From: "Coby Beck" <cb...@mercury.bc.ca>
> four consecutive paid Lisp positions in the last 10 years}}
>
> How did you learn of those openings before you applied for them?

One was refferred to me through school connections. One was from a posting
here in Nov 2000. One I got by a recruiter calling me after finding my
posted resume on one of the 15+ places I put it (I still get junk mail that
I know comes from that!). One by intensively digging through web search
results and cold-calling a company that had been looking for someone three
years earlier.

> Were they local in the area where you reside?

Only one was. Every other one I moved for.

> If so, what area?
> Somewhere in BC Canada?

Yes. The local one was in Vancouver. Since then I have lived in Sydney,
Australia, Tampa Bay, Florida, Victoria, BC and Tasmania, Australia.

> Would any of them have allowed me to
> telecommute from California?

I telecommuted for 3 months from Victoria to Tampa and 5 months from
Victoria to Tasmania.

> {{You have stated, and refused to retract or qualify, that there are no
> Lisp jobs out there.}}
>
> The one you currently have, and the three that you had before but which
> are now ended, are no longer available currently, correct?
> Are you aware of any lisp jobs currently available?

I guess I got them all. Sorry.

> {{I and others have provided more than the single counter example
> necessary to debunk that statement.}}
>
> I'm not aware of even one counterexample in the form of a lisp job

> currently available.

Well, page one of your recently described web search found one less than
four months old. Maybe its worth scanning half way down page two.

Being convinced that it is not possible is a sure guarantee of being right.

Erann Gat

unread,
Aug 12, 2003, 3:34:53 AM8/12/03
to
In article <REM-2003...@Yahoo.Com>, Rober...@YahooGroups.Com wrote:

> {{Date: 07 Aug 2003 18:52:39 +0200
> From: Edi Weitz <e...@agharta.de>

...


> {{And you weren't able to find the article because a '@' was
> URL-encoded as '%40'?}}
>
> I guess I just trusted you to tell me the correct message-ID instead of
> encoding it

Edi was not the one who posted the encoded URL, it was me. And it was
encoded simply because I cut-and-pasted the URL from my browser, and the
browser encoded it.

> I was too tired late at night to look at it carefully.

Will that also be your excuse when the bug you didn't catch late at night
because you were too tired to look at it carefully costs us millions of
dollars?

> Now that I've found it, I see it was posted in 1995. Is that the most
> recent LISP job you've ever offered?

No, but that's irrelevant. I was simply debunking your claim that:

"For more than ten years, there's been not a single job available for LISP
programming."

> Is it OK if I'm skeptical of your motives

That all depends on what your goals really are. But in all likelihood I
think that no, it's not OK. I can't tell what you're really hoping to
achieve here, but whatever it is I'm pretty sure you're not going to
achieve it unless you get that chip off your shoulder first.

E.

Edi Weitz

unread,
Aug 12, 2003, 4:42:13 AM8/12/03
to
On Mon, 11 Aug 2003 21:22:59 -0700, Rober...@YahooGroups.Com wrote:

> Actually I prefer E-prime, omitting all forms of "to be" in nearly
> all usages except as helping verbs, to avoid treating people like
> objects. I'm a human being, which is a kind of primate, which is a
> kind of mammal, etc. I'm not a programmer, which is a kind of
> electronic device.

From my email address you could have guessed that I'm not a native
speaker. However, my dictionary tells me that "programmer" was indeed
the word I meant it to me.

> I guess I just trusted you to tell me the correct message-ID instead
> of encoding it, and I was too tired late at night to look at it
> carefully. Now that I've found it, I see it was posted in 1995. Is
> that the most recent LISP job you've ever offered?

Your memory doesn't seem to work very well. I wasn't the one who
posted the message ID and I also wasn't the one who offered this Lisp
job. But I have, in fact, posted a message some weeks ago where I
asked if people were interested in a Lisp programming job in Hamburg,
Germany. I got more than a dozen replies and a couple of them told me
they would be willing to move for a good Lisp job.

> {{And you want this job we have to offer?}}
>
> Wait a minute there! Why would I want, in 2003, a job that was
> offered in 1995?

Get your dictionary and look up "irony".

> Is it OK if I'm skeptical of your motives, not really believing this
> job is still available and would let me tele-commute from 500 miles
> away?

No, it's not OK because you don't know my motives. It might be OK by
your standards because for you everyone in this newsgroup seems to be
the same person and the whole world is nothing but a big conspiracy
invented for the sole reason to keep you from getting a Lisp job in
your beloved home town.

It looks like you're willing to carry on like this - insulting and
teaching people and rejecting every advice you get. Please do so, with
an attitude like this I'm sure you won't find a decent job ever.

Edi.

Paolo Amoroso

unread,
Aug 12, 2003, 8:59:01 AM8/12/03
to
On Mon, 11 Aug 2003 14:46:01 -0700, Rober...@YahooGroups.Com wrote:

> Thanks for your hint, I think I found it:
> Linkname: ALU CLiki : Industry Application
> URL: http://alu.cliki.net/Industry%20Application
> Is that the particular list you're referring to?

Yes.


> single job ad among them all. So let me try again but searching for
> articles with the keyword "employment" ... no job ad in the past year,
> from more than a year ago some discussion where one person suggested
> doing this search:
> Searched the web for Employment Opportunities Lisp. Results 1 - 10 of

[...]


> Searched the web for Employment Opportunities Lisp california.

[...]


> Searched the web for Employment Opportunities Lisp california 2003.

[...]


> Searched Groups for employment california group:comp.lang.lisp.

[...]


> That's it, no other LISP programming jobs in California have ever been
> posted to this newsgroup, unless they somehow avoided all use of the
> keyword "employment" or the keyword "California".

[...]


> If you know any keywords for finding any LISP programming jobs you
> claim have been announced in this newsgroup, please tell me.

What about "lisp job"? Note that I am not a native English speaker, so
there may be other useful search terms, such as "opening".

Paolo Amoroso

unread,
Aug 12, 2003, 8:59:02 AM8/12/03
to
On Mon, 11 Aug 2003 21:56:07 -0700, Rober...@YahooGroups.Com wrote:

> How did you learn of those openings before you applied for them?

Maybe by being a bit more proactive, i.e. by contacting a lot of companies
using Lisp. By the way, are you subscribed to the ai+lisp-jobs mailing
list? Have you posted your resume there?

Thien-Thi Nguyen

unread,
Aug 12, 2003, 10:57:13 AM8/12/03
to
Rober...@YahooGroups.Com writes:

> No, but if I'm stuck I let you know how I'm stuck, rather than
> just sitting doing nothing for weeks on end waiting for you to
> discover that I'm not doing any work. While I'm stuck, I work on
> other tasks that are more productive use of my time. Then when
> this task is unstuck, I switch back to it as soon as feasible.

while this level of self-knowledge is admirable (doubly so if
verifiable), the danger in sharing this w/ judgemental strangers
is not to be underestimated, especially if the first word is a
refutation of another's impression of you.

you can say that the impression is wrong and ignore it (and its
implications), but look what happens when a program does not
validate inputs. how would you improve that program's chance for
success?

thi

Thomas F. Burdick

unread,
Aug 12, 2003, 5:36:02 PM8/12/03
to
"Coby Beck" <cb...@mercury.bc.ca> writes:

> You should stop posting now and hope people have bad memories

I'm pretty sure that's the only kind we'll all have of him.

--
/|_ .-----------------------.
,' .\ / | No to Imperialist war |
,--' _,' | Wage class war! |
/ / `-----------------------'
( -. |
| ) |
(`-. '--.)
`. )----'

Rober...@yahoogroups.com

unread,
Aug 12, 2003, 7:32:59 PM8/12/03
to
{{Date: Fri, 8 Aug 2003 11:20:15 -0400
From: "Gorbag" <gorbag...@nospam.mac.com>

I suggest you employ an outplacement service and learn the craft of
"finding a job."}}

I don't have any money to employ anyone. I don't even have money to pay
for basic living expenses for myself. The best I can offer is a
percentage of my first so-many-months income.

{{you need to sell what you can do for a company, not what you want.}}

I can rapidly develop novel software that works correctly and is nicely
modular and well documented. The programming style I use most is
bottom-up tool-building, whereby I create low-level tools that automate
various previously-manual processes, then combine those into higher-up
tools that automate more of the task at a time. Do you know any company
in the SF bay area who wants that but doesn't require prior shrink-wrap
experience before even considering me?

{{All most companies care about is getting something done; the use of


Lisp is incidental or unimportant.}}

I've never seen those companies you describe. All I see are companies
that absolutely insist the programming must be done in Java or C++ or
Oracle or Sybase and absolutely insist that the new employee already
have at least three years full-time commercial experience in that
particular language. LISP isn't irrelevant, it's totally rejected.

How can I find the kind of companies you say exist, and the appropriate
person within such company to consider my ability to produce software
for them?

{{do you want to find a job using Lisp, or do you want to stay in the
bay area?}}

It doesn't really matter, but at present I don't have any money for any
travel outside the local area.

{{they were already sold on my expertise in the technology area they
required}}

I'm more of a generalist, able to program applications in any random
area presented to me, but not specialist in any particular area. I've
done software for education (CAI), image processing, spam filtering,
database management, information organization and retrieval, game
playing, data compression, A.I., and a wide range of utilities. If I
could choose, I'd rather develop Web-based educational software, but I
know I don't have a choice, I have to take the first job that is
offered to me that I can actually do.

Rober...@yahoogroups.com

unread,
Aug 12, 2003, 7:45:32 PM8/12/03
to
{{Date: Fri, 08 Aug 2003 10:42:54 +0200
From: Paolo Amoroso <amo...@mclink.it>
Try sending your resume to all the listed companies and organizations.}}

That would be spamming, something I don't ever want to do.

Rober...@yahoogroups.com

unread,
Aug 12, 2003, 9:02:00 PM8/12/03
to
{{Date: 10 Aug 2003 04:47:37 -0700
From: car...@yahoo.com (c hore)

How about applying at Google.
I assume you would have to express yourself in Python}}

I took that as a dare. I checked on my ISP and found they do have
Python, so I started it up and looked at the help file which pointed to
an online tutorial, so I looked at it and tried some stuff, and finally
wrote the following function:
def fact(n):
if n<2:
return(1)
else:
return(n*fact(n-1))

{{http://www.google.com/jobs/great-people-needed.html
http://www.google.com/jobs/eng/sw.html
Requirements:
* Extensive experience programming in C++.}}

I have no C++ experience whatsoever, so I don't qualify.
Another job:

{{* 3+ years Java web application programming experience}}

I have no Java experience whatsoever, so I don't qualify.

Here's another:
{{* Excellent Python or C++ programming skills.
* Excellent Unix/Linux and shell scripting skills.}}

I don't suppose that little bit of Python I taught myself last night
qualifies. The usual shell script languages are so cruddy I avoid them,
full of special cases of characters that do or do not need various
kinds of quoting, horrendous syntax when all that quoting has been
done. CMUCL makes a great shell scripting language by comparison:
(ext:run-program "/usr/bin/dig" (list domain "a")
:output "tmp-dig-a" :if-output-exists :supersede)
I wonder if they would accept my experience using CMUCL as a shell
scripting language? Still, without much Python experience, it's moot.

Here's another:
{{* Excellent Java or C++ programming skills.}}
I don't qualify.

Here's another:
{{* Minimum 3 years of Windows product development experience.}}
I don't qualify.

Here's another:
{{* Extensive experience programming in C++.}}
I don't qualify.

Here's the last job they offer:
{{* Significant development experience in a Unix/Linux environment
using C/C++ or Java.}}
I don't qualify.

So how do I get Google interested in hiring me for some *other* job
that isn't announced on their Web site and which doesn't require
experience I don't have?

Rober...@yahoogroups.com

unread,
Aug 12, 2003, 10:49:06 PM8/12/03
to
{{Date: Tue, 12 Aug 2003 00:34:53 -0700
From: g...@jpl.nasa.gov (Erann Gat)

Edi was not the one who posted the encoded URL, it was me. And it
was encoded simply because I cut-and-pasted the URL from my browser,
and the browser encoded it.}}

So you're saying you had the full URL, which had the message-ID
encoded, and instead of showing me the whole URL, which would have been
correct as-is, you deleted everything except the encoded-message-ID and
posted it as if it was the correct message-ID? Oh well. You were lazy
at that moment, but it's all cleared up now.

> I was too tired late at night to look at it carefully.

{{Will that also be your excuse when the bug you didn't catch late at
night because you were too tired to look at it carefully costs us
millions of dollars?}}

No, because if I tell you I tested everything up through the features I
installed yesterday, but I added a major new feature today and haven't
yet tested it, and I need to go to bed now and will start testing it
tomorrow, you will *not* insist I give you what I have so-far, and you
will *not* go behind my back to give my untested code to customers with
the false claim it's fully tested and should work as-is, right? You'll
wait until I've tested it myself enough to be pretty sure it really
does work, and then you'll have a couple beta testers try to break it,
and only if all that looks good will you make it available to important
customers, right? And even when it reaches the first big customer,
you'll warn them I've tested it and a couple beta testers have tested
it but they're the first big customer so please be careful until
they've tried it a while, right?

{{I can't tell what you're really hoping to achieve here}}

I'm just responding to various threads here, and when appropriate I'm
mentionning my unemployment and desperate need for income and good
programming skills which ought to deserve a good job.

My greatest problem is that fewer than ten people have been willing to
look at my recent (2001.Jan to 2003.Jul) unpaid LISP work to evaluate
its quality. All of them liked it, but not any of them have any ideas
of anybody who has money to hire me at this time or any time in the
near future. Nobody at all was willing to look at any of my work from
1993 until I started CGI programming in 2001. In particular I wrote a
really good educational program using MACL (Macintosh Allegro Common
LISP) which ran off events from a dialog (now called "form" in HTML and
VB), and people could see the effects of it (my kindergarden child and
pre-school child reading at near-adult level, and also learning to
spell hundreds of words), but not one person would come see the actual
program being used by my children, and not one person would let me
temporarily install MACL on their computer at school to give a demo
there.

How can I get people to refer me to potential jobs, get in the "back
door", bypass the advertised jobs that all require C++ or Java, if I
can't get even ten people to look at my work? My 2.5 weeks work using
Think C used just about all the features that are in C++, except for
polymorphic (overloaded) functions and operators, as I later discovered
when I browsed a technical spec of C++ to see what I needed to learn,
and given that polymorphic stuff is trivial to understand once I
already know about templates for Think C, basically I already know C++
in principle, I just don't have three years experience with it as
required by advertised jobs.

Rober...@yahoogroups.com

unread,
Aug 12, 2003, 11:23:14 PM8/12/03
to
{{Date: 12 Aug 2003 10:42:13 +0200
From: Edi Weitz <e...@agharta.de>

From my email address you could have guessed that I'm not a native
speaker.}}

Native English speaker? Really I had no way to know. Lots of German
(Deutsche) ISPs seem to provide free Web-based e-mail services
nowadays, and for all I knew you're in the USA or UK using one of those
services. Nearly four years ago I got e-mail from some site in Ireland,
claiming to be a gal I had helped in Seattle before she disappeared,
the e-mail allegedly from her claiming she's now living in Ireland. A
few days later I got suspicious and connected to the Web site of that
host and discovered a form for getting free Web-based e-mail there, and
so I tried it and sure enough I got myself a free e-mail account in
Ireland. So if I sent you e-mail from there, would you assume I'm not a
native English speaker but Irish instead? If so, you'd be mistaken.
Don't jump to conclusions, from the ISP somebody is on, to where they
are physically located. Yahoo is located about five miles from me, yet
many Yahoo users are not even in the USA.

As for your name: My own name is Dutch, but I don't speak Dutch, my
father doesn't speak Dutch, and only one of his parents was Dutch but
died when he was a teenager so I never met that person. So you could be
just like me, an American, third-generation from one part Dutch, one
part German, etc.

{{Your memory doesn't seem to work very well.}}

That's correct. I never did learn the second chapter of vocabulary when
I took German in high school, didn't learn them until many years later
when I invented an efficient flashcard-drill algorithm. I flunked out
of French and Russian in college because I couldn't memorize the
vocabulary. And for stuff that isn't urgent to memorize, such as who
said what on the net, it's even more futile to try to remember anything
like that. If I really need to know who said what, I look it up on
Google, but most of the time it's not worth the effort.

{{I wasn't the one who posted the message ID and I also wasn't the one


who offered this Lisp job.}}

Yeah, but apparently you said something that got me confused as to who
said what and I mixed you up with the other person. Since then I've
noticed that the other person had a jpl.nasa.gov address, but I hadn't
noticed it or hadn't remembered it back when this confusion arose.
Anyway, it seems to be mostly resolved now, thanks to the net being
somewhat interactive, back and forth instead of just one way with no
way to correct misunderstandings.

{{I have, in fact, posted a message some weeks ago where I asked if


people were interested in a Lisp programming job in Hamburg,
Germany.}}

It's moot to my search for a job, unless you would let me work from
California and somehow we can arrange conversion from DeutscheMarks (or
now Euros) to US-Dollars, but I'm curious so I'll see if I can find
what you posted:
Searched Groups for author:e...@agharta.de. Results 1 - 100 of about
605. Search took 1.38 seconds.
Gee, you've posted a lot, narrowing it down:
Searched Groups for group:comp.lang.lisp author:e...@agharta.de.
Results 1 - 100 of about 559. Search took 1.57 seconds.
Not much better, but that goes back into last year, so surely your job
ad is in this most-recent 100, looking, found it:
Looking for Lisp programmers in Hamburg, Germany
I'm currently negotiating a contract with a startup company here in
Hamburg, Germany. Part of their business
will be based on an application (web-based, using an RDBMS, creating
PDF and RTF documents) that ...
comp.lang.lisp - Jun 6, 2003 by Edi Weitz - View Thread (2 articles)
[[If all works as planned they will most likely need one or two other
programmers by 2004.]]
Hmm, so have they picked anybody yet? Maybe I can consult with you over
the net just a little now and then more as the company needs more work
done for them? By starting small, we can build up understanding and
trust gradually instead of needing to make a sudden major decision.

[[We're talking about possible free-lance work starting autumn/winter
2003 and jobs as a salaried employee in 2004.]]

Any trial work possible already now?

[[Apart from knowing Lisp you should have some experience with
relational databases and webservers, preferably Apache. It wouldn't
hurt if you knew a bit of Perl, C, or Java either.]]

I've never used any formal relational databases, just stuff I've hacked
up myself. I have about 6 months C, no Perl or Java yet.

Rob Warnock

unread,
Aug 13, 2003, 8:43:50 AM8/13/03
to
Eric Smith <eric...@yahoo.com> wrote:
+---------------

| In today's job market for programmers, spending a lot of time
| applying for programming jobs is not very cost effective.

| A much better strategy from my point of view is to take advantage
| of being unemployed by using Lisp day and night to develop whatever
| software you find interesting. And then, instead of selling yourself

| based on your Lisp skills, sell yourself as an expert in the particular
| software you developed.
+---------------

Funny you should mention: I seem to have stumbled into exactly that,
sort of.

First it was just learning CL "'cuz it was time" (after a decade of
getting tired of Scheme's minimalism), but then I found one, and then
a second, small consulting task that could easily be done in a Lisp-based
persistent application server (the kind of thing "mod_lisp" supports)
between a web server and a database (Apache & PostgreSQL, in my case).

No, I'm not making any money from it yet [both were pro-bono, for
"resume credit" only], but I can see that I *might* be able to do so,
if I can find out how to market myself well enough. Being a one-man
band at this point, my focus is server-based "bespoke technical data
processing": that is, any little weird, off-the-wall, non-standard
thingy somebody needs done quickly... and that *can't* be done with
off-the-shelf software [at least, not easily].

Yes, I'm quite familiar with and take encouragement from these:

<URL:http://www.paulgraham.com/road.html>
<URL:http://www.paulgraham.com/avg.html>
<URL:http://www.paulgraham.com/lwba.html>

But I'm not trying to start a full-fledged "dot.com" per se, just do
a bit of "cook-to-order" programming, but in a *server* model using Lisp
and other tools I'm most familiar with, rather than fighting with Java
or MFC or... [insert desktop programming goop de jour].

Dunno whether it'll work or not. We'll see, I guess. "Film at 11..."


-Rob

-----
Rob Warnock, PP-ASEL-IA <rp...@rpw3.org>
627 26th Avenue <URL:http://rpw3.org/>
San Mateo, CA 94403 (650)572-2607

Paolo Amoroso

unread,
Aug 13, 2003, 10:10:04 AM8/13/03
to

Why do you consider this spam? Aren't companies used to receive resumes, by
snail mail or email, from people looking for jobs? All this assumes, of
course, that you act professionally.

Joe Marshall

unread,
Aug 13, 2003, 4:42:00 PM8/13/03
to
g...@jpl.nasa.gov (Erann Gat) writes:

> Blacksmithing jobs have been scarce lately too.

Not as scarce as they used to be! The blacksmiths I know seem
to be making a reasonable living, and they seem to have more
than enough work.

Joe Marshall

unread,
Aug 13, 2003, 4:42:45 PM8/13/03
to
Paolo Amoroso <amo...@mclink.it> writes:

> On Thu, 07 Aug 2003 09:03:14 -0700, Rober...@YahooGroups.Com wrote:
>
>> You misunderstood my question. I meant: Did you see my LISP resume
>> where I posted it on ba.jobs.resumes?
>
> This may not be a primary source for employers looking for Lisp
> programmers.

...and you should pray that it isn't.

Erann Gat

unread,
Aug 13, 2003, 5:35:18 PM8/13/03
to

Yes, but I'll give you long odds that none of them got their current
positions by posting their blacksmithing resumes on usenet.

E.

c hore

unread,
Aug 13, 2003, 10:29:40 PM8/13/03
to
RobertMaas wrote:
> So how do I get Google interested in hiring me for some *other* job
> that isn't announced on their Web site and which doesn't require
> experience I don't have?

By sending resume with cover letter?

How did Norvig get to be a director there. (I assume he
isn't the only one.) He wasn't a C++ or Java expert
in previous life, was he.

Or is he the sole exception. A single Lisp(AI)-turned-Python
director surrounded by C++/Java programmers?

Also, I believe the modern (since about the 1980s I think)
convention has been to write "Lisp" instead of "LISP".
Is the use of the all-caps version an indication of
something...

Joe Marshall

unread,
Aug 14, 2003, 9:38:03 AM8/14/03
to
g...@jpl.nasa.gov (Erann Gat) writes:

The big problem with blacksmithing resumes is that
most of them are forged.

Kenny Tilton

unread,
Aug 14, 2003, 10:58:35 AM8/14/03
to

Joe Marshall wrote:
> g...@jpl.nasa.gov (Erann Gat) writes:
>
>
>>In article <isp1e1...@ccs.neu.edu>, Joe Marshall <j...@ccs.neu.edu> wrote:
>>
>>
>>>g...@jpl.nasa.gov (Erann Gat) writes:
>>>
>>>
>>>>Blacksmithing jobs have been scarce lately too.
>>>
>>>Not as scarce as they used to be! The blacksmiths I know seem
>>>to be making a reasonable living, and they seem to have more
>>>than enough work.
>>
>>Yes, but I'll give you long odds that none of them got their current
>>positions by posting their blacksmithing resumes on usenet.
>
>
> The big problem with blacksmithing resumes is that
> most of them are forged.
>

Really? There are a lot of technical terms to get right. You don't just
hammer those things out.

--

kenny tilton
clinisys, inc
http://www.tilton-technology.com/
---------------------------------------------------------------
"Career highlights? I had two. I got an intentional walk from
Sandy Koufax and I got out of a rundown against the Mets."
-- Bob Uecker

Duane Rettig

unread,
Aug 14, 2003, 11:28:33 AM8/14/03
to
Kenny Tilton <kti...@nyc.rr.com> writes:

> Joe Marshall wrote:
> > g...@jpl.nasa.gov (Erann Gat) writes:
> >
>
> >>In article <isp1e1...@ccs.neu.edu>, Joe Marshall <j...@ccs.neu.edu> wrote:
> >>
> >>
> >>>g...@jpl.nasa.gov (Erann Gat) writes:
> >>>
> >>>
> >>>>Blacksmithing jobs have been scarce lately too.
> >>>
> >>> Not as scarce as they used to be! The blacksmiths I know seem to
> >>> be making a reasonable living, and they seem to have more
>
> >>>than enough work.
> >>
> >>Yes, but I'll give you long odds that none of them got their current
> >>positions by posting their blacksmithing resumes on usenet.
> > The big problem with blacksmithing resumes is that most of them are
> > forged.
>
> >
>
>
> Really? There are a lot of technical terms to get right. You don't
> just hammer those things out.

Sure, you can, if you don't have too many irons in the fire.

--
Duane Rettig du...@franz.com Franz Inc. http://www.franz.com/
555 12th St., Suite 1450 http://www.555citycenter.com/
Oakland, Ca. 94607 Phone: (510) 452-2000; Fax: (510) 452-0182

Daniel Barlow

unread,
Aug 14, 2003, 12:02:19 PM8/14/03
to
Kenny Tilton <kti...@nyc.rr.com> writes:

>> The big problem with blacksmithing resumes is that most of them are
>> forged.
>>
>
> Really? There are a lot of technical terms to get right. You don't
> just hammer those things out.

Yeah. It's not the shoe-in that people make it out to be.


-dan

--

http://www.cliki.net/ - Link farm for free CL-on-Unix resources

Joe Marshall

unread,
Aug 14, 2003, 12:04:24 PM8/14/03
to
Duane Rettig <du...@franz.com> writes:

> Kenny Tilton <kti...@nyc.rr.com> writes:
>
>> Joe Marshall wrote:
>> > g...@jpl.nasa.gov (Erann Gat) writes:
>> >
>>
>> >>In article <isp1e1...@ccs.neu.edu>, Joe Marshall <j...@ccs.neu.edu> wrote:
>> >>
>> >>
>> >>>g...@jpl.nasa.gov (Erann Gat) writes:
>> >>>
>> >>>
>> >>>>Blacksmithing jobs have been scarce lately too.
>> >>>
>> >>> Not as scarce as they used to be! The blacksmiths I know seem to
>> >>> be making a reasonable living, and they seem to have more
>>
>> >>>than enough work.
>> >>
>> >>Yes, but I'll give you long odds that none of them got their current
>> >>positions by posting their blacksmithing resumes on usenet.
>> > The big problem with blacksmithing resumes is that most of them are
>> > forged.
>>
>> >
>>
>>
>> Really? There are a lot of technical terms to get right. You don't
>> just hammer those things out.
>
> Sure, you can, if you don't have too many irons in the fire.
>

I should have steeled myself for this kind of response. Well, I have
the mettle for it.

Do union blacksmiths get paid scale?**


----
** this one might be obscure if you don't smith

Duane Rettig

unread,
Aug 14, 2003, 2:35:05 PM8/14/03
to
Daniel Barlow <d...@telent.net> writes:

> Kenny Tilton <kti...@nyc.rr.com> writes:
>
> >> The big problem with blacksmithing resumes is that most of them are
> >> forged.
> >>
> >
> > Really? There are a lot of technical terms to get right. You don't
> > just hammer those things out.
>
> Yeah. It's not the shoe-in that people make it out to be.

Quit your bellowing.

Joe Marshall

unread,
Aug 14, 2003, 4:14:27 PM8/14/03
to
Duane Rettig <du...@franz.com> writes:

> Daniel Barlow <d...@telent.net> writes:
>
>> Kenny Tilton <kti...@nyc.rr.com> writes:
>>
>> >> The big problem with blacksmithing resumes is that most of them are
>> >> forged.
>> >>
>> >
>> > Really? There are a lot of technical terms to get right. You don't
>> > just hammer those things out.
>>
>> Yeah. It's not the shoe-in that people make it out to be.
>
> Quit your bellowing.

My god, what have I wrought?

Daniel Barlow

unread,
Aug 14, 2003, 4:01:43 PM8/14/03
to
Duane Rettig <du...@franz.com> writes:

> Daniel Barlow <d...@telent.net> writes:
>
>> Kenny Tilton <kti...@nyc.rr.com> writes:
>>
>> >> The big problem with blacksmithing resumes is that most of them are
>> >> forged.
>> >
>> > Really? There are a lot of technical terms to get right. You don't
>> > just hammer those things out.
>>
>> Yeah. It's not the shoe-in that people make it out to be.
>
> Quit your bellowing.

This guy is red-hot

Gorbag

unread,
Aug 14, 2003, 4:23:56 PM8/14/03
to

"Joe Marshall" <j...@ccs.neu.edu> wrote in message
news:adaccj...@ccs.neu.edu...

Let me get a basket handle on this discussion and see if we can be drawing
to a point. I mean there's a lot of hot rasping here, and it's going to
start a fire soon. My 3-point perspective hinges on forging dynamics and
not hammering technique.

In other words, lets all use our grooving tool instead of our upsetting
tongs.


Joe Marshall

unread,
Aug 14, 2003, 4:26:52 PM8/14/03
to
"Gorbag" <gorbag...@nospam.mac.com> writes:

A hardy response! Weld-one.

Erann Gat

unread,
Aug 14, 2003, 4:26:20 PM8/14/03
to
In article <zdS_a.3936$c6....@bos-service2.ext.raytheon.com>, "Gorbag"
<gorbag...@nospam.mac.com> wrote:

Enough already! The irony is killing me!

E.

Ingvar Mattsson

unread,
Aug 15, 2003, 5:44:35 AM8/15/03
to
Joe Marshall <j...@ccs.neu.edu> writes:

An endless cascade of puns, just because peopel cannot temper their
humour.

On a more metaphysical level, are people who like lisp more disposed
towards (or less) blacksmithing than the general population?

//Ingvar
--
"No. Most Scandiwegians use the same algorithm as you Brits.
"Ingvar is just a freak."
Stig Morten Valstad, in the Monastery

Rob Warnock

unread,
Aug 15, 2003, 9:24:43 AM8/15/03
to
Ingvar Mattsson <ing...@cathouse.bofh.se> wrote:
+---------------

| Joe Marshall <j...@ccs.neu.edu> writes:
| > My god, what have I wrought?
|
| An endless cascade of puns, just because peopel cannot temper their
| humour.
|
| On a more metaphysical level, are people who like lisp more disposed
| towards (or less) blacksmithing than the general population?
+---------------

Dunno 'bout that, but it's *certain* that they have a bent towards puns...
[Of course, sometimes you have to warm them up first.]

Joe Marshall

unread,
Aug 15, 2003, 11:48:48 AM8/15/03
to
Ingvar Mattsson <ing...@cathouse.bofh.se> writes:

> On a more metaphysical level, are people who like lisp more disposed
> towards (or less) blacksmithing than the general population?

I can't speak for the general population, but I've found that
blacksmithing and lisp have many similarities.

In blacksmithing, the tools and the work are made of the same
material. This allows you to treat the tool as work when necessary.
Often when blacksmithing you don't have the tool you need for the job.
No problem: you make one. Of course this might require a meta-tool
that you don't have. If the tongs don't quite fit the work, you put
the tongs in the fire, cool off the work, and mold the tongs around
the work.

Of course there is the added attraction of having a legitimate excuse
to play with fire.

Joe Marshall

unread,
Aug 15, 2003, 12:00:19 PM8/15/03
to
"Gorbag" <gorbag...@nospam.mac.com> writes:


> Let me get a basket handle on this discussion and see if we can be drawing
> to a point. I mean there's a lot of hot rasping here, and it's going to
> start a fire soon. My 3-point perspective hinges on forging dynamics and
> not hammering technique.
>
> In other words, lets all use our grooving tool instead of our upsetting
> tongs.

Did you write that in all seriousness? You must have some poker-face.

Erann Gat

unread,
Aug 15, 2003, 1:49:31 PM8/15/03
to
In article <n0ea6h...@ccs.neu.edu>, Joe Marshall <j...@ccs.neu.edu> wrote:

> Ingvar Mattsson <ing...@cathouse.bofh.se> writes:
>
> > On a more metaphysical level, are people who like lisp more disposed
> > towards (or less) blacksmithing than the general population?
>
> I can't speak for the general population, but I've found that
> blacksmithing and lisp have many similarities.
>
> In blacksmithing, the tools and the work are made of the same
> material. This allows you to treat the tool as work when necessary.
> Often when blacksmithing you don't have the tool you need for the job.
> No problem: you make one. Of course this might require a meta-tool
> that you don't have. If the tongs don't quite fit the work, you put
> the tongs in the fire, cool off the work, and mold the tongs around
> the work.

I think you really hit the nail on the head. Seriously.

Last night I was randomly flipping channels on the TV and stumbled across
a show about a contemporary recreation of a eighteenth century
manufacturing process. They were building a Newsham, which is a
high-pressure water pump used for putting out fires. It was absolutely
fascinating, and I did feel a certain kinship with the people doing this
painstaking work (the whole process took many months), not only because
they had a vastly deeper understanding of manufacturing than most of their
contemporary colleagues, but also because they were working at Colonial
Williamsburg and making their living not by selling the product they were
making, but by putting themselves on display as a tourist attraction.

E.

Gorbag

unread,
Aug 15, 2003, 7:35:30 PM8/15/03
to

"Erann Gat" <g...@jpl.nasa.gov> wrote in message
news:gat-150803...@k-137-79-50-101.jpl.nasa.gov...

> In article <n0ea6h...@ccs.neu.edu>, Joe Marshall <j...@ccs.neu.edu>
wrote:
>
> > Ingvar Mattsson <ing...@cathouse.bofh.se> writes:
> >
> > > On a more metaphysical level, are people who like lisp more disposed
> > > towards (or less) blacksmithing than the general population?
> >
> > I can't speak for the general population, but I've found that
> > blacksmithing and lisp have many similarities.
>
> I think you really hit the nail on the head. Seriously.
>
> ...but also because they were working at Colonial

> Williamsburg and making their living not by selling the product they were
> making, but by putting themselves on display as a tourist attraction.

Now I know the future of lisp hacking: We can sit around in a replica 1970s
MIT AI Lab! We can all memorize the lyrics to Alice's LISPM and sing in the
playroom! (OK, I don't know anyone who did that, but the tourists won't know
it isn't authentic ;-).


Christopher C. Stacy

unread,
Aug 16, 2003, 1:07:10 AM8/16/03
to
>>>>> On Fri, 15 Aug 2003 19:35:30 -0400, Gorbag ("Gorbag") writes:

Gorbag> "Erann Gat" <g...@jpl.nasa.gov> wrote in message
Gorbag> news:gat-150803...@k-137-79-50-101.jpl.nasa.gov...


>> In article <n0ea6h...@ccs.neu.edu>, Joe Marshall <j...@ccs.neu.edu>

Gorbag> wrote:
>>
>> > Ingvar Mattsson <ing...@cathouse.bofh.se> writes:
>> >
>> > > On a more metaphysical level, are people who like lisp more disposed
>> > > towards (or less) blacksmithing than the general population?
>> >
>> > I can't speak for the general population, but I've found that
>> > blacksmithing and lisp have many similarities.
>>
>> I think you really hit the nail on the head. Seriously.
>>
>> ...but also because they were working at Colonial
>> Williamsburg and making their living not by selling the product they were
>> making, but by putting themselves on display as a tourist attraction.

Gorbag> Now I know the future of lisp hacking: We can sit around in a replica 1970s
Gorbag> MIT AI Lab! We can all memorize the lyrics to Alice's LISPM and sing in the
Gorbag> playroom! (OK, I don't know anyone who did that, but the tourists won't know
Gorbag> it isn't authentic ;-).


This tourist will know.
:)

Rober...@yahoogroups.com

unread,
Aug 16, 2003, 3:37:36 PM8/16/03
to
{{Date: Tue, 12 Aug 2003 10:57:13 -0400
From: Thien-Thi Nguyen <t...@glug.org>
look what happens when a program does not validate inputs. how would
you improve that program's chance for success?}}

Any program that doesn't reject bad input, and just proceeds to process
the garbage in, is not written well. When I write software, I generally
check input extra carefully. If possible, I provide user-friendly ways
to see what's wrong and direct the user to getting it fixed. For
example, in Visual Basic, I colored the background of bad input fields
pink, and set up a mouse-over hint explaining what was wrong with each
particular input. When the user started to change any particular field,
background would change to yellow. When the field was validated as
correct, background would change to the usual white. So the user
wouldn't have to memorize which fields were already fixed, yet could
fix them in any desired sequence.

Rober...@yahoogroups.com

unread,
Aug 16, 2003, 5:05:28 PM8/16/03
to
{{Date: Wed, 13 Aug 2003 07:43:50 -0500
From: rp...@rpw3.org (Rob Warnock)

then I found one, and then a second, small consulting task that could
easily be done in a Lisp-based persistent application server ...

between a web server and a database}}

Do I understand correctly? The actual Web server-application clones a
new copy (with most pages shared) for each HTTP connection, but there's
another program that just sits there interfacing the cloned
server-applications with the database? If so, what advantages do you
have this way, compared to each cloned server-application working the
database directly? Does the persistent interface application do a
better job of queuing cases when several cloned server applications try
to get into the database at about the same time? Or is opening and
closing access to the database really expensive so you want to do it
just once in a while instead of for each HTTP transaction?

{{any little weird, off-the-wall, non-standard thingy somebody needs


done quickly... and that *can't* be done with off-the-shelf software
[at least, not easily].}}

How do people like you and I, having skills to hack together new tools
and applications, and potential customers, who are bothered by tricky
problems they can't easily do themselves, get matched up together to
find each other, so they can get the task done and we can get paid for
doing it? I posted my ad to ba.jobs.resumes a couple times in 2002:
http://www.google.com/groups?selm=7097a2a5.0205261752.67d3eec0%40posting.google.com
http://www.google.com/groups?selm=REM-2002nov17-001%40YahooGroups.Com
but nobody ever responded, so I gave up that method of advertising my
services.

{{Yes, I'm quite familiar with and take encouragement from these:
<URL:http://www.paulgraham.com/road.html>}}

Yes, I came to the same conclusion three years ago, that Server-based
software was the way to go, as opposed to shrink-wrapped or downloaded
software that needs to be installed on each user's machine. My main
reason for this decision was that just about everyone nowadays has
access to a Web browser, and if only regular HTML is sent from server
to client then all the various browsers (even lynx) are pretty much
compatible, so a single installation of an application can serve just
about everyone on the net, with instant free-trial access just by
clicking on a link from e-mail etc., no need to go to trouble to set up
a demo of my software on some special machine. Also all the software I
write is on my private disk space, not copied to many machines, so I
don't have to worry about somebody making copies of my software and
distributing it to undercut my income for my work. (Big companies can
afford to hire lawyers to sue pirates, but little people like me have
no practical recourse against pirates except to keep all our software
located on our own machines/accounts.) Also, I can write most of my
software in LISP, and none of the users ever need care about that.

{{But I'm not trying to start a full-fledged "dot.com" per se, just do


a bit of "cook-to-order" programming, but in a *server* model using
Lisp and other tools I'm most familiar with, rather than fighting

with Java or MFC ...}}

Yeah, that's my market too. I wish I could find customers.

Thien-Thi Nguyen

unread,
Aug 18, 2003, 4:16:12 AM8/18/03
to
Rober...@YahooGroups.Com writes:

> Any program that doesn't reject bad input, and just proceeds to
> process the garbage in, is not written well. When I write
> software, I generally check input extra carefully. If possible,
> I provide user-friendly ways to see what's wrong and direct the
> user to getting it fixed.

how do you discern the case where the program rejects good input,
while it is running? what do you do about that case?

thi

Rob Warnock

unread,
Aug 18, 2003, 12:08:47 PM8/18/03
to
<Rober...@YahooGroups.Com> wrote:
+---------------

| {{Date: Wed, 13 Aug 2003 07:43:50 -0500
| From: rp...@rpw3.org (Rob Warnock)
| then I found one, and then a second, small consulting task that could
| easily be done in a Lisp-based persistent application server ...
| between a web server and a database}}
|
| Do I understand correctly? The actual Web server-application clones a
| new copy (with most pages shared) for each HTTP connection...
+---------------

Actually, Apache [at least, and probably other current production web
servers] *doesn't* work quite that way. First, it pre-forks a bunch
of server instances, depending on recent average load [this number may
be adjusted up or down over time, as needed]. Second, it re-uses those
processes over & over for successive HTTP requests. [E.g., on my own
machine the set of "httpd" process IDs hasn't changed since *May*!]

+---------------
| ...but there's another program that just sits there interfacing the


| cloned server-applications with the database?

+---------------

Sort of. There's another (Lisp) program that just sits there and *is*
"the application", and contains all the "business logic" for handling
each HTTP request, the SQL access code (client side), and the result
HTML generation code. As far as the web server (Apache, say) is
concerned, it's just another "CGI script", except it's magically
persistent. [Some people call this "middleware".]

+---------------


| If so, what advantages do you have this way, compared to each
| cloned server-application working the database directly?

+---------------

*Not* cloning a whole copy of the application per request, mainly!!
That is, *much* less overhead per request, if you're comparing it
to classic fork/exec per HTTP request "CGI".

But if you're comparing it to things that put the application language
*into* the web server, such as mod_perl or mod_php or mod_python, well,
the advantage is that you don't have to shoehorn all of Common Lisp
into Apache (or AOLserver or IIS or whatever), and that you don't have
as many copies of the Lisp image as you have web server processes.

If the application/middleware server is in Common Lisp and is persistent
(long-lived), you can talk to it through a REPL, see what it's doing,
load patches, fix bugs, all without taking it down. [And you don't have
to fork/exec an entire Lisp image for each request!]

See <URL:http://www.cliki.net/Web> for a lot more on this general
approach, especicially these items:

Araneida A small Lisp-based server designed to sit behind
a caching proxy such as Apache. Used to implement
CLiki itself.

mod_lisp An small Apache module that connects to a
persistent Lisp server via sockets. (Or any
*other* language, actually. People have used it
with Python.)

cl-modlisp A useful library for the Lisp server side of mod_lisp.

[And HTOUT & CL-Who & many others, for the HTML generation from Lisp.
But that's another topic altogether...]

Now for various off-topic reasons, I'm not actually using mod_lisp
per se at the moment, but I'm doing something very similar: There's
a *tiny* C trampoline that runs as a classic CGI program and connects
to the Lisp application server over a Unix-domain socket, and otherwise
does essentially the same thing that mod_lisp would have done.

[Yes, it still fork/execs the trampoline once per request. But on
my 1.4GHz Athlon, "apachebench" says that a CGI + Lisp-server-computed
page only takes ~12ms (assuming no SQL accesses), which is more than
fast enough for the current applications, especially since that time
is swamped by the database overheads. Plus, I can always move to
mod_lisp later, if necessry.]

+---------------


| Does the persistent interface application do a better job of queuing
| cases when several cloned server applications try to get into the
| database at about the same time?

+---------------

I actually have no idea, since I *DON'T* have "several cloned server
applications...at about the same time" -- one application server.
At worst there are multiple HTTP requests at about the same time,
each of which results in a CMUCL MAKE-PROCESS (green thread creation).
[Though see CL-Modlisp, above, which can run either that way or with
a pre-created CMUCL thread pool.]

+---------------


| Or is opening and closing access to the database really expensive
| so you want to do it just once in a while instead of for each HTTP
| transaction?

+---------------

It *would* be, if the transaction rates were a lot higher. In that case
SQL connection pooling would become quite important. But for the current
(and anticipated for quite some time) loads, opening an SQL connection
per HTTP request is acceptable. [Heretical, perhaps, but "good enough".]
However, I was careful to write the server with hooks for SQL connection
pooling, so if it's needed later...

+---------------


| {{any little weird, off-the-wall, non-standard thingy somebody needs
| done quickly... and that *can't* be done with off-the-shelf software
| [at least, not easily].}}
|
| How do people like you and I, having skills to hack together new tools
| and applications, and potential customers, who are bothered by tricky
| problems they can't easily do themselves, get matched up together to
| find each other, so they can get the task done and we can get paid for
| doing it?

+---------------

Dunno. I'm still working on that one. Both of my current clients
were people I already knew. [And see next answer below.]

+---------------
| I posted my ad to ba.jobs.resumes a couple times in 2002...
+---------------

You need to buy/read a 2003 edition of "What Color Is My Parachute".
Seriously. No kidding. The best $25(?) you could spend right now.
There are some very interesting statistics in there on what works
for finding a job and what doesn't. Posting a resume on the Internet
is all the way at the *BOTTOM* of the list. [Less than 4% of people
who do that find a job that way.] Much, much better is "working your
network" -- personal contacts with former employers & co-workers,
friends, family, old school chums, people you hike/bike/camp/play
with, people you work with on charities, political parties, etc.

+---------------


| {{Yes, I'm quite familiar with and take encouragement from these:
| <URL:http://www.paulgraham.com/road.html>}}
|
| Yes, I came to the same conclusion three years ago, that Server-based

| software was the way to go... Also, I can write most of my


| software in LISP, and none of the users ever need care about that.

...
| Yeah, that's my market too. I wish I could find customers.

+---------------

1. See above comments re "jobs". Same thing. It's all word-of-mouth.

2. Go to ILC. Get known in person. [Netnews personas are often different.]

3. Come to Bay Area Lispniks meetings. Peter Seibel <pe...@javamonkey.com>
is putting together the next one as we speak, probably at the end of
August/beginning of September.

4. Just *do* it. That is, go ahead and start coding whatever infrastructure
you're going to want to use; put together a web site that uses it;
talk it up with people you meet [see #1]; and even consider doing
(small amounts of) real work using it for free [but ask for "resume
credits"], just to show people you can.

Daniel Barlow

unread,
Aug 18, 2003, 1:35:57 PM8/18/03
to
rp...@rpw3.org (Rob Warnock) writes:

> 4. Just *do* it. That is, go ahead and start coding whatever infrastructure
> you're going to want to use; put together a web site that uses it;
> talk it up with people you meet [see #1]; and even consider doing
> (small amounts of) real work using it for free [but ask for "resume
> credits"], just to show people you can.

A point that someone raised (I think on IRC, apologies to whoever it
was, because I can't remember) the other day was that it might sooner
or later be good to standardize[*] an API for Lisp web applications:
something that fulfills a similar role to the java servlet API. Right
now you can choose from AllegroServe or Araneida or CL-HTTP or
whatever, and you have to make your choice both on performance/
platform considerations ("does it handle 100 requests/second? can I
run it in CLISP?") _and_ on the API exported by that server or server
shim. I very much like the Araneida API, but the actual code
underneath it is a bit grotty in places, and as it's SBCL-only it
restricts my apps (such as CLiki, which other people sometimes express
an interest in running on other implementations) likewise.

Apps written to this hypothetical standard interface, however, could
be deployed on any platform that implements it: if my webmail archive
is too slow using a CLISP/CGI implementation of cl-webapi I could move
it to the Allegro/AllegroServe-based implementation; if I can't afford
the Allegro licenses to deploy it I could move it back to CMUCL and
some server optimized to run on that platform. Or whatever.

I'd suggest the following starting point for a design

- implement something that reflects the HTTP request/response model
fairly closely, rather than requiring users to tie themselves into
some application server model providing sessions or state. That
can be layered on top.

- HTML generation is likewise out of scope. Generate your HTML any
way you choose

- URI/URL parsing is probably _in_ scope, however: URI are used all
over the place in HTTP; it'd be madness to treat them as text, and
pretty silly for each implemetnation to define a private URI object
but not let the client applciations use it.


Anyone? If there's interest from other server shim implementors and
users, we could move the discussion to the lispweb list to catch the
people who don't read c.l.l


[*] In the general sense of "agree amongst ourselves", not necessarily
as a topic for X3J13

Gorbag

unread,
Aug 18, 2003, 6:32:37 PM8/18/03
to

"Christopher C. Stacy" <cst...@dtpq.com> wrote in message
news:u4r0i6...@dtpq.com...

If you know, you're one of the props!


Rob Warnock

unread,
Aug 19, 2003, 10:09:48 AM8/19/03
to
Daniel Barlow <d...@telent.net> wrote:
+---------------

| rp...@rpw3.org (Rob Warnock) writes:
| >4. Just *do* it. That is, go ahead and start coding whatever infrastructure
| > you're going to want to use; put together a web site that uses it...

|
| A point that someone raised (I think on IRC, apologies to whoever it
| was, because I can't remember) the other day was that it might sooner
| or later be good to standardize[*] an API for Lisp web applications:
+---------------

I agree, I think. Thinking back to about a year ago, when I started the
first of these projects, the reasons that I "did my own thing" were:
(1) I had just started trying to do serious coding in CL (after ~10 years
of Scheme) and web stuff was a good thing [I think] to cut my teeth on;
(2) at the time, OpenAllegroServe & Araneida were a bit daunting to me
in their complexity [maybe "opaque" would be a better term!]; (3) there
was no server-side demo code with "mod_lisp" other than the most trivial
stub; and (4) "cl-modlisp" hadn't been released yet [only recently].

I had already written a number of CGI-style apps in MzScheme years ago,
so I started by trying to duplicate the same thing in CL [successfully,
almost trivially so], and eventually proceeded in stages as the application
grew larger [and the interpretive "converting" time of CMUCL grew larger]
to end up writing a "mod_lisp"-like persistent server similar to [but
simpler than?] Araneida -- which I did browse from time to time, by the
way, mainly to see if I was missing anything major.

+---------------
| ...something that fulfills a similar role to the java servlet API.


| Right now you can choose from AllegroServe or Araneida or CL-HTTP or

| whatever...
+---------------

...or "cl-modlisp", or your own home-grown backend to "mod_lisp".
[Or my as-yet-unpublished "sock.cgi" style, a hybrid intermediate
with elements of both classic CGI and "mod_lisp"/"cl-modlisp" style.]

+---------------
| ...and you have to make your choice both on performance/platform


| considerations ("does it handle 100 requests/second? can I run it
| in CLISP?") _and_ on the API exported by that server or server shim.

+---------------

Yes, these are all issues. And given different usage scenarios, very
different answers are often reasonable. E.g., for the kind of load
that they get [essentially zero, unless I've just slashdotted myself
by mentioning them!], either of these two is perfectly reasonable, even
though they both fork/exec a complete new Lisp image per web hit:

<URL:http://rpw3.org/hacks/lisp/cmucl-demo.cgi>
<URL:http://rpw3.org/hacks/lisp/clisp-demo.cgi>

[Somewhat surprisingly, according to "ab" the CMUCL one, even though
not compiled, one runs ever-so-slightly *faster* than CLISP: 150 ms
vs. 160ms. Go figure. Probably FreeBSD's excellent VM and file cache,
not to mention having 0.5GB RAM on the server...]

And then if the load gets too large, why, then one can use a persistent
server ("mod_lisp" would probably be even faster, but "ab" says my
"sock.cgi" hybrid takes only 13ms, even though there's a fork/exec
of the small C-coded trampoline per request):

<URL:http://rpw3.org/hacks/lisp/appsrv-demo.lhp>

The latter causes the usual "good things" to happen: loading the
source if it hasn't been loaded; reloading it if it's been changed;
recompiling it if there was already a FASL there (but not if there
wasn't, so you can choose desired space/speed); and otherwise just
using the page function already registered in memory.

+---------------
| I very much like the Araneida API...
+---------------

Initially it seemed rather complex to me, all those different "stages",
amd the complexity of the URI parsing seemed a bit over-the-top, but
I dunno, maybe there are cases where it's needed. Plus, (at least, in 0.51)
it only handled :EXACT and :PREFIX matches, and I needed :SUFFIX, too
(for ".lhp" files like the above).

Instead, I started with a slightly different interface (with only one
"stage"):

(defun register-uri-handler
(&key (kind :exact) ; (member :exact :prefix :suffix :default)
(path (or (and *http-request* (http-request-self *http-request*))
(required-argument))) ; If not within CGI or LHP.
(function (required-argument)) ; Always required.
(source-path *load-truename*)) ; Would be XPATH, but for CGI.
...)

The registered function is called with a parsed HTTP request object
(with the POST data, if any, already sucked up, and the GET/POST query
parsed into an alist of bindings, along with the full "CGI" bindings),
and then it does whatever it want to do thoughout the various "stages",
calling back into the infrastructure for help when needed [such as
issuing any of a few flavors of standard HTML error pages].

But my API seems to be growing (e.g., I now find that I need the ability
to handle multiple virtual hosts), so maybe some convergence with a
community "standard" would be reasonable.

+---------------
| but the actual code underneath it is a bit grotty in places...
+---------------

Yes... well... The only reason I haven't yet released my code
(will have a BSD-style license) is that I still feel enough like
a CL newbie that I was worried that people would throw up at it. ;-}
(But maybe not, I dunno.)

+---------------
| ...and as it's SBCL-only...
+---------------

Can't it be made to run on CMUCL pretty easily?

+---------------
| ...it restricts my apps (such as CLiki, which other people sometimes


| express an interest in running on other implementations) likewise.

+---------------

For myself, I initially started my CGI work trying carefully to keep the
code running on *both* CLISP and CMUCL. But as I moved to a persistent
server model I'm afraid I grew dependent on having CMUCL's threads --
*so* convenient for things like socket-based REPL listeners -- that I
let the CLISP compatibility fall away (except for simple fork/exec per
request CGI, where it still all works, as shown above). Through it should
work well enough on anything with CLIM-like threads (SBCL, etc.).

+---------------


| Apps written to this hypothetical standard interface, however, could
| be deployed on any platform that implements it: if my webmail archive
| is too slow using a CLISP/CGI implementation of cl-webapi I could move
| it to the Allegro/AllegroServe-based implementation; if I can't afford
| the Allegro licenses to deploy it I could move it back to CMUCL and
| some server optimized to run on that platform. Or whatever.

+---------------

Again, I tried to stick to that initially, but found myself using
too many CMUCL-specific features (e.g., the extended args to LOAD
that let you automatically recompile if the source is out-of-date).
Yes, many could be backed out or moved into compatibility libraries,
but not all, I think. [E.g., threads.]

Nevertheless, I succeeded to this extent: I was able to make the
classic CGI and persistent server models close enough that the exact
same ".lhp" file can run (as long as it doesn't play any games with
the memory state on the persistent server) in any of three modes:
fork/exec-a-whole-Lisp-image/per-request CGI mode; my hybrid CGI-
trampoline-connects-to-Lisp-server mode; or pure "mod_lisp" (Apache
connects directly to the Lisp server). That is, given an executable
Unix file "foo.lhp" which contains this [and a magic "run-lhp" CMUCL
script]:

#!/usr/bin/env /u/rpw3/bin/run-lhp
(in-package :lhp-user)

(lhp-basic-page ()
(:html ()
(:head ()
(:title () "Simple Test Page")) (lfd)
(:body ()
(:h1 () "Simple Test Page") (lfd)
"This is a simple test page with not much on it." (lfd)))
(lfd))

If the Apache config or an applicable ".htaccess" file contains:

AddHandler cgi-script .lhp

then the file will run as a classic CGI. Whereas if ".htaccess" file
contains this (and an "AddHandler cgi-script .cgi" was already done
at the $DOCUMENT_ROOT level):

Action lisp-handled-pages /sock.cgi
AddHandler lisp-handled-pages .lhp

then the "sock.cgi" program (tiny C-coded trampoline) will connect to
the Lisp server and pass it ("mod_lisp" style) the information about the
request. Finally, if you have real "mod_lisp" installed, just do this:

AddHandler lisp-handler .lhp

The file "foo.lhp" remains the same in all three cases.

Given this existence proof, I think it's reasonable for your hypothetical
standard interface to attempt at least the same amount of mode independence.
In particular, it should be at least *possible* for a CGI shim library to
fake up classic CGI into looking like it's running under the Lisp server API
(which is what I did), albeit only to the extent that the page doesn't make
use of the memory persistence of the Lisp server.

+---------------


| I'd suggest the following starting point for a design
|
| - implement something that reflects the HTTP request/response model
| fairly closely, rather than requiring users to tie themselves into
| some application server model providing sessions or state. That
| can be layered on top.

+---------------

I agree. In fact, I've been meaning to suggest to Marc Battyani that
maybe "mod_lisp" shouldn't be doing so much special-casing of which
variables it passes through and which ones it doesn't (and just forget
about all the downcasing!) -- just pass 'em *all* unchanged and let
the Lisp side sort it out. [That's what my "sock.cgi" trampoline does.]

+---------------


| - HTML generation is likewise out of scope. Generate your HTML any
| way you choose

+---------------

Agreed, though in a related vein I think there might need to be some
support or at least recognition for the various patterns of HTML generation.
That is, the whole issue (mentioned in passing above) of what might be
called "dynamic defsystem" issues (that is, when do Lisp sources get
loaded/reloaded/recompiled). There are many styles I looked at using
[basically, everything listed at <URL:http://www.cliki.net/Web> plus
several more, such as BRL & LAML] before I went off and did my own
LHP ("Lisp-Handled Pages"). The ones I looked at varied widely in
several dimensions:

- Whether the HTML is pre-generated off-line (TML, LML) or at HTTP-request
time (ASP, ALP, LHP); and for the latter, whether the HTML cached or not,
and if so, where (e.g., if you're using a front end such as Apache in
proxy mode [as with Araneida], you can cause caching to happen there
"for free" -- but then there are issues with updates);

- Where the source comes from: initial server load (Araneida, HTTP.LSP) or
demand-loaded pages from the filesystem (ALP, LHP); and for the latter,
what and how much is compiled and/or cached, and how changes in the
filesystem are handled (what I called "dynamic defsystem" issues above);

- If pages are in the filesystem, their source syntax:
- Plain HTML with ASP-like <%...%> escapes (ALP, LSP);
- Plain HTML with some different escapes (e.g., BRL uses [...]);
- Some other "HTML-like" markup (TML, which is really HTOUT s-exprs
with angle brackets, e.g., "here comes a <font :size 6|BIG> word");
- Pure Lisp code or at least s-exprs (LML/LML2, LHP).

And I'm sure there are others. But the point is that the API at least
needs to recognize the existence of these issue -- especially the "dynamic
defsystem" issue -- and provide *some* minimal hooks to support whichever
policy the developer wants to use. For example, my URI-HANDLER object
provides:

(defstruct uri-handler
kind ; (member :exact :prefix :suffix :default)
path ; One of: absolute exact path, absolute prefix,
; relative suffix, or NIL [must match PATH-KIND].
function ; #'(lambda (request &rest TBD) ...)
function-time ; Time when FUNCTION was set. XXX Currently unused.
source-path ; (or pathname-designator null)
source-time ; (and source-path (file-write-date source-path))
fasl-path ;XXX Currently unused.
fasl-time ;XXX Currently unused.
)

but even that might not be enough, if the Lisp source is actually derived
from some *other* format (as with ALP or TML). In that case, you might also
need a PAGE-SOURCE-PATH/-TIME pair.

Just something to think about...

+---------------


| - URI/URL parsing is probably _in_ scope, however: URI are used all

| over the place in HTTP; it'd be madness to treat them as text...
+---------------

Well, I'd agree, except... If you're using one of the "active pages
stored in the filesystem" styles, fairly often you need to go back and
forth from URI to pathnames (and often, *namestrings*). After looking
at the complexity of URI parsing in Araneida, I just punted it completely,
since Apache already did most of the parsing I needed (except for turning
GET/POST query strings into binding alists, which I had already solved
for CGI scripting). If you're using "handled" files, you already get
$REDIRECT_URL with all the nasty "/./" and "/../" removed; $PATH_INFO,
which has the query string stripped; $PATH_TRANSLATED, which has the
URI translated to a filesystem path (albeit possibly imaginary!) with
"/./" & "/../" stripped; and $QUERY_STRING. [And several other useful
ones.] So as it happened, except for the QUERY-STRING-ALIST function,
I didn't actually need to do any URI parsing at all!

[I had even gone to the trouble of breaking the $REDIRECT_URL up into
path elements, Scheme Underground Server style, e.g., "/foo/bar/baz" ==>
("foo" "bar" "baz"), but then ended up never using it!]

Maybe a more complex application or site structure would make more complex
URI parsing useful, I dunno. But I suggest that if there *is* a URI parser
in the infrastructure, that the default parsing be *very* simple, and make
it very easy to get the string version back when needed (e.g., for filesystem
path operations).

+---------------
| ...and pretty silly for each implemetnation to define a private URI


| object but not let the client applciations use it.

+---------------

That I can certainly agree with.

+---------------


| Anyone? If there's interest from other server shim implementors and
| users, we could move the discussion to the lispweb list to catch the
| people who don't read c.l.l

+---------------

"Lispweb"? Whazzat?

Daniel Barlow

unread,
Aug 19, 2003, 12:00:51 PM8/19/03
to
rp...@rpw3.org (Rob Warnock) writes:

> I agree, I think. Thinking back to about a year ago, when I started the
> first of these projects, the reasons that I "did my own thing" were:

... not dissimilar from the reasons that I first wrote
ancestor-of-Araneida back when I started to learn CL ;-) There are a
few more alternatives around now than there were in 1999 or whenever,
but CL-HTTP then as now was a platform all of itself.

> Initially it seemed rather complex to me, all those different "stages",
> amd the complexity of the URI parsing seemed a bit over-the-top, but
> I dunno, maybe there are cases where it's needed. Plus, (at least, in 0.51)
> it only handled :EXACT and :PREFIX matches, and I needed :SUFFIX, too
> (for ".lhp" files like the above).

These are probably things I sshould work on, although I suspect the
documentation is not helping much. All you need for "hello world" in
Araneida (ignoring the export-server stuff, which I freely admit is
messy) is

(defclass hello-handler (handler) ())
(defmethod handle-request-response ((h hello-handler) (method (eql :get))
request)
(request-send-headers request)
(format (request-stream request) "<title>hello</title><p>Hello world~%")
t)

(install-handler *root-handler* (make-instance 'hello-handler)
"http://localhost/hello.html")

All the other stages have (what I currently believe to be) sane
default methods, so don't get in the way until you actually need them

Suffix matching. Hmm. I can see how that'd be useful, although I'm
not sure what the priority for "best matching handler" would be. Does
/cliki/foo.lhp run the cliki handler that it prefix matched, or the
lhp handler according to the suffix? Apache, I know, has both, and I
find that the usual result is to do something appropriate 95% of the
time and horribly confuse people in the remaining 5%

> The registered function is called with a parsed HTTP request object
> (with the POST data, if any, already sucked up, and the GET/POST query
> parsed into an alist of bindings, along with the full "CGI" bindings),
> and then it does whatever it want to do thoughout the various "stages",
> calling back into the infrastructure for help when needed [such as
> issuing any of a few flavors of standard HTML error pages].

Helper functions for errors etc are another area that need addressing.
Using cliki as an example again, it'd be nice to customize the 404
page by subclassing something, so that requests for nonexistent cliki
pages display differently from requests for other random nonexistent
resources on the same server

> | ...and as it's SBCL-only...

> Can't it be made to run on CMUCL pretty easily?

It wouldn't be rocket science. I just say "SBCL" because I don't
actually test with CMUCL before releasing new versions, so at any
given time there are probably sbcl package prefixes and things in
there that need fixing.

> Given this existence proof, I think it's reasonable for your hypothetical
> standard interface to attempt at least the same amount of mode independence.
> In particular, it should be at least *possible* for a CGI shim library to
> fake up classic CGI into looking like it's running under the Lisp server API
> (which is what I did), albeit only to the extent that the page doesn't make
> use of the memory persistence of the Lisp server.

Yes, agreed absolutely.

[Closeness to HTTP]


> I agree. In fact, I've been meaning to suggest to Marc Battyani that
> maybe "mod_lisp" shouldn't be doing so much special-casing of which
> variables it passes through and which ones it doesn't (and just forget
> about all the downcasing!) -- just pass 'em *all* unchanged and let
> the Lisp side sort it out. [That's what my "sock.cgi" trampoline does.]

Although if you think that's bad, you should look at the protocol for
the mod_jk connector thing that the Apache Tomcat sevlet container
uses.

> | - HTML generation is likewise out of scope. Generate your HTML any

[...]


> That is, the whole issue (mentioned in passing above) of what might be
> called "dynamic defsystem" issues (that is, when do Lisp sources get
> loaded/reloaded/recompiled).

Yes. I haven't thought at all about dynamic loading at request time,
but I agree it needs consideration. What I'm trying to punt on here
is how you get from sexp to stream (htout, lml, cl-who, etc)

It seems that given support for a 'suffix' handler, it would be
possible for the client application programmer to write something that
would pick up pages at some filesystem location based on the URL, do
whatever processing is appropriate (compile, load, read,
read-sequence, whatever) and shove it out to the client . With the
addition of some protocol to register the response as eligible for
caching in the server (and ideally to invalidate the cache, which I
agree is a problem in Araneida) I think this covers all three content
creation patterns that you mention - mostly by punting on the details.
I take refuge in the Unix "mechanism not policy" mantra here.

> | - URI/URL parsing is probably _in_ scope, however: URI are used all
> | over the place in HTTP; it'd be madness to treat them as text...
> +---------------
>
> Well, I'd agree, except... If you're using one of the "active pages
> stored in the filesystem" styles, fairly often you need to go back and
> forth from URI to pathnames (and often, *namestrings*). After looking

Yes. Jeff Dalton made a similar point on the lispweb list. My point
was that given the URL whose printed representation is

http://www.example.com/cgi-bin/foo.pl?bar=1&baz=2

it's a lot nicer to be able to ask for (url-scheme u) or
(url-query-info u) than chopping it up using position and subseq, and
my guess is that any web server will do enough of this url processing
that it will end up growing a set of functions for this purpose. *I
may be wrong

If strings are accepted as url designators everywhere that URLs are
(which is not uniformly the case in araneida), I don't think that url
parsing should impact the user too much. I'm open to being convinced
on that, I guess. Outside of CLiki, my URLs almost never correspond
in any way at all to things in the filesystem, so people with
other usage patterns will see it differently.

> Maybe a more complex application or site structure would make more complex
> URI parsing useful, I dunno. But I suggest that if there *is* a URI parser
> in the infrastructure, that the default parsing be *very* simple, and make
> it very easy to get the string version back when needed (e.g., for filesystem
> path operations).

Yes

> "Lispweb"? Whazzat?

The lis...@red-bean.com mailing list. I've posted an article there
which you can find on gmane at

http://article.gmane.org/gmane.lisp.web/148

For subscription information, look at

http://www.red-bean.com/mailman/listinfo/lispweb

Joe Marshall

unread,
Aug 19, 2003, 12:33:01 PM8/19/03
to
rp...@rpw3.org (Rob Warnock) writes:

> Yes... well... The only reason I haven't yet released my code
> (will have a BSD-style license) is that I still feel enough like
> a CL newbie that I was worried that people would throw up at it. ;-}
> (But maybe not, I dunno.)

We have pretty strong stomachs.

Joe Marshall

unread,
Aug 19, 2003, 1:40:25 PM8/19/03
to
Daniel Barlow <d...@telent.net> writes:

> Yes. Jeff Dalton made a similar point on the lispweb list. My point
> was that given the URL whose printed representation is
>
> http://www.example.com/cgi-bin/foo.pl?bar=1&baz=2
>
> it's a lot nicer to be able to ask for (url-scheme u) or
> (url-query-info u) than chopping it up using position and subseq, and
> my guess is that any web server will do enough of this url processing
> that it will end up growing a set of functions for this purpose. *I
> may be wrong
>
> If strings are accepted as url designators everywhere that URLs are
> (which is not uniformly the case in araneida), I don't think that url
> parsing should impact the user too much. I'm open to being convinced
> on that, I guess. Outside of CLiki, my URLs almost never correspond
> in any way at all to things in the filesystem, so people with
> other usage patterns will see it differently.

It's important to realize that URLs (URIs in general) are structured
objects. They do have a readable/printable representation, but while
URIs can map to strings, URI *components* do *not* map to substrings.
(URI components are not context-free.)

In the simple case there's not much of a problem, but wait 'til
someone puts a "%2f" in the URI.

Thomas F. Burdick

unread,
Aug 19, 2003, 2:33:26 PM8/19/03
to
Daniel Barlow <d...@telent.net> writes:

> rp...@rpw3.org (Rob Warnock) writes:
>
> > I agree, I think. Thinking back to about a year ago, when I started the
> > first of these projects, the reasons that I "did my own thing" were:
>
> ... not dissimilar from the reasons that I first wrote
> ancestor-of-Araneida back when I started to learn CL ;-) There are a
> few more alternatives around now than there were in 1999 or whenever,
> but CL-HTTP then as now was a platform all of itself.

I wonder just how many things like this there are. I've written a
few, ranging from Really Really simple CGI libraries, to CGI shims, to
mini web servers. FWIW, I really like the Araneida API.

> Suffix matching. Hmm. I can see how that'd be useful, although I'm
> not sure what the priority for "best matching handler" would be. Does
> /cliki/foo.lhp run the cliki handler that it prefix matched, or the
> lhp handler according to the suffix? Apache, I know, has both, and I
> find that the usual result is to do something appropriate 95% of the
> time and horribly confuse people in the remaining 5%

Intuitively, it seems like a nice, unambiguous policy would be to
match prefix, then exact, then suffix; basically go left-to-right.
Maybe I'm missing something though.

--
/|_ .-----------------------.
,' .\ / | No to Imperialist war |
,--' _,' | Wage class war! |
/ / `-----------------------'
( -. |
| ) |
(`-. '--.)
`. )----'

Juho Snellman

unread,
Aug 19, 2003, 3:37:15 PM8/19/03
to
<t...@famine.OCF.Berkeley.EDU> wrote:

>Daniel Barlow <d...@telent.net> writes:
>> Suffix matching. Hmm. I can see how that'd be useful, although I'm
>> not sure what the priority for "best matching handler" would be. Does
>> /cliki/foo.lhp run the cliki handler that it prefix matched, or the
>> lhp handler according to the suffix? Apache, I know, has both, and I
>> find that the usual result is to do something appropriate 95% of the
>> time and horribly confuse people in the remaining 5%
>
>Intuitively, it seems like a nice, unambiguous policy would be to
>match prefix, then exact, then suffix; basically go left-to-right.
>Maybe I'm missing something though.

Why should prefix matches have priority over exact matches? Surely the
most specific handler should be picked.

In any case, instead of just prefix/suffix matching, I'd rather see
wildcard matches. A pattern should probably not be allowed to contain
more than one wildcard, to make the matching predictable to the user.
The intuitive (to me) ordering of wildcard matches would be selecting
the one with the longest static prefix first. I.e:

/cliki/foo*.lhp is more specific than:
/cliki/*.lhp is more specific than:
/cliki/* is more specific than:
/*.lhp

--
Juho Snellman

Thomas F. Burdick

unread,
Aug 20, 2003, 12:09:00 AM8/20/03
to
jsn...@iki.fi (Juho Snellman) writes:

> <t...@famine.OCF.Berkeley.EDU> wrote:
> >Daniel Barlow <d...@telent.net> writes:
> >> Suffix matching. Hmm. I can see how that'd be useful, although I'm
> >> not sure what the priority for "best matching handler" would be. Does
> >> /cliki/foo.lhp run the cliki handler that it prefix matched, or the
> >> lhp handler according to the suffix? Apache, I know, has both, and I
> >> find that the usual result is to do something appropriate 95% of the
> >> time and horribly confuse people in the remaining 5%
> >
> >Intuitively, it seems like a nice, unambiguous policy would be to
> >match prefix, then exact, then suffix; basically go left-to-right.
> >Maybe I'm missing something though.
>
> Why should prefix matches have priority over exact matches? Surely the
> most specific handler should be picked.

Because it's left-to-right, in order to avoid the question of which is
more specific, a prefix match or a suffix match.

> In any case, instead of just prefix/suffix matching, I'd rather see
> wildcard matches. A pattern should probably not be allowed to contain
> more than one wildcard, to make the matching predictable to the user.
> The intuitive (to me) ordering of wildcard matches would be selecting
> the one with the longest static prefix first. I.e:
>
> /cliki/foo*.lhp is more specific than:
> /cliki/*.lhp is more specific than:
> /cliki/* is more specific than:
> /*.lhp

I guess you could just say that ties are broken by choosing prefix
over suffix (or vice versa), but it seems like it might lead to
confusing situations.

Juho Snellman

unread,
Aug 20, 2003, 1:15:45 AM8/20/03
to
<t...@famine.OCF.Berkeley.EDU> wrote:
>jsn...@iki.fi (Juho Snellman) writes:
>> <t...@famine.OCF.Berkeley.EDU> wrote:
>> >Intuitively, it seems like a nice, unambiguous policy would be to
>> >match prefix, then exact, then suffix; basically go left-to-right.
>> >Maybe I'm missing something though.
>>
>> Why should prefix matches have priority over exact matches? Surely the
>> most specific handler should be picked.
>
>Because it's left-to-right, in order to avoid the question of which is
>more specific, a prefix match or a suffix match.

It seems to me that above you're describing that a prefix match is
more specific than exact/suffix match. How is this avoiding the
question of which one is more specific?

More importantly, that still doesn't explain why you'd value a prefix
match over an exact match. The normal use-case for this is probably
setting a default handler using an prefix match, and then overriding
it for parts of the url-space with other matches:

(install-handler #'foo-default "/foo/" :type 'prefix)
(install-handler #'foo-bar "/foo/bar.lhp" :type 'exact)
(install-handler #'foo-baz-default "/foo/baz/" :type 'prefix)
;; ... or something along those lines.

If the request for "/foo/bar.lhp" is handled by foo-default instead of
foo-bar, I'd expect a lot of unhappy users.

--
Juho Snellman

Rob Warnock

unread,
Aug 20, 2003, 10:01:15 AM8/20/03
to
Daniel Barlow <d...@telent.net> wrote:
+---------------
| rp...@rpw3.org (Rob Warnock) writes:
| > Initially it seemed rather complex to me, all those different "stages",
| > amd the complexity of the URI parsing seemed a bit over-the-top, but
| > I dunno, maybe there are cases where it's needed.
|
| All you need for "hello world" in Araneida (ignoring the export-server
| stuff, which I freely admit is messy) is
|
| (defclass hello-handler (handler) ())
| (defmethod handle-request-response ((h hello-handler) (method (eql :get))
| request)
| (request-send-headers request)
| (format (request-stream request) "<title>hello</title><p>Hello world~%")
| t)
|
| (install-handler *root-handler* (make-instance 'hello-handler)
| "http://localhost/hello.html")
+---------------

For handlers which are loaded into the server at init time, mine isn't
all that much different, actually, except for not using CLOS as much:

(defun hello-page (request)
(with-html-output (s (http-request-stream request) t)
"Content-Type: text/html" (lfd) (lfd)
(:html ()
(:head () (:title () "Hello")) (lfd)
(:body ()
(:h1 () "Hello") (lfd)
"Hello, world!" (lfd)))
(lfd)))

(register-uri-handler :path "/lhp/hello" :kind :exact
:function 'hello-page)


If you should reload the file containing that, REGISTER-URI-HANDLER
is careful to re-use the handler entry if the :PATH & :KIND are equal
to the previous one (just overlaying the function in that case).

[And as noted last time, I don't yet handle virtual hosts correctly.
I don't want to put the virtual host explicitly into a URI passed to
the registration routine the way you do above, since I want a given
".lhp" file (and its cached code) to be able to work on multiple virtual
hosts that share a common $DOCUMENT_ROOT, e.g., "127.0.0.1", "localhost",
"rpw3.org", and "fast.rpw3.org", but *not* "ns1.rpw3.org" (say). Getting
this right without backparsing "httpd.conf" is a bit tricky.]

A minimal LHP page (demand-loaded from the filesystem & cached)
is even more terse, provided one is happy with the default "200"
response and "text/html":

(lhp-basic-page ()
(:html ()

(:head () (:title () "Hello")) (lfd)
(:body ()
(:h1 () "Hello") (lfd)
"Hello, world!" (lfd)))
(lfd)))

Or, an ".lhp" file again, but done without using LHP-BASIC-PAGE
or HTOUT at all (close to what the above expands into, actually):

(flet ((the-page (request) ; FLET avoids package pollution.
(let ((s (http-request-stream request)))
(format s "Content-Type: text/html~%~%~
<html><head><title>hello</title></head>~%~
<body><h1>hello</h1>~%~
<p>Hello world~%~
</body></html>~%"))))
(lhp:lhp-set-page-function #'the-page))

+---------------
| > Plus... it only handled :EXACT and :PREFIX matches, and I needed


| > :SUFFIX, too (for ".lhp" files like the above).
|

| Suffix matching. Hmm. I can see how that'd be useful, although I'm
| not sure what the priority for "best matching handler" would be. Does
| /cliki/foo.lhp run the cliki handler that it prefix matched, or the
| lhp handler according to the suffix? Apache, I know, has both, and I
| find that the usual result is to do something appropriate 95% of the
| time and horribly confuse people in the remaining 5%

+---------------

Well, my decision was that an exact match with an :EXACT entry trumps
both the others, but that may have been due to the way I hacked suffix
handlers into the system. (*blush!*) The way they work [well, there
is only one so far!] is to grovel around on disk to see if the indicated
object(s) actually exist[*], and if so and if the load is successful,
register a new :EXACT URI-handler entry and call *that* one. Future hits
find the new exact entry and do don't go through the suffix handler at
all. (Nor read the filesystem, except for a quick FILE-WRITE-DATE, unless
it's changed.)

[*] Note: Apache will cheerfully send your handler matching URIs that
don't have any existence in the file system, at least as long as
the directories are there. And if "MultiViews" are enabled, the
directories don't even have to be there (which is how classic CGI
scripts effectively do "prefix matching" and extract the $PATH_INFO).
If a file /foo.lhp exists and MultiViews are enabled, Apache will
match a path /foo/bar/baz (even if directory "bar" doesn't exist!)
and send the request to your server (or to /foo.cgi, if that's what
exists). Useful, when you want it, but dangerous when it happens to
you accidentally.

As far as prefix versus suffix goes, I have no strong preference. Or
rather, I *do* have a strong opinion that one should not be mixing the
two in the same part of the virtual URI hierarchy. Prefix matching feels
to me like mainly a way to try to trick search engines into indexing
what are really queries under the skin (that is, all of the stuff
following the prefix is really a query encoded into URI space!).
It's fine for that, but in that case it should (IMHO) be off in its
own corner of the virtual URI hierarchy, and *not* share a prefix
with stuff that's really strongly filesystem based. But YMMV...

+---------------
| > The registered function...does whatever it want to do thoughout


| > the various "stages", calling back into the infrastructure for help

| > whenneeded [such as issuing ... standard HTML error pages].


|
| Helper functions for errors etc are another area that need addressing.
| Using cliki as an example again, it'd be nice to customize the 404
| page by subclassing something, so that requests for nonexistent cliki
| pages display differently from requests for other random nonexistent
| resources on the same server

+---------------

Again, my stuff may have to evolve in that direction, but so far I've
gotten by with only three (well, four) infrastructure error pages a
handler can call:

forbidden-page (403) Page functions might call this on auth errors.
not-found-page (404) Default page for the no-handler case.
internal-error-page (500) Some CL error condition (other than EPIPE).
fallback-page (200) Does a formatted dump of the request.

The first two are exact clones of the corresponding builtin Apache
pages, except for one character so I can tell them apart. ;-}
The third is not identical to the Apache one, especially as it
reports the CL condition to the user (if possible), but is similar
in tone. The last is not really an error; it gets used for debugging
new request types, e.g., as an "action" of a FORM, say.

The user applications themselves have a bunch of very application-
specific error pages, to be sure, but they all use the application's
standard page templates -- headers, footers, navbars, etc. -- and
explain the error in user terms. So in HTTP terms, these are in fact
not "errors" (and all produce "200 OK" results).

+---------------


| > Can't it be made to run on CMUCL pretty easily?
|
| It wouldn't be rocket science. I just say "SBCL" because I don't
| actually test with CMUCL before releasing new versions, so at any
| given time there are probably sbcl package prefixes and things in
| there that need fixing.

+---------------

Yeah, I noticed that. But it didn't seem to be *too* bad that way.
A bit of grunt work, a couple of #+sbcl (progn ...) and #+cmu (progn ...)
here and there, and... ;-}

+---------------


| > That is, the whole issue (mentioned in passing above) of what might be
| > called "dynamic defsystem" issues (that is, when do Lisp sources get
| > loaded/reloaded/recompiled).
|
| Yes. I haven't thought at all about dynamic loading at request time,
| but I agree it needs consideration.

+---------------

I may have more of a bug in my ear about that than most, since I
came to the "CL web API" topic from the direction of doing classic
CGI "scripts" in Lisp, rather starting from the CL-HTTP/AllegroServe
"Lisp is the whole world" point of view. So I when I moved from fork/exec
CGI scripting to a persistent server, naturally one of the first things
I wanted was to "make it work like CGI, only better".

+---------------


| What I'm trying to punt on here is how you get from sexp to stream
| (htout, lml, cl-who, etc)

+---------------

That's fine. There are plenty of packages for that, and plenty of
reasons to have & use different ones. The only thing that's really
important for that from the "CL web API" point of view is that the
handlers -- especially suffix handlers -- need to be able to select
the style themselves. That is, you're probably going to see a ".alp"
handler, a ".tml" handler, and a ".lhp" handler doing a bunch of very
similar things (especially "dynamic defsystem" kinds of things at least)
and it would be nice if the obviously-common things could be factored
out and made available as part of the infrastructure. But you're also
going to see all three doing some very *different* stuff, and they need
to be allowed the freedom to do that, too.

To me, that argues for a very minimal interface in the infrastructure-
to-handler direction -- basically, call the handler function with *all*
the information about the HTTP request, and little else -- but a fairly
rich interface in the handler-to-infrastructure direction: callbacks,
library routines, standard error pages, some templated pages, etc.
Some handlers may be little more than shims, calling back into the
infrastructure; others may have to nearly duplicate large hunks of
the infrastructure because it doesn't *quite* work for their precise
needs. Both should be possible.

+---------------


| It seems that given support for a 'suffix' handler, it would be
| possible for the client application programmer to write something that
| would pick up pages at some filesystem location based on the URL, do
| whatever processing is appropriate (compile, load, read,
| read-sequence, whatever) and shove it out to the client . With the
| addition of some protocol to register the response as eligible for
| caching in the server (and ideally to invalidate the cache, which I
| agree is a problem in Araneida) I think this covers all three content
| creation patterns that you mention - mostly by punting on the details.
| I take refuge in the Unix "mechanism not policy" mantra here.

+---------------

Almost... But... For space/speed tradeoffs, especially to keep the
server from bloating up into holding the *entire* site in memory,
you need several knobs to say at what level the caching occurs, e.g.,
the final HTML, the compiled code, the interpreted code, the pre-
processed page from disk (that is, ".tml" gets parsed and turned into
trees of Lisp source that makes HTOUT calls -- one could usefully stop
there and cache that output as, say, a parallel ".lhp" file on disk,
which in turn could be loaded on demand), or no caching at all, and
when/why cached things expires. Creating an infrastructure that has all
the right knobs so that *any* desired policy is possible is a *huge*
task... and *will* get it "wrong" in some critical respect anyway. So
leave the policy in the individual handlers (applications), and supply
a rich mechanism (infrastructure) so that implementing whatever weird
policy is fairly easy for the easy cases, and at least *possible* for
the hard ones.

[Oops! Sorry, didn't mean to go off on an architectural style rant.
We obviously agree on the notion of policy/mechanism split, but some
policies are more complex than others...]

I keep harping on the phrase "dynamic defsystem" because it seems that's
the kind of thing you're going to want in the infrastructure, *but* with
the "system descriptions" in the applications, handlers, or even the web
page files. For example, I'm currently working on a small project that --
purely for development convenience -- I'm coding as a bunch of little
".lhp" files, but each of them assumes there is a much larger common set
of stuff already installed in the server when they run. So I've ended up
with the following really ugly boilerplate in each ".lhp" file [please!
no flames about string-bashing vs. pathname merging, I *know* it's ugly!]:

(eval-when (:compile-toplevel :load-toplevel :execute)
(unless (find-package :org.rpw3.customer-name.project)
(load (concatenate 'string (directory-namestring
(load-time-value *load-pathname*))
"pkg")))) ; so LOAD finds either ".lisp" or ".x86f"

(in-package :org.rpw3.customer-name.project)

(lhp-basic-page ()
(ensure-components-present/up-to-date) ; micro-defsystem, sort of.
...rest of page logic
and HTML generation code...)

Note that the ENSURE-COMPONENTS-PRESENT/UP-TO-DATE call has to be *inside*
the LHP-BASIC-PAGE macro, since if this page has been accessed before, it
is probably cached in the server, and if one of the *other* component
source files has changed we want the accessing of this page (or any other
".lhp" page in the project, whether previously loaded or not) to trigger
a rebuild of the changed component(s).

The "pkg" contains [yes, against much good advice I've heard here!]
both the package definition and a list of the common component libraries
that all the ".lhp" files in the project need loaded (and compiled
and automatically kept up to date), as well as the definition of the
ENSURE-COMPONENTS-PRESENT/UP-TO-DATE that does the "make" function.

Ugly, like I said. But what it means operationally is that I can edit
just about any file [except "pkg.lisp" -- there are some Catch-22's
with updates of it], whether an LHP "web page" or Lisp sources for
the common library code, and the next load or reload of any ".lhp"
web page from my browser will get a consistent, up-to-date set of
compiled code into the server, and then run that ".lhp" page function.
And when things are up-to-date, the only additional latency that's
added to the web page output is one FILE-WRITE-DATE per project
component file [fast, since FreeBSD caches the inodes].

Talk about your "fast prototyping" of a web site... ;-} ;-}

Anyway, the point of this somewhat lengthy digression is that what
I'd really like is to get rid of all that boilerplate and just be
able to say in any of the ".lhp" files:

(lhp-basic-page (:system-description "project_name.asd") ;or equivalent
...rest of page logic
and HTML generation code...)

and have all of it work the same way.

Unfortunately, it can't be *quite* that simple, at least with CMUCL,
since it reads whole top-level forms at one time, so the package has
to be already defined and IN-PACKAGE'd before the LHP-BASIC-PAGE form
is read. But it probably *could* be as simple as this:

(use-system "custy-project.asd")
(in-package :org.rpw3.customer-name.project)

(lhp-basic-page ()
(refresh-system)
...rest of page logic
and HTML generation code...)

That's only three lines of not-too-messy boilerplate per web page file.

+---------------


| > | - URI/URL parsing is probably _in_ scope, however: URI are used all
| > | over the place in HTTP; it'd be madness to treat them as text...
| > +---------------
| >
| > Well, I'd agree, except... If you're using one of the "active pages
| > stored in the filesystem" styles, fairly often you need to go back and
| > forth from URI to pathnames (and often, *namestrings*). After looking
|
| Yes. Jeff Dalton made a similar point on the lispweb list. My point
| was that given the URL whose printed representation is
|
| http://www.example.com/cgi-bin/foo.pl?bar=1&baz=2
|
| it's a lot nicer to be able to ask for (url-scheme u) or
| (url-query-info u) than chopping it up using position and subseq, and
| my guess is that any web server will do enough of this url processing
| that it will end up growing a set of functions for this purpose.

+---------------

Yes, I think so, but again: Operating in the context of being a backend
to Apache (which is sort of where I [and maybe we?] started), Apache
has done much of that for you, and split out the results into individual
CGI environment variables. In particular, for "handled" files, these
variables contain almost all the parsed stuff you need (except for,
as noted last time, the breaking up of QUERY_STRING/POST-data into
query bindings):

REQUEST_URI ; Cannot be trusted, may have bad "/../".
REDIRECT_URL ; Safe from bad "/../" (Apache filters it).
PATH_INFO ; (ditto)
PATH_TRANSLATED ; (ditto)
SCRIPT_NAME ; (ditto)
SCRIPT_FILENAME ; (ditto)

REQUEST_METHOD
QUERY_STRING ; Set but null for both "/foo" & "/foo?".
REDIRECT_QUERY_STRING ; Unset for "/foo"; set but null for "/foo?".
CONTENT_LENGTH ; (for POST)

SERVER_PROTOCOL
SERVER_NAME/HTTP_HOST ; May be different if "UseCanonicalName On",
SERVER_PORT ; then $HTTP_HOST is the URI's virtual server.

AUTH_TYPE
REMOTE_USER
REMOTE_ADDR

Yes, I know some of this is very Apache-specific, and a fully-general API
should be the same under CL-HTTP, AllegroServe, etc. But I mention it only
to show why I didn't spend very much energy on a fancy parsed-URI scheme.
Everything *I* needed was in those vars.

*Aha!* I just figure out a major source of our differences over URI
parsing here! You're *NOT* running as a "CGI" or "mod_lisp" client,
but as a proxy. All of that Apache parsing that went into the CGI
environment variables *isn't* available to you. You *have* to (re)parse
the full URI again. [Apache parsed it the first time, to figure out
that it needed to send it to the proxy (your server), but all of the
parsed information got lost when it did.] That explains a lot...

+---------------


| If strings are accepted as url designators everywhere that URLs are
| (which is not uniformly the case in araneida), I don't think that url
| parsing should impact the user too much. I'm open to being convinced
| on that, I guess. Outside of CLiki, my URLs almost never correspond
| in any way at all to things in the filesystem, so people with
| other usage patterns will see it differently.

+---------------

As I commented above, IMHO one should carefully partition the portion
of URI space one is using prefix parsing for away from filesystem-mapped
and/or suffix parsing space. The latter are the ones that end up using
strings a lot. (IME)

+---------------


| > "Lispweb"? Whazzat?
|
| The lis...@red-bean.com mailing list. I've posted an article there
| which you can find on gmane at
| http://article.gmane.org/gmane.lisp.web/148
| For subscription information, look at
| http://www.red-bean.com/mailman/listinfo/lispweb

+---------------

Thanks!

Pekka P. Pirinen

unread,
Aug 20, 2003, 12:25:57 PM8/20/03
to
t...@famine.OCF.Berkeley.EDU (Thomas F. Burdick) writes:

> jsn...@iki.fi (Juho Snellman) writes:
> > The intuitive (to me) ordering of wildcard matches would be selecting
> > the one with the longest static prefix first. [...]

>
> I guess you could just say that ties are broken by choosing prefix
> over suffix (or vice versa), but it seems like it might lead to
> confusing situations.

Confusing the programmer should be avoided, but not at the cost of
restricting the architecture of the web site. The interface could
easily have an additional priority parameter to decide which matching
pattern wins. A default rule like "longest static prefix" would help
to express common cases, but if there's any ambiguity, it's better if
the system complains and requires the programmer to resolve it.
--
Pekka P. Pirinen
I will admit it has become harder to work in C++/Java after learning Lisp.
I used to _really_ enjoy programming, now I seem to only really enjoy
programming in Lisp. - Chris Perkins

It is loading more messages.
0 new messages