May 31, 2002

Loving Lisp

Mark Watson is writing a free introductory book on Common Lisp called Loving Lisp, or the Savvy Programmer's Secret Weapon (there's a PDF file in the downloadable zip file).

He says "My goal is to write something that an experienced programmer can work through in a couple of evenings to see if she likes Common Lisp."

It's only about 1/3 complete, but from skimming over it it looks like it could become a helpful resource for people new to lisp. And he's looking for feedback so if you have any comments, email him.

I remember Watson's book Common Lisp Modules fondly as the only lisp book available at the time (1994) that (i) had graphics and (ii) used a Mac.

Posted by jjwiseman at 03:02 PM | Comments (1)

May 29, 2002

CLiki is 2

Paolo Amoroso in comp.lang.lisp:

  The recent discussions about Lisp's popularity, and the size and liveness
  of its community, made me remember that today is CLiki's second birthday:

  Two years ago CLiki went online and started getting the first user
  feedback. I wish to thank Daniel Barlow for creating and maintaining this
  important resource.

  Happy birthday CLiki :-)
Posted by jjwiseman at 11:05 AM | Comments (0)

ILISP Snapshot

The ILISP project has made a snapshot of current development available. It really is just a snapshot of what's in cvs, but more convenient to download.

Paolo Amoroso says "Note that these snapshots are not official releases and are provided as a service to users. Therefore, the included code may be unstable, incomplete or not documented."

Posted by jjwiseman at 11:00 AM | Comments (0)

May 27, 2002


Boeing X-45

The Boeing X-45 "robotic combat plane", the first UAV designed from the start to carry weapons, made its maiden flight recently (via Wiley Wiggins). From Aerotech News and Review:

During a "typical" mission, multiple UCAVs would be with preprogrammed with mission objectives and preliminary targeting information from the ground-based mission planners. Operations would then be carried out autonomously, but could also be managed interactively or revised en route by the UCAV controllers should new objectives or targeting information develop.

The x-45 is designed to fit into storage containers that can be flown to remote bases, and that have data interfaces on the outside so that the plane can be monitored and have its software updated while still in storage. It can then be removed and assembled in an hour.

That little detail seems so cyberpunk to me.

Dassault is the only other company to have flown a UCAV (Unmanned Combat Air Vehicle), but it seems that everyone is working on them. This Jane's report has a pretty good overview of UCAV development, capabilities and proposed missions.

Posted by jjwiseman at 08:55 PM | Comments (3)

May 25, 2002

Evo at E3

Friday afternoon I was able to sneak away for a couple hours to E3 to see the sights and bother the people working at the Evolution booth.

The Evolution booth An ultrabot hopes to be adopted

And, of course, see what some of the newest and most promising game companies, like uh, the U.S. Army, had to offer.

The Army has the best hardware

I'm glad I didn't have this job.

Showing off the gui "...and that's why you need one of these!"

The robot demo that got a lot of press was one in which a robot listens for the presenter to say "mountain dew" or "beer", looks for and goes to the refrigerator, looks for and finds the desired beverage sitting on a shelf in front of the refrigerator, picks the beverage up, and brings it back to the recliner.

A robot prepares to sit and watch Everybody Loves Raymond

Here's a 15 second video of the robot in action (MPEG, about 5.5 MB):

Do the Dew

Posted by jjwiseman at 06:39 PM | Comments (2)

May 24, 2002

Succintness is Power

Freakin' Paul Graham. I can barely keep up.

Succinctness is Power

Posted by jjwiseman at 01:50 PM | Comments (3)

May 23, 2002

ROTN: Deeper, Harder

Paul Graham has put up another page based on feedback he's gotten on Revenge of the Nerds (there's also a rather pointless lisp vs. python thread on ll1-discuss; it seemed to me that the attempt at defending python actually made it look even worse).

Posted by jjwiseman at 03:53 PM | Comments (0)

15 Minutes

Evolution has been slashdotted, based on this cnet article and our demo at E3.

The low cost ($499/$599) kit is pretty cool and has a slick interface, so it will inevitably get a lot of attention.


But the Robot Developer Kit, which I'm working on, is cooler.

I'm hoping to get over to E3 soon, and maybe get some pictures of the demo.

Update: Wow, a comment worth reading in a slashdot thread.

Posted by jjwiseman at 11:50 AM | Comments (1)


I regret to inform you that Dan Barlow's monthly newsletter Free the X3J Thirteen, which reported on activity in the open source lisp world, is officially, and sadly, dead. I have removed the link from the sidebar.

Time of death is listed as May 1, 2002, cause is lack of activity.

(I also removed the commented out movable type calendar thing that kept popping up in mozilla, which apparently was having problems parsing html comments).

Posted by jjwiseman at 11:30 AM | Comments (2)

May 20, 2002

Revenge of the Nerds

Paul Graham has a new article (thanks, dnm and Adam Langley), "Revenge of the Nerds".

If you look at these languages in order, Java, Perl, Python, you notice an interesting pattern. At least, you notice this pattern if you are a Lisp hacker. Each one is progressively more like Lisp. Python copies even features that many Lisp hackers consider to be mistakes. You could translate simple Lisp programs into Python line for line. It's 2002, and programming languages have almost caught up with 1958.

I place a lot of value on Graham's thoughts on lisp because he's not a fanatic, and something about this piece makes me feel good even though it doesn't contain anything I didn't already know.

Posted by jjwiseman at 09:31 PM | Comments (8)


Mike asked me the other day about tools for starting lisp server daemons from /etc/rc.d, and this morning I saw David Lichteblau's world, which is (from the cliki page) "a small unix shell script (with some Lisp code, of course) to start Lisp worlds in the background (using screen, so that you can re-attach when needed) and communicate with the world.".

It's supposed to work with cmucl and acl, at least.

Dan Barlow's detachtty is another tool for starting and running lisp server processes.

Posted by jjwiseman at 12:04 AM | Comments (0)

May 19, 2002

The New Arrival: 5 lbs 8 oz

Yesterday I went to the Apple store and got myself a G4 PowerBook.

I wanted a laptop, and I spent weeks trying to decide what to get. Which is longer than it took me to choose a college. The TiBook running OS X is undeniably the coolest laptop in existence, but a Vaio or a Thinkpad running Windows 2000 and Linux has some major advantages.

PowerBook Pros:

  • Insanely long battery life
  • Great display
  • OS X: it's unix, and with a good interface (I haven't mentioned my experience in rediscovering what a joke linux is as a desktop OS, but consider yourself officially warned.)
  • Macintosh Common Lisp
  • Style

PowerBook Cons:

  • Has none of the games I'm interested in
  • Doesn't run the robotics software I develop at work (x86 linux)
  • Doesn't have Outlook (question the accepted wisdom; I'm here to tell you that Outlook rules)
  • Insanely expensive
  • OS X: needs some work
  • Macintosh Common Lisp

My priorities are:

  1. Get work done,
  2. while being incited to swear as infrequently as possible,
  3. and look good doing it.

I figured some of the disadvantages could be overcome by using VirtualPC, though I remain skeptical of just how pleasant or convenient that would be. But mostly it was the strength of OS X that won me over (there would have been no decision to make if we were still stuck with Mac OS 9, that's for sure). I really love having a unix-based OS with a nice desktop environment. I figured there's plenty of software for it, there's only going to be more, OS X is bound to improve, and at the very least it makes a great terminal for an x86 linux laptop mounted on a robot (with XDarwin, etc.).

So I got the PowerBook, the stock mid-level model: 800 Mhz, 512 MB, 40 gig drive.

I drove home from the Apple store with the laptop box in the front seat, where I decided it would have the most benefit of all that German engineering; crumple zones, front and side airbags, even my own squishy body in a few of the less likely impact scenarios. I'm sure eventually I'll be slinging it around cavalierly while riding my bike, but for now this computer is going to be pampered. It deserves it.

Posted by jjwiseman at 04:12 PM | Comments (17)

May 18, 2002


I missed this April New York Times story on ITA, the company that powers the Orbitz website (via

But the company found that once it exhausted its network of programmers in the research field, it had difficulty finding qualified people.

Since last November, ITA has run a banner ad on Slashdot, a Web site that bills itself as "News for Nerds." That banner, and one on Freshmeat, a Slashdot affiliate, challenge readers to solve difficult programming puzzles. The ads have drawn nearly three million hits, and about 200 people have submitted answers, half of them correct. ITA has brought on three employees through this process and seven more through personal connections and postings on HotJobs.

I'm guessing that the Jeremy Wertheimer that founded ITA is that same one mentioned in the CLHS issue READ-AND-WRITE-BYTES: "Common Lisp should have a facility for reading and writing blocks of binary bytes. The lack of such a facility makes it impossible to write portable efficient programs to access binary files."

It is fitting that he was concerned with efficiency even back then.

Posted by jjwiseman at 12:11 PM | Comments (0)

May 17, 2002

LispWorks 4.2.6 Patch Release

Xanalys announced a new "patch release" of LispWorks, 4.2.6, which "contains small feature enhancements and 150 bug fixes". There are more details in the readme, but it looks like there are a lot of general fixes ("Fix a rare GC bug") as well as fixes in the COM interface, IDE, and CAPI.

Posted by jjwiseman at 10:58 AM | Comments (0)

May 16, 2002

gcc Slays Me

It is tragically funny to me the way that gcc continues to try to compile a file after it is unable to find an #included file.

Is there anything more funny, and ridiculous, than that? Because I know most of the #includes in my source files are really just optional.

Posted by jjwiseman at 05:53 PM | Comments (0)

New Links

I added a few links to this page to remind myself to check them at least semi-regularly.

This page is really just a place that I put stuff so that I'll remember it later. Most of it is to help remind me how to waste time.

Posted by jjwiseman at 03:01 PM | Comments (0)

May 13, 2002

Preparing for the Future

The lines are getting blurry, but we don't quite have autonomous robots that are meant to injure or kill people as part of their job*. The machines pictured here are teleoperated, but it's easy to picture that in 20 years we'll see images just like these except that humans will no longer be part of the control loop.

So get ready for the future.

Israeli police robot

An Israeli police robot checks the body of a dead Palestinian man for explosives.

Israeli police robot

Another robot checks the same man.

Israeli police robot

An Israeli robot drags a critically injured Palestinian suicide bomber whose bomb exploded prematurely.

Predator UAV with Hellfire missile

An unmanned Predator aerial vehicle, armed with laser-guided Hellfire missiles. Armed Predators are flown by the CIA (and have been used heavily in Afghanistan), which first deployed armed UAVs in Vietnam.

* Though accidents happen, of course. 1981 had the first documented case of a person being killed by a robot; a repairman was pushed into a grinder in a japanese factory. The grisliest case I read about was one where an engineer was pinned by a robot when a production line unexpectedly started up, and molten aluminum was poured on him.

Posted by jjwiseman at 02:38 PM | Comments (6)

May 10, 2002

Lisp Machine Video

Ever wondered what it's really like to use a lisp machine? Thanks to Rainer Joswig, you can get some idea. He's taken the time to record a video of him interacting with his Macivory. (Rainer previously contributed some lisp porn.)

lisp machine screenshot

Rainer says

"The video is screen capture of an interaction with a Symbolics Macivory 3 Lisp machine running Genera 8.3. The window is displayed via X11 to a Mac G4, where the interaction has been recorded. It is similar to the window one would get as a console on the Lisp machine. The interaction is a bit slow due to the screen capture going on. In real usage it is much faster."

"Shown are the Listener (used for commands and Lisp interaction), Zmacs (the Editor), the Document Examiner and the Presentation Inspector."

Download the video:, 25 minutes, 981x660, 7.5 MB, 50 MB uncompressed.
(Uses the Animation codec, so you can probably watch it in linux. It'd be great if someone converted this to a high quality mpeg.)

Posted by jjwiseman at 12:25 AM | Comments (6)

May 08, 2002


This fits none of the incredibly rigorous criteria for inclusion (must not be about weblogging, must be original, blah blah blah) jjwiseman mandates for this site (as if he follows those rules, anyway), but I thought it was funny, and since he's away at the moment... well, let's keep it just between you and me.

"I'm hoping to learn about weblogs from an alife simulator I'm building. In the simulated world, we have 600 little artificial writers (I call them weblets) with 600 artificial weblogs. If traffic is the currency of the Web, each of the weblets wants to get rich. Some have big blogrolls (so lots of people will think well of them). Some have lots of daily links (so they can reward their friends quickly). Some hoard traffic, some spread it around. We'll see who wins."

Posted by valis at 12:58 PM | Comments (2)

True Believers

Via Patrick Logan, a funny little bit in a Software Development article on older languages:

"This trip down memory lane was inspired by Dan Weinreb, who wrote regarding a passing comment I'd made in 'Playing by the Rules' (Interface, Aug. 2001) about the 'true believers' who wrote spreadsheets in Lisp--not realizing that anyone actually had done so. In 1981, Weinreb worked at the MIT Artificial Intelligence lab, and his girlfriend worked for the folks who wrote VisiCalc. Using the MIT Lisp machine, he wrote an implementation of VisiCalc in Lisp, and improved the commercial product by utilizing the mouse (which at that time was not in widespread use on PCs). He writes, 'I did it just to show how easy it was to write VisiCalc if you already have Lisp plus a graphics library and window system--though I'm sure Dan Bricklin and Bob Frankston (cocreators of VisiCalc) were perfectly aware of this.'"

Posted by jjwiseman at 03:31 AM | Comments (0)

May 07, 2002

Copying Arrays

On, Bettina Schimanski asked how to make a copy of an array.

  I have been using setf, but just realized that this
  really just makes the new variable point to the old
  array and so when the new array is changed so is the
  old, which I would really like to avoid (a common
  programming problem to avoid). I can go through
  tediously and

   (setf (aref new-array row col) (aref old-array row col))

  for every single element, but I'm sure there is a more
  sophisticated way which I would like to learn. I have
  found a copy function for lists, readtables, trees,
  sequences, but not for arrays...

Shannon Spires replied:

  Since you have discovered copy-seq, you probably know
  it does what you want but only for one-dimensional
  arrays (vectors). You have implied by your example
  above that you're interested in two-dimensional arrays,
  for which an additional trick is needed:
;; Here's your original two-dimensional array:
(setf original-array (make-array '(10 20)))

(copy-seq original-array) --> ERROR, because it's not a sequence

(setf linearization-array (make-array 200
                            :displaced-to original-array))
;; linearization-array is identical with
;; original-array, but it's accessible as if it were
;; one-dimensional. Changes to linearization-array will
;; affect original-array.

(setf linear-copied-array (copy-seq linearization-array))
;; This is a true copy--changes here won't affect the
;; first two.  Copy-seq works because this is
;; considered a sequence.

(setf final-copied-array (make-array '(10 20)
                           :displaced-to linear-copied-array))
;; This step just makes linear-copied-array be
;; accessible as if it were two-dimensional.
  Note that although we've created 3 new arrays in
  addition to your original, only one of them consed a
  significant amount of memory. So there's no real memory
  penalty other than the obvious cost of a copy.

Marc LeBrun then came up with this function. See if you can find where the spec for adjust-array says this will make a copy (hint: " 'data region'"...).

(defun copy-array (array)
  (let ((dims (array-dimensions array)))
     (make-array dims :displaced-to array)

How to copy arrays is a perennial question on comp.lang.lisp, so if you're interested you may want to check out some of those threads, too.

(Will, thanks for giving me a pointer to this discussion. It was educational.)

Posted by jjwiseman at 12:27 PM | Comments (1)

May 06, 2002

Big Ugly Brute

We heard from Peter Norvig, now it's Paul Graham's turn: "It's Lisp I like, not CL. I think CL is pretty ugly and always have." "If CL is ugly, why do I use it and write about it? Because Lisp is so powerful that even an ugly Lisp is preferable to using some other language."

Posted by jjwiseman at 12:46 PM | Comments (0)

May 05, 2002

Norvig/Lisp/Python and Easy GUIs

Peter Norvig posts about Python and lisp:

For those who are interested in programming real AI applications, rather than just understanding the algorithms in a course setting, I continue to recommend Lisp, and to recommend against Python (unless you're willing to code some extensions in C).

And then

And for Duane and his employer, let me say that if there was a standard, easy to use Common Lisp GUI package that was portable across Windows, several flavors of Unix, and possibly Mac, then I would never have started looking at Python. Really the only answer to "what can Python do that Lisp can't" that matters to me is "put up a window in a portable way".

That would, indeed, be nice. I'm not sure what the best way to make it happen is. Maybe some simple GUI library that just implements the simplest widgets, expressly not for industrial strength applications. Strive to make it possible to write a backend for a particular lisp platform/native GUI in 3 days, then write the backends. Ideally, lisp vendors just love the idea and include the library in such a way that all people would have to do to use it is (require :simple-gui). Only slightly more realistically, the simple-gui website could have a page listing the various implementations and corresponding bits of code to be pasted into the listener to download and install the library.

Posted by jjwiseman at 02:02 PM | Comments (2)


...then lemonodor is BACK.

We even picked up a couple comments that were posted after I grabbed the snapshot for what became the undead, lurching-around-with-its-arms-held-stiffly-in-front-of-it lemonodor, but before DNS changes made the real lemonodor, the one that thinks and feels, and yes, even loves, inaccessible.

So today I was part of a little garage sale. I made slightly less than $8 in 4 hours, but it was worth my time for other reasons. Toward the end, us proprietors started talking about maybe ebaying a few of the choice leftovers, when Samantha (not her real name), who was not a proprietor but is a freelance fashon photographer, said

"I have Robert Downey Jr.'s crack pipe, maybe I should sell that on ebay."

And she has video to prove it.

Posted by jjwiseman at 12:50 AM | Comments (0)

Cocoa Debut

I was able to get that proof-of-concept Cocoa demo from the latest release of OpenMCL to work:

OpenMCL doing Cocoa

Not only does the text in the editor window have funny, unreadable colors, but the text in my system menus was similarly funny and unreadable while the editor was running.

Ingredients of success:

  1. Start with Mac OS X 10.1.4.
  2. Pre-heat with the OpenMCL 0.11 binary release.
  3. Gently fold in the source code.
  4. Remove from oven; sprinkle with the interface database.
  5. (require :cocoa)

Skimming the source of the demo code, define-objc-class and define-objc-method are pretty intriguing.

Posted by jjwiseman at 12:12 AM | Comments (2)

May 03, 2002


Media Design in-Progress' web application server for the mac, Interaction, is this close to version 4.0 (via hack the planet).

It's one of those semi-mythical shrinkwrap lisp applications (just one of several by Media Design in-Progress).

Posted by jjwiseman at 02:13 AM | Comments (2)

May 01, 2002

OpenMCL 0.11 Released

Version 0.11 of OpenMCL has been released, with lots of significant changes and bug fixes:

  • The initial value of *package* is now CL-USER instead of CCL.
  • loop is included in the binary distribution.
  • The spurious floating point exception bug has been fixed.
  • There's a proof-of-concept Cocoa text editor!

The release notes contain many more changes.

Posted by jjwiseman at 07:32 PM | Comments (0)