Skip

(setq clock (simulate clock dt))
December 5, 2013 10:21 AM   Subscribe

Clocks is a set of generative art pieces written in gazelle (a lisp (written in elisp!) that compiles to javascript) with the help of processing.js. Best viewed in Chrome.
posted by Jpfed (13 comments total) 17 users marked this as a favorite

 
Very cool, but I wish knew more about why (or whether) lisp is a good language choice for such a project. Was this written in gazelle just to demo the language? Or are there features of the language that make it particularly appropriate?
posted by treepour at 10:45 AM on December 5, 2013 [1 favorite]


great, yet another lisp like language that will tempt me to play with it when I should be doing productive work. Damn you to hell!!!! (by which I mean, "thanks! this looks really fascinating")
posted by Perfectibilist at 10:46 AM on December 5, 2013


Clock 16: When I was around 6 years old I encountered a stray cat on my driveway, which had, as I recall it, a gaping wound, inside of which I could see many white cells packed, each with a tiny, wriggling thing inside it.

what
posted by mkb at 10:49 AM on December 5, 2013 [4 favorites]


the relationship between the clock, which is fixed in its motion, and the dynamic components of each piece is a cute context to dramatize non-linear dynamics.

It's nice to read an artist's statement that doesn't try to make the work sound more important than it really is.
posted by scose at 10:52 AM on December 5, 2013 [1 favorite]


Very cool, but I wish knew more about why (or whether) lisp is a good language choice for such a project. Was this written in gazelle just to demo the language? Or are there features of the language that make it particularly appropriate?
posted by treepour at 13:45 on December 5 [+] [!]


Lisp is a good idea because recursion, no?
posted by oceanjesse at 10:53 AM on December 5, 2013


treepour: "Very cool, but I wish knew more about why (or whether) lisp is a good language choice for such a project. Was this written in gazelle just to demo the language? Or are there features of the language that make it particularly appropriate?"

If gazelle takes after its brethren, then a language emphasizing the composition of pure functions seems like it would be a natural choice for a lot of these pieces, which are basically visualizing a bunch of dataflows working in parallel. I wonder if gazelle offers any facilities for concurrency, or if these were implemented with callbacks or in a monolithic control function or what.

This would be a pretty cool test case for ClojureScript's go blocks.
posted by invitapriore at 11:15 AM on December 5, 2013 [1 favorite]


This is like a combination of everything I love: clocks, parentheses, and avoiding javascript.
posted by bleep-blop at 12:06 PM on December 5, 2013 [4 favorites]


Nice use of nested parentheses in the post, there.
posted by iotic at 12:07 PM on December 5, 2013


I'm pretty sure I could do this in LOGO. repeat 36 [right 10 square] and that Turtle is off to the races.
posted by borborygmi at 12:37 PM on December 5, 2013


Lisp is a good idea because recursion, no?

Lisp is a good idea because Lisp is a good idea because Lisp is a good idea because...
posted by TypographicalError at 1:30 PM on December 5, 2013


Hi, I'm the author of the clocks and I thought I'd pop in to answer the questions posed by multiple posters about Gazelle.

I program in Common Lisp professionally, Emacs Lisp enthusiastically, and Gazelle for fun. I like Lisp dialects of all flavors and I have my own ideas about what makes Lisp so nice to use. Gazelle reflects those ideas in several ways. Lisp is not paradigm bound. Despite persistent buzz, there isn't anything particularly functional about most Lisp dialects (Common Lisp is enthusiastically multi-paradigm, Scheme is more functional and static but still a pretty dynamic language, Picolisp is radically dynamic and pragmatic). In the realm of contemporary programming languages, there are much, much better choices if you are interested in functional programming than almost any Lisp dialect (ML dialects, Haskell, Scala).

What I like most about Lisp is parentheses. I wrote Gazelle because I think Javascript's syntax is too complicated and I wanted to denote my Javascript programs using S-expressions instead of curly-brace syntax. While I am a huge fan of purely functional programming, and there are aspects of functional style in Gazelle's design and my code, Gazelle's only real intent is to expose Javascript via S-expressions and to build a macro-expansion layer on top of that system. Otherwise, the language tries to be as near to Javascript in style and semantics as it can be, with only a few concessions made to Lispyness (for instance, Gazelle is more expression oriented).

The Clocks are written using Kran, an entity component framework for Javascript (a few of the old clocks use Processing), and don't try to get too fancy with respect semantics. The code should be recognizably Javascript underneath the s-expressions. While I agree with some posters that functional programming might be appropriate for generative art purposes, the kinds of frameworks you need to do that coding are extremely novel and difficult to develop in Javascript, particularly where performance is important. People significantly smarter than me have worked on such systems (see Fay Language, for instance, in Javascript or this page, summarizing the work in Haskell). I started work about a year ago on an implementation of Yampa in Gazelle, but abandoned it out of difficulty with keeping track of types by hand.

Anyway, Gazelle was the right tool for me to because it let me write code in a way I was comfortable with for a platform that is easy to work with. That is the main idea.
posted by commonslip at 1:11 AM on December 6, 2013 [6 favorites]


Ha! Hiya, thanks for the details on your process.
posted by cortex at 8:01 AM on December 6, 2013


No problem! I love talking about lisp!
posted by commonslip at 10:13 AM on December 6, 2013


« Older On Smarm   |   Which Came First, the Depression or the Insomnia? Newer »


This thread has been archived and is closed to new comments



Post