Browse files

Summarize results for 2013.

  • Loading branch information...
1 parent f496832 commit 0433bc1eff1cd2ff1da096f5e6e474b4c5214521 @technomancy committed Mar 29, 2013
Showing with 114 additions and 19 deletions.
  1. 0 resources/commentary/{ → 2012}/69812a079cdae4dc8bbcae2d373724
  2. 0 resources/commentary/{ → 2012}/6ad7b48f7219c2c076e1319788f97d
  3. 0 resources/commentary/{ → 2012}/6beaca29323b62e1155486df4963c3
  4. 0 resources/commentary/{ → 2012}/85fd40457b283991d45c4b51ec263b
  5. 0 resources/commentary/{ → 2012}/99cd77254d680a77ae5eb8625b9050
  6. 0 resources/commentary/{ → 2012}/a3768d80d49eff502d13006b01ee6b
  7. 0 resources/commentary/{ → 2012}/ad77bcf2eb5849236fd1fc11989929
  8. 0 resources/commentary/{ → 2012}/c9f98456cdcf9d4426548d8f2cabd3
  9. 0 resources/commentary/{ → 2012}/f4ac06f95403c219f644560f3993d3
  10. 0 resources/commentary/{ → 2012}/f6120f096da6b4f0f7e1a606831544
  11. 0 resources/{comments.html → commentary/2012/other.html}
  12. +1 −0 resources/commentary/2013/20eada35773ef7a3e0ac3f5fe96db4
  13. +1 −0 resources/commentary/2013/36a3c0dae27eb1858a2c790c748377
  14. +1 −0 resources/commentary/2013/444aa3cc8df3b620ef126b3c8b05f7
  15. +1 −0 resources/commentary/2013/5a2140141ebf866b8689c37cabf7ce
  16. +1 −0 resources/commentary/2013/68915499479ff98919ddad1c635b8b
  17. +1 −0 resources/commentary/2013/69812a079cdae4dc8bbcae2d373724
  18. +1 −0 resources/commentary/2013/6beaca29323b62e1155486df4963c3
  19. +1 −0 resources/commentary/2013/78a227dd6cc6a65d359d117464e322
  20. +1 −0 resources/commentary/2013/99cd77254d680a77ae5eb8625b9050
  21. +1 −0 resources/commentary/2013/a78d3bcf073a37f4bb92e3b6431e6e
  22. +1 −0 resources/commentary/2013/ad77bcf2eb5849236fd1fc11989929
  23. +1 −0 resources/commentary/2013/c2cc2d5661e1b908d9e1323e2d68fd
  24. +1 −0 resources/commentary/2013/c9f98456cdcf9d4426548d8f2cabd3
  25. +1 −0 resources/commentary/2013/f4ac06f95403c219f644560f3993d3
  26. +85 −0 resources/commentary/2013/other.html
  27. +4 −1 src/lein_survey/questions.clj
  28. +2 −2 src/lein_survey/render.clj
  29. +9 −16 src/lein_survey/results.clj
File renamed without changes.
@@ -0,0 +1 @@
+Since last year apt-get has cemented its lead with a further 7% growth to 69%. Homebrew has jumped from 32% to 50%, with MacPorts dropping to the single digits. And this year I'm not the only one on <a href="">nix</a>, which I take as a small encouraging sign of things to come.
@@ -0,0 +1 @@
+The answers here were very encouraging; over half of respondents had a GPG key, and a third of those that didn't mentioned wanting to get one. I suspect the recent attack on may have helped raise awareness here.
@@ -0,0 +1 @@
+Startup time has always been the number one complaint about Leiningen, and the results reflect that. There are <a href="">a number of tricks which can speed up boot</a>, but most of them remain fairly experimental. Hopefully we see some progress on those fronts in the upcoming months. I'm glad to see that people unsatisfied with Leiningen's end-user documentation remain a small minority (11%) though unfortunately they neglected to be specific about what it was they found lacking in the comments. For the lack of attention that's gone into native dependencies, it's not a major pain point for many either, though when it is a problem I suspect it's a big one. Only 10% report having a hard time finding dependencies, which has been a problem in the past. Documentation on plugins is weaker; this is a place where people are forced to fall back to IRC. Plugin coverage seems really strong.
@@ -0,0 +1 @@
+Clojars now has more people publishing to it than internal private repositories, though private repos remain surprisingly common. Use of other public repositories has dropped to nearly nothing.
@@ -0,0 +1 @@
+This is a new question, motivated partly by wondering how common JVMs which predate <a href="">Tiered Compilation</a> are. Uptake of 1.7 is happening fairly rapidly, and the vast majority of 1.6 users have Tiered Compilation. This is great news since it gives Leiningen a pretty serious speed boost. Users on older JVMs will have to disable it manually by setting <code>LEIN_JVM_OPTS</code>.
@@ -0,0 +1 @@
+Profiles are a new feature in Leinigen 2.x, and they seem to be very popular. Surprisingly the CLI repl remains more popular than editor integration; perhaps due to it being fairly foolproof to set up. I suspect aliases would be more widely used if they were more prominently documented. Native dependencies have 20%, which is quite high for a feature that's virtually undocumented and not used by hardly any of the main contributors.
@@ -0,0 +1 @@
+Last year's "2 years" bracket seems to have shifted into the "3+ years" bracket, which should come as no surprise given that a year has passed. Growth seems fairly strong&mdash;a quarter of respondents weren't using Leiningen when last year's survey happened.
@@ -0,0 +1 @@
+Obviously pure-clojure projects are the most popular, but surprisingly mixed Java/Clojure projects are used by a large minority; up from 20% to 40%. My impression was that including Java source only happened with legacy projects and that this would become less common as time went on, but clearly that isn't the case. Clojurescript is nearly as widely used as Java, which is surprising given that only 57% of users are working on web applications to begin with. There are even a few brave souls using Leiningen for pure-java projects and someone using it for a Scala or Groovy project.
@@ -0,0 +1 @@
+This is up from 13% last year; yay progress.
@@ -0,0 +1 @@
+The manual install remains far and away the most popular way to install. This is probably due to the fact that the Debian packages for Leiningen are taking a while due to the large number of prerequisites that need packaging. Volunteers very much welcome for that. I'm assuming everyone running from git is a contributor or intending to become one.
@@ -0,0 +1 @@
+This came up repeatedly under the free-form comments section too: I have a suspicion that most people who think they need to write a Leiningen plugin would actually be perfectly happy with an alias. Leiningen 2 introduced partially-applied aliases, which means you can create an alias to the <code>run</code> task which has some arguments (<code>-m my.namespace</code> typically) partially applied to the task function. As long as you don't need access to the project map itself, an in-project namespace can do the trick nearly every time. This is a topic that deserves more in-depth explanation, so I hope to write something up soon.
@@ -0,0 +1 @@
+It's difficult to compare this with last year's results since last year was a lot more granular. Nearly everyone (80%) uses Leiningen on Linux-based systems, while a majority also use it on Macs. Windows is up to 19%, which is a modest growth of 3%. Recently (since the survey opened) Leiningen gained the ability to do self-install on Windows without extra third-party downloads, so that may boost this number in the future.
@@ -0,0 +1 @@
+This reflects what we've seen from the first question; the majority are old-timers from the days of 1.x. However, the survey was announced a bit over a month after the release of 2.0.0, so there's a decent chunk of users starting on the fairly recent new version.
@@ -0,0 +1 @@
+This is basically the same as last year. Some small growth in GUI and drop in CLI. This question probably won't return next year.
@@ -0,0 +1,85 @@
+<h4>Other Comments Summarized</h4>
+<p>Lots of just generally positive comments here, so thanks everyone!
+ You're the best. People love the logo, which of course I
+ can't <a href="">take credit for</a>.</p>
+<p>A few people mentioned the complexity of the internals, and I
+ completely agree that there are a few places in which things have
+ gotten out of hand. Nobody feels this more keenly than I do. The
+ logic for merging profiles and applying middleware in particular is
+ treacherously subtle. Luckily it's fairly isolated, so unless you're
+ specifically touching profile logic you can ignore it, but profiles
+ are a big part of what makes Leiningen flexible. In the back of my
+ head I'm already planning what can be done for Leiningen 3, and
+ rewriting profile logic is on the top of the list.</p>
+<p>There were some complaints about Windows support, but recent
+ patches (some mentioned above) from David Powell seem to go a fair
+ ways towards addressing these. In particular the installation
+ situation is a lot nicer in 2.1.</p>
+<blockquote>I'm never quite sure what I need to do to successfully
+ publish or use a SNAPSHOT release. I don't know how to force Leiningen
+ to download a new version of a SNAPSHOT.</blockquote>
+<p>You can do this with <code>lein -U deps</code>, which is an alias
+ for <code>lein with-profiles update deps</code>, but this should
+ probably be in the FAQ. There are a few features like this tucked
+ away that are not very discoverable; it's difficult to know how to
+ expose them.</p>
+<blockquote>In desperate need of a proper release plugin.</blockquote>
+<p>I'd punted on the automation of bumping version numbers since for a
+ long time there was no way to read Clojure code in a way that
+ preserved comments for round-tripping, but
+ now <a href="">that exists</a>, so
+ no more excuses! This should probably begin life as a third-party
+ plugin and get merged to Leiningen once it's polished and matured
+ though.</p>
+<p>There were some complaints about the difficulty of getting started
+ with GPG, but Leiningen 2.1
+ now <a href="">ships
+ with a GPG guide</a> which should help a lot on that front.</p>
+<blockquote>One thing that would be of interest to me, is a blog post
+ or series on leiningen's internal design (if one doesn't already
+ exist).</blockquote>
+<p>Daniel Higginbotham has started a series on how Leiningen works
+ starting
+ with <a href="">a
+ post on lein run</a> and a follow-up
+ on <a href="">trampoline</a>
+ that has done a great job covering tricky topics so far.</p>
+<blockquote>Lein deps :tree should highlight conflicting
+ dependencies.</blockquote>
+<p>This can be done currently by
+ the <a href="">lein-pedantic</a>
+ plugin, but there's no reason it couldn't be included in Leiningen
+ proper as it's handy for debugging.</a>
+<blockquote>Other things that annoy me about leiningen is the lack of
+ phases. Having to rerun prep tasks before each task can be slow
+ [...] compiling with different profiles.</blockquote>
+<p>There's <a href="">an
+ open issue for this</a>; I don't think Maven-style phases are the
+ right solution here, but I agree that changing profiles shouldn't
+ force you to re-compile everything. I think by
+ isolating <code>:target-path</code> on a per-profile basis this
+ could be avoided. I hope to include this in version 2.2.</p>
+<blockquote>Don't know where to find all the plugins available and
+ what functions they have.</blockquote>
+<p>While it's not 100% complete, plugin authors are encouraged to add
+ their plugins
+ to <a href="">the
+ plugins page of the wiki</a>, so that's a great place to start.</p>
+<p><a href="/comments.txt">See all free-form comments</a>.</p>
@@ -21,7 +21,9 @@
"Solaris" "BSD" "other"]]
["What package managers do you use?" :check
["apt" "yum" "nix" "portage" "pacman"
+ ;; TODO: remove fink
"BSD ports" "homebrew" "macports" "fink"]]
+ ;; TODO: add "through my IDE" option
["How do you install Leiningen?" :check
["Downloading bin/lein"
"Package manager"
@@ -54,6 +56,7 @@
"Another JVM language alone"]]
["Favourite plugins? (comma-separated)" :textarea 2]
["Favourite templates? (comma-separated)" :textarea 2]
+ ;; TODO: re-word to emphasize being specific in other comments
["What annoys you about Leiningen?" :check
["startup time"
"difficulty finding dependencies"
@@ -69,7 +72,7 @@
"I have one, but I've never used it"
"I've been meaning to get one"
- ;; TODO: distinguish between "no tasks" and "yes, published"
+ ;; TODO: remove for next year
["Do you have custom tasks you haven't published as a plugin?"
:radio ["Yes" "No"]]
[(str "Did you know if you have a single patch accepted you can"
@@ -58,15 +58,15 @@
[:meta {:charset "utf-8"}]
- [:title "Leiningen Survey"]
+ [:title "Leiningen Survey: 2013"]
(include-css "bootstrap.min.css"
- [:h1 "Leiningen Survey"]]
+ [:h1 "Leiningen Survey: 2013"]]
@@ -28,16 +28,11 @@
(defonce get-results
(memoize (fn [] (read-string (slurp results-url)))))
-(defn total []
- ( (System/getenv "DATABASE_URL")
- ( res ["select count(*) from answers"]
- (println res))))
(defn hash-question [q]
(subs (DigestUtils/shaHex q) 10))
(defn commentary [q]
- #_(if-let [c (io/resource (str "commentary/" (hash-question q)))]
+ (if-let [c (io/resource (str "commentary/2013/" (hash-question q)))]
[:p (slurp c)]))
(defn img-link [q]
@@ -65,18 +60,16 @@
freqs (frequencies results-sets)]
[:img {:src (img-link q) :align "right"}]
- (if (= q "Your OS and package manager(s)")
- [:img {:src (img-link (str q "-2")) :align "right"}])
[:h4.question q]
[:dl (apply concat (for [choice choices]
[[:dt choice] [:dd (percent-freqs
freqs choice results)]]))]
(commentary q)]))
(defmethod summarize-question :textarea [results [q _ choices]]
- #_(if (= q "Other comments?")
+ (if (= q "Other comments?")
- (slurp (io/resource "comments.html"))]))
+ (slurp (io/resource "commentary/2013/other.html"))]))
(defmethod summarize-question :rank [results [q _ choices]]
(let [freqs #(sort-by (comp first key)
@@ -97,12 +90,14 @@
(let [results (get-results)]
(into [:div.summary
[:h3 "Data and commentary on the results"]
- [:p "Commentary coming soon..."]
- #_[:p "The survey has been open since the 15th of March,"
+ [:p "The survey has been open since the 22nd of February"
" but it hasn't closed, so the quantatative summaries below"
" will reflect new responses as they trickle in."
" Most questions allowed more than one answer, so percentages"
- " will not add up to 100."]
+ " will not add up to 100. At the time of this writing,"
+ " (28 March) there were just over 500 responses."]
+ [:p [:a {:href ""}
+ "Last year's survey is still up."]]
[:p "It may be interesting to compare some of these results "
"with Chas Emerick's "
[:a {:href ""}
@@ -142,10 +137,8 @@
:when (result-set name)]
-(def pie-overrides {"Your OS and package manager(s)" os-lookup})
(defn pie
- ([q results] (pie q results (pie-overrides q (fn [q result] (get result q)))))
+ ([q results] (pie q results (fn [q result] (get result q))))
([q results lookup]
(let [freqs (dissoc (frequencies (map (partial lookup q) results))
nil "I don't remember" #{})

0 comments on commit 0433bc1

Please sign in to comment.