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.
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: http://ww.telent.net/cliki 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 :-)
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."
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.
And, of course, see what some of the newest and most promising game companies, like uh, the U.S. Army, had to offer.
I'm glad I didn't have this job.
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.
Here's a 15 second video of the robot in action (MPEG, about 5.5 MB):
Freakin' Paul Graham. I can barely keep up.
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).
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.
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).
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.
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.
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.
My priorities are:
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.
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.
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.
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.
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.
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.
An Israeli police robot checks the body of a dead Palestinian man for explosives.
Another robot checks the same man.
An Israeli robot drags a critically injured Palestinian suicide bomber whose bomb exploded prematurely.
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.
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.)
"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: lispm.mov.gz, 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.)
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."
"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.'"
On email@example.com, 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: "...new 'data region'"...).
(defun copy-array (array) (let ((dims (array-dimensions array))) (adjust-array (make-array dims :displaced-to array) dims)))
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.)
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."
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 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.
...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.
I was able to get that proof-of-concept Cocoa demo from the latest release of OpenMCL to work:
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:
Skimming the source of the demo code, define-objc-class and define-objc-method are pretty intriguing.
It's one of those semi-mythical shrinkwrap lisp applications (just one of several by Media Design in-Progress).
Version 0.11 of OpenMCL has been released, with lots of significant changes and bug fixes:
The release notes contain many more changes.