Andreas Fuchs' Journal

I hack on things for people.

Blagging About Blagging

I just upgraded this blog to MovableType 4, for which this is a test entry. While I’m at it, I might as well say things about where I’ve been gone in the last couple of months. First, I spent a lovely week in Cambridge, MA, consulting for ITA software. (Photographic evidence here.)

Now I’m hacking on a sweet new project again (news about that in due time, I promise). In the meantime, I started a new (lighter on the technical content, heavier on the pop cultural stuff) tumblelog at http://mublag.boinkor.net/. This one’s powered by Soup, a new blogging platform that two friends of mine are just launching.

Right. More technical content will happen in a few days. Until then, don’t look at the Unicorn baby link.

Things to Consider in a New Version of ASDF

ASDF(reference manual) is a fine piece of software: I like to use it, and find some of the design choices in it to be very good (besides, it’s the thing that has allowed things like clbuild and asdf-install to grow). However, it is now in wide enough use that people are looking at its internals and are scratching their heads when finding some not-so-very-good design choices.

Here’s a selection of the things that I think would be good candidates for review in a new version of ASDF (bsdf? yasdf? qwer? /.,m?):

  • Using TRAVERSE to come up with a plan for execution (and executing this plan in OPERATE) isn’t so great: it doesn’t allow modules’ PERFORM methods to wrap their children’s PERFORM methods (for stuff like with-compilation-unit or muffling warnings), and makes it quite painful to operate on a non-sequential plan for execution.

  • Component references (e.g. in :depends-on lists) shouldn’t be stored by name, but refer to the component objects themselves. Right now, ASDF stores the component name only, so you always have to look up the component in the enclosing module. AIUI, this is the primary reason why ASDF doesn’t support rebuilding of files that depend on files in different modules modules(see).

Doing it this way is a bit tricky, as depended-on components might not have been constructed yet: I suppose you could do this via prototypes and replace them later on.

  • Speaking of :depends-on, it should really be up to the operation and the component to decide what something on the :depends-on list means, not to ASDF::PARSE-COMPONENT-FORM. I think something like
1
defmethod component-dependency-meaning (operation component depended-on-component)

should work. Oh, and drop do-first. (-:

  • It seems everybody is aching for versioned dependencies. AFAICT, if you do that, you need a way to compare versions and specify “I want version X or newer, but nothing younger than Y” things, and it would also be nice to be able to say that system A conflicts with version Y of system B. I think of Debian’s .deb format, and think this would be ideal.

Of course, this whole mechanism won’t be of any use unless there are people who use it and keep the information in good shape. This would be the topic of several more blog posts, and is the reason why I’d suggest leaving versioned dependencies out of the design of a new ASDF, and instead making the component form parser and normalizer smart enough to cope with them once they are implemented in a sensible way.

  • Some sense of backwards compatibility (note that the changes proposed here are somewhat incompatible) or a means of easily converting old .asd files to .[whatever the new name is] ones would be nice. And being able to depend on .asd systems from [whatever the new name is].

So. I’m not sure if a blog post is the correct medium for this, but I somehow find this more suitable than a mail to cclan-devel. If you’ve got comments, do blog them yourself or send me an e-mail. (Disclaimer: This is what I consider important. More ASDF-wise people might have more insight into this topic. I’ve just been thinking about them for quite some time, and just recently came up with the right words.)

Ok, So This Was Lame.

I just attended my first CACert assurance party thing. It started off with a 2-hour talk that gave information that could be easily extracted (with a bit of patience for bad english grammar and spelling) from their wiki. Two things that stuck out to me (like, indeed, sore thumbs):

  • PGP key signatures are useless, because a signature on a key doesn’t tell you anything about the standards that were used to get the key owner’s identity to the signing party.
  • CACert are trying to get a WebTrust-compatible audit. From what I heard at the talk, instead of being audited for the first time, they worked with the auditors to get into auditable shape (with the same auditor) next year. That sounded kinda familiar to me…

Anyway, after the talk ended (which was cut short at 2:00h by a person who graciously stepped in as a moderator), the assurance thing itself was kind of anticlimactic: There were ~20 people present; everyone was told to get 10 forms, fill them out, and get assured by (and assure themselves) three people who are Assurers, then repeat the process with seven others. Nobody knew who of the attendees were assurers. I don’t think the guy who held the talk understood what I was trying to get at when I suggested that this was kinda suboptimal. Frustrated at the lack of a response when I asked him if he himself was an assurer, I left.

I feel like I just wasted (and not in a good way) two hours. I applaud cacert.org’s server and client certification services (and I’ll continue to use them), but I’ll gladly forfeit the 100 assurance points that state my ability to sit through 2 hours of boredom and to defy bad organization at an assurance meeting. Give me a useless (but non-boring) PGP key-signing party in a cafe or a pub any day.

Some Details About CLAPPA

First of all, thanks to all who congratulated me on this, and to Nicolas for starting it all.

CLAPPA is the project I submitted for funding to the Google Summer of Code, which is now being funded by clozure. The main idea behind the project is to have a package repository for asdf-install that presents information more nicely than does cliki. When I talked about doing something like this project on #lisp, Nicolas Lamirault spoke up and told me he had something that was part of the way there already – CLAPPA.

The goals of this project include checking for common maintainer errors when uploading a released package, and having a bit more machine/human-processable metadata available. This metadata will include dependencies between packages (already done in the original CLAPPA, but loads arbitrary code), versions with release dates (already done, just need all of the packages on cliki.net), and possible naming conflicts (think of the CFFI-UFFI-COMPAT system in CFFI). Some other sweet features will include an atom (or rss) feed for new releases, and for new releases that are dependencies of a given package, to help maintainers keep track of which updates may have broken their packages.

To draw the outline of this project a bit more clearly, here’s what this project is not about:

  • Dubious security features. This is not intended to be a repository of guaranteed-safe code. (Who’d guarantee we’re honest?) CLAPPA is going to protect itself against malicious code, but its users must take care to protect themselves.
  • Configuration management in the style of cl-librarian. This might be done in the future, but for now the focus is on getting a useful package repository going.
  • Versioned dependencies in ASDF or getting packages from DARCS. This is another interesting addition for the future. Again, the focus is on an asdf-install compatible package repository, for now.

I’ve set up a wiki to track development progress at http://clappa-wiki.boinkor.net/ (need to be logged in to edit), and you can read the original google project submission at this lisppaste.

ILC07 the Inspirational Lisp Conference

The talks were good, but most of the interesting stuff at conferences happens in the coffee breaks, anyway. (-:

Here’s a list of half-to-fully-baked ideas that I’m going to explore in the near future:

  • First of all, the CLAPPA, the CL APPlication Archive (link may be down due to my hacking on it) project got funding. The LispNYC breakout group rated it high for google Summer of Code, but then Marco Baringer told me Clozure would be interested in funding this. There was so much interest in fact, that they decided to go ahead and really fund this project, thus freeing one SoC slot for another project! (More on that later.)

  • If one were to write a somewhat backwards-compatible pathname system for CL (ahem), one could do worse than try and do translation to CL-structured pathnames by putting a translator object into the :HOST slot of the CL pathname. There would still be murkiness w.r.t. merging and creation of new pathnames, but at least it’d have a slight chance of working. Hm.

  • McCLIM’s CLIM Listener doesn’t yet have a remote interface to lisps like slime does. One thing that would be neat is real remote lisp communication via the SWANK protocol. The other thing is extending that protocol to transport presentations and graphics in addition to text, maybe similar to what display postscript does.

  • McCLIM currently has a few problems when running in multiple application frames: Each frame has its own command loop with its own input context, so when an application in frame A decides to accept something, and the user clicks on an object of that type in frame B, it’s not entirely clear into which input context the object should go (and if it should be highlighted/clickable at all). An idea was to have an input context switcher widget that knows about the input contexts of all active application frames.

  • asdf-dependency-grovel should separate dependencies at compile time and ones at load time. This sounds like it’s easy to do, but I’m sure there are going to be surprises.

  • I want an Azul machine to play with. They sound horrendously over-powered, but I bet they’re the best platform to run ABCL on. (-:

Being an Account of Activities at ILC07

Xach nudges, I comply. To summarize the text that is to come, the conference was great. Hooray for Nick Levine, whose conference organization talents are deeply awesome.

The setup

I had chosen the worst possible time to fly: a 23:45 (local time) arrival on Saturday guaranteed that I would have to wait 1 hour for the last bus to Cambridge, then arrive there at around 2:00. One bus broke down before that journey started, and a longer-than-expected walk across Cambridge later (which was packed full with drunk english teenagers – one of them was trying to beat up buildings!), I finally entered the land of Nod at around 3:30.

Tutorials

I managed to wake up on time for breakfast, after which the tutorials started. I stayed on Edi’s Hunchentootorial until the second break, then switched, intrigued by rumors about CMUCL internal discussion, to the MPS thing. The afternoon, I stayed on Duane’s Allegro CL debugging/optimization tutorial. From this one, I took away a few neat things to do in an ACL instance when things are bad. At the end, there was an interesting discussion about memory management techniques (which were to be repeated during Jans Aasman’s talk on the last day). I had dinner at a great Indian place with a crowd of people whose names and faces were forgotten due to me being horribly tired. I think Luke was there. I fell into bed at 10pm and slept for a good, long time.

Favorite quote from Sunday’s sessions (Duane Rettig):

Paul Dietz’ test suite doesn’t look kindly to adding arguments to standard functions.

It doesn’t stop us from doing so, but it does give me pause.

The talks

The days of the talks are a blur. Things that stuck were:

  • The weird context switch performed during Herbert Stoyan’s talk - From EVAL/APPLY history to code identity transforms in under one minute. (With unbalanced parens on the first such slide. Ow.)

  • That, upon hearing about ESA, people seem to worry about compatibility with Emacs applications (don’t worry, Christian, you were not the only one). Guys, an editor’s text buffers are not ideal places for an interactive user interface, however compelling the idea might have been in the seventies.

  • There was a great debate whether a creative angle for teaching CS (as exhibited by Alexander Repenning’s XMLisp method) was superior to the entirely technological (some might say technocratic) method employed by Queinnec. As Queinnec’s approach seems to balance out genders, scales to large numbers of students, and compensates for not-entirely-motivated teaching personnel, I, personally, am slightly in favor of doing things in the first semesters his way.

  • Had a slight case of reality distortion when, during Michael Sperber’s presentation, there erupted a discussion about square brackets. A discussion about square and round brackets. At a Lisp conference.

  • Felt slightly peeved by Antonio Menezes Leitao’s motivational (“pessimistic”) pep-talk, which postulated that lisp libraries are poorly documented, badly tested and don’t solve the whole problem. While technically impressive, his translator from Java to CL also creates badly-documented libraries (#| |#-style comments instead of docstrings because they clutter up the code), which fail tests, and don’t solve the whole problem any more than do the Java libs. On the plus side, widespread use of this translator could mean a surge in cool lisp code refactoring tools, and I’d like to see that.

  • Props to Cyrus for blatantly ignoring the timekeeper. Those 10 (13, actually) lessons for lisp would have been a great topic for an invited talk, it’s too bad he had so little time to expand on them.

  • Charlotte Herzeel’s talk was an eye-opener for me and (it seems) many others who hadn’t thought much about AOP before. Declarativeness for application behavior descriptions = win.

  • Was impressed that not once in his talk did Andrew Borden utter the word “Lisp” or anything related to it. People with more mathematical skills than me might have gotten something from it.

  • The ALU meeting. This was a once-in-a-lifetime experience, in that I don’t want to attend one ever again. Interesting fact: The ALU board had 10 members (not sure how many there are after the election). It must be hard to coordinate so many people. Do you need all of ten to maintain an association whose stated purpose is organizing ILCs?

  • The Banquet was pretty great. Lots of fun was had, in addition to very good food. I sat next to Richard Jones, but was too awed to talk much about things of importance with him. I hear Juho did bounce some ideas off him later on, which is good.

  • Deeply impressed by HOP. Also, amused that Serrano, as a french native, chose a name that starts with #\H.

  • Happy that more vendors are enthusiastic about extensible sequences. Heads up to would-be improvers of Common Lisp: it’s possible to add good things to CL that don’t add (much) incompatibility with the spec, but retain usefulness. Looking forward to a CDR document.

After the conference

On Wednesday, Nick announced that there would be four places on the Bus tour to Anglesey Abbey and Ely were available and already paid for; that was too good an opportunity to pass on. (I later learned that one of the places was Patrik’s, which means I’ll have to invite him to a few drinks at the metalab in exchange. (-:)

Also, on Wednesday evening, Robert Strandh organized a dinner for Nick and a few others at Hotel Felix, for the invitation to which I’m very grateful. Great conversation was had, along with very tasty food, and a lot of (I hear) good wine. (-:

Both Anglesey Abbey and Ely (Thursday) were remarkably beautiful (the great weather didn’t hurt, either). Also, our tour guide managed to keep us all awake on the bus to and from each place with stories about each place, which I think was no small feat. Some photos of this tour are available on the ilc07 flickr group.

After the tour, Nick announced that one more place in a punt was available. As nobody else was interested, I gladly took that place, too, and had a great ride, taking pictures until the camera’s battery died. Unfortunately, I didn’t make it to the appointed place at the appointed time in order to meet Robert, Cathleen and Cyrus for dinner that evening. Too bad, I hear it was really good.

Finally, Friday was a day of packing stuff and walking around Cambridge taking more photos (some of which I might upload later), and flying home. Of special remarkability, I think, are photos of a shop called “TOTAL IT SOLUTIONS” (not an insurance provider), and of a poster announcing Cambridge Stammering Open Day, which I think will finally establish Cambridge as the perfect place to hold conferences on speech impediments.

Boinkmarks Outage…

Still in Cambridge, “sharing” connectivity on a wireless access point kindly provided by security-unaware residents, so just a short update on the boinkmarks thing: something on this machine is making the linux OOM killer go mad (both in linux 2.6.16 and 2.6.18, running on amd64). It will kill perfectly well-behaved processes although there seem to always be hundreds of megabytes of real RAM (not to mention swap) available. Then, some time later, it will start complaining on the console about running out of memory while oomkilling, in an endless loop.

Thank god this machine has a remote admin interface. I’ll try to fix the real problem when I am back home.

Text Search Visualizer an Unexpected Success

I did a preview demo of the text search visualizer (see) today and achieved understanding in one other person. Yay!

Here is the source (with git repository) of the updated text search visualization tool, now featuring Michael’s Knuth-Morris-Pratt search implementation and actually helpful help text.

Simple Visualization Tool for String Search

I recently discovered that several of my (programming) friends know no string search algorithms other than the naïve left-to-right, one character at a time scan. There are much better algorithms out there, among them the one by Boyer-Moore.

When I first heard about Boyer-Moore, it made me realize how easy it is to overlook opportunities for optimization – I hadn’t thought it feasible to speed up string search, either.

In order to allow others to see the beauty of it, I made a little CLIM visualizer app for string search algorithms, to use in a little intro session to good string matching code. Get the code here, load it with McCLIM installed (preferably through clbuild), and run (run-frame-top-level (make-application-frame 'visualizer)).

Good News for Musical Ridicologists

It’s a great tradition on the channel #lisp to watch the Eurovision Song contest live transmission, make fun of participants, and get drunk in the process. From today’s news, it sounds like 2007 is going to be a good year for this kind of thing:

Unfortunately, Europe took the wrong lessons from Lordi: they’re now inserting monster references into their bovine love ballads. Sweden’s entry to Eurovision 2007 is this monstrosity, ‘Vampires Are Alive’ by DJ Bobo. I swear I’m not making that up. The lyrics go: “I am a vampire. I’m a slave./I sleep through the daylight, hence my grave.”

“Unfortunately”? “Monstrosity”? DJ Bobo?? Hah. Hahaha.

Update: Bruce O’Neel tells me that the DJ Bobo entry is not from Sweden, but from Switzerland. I was wondering about that. Also, note that the link above has an embedded YouTube video of the entry. I particularly enjoyed the “VAMPIRES!” chorus near the end.