I enjoyed this article on clustering with Ruby: ”Linux Clustering with Ruby Queue: Small Is Beautiful” [via LtU].
Yukihiro Matsumoto, aka Matz, has said that “The purpose of Ruby is to maximize programming pleasure”, and experience has taught me that enjoying the creative process leads to faster development and higher quality code. Ruby features powerful object-oriented abstraction techniques, extreme dynamism, ease of extensibility and an armada of useful libraries. It is a veritable Swiss Army machete, precisely the sort of tool one should bring into uncharted territory such as the NFS-mounted priority queue I was seeking to build.
The article also gives a little insight into what it takes to create those satellite views of night-time lights (142 terabytes of intermediate files, among other things).
I'm not sure yet whether it's a good idea, but I decided to catch up on comp.lang.lisp after months of being away.
List Comprehensions
Sven-Olof Nystrom implemented Python-style list comprehensions for Lisp:
For example, this list comprehension
(collect (list) ((* x x)) (in (x) '(1 2 3 4 5 6 7 8)))evaluates to
(1 4 9 16 25 36 49 64)Perms builds a list of all permutations of a list.
(defun perms (l) (cond ((null l) (list nil)) (t (collect list ((cons a b)) (in a l) (in b (perms (remove a l)))))))
Sven-Olof's collect macro handles arbitrary sequences, hash tables and multidimensional arrays. He first released a version of this code back in August of last year.
MCL and Unix
Kenny Tilton, John Desoi, Ron Garret and Thomas Russ try to figure out how to get MCL to handle unix-style files that use lone linefeeds as end of line markers.
#| Note: Do not put any semicolon comments before this line. The next forms define a semicolon reader for both #\linefeed and #\return line endings so that OpenMCL can read MCL input files (Mac line endings). Should also work with with MCL for unix files. |# (defun semicolon-reader (stream char) (declare (ignore char)) (do ((c #\null)) ((or (char= c #\linefeed) (char= c #\return))) (setf c (read-char stream nil #\newline t))) (values)) (set-macro-character #\; #'semicolon-reader)
(setf CCL::*LINEFEED-EQUALS-NEWLINE* t)
Games
I could only bear to look at one or two messages in one of the “Lisp, C++ and Game Development” threads from mid-November, but G.A. quoted a Naughty Dog developer on their transition to C++:
After using a completely custom language for our last three PS2 projects, coming back to C++ has been a pretty rude awakening. We were hoping we could work around some of the deficiencies of C++ with a good preprocessor, ideally one that provided more than symple hygienic macro substitution...
(I tried to find the source of this quote, but I guess the mailing list mentioned isn't visible to google.)
Helen Greiner, CEO of iRobot, gave a talk at Accelerating Change which is http://www.itconversations.com/shows/detail336.html [via Jim Thompson].
Ms Greiner's talk describes this new class of technology, how technology accelerations have affected our field, and how mobile robots will themselves catalyze accelerating change.
It's a pretty general talk, but she does get into a few details about how the packbot works, for example.
Also, it's nice to see a woman in a leadership role in the robotics industry.
Lori and I spent Christmas weekend relaxing in Las Vegas and hanging out with family, and I got quite a bit of hacking done. LispWorks was used, and since I am now a SLIME-based lifeform, that meant trying Bill Clementson's and Kevin Birch's AppleScript-style SLIME enabler.
I had to modify the AppleScript as posted on Bill's weblog in three minor ways to get it to work reliably:
The complete script: lw-start.applescript.
On #lisp, Rainer Joswig suggests a course of reading to get Dan Barlow up to speed on CLIM (this transcript is slightly edited).
<dan-b> | ok, what downloadable clim stuff should I grab before being netless for four days |
<dan-b> | let us assume I plan to write bits of clim app in that time, and I know essentially nothing about it to start with |
<lispm-wim2> | dan-b: all docu you can find ;-) |
<dan-b> | bah |
<dan-b> | you know, a suggested reading order would be a nice touch |
<lispm-wim2> | dan-b: hmm |
<lispm-wim2> | dan-b: you need reference stuff, like the CLIM reference |
<lispm-wim2> | plus |
<lispm-wim2> | the CLIM user guide from Franz and/or Xanalys |
<lispm-wim2> | http://kantz.com/jason/clim-primer/ |
<luis> | That primer is cool. |
<luis> | Very short, but cool. |
<dan-b> | time for some wget shopping, then |
<lispm-wim2> | http://www.lispworks.com/reference/documentation.html |
<lispm-wim2> | download the CLIM user guide |
<lispm-wim2> | (pdf or ps) |
<luis> | Oh, wait, I'm thinking of another one |
<luis> | I'm going to read that then :) |
<dan-b> | kewl. molto gracias |
<lispm-wim2> | http://www.franz.com/support/documentation/7.0/doc/clim-ug.pdf |
<lispm-wim2> | this should be also very useful |
<lispm-wim2> | http://www.ocf.berkeley.edu/%7etfb/misc/lp90.pdf |
<lispm-wim2> | guided tour to clim from 1991 |
The ILC 2005 website seems to be taking shape, including the call for submissions [via Paul Dietz].
“Gracle, A development and deployment environment for Common Lisp” [postscript file], by Robert Strandh [via Rainer Joswig]. (My own PDF conversion.)
Gracle differs in two important ways from ordinary operating systems such as GNU/Linux, in that it does not have files and that it does not have processes.
Sounds like a party!
[Updated: Fixed the PDF link. Thanks, Tobias.]
Apple Technical Note TN2124: Mac OS X Debugging Magic.
This technote describes a number of 'secret' debugging facilities in Mac OS X, including environment variables, preferences, routines callable from GDB, special files, and so on. If you're developing for Mac OS X, you should look through this list to see if you're missing out on something that will make your life easier.
Debugging memory allocators, debugging information printing functions for use in GDB, debug versions of system libraries, debugging Apple Events, AppKit view outlines, and loads of other helpful stuff for debugging and development in OS X.
PC Magazine mentions the White Box Robotics 912 robot, running Evolution software.
The 912's chassis looks like a racy version of R2-D2 and comes with a VIA motherboard and customizable software from Evolution Robotics. “The software is capable of speech synthesis, speech recognition, motion sensing, obstacle avoidance, and more,” says Tom Burick, White Box's president.
White Box was previously mentioned here in April.
The Powerbook was only away a fraction of the time they said it would be gone, and it looks like a brand new machine. Apple fixed the hinge, replaced the inverter board (I guess that fixed the spotty backlight) put a new upper case on it, and even replaced the rubber feet.
I hadn't realized how used I had become to my old trackpad surface, worn smooth by my own juices.
I lie. This roundup really only goes back a week at most.
But, Zach Beane is working on a list of the significant events of the Lisp world for 2004.
Successful Lisp is for sale at Amazon [via Lispmeister].
New QRIO sightings by Brian Mastenbrook.
Franz is offering a two-year non-commercial student license of ACL 7.0 enterprise edition for $99, and is planning on offering a 64 bit version of ACL 7.0 for OS X [via Rainer Joswig].
Rainer also mentions that Functional Developer, which was originally Harlequin DylanWorks, has been open sourced.
Bill Clementson uses AppleScript to get the LispWorks Personal Edition working with Slime.
And, finally, the big one: Edi Weitz announced RDNZL, which “enables Common Lisp applications to interact with .NET libraries”. It works with LispWorks and ACL in Windows.
Alexander Repenning's AgentSheets 1.6 got a mention in the Apple Developer Connection Newsletter. (AgentSheets was at one time written in Lisp. Is it still Lisp-based?)
While googling for more info, I found a researcher doing work in using comics to teach children about programming, especially concurrency. Intriguing.
(Fri.)
9:30 pm: At the annual MJT reception. Bumped shoulders with Werner Herzog. He seems to talk exactly like he does on film.
10 pm: Gave Steve Martin a tip on how to best view a miniature reproduction of a Giacomo Torelli automatic scenery changing device for baroque opera. Odd mustache.
(Sat.)
11 am: Ate buttery pancakes while sitting outside at Millie's. 80 degrees and sunny. The Beatles' Revolver and an old PJ Harvey album were played.
2 pm: Took an hour-long nap in a warm Spartan Royal Mansion trailer. It's 50 years old and used to be Roger Brown's.
3:30 pm: Tea in the tea room. Gerry Casale was there but left before we arrived. Lori and Mark and Charley knit while I do a little coding.
4:30 pm: Cocktails at the midget orgy hotel.
5:15 pm: More napping in the trailer.
(Sun.)
11 am: The Carol C special at Roscoe's.
12:30 pm: Ruscha exhibit at MOCA. Shopping frenzy in the gift shop; fascinating Muji merchandise.
3 pm: GTA.
9:30 pm: More GTA. Too tired to go to Joanne's work Christmas party, which starts at midnight.
Tim Converse, AKA Timboy of “lisp advocates” fame, is interviewed in the Yahoo Search weblog [via troutgirl]: part 1, part 2
The Times Online on IRobot's newest military robot:
The killer robot of the 21st century will be the illegitimate child of a vacuum cleaner and a John Deere tractor.
Various models of John Deere's “Gator” tractor have been used as robotics platforms before, and apparently the militarized, diesel-powered M-Gator model is widely used by U.S. armed forces. iRobot's R-Gator adds autonomy to the M-Gator, as well as over $200,000 to the cost of an individual vehicle.
The segment of the marketing video (I'm glad they have music that's as cheesy as in our marketing videos) with the R-gator following a walking soldier makes me wish I had one or two of my own that would follow me like obedient, loyal dogs. I'd walk into the office and they'd wait patiently outside on the sidewalk until my workday was over, and I would walk outside and call them to me, and we'd amble home together while Segway-riding Pasadena cops stopped and gawked.
Mr. Pike is concerned that military technology is moving faster than many people realise. “You really can imagine these robots replacing infantry on the battlefield,” he said, “but I don’t think we've really thought through how this will change war. If you were of the opinion that America was a rogue superpower based on the military policy of today — well, you ain't seen nothin' yet.”
Oh boy.
Here are thirty or so jobs mentioning Lisp, many of them using Lisp as the primary programming language. indeed.com seems to aggregate job listings from many services, and even offers RSS feeds.
On the topic of Lisp-specific aggregation of job postings, Steven Haflich has an old comp.lang.lisp post about automating the process.
Dr Hinke Osinga and Professor Bernd Krauskopf, of Bristol University's engineering mathematics department, used 25,511 crochet stitches to represent the Lorenz equations.
The equations describe the nature of chaotic systems - such as the weather or a turbulent river.
The academics are offering a bottle of champagne to anyone who cares to follow the pattern published in the journal Mathematics Intelligencer.
Previously, mathematical crocheters were mentioned on Lemonodor in May.
There will be new posts soon. It's not as if there isn't a lot going on with Lisp, and with other things. It's just that I had to take the Chrysler into the shop to replace the starter and fix a leaky transmission, the local DMV manager can now recognize me on sight and calls the issues I'm having with my Volkswagen registration “a brain scrambler with eggs on top”, my boss is out of town helping a European space agency with some robotics stuff and in the meantime I've had to give a major demo and prepare for an imminent LaneHawk pilot, and Christmas is in a week and a half. I'll get around to clearing the lemonodor backlog soon, though. Just for you.
SBCL is 5 [via Brian Mastenbrook].
Date: Tue, 14 Dec 1999 18:53:46 -0600 From: William Harold Newman To: cmucl-imp@cons.org Subject: It's alive! (SBCL, a CMU CL variant which bootstraps cleanly) I've made a system derived from CMU CL which can build itself from scratch, requiring only vanilla ANSI Common Lisp as a cross-compilation host.
If you're in the Bay area, and want to celebrate, Thomas Burdick sent the following email to sbcl-devel:
In case anyone here would be interested, but isn't on the BA lispniks list, the Northern California party celebrating SBCL's 5th birthday will be at 8pm tonight at Jupiters in Berkeley, CA. It'll be at least Harley and myself. I'll be there with my iBook, hopefully hacking my metacircular interpreter into sbcl. Anyone in the area is more than welcome to show up!
Randall Beer has released version 0.21 of FPC-PPC, his floating point compiler for MCL and OpenMCL.
In floating point-intensive code, FPC-PPC just about gets you 10x the speed and 1/10 the consing just by switching its define-double-function in for defun.
Manuel Odendahl gave a presentation on the BKNR Lisp libraries in Hamburg last month [via lispmeister]. His slides and the accompanying code are now online.
Last week Xanalys released LispWorks 4.4, which includes the the following features and enhancements: some QuickTime support, OPENSSL interface, Cocoa Application Menu support, various optimizations (including 32 bit integer arithmetic), IDE improvements, graphics ports support more image types, an image access API, low-level stream API, native PostgreSQL backend for Common SQL, and my favorite, Objective-C/Cocoa FLI on Mac OS X. Plus, of course, bug fixes.
The free, personal edition of version 4.5 is supposed to be available “in Q1 2005”.
Charlemagne is a genetic programming tool that is written in both Python and Lisp [via gavin]. The uneasy truce between the two languages seems to have come about when clisp was embedded in Python.
From the manual:
Here is an example of an interactive session defining a complex deviance calculating function:
>>> lsp.interactive() CLISP> (defvar SPEED 0.05) SPEED CLISP> (defvar TURNS 50.0) TURNS CLISP> (defun simulator-helper (p turns x y) ...> (if (eq turns 0) ...> (sqrt (+ (* x x) (* y y))) ...> (progn ...> (setq INPUT1 x) ...> (setq INPUT2 y) ...> (let ((theta (degrees-to-radians (eval p)))) ...> (simulator-helper ...> p ...> (- turns 1) ...> (+ x (* SPEED (cos theta))) ...> (+ y (* SPEED (sin theta)))))))) 'SYRUP-DEVIANCE-HELPER' CLISP> (defun simulator (p) ...> (/ (deviance-helper TURNS 50 INPUT1 INPUT2) TURNS)) 'SYRUP-DEVIANCE' CLISP> exit >>> cfg.configure("deviance-calculation", LISP-FUNCTION=simulator) >>> cfg.configure("input", [[1.0,1.0], [0.5,0.5], [-1.0,-1.0], [-0.5,-0.5], [0.25,-0.25],[-1.0,0.75], [0.25,-0.5], [1.0,-1.0]]) >>> cfg.apply()
Successful Lisp is now for sale. foreal. Way to go, David and Markus.
Until it shows up on Amazon, you can buy it directly from the printer.
This is my new favorite website.
i duno what u wore that too but mosta the time u probably shouldnt
what's wrong with your stomache? you look like you have a tumor in the bottom of it...cover that mess up...and i don tlike that outfit...it's not cute or creative...
U look like a banana foreal
Yea man, u on point like a thumb tack, stay fresh
YOU STRAIGHT LOOK LIKE YOU ARE A PART OF A CIRCUS
The photos and videos above are of a Lisp-powered autonomous aerial vehicle. My friend Will is at NASA Ames working on the Apex “autonomy architecture”, which is the particular Lisp software in control of this particular minicopter (the Apex website has more photos and videos of it in action).
The Yamaha helicopter is equipped with differential GPS with centimeter accuracy, has a one hour hover duration with a 65 lb. payload and 200 kbps data rates over radio with a 20 mile range--I know at least one thing I want for Christmas.
Just in case I don't get that, at least I can download the Apex software for free.
I find it pleasing that Apex includes a Procedure Description Language which has at least some superficial similarities to the RAP language I've mentioned before:
(procedure (index (turn-on-headlights) (step s1 (clear-hand left-hand)) (step s2 (determine-location headlight-ctl => ?loc) (step s3 (grasp knob left-hand ?loc) (waitfor ?s1 ?s2)) (step s4 (pull knob left-hand 0.4) (waitfor ?s3)) (step s5 (ungrasp left-hand) (waitfor ?s4)) (step s6 (terminate) (waitfor ?s5)))
I missed this interview with Helen Greiner, cofounder of iRobot, and I missed this photo of the first Packbot lost in action.
In the next few months, more armed remote-controlled landbots will be arriving in Iraq.
First Zach added archives to Planet Lisp (very nice), now he's created Planet Lisp: The CLiki edition, which aggregates the change feeds from the McCLIM, ALU and SBCL Internals CLikis, as well as the original CLiki.
I wonder what a wiki rss feed should contain.
It's already all over the lisposphere, but that's why they call me Ol' Reliable: I really like Conrad Barski's tutorial Lisp comic, “Casting SPELs in Lisp”.
You have to admire someone with the chutzpah to teach complete Lisp beginners about macros. I do find it a little ironic, though, that the very first line of code(second, if you count the ACL-specific setting of *print-length*) is one with unspecified behavior, the discussion of which has led to many long comp.lang.lisp threads:
(setf *objects* '(whiskey-bottle bucket frog chain))
Whiskey bottle, check. bucket, check. frog, chain, check. It's like Conrad somehow got a snapshot of my brain while I was hacking.
I realize that cataloguing bad user interfaces would be a never-ending task, but it feels almost notable when Apple does it this badly. In the screenshot above, the repair status of my powerbook is not ordered chronologically but alphabetically, by status. Duh.
Right. The powerbook is being repaired. It hurts so bad!
That doesn't seem too bad for two-and-a-half years of John-time. They'll also be replacing the top case, which at this point has had most of its paint worn away and is a lot of bare metal. It looked cool, but I guess I don't want it to actually corrode.
Actually, when the hinge blew out I was pretty sure I was going to have to get a new powerbook, which while exhilarating also made me feel a little sick to my stomach--An unexpected $3000 expenditure a month before Christmas? Ouch. Luckily someone told me that AppleCare lasts three years, not the two I thought it was good for.
I've been using a PC laptop with both XP Professional and Fedora Core 3 as a powerbook subtitute. Again, ouch.
Bil Clementson has a nice breakdown of the Lisp implementations by category. Lisps with extensive development environments, Lisps for embedding, Lisps with a small footprint, etc. Based on a comp.lang.lisp post by Rainer Joswig.
Ian Eslick is building a Lisp distribution based on SBCL/ACL with pre-packaged libraries: Think Lisp.
One of the sad consequences of the not entirely irrational bias against lisp in the 80's is that there are no pre-packaged, rich environments that are open source and the commercial packages tend to be too expensive and not widely available at universities that the community desperately needs a platform that one can develop on and distribute as a pre-packaged source of software to allow others to use our research products. I'm building a multi-vendor, multi-platform environment primarily based on SBCL (eventually) for the free version and Allegro for the commercial version due to the excellent compilers that come with them.
The exact list of facilities and utilities that are going to be part of Think Lisp seems to be under consideration.
I didn't know that Kevin Rosenberg had a little interface to the PubMed database until I read it on a bioinformatics weblog: cl-pubmed.