From: viator
Subject: Where to start
Date: 
Message-ID: <dc828419.0307150939.5d854794@posting.google.com>
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.

From: Pascal Costanza
Subject: Re: Where to start
Date: 
Message-ID: <costanza-C0EE55.20351815072003@news.netcologne.de>
In article <····························@posting.google.com>,
 ······@rediffmail.com (viator) wrote:

> 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.

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? ;-)
From: ··········@YahooGroups.Com
Subject: Re: Where to start
Date: 
Message-ID: <REM-2003jul26-001@Yahoo.Com>
{{Date: 15 Jul 2003 10:39:45 -0700
  From: ······@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.
From: Eric Smith
Subject: Re: Where to start
Date: 
Message-ID: <ceb68bd9.0307260944.1cc06746@posting.google.com>
··········@YahooGroups.Com wrote in message news:<·················@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.
From: Thomas F. Burdick
Subject: Re: Where to start
Date: 
Message-ID: <xcvel0dqi5g.fsf@famine.OCF.Berkeley.EDU>
········@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!       |                        
    /       /      `-----------------------'                        
   (   -.  |                               
   |     ) |                               
  (`-.  '--.)                              
   `. )----'                               
From: Marc Spitzer
Subject: Re: Where to start
Date: 
Message-ID: <86wue4zfog.fsf@bogomips.optonline.net>
···@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
From: ··········@YahooGroups.Com
Subject: Re: Where to start
Date: 
Message-ID: <REM-2003jul31-003@Yahoo.Com>
{{Date: 26 Jul 2003 11:04:11 -0700
  From: ···@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.
From: Thomas F. Burdick
Subject: Re: Where to start
Date: 
Message-ID: <xcvu19256bg.fsf@famine.OCF.Berkeley.EDU>
··········@YahooGroups.Com writes:

> {{Date: 26 Jul 2003 11:04:11 -0700
>   From: ···@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.

-- 
           /|_     .-----------------------.                        
         ,'  .\  / | No to Imperialist war |                        
     ,--'    _,'   | Wage class war!       |                        
    /       /      `-----------------------'                        
   (   -.  |                               
   |     ) |                               
  (`-.  '--.)                              
   `. )----'                               
From: Erann Gat
Subject: Re: Where to start
Date: 
Message-ID: <gat-3107032223280001@192.168.1.51>
In article <···············@famine.OCF.Berkeley.EDU>,
···@famine.OCF.Berkeley.EDU (Thomas F. Burdick) wrote:

> ··········@YahooGroups.Com writes:
> 
> > {{Date: 26 Jul 2003 11:04:11 -0700
> >   From: ···@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!")
From: ··········@YahooGroups.Com
Subject: Re: Where to start
Date: 
Message-ID: <REM-2003aug01-002@Yahoo.Com>
{{Date: Thu, 31 Jul 2003 22:23:28 -0700
  From: ···@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).
From: Erann Gat
Subject: Re: Where to start
Date: 
Message-ID: <gat-0108031025250001@k-137-79-50-101.jpl.nasa.gov>
In article <·················@Yahoo.Com>, ··········@YahooGroups.Com wrote:

> {{Date: Thu, 31 Jul 2003 22:23:28 -0700
>   From: ···@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.
From: ··········@YahooGroups.Com
Subject: Re: Where to start
Date: 
Message-ID: <REM-2003aug07-003@Yahoo.Com>
{{Date: Fri, 01 Aug 2003 10:25:25 -0700
  From: ···@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.
From: Erann Gat
Subject: Re: Where to start
Date: 
Message-ID: <gat-0708031026450001@k-137-79-50-101.jpl.nasa.gov>
In article <·················@Yahoo.Com>, ··········@YahooGroups.Com wrote:

> {{Date: Fri, 01 Aug 2003 10:25:25 -0700
>   From: ···@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.
From: ··········@YahooGroups.Com
Subject: Re: Where to start
Date: 
Message-ID: <REM-2003aug11-006@Yahoo.Com>
{{Date: Thu, 07 Aug 2003 10:26:45 -0700
  From: ···@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.
From: Thien-Thi Nguyen
Subject: Re: Where to start
Date: 
Message-ID: <7g4r0mzzxy.fsf@gnufans.net>
··········@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
From: ··········@YahooGroups.Com
Subject: Re: Where to start
Date: 
Message-ID: <REM-2003aug16-003@Yahoo.Com>
{{Date: Tue, 12 Aug 2003 10:57:13 -0400
  From: Thien-Thi Nguyen <···@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.
From: Thien-Thi Nguyen
Subject: Re: Where to start
Date: 
Message-ID: <7gk79bnzxv.fsf@gnufans.net>
··········@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
From: ··········@YahooGroups.Com
Subject: Re: Where to start
Date: 
Message-ID: <REM-2003aug22-004@Yahoo.Com>
{{Date: Mon, 18 Aug 2003 04:16:12 -0400
  From: Thien-Thi Nguyen <···@glug.org>
  > 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?}}

I don't quite understand your question. My program rejects input only
for specific reasons. For example, if the input field is a dollar.cents
amount, it would reject it if (after trimming leading and trailing
whitespace) it contains any character other than a numeric digit or
decimal point, or if it contains more than two decimal points, or if
there aren't exactly two digits after the decimal point, or if the
numeric value is out of range for the application. If I had a coding
error in any of those checks, it'd be pretty obvious during testing,
and easy to fix because it shows up immediately at the input point with
a clear obvious relation between the actual input and the error
message. So after initial testing, why would there ever be such a case
(good input rejected) coming up later?? Please explain what you meant
to ask so that I can answer more to the point.
From: Thien-Thi Nguyen
Subject: Re: Where to start
Date: 
Message-ID: <7glltkmcaa.fsf@gnufans.net>
··········@YahooGroups.Com writes:

> I don't quite understand your question. My program rejects input only
> for specific reasons. For example, [...]. So after initial testing,
> why would there ever be such a case (good input rejected) coming up
> later?? Please explain what you meant to ask so that I can answer more
> to the point.

i meant to ask what i asked.  apparently, you now have another question
queued -- "why would there ever be..." -- that's also interesting to
consider.  i have no more questions.

thi
From: Eric Smith
Subject: Re: Where to start
Date: 
Message-ID: <ceb68bd9.0308240344.39457623@posting.google.com>
Thien-Thi Nguyen <···@glug.org> wrote in message news:<··············@gnufans.net>...
> ··········@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?

That's a debugging issue, not a validation issue.
A program should not debug itself, because its
self-debugger is likely to have bugs, causing it
to introduce new bugs instead of fixing old ones.

Before you know it, software in general, which a
few decades ago was healthy except for bugs, and
more recently became infected with viruses, will
have cancer.
From: Thien-Thi Nguyen
Subject: Re: Where to start
Date: 
Message-ID: <7ghe47mfrk.fsf@gnufans.net>
········@yahoo.com (Eric Smith) writes:

> That's a debugging issue, not a validation issue.
> A program should not debug itself, because its
> self-debugger is likely to have bugs, causing it
> to introduce new bugs instead of fixing old ones.

you can categorize the question away w/o answering it.
that's fine, too.

> Before you know it, software in general, which a
> few decades ago was healthy except for bugs, and
> more recently became infected with viruses, will
> have cancer.

software already has cancer; programmers are the carcinogen.

thi
From: Joe Marshall
Subject: Re: Where to start
Date: 
Message-ID: <3cfphhjq.fsf@ccs.neu.edu>
········@yahoo.com (Eric Smith) writes:

> That's a debugging issue, not a validation issue.
> A program should not debug itself, because its
> self-debugger is likely to have bugs, causing it
> to introduce new bugs instead of fixing old ones.

I have written programs that have `self diagnostic' tools that allow
them to figure out what is likely to be wrong.  However, these tools
*only* print out the problem and suggest a solution, they don't try
to fix things themselves.  I agree with you that it would probably
be a bad idea to `close the loop'.
From: Joe Marshall
Subject: Re: Where to start
Date: 
Message-ID: <isp1e1d3.fsf@ccs.neu.edu>
···@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.
From: Erann Gat
Subject: Re: Where to start
Date: 
Message-ID: <gat-1308031435180001@k-137-79-50-101.jpl.nasa.gov>
In article <············@ccs.neu.edu>, Joe Marshall <···@ccs.neu.edu> wrote:

> ···@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.

E.
From: Joe Marshall
Subject: Re: Where to start
Date: 
Message-ID: <1xvoe4w4.fsf@ccs.neu.edu>
···@jpl.nasa.gov (Erann Gat) writes:

> In article <············@ccs.neu.edu>, Joe Marshall <···@ccs.neu.edu> wrote:
>
>> ···@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.
From: Kenny Tilton
Subject: Re: Where to start
Date: 
Message-ID: <3F3BA45A.8000005@nyc.rr.com>
Joe Marshall wrote:
> ···@jpl.nasa.gov (Erann Gat) writes:
> 
> 
>>In article <············@ccs.neu.edu>, Joe Marshall <···@ccs.neu.edu> wrote:
>>
>>
>>>···@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
From: Duane Rettig
Subject: Re: Where to start
Date: 
Message-ID: <47k5gjm1q.fsf@beta.franz.com>
Kenny Tilton <·······@nyc.rr.com> writes:

> Joe Marshall wrote:
> > ···@jpl.nasa.gov (Erann Gat) writes:
> >
> 
> >>In article <············@ccs.neu.edu>, Joe Marshall <···@ccs.neu.edu> wrote:
> >>
> >>
> >>>···@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    ·····@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   
From: Joe Marshall
Subject: Re: Where to start
Date: 
Message-ID: <adaccjjr.fsf@ccs.neu.edu>
Duane Rettig <·····@franz.com> writes:

> Kenny Tilton <·······@nyc.rr.com> writes:
>
>> Joe Marshall wrote:
>> > ···@jpl.nasa.gov (Erann Gat) writes:
>> >
>> 
>> >>In article <············@ccs.neu.edu>, Joe Marshall <···@ccs.neu.edu> wrote:
>> >>
>> >>
>> >>>···@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
From: Gorbag
Subject: Re: Where to start
Date: 
Message-ID: <zdS_a.3936$c6.3416@bos-service2.ext.raytheon.com>
"Joe Marshall" <···@ccs.neu.edu> wrote in message
·················@ccs.neu.edu...
> Duane Rettig <·····@franz.com> writes:
>
> > Kenny Tilton <·······@nyc.rr.com> writes:
> >
> >> Joe Marshall wrote:
> >> > ···@jpl.nasa.gov (Erann Gat) writes:
> >> >
> >>
> >> >>In article <············@ccs.neu.edu>, Joe Marshall <···@ccs.neu.edu>
wrote:
> >> >>
> >> >>
> >> >>>···@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?**

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.
From: Erann Gat
Subject: Re: Where to start
Date: 
Message-ID: <gat-1408031326200001@k-137-79-50-101.jpl.nasa.gov>
In article <··················@bos-service2.ext.raytheon.com>, "Gorbag"
<·············@nospam.mac.com> wrote:

> "Joe Marshall" <···@ccs.neu.edu> wrote in message
> ·················@ccs.neu.edu...
> > Duane Rettig <·····@franz.com> writes:
> >
> > > Kenny Tilton <·······@nyc.rr.com> writes:
> > >
> > >> Joe Marshall wrote:
> > >> > ···@jpl.nasa.gov (Erann Gat) writes:
> > >> >
> > >>
> > >> >>In article <············@ccs.neu.edu>, Joe Marshall <···@ccs.neu.edu>
> wrote:
> > >> >>
> > >> >>
> > >> >>>···@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?**
> 
> 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.

Enough already!  The irony is killing me!

E.
From: Joe Marshall
Subject: Re: Where to start
Date: 
Message-ID: <1xvoc7eb.fsf@ccs.neu.edu>
"Gorbag" <·············@nospam.mac.com> writes:

> "Joe Marshall" <···@ccs.neu.edu> wrote in message
> ·················@ccs.neu.edu...
>> Duane Rettig <·····@franz.com> writes:
>>
>> > Kenny Tilton <·······@nyc.rr.com> writes:
>> >
>> >> Joe Marshall wrote:
>> >> > ···@jpl.nasa.gov (Erann Gat) writes:
>> >> >
>> >>
>> >> >>In article <············@ccs.neu.edu>, Joe Marshall <···@ccs.neu.edu>
> wrote:
>> >> >>
>> >> >>
>> >> >>>···@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?**
>
> 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.

A hardy response!  Weld-one.
From: Joe Marshall
Subject: Re: Where to start
Date: 
Message-ID: <isoy6hd8.fsf@ccs.neu.edu>
"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.
 
From: Daniel Barlow
Subject: Re: Where to start
Date: 
Message-ID: <8765l0i5x0.fsf@noetbook.telent.net>
Kenny Tilton <·······@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 
From: Duane Rettig
Subject: Re: Where to start
Date: 
Message-ID: <43cg4jdeu.fsf@beta.franz.com>
Daniel Barlow <···@telent.net> writes:

> Kenny Tilton <·······@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.

-- 
Duane Rettig    ·····@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   
From: Joe Marshall
Subject: Re: Where to start
Date: 
Message-ID: <65l0c7z0.fsf@ccs.neu.edu>
Duane Rettig <·····@franz.com> writes:

> Daniel Barlow <···@telent.net> writes:
>
>> Kenny Tilton <·······@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?
From: Ingvar Mattsson
Subject: Re: Where to start
Date: 
Message-ID: <874r0jcl18.fsf@gruk.tech.ensign.ftech.net>
Joe Marshall <···@ccs.neu.edu> writes:

> Duane Rettig <·····@franz.com> writes:
> 
> > Daniel Barlow <···@telent.net> writes:
> >
> >> Kenny Tilton <·······@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?

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
From: Rob Warnock
Subject: Re: Where to start
Date: 
Message-ID: <VGidnXG77OmGQqGiXTWc-w@speakeasy.net>
Ingvar Mattsson  <······@cathouse.bofh.se> wrote:
+---------------
| Joe Marshall <···@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.]


-Rob

-----
Rob Warnock, PP-ASEL-IA		<····@rpw3.org>
627 26th Avenue			<URL:http://rpw3.org/>
San Mateo, CA 94403		(650)572-2607
From: Joe Marshall
Subject: Re: Where to start
Date: 
Message-ID: <n0ea6hwf.fsf@ccs.neu.edu>
Ingvar Mattsson <······@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.
From: Erann Gat
Subject: Re: Where to start
Date: 
Message-ID: <gat-1508031049310001@k-137-79-50-101.jpl.nasa.gov>
In article <············@ccs.neu.edu>, Joe Marshall <···@ccs.neu.edu> wrote:

> Ingvar Mattsson <······@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.
From: Gorbag
Subject: Re: Where to start
Date: 
Message-ID: <87e%a.3939$c6.3179@bos-service2.ext.raytheon.com>
"Erann Gat" <···@jpl.nasa.gov> wrote in message
·························@k-137-79-50-101.jpl.nasa.gov...
> In article <············@ccs.neu.edu>, Joe Marshall <···@ccs.neu.edu>
wrote:
>
> > Ingvar Mattsson <······@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 ;-).
From: Christopher C. Stacy
Subject: Re: Where to start
Date: 
Message-ID: <u4r0i6vi9.fsf@dtpq.com>
>>>>> On Fri, 15 Aug 2003 19:35:30 -0400, Gorbag  ("Gorbag") writes:

 Gorbag> "Erann Gat" <···@jpl.nasa.gov> wrote in message
 Gorbag> ·························@k-137-79-50-101.jpl.nasa.gov...
 >> In article <············@ccs.neu.edu>, Joe Marshall <···@ccs.neu.edu>
 Gorbag> wrote:
 >> 
 >> > Ingvar Mattsson <······@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.
:)
From: Gorbag
Subject: Re: Where to start
Date: 
Message-ID: <buc0b.3944$c6.3332@bos-service2.ext.raytheon.com>
"Christopher C. Stacy" <······@dtpq.com> wrote in message
··················@dtpq.com...
> >>>>> On Fri, 15 Aug 2003 19:35:30 -0400, Gorbag  ("Gorbag") writes:
>
>  Gorbag> "Erann Gat" <···@jpl.nasa.gov> wrote in message
>  Gorbag> ·························@k-137-79-50-101.jpl.nasa.gov...
>  >> In article <············@ccs.neu.edu>, Joe Marshall <···@ccs.neu.edu>
>  Gorbag> wrote:
>  >>
>  >> > Ingvar Mattsson <······@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.
> :)

If you know, you're one of the props!
From: Daniel Barlow
Subject: Re: Where to start
Date: 
Message-ID: <87u18kgg9k.fsf@noetbook.telent.net>
Duane Rettig <·····@franz.com> writes:

> Daniel Barlow <···@telent.net> writes:
>
>> Kenny Tilton <·······@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


-dan

-- 

   http://www.cliki.net/ - Link farm for free CL-on-Unix resources 
From: Edi Weitz
Subject: Re: Where to start
Date: 
Message-ID: <8765l9fm08.fsf@bird.agharta.de>
On Thu, 07 Aug 2003 09:03:14 -0700, ··········@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.
From: ··········@YahooGroups.Com
Subject: Re: Where to start
Date: 
Message-ID: <REM-2003aug11-005@Yahoo.Com>
{{Date: 07 Aug 2003 18:52:39 +0200
  From: Edi Weitz <···@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?
From: Erann Gat
Subject: Re: Where to start
Date: 
Message-ID: <gat-1208030034530001@192.168.1.51>
In article <·················@Yahoo.Com>, ··········@YahooGroups.Com wrote:

> {{Date: 07 Aug 2003 18:52:39 +0200
>   From: Edi Weitz <···@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.
From: ··········@YahooGroups.Com
Subject: Re: Where to start
Date: 
Message-ID: <REM-2003aug12-008@Yahoo.Com>
{{Date: Tue, 12 Aug 2003 00:34:53 -0700
  From: ···@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.
From: Edi Weitz
Subject: Re: Where to start
Date: 
Message-ID: <87oeyvfesa.fsf@bird.agharta.de>
On Mon, 11 Aug 2003 21:22:59 -0700, ··········@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.
From: ··········@YahooGroups.Com
Subject: Re: Where to start
Date: 
Message-ID: <REM-2003aug12-009@Yahoo.Com>
{{Date: 12 Aug 2003 10:42:13 +0200
  From: Edi Weitz <···@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 ··········@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 ··········@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.
From: Thien-Thi Nguyen
Subject: Re: Where to start
Date: 
Message-ID: <7gznik2r77.fsf@gnufans.net>
··········@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
From: Paolo Amoroso
Subject: Re: Where to start
Date: 
Message-ID: <+acyP99RJsyzABGTqBnY9l5Aq5FK@4ax.com>
On Thu, 07 Aug 2003 09:03:14 -0700, ··········@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.


Paolo
-- 
Paolo Amoroso <·······@mclink.it>
From: Joe Marshall
Subject: Re: Where to start
Date: 
Message-ID: <ekzpe1bu.fsf@ccs.neu.edu>
Paolo Amoroso <·······@mclink.it> writes:

> On Thu, 07 Aug 2003 09:03:14 -0700, ··········@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.
From: Gorbag
Subject: Re: Where to start
Date: 
Message-ID: <RcPYa.3898$c6.3300@bos-service2.ext.raytheon.com>
<··········@YahooGroups.Com> wrote in message
······················@Yahoo.Com...
> {{Date: Fri, 01 Aug 2003 10:25:25 -0700
>   From: ···@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,
From: ··········@YahooGroups.Com
Subject: Re: Where to start
Date: 
Message-ID: <REM-2003aug12-001@Yahoo.Com>
{{Date: Fri, 8 Aug 2003 11:20:15 -0400
  From: "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.
From: Joe Marshall
Subject: Re: Where to start
Date: 
Message-ID: <1xw571hy.fsf@ccs.neu.edu>
··········@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.
From: Paolo Amoroso
Subject: Re: Where to start
Date: 
Message-ID: <PK8uP0thfmEk+Iu6S4FtmmE+hkcf@4ax.com>
On Thu, 01 Aug 2003 09:45:42 -0700, ··········@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 <·······@mclink.it>
From: ··········@YahooGroups.Com
Subject: Re: Where to start
Date: 
Message-ID: <REM-2003aug01-001@Yahoo.Com>
{{Date: 31 Jul 2003 21:51:15 -0700
  From: ···@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.
From: Steve Long
Subject: Re: Where to start
Date: 
Message-ID: <BB516DBB.407C%sal6741@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). 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
From: Eric Smith
Subject: Re: Where to start
Date: 
Message-ID: <ceb68bd9.0308041548.42977ea9@posting.google.com>
Steve Long <·······@hotmail.com> wrote in message news:<·····················@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.
From: c hore
Subject: Re: Where to start
Date: 
Message-ID: <ca167c61.0308081850.4520cc3a@posting.google.com>
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?
From: ··········@YahooGroups.Com
Subject: Re: Where to start
Date: 
Message-ID: <REM-2003aug09-004@Yahoo.Com>
{{Date: 4 Aug 2003 16:48:02 -0700
  From: ········@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.
From: Erann Gat
Subject: Re: Where to start
Date: 
Message-ID: <gat-0908032231030001@192.168.1.51>
In article <·················@Yahoo.Com>, ··········@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.
From: c hore
Subject: Re: Where to start
Date: 
Message-ID: <ca167c61.0308100347.d990dc0@posting.google.com>
··········@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.
From: ··········@YahooGroups.Com
Subject: Re: Where to start
Date: 
Message-ID: <REM-2003aug12-004@Yahoo.Com>
{{Date: 10 Aug 2003 04:47:37 -0700
  From: ·······@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?
From: c hore
Subject: Re: Where to start
Date: 
Message-ID: <ca167c61.0308131829.6ef12099@posting.google.com>
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...
From: Eric Smith
Subject: Re: Where to start
Date: 
Message-ID: <ceb68bd9.0308100408.265d0565@posting.google.com>
··········@YahooGroups.Com wrote in message news:<·················@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.
From: Paolo Amoroso
Subject: Re: Where to start
Date: 
Message-ID: <aR02P0GpueeKEwF3Ub3fcgD5gAy6@4ax.com>
On Sat, 09 Aug 2003 21:03:22 -0700, ··········@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
-- 
Paolo Amoroso <·······@mclink.it>
From: Rob Warnock
Subject: Re: Where to start
Date: 
Message-ID: <uN-dna5SK98br6eiXTWc-g@speakeasy.net>
Eric Smith <········@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		<····@rpw3.org>
627 26th Avenue			<URL:http://rpw3.org/>
San Mateo, CA 94403		(650)572-2607
From: ··········@YahooGroups.Com
Subject: Re: Where to start
Date: 
Message-ID: <REM-2003aug16-004@Yahoo.Com>
{{Date: Wed, 13 Aug 2003 07:43:50 -0500
  From: ····@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.
From: Rob Warnock
Subject: Re: Where to start
Date: 
Message-ID: <1OCcnRpS57CSZ92iXTWc-w@speakeasy.net>
<··········@YahooGroups.Com> wrote:
+---------------
| {{Date: Wed, 13 Aug 2003 07:43:50 -0500
|   From: ····@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 <·····@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.


-Rob

-----
Rob Warnock, PP-ASEL-IA		<····@rpw3.org>
627 26th Avenue			<URL:http://rpw3.org/>
San Mateo, CA 94403		(650)572-2607
From: Daniel Barlow
Subject: Re: Where to start
Date: 
Message-ID: <87fzjydg1u.fsf@noetbook.telent.net>
····@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


-dan

-- 

   http://www.cliki.net/ - Link farm for free CL-on-Unix resources 
From: Rob Warnock
Subject: Re: Where to start
Date: 
Message-ID: <bFidnepfXNgxst-iXTWc-g@speakeasy.net>
Daniel Barlow  <···@telent.net> wrote:
+---------------
| ····@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?


-Rob

-----
Rob Warnock, PP-ASEL-IA		<····@rpw3.org>
627 26th Avenue			<URL:http://rpw3.org/>
San Mateo, CA 94403		(650)572-2607
From: Joe Marshall
Subject: Re: Where to start
Date: 
Message-ID: <7k59ehfm.fsf@ccs.neu.edu>
····@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.
From: Daniel Barlow
Subject: cl-webapi (was Re: Where to start)
Date: 
Message-ID: <87zni58wng.fsf_-_@noetbook.telent.net>
····@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 ·······@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


-dan

-- 

   http://www.cliki.net/ - Link farm for free CL-on-Unix resources 
From: Thomas F. Burdick
Subject: Re: cl-webapi (was Re: Where to start)
Date: 
Message-ID: <xcv8ypp33bd.fsf@famine.OCF.Berkeley.EDU>
Daniel Barlow <···@telent.net> writes:

> ····@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!       |                        
    /       /      `-----------------------'                        
   (   -.  |                               
   |     ) |                               
  (`-.  '--.)                              
   `. )----'                               
From: Juho Snellman
Subject: Re: cl-webapi (was Re: Where to start)
Date: 
Message-ID: <slrnbk4v3b.q3l.jsnell@melkinpaasi.cs.Helsinki.FI>
<···@famine.OCF.Berkeley.EDU> wrote:
>Daniel Barlow <···@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
From: Thomas F. Burdick
Subject: Re: cl-webapi (was Re: Where to start)
Date: 
Message-ID: <xcvvfst7yxv.fsf@famine.OCF.Berkeley.EDU>
······@iki.fi (Juho Snellman) writes:

> <···@famine.OCF.Berkeley.EDU> wrote:
> >Daniel Barlow <···@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.

-- 
           /|_     .-----------------------.                        
         ,'  .\  / | No to Imperialist war |                        
     ,--'    _,'   | Wage class war!       |                        
    /       /      `-----------------------'                        
   (   -.  |                               
   |     ) |                               
  (`-.  '--.)                              
   `. )----'                               
From: Juho Snellman
Subject: Re: cl-webapi (was Re: Where to start)
Date: 
Message-ID: <slrnbk6101.rts.jsnell@melkinpaasi.cs.Helsinki.FI>
<···@famine.OCF.Berkeley.EDU> wrote:
>······@iki.fi (Juho Snellman) writes:
>> <···@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
From: Pekka P. Pirinen
Subject: Re: cl-webapi (was Re: Where to start)
Date: 
Message-ID: <ixlltoqoru.fsf@ocoee.cam.harlequin.co.uk>
···@famine.OCF.Berkeley.EDU (Thomas F. Burdick) writes:
> ······@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
From: Joe Marshall
Subject: Re: cl-webapi
Date: 
Message-ID: <y8xpczqu.fsf@ccs.neu.edu>
Daniel Barlow <···@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.
From: Daniel Barlow
Subject: Re: cl-webapi
Date: 
Message-ID: <871xvb2fcs.fsf@noetbook.telent.net>
Joe Marshall <···@ccs.neu.edu> writes:

> 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.)

Yes, agreed.  I made the related point somewhere (I think it was on
lispweb) that a "relative url" is meaningless without a parent url to
provide context for its parsing.  You can't say what the components of
the partial url "foo/bar.html" are: it depends whether it's being
parsed in the context of "http://www.example.com/" or of "mailto:joe"


-dan

-- 

   http://www.cliki.net/ - Link farm for free CL-on-Unix resources 
From: Joe Marshall
Subject: Re: cl-webapi
Date: 
Message-ID: <brudhk3q.fsf@ccs.neu.edu>
Daniel Barlow <···@telent.net> writes:

> Joe Marshall <···@ccs.neu.edu> writes:
>
>> 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.)
>
> Yes, agreed.  I made the related point somewhere (I think it was on
> lispweb) that a "relative url" is meaningless without a parent url to
> provide context for its parsing.  You can't say what the components of
> the partial url "foo/bar.html" are: it depends whether it's being
> parsed in the context of "http://www.example.com/" or of "mailto:joe"

But more importantly, the escape characters change depending on where
in the URI that the string came from!  (And how far along in the parse
that you are.)  This is where most of the bugs seem to appear.
From: Rob Warnock
Subject: Re: cl-webapi (was Re: Where to start)
Date: 
Message-ID: <EtSdnQx1PJe24t6iXTWc-w@speakeasy.net>
Daniel Barlow  <···@telent.net> wrote:
+---------------
| ····@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 ·······@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!


-Rob

-----
Rob Warnock, PP-ASEL-IA		<····@rpw3.org>
627 26th Avenue			<URL:http://rpw3.org/>
San Mateo, CA 94403		(650)572-2607
From: Rainer Joswig
Subject: Re: cl-webapi (was Re: Where to start)
Date: 
Message-ID: <c366f098.0308240307.c6470ac@posting.google.com>
····@rpw3.org (Rob Warnock) wrote in message 

<...>
 
> 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.

just as note:

CL-HTTP kind of supports those variables, too:

---

Documentation for (DEFMACRO HTTP:WITH-CGI-ENVIRONMENT):
Arguments: ((&REST VARIABLES) &BODY BODY)
Binds the CGI variables in VARIABLES within the scope of BODY.
In addition to the variables listed below, any HTTP header may be accessed by
prefixing the header name with "http_".

CGI 1.1 Variables

AUTH_TYPE
If the server supports user authentication, and the script is protects,
this is the protocol-specific authentication method used to validate the user.

CONTENT_LENGTH
The length of the said content as given by the client.

CONTENT_TYPE
For queries which have attached information, such as HTTP POST and PUT,
this is the content type of the data.

GATEWAY_INTERFACE
The revision of the CGI specification to which this server complies.
Format: CGI/revision

HTTP_ACCEPT
The MIME types which the client will accept, as given by HTTP headers.
other protocols may need to get this information from elsewhere. each
item in this list should be separated by commas as per the http spec.
Format: type/subtype, type/subtype
CL-HTTP Format: a list of content type specifications.

HTTP_REFERER
Not listed in CGI/1.1 but used in the examples.

HTTP_USER_AGENT
The browser the client is using to send the request.
General format: software/version library/version.

PATH_INFO
The extra path information, as given by the client. In other words,
scripts can be accessed by their virtual pathname, followed by extra
information at the end of this path. The extra information is sent as
PATH_INFO. This information should be decoded by the server if it comes
from a URL before it is passed to the CGI script.

PATH_TRANSLATED
The server provides a translated version of PATH_INFO, which takes the
path and does any virtual-to-physical mapping to it.

QUERY_STRING
The information which follows the ? in the URL which referenced this
script. This is the query information. It should not be decoded in any
fashion. This variable should always be set when there is query
information, regardless of command line decoding.

REMOTE_ADDR
The IP address of the remote host making the request.

REMOTE_HOST
The hostname making the request. If the server does not have this
information, it should set REMOTE_ADDR and leave this unset.
CL-HTTP Format: a domain name or NIL

REMOTE_IDENT
If user authentication is in use on a resource, then this variable
returns the qualified user name (realm|name). The 1.1 specification stated that
if the HTTP server supports RFC 931 identification, then this variable
will be set to the remote user name retrieved from the server. 
Usage of this variable should be limited to logging only.

REMOTE_USER
If the server supports user authentication, and the script is
     protected, this is the username they have authenticated as.

REQUEST_METHOD
The method with which the request was made. For HTTP, this is "get",
"head", "post", etc.

SCRIPT_NAME
A virtual path to the script being executed, used for self-referencing URLs.

SERVER_NAME
The server's hostname, DNS alias, or IP address as it would appear in
self-referencing URLs.

SERVER_PORT
The port number to which the request was sent.

SERVER_PROTOCOL
The name and revision of the information protcol this request came in
with. Format: protocol/revision

SERVER_SOFTWARE
The name and version of the information server software answering the
request (and running the gateway). Format: name/version

---

<..>
From: ··········@YahooGroups.Com
Subject: Re: Where to start
Date: 
Message-ID: <REM-2003aug22-003@Yahoo.Com>
{{Date: Mon, 18 Aug 2003 18:35:57 +0100
  From: Daniel Barlow <···@telent.net>
  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.}}

So you're talking about client-side applets, not server-side
applications, right? How did Sun Microsystems manage to get their
JavaScript installed in both the major Web browsers (MicroSoft InterNet
Explorer, and Netscape Navigator/Communicator)? I see no likelihood
that the folks who prefer LISP instead of Java would be able to
duplicate that trick, and without LispScript available in both the
major browsers, the only people able to use a LISP client-side API
would be people who already have LISP on their machine, which means
virtually nobody, compared to "everyone" who has a Web browser, and
everyone except Unix VT100 shell users who have JavaScript availble. I
personally think Java was a poor choice for a client-side scripting
language, LISP would have been much better, and I'd love to work on
developing a Web browser written entirely in LISP which would have a
LISP alternative to JavaScript as well as a LISP emulation of
JavaScript itself, if I could thereby earn enough money to avoid maxing
out my credit cards for apartment rent and becoming homeless in a few
months. But I've seen no indication there's any funding available to
support such an effort.

I think for now we should concentrate on setting up LISP server-side
applications, where just about everyone on the net can use our software
and be amazed by it and offer jobs to the authors of our software, and
nobody has to get a new browser, just use the one they already have.
Although it might be fun to set up our own browser that has client-side
LISP, which only we can use, where we can impress ourselves at our
hacking ability, such an effort would take time away from impressing
the general InterNet audience with our programming ability so that
someday we might find paying jobs again. (For Lispers who currently
have paying jobs, do *any* of you have a good enough paying job that
you can afford to subcontract some of your LISP programming work to
those of us who are still unemployed? Will any of you *ever* have
enough money to afford to hire the rest of us LISP programmers??)
From: Rob Warnock
Subject: Re: Where to start
Date: 
Message-ID: <ZUydnVmeLZfuzdqiXTWc-w@speakeasy.net>
<··········@YahooGroups.Com> wrote:
+---------------
|   From: Daniel Barlow <···@telent.net>
|   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.}}
| 
| So you're talking about client-side applets, not server-side
| applications, right?
+---------------

No, he's talking about server-side "applets".

+---------------
| How did Sun Microsystems manage to get their JavaScript installed
| in both the major Web browsers (MicroSoft InterNet Explorer, and
| Netscape Navigator/Communicator)?
+---------------

They *DIDN'T*!!! Java != JavaScript, other than sharing the first four
characters of the name. JavaScript was *entirely* the invention of Netscape
(in fact, almost single-handedly by my ex-SGI friend Brendan Eich, see
<URL:http://wp.netscape.com/comprod/columns/techvision/innovators_be.html>
for some history). Given that JavaScript was in Netscape Navigator (and
that the language spec was deliberately public), Microsoft almost *had*
to put it into IE (so they did).

In fact, one might even make the case that Sun has *failed* in getting
client-side Java applets accepted [outside of some limited use in a few
companies' proprietary enterprise applications].

Server-side Java, on the other hand, is alive & well. (For some values
of "well"...)


-Rob

-----
Rob Warnock, PP-ASEL-IA		<····@rpw3.org>
627 26th Avenue			<URL:http://rpw3.org/>
San Mateo, CA 94403		(650)572-2607
From: ··········@YahooGroups.Com
Subject: Re: Where to start
Date: 
Message-ID: <REM-2003aug29-002@Yahoo.Com>
{{Date: Sat, 23 Aug 2003 06:30:59 -0500
  From: ····@rpw3.org (Rob Warnock)
  No, he's talking about server-side "applets".}}

He says otherwise, "servlets", but none of it makes any sense to me, so
I still don't know what he was really talking about.

{{Java != JavaScript, other than sharing the first four characters of
  the name. JavaScript was *entirely* the invention of Netscape}}

Shit, that's confusing!! Indeed I compared the two:
   Linkname: WDVL: JavaScript Tutorial for Programmers
        URL: http://www.wdvl.com/Authoring/JavaScript/Tutorial/
   Linkname: The Java Tutorial
        URL: http://java.sun.com/docs/books/tutorial/
One of them seems to be a subset of C, except that variables aren't
declared with types, a variable can hold any kind of data at runtime.
The other of them is totally OOP, where you can't even write a main
program, you have to write a main class and then instantiate that class
to run a program. Thanks for pointing out my confusion so I'd look up
the two at the same time and directly compare them while both are fresh
in my mind.

Shit, my ISP has only Java, not JavaScript, and learning how to program
in Java won't do me any good toward learning JavaScript, and because I
had the two mixed up in my mind I have no idea which of the two is
required for all the job ads I've seen in the past ten years, so I have
no idea which of the two I should make any effort to learn. Searching
ba.jobs.offered now:
javascript group:ba.jobs.offered.   Results 1 - 100 of about 21,700.
   Jul 16, 2003 ... Oct 31, 2001
java group:ba.jobs.offered.   Results 1 - 100 of about 53,800.
   Aug 5, 2003 ... Jul 30, 2002
so it looks like java has more jobs than javascript, both total and
recently. So I guess I should learn Java but forget about it helping me
with understanding Javascript applets in Web pages.

{{Server-side Java, on the other hand, is alive & well.}}

There's no way I'd ever know, unless the server application crashes
with some Java-specific error message that is mistakenly sent to my
browser. (I've seen a lot of OLE or somesuch error messages from some
MicroSoft server crap, but I'm not sure what language was generating
the errors, mostly in OpenDiary.Com, does anybody know whether they use
VB or what?)
From: Christopher C. Stacy
Subject: Re: Where to start
Date: 
Message-ID: <ur833nfa8.fsf@dtpq.com>
>>>>> On Fri, 29 Aug 2003 10:00:50 -0700, RobertMaas  ("RobertMaas") writes:
 RobertMaas> Shit, my ISP has only Java, not JavaScript, 

The purpose of Javascript is to program the browser: it is a trivial
language suitable for small programs, and it operates on the objects
that underlie the browser's rendering of the HTML page being displayed.
If you have a browser, you have a Javascript interpreter.

Java is most often used on the server side, to implement dynamic
content (generate HTML to be sent to the browser), using an API 
called "servlets".

 RobertMaas> and learning how to program in Java won't do me any 
 RobertMaas> good toward learning JavaScript

Correct - they really have nothing to do with each other, other than
that both technologies are commonly employed in web systems.

If you want an old systems analogy: Java is like TECO
and Javascript is like VT100 control codes.
From: ··········@YahooGroups.Com
Subject: Re: Where to start
Date: 
Message-ID: <REM-2003sep01-010@Yahoo.Com>
{{Date: Sat, 30 Aug 2003 18:58:39 GMT
  From: ······@dtpq.com (Christopher C. Stacy)
  If you have a browser, you have a Javascript interpreter.}}

I'm not sure what you mean by "have". AFAIK, the only Web browser I can
use from this dialup VT100 shell account is lynx, which I am quite sure
doesn't have Javascript available for me to use via VT100 dialup.

{{Java is most often used on the server side, to implement dynamic
  content (generate HTML to be sent to the browser), using an API
  called "servlets".}}

Java can also be used under CGI, see below:

Last night I couldn't sleep, and got to thinking about Hello World
programs in various languages, and what exactly the formal definition
of such a program might be, will post my thoughts on that topic if
anyone cares, which nobody ever does, nobody cares what I think about,
and nobody wants to hear my thoughts about things, but anyway I got
back online about 2 AM and installed Hello World scripts in plain text
and HTML and CGI/sh and CGI/cmucl, and then decided to try something
new, and created a CGI/Java Hello World script:
1 -rw-------  1 rem  user  219 Sep  1 03:44 h.java
class h
{
        public static void main(String args[])
        {
           System.out.println("Content-type: text/html");
           System.out.println("");
           System.out.println("Hello World!");
        }
}
1 -rw-------  1 rem  user  467 Sep  1 03:45 h.class

1 -rwx------  1 rem  user   42 Sep  1 03:53 h-java.cgi*
#! /bin/sh
/usr/local/jdk1.2.2/bin/java h
http://www.rawbw.com/~rem/cgi-bin/h-java.cgi

If you're curious to see the CGI/CMUCL Hello World
1 -rwx------  1 rem  user  109 Sep  1 02:13 h-cmucl.cgi*
#! /bin/sh
/usr/local/bin/lisp -eval '(progn (format t "Content-type: text/html~%~%Hello World!~%") (quit))'
http://www.rawbw.com/~rem/cgi-bin/h-cmucl.cgi

For completeness, I also wrote my very first CGI/perl script:
1 -rwx------  1 rem  user   78 Sep  1 02:33 h-perl.cgi*
#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "Hello, world!\n";
http://www.rawbw.com/~rem/cgi-bin/h-perl.cgi

{{If you want an old systems analogy: Java is like TECO and Javascript
  is like VT100 control codes.}}

The first half of that isn't valid, because TECO is an interactive
editor whereas Java can't be run interpretively at all, program must be
compiled and then the main function in some class invoked from the
command line (or in Mac/Windows by double-clicking the icon for the
class file from the desktop I presume).

By the way, I tried to set up symbolic links from my public WebPage
directory to the hello-world scripts in my cgi-bin directory, and
thought I got permissions correct (see below), but the server gives a
permission error when I try to view the file from the Web.
% ls -l ~/public_html/cgi-bin/h-cmucl.cgi
1 -rwxr--r--  1 rem  user  109 Sep  1 02:13 /home/users/rem/public_html/cgi-bin/h-cmucl.cgi*
% ls -l ~/public_html/HelloWorld/h-cmucl.cgi
0 lrwx------  1 rem  user  19 Sep  1 20:14 ··················································@ -> cgi-bin/h-cmucl.cgi
(Why doesn't the group/other read permission show up above?
 man chmod says symbolic links don't have permissions, and indeed I was
 unable to turn on group/other read permission there)
% ls -ld ~/public_html/HelloWorld/
1 drwxr-xr-x  2 rem  user  512 Sep  1 20:30 /home/users/rem/public_html/HelloWorld//
File that you are currently viewing
   Linkname: Index of /~rem/HelloWorld
        URL: http://www.rawbw.com/~rem/HelloWorld/
     Server: Apache/1.3.26 (Unix) mod_macro/1.1.1
Link that you currently have selected
   Linkname: h-cmucl.cgi
        URL: http://www.rawbw.com/~rem/HelloWorld/h-cmucl.cgi
->
                                                                  403 Forbidden
                                   Forbidden
   You don't have permission to access /~rem/HelloWorld/h-cmucl.cgi on
   this server.
Does anybody have any idea what I need to do to make that symbolic link
accessible from the Web?
From: Christopher C. Stacy
Subject: Re: Where to start
Date: 
Message-ID: <u1xuz74ld.fsf@dtpq.com>
>>>>> On Mon, 01 Sep 2003 20:53:02 -0700, RobertMaas  ("RobertMaas") writes:

 RobertMaas> {{Date: Sat, 30 Aug 2003 18:58:39 GMT
 RobertMaas>   From: ······@dtpq.com (Christopher C. Stacy)
 RobertMaas>   If you have a browser, you have a Javascript interpreter.}}

 RobertMaas> I'm not sure what you mean by "have".

If you have a computer that runs Netscape or Internet Explorer, 
which are the standard browsers on the Internet.  (You can get 
access to such a machine by visiting your local public library 
or community center.)

 RobertMaas> Java can also be used under CGI, see below:

Since you didn't even know what Java is, I am surprised that 
you want to lecture me about it as if I didn't know about CGI
programming or something.


 RobertMaas> {{If you want an old systems analogy: Java is like TECO and Javascript
 RobertMaas>   is like VT100 control codes.}}

 RobertMaas> The first half of that isn't valid, because TECO is an
 RobertMaas> interactive editor

I was making an analogy to try to help you understand that Java
is typically used to write programs that run on the main computer,
while Javascript is for programming the terminal computer.
This is something that you didn't understand at the time.
Apparently you're too dense to understand that kind of analogy.
Anyway, I guess you don't need any more help , so I'll gladly 
stop going out of my way to contribute to your education.
From: Daniel Barlow
Subject: Re: Where to start
Date: 
Message-ID: <87isoo38pb.fsf@noetbook.telent.net>
··········@YahooGroups.Com writes:

> {{Date: Mon, 18 Aug 2003 18:35:57 +0100
>   From: Daniel Barlow <···@telent.net>
>   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.}}
>
> So you're talking about client-side applets, not server-side
> applications, right?

Wrong.  I said _servlet_, not applet.  Even if you don't know what a
servlet is, it should be apparent from the rest of my article, and the
thread that followed it, that I was talking about server-side applications.

-dan

-- 

   http://www.cliki.net/ - Link farm for free CL-on-Unix resources 
From: ··········@YahooGroups.Com
Subject: Re: Where to start
Date: 
Message-ID: <REM-2003aug27-003@Yahoo.Com>
{{Date: Sat, 23 Aug 2003 12:38:24 +0100
  From: Daniel Barlow <···@telent.net>
  I said _servlet_, not applet.  Even if you don't know what a servlet
  is, it should be apparent from the rest of my article, and the thread
  that followed it, that I was talking about server-side applications.}}

I'm still confused by this all. I was under the impression that there
are server side applications, where the whole application sits in one
place, so the size isn't relevant, and client side things which are
small enough to download as needed (if they were full size applications
they'd cost a lot of bandwidth to keep downloading over and over), so
they're applets instead of applications. So why is there such a thing
as a server-side tiny thing?? Since it doesn't have to be moved from
place to place, there's no reason to keep it tiny and to have a special
mechanism?? So why is anybody advocating or implementing servlets with
the implied tiny size? What advantage is there to such a restriction
compared to full-size applications?
From: ······@nordebo.com
Subject: Re: Where to start
Date: 
Message-ID: <m2k78xwqrv.fsf@patrik.nordebo.com>
··········@YahooGroups.Com writes:

> {{Date: Sat, 23 Aug 2003 12:38:24 +0100
>   From: Daniel Barlow <···@telent.net>
>   I said _servlet_, not applet.  Even if you don't know what a servlet
>   is, it should be apparent from the rest of my article, and the thread
>   that followed it, that I was talking about server-side applications.}}
> 
> I'm still confused by this all. I was under the impression that there
> are server side applications, where the whole application sits in one
> place, so the size isn't relevant, and client side things which are
> small enough to download as needed (if they were full size applications
> they'd cost a lot of bandwidth to keep downloading over and over), so
> they're applets instead of applications. So why is there such a thing
> as a server-side tiny thing?? Since it doesn't have to be moved from
> place to place, there's no reason to keep it tiny and to have a special
> mechanism?? So why is anybody advocating or implementing servlets with
> the implied tiny size? What advantage is there to such a restriction
> compared to full-size applications?

In Java (which AFAIK is where the term "servlet" comes from, but maybe
they stole it), a servlet is a program (class) that takes a request
(typically an HTTP request) and generates a response to it. Commonly
there is quite a bit of code that isn't part of the servlet that makes
up the actual application, the servlet is just an entry point into the
application. Usually a service is made up of a number of servlets,
where each handles one kind of request (e.g. one might display product
information, another might display a shopping cart, a third might
accept orders and so on).

These servlets can then be plugged into whatever servlet engine you
happen to be running, so you don't have to worry about the whole web
server thing, you just plug your servlet in under some name and there
it goes, and all servlet engines will run all servlets, since there is
a well defined interface (at least that's the theory...).

So the idea is to have something like this for Common Lisp, i.e. a
common interface that you can implement to tell the "servlet engine"
which requests to send to which program, and an interface for how to
get data out of the request and how to generate the response.

-- 
Patrik Nordebo
From: ··········@YahooGroups.Com
Subject: Re: Where to start
Date: 
Message-ID: <REM-2003sep01-007@Yahoo.Com>
{{Date: 28 Aug 2003 21:01:08 +0200
  From: ······@nordebo.com
  In Java ..., a servlet is a program (class) that takes a request
  (typically an HTTP request) and generates a response to it.}}

So the servlet is the first line of response after the Web server
(Apache) itself? How does the Web server know a particular URL
represents a Java servlet request instead of a CGI request or HTML
request or TXT request? The latter are determined by the
filename-extension, .cgi .html or .txt respectively. Is there a file
extension that indicates a Java servlet request? (Is that what .jsp
means, or am I mixing up two different things?)

Does the Apache (or other) server keep a persistant Java Virtual
Machine (Java p-code emulator) around at all times, and create green
threads (not sure of jargon) within it to handle each new HTTP
JavaServlet request? If so, how does it avoid one thread modifying a
global variable that would then side-effect another thread, or is it
that Java doesn't have any global variables in the first place, only
object variables? So if two different HTTP JavaServlet requests ask for
the same class, are two different instances of that class created,
which each have their own object variables so there's no problem? But
how are global environment variables, such as get/post method, get
data, passed, as a formal argument to each class instance? How is
standard input (for POST method) passed to the class instance?? How is
standard output for all the different threads kept separate?? Are
formal input and output channels/streams passed explicitly to the class
instance? Do you know where to find a formal specification of Java
servlets which immediately answers such questions before getting into
the details under those major issues?

{{So the idea is to have something like this for Common Lisp}}

Common LISP handles stdin, stdout, errout, and global environment
variables, via global variables in the LISP core image. (In CMUCL, an
assoc-list handles the envvars, for example.) How could this be adapted
to avoid two different CL green threads sharing the same i/o and
HTTP-env-var situation?
From: Brian Palmer
Subject: Re: Where to start
Date: 
Message-ID: <0whbru4q911.fsf@rescomp.Stanford.EDU>
··········@YahooGroups.Com writes:

> {{Date: 28 Aug 2003 21:01:08 +0200
>   From: ······@nordebo.com
>   In Java ..., a servlet is a program (class) that takes a request
>   (typically an HTTP request) and generates a response to it.}}
> 
> So the servlet is the first line of response after the Web server
> (Apache) itself? How does the Web server know a particular URL
> represents a Java servlet request instead of a CGI request or HTML
> request or TXT request? The latter are determined by the
> filename-extension, .cgi .html or .txt respectively. Is there a file
> extension that indicates a Java servlet request? (Is that what .jsp
> means, or am I mixing up two different things?)

It's not quite as simple as only paying attention to
extensions. Apache, for example, has a number of different ways to
specify how to handle a request. You can say that

1) everything under /mycode gets passed as an argument to a particular
program. (For example, http://www.example.com/echo/these/are/args
might end up invoking "echo" with the arguments "these","are","args",
which presumably will return an html page with those arguments
present.
2) everything ending in .pl is interpreted as a perl script
3) Everything ending in .html is dumped directly to screen
4) and more

(And in case a URL conflicts (e.g.,
http://www.example.com/echo/something.pl), the order that the rules
were specified will be considered in determining which handle to
invoke, iirc). 

The way the Apache/Tomcat combination works typically is Apache is
used just long enough to decide to hand off a request to Tomcat (the
servlet engine). Tomcat then has its own rules to decide what servlets
are involved in processing the request (see the <servlet> and
<servlet-mapping> tags, in the web.xml, as specified in the servlet
specification).
 

> Does the Apache (or other) server keep a persistant Java Virtual
> Machine (Java p-code emulator) around at all times, and create green
> threads (not sure of jargon) within it to handle each new HTTP
> JavaServlet request? If so, how does it avoid one thread modifying a
> global variable that would then side-effect another thread, or is it
> that Java doesn't have any global variables in the first place, only
> object variables? 

There are instance variables, local variables, and static class
variables. One thread can modify non-local state, but Java provides
some low-level mutex primitives to help with this. Most tasks can be
accomplished without modifying global state (and, by convention,
servlets will do very little work on their own. They handle reading
and writing to the web server, but the application logic is handled by
another layer of the application. Thus, the trick is just to write
that other layer of the application to be thread-safe, so the servlet
architecture imposes no special concerns). 

> So if two different HTTP JavaServlet requests ask for
> the same class, are two different instances of that class created,
> which each have their own object variables so there's no problem? But
> how are global environment variables, such as get/post method, get
> data, passed, as a formal argument to each class instance? 

Environment variables get created for get/post methods and such only
when the program is written to work under CGI (that is, conforms to
the common gateway interface). Servlets don't need to do that; the
servlet engine reads the input stream, fills in a data structure with
the necessary details, and invokes the appropriate method
(e.g., handlePost() or handleGet() methods in HttpServlet)

> How is standard input (for POST method) passed to the class
> instance?? How is standard output for all the different threads kept
> separate?? Are formal input and output channels/streams passed
> explicitly to the class instance? Do you know where to find a formal
> specification of Java servlets which immediately answers such
> questions before getting into the details under those major issues?

Sun provides the Java Servlet specification at
  http://java.sun.com/products/servlet/index.html

(Disclaimer: All the above is to the best of my knowledge and
recollection). 
-- 
I'm awfully glad I'm a Beta, because I don't work so hard.
From: ··········@YahooGroups.Com
Subject: Re: Where to start
Date: 
Message-ID: <REM-2003sep02-002@Yahoo.Com>
{{Date: 01 Sep 2003 18:22:18 -0700
  From: Brian Palmer <·······@rescomp.Stanford.EDU>
  2) everything ending in .pl is interpreted as a perl script}}

Is that the same as saying it's a CGI script where perl is the
scripting language? Or is this something totally different from CGI,
i.e. using some protocol other than CGI for communicating with the perl
application?

So is there any way an ordinary user on a shell account with Apache
server can learn what the specific rules are on that shell machine, so
that the user knows what he needs to do to set up a servlet on his Web
space? By comparison, to set up a HTML WebPage, all he needs to do is
put the file on his public HTML subdirectory, or any subdirectory
thereof, with group/other read priviledge on the file and on all
directories from the public HTML directory thru the one with the file,
and have the extension be .html. All he needs to do to set up a CGI
program is put it on his cgi-bin subdirectory, with extension .cgi, and
first line of file telling what program is to run the script. But for
setting up a servlet, you seem to say there's no way a user can do it
without extra special knowledge about the particular configuration of
his ISP??

{{The way the Apache/Tomcat combination works typically is Apache is
  used just long enough to decide to hand off a request to Tomcat (the
  servlet engine). Tomcat then has its own rules ...}}

How can a user on a shell machine of an ISP learn whether his
particular machine has Tomcat in the first place? (It's easy to learn
it has Apache, because when I use lynx to view one of my own WebPages
and then click the = command to see the current and selected URLs it
shows the current server also:
     Server: Apache/1.3.26 (Unix) mod_macro/1.1.1
There's no mention of Tomcat there, as you see.)

{{the servlet engine reads the input stream, fills in a data structure
  with the necessary details, and invokes the appropriate method}}

So all the form contents, and other info which in CGI would be in
environment variables, is instead copied into fields within a data
structure, and the handle of that structure is passed as a parameter to
the method (function) within the servlet? Do you know where on the Web
can be found the formal definition of the class of that data structure,
or the name of that class (for Java servlets) so that I could find it
via a search engine?

{{invokes the appropriate method (e.g., handlePost() or handleGet()
  methods in HttpServlet)}}

When you say HttpServlet, is that a placeholder for the actual name of
the particular servlet, or is the literally the name of the class which
is instantiated. If the latter, how does control actually pass to the
user's particular servlet?

{{Sun provides the Java Servlet specification at
  http://java.sun.com/products/servlet/index.html}}

Hmm, looking in there, there's a long blurb about how great it is, then
the only thing I see that looks like a spec is:
   Java Servlet Specification 2.4 Proposed Final Draft 3 is now
   available.
Going in there, I see:
     * Download Java Servlet 2.4 JSR-154 Proposed Final Draft 3
       Specification. Any use or implementation of this Specification is
       subject to this License agreement. continue
     * Download JavaDoc Documentation
       continue
Going into the continue of the first of those, I see:
                             ACCEPT    DECLINE
Going into ACCEPT, I see:
   2.4 Proposed Final Draft 3
     * Download servlet-2_4-pfd3-spec.pdf .
       Filesize = 1,815,567 bytes.
I have no way to view pdf files, so this does me no good.
From: Brian Palmer
Subject: Re: Where to start
Date: 
Message-ID: <0wh4qzsune2.fsf@rescomp.Stanford.EDU>
··········@YahooGroups.Com writes:

> {{Date: 01 Sep 2003 18:22:18 -0700
>   From: Brian Palmer <·······@rescomp.Stanford.EDU>
>   2) everything ending in .pl is interpreted as a perl script}}
> 
> Is that the same as saying it's a CGI script where perl is the
> scripting language? Or is this something totally different from CGI,
> i.e. using some protocol other than CGI for communicating with the perl
> application?

Ah, yeah, at least typically. I was just being sloppy. 
 
> So is there any way an ordinary user on a shell account with Apache
> server can learn what the specific rules are on that shell machine, so
> that the user knows what he needs to do to set up a servlet on his Web
> space? 

A servlet requires a servlet engine; a hosting company will probably
trumpet loud and clear any servlet engine that they've provided it,
since they're not particularly common. (They require a lot of
resources if a separate process is run per user, and have possible
security issues if every user is run under the same JVM).

If you can access httpd.conf, you might look for strings like
'ApJServ'; that would be an indication that Apache is hooked in with
Tomcat (or Apache JServ, a predecessor to Tomcat). 

You can download Tomcat (http://jakarta.apache.org/tomcat) and try it
out yourself, just using an unprivileged port. It occupies 28 MB in my
account, but it looks like about 20MB of that is documentation, most
of which is probably online elsewhere.
 
> How can a user on a shell machine of an ISP learn whether his
> particular machine has Tomcat in the first place? (It's easy to learn
> it has Apache, because when I use lynx to view one of my own WebPages
> and then click the = command to see the current and selected URLs it
> shows the current server also:
>      Server: Apache/1.3.26 (Unix) mod_macro/1.1.1
> There's no mention of Tomcat there, as you see.)

Easiest way is probably to just ask the ISP.
 
> {{the servlet engine reads the input stream, fills in a data structure
>   with the necessary details, and invokes the appropriate method}}
> 
> So all the form contents, and other info which in CGI would be in
> environment variables, is instead copied into fields within a data
> structure, and the handle of that structure is passed as a parameter to
> the method (function) within the servlet? Do you know where on the Web
> can be found the formal definition of the class of that data structure,
> or the name of that class (for Java servlets) so that I could find it
> via a search engine?

The JavaDocs for the Servlet API is at 
  http://jakarta.apache.org/tomcat/tomcat-4.1-doc/servletapi/index.html

I don't know how normative they are, and it's not a really formal
write-up; but they're fairly clear on the rough details. These are
almost entirely interfaces; that is, they specify a contract of
methods that the actual implementation has to support, so you don't
see the data storage or implementation details. But they do describe
the desired semantics.

> 
> {{invokes the appropriate method (e.g., handlePost() or handleGet()
>   methods in HttpServlet)}}
> 
> When you say HttpServlet, is that a placeholder for the actual name of
> the particular servlet, or is the literally the name of the class which
> is instantiated. If the latter, how does control actually pass to the
> user's particular servlet?

That's an actual (abstract) class, itself an implementation of the
Servlet interface. A servlet programmer will subclass HttpServlet
to do the required job. Entry into the servlet is done via methods
such as doGet(HttpServletRequest,HttpServletResponse) and
doPost(HttpServletRequest,HttpServletResponse) (invoked on an HTTP GET
or POST request respectively). 
 
> {{Sun provides the Java Servlet specification at
>   http://java.sun.com/products/servlet/index.html}}
> 
> Hmm, looking in there, there's a long blurb about how great it is, then
> the only thing I see that looks like a spec is:
>    Java Servlet Specification 2.4 Proposed Final Draft 3 is now
>    available.
> Going in there, I see:
>      * Download Java Servlet 2.4 JSR-154 Proposed Final Draft 3
>        Specification. Any use or implementation of this Specification is
>        subject to this License agreement. continue
>      * Download JavaDoc Documentation
>        continue
> Going into the continue of the first of those, I see:
>                              ACCEPT    DECLINE
> Going into ACCEPT, I see:
>    2.4 Proposed Final Draft 3
>      * Download servlet-2_4-pfd3-spec.pdf .
>        Filesize = 1,815,567 bytes.
> I have no way to view pdf files, so this does me no good.

Ah, I sympathize, but I believe Sun only provides specifications in
PDF format. You'll have to make do with the JavaDocs or HTML tutorials
provided elsewhere, I think. Alternatively, there are programs
'pdftotext' and similar, which attempt to extract text out of a pdf
file. 


-- 
I'm awfully glad I'm a Beta, because I don't work so hard.
From: ··········@YahooGroups.Com
Subject: Re: Where to start
Date: 
Message-ID: <REM-2003aug22-002@Yahoo.Com>
{{Date: Mon, 18 Aug 2003 11:08:47 -0500
  From: ····@rpw3.org (Rob Warnock)
  At worst there are multiple HTTP requests at about the same time,
  each of which results in a CMUCL MAKE-PROCESS (green thread
  creation).}}

My intuition says that making a new process directly from a saved core
image, sharing pages with core image and all other processes made from
the same core image, and making a new process directly from a running
program, sharing pages with that original program and with all other
processes forked from the same running program, should require nearly
the same resources (CPU cycles, page faults, etc.). Are you saying
that, in fact, forking a process from a running program is much more
efficient than forking a process from a saved core image? Can you, or
somebody, explain why?

By the way, do you have your own machine as server, where you are
allowed to do virtually anything you want regardless of machine load,
or are you doing this as a single user on an ISP shell account? As just
one user on a shell account I'm afraid to set up any persistent process
for fear it'd be considered unfair use of the shared shell machine
beyond what my single-user account should allow. Likewise I'm afraid to
fork new processes in response to users of my CGI software (other than
the one automatically created by Apache/1.3.26 (Unix) mod_macro/1.1.1
to handle each CGI request).

{{Both of my current clients were people I already knew.}}

Unfortunately I don't already know anybody, at least not anybody who
knows anything about computers and has any money to hire anybody, so
that option isn't open to me.

{{You need to buy/read a 2003 edition of "What Color Is My Parachute".}}

How would that be significantly better than the one I started reading
many years ago, where I'm supposed to call all my friends and neighbors
to invite them over to help me find a job, but I don't have any friends
and don't know even one neighbor so basically I call the empty list of
people and am right back where I started?
(LET ((FRIENDS NIL) (NEIGHBORS NIL))
  (MAPCAR #'INVITE (APPEND FRIENDS NEIGHBORS)))

{{personal contacts with former employers & co-workers}}

I don't know how to contact any such.

{{friends}}

I don't have any.

{{family}}

I don't have any in this area. My father is 83 years old and afraid of
computers, and my sister has hated me ever since we were children, both
in Oregon.

{{old school chums}}

I don't have any.

{{people you hike/bike/camp/play with}}

I don't have any.

{{people you work with on charities, political parties}}

I don't have any, except people on the net I've never met in person.

{{It's all word-of-mouth}}

Unfortunately I don't know how to meet anyone who will even look at my
work, except for the instructor in my VB class who of course looked at
my VB classwork. I don't know how to meet somebody to start the chain
of word-of-mouth from one person to another except that one VB
instructor who referred me to the only job he knew about, software
testing, not programming.

{{Go to ILC. Get known in person.}}

Where is that? If it costs money, or is more than a few miles from
where I live, I can't afford to go.

{{Come to Bay Area Lispniks meetings.}}

Where is that? I'm located near the south end of the bay. I did Google
searches (Web and Groups), and it seems to be centered in Oakland and
Berkeley. Is there anybody in the SouthBay, other than myself, who has
any interest in LISP?

{{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}}

I already did that in early 2001. In two years I found only two RL
people willing to even look at it. Then in late 2002 I found two more
RL people willing to look at it, so I added some new stuff to show
them, but they lost interest and I never found anyone else interested
in looking at it.

{{talk it up with people you meet}}

I don't know how to meet anyone who has the slightest interest in
computers in any way except word processing and other stuff totally
unrelated to what I've done.

{{and even consider doing (small amounts of) real work using it for
  free [but ask for "resume credits"], just to show people you can.}}

I've been offering that for several years but haven't found anyone who
wanted me to program anything for them. Not one person looking at my
CGI site has suggested something they'd like me to add to my site.

Your signature: {{Rob Warnock ... San Mateo, CA}}

I see you're slightly closer to me than the folks in Oakland.
Do you know any LISP people, other than Bill Gosper, anywhere in the
SouthBay area?
From: Rob Warnock
Subject: Re: Where to start
Date: 
Message-ID: <FEydnRdnHdp90NqiXTWc-w@speakeasy.net>
<··········@YahooGroups.Com> wrote:
+---------------
| > From: ····@rpw3.org (Rob Warnock)
| > At worst there are multiple HTTP requests at about the same time,
| > each of which results in a CMUCL MAKE-PROCESS (green thread
| > creation).}}
| 
| My intuition says that making a new process directly from a saved core
| image, sharing pages with core image and all other processes made from
| the same core image, and making a new process directly from a running
| program, sharing pages with that original program and with all other
| processes forked from the same running program, should require nearly
| the same resources (CPU cycles, page faults, etc.). Are you saying
| that, in fact, forking a process from a running program is much more
| efficient than forking a process from a saved core image? Can you, or
| somebody, explain why?
+---------------

Read very carefully where I noted that CMUCL so-called "processes"
are in fact "green threads", that is, they are actually *within*-process
coroutines, and don't "fork" anything at all. All they do it create a
new stack, basically. That's it. So, yes, that's a *LOT* faster than
using Unix "fork(2)" or POSIX threads (pthreads).

+---------------
| By the way, do you have your own machine as server, where you are
| allowed to do virtually anything you want regardless of machine load...
+---------------

Yes. My SDSL ISP (Speakeasy) puts no filters/restrictions on server ports.

+---------------
| As just one user on a shell account I'm afraid to set up any persistent
| process for fear it'd be considered unfair use of the shared shell machine
| beyond what my single-user account should allow.
+---------------

As well you should be. Such things are usually explicitly prohibited by
the terms of service of shell accounts.

+---------------
| Likewise I'm afraid to fork new processes in response to users of my
| CGI software (other than the one automatically created by Apache/1.3.26
| (Unix) mod_macro/1.1.1 to handle each CGI request).
+---------------

Well, there you're being a little *too* conservative, I suspect.
Look, classic CGI was *Bourne shell* scripts, where every little
thing you wanted to do (cat, sed. awk, grep, sort) forked another
Unix process, right? So I wouldn't worry much about that level, as
long as none of them go into the background and become persistent.

By the way, <URL:http://alu.cliki.net/Lisp-friendly%20Web%20Hosting>
contains several pointers to "Lisp-friendly web hosting services".
The "Zill.net" one in particular looks *very* attractive for someone
on a modest budget, if you don't or can't run your own server.

+---------------
| Unfortunately I don't already know anybody, at least not anybody who
| knows anything about computers and has any money to hire anybody, so
| that option isn't open to me.
+---------------

See next item.

+---------------
| {{You need to buy/read a 2003 edition of "What Color Is My Parachute".}}
| 
| How would that be significantly better than the one I started reading
| many years ago, where I'm supposed to call all my friends and neighbors
| to invite them over to help me find a job...
+---------------

I suspect you misread slightlywhat the book said. You don't "invite them
over to help [you] find a job", rather, you ask them if they might *know*
anyone who knows anyone, etc. That way, you're not imposing directly on
them, and they tend to be much more helpful. This recent Business Week
article has more to say about that:

   http://yahoo.businessweek.com/careers/content/aug2003/ca20030821_5349.htm
   "Handy Hints for the Smart Job-Seeker"

Look especially closely at his last point:

   Ask not for what you want.
   Successful networkers never ask their network contacts for a job
   because they know that such a request generally doesn't produce
   the desired result. ... That's why smart job-seekers request an
   appointment with the avowed intention of seeking advice regarding
   how to advance their search or seeking new contacts. Such requests
   are much harder to deny. ...

+---------------
| ...but I don't have any friends and don't know even one neighbor
| so basically I call the empty list of people and am right back
| where I started?
+---------------

Fine. Seems like you basically have two choices then:

(1) Define the problem as insolvable, give up, lie down, & die; or

(2) Go *MEET* your neighbors, knock on doors, go to job fairs,
    go to bars [if that's your thing] and talk to random people,
    go to local Lispniks meetings, go to local Linux & {Free,Net,Open}BSD
    meetings [there are a *LOT* of such things every month in the Bay area].
    Heck, even just go hang out at Fry's and strike up conversations with
    people in the aisles!! (Beats sitting at home moaning...)

NO ONE WILL COME TO YOU! You must go find *them*... and through them
find more... and through them find more... until you find a job.

+---------------
| Unfortunately I don't know how to meet anyone who will even look
| at my work...
+---------------

Forget having anyone "look at your work" at this point; it sounds
like you're a *LONG* way from that. What you need to do first is to
establish decent human contacts with people, *not* to "give you a job",
but to gain access to people *they* know, and in turn to people they
know, and so on, probably to a depth of 4 or 5 or more, until you
finally find a few "leaves" who actually have or know about jobs.

Yes, that's probably over 100 people. That's the kind of networking
it take to find work these days. Or to put it another way, finding
a job is *itself* a full-time job, and one had best be prepared to
spend ~8 hrs/day on it, every day, for months on end.

Sorry if that comes as a shock, but things have changed dramatically
since the roaring dot.com days when you could leave one job and walk
across the street to another. That's why I sugegsted that you buy the
*2003* edition of "What Color Is My Parachute" -- he updates the book
every year or so, and the current version *does* reflect the harsh
realities of the post-dot.bomb job situation.

+---------------
| {{Come to Bay Area Lispniks meetings.}}
| 
| Where is that? I'm located near the south end of the bay. I did Google
| searches (Web and Groups), and it seems to be centered in Oakland and
| Berkeley.
+---------------

So? Once a month or so drive to Berkeley for dinner. What, an hour
each way? Is that so bad? Or take CalTrain to The City and then BART
across the Bay; the dinners are always close to a BART station.

+---------------
| Is there anybody in the SouthBay, other than myself, who has
| any interest in LISP?
+---------------

Not that I know of personally. [Oh, SRI does some Lisp stuff, but I
really can't speak for them. Though some of them docome to Lispniks
meetings sometimes, so if you show up there you might be able to talk
to them...]


-Rob

-----
Rob Warnock, PP-ASEL-IA		<····@rpw3.org>
627 26th Avenue			<URL:http://rpw3.org/>
San Mateo, CA 94403		(650)572-2607
From: ··········@YahooGroups.Com
Subject: Re: Where to start
Date: 
Message-ID: <REM-2003aug30-014@Yahoo.Com>
{{Date: Sat, 23 Aug 2003 06:20:00 -0500
  From: ····@rpw3.org (Rob Warnock)
  Read very carefully where I noted that CMUCL so-called "processes"
  are in fact "green threads"}}

That phrease is meaningless to me. In all my years of programming
computers, I never saw it mentionned. So when you said it in the
earlier article in this thread, I must have ignored it, where I took
the word "green" to mean like "green wood" which is wood which isn't
yet dried, just as it comes off the tree, so in this context it would
mean the same as "virgin" i.e. all pure pages just as they came off the
coreimage disk file that was mapped into memory, nothing modified yet
so all pages still shared with disk file. Since that's what I would
expect on any good system, it didn't stand out as anything to pay extra
attention to the specific wording.

{{that is, they are actually *within*-process coroutines, and don't
  "fork" anything at all. All they do it create a new stack, basically.
  That's it. So, yes, that's a *LOT* faster than using Unix "fork(2)"
  or POSIX threads (pthreads).}}

Oh. So they share stdin/stdout and all other streams and environment
variables etc.? So how can each one somehow handle a different HTTP
request, given that stdin or an environment variable is how the POST or
GET methods respectively pass their form contents via CGI to the server
process?

Of course all this is at present moot for me because I'm just a single
user on a shell machine, so I can't do the major stuff that you can do
on your own private machine. All I can do is demo my CGI applications
for very small numbers of people to try at any one time, and hope
somebody likes my stuff enough to provide me with facilities to
implement it on a grander scale where tens or hundreds of people can
use my program at the same time. But I'm generally curious about
various ways to configure WebServer applications in case I ever do get
such facilities to install applications bigtime instead of just small
demo.

{{there you're being a little *too* conservative, I suspect. Look,
  classic CGI was *Bourne shell* scripts, where every little thing you
  wanted to do (cat, sed. awk, grep, sort) forked another Unix process,
  right? So I wouldn't worry much about that level, as long as none of
  them go into the background and become persistent.}}

Well I'm not being quite *that* paranoid. Basically I allow my code to
fork one instance of each kind of process, i.e. one HTTP server
instance per connection, one shell script under that, one CMUCL program
under that, and under CMUCL one at a time (via ext:run-program) of
anything my application needs to do via running a Unix utility to do
some task that I don't feel like re-coding inside CMUCL. Note that
ext:run-program with arguments already evaluated is much more
programmer-friendly than shell-wildcard expanded with all the hairy
contortions of escape characters and quote marks that never quite work
except in simple cases.

One variation I considered but haven't yet gotten around to programming
is a persistant application that is explicitly under my dialup account,
not a daemon, so I have to start it when I log in and want to show
demos to people on the net, and it goes away when I log out. That way
I'd have the advantage of reducing consumption of resources, but not
the red flag of a detached task running hours after I was last logged
in. But with no more than one person trying my demo every few months,
it's just not worth the programming effort, and startup hassle.

One thing I'd really like to set up is a pure-HTML chat room that
actually works, so I could chat via lynx with people who don't have
IRC. (HTML chat in Yahoo Clubs/Groups has never worked at all, and HTML
chat on healthyplace.com is so grossly user-unfriendly that it's
worthless, like each time you post it shows what was said in the room
up to that point, but there's no way to see anything in response to
what you post except to blindly re-post what you said before and then
you see what happened between the two copies but don't see all the
complaints after your duplicate post, and most of the time you re-post
too early and there was nothing at all yet, or you wait too long and
the person who replied has already given up waiting and gone offline.
My proposed HTML chat would hang waiting for something else in the
room, or until you press the STOP button on your browser, which is the
'z' command in lynx, so if somebody does indeed respond the lynx user
will see it immediately, and then you can reply promptly before the
other user goes offline. I would even have it beep the moment something
comes in from another user in the room, if there's a way in HTML to
make lynx beep. But with not a single person in the past two years
expressing an interest in chatting with me online, it would be a waste
of my energy to try to program it, and impossible to actually test it
in practice.)

{{I suspect you misread slightly what the book said. You don't "invite
  them over to help [you] find a job", rather, you ask them if they
  might *know* anyone who knows anyone, etc. That way, you're not
  imposing directly on them, and they tend to be much more helpful.}}

So regarding the total strangers I've never ever spoken to, and have no
idea even whether they speak English, who happen to live within walking
distance of where I live: Should I walk up and down the street knocking
on their doors, and when they answer I say "Hi. My name is Robert, and
I live in the apartment complex over there *point*, and I was wondering
if you would tell me your name and phone number, and the name and phone
number of anyone you know who lives or works within five miles of here
who would be willing to help me find a job so I won't become homeless
in a few months?"

{{smart job-seekers request an appointment with the avowed intention of
  seeking advice regarding how to advance their search or seeking new
  contacts.}}

So after the neighbor tells me the name and phone number of her friend
who lives three miles away, I should call that friend and tell her the
name and address of my neighbor who referred me to her, and then ask
her if I can get an appointment to come over to her home to ask her
for advice about my career?

{{Go *MEET* your neighbors, knock on doors}}

Most people don't appreciate middle-age men coming to their door
without any invitation and asking to meet them and become friends.

{{go to job fairs}

I've gone to WesTech, now BrassRing, many times, and never once have I
been able to convince anyone to give me an interview or anything else
in the way of further contact except for e-mailing or FAXing my resume
to their HR blackhole.

{{go to bars [if that's your thing]}}

The strong smell of alcohol makes me sick, and the smell of even the
slightest bit of cigarette smoke makes me very sick, so that's not an
option.

{{and talk to random people}}

You mean dial random numbers on the phone just like telemarketers?

{{go to local Lispniks meetings}}

How can I learn of ones in my local area? (I assume they are free.)

{{go to local Linux & {Free,Net,Open}BSD meetings [there are a *LOT* of
  such things every month in the Bay area].}}

I have absolutely no money for anything like that, so are they free?
If free, same as previous question.

{{Heck, even just go hang out at Fry's and strike up conversations with
  people in the aisles!!}}

Oh great, loiter in Fry's without buying anything until security
notices I've been there for hours and orders me to leave and never come
back. Sure, that sounds like a great plan, not.

{{What you need to do first is to establish decent human contacts with
  people}}

I don't know how to do that. I can talk to a stranger in a public place
for up to an hour and a half, and never have any chance of seeing that
person again. There's only one person like that I ever saw again, once
two days after I saw her the first time in 1999, name "Chandel", age
19, and I couldn't talk to her the second time because she was waiting
for her boyfriend to show up for a date and I was too decent a guy to
risk messing up her date by being seen with her when her boyfriend
shows up. Anyway, people around this part of California don't give
their phone number to random strangers who approach them on the street
or in a mall or in a supermarket or in a library or anywhere else I
might find strangers for talking with them, and I don't think they'd
give the phone numbers of their friends to random strangers either.

{{that's probably over 100 people. That's the kind of networking it
  take to find work these days.}}

I already talked to a lot more than that number people back when there
wasn't a recession, and got not a single good job lead the whole time.

{{finding a job is *itself* a full-time job, and one had best be
  prepared to spend ~8 hrs/day on it, every day, for months on end.}}

I already did it full time from when I got laid off in 1991 for several
years until I was totally burned out from exhaustion and frustration of
not a single interview since the 4-hour one in late 1993 and the
regular one in mid/late 1994. I have a complete record of my SeekJob
contacts up to 1998.Dec.16 when I couldn't handle the stress of total
frustration and exhaustion any more and I had to give up to avoid a
nervous breakdown. I tried to find somebody to look at my complete
record and tell me what I was doing wrong so I could fix my strategy
and maybe start again, but nobody ever was willing to look at my
records, so I still have no idea why more than seven years of fulltime
SeekJob was a total failure. It's really not cool of you to tell me I
need to do it for months when I already did it for years without
success.

{{things have changed dramatically since the roaring dot.com days when
  you could leave one job and walk across the street to another.}}

That's fine for you lucky guys who were already employed during that
time and could switch jobs at leisure. But that just is rude for you to
gloat over people like me who didn't already have a job and were
rejected by all the dot.com employers because we didn't have any paid
recent work on our resumes.

{{That's why I sugegsted that you buy the *2003* edition of "What Color
  Is My Parachute"}}

I don't have any money to buy books.

{{the current version *does* reflect the harsh realities of the
  post-dot.bomb job situation.}}

I don't need to read in his book. I already know things are even worse
now than they were from 1991 to 1998 when there were no jobs either.

{{Once a month or so drive to Berkeley for dinner.}}

I do not believe anyone will provide me with a free dinner if I drive
to Berkeley to get it, so stop throwing crap at me.

No, I don't have any money for food either. My only source of food is
the local food bank, and a soup kitchen if I happen to be in San Jose
at 4PM and I feel like crowding togetether with a bunch of homeless men
to get a free meal. Most of the food I get from the food bank isn't
easily transportable after it's opened, such as cans of fruit or
vegetables, so I wouldn't be able to take my own "picnic" dinner to
Berkeley and eat it in the restaurant, even if restaurant management
would allow such a trick in the first place.
From: Thomas F. Burdick
Subject: Re: Where to start
Date: 
Message-ID: <xcvisodwwme.fsf@famine.OCF.Berkeley.EDU>
··········@YahooGroups.Com writes:

> {{Date: Sat, 23 Aug 2003 06:20:00 -0500
>   From: ····@rpw3.org (Rob Warnock)
>   Read very carefully where I noted that CMUCL so-called "processes"
>   are in fact "green threads"}}
> 
> That phrease is meaningless to me. In all my years of programming
> computers, I never saw it mentionned. So when you said it in the
> earlier article in this thread, I must have ignored it, where I took
> the word "green" to mean like "green wood" which is wood which isn't
> yet dried, just as it comes off the tree, so in this context it would
> mean the same as "virgin" i.e.
[snip]

If you see an odd term, it's usually best to google it, rather than
make up a meaning yourself.  We all do the latter sometimes, but when
we get it wrong, we need to admit that it was *our* mistake.

> But I'm generally curious about various ways to configure WebServer
> applications in case I ever do get such facilities to install
> applications bigtime instead of just small demo.

So, go read about it.  God knows there are too many books on the
subject, and plenty of web resources.  Hell, just ask on the Lisp-web
list how everyone prefers to do some aspect <X> of putting an app up
on the web, and you're likely to get a bunch of answers.

> One variation I considered but haven't yet gotten around to programming
> is a persistant application that is explicitly under my dialup account,
> not a daemon, so I have to start it when I log in and want to show
> demos to people on the net, and it goes away when I log out. That way
> I'd have the advantage of reducing consumption of resources, but not
> the red flag of a detached task running hours after I was last logged
> in. But with no more than one person trying my demo every few months,
> it's just not worth the programming effort, and startup hassle.

This is a common approach that Lispers take (except for the bit where
you stop it when you log out), because we want to be able to get to
the repl.  Thus, eg, detatchpty -- personally, I just use screen.

> {{go to bars [if that's your thing]}}
> 
> The strong smell of alcohol makes me sick, and the smell of even the
> slightest bit of cigarette smoke makes me very sick, so that's not an
> option.

Uhhhhhhhh ... it's been several years now that it's been illegal to
smoke in most bars in California.  How did you miss that?

> {{go to local Lispniks meetings}}
> 
> How can I learn of ones in my local area?

Watch this space.

> (I assume they are free.)

There's no enterance fee, if that's what you mean.  They're generally
held at normal places for socializing, where there's food and/or drink
-- but I'm sure no one would care if there's one or two peole in a
group who are on a tight budget.

> {{What you need to do first is to establish decent human contacts with
>   people}}
> 
> I don't know how to do that.

Well, maybe you should take advantage of some of the fine social
services we have in the great nation^[w state of California.  If
you've been unemployed for so long, you certainly qualify for lots of
free assistance, including counseling services for socialization, and
employment.  There's no shame in using them, only in not using them,
when they could help you get on your feet.  Same goes for wellfare.

> Anyway, people around this part of California don't give their phone
> number to random strangers who approach them on the street or in a
> mall or in a supermarket or in a library or anywhere else I might
> find strangers for talking with them, and I don't think they'd give
> the phone numbers of their friends to random strangers either.

I can personally attest to that not being the case.  If you meet
someone who's interested in something you're interested in, there's
nothing creepy about asking for a number or e-mail.  BTW, add cafes to
your list of places to meet people.

> 
> I do not believe anyone will provide me with a free dinner if I drive
> to Berkeley to get it, so stop throwing crap at me.
> 
> No, I don't have any money for food either. My only source of food is
> the local food bank, and a soup kitchen if I happen to be in San Jose
> at 4PM and I feel like crowding togetether with a bunch of homeless men
> to get a free meal. Most of the food I get from the food bank isn't
> easily transportable after it's opened, such as cans of fruit or
> vegetables, so I wouldn't be able to take my own "picnic" dinner to
> Berkeley and eat it in the restaurant, even if restaurant management
> would allow such a trick in the first place.

So maybe, before looking for a job programming, you should look for a
job that's easier to get.  Personally, I program 1/2 the time, and
make espresso drinks the other 1/2.  Working 50-60 hours/week in a
warehouse, or as a driver, or in the service industry would get you
some of this money you don't have, that makes your prospects look so
bleak.  Make programming a hobby for a bit, and do other stuff for
work.  Then, when you're on your feet, try to jump back into the
industry.

-- 
           /|_     .-----------------------.                        
         ,'  .\  / | No to Imperialist war |                        
     ,--'    _,'   | Wage class war!       |                        
    /       /      `-----------------------'                        
   (   -.  |                               
   |     ) |                               
  (`-.  '--.)                              
   `. )----'                               
From: ··········@YahooGroups.Com
Subject: Re: Where to start
Date: 
Message-ID: <REM-2003sep01-014@Yahoo.Com>
{{Date: 31 Aug 2003 10:43:53 -0700
  From: ···@famine.OCF.Berkeley.EDU (Thomas F. Burdick)
  just ask on the Lisp-web list how everyone prefers to do some aspect
  <X> of putting an app up on the web, and you're likely to get a bunch
  of answers.}}

Spam has pretty much killed the use of mailing lists, if that's what
you are talking about. On a system without a spam filter, both the
thousand spam and the two mailing-list messages are mixed together and
it takes several hours of deleting spam before I can find the two
mailing list messages and by that time I'm too burned out to understand
anything. On a system with a spam filter, such as Yahoo, mailing list
messages randomly get diverted to bulk mail folder, so I then have to
look two places (inbox an bulk mail) to find the two mailing list
messages among all the spam.

I'm not comfortable posting a question to a mailing list I can't read
myself and asking everyone to reply privately to me instead of to the
list.

Is there a BB equivalent of Lisp-web, where I could browse threads via
the Web and thereby not have to subscribe to a mailing list with all
the spam problems, and where I could post my question via the Web, like
a Yahoo Group?

{{> {{go to local Lispniks meetings}}
  > How can I learn of ones in my local area?
  Watch this space.
  > (I assume they are free.)
  There's no enterance fee, if that's what you mean.}}

But would the people treat me weirdly if I didn't buy anything, and the
only thing I had to eat myself was dried raisins I brought from the
food bank?

Is parking free there? I have no money for parking.

{{Well, maybe you should take advantage of some of the fine social
  services we have in the great nation^[w state of California.  If
  you've been unemployed for so long, you certainly qualify for lots of
  free assistance, including counseling services for socialization, and
  employment.}}

I've searched for the social stuff for more than twenty years without
any luck finding any help. I've searched for employment help since I
got laid off in 1991, again without any help. It wasn't until just last
Winter that Focus for Work of Catholic Charities finally allowed me to
get into their services, but as it turned out after the class about
preparation for an interview, there was nothing else offered, no help
actually finding any company to interview me, so all the preparation
for an interview was wasted. In June they finally convinced the
department of Rehab to put me on plan, after I applied for their
services back in 1995, and they put me through two classes during
Summer session (beginning C, and Visual Basic, the former merely as
prerequisite for later class in C which is prerequisite for class in
Java, the VB because of job ads that require it, but it turned out to
be nothing more than a variant of HyperCard which is a dead-end because
you can't generate native code, you have to port the entire HC or VB
runtime environment with your application).

{{If you meet someone who's interested in something you're interested
  in, there's nothing creepy about asking for a number or e-mail.}}

In any case, they always refused to give me any contact info, even
after a 1.5 hour conversation where we had really good rapport.

{{before looking for a job programming, you should look for a job
  that's easier to get.}}

I've been trying that for all the 12 years I've been unemployed, but
haven't found any job that I qualify for. What would you suggest, where
there currently really are entry-level jobs that might take me?

{{Working 50-60 hours/week in a warehouse}}

Would they hire me with a flattened spinal disk so I can't life more
than 10 or 20 pounds without my back giving out, and can't stand more
than about 10 minutes before my back starts hurting?

{{or as a driver}}

I don't have the right kind of license for that.
Also I have trouble judging distance and have to drive slowly and allow
extra distance from parked cars because it looks like I'm hitting them
if I'm closer than two or three feet from them.

{{or in the service industry}}

What kind of service??
From: Thomas Stenhaug
Subject: Re: Where to start
Date: 
Message-ID: <m27k4rrnvb.fsf@lian.src.no>
··········@YahooGroups.Com writes:

> Is there a BB equivalent of Lisp-web, [...]

You might want to have a look at http://gmane.org/


Thomas
From: Brian Downing
Subject: Re: Where to start
Date: 
Message-ID: <auq4b.318288$uu5.65408@sccrnsc04>
In article <·················@Yahoo.Com>,  <··········@YahooGroups.Com> wrote:
> ...help me find a job so I won't become homeless in a few months?"

> I already talked to a lot more than that number people back when there wasn't
> a recession, and got not a single good job lead the whole time.
 
> I don't have any money to buy books.

> No, I don't have any money for food either. My only source of food is the
> local food bank, and a soup kitchen if I happen to be in San Jose at 4PM and
> I feel like crowding togetether with a bunch of homeless men to get a free
> meal. Most of the food I get from the food bank isn't easily transportable
> after it's opened, such as cans of fruit or vegetables, so I wouldn't be able
> to take my own "picnic" dinner to Berkeley and eat it in the restaurant, even
> if restaurant management would allow such a trick in the first place.

This is probably the wrong place for this, and I (being very lazy and inertial
myself) am almost certainly the wrong person, but:

It sounds like you need to quit worrying about finding the perfect Lisp job and
get any job at all.  Forget about your computer skills - they're great to have,
but not if you're homeless and starving.  They're not going to go away if the
first job you get doesn't use them.

Get a job moving boxes around or delivering for UPS or something.  And if you
have a physical disability, hell, work at McDonald's!  It may seam demeaning,
but it's better than starving, and eventually you will have money to buy books,
go to restaurants, and network.  You don't even have to put it on your resume in
the future, although I suspect employers understand how tight the job market is
right now.  And then you can work on getting a better job in your spare time,
and not approach breakdown because you're worried about where tomorrow's food
is coming from.

And then, when you have some money and insurance, get some counseling.  There
is absolutely no shame in it; I went to counseling for about a year two years
ago, and it helped me a lot.  I had social issues as well, and it can really
help.  Life is way too short to be miserable throughout it.

-bcd
-- 
*** Brian Downing <bdowning at lavos dot net> 
From: ··········@YahooGroups.Com
Subject: Re: Where to start
Date: 
Message-ID: <REM-2003sep01-015@Yahoo.Com>
{{Date: Sun, 31 Aug 2003 17:44:38 GMT
  From: Brian Downing <·············@lavos.net>
  It sounds like you need to quit worrying about finding the perfect
  Lisp job and get any job at all.}}

I've been doing that ever since I became unemployed in 1991, in
parallel with occasionally checking for LISP jobs and never finding any
(except for one AutoCAD-LISP job opening in late 1991 where I got
interviewed but not hired).

{{Get a job moving boxes around}}

I have a flattened spinal disk so I don't think they'd hire me to move
only boxes that were less than ten pounds.

{{or delivering for UPS or something.}}

Same problem??

{{And if you have a physical disability, hell, work at McDonald's!}}

I already applied at McDonald's but they refused to hire me because I
had a college degree. Now with 22+ years programming experience they'd
reject me even faster, especially with my flattened spinal disk which I
didn't have when I tried the first time but do now.
From: Marc Spitzer
Subject: Re: Where to start
Date: 
Message-ID: <86vfsdyybj.fsf@bogomips.optonline.net>
··········@YahooGroups.Com writes:

> So regarding the total strangers I've never ever spoken to, and have no
> idea even whether they speak English, who happen to live within walking
> distance of where I live: Should I walk up and down the street knocking
> on their doors, and when they answer I say "Hi. My name is Robert, and
> I live in the apartment complex over there *point*, and I was wondering
> if you would tell me your name and phone number, and the name and phone
> number of anyone you know who lives or works within five miles of here
> who would be willing to help me find a job so I won't become homeless
> in a few months?"

I do not think that will work.

> 
> {{smart job-seekers request an appointment with the avowed intention of
>   seeking advice regarding how to advance their search or seeking new
>   contacts.}}
> 
> So after the neighbor tells me the name and phone number of her friend
> who lives three miles away, I should call that friend and tell her the
> name and address of my neighbor who referred me to her, and then ask
> her if I can get an appointment to come over to her home to ask her
> for advice about my career?

no but your local unemployment office has people who will help you
find a job, it is their job to do so.  Also when you see said
counselor ask them if they know of any other programs that can help
you and follow up with them.

> {{go to local Lispniks meetings}}
> 
> How can I learn of ones in my local area? (I assume they are free.)

They are generally posted here, also google for the word meeting in
subject lines for the CLL archive.

> 
> {{go to local Linux & {Free,Net,Open}BSD meetings [there are a *LOT* of
>   such things every month in the Bay area].}}
> 
> I have absolutely no money for anything like that, so are they free?
> If free, same as previous question.

They are almost always free and sometimes have snacks

> 
> {{Heck, even just go hang out at Fry's and strike up conversations with
>   people in the aisles!!}}
> 
> Oh great, loiter in Fry's without buying anything until security
> notices I've been there for hours and orders me to leave and never come
> back. Sure, that sounds like a great plan, not.

Um its called browsing.  I have spent a full day in book stores and not 
been bothered by security.  The trick is to look presentable or rich, go
for presentable.  Iron your pants and shirt, wear one with buttons if 
possible, and shine your shoes or at least clean your sneakers and comb
your hair.  This way you will not look like a problem so not get bothered.
                                   
> 
> {{What you need to do first is to establish decent human contacts with
>   people}}
> 
> I don't know how to do that. I can talk to a stranger in a public place
> for up to an hour and a half, and never have any chance of seeing that
> person again. There's only one person like that I ever saw again, once
> two days after I saw her the first time in 1999, name "Chandel", age
> 19, and I couldn't talk to her the second time because she was waiting
> for her boyfriend to show up for a date and I was too decent a guy to
> risk messing up her date by being seen with her when her boyfriend
> shows up. Anyway, people around this part of California don't give
> their phone number to random strangers who approach them on the street
> or in a mall or in a supermarket or in a library or anywhere else I
> might find strangers for talking with them, and I don't think they'd
> give the phone numbers of their friends to random strangers either.

See above about how to present yourself and get a conversation
starter, go to the park and practice juggling for example. You could
use 3 socks for balls and if anybody ask you can honestly say socks do
not roll/bounce as far and you drop them a lot so it is easier to pick
them up.  This way you will be doing something that may make people
start a conversation with you.  And go there 2-4 times a week at about
the same time and practice juggling, walk around or sit on a bench,
become a regular.  If you see some older people playing chess,
checkers, domino's watch for a while and ask if you could play a game
or if they could show you how to play.  And do not tell them about
your problems just learn how to interact with people.

> 
> {{that's probably over 100 people. That's the kind of networking it
>   take to find work these days.}}
> 
> I already talked to a lot more than that number people back when there
> wasn't a recession, and got not a single good job lead the whole time.

talking to people and networking are 2 different things, Find groups(
technical or not) where you have some interest in what is going on and
volunteer to do some work for/with them.

> 
> {{finding a job is *itself* a full-time job, and one had best be
>   prepared to spend ~8 hrs/day on it, every day, for months on end.}}
> 
> I already did it full time from when I got laid off in 1991 for several
> years until I was totally burned out from exhaustion and frustration of
> not a single interview since the 4-hour one in late 1993 and the
> regular one in mid/late 1994. I have a complete record of my SeekJob
> contacts up to 1998.Dec.16 when I couldn't handle the stress of total
> frustration and exhaustion any more and I had to give up to avoid a
> nervous breakdown. I tried to find somebody to look at my complete
> record and tell me what I was doing wrong so I could fix my strategy
> and maybe start again, but nobody ever was willing to look at my
> records, so I still have no idea why more than seven years of fulltime
> SeekJob was a total failure. It's really not cool of you to tell me I
> need to do it for months when I already did it for years without
> success.

If you could not get work during the Internet boom, you had something
to do with your problem.  Did you go in and say "hi I want a lisp job"
at a VB shop?  Or other things like that?  Again go to unemployment
and find out about interviewing workshops, go to the library and check
out books on interviewing skills and work through the motions until
they are automatic.  Make eye contact and have a firm dry handshake.

> 
> {{things have changed dramatically since the roaring dot.com days
> when you could leave one job and walk across the street to
> another.}}
> 
> That's fine for you lucky guys who were already employed during that
> time and could switch jobs at leisure. But that just is rude for you to
> gloat over people like me who didn't already have a job and were
> rejected by all the dot.com employers because we didn't have any paid
> recent work on our resumes.

Did you do any volunteer work, there are ton's of not for profits
that would absolutely love to have someone come in and do IT work for
them so you can build their resume.  They have no money but you have
time and at the end you will have 2 things:

1: you will now have current real job experience

2: iff you did a good job you will now have some contacts 
   who might have some paid work for you to do or know someone
   who has an open job and hand you off to them.

> 
> {{That's why I sugegsted that you buy the *2003* edition of "What Color
>   Is My Parachute"}}
> 
> I don't have any money to buy books.
> 

Library

> {{the current version *does* reflect the harsh realities of the
>   post-dot.bomb job situation.}}
> 
> I don't need to read in his book. I already know things are even worse
> now than they were from 1991 to 1998 when there were no jobs either.

Things are getting better.

> 
> {{Once a month or so drive to Berkeley for dinner.}}
> 
> I do not believe anyone will provide me with a free dinner if I drive
> to Berkeley to get it, so stop throwing crap at me.

People here are trying to help you.  I do not believe that anyone here
has enough emotional investment in you to throw shit at you.  The
assumption that everyone is out to get/insult/shit on you is wrong
almost everybody in the world does not know you exist and would not
care if they did.  You are not that important, neither am I for that
matter.

> 
> No, I don't have any money for food either. My only source of food is
> the local food bank, and a soup kitchen if I happen to be in San Jose
> at 4PM and I feel like crowding togetether with a bunch of homeless men
> to get a free meal. Most of the food I get from the food bank isn't
> easily transportable after it's opened, such as cans of fruit or
> vegetables, so I wouldn't be able to take my own "picnic" dinner to
> Berkeley and eat it in the restaurant, even if restaurant management
> would allow such a trick in the first place.

If California is a bottle/can deposit state go out and collect cans to
get enough money to buy a Tupperware compartmented meal
container($3-$6) and take your now portable picnic dinner and eat it
right before you go into the meeting and drink tap water when you are
there.

And find a job, McDonald's or pump gas or something, work is good for
you so go do some.  I would say try to get some work at the local
starbucks, ignorance is expected in new hires and the fact that you
speak english may be a good selling point, try and pick up about 20
hours a week to start, more if they have them.  And I think that
starbucks has medical for people who work more then 20/hrs week.  And
do the nonprofit thing to get some current IT experience.  And ALWAYS
ALWAYS show up well groomed, clean/ polished shoes etc., it will make
a difference.

Life can be very hard some times and if you do not suck it up and deal
with it it will never get easier.

Good luck,

marc
From: ··········@YahooGroups.Com
Subject: Re: Where to start
Date: 
Message-ID: <REM-2003sep01-019@Yahoo.Com>
{{Date: Mon, 01 Sep 2003 03:36:37 GMT
  From: Marc Spitzer <········@optonline.net>
  but your local unemployment office has people who will help you find
  a job, it is their job to do so.}}

If you mean EDD (Employment Development Department) here in California,
no they haven't provided any such service for a very very long time if
ever. When I first got laid off and filed for unemployment benefits,
they required me to fill out a questionnaire about my experience etc.,
and then they put it in their computer and told they'd notify me when
they found a match. There was absolutely no way to call them to check
how they were coming. I just had to wait. If there was a match, they'd
call me, if not, it would just bother them for me to call them. They
never got a match, never called me. When I got on extended unemployment
benefits, they required me to fill out that same questionnaire all over
again, instead of just using what I had already done a year ago. Again,
they'll call when they get a match, and there's no number for me to
call them. Again they never got a match and never called me.

{{Also when you see said counselor ...}}

EDD has never in any recent years provided counselors to serve
unemployed people. I have no idea where you get the idea they do.

{{google for the word meeting in subject lines for the CLL archive.}}

There's nothing posted more recent than Jul.06 (report of a previous
meeting) in this area. No mention of any upcoming meeting except in Los
Angeles and in Germany and in Washington DC.

{{Iron your pants and shirt}}

I don't have any way to do that. I don't currently have any such
equipment, nor money to pay somebody to do it for me, and my studio
apartment is so full it's a fire hazard if an iron should fall into a
box of papers so I dare not have anything hot here except hair dryer
and stove. When I was a teenager and my mother tried to have me iron
clothes, my coordination was so poor that I'd go over the same clothes
tens of times, each time making a new wrinkle that needed to be ironed
out, so I'd never finish even one item after a half hour of trying.

{{go to the park and practice juggling for example}}

That would be a totally frustrating thing to try and drive me to a
nervous breakdown. Very very bad idea.

{{Did you go in and say "hi I want a lisp job" at a VB shop?}}

No, nothing stupid like that. Either I responded to a job ad they had
posted which I sorta qualified for, and they sent me a reply card
something like "We have received your resume and are very impressed
with your excellent qualifications, but we're sorry that we have no
openings at this time that match your qualifications" with not a clue
about the fact I responded to a specific ad, like why didn't I match
*that* particular job. Or they didn't reply at all. Or I asked them if
they had any jobs compatible with my experience and they said they have
nothing now but will keep my resume on file for six months. Or they
required me to come down and spend two hours filling out a length
application for their services, and a couple weeks later when I
inquired if they had found anything they said not only did they not
have my application but they have no record that I ever came into their
office, so would I please come in and go through their shit again.

{{go to the library and check out books on interviewing skills and work
  through the motions until they are automatic.}}

I don't need that. Focus for Work already put me through a class for
interview skills last Nov/Dec and then a mock interview which I passed.
What I need is an actual interview, which I haven't been able to get
since 1994.

{{Did you do any volunteer work, there are ton's of not for profits
  that would absolutely love to have someone come in and do IT work for
  them so you can build their resume.}}

Every place where I inquire about volunteer work, refers me to the
Volunteer Exchange, where they don't have any IT work at all. The
closest I could find to anything I can likely do was tutoring math and
reading, but when I called about that volunteer job they said they
don't do that any more because they had to close the office where they
did that and don't have any new office space to accomodate it.

{{If California is a bottle/can deposit state go out and collect cans
  to get enough money ...}}

I have nerve damage or something (Medi-Cal / Kaier doesn't cover
podiatry so they refuse to diagnose the problem, but they labeled the
symptoms "Metatarsalgia") on the bottoms of my feet that make it
painful for me to stand or walk or wear shoes, and after about a
quarter mile of walking my feet are hurting terribly, so I doubt I'd be
able to go around collecting stuff from trash, and in this are there
are already people doing that and not wanting anybody to intrude on
their territory, and they have kinves and fists and know how to use
them.

{{pump gas}}

Around here, the gasoline stations are all self-service, with nobody
authorized to take money for pumping people's gasoline. Also I'm very
sensitive, almost allergic, but definitely sickened, from hydrocarbon
smells including purfume and cooking odors, and of course gasoline and
oil etc. I have to hold the nozzle as far away as possible, and hold my
breath, when starting the gasoline into my own car, and even then the
smell is sickening.

{{I would say try to get some work at the local starbucks}}

Do they provide a chair so I won't have to hurt my flattened spinal
disk? Also do they provide an air tank so I won't have to smell coffee,
which I rather dislike the smell of?
From: Paolo Amoroso
Subject: Re: Where to start
Date: 
Message-ID: <87fzjfwpez.fsf@plato.moon.paoloamoroso.it>
··········@YahooGroups.Com writes:

> I don't have any way to do that. I don't currently have any such
> equipment, nor money to pay somebody to do it for me, and my studio
> apartment is so full it's a fire hazard if an iron should fall into a
> box of papers so I dare not have anything hot here except hair dryer
> and stove. When I was a teenager and my mother tried to have me iron

Speaking of apartments... Here in Italy, it is very common for school
kids to also attend private lessons besides school. Those lessons are
usually given by both professors and university students. They can
easily earn up to the equivalent of 40-60 $/h.

Have you considered giving private lessons (e.g. math, science) to
kids in your neighborhood? All you need is your brain, and possibly
srap paper and a pencil. Here in Italy some of those who give lessons
go to the student's apartment, so he can provide a desk and a chair.

You might try posting an offer to a local--physical, not
electronic--bulletin board (e.g. at a photocopy store).


Paolo
-- 
Paolo Amoroso <·······@mclink.it>
From: Paolo Amoroso
Subject: Re: Where to start
Date: 
Message-ID: <ff4743a5.0309030251.4196f504@posting.google.com>
Paolo Amoroso <·······@mclink.it> wrote in message news:<··············@plato.moon.paoloamoroso.it>...

> Speaking of apartments... Here in Italy, it is very common for school
> kids to also attend private lessons besides school. Those lessons are
> usually given by both professors and university students. They can
> easily earn up to the equivalent of 40-60 $/h.

Lira is still contaminating my thoughts, sorry. I actually meant 20-30
$/h, but it's not that bad either.


Paolo
From: Larry Clapp
Subject: Re: Where to start
Date: 
Message-ID: <slrnbki1nr.9h6.larry@theclapp.ddts.net>
In article <·················@Yahoo.Com>, ··········@YahooGroups.Com wrote:
> By the way, do you have your own machine as server, where you are
> allowed to do virtually anything you want regardless of machine
> load,

If you'd like something like this, and like Linux, check out
www.bytemark-hosting.co.uk.

-- Larry Clapp, just a satisfied customer
From: ··········@YahooGroups.Com
Subject: Re: Where to start
Date: 
Message-ID: <REM-2003aug09-003@Yahoo.Com>
{{Date: Sat, 02 Aug 2003 20:28:19 GMT
  From: Steve Long <·······@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.
From: Paolo Amoroso
Subject: Re: Where to start
Date: 
Message-ID: <eR02P7TfuNEiz2S2G+cFK1cG+8=s@4ax.com>
On Sat, 09 Aug 2003 20:41:24 -0700, ··········@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?


Paolo
-- 
Paolo Amoroso <·······@mclink.it>
From: ··········@YahooGroups.Com
Subject: Re: Where to start
Date: 
Message-ID: <REM-2003jul31-002@Yahoo.Com>
{{Date: 26 Jul 2003 10:44:28 -0700
  From: ········@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.
From: Joe Marshall
Subject: Re: Where to start
Date: 
Message-ID: <u191eavq.fsf@ccs.neu.edu>
··········@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.
From: ··········@YahooGroups.Com
Subject: Re: Where to start
Date: 
Message-ID: <REM-2003aug07-002@Yahoo.Com>
{{Date: Fri, 01 Aug 2003 10:00:09 -0400
  From: Joe Marshall <···@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.
From: Joe Marshall
Subject: Re: Where to start
Date: 
Message-ID: <k79pl2cf.fsf@ccs.neu.edu>
··········@YahooGroups.Com writes:

> {{Date: Fri, 01 Aug 2003 10:00:09 -0400
>   From: Joe Marshall <···@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.

Different employers.  
I've found more than one job via comp.lang.lisp, actually.
From: Paolo Amoroso
Subject: Re: Where to start
Date: 
Message-ID: <M2IzP2lTOSohex2GjXddcPlUBWwv@4ax.com>
On Thu, 07 Aug 2003 08:09:02 -0700, ··········@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
-- 
Paolo Amoroso <·······@mclink.it>
From: ··········@YahooGroups.Com
Subject: Re: Where to start
Date: 
Message-ID: <REM-2003aug12-002@Yahoo.Com>
{{Date: Fri, 08 Aug 2003 10:42:54 +0200
  From: Paolo Amoroso <·······@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.
From: Paolo Amoroso
Subject: Re: Where to start
Date: 
Message-ID: <dCE6P2gVGvndt=iW3sewoAM4Xm2n@4ax.com>
On Tue, 12 Aug 2003 16:45:32 -0700, ··········@YahooGroups.Com wrote:

> {{Date: Fri, 08 Aug 2003 10:42:54 +0200
>   From: Paolo Amoroso <·······@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.

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.


Paolo
-- 
Paolo Amoroso <·······@mclink.it>
From: Coby Beck
Subject: Re: Where to start
Date: 
Message-ID: <bgcntj$2f7e$1@otis.netspace.net.au>
<··········@YahooGroups.Com> wrote in message
······················@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")
From: ··········@YahooGroups.Com
Subject: Re: Where to start
Date: 
Message-ID: <REM-2003aug06-001@Yahoo.Com>
{{Date: Fri, 1 Aug 2003 13:48:00 +1000
  From: "Coby Beck" <·····@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?
From: Coby Beck
Subject: Re: Where to start
Date: 
Message-ID: <bgs3s5$1kv$1@otis.netspace.net.au>
<··········@YahooGroups.Com> wrote in message
······················@Yahoo.Com...
> {{Date: Fri, 1 Aug 2003 13:48:00 +1000
>   From: "Coby Beck" <·····@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.

-- 
Coby Beck
(remove #\Space "coby 101 @ big pond . com")
From: ··········@YahooGroups.Com
Subject: Re: Where to start
Date: 
Message-ID: <REM-2003aug11-007@Yahoo.Com>
{{Date: Thu, 7 Aug 2003 09:44:01 +1000
  From: "Coby Beck" <·····@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.
From: Paolo Amoroso
Subject: Re: Where to start
Date: 
Message-ID: <Zqo4P2eDsyEbKfmUYorWo5JzLA3C@4ax.com>
On Mon, 11 Aug 2003 21:56:07 -0700, ··········@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?


Paolo
-- 
Paolo Amoroso <·······@mclink.it>
From: Coby Beck
Subject: Re: Where to start
Date: 
Message-ID: <bh9vrp$2h8i$1@otis.netspace.net.au>
<··········@YahooGroups.Com> wrote in message
······················@Yahoo.Com...
> {{Date: Thu, 7 Aug 2003 09:44:01 +1000
>   From: "Coby Beck" <·····@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.

-- 
Coby Beck
(remove #\Space "coby 101 @ big pond . com")
From: Paolo Amoroso
Subject: Re: Where to start
Date: 
Message-ID: <4rEuP4Qd0rEfveuVpKKig1j5=vpt@4ax.com>
On Thu, 31 Jul 2003 20:06:08 -0700, ··········@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?


Paolo
-- 
Paolo Amoroso <·······@mclink.it>
From: ··········@YahooGroups.Com
Subject: Re: Where to start
Date: 
Message-ID: <REM-2003aug11-001@Yahoo.Com>
{{Date: Mon, 04 Aug 2003 21:37:32 +0200
  From: Paolo Amoroso <·······@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.
From: Coby Beck
Subject: Re: Where to start
Date: 
Message-ID: <bh99ek$25kf$1@otis.netspace.net.au>
<··········@YahooGroups.Com> wrote in message
······················@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
(remove #\Space "coby 101 @ big pond . com")
From: Coby Beck
Subject: Re: Where to start
Date: 
Message-ID: <bh9a1l$25qq$1@otis.netspace.net.au>
"Coby Beck" <·····@mercury.bc.ca> wrote in message
··················@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"
From: Thomas F. Burdick
Subject: Re: Where to start
Date: 
Message-ID: <xcvk79i7e4d.fsf@famine.OCF.Berkeley.EDU>
"Coby Beck" <·····@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!       |                        
    /       /      `-----------------------'                        
   (   -.  |                               
   |     ) |                               
  (`-.  '--.)                              
   `. )----'                               
From: Paolo Amoroso
Subject: Re: Where to start
Date: 
Message-ID: <tao4P7QbACJKT8OnSo6V1u7rXjo5@4ax.com>
On Mon, 11 Aug 2003 14:46:01 -0700, ··········@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
-- 
Paolo Amoroso <·······@mclink.it>
From: Klaus Momberger
Subject: Re: Where to start
Date: 
Message-ID: <80a8af7d.0307261451.704c8990@posting.google.com>
······@rediffmail.com (viator) wrote in message news:<····························@posting.google.com>...
> 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.
>
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.
From: Mario S. Mommer
Subject: Re: Where to start
Date: 
Message-ID: <fz65lk8m12.fsf@cupid.igpm.rwth-aachen.de>
··········@yahoo.de (Klaus Momberger) writes:
> ······@rediffmail.com (viator) wrote in message news:<····························@posting.google.com>...
> > 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.
> >
> 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.  ;-)

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.