New from Paul Graham: “What the Bubble Got Right”
The world's first interactive fiction standalone Z-machine: The Commodore 32. Built-in Z-interpreter, 64K of Z-Machine RAM, 32K of ROM in Z-Carts, Infinite Imagination. [via nickm at Grand Text Auto.]
MJ Ray has been collecting, progressively more sporadically, Scheme-related news and announcements at Scheme Weekly News.
John Lam's post about controlling Microsoft Agents in Python reminded me of some code I wrote years ago.
(defmethod sa:move-event ((self demo-agent) character-id x y cause) (when (eql cause 1) (let ((phrase (case (floor (/ (random 3) (+ (random 3) 1))) (0 nil) (1 "Hey!") (2 "If only I had a mouse, then you'd be the one dancing.")))) (when phrase (sa:speak self (parse-integer character-id) phrase))))) (defparameter *a* (make-instance 'demo-agent)) (sa:load-character *a* "p1" "peedy.acs") (sa:show *a* "p1") (sa:speak *a* "p1" "Hi, my name is Peedy.") (sa:play *a* "p1" "greet") (sa:speak *a* "p1" "I'm very entertaining.")
The Python code is a little nicer looking.
agent = win32com.client.Dispatch("Agent.Control.2") agent.Connected = -1 agent.Characters.Load("Peedy", "Peedy.acs") peedy = agent.Characters("Peedy") peedy.LanguageID = 0x409 peedy.Show() peedy.Speak("Hello, World!") peedy.Play("Blink")
This weekend I went to my first Pixies show, at the Greek Theatre in Berkeley. I'm not a rabid Pixies fan, but they are good, and this reconciliation tour is nothing if not historic (now I'll always be able to say “I saw the first Pixies reunion tour.”). Lori made t-shirts for the event, which pretty much guaranteed that we had the coolest ones there.
Surrounded by thousands of adoring fans, most of which were more of the singing-along-with-every-song variety than the get-up-and-dance-wildly sort, you could tell it was kind of a special experience for everyone there.
The manuscript of The Baroque Cycle was written by hand on 100% cotton paper using three different fountain pens: a Waterman Gentleman, a Rotring, and a Jorg Hysek. It was then transcribed, edited, formatted and printed using emacs and TeX. When it was totally finished, the TeX version of of the ms. was converted to Quark XPress format using an emacs LISP program written by the author. Some share of credit thus goes to the people who made the GNU/Linux operating system and to the originators of LISP.
Neal: The spelling “LISP” has been passé for over 10 years now. I'm just saying.
Matthew Danish grabbed this frame From Serial Experiments Lain:
<Zhivago> proving that lisp is the goth chick language of future choice
Anime can be pretty geeky, but it has a significant overlap with what might be considered cool popular culture; E.g., you can buy it at the Giant Robot store.
Something you won't see at the Giant Robot store until after they decide to carry those tubgirl posters is the Introducing Python video. Jesus Christ. That's supposed to be a marketing video?
Little known fact: everybody involved in the production of this video about the <font face="70s computer">Python Coding Language</font> knew how to code in Python, even the caterer. Another little known fact: none of them ever got laid again.
Actually, I can pretty easily see Giant Robot selling a little plastic tubgirl figurine.
John Blue let me know that there was an error preventing anyone from posting comments. It's fixed now (apparently mt-blacklist doesn't check that the regexes it's prompting you to add to its stop list are valid regexes). Thanks, John
Christophe Rhodes has a silly screenshot of SBCL's fledgling unicode support.
Mikel Evins has written a how-to called “Creating Applications with OpenMCL and Bosco”:
Using OpenMCL, the excellent free Common Lisp compiler from Gary Byers, you can build Carbon and Cocoa applications that work on Mac OS X. The reason more people don't do it is that it's not obvious how to build such applications. To make it a little easier and more obvious, I created an application template named Bosco.
In this guide we'll go step-by-step through the process of getting and installing OpenMCL and Bosco, then through building an application with them. We'll see how to use Bosco's features to build a Carbon application, and how to build user-interface resources with Apple's Interface Builder and integrate them into Lisp applications. A later version of this guide will add a section on how to build a Cocoa application; the process is very similar.
He illustrates using an Interface Builder-created GUI from within OpenMCL, even.
In the new implementation, processes within Lisp are instances of a CLOS class that can be specialized to get customized behavior. Process objects mediate the programmer's access to threads. The programmer creates an instance of the process class (or of a subclass of the process class) in order to start a parallel computation. The computation's state can be inspected and modified through the use of functions that receive the process object as an argument.
Because processes are CLOS instances, the programmer can create specialized process classes whose instances contain application-specific attributes or behaviors. A server application, for example, could add slots to hold request queues or sockets or transaction-status data structures. After methods defined on initialize-instance and process-terminate could perform application-specific startup and shutdown actions.
This new model allows greatly simplified system design and implementation. It allows the programmer to treat the process and the server instance as a single object, instead of forcing a program structure in which they are two distinct things, one of which owns the other.
A beta version of the new documentation is available.
I've finally had it with Earthlink DSL. On the technical side it's been OK, but the customer service and tech support has been terrible and incompetent. They disconnected my DSL, and not only can they not tell me why but as far as their system is concerned I've had a dial-up only account since June (I've been using DSL happily for the last couple months).
The final straw was when they enticed me, using rebates and priority call back phone numbers, into giving them another chance and waiting three weeks to have my service re-enabled, and then they flubbed the call transfer and disconnected me.
newLISP is a Lisp-like scripting language with most of the stuff that people expect in a modern programming language already built-in, plus a little more:
Paul Graham's comment on newLisp, over at Lambda the Ultimate: “[If] I'm going to be beaten to the punch by another Lisp dialect, can we make it Goo?”
XS Lisp, by Taiichi Yuasa, is a Lisp programming environment for Lego Mindstorms. Unlike LegoLisp or LegoScheme,which run on a PC and send commands to the RCX computer, XS Lisp runs right on the RCX itself.
XS Lisp includes the following features:
Here's some sample code, from Taiichi's ILC 2003 paper:
(define (forward) (motor :a (motor :c :forward)) (play '((:Re4 . 2) (:Do4 . 1) ...))) (begin (speed :a (speed :c :max-speed)) (forward) (with-watcher (((touched? 2) (motor :a (motor :c :back)) (sleep 5) (motor (if (= (random 2) 0) :a :c) :forward) (sleep 5) (forward))) (wait-until (pressed?)) (motor :a (motor :c :off))))
Pete Hopkins blogged some notes from Taiichi's ILC talk back in November of last year.
(defppclapfunction load-array ((n arg_z)) (check-nargs 1) (with-altivec-registers (vr1 vr2 vr3 vr27) ; Clobbers imm0 (li imm0 arch::misc-data-offset) (lvx vr1 arg_z imm0) ; load MSQ (lvsl vr27 arg_z imm0) ; set the permute vector (addi imm0 imm0 16) ; address of LSQ (lvx vr2 arg_z imm0) ; load LSQ (vperm vr3 vr1 vr2 vr27) ; aligned result appears in VR3 (dbg t)) ; Look at result in some debugger (blr))
I wish there were some cool examples.
Watch out for the german “Linux Magazin Sonderheft” special edition on scripting languages, appearing on Sep 23. This will feature a bootable modified Knoppix CD which will have xemacs + cmucl 19a + ilisp + quite some further cl Debian packages on it (including onlisp-ps, but not including the hyperspec and cltl. I could not put it onto the CD for license reasons.)
This is actually closer to how most people will eventually interact with robots than the idea of a general purpose homebot.
We finally made it to the Hollywood Hell House. A tour doesn't even run 30 minutes, but it's lots of fun and easily worth $10. How much would you pay to have Penn Jillette, in costume as Lucifer, caress your cheek? The rest of it is just a bonus: getting a suicide's brains splattered across your face as she pulls the trigger, witnessing gang rape at a rave, watching one of those poor, misguided Jews getting ground into hamburger in Hell. And of course, spotting major and minor celebrities in thick makeup and prosthetics.
And while the tone isn't reverent, or even serious, the script is apparently followed pretty closely. It's just that it's already self-lampooning.
Joanne, as we walk out of Heaven: “Nice wedding ring, Jesus.”
Jesus, muttering: “It's for the nuns.”
And also lovely.
It took me 20 minutes to convert the code, which ended up being about one third as many lines.
Philip Greenspun has some other MIT AI Lab reminiscing too.
Busy weekend. Finished off a bottle of Maker's Mark while waiting in line for the Hollywood Hell House, forgot my credit card at the Bigfoot Lodge, had the best dim sum, saw both the nano exhibit and the Beyond Geometry exhibit at LACMA, and had the best Thai. Lori has more detail, as do Dan and Carol.
We're just cool.
Ben Hyde has been adding to the OpenMCL wiki over at HintsForOpenmclUsers:
Reini Urban's FFI paper is about 70% done:, “Design Issues for Foreign Function Interfaces: A survey of existing native interfaces for several languages and some suggestions”
The wiki page SocialProblemsOfLisp is one of the worst c2 wiki pages I've ever seen. Which is really too bad, because Lisp does have some serious social problems and we could use real attempts at fixing those.
Krzysztof Wlodarczyk has a new Lisp IDE for Windows, based on clisp: Visual CLisp. It's got syntax coloring and help based on CLtL2 (it really should at least include some hyperspec lookup, too).
It looks kind of raw, but it could turn into something.