Here's a comp.lang.lisp thread on the history of CLIM [via cliki].
Bruce Eckel, author of Thinking in Java and Thinking in C++, is working on a new edition of Thinking in Java:
This language, which was once hailed (admittedly, by the PR flaks at Sun itself) as being "much easier than C++" really isn't anymore.
Franz recently started offering a couple RSS feeds, one for general news and one for technical news. Both are on Planet Lisp already.
Offering these feeds is such a simple thing, but it's such a good idea. I wonder which Lisp companies have enough news to make a feed worthwhile?
Rui Carmo's “Ten Open Source Projects Worth Keeping Track Of” are newspipe (RSS to email gateway), Growl (OS X notification system), Freemind (a “mind-mapper”, about which which I am 90% skeptical and 10% intrigued), monotone (version control), CVSTrac (version control repository browser + wiki, looks nice), QEMU (CPU emulator), pxes (some sort of thin client), VNC (you know what VNC is), Zoë (email search engine) and Dowser (a web search assistant that I totally want to try).
That was kind of a busy week, starting on Tuesday when Lori and I said goodbye to Mike and Ally, who left to start a new phase of life in London. I'm really happy to hear that things are going smoothly since they arrived there. I'm still going to miss them a lot.
Then we went up to the bay area Thursday night to see the Arts and Lectures interview with Ricky Jay at the Herbst theater, followed Friday night by the opening of his exhibit at Yerba Buena. The opening was fun, but it was a zoo, packed with SF hipsters (and yet I couldn't find a single photo from the opening on flickr) and Yerba Buena staff dancing to too-loud “funk”. Besides Ricky's broadsides, which were beautifully presented, I liked: 1. Christopher Taggart's thirty foot-long photographically-tessellated dead squirrel sculpture suspended overhead, 2. “make that a double.”, 3. Judith Scott's creepy yarn objects, 4. eyeing the northern breed of art scenester.
Of course the weekend was filled to the brim with meal after delicious, rich meal (Patrick wouldn't let us leave without going out for sushi, and Bacheeso is a staple), visiting friends (including meeting Heidi's super lovable cat, Richter, who at 25 pounds deserves a broadside all his own), playing video games (Dan and Carol, meet my good friend Katamari Damarcy--I think the three of you are going to get along fabulously), obligatory trips to Silicon Valley campuses (I was excited to meet the guy who's in charge of OS X security updates) and hanging out with geeks.
The ride home, ending at 2:30 am, had three great things going for it: 1. 104 THE HAWK, which actually promised more Van Halen than any other classic rock station in the central valley and played the cry of an angry hawk every two or three songs--SCREEEEE! In our punchy state, Lori and I began to communicate in hawktalk. 2. Almost no traffic on the 5 south, where a mudslide in the grapevine closed all but two lanes and caused three hour delays the previous weekend. 3. Heavy fog. My mistake, the ride only had two great things going for it.
“It's like they stole Lisp, and give it shitty syntax!”
It's painful, because Python is not such a bad language. But while Lisp has its own warts, Python has more.
Apparently, ALU CLiki is about to die.
From the front page:
Editing on this site has been disabled indefinitely due to spam; the site itself will probably be removed shortly too. If you'd like to help, please volunteer to host the site: you can download the data from http://ww.telent.net/alu.tar.gz. Thanks. -dan
Christ. Why is it always the ampersands?
It started when I noticed that one of my posts looked a little funny in Planet Lisp.
Patrick Collison, 16, of Castletroy College beat off a record number of entries in the 2005 competition with his winning project, ?CROMA: a new dialect of LISP?.
Why the question marks? My HTML:
Patrick Collison, 16, of Castletroy College beat off a record number of entries in the 2005 competition with his winning project, “CROMA: a new dialect of LISP”.
That looks cool. So I figured it was a bad link in the chain of tools Zach uses to generate Planet Lisp. But then I checked my XML and noticed that it wasn't right.
Patrick Collison, 16, of Castletroy College beat off a record number of entries in the 2005 competition with his winning project, “CROMA: a new dialect of LISP”.
It should have looked like this:
Patrick Collison, 16, of Castletroy College beat off a record number of entries in the 2005 competition with his winning project, “CROMA: a new dialect of LISP”.
I tracked it down to what I think is a bug in Movable Type. From Util.pm:
## Encode any & not followed by something that looks like ## an entity, numeric or otherwise. $html =~ s/&(?!#?[xX]?(?0-9a-fA-F]+|\w{1,8})/&/g;
Apparently this behavior was intentional. Intentionally buggy. Maybe they had some reason for not escaping ampersands (if I had to guess, they did it to appease buggy RSS readers), but it's wrong. Incorrect handling of ampersands in order to workaround buggy handling of ampersands.
I don't know Perl, but it wasn't hard to fix:
--- lib/MT/Util.pm.orig Wed May 28 09:48:41 2003 +++ lib/MT/Util.pm Wed Jan 19 01:54:08 2005 @@ -249,13 +249,7 @@ if ($Have_Entities && !MT::ConfigMgr->instance->NoHTMLEntities) { $html = HTML::Entities::encode_entities($html); } else { - if ($can_double_encode) { - $html =~ s!&!&!g; - } else { - ## Encode any & not followed by something that looks like - ## an entity, numeric or otherwise. - $html =~ s/&(?!#?[xX]?(?:[0-9a-fA-F]+|\w{1,8});)/&/g; - } + $html =~ s!&!&!g; $html =~ s!"!"!g; $html =~ s!<!<!g; $html =~ s!>!>!g;
Then I thought, as I so often do, “Hey, I'm going to post this to lemonodor! I'll post a diff and it'll look hardcore technical and cool and make people think I actually write code sometimes.” My first thought was to IM the diff from the machine I was on at the moment to my powerbook, which has my preferred weblog editing tool. But then I remembered that gaim doesn't handle encoding so very well itself, expecting users to be chatting with each other in HTML (besides this questionable design choice, gaim has specifically had problems with ampersands in urls sent to it--and the gaim team's approach to handling these bug reports was to simply mark them as invalid the next time they released a new version without checking whether it was fixed).
My next clever idea was to try to use the Pasta paste service. Unfortunately that didn't work, either.
That's when I went insane. HTML isn't that hard.
Today's bonus: a patch that fixes CLiki's handling of HTML:
Index: edit-handler.lisp =================================================================== RCS file: /cvs/cliki/edit-handler.lisp,v retrieving revision 1.25 diff -u -r1.25 edit-handler.lisp --- edit-handler.lisp 1 Nov 2004 11:20:05 -0000 1.25 +++ edit-handler.lisp 22 Nov 2004 07:48:34 -0000 @@ -50,7 +50,10 @@ element-num) (format stream "<TEXTAREA rows=~A cols=80 name=E~A>~%" (min 15 (floor (* cr 1.5))) element-num) - (write-sequence buf stream) + (let ((str (make-instance 'escape-html-stream + :output-stream stream))) + (write-sequence buf str) + (force-output str)) (format stream "</TEXTAREA>~%") (incf element-num) ))) (output (c) (write-char c acc-stream)))
I guess you'll need the implementation of escape-html-stream, too.
This post is geeky, annoying and curmudgeonly. No apologies.
P.S. Guess what. When I first posted this article, everything looked great. Then I edited it to add the line above. You know what happened? Someone, either ecto or (more likely) Movable Type FUCKED UP ALL MY AMPERSANDS, forcing me to go back an re-en-fucking-code them again. And there's a lot of ampersands in this post. In going back to fix them, I probably missed some and others probably were fucked up by this software. If I'm really lucky, my patch introduced some new mode of ampersand fuckup.
Patrick Collison emailed me with some information on Croma, the version of Lisp he created that won him Esat BT Young Scientist of the Year (see yesterday's post).
Croma's partly an attempt to correct everything I see wrong with CL/Scheme (1 namespace and continuations like Scheme, but all sorts of everday useful stuff snarfed from CL like proper lambda-list keywords and so on). It also sticks in various experimental things: 1st class macros (bad idea, I've since decided). I spent a while re-thinking assignment, and Croma uses a strange new idea of “overloading” the values of data objects: you can add in an additional function value (sort of like CL) that'll be used instead of its value in the _function_ position if it exists, to make possible assignment that's generalised and extendable but also idiomatic.
All of this is geared towards an integrated continuation-based web development system. Using a fairly elaborate standard library, you can do stuff like (link "Click here" (fn (hdrs) (str 'you 'clicked "me")) in the middle of HTML pages. And, of course, it gets rid of HTTP transactional/statelessness cruft, as has been documented by Graham and Queinnec.
Croma's not quite in a world-useable state, but it's getting there. I'll GPL it as soon as I think others might find it useful, anyway.
I asked Patrick how he became involved in Lisp.
I became interested in Lisp-like languages mostly from hearing Python programmers look for x in the language, “because Lisp has it”. So about two years ago, I armed myself with ANSI Common Lisp, and dived in. Since then, PAIP, The Little Schemer, The Seasoned Schemer, Lisp in Small Pieces, SICP, On Lisp (dead-tree version!), EOPL, CLtL, etc. And I haven't looked back; it's over a year since I coded a program more than 100 lines in something other than CL/Scheme. As has been put in more eloquent ways on the RtL highlight reel, all other languages just look fundamentally wrong and unwieldy by comparison. More importantly, from c.l.l and p.l.o traffic, it seems that we're growing in number!
Awesome.
A Limerick student won a young scientist award for a new Lisp dialect [via Aaron Brady]:
A Limerick student who designed a new computer programming language tonight won the Esat BT Young Scientist of the Year.
Patrick Collison, 16, of Castletroy College beat off a record number of entries in the 2005 competition with his winning project, “CROMA: a new dialect of LISP”.
Andreas Fuchs has a CLIM interface to last.fm. (Code at http://boinkor.net/lisp/clim-lastfm-0.0.tar.gz.)
Ivan Shvedunov posted some cute code to SBCL-DEVEL that can convert C-style function names (Q3CreateMeshABC) to something more in the lisp style of naming (Q3-CREATE-MESH-ABC).
(defun make-field-name (alias) (with-output-to-string (s) (loop with last-caps = t for ch across alias when (and (not (shiftf last-caps (upper-case-p ch))) last-caps) do (princ #\- s) do (princ (char-upcase ch) s))))
I changed Ivan's code slightly to insert dashes instead of spaces between tokens, and to upcase each character in order to create something most appropriate for passing to INTERN.
Ben Hyde writes about the elegance of CLIM and the difficulty of getting SLIME to work with unicode, in the context of displacement.
Displacement is an economic or cultural process were by a community of practice wakes up one morning to discover that the tide of history has left it high and dry.
(Uh oh.)
In the Common Lisp community a really unbelievably elegant user interface tool kit emerged known as CLIM (or Common Lisp Interface Manager). But this beautiful elegant thing had no concept of “the selection.” As a result it was totally irrelevant to the building of the kinds of user interface that were demanded by those working where the action was. Great ideas displaced by no particular fault of it’s own.
(Oh, phew.)
That Lisp would be left behind in the evolution of character set handling was something I was a little worried about, but most implementations added support for unicode years ago. The big open source Lisps are sometimes a little behind, but as Ben points out, they're working on it.
I had to do it; I'm under attack by spammers using randomized urls, so the blacklist doesn't work. Comments are therefore disabled for a while.
I might need to upgrade Movable Type.
Uri Kartoun posted a video to the ERSP Yahoo Group mailing list of him driving his Evolution Scorpion robot with his PDA: Uri_Kartoun_Scorpion_PDA_Demo_January_12_2005.wmv [6 MB]
During the time I've worked in robotics, I've observed that people (myself included) usually enjoy turning off a robot's brain and joysticking it more than watching it move autonomously. Maybe once the autonomous actions are more sophisticated it will be less frustrating to watch robots getting trapped by chairs and the remains of desert fences.
The other night, at around 3:45 A.M., I found myself standing in my boxer shorts in the middle of my darkened living room as four LAPD officers, probably the entire police presence between Silver Lake and South Pasadena, stomped around in my apartment, shined their flashlights at my cats and said things like “We just wanted to make sure you weren't being held hostage.”
That's the only effect the rain has had on me, luckily.
Yesterday we went to the Natural History Museum to see the L.A.: light / motion / dreams exhibit on its last day, and I'm glad we did. The exhibit was very pretty and every room surprised me with its creativity. I'm a little bit of a sucker for LA stuff, and I wish Jennie and Chris could have seen it so maybe they'd love LA, too.
It was my first visit to the museum, and the rest of it--the dinosaurs, the insects, the 30 foot pale oarfish in a formaldehyde tank--was clearly from a more traditional generation of museum craft, but still great.
Back when I only knew her through her sex tape (it seems like I can say that about so many of my friends), I thought I saw a surprising innocence, her wide raccoon eyes shimmering with joy. Then it turned out she's just retarded. When tabloids are mocking your grammatical abilities, it's time to wonder what happened to your potential.
On the Interesting People mailing list, a mention of the importance of humanoid robots to Japan and an article on a government panel studying safety regulations for autonomous robots in regular contact with people and traffic [via Jim Thompson].
Japan is facing a serious manpower shortage over the next generation, with a birth rate of less than 1.3 children per woman (in Tokyo, it's 0.9987!). Rural areas are already emptying out, as people flow into the cities. So, Japan will need lots of labor, for its labor-intensive farming system and to care for its graying population. There are only three choices: 1) increase the birth rate, 2) import labor, or 3) build laborers. Personally, I'm betting that xenophobia and ingenuity together win the day, and that humanoid robots will become common.
Richard Dawkins on the evolution of the eye:
Creationism has enduring appeal, and the reason is not far to seek. It is not, at least for most of the people I encounter, because of a commitment to the literal truth of Genesis or some other tribal origin story. Rather, it is that people discover for themselves the beauty and complexity of the living world and conclude that it “obviously” must have been designed. Those creationists who recognise that Darwinian evolution provides at least some sort of alternative to their scriptural theory often resort to a slightly more sophisticated objection. They deny the possibility of evolutionary intermediates. “X must have been designed by a Creator,” people say, “because half an X would not work at all. All the parts of X must have been put together simultaneously; they could not have evolved gradually.”
Thus the creationist's favourite question “What is the use of half an eye?” Actually, this is a lightweight question, a doddle to answer. Half an eye is just 1 per cent better than 49 per cent of an eye, which is already better than 48 per cent, and the difference is significant. A more ponderous show of weight seems to lie behind the inevitable supplementary: “Speaking as a physicist, I cannot believe that there has been enough time for an organ as complicated as the eye to have evolved from nothing. Do you really think there has been enough time?” Both questions stem from the Argument from Personal Incredulity. Audiences nevertheless appreciate an answer, and I have usually fallen back on the sheer magnitude of geological time.
It now appears that the shattering enormity of geological time is a steam hammer to crack a peanut. A recent study by a pair of Swedish scientists, Dan Nilson and Susanne Pelger, suggests that a ludicrously small fraction of that time would have been plenty. When one says “the” eye, by the way, one implicitly means the vertebrate eye, but serviceable image-forming eyes have evolved between 40 and 60 times, independently from scratch, in many different invertebrate groups. Among these 40-plus independent evolutions, at least nine distinct design principles have been discovered, including pinhole eyes, two kinds of camera-lens eyes, curved-reflector (“satellite dish”) eyes, and several kinds of compound eyes. Nilsson and Pelger have concentrated on camera eyes with lenses, such as are well developed in vertebrates and octopuses.
Last night Dave and Kim and I went to Flor y Canto to see the Perpetual Motion Roadshow, which is a DIY performance tour circuit thing. Currently on tour are Stephen Notley of Bob the Angry Flower, a chicago zinemaker (Christa Donner) and a Canadian rapper (“More or Les”).
Stephen Notley's performance/reading of several Bob cartoons was the best part of the show. He's an intense little freak of a man, and he really got into the voices and the gestures.
Afterward I dropped Dave and Kim off at the train station and headed over to Neck's. I joined him and Lori in some cocktails, which were already in progress, along with a game of Scrabble (the next morning Lori asked me "What's that term for when someone pretends not to be really good at something and lures you into competing at that thing? Neck totally did that."--But she won). We ended up watching an early entry in Steven Seagal's ouevre and Starship Troopers on the Myth TV Neck just built, both of which certainly contained scenes requiring rewinding and multiple viewings. As compelling an argument for the PVR setup as I need.
Christopher Petrilli gives Successful Lisp a B+. He likes it, though he wishes it had a project theme and there were some production quality issues.
More helicopters with AI: The Unmanned Combat Armed Rotorcraft (UCAR) is an Army program to create teams of autonomous attack helicopters that work together and with human controllers.
What seems to be somewhat new here is the combination of a combat/attack mission, a high level of autonomy (as opposed to current drones like the Predator), and the focus on teamwork (this reminds me of some bots I wanted to code for a BattleTech mux, with member of a bot team cooperating with each other and with human-controlled mechs via natural language-based communication).
From an article in Flight International:
Left to their own devices, the UCARs will co-operate in the same way as manned aircraft, he says. “Manned aircraft overlap their sensors and weapons, cover each other and relay communications. A team of unmanned vehicles brings the same benefits,” he adds.
According to Northrop Grumman, autonomy enables engagement options such as “protect self”, in which the UCAR will avoid or engage threats to itself; “protect team”, where it will engage threats to any UCAR and sacrifice itself to protect the manned aircraft; and “protect friendlies”, in which the vehicle will engage threats to friendly forces.
The air mission commander - the copilot/gunner in the front seat of a Boeing AH-64D Apache in the Phase 2 simulations - interacts with the unmanned rotorcraft not as an individual but as a team. “The UCARs nominate a team lead to act as the focal point for interaction with the manned aircraft,” says Woodbury. The team lead can change as the mission unfolds, as was demonstrated in Phase 2. “If an aircraft had to go back, it seamlessly passed the role to another.”
Other members of the team take the lead in other functions, including interfacing with external information systems and making the data available to the team. UCARs will take information from the Multi-sensor Command and Control Aircraft (MC2A) or the Global Information Grid. “They can also push information back into the common operating picture, and that is powerful,“ says Greg Zwernemann, Northrop Grumman programme director.
[...]
Northrop Grumman's concept involves a platoon of up to six air vehicles: two scout UCARs flying at higher altitude to provide wide-area search and communications relay; and four attack UCARs flying at lower altitudes to identify and engage targets. “The scout UCAR looks ahead using SAR/MTI, while the attack UCAR uses EO/IR and ladar to target and execute using onboard weapons,” Zwernemann says, adding: “The two scouts have different look angles and fuse the information to improve target identification.” The UCARs are identical and interchangeable. “If an attack vehicle runs out of weapons, it can change roles with a scout vehicle.”
I think this is amazing stuff. And inevitable. The main difficulty probably won't be in designing and implementing an architecture for this level of autonomy (even if it's not perfect, it will be adequate) but in coming up with sensor technologies and strategies for interpreting sensor inputs. You need enough confidence in your sensing that you're willing to let these things to decide, on their own, to attempt to kill something. And they, just like humans do now, will make mistakes and kill the wrong people. I'm sure the engineers writing the software are thinking about that possibility.
By the way, I'm totally conflicted here. Working on this sort of thing would be incredibly challenging and fun. But even though I don't think all military work is unethical, the morality here is still awfully complicated.
Update Jan. 5 2005: UCAR, which would have been “the most autonomous unmanned aircraft ever built”, will not be built (anytime soon, at least). And it sounds like maybe DARPA isn't going to be as involved in the development of unmanned military systems as it has been.
For this new year, Lori and I skipped out on the city-crossing party-hopping scene and spent most of our time with Ally and Mike, who are leaving us in a couple weeks to start a new life in London, and who we will miss very much.
By the time the clock struck midnight, we were clustered around a bottle of absinthe in a room in the Millenium Biltmore hotel, which is beautiful and historic. It's a great place to consider what things you've done right in the past year and what things you'd rather have done differently. You look at an old photograph taken at one of the Academy Award ceremonies that the hotel hosted, and you see a Clark Gable or a Spencer Tracy with an Oscar in one hand and a Lana Turner or such in the other, and he's obviously at the top of a very exclusive world.
Just as obviously, even when you're king time does not stop.
The next day we ate lots of rich food and went ice skating (yes, in Los Angeles). This turned out to be one of my favorite New Years in some time, even though I've had to enter a rehabilitation program for Devonshire cream addicts.
(By the way: This is Lemonodor's fourth new year; Wild!)
Slava Pestov generally pans the JVM source code [via Chris Double]. It sounds like Sun needed to add a lot of features, and quickly, and so they had to code hack & slash style. This was surprising, though:
A lot of preprocessors are used. This includes a mix of awk, sed, shell scripts, and indeed, Scheme! Yes, the JVM source includes jscheme.jar, used to generate some CORBA classes.
Lots of special cases, magic classes and copy & paste coding. It sounds really terrible. And probably typical of most software.