The #lisp nets have brought in a full haul already today.
Brian Spilsbury's unicode support for cmucl plus dialect dependant symbol translation:
WeirdIRC as a testbed for new McCLIM functionality (text fields in this case):
KMP on loop:
The paradox of LOOP is that if you confine yourself only to the loops that look stylistically clean and simple (which are the ones that Smalltalk probably does well), you get a subset that would never have caused LOOP to come into existence in the first place. Like it or not, LOOP was invented to allow you to write the complex stuff that is hard to express in terms of simple functional iterators because the control structure is a tangle.
KMP gets philosophical:
The world is not always pretty. When it is, one must not blame the lack of prettiness on the language that tries to emulate it. Sometimes tangled webs of reality lead to tangled webs in programs.
That may be one of those initially-depressing, eventually-uplifting sorts of realizations. I still don't use loop (but at least now I'm better prepared to justify it to myself if I do).
Trolling #lisp for pretty pictures...
Stig E Sandø's langband, an angband-alike in lisp:
Guess what browser this is:
Looking at the members of the GRACE team, it's not surprising that they're entering the most ambitious robot in the contest:
I'm not sure what parts of GRACE may be written in Lisp. There are lisp bindings for IPC, which GRACE uses, so... nope, I still have no idea.
I'm interested in the development process used by that geographically distributed team, actually.
Jochen Schmidt's WeirdIRC client runs on a wide spectrum of hardware. Chronologically wide, that is.
WeirdIRC on a lisp machine (Symbolics Genera, courtesy Rainer Joswig):
I don't know much about RSS, but from the little I played with RSS readers they seemed pretty inflexible. I thought it might be worthwhile to offer a couple RSS options for lemonodor (approx. 10% of the raw hits to lemonodor are from RSS aggregators).
RSS 0.91 is too simple. RSS 1.0 is too complicated. Brief feeds just have automatically generated excerpts of posts, and are not HTML. Full feeds are entire posts, in full HTML. Try them out, see what works best for you.
If you have suggestions for modifications, or run into any problems using these feeds, please let me know.
Check it out: a bonus, and it's coming your way! Here are one sentence reviews of the readers I've tried.
None was compelling. I'll stick with a browser.
clisp 2.29 has been released. It is a bug-fix/portability release.
I have to get you to drop modesty and say to yourself, "Yes, I would like to do first-class work." Our society frowns on people who set out to do really good work. You're not supposed to; luck is supposed to descend on you and you do great things by chance. Well, that's a kind of dumb thing to say. I say, why shouldn't you set out to do something significant. You don't have to tell other people, but shouldn't you say to yourself, "Yes, I would like to do something significant."
Hi. My name is John, and I would like to do something significant.
Seriously, reading this has caused me to think about my priorities. What code do I want to write, what systems do I want to create? What code do I not want to spend my time on? It has been good for me. Maybe it will be good for you, too.
Gary Byers has been making rapid progress since the initial Cocoa experiments in OpenMCL:
Version 0.7.6 of the SBCL lisp environment has been released.
The release notes mention a lot of bug fixes, Solaris 9 support, and FFI documentation.
I haven't tried SBCL, but it gets serious respect from me for being a native code compiler written in ANSI Lisp, one that can be built in lisps which are not itself.
Here's more code from the generous i/net vaults. It lets you write AIM chatbots in lisp, and is made available under the MIT license.
lately I've been thinking it could be fun to add this as a backend for one of the CLIM IRC clients that people are working on these days.
Here's the documentation.
CLAIM is an implementation of AOL's semi-open Instant Messaging protocol, TOC (see PROTOCOL.txt). It allows one to build chatbots and other AIM clients.
Load this code, then load the examples/gossip-bot.lisp file. At the listener, run the start-gossip-bot function:
? (gossip-bot:start-gossip-bot "myusername" "mypassword")
You must use the username and password of an existing AIM account (see <http://aim.aol.com/> on how to create a free AIM account).
Anyone can now send messages to and interact with the gossip bot.
CLAIM requires a lisp that supports the ACL socket API (see <http://www.franz.com/support/documentation/6.1/doc/socket.htm>, and <http://ww.telent.net/cliki/ACL-COMPAT>). Actually, all you need is a function socket:make-socket for connecting to a remote host (in text mode).
For example, in OpenMCL the following is sufficient:
(defpackage :socket (:use :common-lisp) (:shadowing-import-from :ccl #:make-socket) (:export #:make-socket))
The TOC protcol is slightly binary, mostly text. Accordingly, I open socket streams in text mode and fake the binary parts. It won't work unless your Lisp's code-char and char-code functions use ASCII.
I've written the code without assuming multiprocessing, but in a way that will work with most multiprocessing implementations. Let me know if it doesn't work out that way.
I checked all the other AIM libraries I could find, and nobody even tries to deal with the "server speed limit", which was a constant problem for me. See the comments at the end of this file for one attempt to solve this problem.
The following implementations of TOC were helpful when writing this one:
This code has been tested in ACL/Linux, OpenMCL/OS X and MCL. At one point it was known to run on ACL/Windows and CMUCL/Linux as well.
There should be much more documentation. I've tried to structure the code so that it is easy to extend and use for chat clients, but documenting what I did would help a lot too. Sorry.
I sent in the little patch to get CLX working in OpenMCL.
I tried to get it working in regular MCL too, but ran into a few little problems that I could not figure out. Oh well.
It took some fiddling and patching, but I finally got some McClim to run in OpenMCL.
© Biological Imaging Center of the Beckman Institute at Caltech
I just really like this image, which shows gene expression during development of a human embryo.
OK, it's really a mouse embryo. But could you tell the difference?
Once I got CLX running under openMCL, i was all excited to get McCLIM working too. But my will to code has been significantly depleted by trying to work around the fact that MCL does not support the MOP described in AMOP. McCLIM doesn't use much of it, but MCL implements even less.
I found an old bit of contributed code from James Anderson that was able to add some MOP support. Unfortunately it is not compatible with the AMOP MOP.
M. J. Dominus says "'Design Patterns' Aren't", which is a little different from Norvig's "design patterns are mostly irrelevant in dynamic languages" [seen at Patrick Logan's weblog].
I think it might be a mistake to judge design patterns based on the GoF book, where they are described in a way that seems to tie them to pretty specific language features (or the lack thereof). M. J. Dominus seems to be agreeing with Richard Gabriel, who is a smart guy and thinks there's much more to patterns than the GoF book (which he has called "damaging"). I guess a good patterns book is still waiting to be written.
Saturday night was the second time I've seen American Analog Set. They disappointed.
First the Knitting factory's sound completely sucked. Something was resonating badly with the bass, and there was quite a bit of feedback. Then amanset chose to play eight boring songs in a row. I like the band a lot, but that's based on my obsession with one or two songs per album, and meager tolerance of the rest.
Also, I didn't know it, but they seemed to be 16 years old. Like the rest of the audience.
This New York Times article describes the Multimedia Intelligent Network of Unattended Mobile Agents, or Minuteman, project, which is figuring out how the military can achieve its dream of a battlefield filled with swarms of autonomous vehicles in the air and on the ground.
This is a Global Hawk, which can fly more 60,000 feet over the battlefield for over 40 hours (it was first deployed in Afghanistan, and was the first UAV to fly non-stop over the pacific), and may be used to provide a communications umbrella over fleets of smaller vehicles:
It really looks nice.
That's an X window opened by OpenMCL using my hack-and-slash port of CLX (running XDarwin and the OroborOSX window manager on my PowerBook).
It's kind of funny. There's no reason that CLX couldn't have been ported to work with MCL on a Mac at any point in the last 10 years, really, though not too many people were running an X server on a Mac, and the number of people running lisp applications on a Mac but wanting to put the display on a remote X machine was probably pretty low. Now, of course, you've got OpenMCL, which has no real GUI support yet, and XDarwin, and suddenly CLX starts to look useful.
I chose the CLOCC version of CLX (it's kind of unfortunate that there are so many versions) because it claimed to be moving the code toward ANSI, even though I dislike the CLOCC PORT package that it uses for sockets and multiprocessing support.
It will take a bit more work before this is ready for real use, but not too much.
This is old news, but I recently saw a reference on usenet to a 2001 lisp survey from International Technology & Trade Associates, Inc. : LISP Power And Functionality Still A Well-Kept Secret.
I don't know who ITTA is or what agenda they may have, but they did gather some slightly interesting data.
For example, the breakdown of the lisp market by "vendor" was
The Franz number may be slightly inflated relative to the others, as Franz encouraged some of their customers to fill out the survey.
Most of the survey results really just report on the opinions of the lisp community, of which the most important one is that lisp is a superior programming language.
I'm not sure how useful it is to know that lispers like lisp. But then ITTA goes on to say
The pressure is on Lisp users and vendors to increase their level of interaction and consider ways to grow and revitalize the Lisp community. One option is to develop a supported Lisp open-source development environment. However, no one within the community seems willing to take the lead in such a development (such as Linus Torvald did with Linux) -- or seems willing to even supply code. (This may be partially due to the proprietary nature of many of the successful Lisp projects in industry).
I don't think that focusing all development effort on a single open-source lisp is desirable, or realistic, but there are in fact several lisps giving away code, and ITTA was already aware of cmucl at the least. So the conclusion seems completely silly to me.
Richard Wallace sounds like a smart guy, but sadly suffers from depression and manic depression, as well as some drama associated with that (e.g. a restraining order barring him from the campus of UC-Berkeley). Possibly most unfortunate, however, is that he's spent so much time on Alice, which is based on ideas that Marvin Minsky describes as "basically wrong". I'm with Minksy--Alice looks like a fancy eliza.
Thomas Burdick reveals how to make ilisp and cmucl to get along so that you can M-. (edit-definitions-lisp) your way to the source of built-in cmucl functions:
ILISP has a command edit-definitions-lisp, bound by default to "M-.". CMUCL keeps track of which source file a function comes from, so ILISP can bring you to a function or variable or macro definition. In the case of CMUCL's own source, the remembered location looks like: target:code/hash-new.lisp for example, the source file that the GETHASH definition comes from. This uses CMUCL's search-list extension, so you need to set the "target:" search-list, unless you happen to have the source in the same place as the person who built your CMUCL: * (search-list "target:") (#p"/net/dukas/l1/emarsden/CMUCL-18d-src/build/" #p"/net/dukas/l1/emarsden/CMUCL-18d-src/src/") * (setf (search-list "target:") (list #p"/opt/local/packages/cmucl-18d/src/")) (#p"/opt/local/packages/cmucl-18d/src/") Now you can type "(gethash", then M-. and get brought to the definition for GETHASH. Very cool.
It's really handy sometimes to see how your lisp implements something. Handy, and often educational--not so much so that you can take advantage of implementation quirks or learn implementation limits, but as a way to become familiar with good lisp practices (we will assume that the people that write your lisp environment wrote mostly good code).
(It does seem like cmucl should be using a logical pathname host instead of a "search list" (which is not standard) for this. That's what MCL does. MCL comes with source for everything but the compiler itself, and M-. there taught me a lot when I was first starting out in lisp).
It also means that they're googleable.
To start reading these mailing lists as news, point your favorite newsreader at news.gmane.org.
Roger Corman has quit his day job to work on Corman Lisp full-time. Everything I've heard about Corman Lisp has been good, and the upcoming 2.0 release will add the ability to create DLLs , as well as "marking the beginning of a new expanded commitment to the Lisp market" for Corman's company.
At this point it can only be good to have another industrial strength Lisp vendor.
Sci-fi hip-hop. It sounds dorky, but it's not. Well, maybe it is, frankly I don't trust myself 100% to be able to tell whether it is nerdy or not, but I do know that it's good: Deltron 3030 is part of the Dr. Octagon / Handsome Boy Modeling School / Gorillaz series of high-concept albums by Dan the Automator (and Del Tha Funkee Homosapien).
It's about some kind of mech warrior in the year 3030 A.D. who becomes disillusioned and turns into a rebellious MC, burning The Man's systems with high powered viruses and empowering the downtrodden with rhyme. Anyway, it's good, and this song in particular I find catchy in an interesting way: positive contact.
My sister and her husband saw Gorillaz a couple months ago, and she said she was able to peek around a curtain and see Dan the Automator just kind of hanging around. "I was disappointed, he just looked a normal, boring Asian guy."
From Steven Woodcock's 2002 Game Developer's conference report (warning, it's a Word document), in a section discussing languages used for writing game scripting systems:
Virtually everybody uses C and C++; those are the tools we have at the moment and it's the reality of the business. A few games use Visual Basic. LISP is more a favorite of academics and rarely used by game developers, though the AI in Halo makes heavy use of LISP scripts.
It makes sense; the founders of Bungie learned Lisp at the University of Chicago, (like me!) back when it had an AI lab.
I just had an annoying problem on my linux PC: After moving the machine to a new desk, the mouse no longer worked. Linux saw the mouse, but /dev/mouse was broken, gpm died, and X couldn't start.
I of course searched for other people with this problem, but found none. Since I was able to resolve it, I will post this in the hope that in the future someone will find it useful.
The log messages you are searching for:
modprobe: modprobe: Can't locate module char-major-13 gpm: oops() invoked from gpm.c(186) gpm: /dev/mouse: No such device modprobe: modprobe: Can't locate module char-major-13 gpm: oops() invoked from gpm.c(978) gpm: /dev/mouse: No such device
Other keywords: X won't boot, PS2.
How I fixed it: I unplugged the mouse, booted, told kudzu or whatever to remove the mouse config, then rebooted with the mouse plugged in and told kudzu to add the mouse. All fixed.
I somehow missed two new OpenMCL releases (apparently they weren't announced on the openmcl-devel mailing list...).
OpenMCL 0.12.1 has lots of bug fixes, some pretty important, and some new features. I'm most happy about active socket connections working, but there's also a more extensive Cocoa demo I want to take a look at.