On Wed, Sep 8, 2010 at 11:07 AM, Martin Blais <[address removed]> wrote:
>> The hard part of all the Lisps, and the reason they fell
>> out of popularity/never gained traction, is simply that
>> install/deploy/using the libraries was too difficult and
>> Right now, for example, I am trying to program Clojure on
>> Android and use Java libraries to reimplement a code
>> example from a Java book in Clojure.
>> I am spending half my day at least messing around with
>> configuring eclipse.ini to point at JDK instead of JRE and
>> trying to write anything in Clojure that runs on Android
>> and finding out that Clojure for Android is buggy and
>> possibly only works on Linux, etc.
>> I also wanted to use Clojure with CouchDB and couldn't
>> figure out how to install the clojure-couchdb libraries
>> from disclojure.
>> Programmers hate the feeling of wasting time on things
>> that aren't programming.
>> In Ruby or Python, everything just runs out of the box,
>> seamlessly integrated with braindead 1 click installers.
>> You go straight from concept to code.
>> Ruby has Rubygems, Perl has CPAN, Haskell has
>> Hackage/Cabal where you can easily download libraries and
>> install them hassle free, Python libraries similarly easy
>> to install.
>> Clojure has not reached that level of ease of use for
>> install and deploy to my knowledge -- if it has please
>> I'm unaware of a similar automated installer that works
>> seamlessly and did not find download and install to be
>> It's possible that the reason you have so few speakers is
>> because everyone is embarrassed to say they'd love to
>> learn the language but they don't know how to install the
>> damn thing.
>> It's also entirely possible I'm the village idiot and the
>> only person struggling with this, so I speak for myself.
> You are not, and I'm certain other people agree with your
> I also have found I had to spend way more time than I wanted
> to figure out how to set it up to work properly and deal
> with the various quirks. Part of this "problem" is that for
> those of us who haven't had a whole lot of Java exposure you
> get double the quirks in the installation process:
> Clojure's, and Java's. I have had to find answers by asking
> dumb questions on the IRC channel, which has been very
> useful to me (people on the channel are quite forthcoming
> with newbie answers and very nice generally, and clojurebot
> is so useful!). Moreover, some Clojure discussions online
> assume you already know the products of the Java ecology
> (e.g. Maven) and this can be frustrating, it adds to the
> learning curve the learning of libraries that you will use
> sometimes only superficially, and it ends up exposing you to
> more Java stuff than you'd otherwise want to.
> ��(On another account, I've been quite surprised to find
> ��that even people who have had a lot of Java experience
> ��have often been entirely shielded from the details of
> ��running Java programs because of Eclipse and other
> ��automated deployment tools. For _some_ of them you take
> ��away Eclipse and they don't know where to run.)
> Somebody ought to write a HOWTO to make this easier, but
> things are changing quite fast, and new tools appear all the
> time (plus that kind of writing is not necessarily
> rewarding). But it _would_ help a lot of people though, I'm
> Here's what I would include in this HOWTO:
> - Basic basic intro to Java, the JVM and Jar files, and how
> ��to start Java programs from the cmdline, with a special
> ��focus on the quirks of the runtime environment (e.g. no
> ��CWD), how Java selects its main program to run, etc..
> ��Assume no prior Java knowledge.
> - Simple invocation: trivial invocation of Clojure to get a
> ��REPL by invoking Java directly. (This is a one-liner.)
> - Invocation of a more complex existing program: how to
> ��start a Clojure program "manually", that is, you still
> ��invoke java directly, but this time providing an explicit
> ��list of jar files including third-party libraries, in the
> ��'-cp' option, to start an existing program and run a
> ��function (no REPL).
> �� ��(BTW writing a little sh script for a specific program
> �� ��is my favourite "sure fire" way of starting Clojure,
> �� ��where you have full control over the entire environment
> �� ��the JVM get and it "just always works". Maybe there's a
> �� ��better way? I don't know.)
> - gen-class: I have found discussions on gen-class and how
> ��it works thoroughly confusing until I understood where it
> ��came from (by asking more dumb questions at the meetup).
> ��The background and context around gen-class deserves some
> ��non-trivial amount of explanation, where it puts its
> ��files, how they're found, what they contain, etc.
> - Compiling: how to compile and package a Clojure program
> ��into a jar file.
> - Editor support: using Emacs & swank-clojure to get a REPL
> ��experience for interactive development. There are quite a
> ��few quirks worth mentioning there.
> ��- Using `deftest` for running from Emacs.
> - Other tools: Netbeans, Eclipse, etc.
> - Leiningen: what Leiningen does, how it does it, where it
> ��puts its downloaded files, and how to use it (basics). A
> ��minimal explanation of Maven basics could be inserted
> ��here. A big warning about downloads on slow connections
> ��(it downloads a lot of stuff in the background).
> Even better would be to make Clojure as easy to run as
> Python/Perl/Ruby, etc, so you don't even have to know any of
> the above in order to run code.
> Since you're in a peculiar environment (Android), I would
> try starting Clojure "manually", by invoking java with all
> the jars you need + the clojure and clojure-contrib jars.
> Write a shell script. Once you get your full list of jars
> pinned down in the script, this should always work.
I'm probably +97 on this. Though, I'd love a short intro to maven to
go along with it. I've recently come back to java development after 6
years or so (not just for clojure, but developing in java has made me
even MORE excited for clojure--who'd have thought?), and the landscape
has changed immensely from what I was exposed to back then.
I'm taking advantage of tools like Leiningen currently, and have
previous SLIME usage, so that's translated fairly well with
swank-clojure (using lein swank of course), but it'd be lovely to know
how all the classpath stuff under the hood is getting resolved, etc.