Local hackerspace draws an eclectic crowd. Hardly like-minded in most ways, but always interesting. (http://tangleball.org.nz)
Networking through it also often leads to people from neighbouring groups, including artists, academics, entrepreneurs, politicians, activists and so on (many of whom might not self-identify as hackers/makers).
That sounds useful, but I'm unfamiliar with iTunes and its store, and would rather not register with them or use their software. Is there some easier way to do it?
There's a lot of unnecessary state, where refs are initialized to nil, then only updated to a fixed value. There's side effects in transactions (mostly around the Timer). Not one function is defined with parameters, which ought to raise alarms. The flow resembles Java code rewritten in Clojure, rather than a functional Clojure program.
Besides that, much of the code is either non-idiomatic or primitive: the 'ns' macro should be used instead of 'import'; 'alter' can be better than 'ref-set'; 'when' is better than 'if' without an else form; the proxy identation is wrong.
The AWT/Swing interaction is excusable, as is the poor readability given the brevity constraint for this exercise, but there are still some elementary problems.
I'm trying to learn Clojure at the moment and pong seems like a decent real world example program to learn from. I'd love to see this code rewritten 'properly' with all these suggested improvements.
The nomenclature goes something like this. The common noun "lisp" refers to the family of languages; the proper noun "Lisp" refers to Common Lisp; and "LISP" refers to obsolete lisp dialects from long before Lisp's time.
Generally, lisps are not necessarily functional, though some dialects are, to varying degrees. Common Lisp isn't very functional at all; Scheme is much more functional; and Clojure is quite strongly functional.
It's true there is no one link, but his examples suffer a related problem -- no links are provided to Jython, IronPython, JRuby, etc., which is misleading if marginally more convenient.
That said, do people typically download releases, even of Perl, Python or Ruby implementations? I've only used distro packages or RCS checkouts of any of those systems. Is this mainly an issue for Windows or Mac users?
Perhaps it's the function shorthand syntax that resembles Perl. This is closer to your macro's surface syntax:
(Σ (fn [i] (* (p i) (log (p i)))) x)
The tradeoff with your macro version is that when you want to leverage Σ as a first-class function (say, with comp or partial), you will end up with #() or (fn..) in the calling code. You can't escape it -- it's a natural way to write functional Lisp code.
It's no less readable than the rest of Clojure's API. You can reasonably expect a Clojure user to understand functions as arguments.
For some, there can be more than one attractive sex.