Lisp Hackers: Christophe Rhodes

Next in our series of interviews with inspiring lispers is a conversation with SBCL's principal maintainer Christophe Rhodes. He was among the first two people to join the project, after it was solely developed for more than a year by William Newman. And he is, probably, the most "stable" contributor, still remaining very active in the community, after more than a decade. What fascinates me personally about him, is the aura of a profoundly creative mind, fiddling with reality in interesting and unexpected ways.

Tell us something interesting about yourself.

I'm a singer, specializing in performance (admittedly somewhat rare at the moment) of unaccompanied music of the European Renaissance. My next concert is Brumel's "Earthquake Mass" with the vocal ensemble De Profundis. I did my doctoral research a few doors down from Stephen Hawking. AndI was a cast member on "Una Stravaganza dei Medici", a reconstruction of the Florentine festivities for the marriage of Ferdinand de Medici and Christine of Lorraine - which means that there's at least some chance I have an Erdős-Bacon number.

What's your job? Tell us about your company.

Oh, well, that's a bit complicated! :-) Most of my time at the moment is spent with Teclo Networks, a Lisp-flavoured startup which is bringing reliability and usability to mobile broadband. I'm on leave of absence to pursue this from Goldsmiths, University of London, where I am a lecturer in Computing, responsible for undergraduate teaching, postgraduate supervision and independent research.

Do you use Lisp at work? If yes, how you've made it happen? If not, why?

I do. I should say that I'm no longer, if I ever was, a programmer by trade; most of my work at Teclo is not writing code, but when I do it is in C, R or Common Lisp. Working in a Lisp-flavoured startup (I'm not the most famous Lisp programmer in the company, and quite some way from being the best...) has made Lisp a natural tool to use when it's appropriate; while it might be a bit of a shame that Lisp is not used exclusively, the balance of idealism and pragmatism is pretty good, and it's fairly satisfying to know that the high-performance network element that we ship has Lisp code controlling its operation.

I wouldn't make an argument that C is a Lisp by any stretch, but I've popped up at a couple of events in the last year to argue that R has some claims to being a Lisp; it has conditions, handlers, restarts, generic functions, macros operating on parse trees... and a SWANK backend.

Another part of what I do is write documents, both for Teclo and for Goldsmiths. I have in the last couple of years fallen in love with org-mode and in particular with "reproducible research", or living documents; the ability to have executable sections of code for generating results, which can then themselves be further analysed by other bits of code — in other languages, if that's appropriate — and the whole exported as a document typeset to what I consider to be high-quality standards. The fact that there is also acceptable-quality web output from the exact same process is gravy.

What brought you to Lisp? What holds you?

Two seminal moments on my road to Lisp: the first was, as an undergraduate, getting a job in the summer of 1997 to work on simulating fluid dynamics in the context of galaxy formation, to assist in trying to understand how the spiral arm structures form. I'd being told "here is K&R, here is USENET, here is XEmacs, here is Tcl; in five weeks let's see what you've come up with" — I distinctly remember reading comp.lang.lisp and a "Lisp is slow" thread, with active participants combating the troll with disassembly.

The second, a few years later, was wandering into the #lisp IRC channel on openprojects, to find an almost-empty channel, about 10-20 participants; one of whom was there twice (dan_b and dan`b), using the channel to paste bits of alpha assembly between his laptop and his desktop, in his efforts to get SBCL on alpha working.

As for what keeps me, well, when what I have to do is solve problems that no language has built-in libraries for (scalable audio similarity detection, say, or musical structure inference) then I want to be working in a language where I can focus on the problem itself, rather than the detail of that language — and for me, Lisp permits that kind of separation of concerns, given its easy support for DSL and embedded language generation, protocols, and the ability to run partial programs.

Among software projects you've participated in what's your favorite?

I enjoyed most working on an editor for lute tablature, I think. Partly because it was a chance to learn about things (parsing, CLIM, user interfaces) that I hadn't really thought about before. Partly because of the feeling of being able to build up incrementally and rapidly from a very simple prototype to deliver something which was actually useful; and partly because it was also interesting to learn about the problem domain. Gsharp (G#), the score editor largely designed by Robert Strandh, is an editor for what you might call "common practice" notation: five lines in a staff; dots and lines to indicate pitch (by height) and duration (by glyph) of notes. In my research group at Goldsmiths, though, we have a lutenist (a player of the lute) who had a research project on cataloguing and transcribing a particular repertoire of 16th-century lute music, which was notated in "tablature": six lines, one per string of the lute; letter or number glyphs on each line to indicate finger position; and glyphs above the staff to indicate duration.

The point about this was that when I first came on the scene the project had a truly awful workflow, because they had a batch renderer from the textual format to encode this music to something visual. This made the process of encoding painful, in particular for the error correction phase: it was fairly easy to find an error in the visual rendering, but to go from there to the text corresponding to it was painful. So I wrote a little CLIM app with an editor buffer and a display; the display was a rendering of the "Tabcode" in the editor buffer, and each glyph in it was associated with a text cursor position, so that you could click on the display and have the editor cursor warp to the Tabcode corresponding to the glyph. This was a productivity win for the project.

What's the most exciting use of Lisp you had?

I don't get easily excited by technology. So for me, what was exciting was seeing a community of users and developers grow around SBCL — in particular, working with extremely focused and motivated individuals on improving the system, subject to all sorts of constraints, not least those imposed by real-world uses (including the QPX poster-child of ITA Software).

SBCL contributors seem to be a very active, closely-knit, and united community. How did that happen? Maybe you could share some insight into the history of the project. Also what were the factors, that determined its success?

I think part of SBCL's success as a community was the finding of like minds — which came about partly because it started off as a project when access to information channels was growing, but also partly because there were some explicit principles laid down: Bill Newman made it very clear that he was aiming for something maintainable, and also taught by example the meaning of maintainability. In the SBCL source distribution, there are over 100 lines of textual detail describing his ideas about what he was aiming for, and although it's nothing like an explicit charter which every SBCL developer (or user!) has to sign up to, it's nevertheless a useful indication of a direction to drive in. Both detailed and motivated enough that even a graduate student with no software development experience could understand that there were tradeoffs involved, and someone had thought hard about which side of the tradeoffs they wanted to be. I'd also point out some of Bill's advodiary entries of the time, including http://www.advogato.org/person/wnewman/diary/6.html and http://www.advogato.org/person/wnewman/diary/9.html, which perhaps illustrate that he was thinking about this kind of software maintenance all the time. ("To foil the maintenance programmer..." :-)

I think this is particularly important when the bulk of the work is done by volunteers; it helps to keep focus (I've written before about how software is only sustainable if it can stay alive in the minds of its developers).

If you had all the time in the world for a Lisp project, what would it be?

There's lots that I'd like to do, both hacking on Lisp itself and things I'd like to explore, for which I'm likely to reach for Lisp first. I'd also like to get more fluent with emacs lisp, enough to be able to quickly write the user interfaces I would like to use to various bits of software that I use every day.



Lisp Hackers: Edi Weitz

The first post of the series got some very good responses, so I'm continuing it with another very obvious candidate — Edi Weitz. His vast contributions to open source Lisp, made during the last decade, collectively known as Ediware, include the indispensable regex library CL-PPCRE, written on a bet in Hamburg café, and a whole stack of web-related libraries with the most widely used Lisp application server Hunchentoot and HTTP client Drakma. Together with Arthur Lemmens he also co-organizes European Common Lisp Meeting. And that's, surely, not all...

Tell us something interesting about yourself.

Well, I'll leave it to someone else to tell you what's interesting about me. I'll rather tell you what I find interesting in addition to Common Lisp: I collect photo books and I'm doing a bit of photography myself. I like to listen to the music of Frank Zappa and to Jazz. I read a lot. I'm interested in mathematics, especially in set theory.

What's your job? Tell us about your company.

I'm a professor for mathematics and computer science at the University of Applied Sciences in Hamburg. I started this job in September 2011.

Before that, I was a freelance hacker for about 13 years.

Do you use Lisp at work? If yes, how you've made it happen? If not, why?

In my new job, I've been using CL in my math lectures a couple of times and will continue to do so.

In my old job, I've been using CL exclusively for the last six or seven years. As I was working freelance, this was kind of easy — I either had projects where the customer didn't care about the programming language that I used as long as I got the job done, or I was hired specifically for my CL skills.

What brought you to Lisp? What holds you?

I came to Lisp via Emacs Lisp in 1999 or so. What got me hooked was the wonderful book "Writing GNU Emacs Extensions" by Bob Glickstein. It opened my mind for the beauty of the Lisp language family — something I had missed the first time I had encountered Lisp (in university, a few years earlier). The two CL books by Paul Graham and Norvig's PAIP then paved the way for Common Lisp.

What holds me is that I haven't found a better programming language so far — and I don't expect to find one very soon.

What's the most exciting use of Lisp you had?

I don't know if "exciting" is the right word, but it makes me happy that so many people use "The Regex Coach" and like it. I stopped keeping track, but there must have been at least half a million downloads since 2003.

I'm also kind of proud that some of my open source libraries are used by various commercial and research projects around the world.

But probably the most awe-inspiring encounters I had with Lisp were the few occasions when I played around with Genera or watched someone else using it. I think this OS really was a work of art.

What you dislike the most about Lisp?

There's nothing I really dislike about Common Lisp. There are a few warts here and there, but so far I've found nothing that was serious enough to prevent me from being productive.

Among software projects you've participated in what's your favorite?

Working on the Windows port of Piano — an extremely impressive application which has been around for almost 20 years and has been used by almost every aircraft manufacturer in the world. Dimitri Simos, Piano's main author, has been the most enjoyable client I've worked with so far.

Describe your workflow, give some productivity tips to fellow programmers.

I usually just start up the LispWorks IDE and hack away. The best productivity tip I can give is to stick with one implementation and IDE and to invest a lot of time to really learn how to use it — including all the implementation-specific goodies like debuggers, inspectors, steppers, browsers, and so on.

Ediware became hugely popular (by Lisp standards), and with this popularity came a lot of work and responsibility. You seem to have mostly handed over supporting it to Hans Hübner. What's up next for you in the land of programming and Lisp in particular?

I'm planning to give a lecture about the use of AI techniques in games in the next year and I might use some Lisp there. I might also — as a sideline — resume my CL consulting work sooner or later. I don't expect to publish new open source code in the near future, though.

If you had all the time in the world for a Lisp project, what would it be?

When I was still working as a hacker, I always dreamt of finding someone to pay me for working on an open-source CLOS object store — written in pure Common Lisp, OS-independent, portable, not relying on third-party software, fast, reliable, thread-safe, well-documented, etc.



Lisp Hackers: Zach Beane

I'm starting a series of interviews with lispers, who inspire me. Lisp community includes a lot of amazing programmers, who's thoughts, I believe, deserve more prominence and recognition, than they usually enjoy. Besides, unlike many other languages, lisp users span several generations of programmers: there are a lot of people, who'd made great contributions, but have since moved on. I hope to have some of them in this series as well.

And the candidate for the first interview was obvious to me. Zach Beane is the uniting link of the whole community. The creator of Quicklisp and a number of useful open-source libraries, like Vecto and ZS3, he is also always active on #lisp irc channel answering questions, as well as keeping a blog, where he shares interesting Lisp news, and supporting Planet Lisp blog aggregator. And that's not all...

Tell us something interesting about yourself.

I live in Maine and enjoy hacking Common Lisp projects for fun and profit.

What's your job? Tell us about your company.

I work at a small telephone and Internet company.

Do you use Lisp at work? If yes, how you've made it happen? If not, why?

I currently use Lisp to analyze some large data files we get from vendors and partners and produce reports. I've recently used Lisp to produce KML files for Google earth visualization of some internal data. I use stuff like cl-ppcre, drakma, postmodern, cl-mssql, cxml, and more to gather data from various systems when preparing reports. The growing library ecosystem has made it really easy to get stuff done.

Lisp is accepted because I can produce useful stuff pretty quickly with it. It's a small company with a small team so there isn't a bureaucracy to fight to use something non-standard. Does the tool work? Is the result useful? Then there's no problem.

In some cases, where it isn't a good fit for the final product, I use Lisp to prototype ideas before writing a final thing in some other language, e.g. C or Perl. But I even use CL to generate data and code in other languages, so it's still in the mix, still a part of my workflow.

What brought you to Lisp? What holds you?

Paul Graham's Beating the Averages describes a really exciting way to use an uncommon tool to great advantage. That got me interested in how I could do the same thing. I started off with some stuff in Scheme because I thought CL was old and crufty and gross, but when I started using SBCL I found it was a great, practical tool, and I never stopped using CL after that.

I continue to use CL because it has a great mix of features (object system, first-class functions, fast compiled code, multiple implementations, a fantastic standard, etc, etc) and it works well in my favorite working environment, Emacs on Linux. I feel like I know it well and I can see quickly how to use it to explore and solve new problems.

What's the most exciting use of Lisp you had?

Making graphics with Lisp for wigflip.com. It's always fun to have an idea about some kind of visual toy and then tinker with it until it's right.

It's also fun to do something fast. A few years ago I got a project to fill out some PDF forms automatically. The project started with a few days scheduled to research third-party solutions, but in those few days I had a working prototype that used CL-PDF and CLSQL.

What you dislike the most about Lisp?

There are a lot of negative perceptions about Common Lisp that are reinforced by current and former Common Lisp users. I can accept that CL is not for everyone, but some of the criticism is just years (sometimes decades) of moaning and nitpicking about decisions made in the distant past that are not really up for review right now. I wish the people who are vocally, chronically dissatisfied with CL would go off and do their own thing and stop bothering people that are happy with Common Lisp.

There are some remarkable trolls that like to pick on CL, but they're not usually taken seriously by anyone, but "insiders" who complain about CL are perceived to be giving some sort of genuine insight. It's very annoying.

Among software projects you've participated in what's your favorite?

Quicklisp has been very rewarding. There's a lot of positive feedback from people who feel it really helped them use CL more easily. More generally, the whole CL ecosystem has been a lot of fun. I enjoy trying new libraries, sending feedback and bug reports, helping people get started, and all that stuff. Common Lisp has a lot of smart, helpful, friendly people who share a lot of knowledge, and I feel lucky to get to learn from them and to try to share what I know, too.

Describe your workflow, give some productivity tips to fellow programmers.

For typical projects I feel like I'm building more tools into my REPL workbench. I don't write scripts that I call from the command line, I write functions that I call from the REPL, and use the slime and Emacs environment to create and interact with data, whether it's data from a file, from a computation, from the web, a database, etc.

I find it really helps to have small, focused functions that are easy to follow and that do one thing and do it well. The fine granularity of testing, tracing, intermediate values, etc. can help wire together a very useful set of behaviors from a small core of simple functions.

Some productivity ideas...

Knock the rough edges off your working environment. Write code to automate stuff. Make it easy to repetitively do complicated but boring stuff. For example, I used to be afraid of the hassle of making new releases of my projects, but recently wrote a CL program that does everything for me, from PGP-signing the tarballs to uploading them along with the documentation to my website. Now I don't care if I make ten project releases in a day, it's just a few function calls.

Customize your environment to make it comfortable. Make it easy to look up info in the hyperspec or in other documentation sources. Make it easy to create new projects. I use quickproject a lot for that, but I also have some Emacs templates that put some boilerplate into my files automatically. Make a program do your work for you.

How did quicklisp change your life? What are current plans for its development?

I can get up and running in a new environment very quickly now. Before Quicklisp, I could usually build up a set of libraries that were comfortable and useful, but it could be a hassle to move them from computer to computer, or to make sure they were up-to-date. Now I just use Quicklisp and don't worry about it.

As Quicklisp maintainer, it's really helped me see where some people are coming from when they want to try Common Lisp. It's a totally different mindset than what I'm used to. I think there's room for some documentation or tutorial on the system-oriented, REPL-workbench style of Common Lisp development that I like to use.

I want to write more documentation for Quicklisp, particularly how users can publish their own software for it or customize it via its internal protocols.

I also want to gather and share documentation for all Quicklisp-loadable projects, so there can be a single place to learn what a given project does, and get access to all its documentation.

I'd also like to make it easy for people to share feedback about their experiences with a project, so you could decide if it's likely to fit your needs. Something like the feedback you see for products on Amazon, but for Lisp libraries.

Anything else?

Common Lisp is a great system that rewards in-depth study.

P.S. Xach gave a talk about Quicklisp at the last ECLM, and I think his motto for Lisp development, he presented there, is really worth sharing and following :)

PPS. And here is the Hacker News discussion. submit