#clojure logs

2014-10-23

01:22rritochWhat's the best way to append a single item to a vector? I typically use (into myvec [ item ]) but this syntax is deplorable, is there a better way?
01:22justin_smithconj
01:22justin_smith,(conj [1 2 3 4] 5)
01:22clojurebot[1 2 3 4 5]
01:22rritochjustin_smith: thx, didn't realize conj wouldn't turn it into a sequence
01:23justin_smithyeah, conj is basically a protocol method as a function, so it does the "approriate" thing for various types
01:23justin_smith,(conj #{1 2 3} 4)
01:23clojurebot#{1 4 3 2}
01:25justin_smithnote that "appropriate thing" can mean things that look very different
01:25justin_smith,(conj '(1 2 3) 4)
01:25clojurebot(4 1 2 3)
01:25justin_smith,(conj [1 2 3] 4)
01:25clojurebot[1 2 3 4]
01:26rritochjustin_smith: yeah, I get the same "reversals" with into so I'm constantly casting to vec and back to sequences in some code to preserve ordering
01:28justin_smith(into [] (rseq [1 2 3 4 5]))
01:29justin_smith,(into [] (rseq [1 2 3 4 5]))
01:29clojurebot[5 4 3 2 1]
01:29justin_smiththat's actually faster than reverse, and keeps the data type to boot
01:29justin_smithit works because vectors can efficiently be walked backward (and rseq exposes that fact)
01:32rritochThat's cool.
01:32justin_smiththere are also finger-trees, which are an immutible data structure that is designed from access on either end, insertion into the middle, etc.
01:32justin_smithhttps://github.com/clojure/data.finger-tree
01:33rritochIs it faster than using into+subvec?
01:33justin_smithI think so, because it continues to use the same base structure
01:34justin_smiththere is a nice library for testing these things: criterium
01:34justin_smithit takes a while to run, but gives very good micro-benchmarks
01:36rritochLooks good, I'll try it with my own apps, but my client isn't very interested in speed, mostly concerned with readability and maintainability of code, which is where that (conj) apposed to (into) will be very helpful.
01:38rritochI'm back to actual work today, but just working on the easy stuff, documentation + unit test development.
01:40rritochI really like leiningen's unit testing, but my only issue is that I'm maintaining over 50+ apps, short of using ant I'm not aware of any way of testing them all automatically
01:41justin_smithrritoch: one thing that works nicely is setting up jenkins to do the testing before deploy (or whichever other CI server you may like to use)
01:47wxjeacendears, I wanna write an desktop app with clojure
01:47wxjeacenwhat is the best option for me ?
01:47wxjeacenseesaw?
01:48akurilinhey folks: does anybody know what's happening to Korma's ownership?
01:49akurilinI'm not at all sure, but it looks like there's been only one merged PR in teh past 3 months
01:50justin_smithwxjeacen: yeah, seesaw is probably the most straightforward
01:50wxjeacenjustin_smith: ok ,thanks a lot
01:52justin_smithakurilin: I have been seeing more people talk about yesql lately - instead of a DSL in clojure, it uses a source file of actual sql code to define a parameterized function
01:52justin_smithhttps://github.com/krisajenkins/yesql
01:58akurilinjustin_smith: I remember that one, cool. Prob is that we have a huge codebase that's already half on CJJ and half on korma
01:58akurilinadding a 3rd option at this point would be pretty ballsy
01:58justin_smithakurilin: yeah, fair enough, I haven't used it myself either
01:59justin_smithjust noting where the chatter is :)
01:59akurilinthe reaosn why I'm asking about Korma because I submitted a PR there for a modification to its c3p0 initializion code and I'm curious if that's worth waiting for
01:59akurilinor if I should just fork my own version and clojars it
01:59justin_smithit seems odd that korma would even be touching the c3p0 init stuff - why not just let the end user configure it directly?
02:00akurilinit basically passes through configs to c3p0, just not all of them
02:00akurilinI needed one extra setting it wasn't supporting
02:00justin_smithoh wait wait, this may be a good moment to invoke this image: http://i.imgur.com/MdbUlkO.png
02:00akurilinvery tiny change: https://github.com/korma/Korma/pull/256/files
02:01justin_smithyeah, that is small
02:02akurilinit's an important one because actually setting the min pool size below init pool size doesn't work at all
02:03akurilinand I needed exactly 2 connections in the conn pool, not 3 :P
02:08justin_smithakurilin: I am of the firm belief that if the purpose of some piece of code is to provide access to an underlying java API, then full access to that API should be granted
02:09justin_smithakurilin: I mean, sure, hide the array under a vector, but for c3p0 it should be exposing the pool so you can use it to its full power
02:13akurilinSure, I wonder if there was something about initialization order here
02:14akurilinor maybe c3p0 lets you reconfigure it whenever you want
02:14akurilinNot familiar enough with it to really say
02:19justin_smithakurilin: the c3p0 pool is a spec that jdbc uses
02:19justin_smithcheck out how concise this lib is https://github.com/ToBeReplaced/jdbc-pool/blob/master/src/org/tobereplaced/jdbc_pool.clj
02:19justin_smithit's not a super complex thing
02:21justin_smith(well to be fair he does use a little macro to generate setter methods for any keys you pass in, but it's still small)
02:26akurilinjustin_smith: heh yeah clever little thing there with making those method names and eval
04:10borkdude has anyone maintained the twitterbuzz sample application for clojurescript somewhere, or has something analogous, without using React? (repost from #clojurescript)
04:38dysfunis there anything in clojure like the C preprocessor's #LINE directive?
04:40borkdudesorry, never mind about twitterbuzz, the 1.1 API broke it
04:48thheller@bbloom just saw your cljsd proposal. https://github.com/thheller/shadow-build had slightly different design goals but yours should be pretty straightforward to integrate
04:59SagiCZ1is there a "doc" alternative for java classes?
05:00hyPiRion_SagiCZ1: yeah, use javadoc if you're in the lein repl
05:00hyPiRion_e.g. (javadoc java.util.ArrayList)
05:01SagiCZ1but that opens in browser
05:01SagiCZ1so inconvenient
05:05noidi_dysfun, in a macro you can get the line from which the macro was called with (:line (meta &form))
05:06noidi_e.g. (defmacro line [] (:line (meta &form)))
05:06noidi_(line) ;= 1
05:07dysfunyes, but i wish to *set* it
05:08noidi_ah, right
05:08noidiwhy do you want to do that?
05:09dysfuni've written my own reader and i want to change where errors are reported from
05:11dysfunthe only other option seems to be to wrap the entire thing in a try and rewrite the exception object
05:12dysfunbecause it's mainly to get correct line numberings when there's an unhandled exception (e.g. unreadable)
05:12clgvSagiCZ1: no, just `javadoc` since that his how api documentation is usually done in java
05:12SagiCZ1what do you mean? it could pull the information out and print it to repl
05:13dysfunhrm, i suppose that's true
05:13clgvSagiCZ1: yeah well, that's probably to specialized to be in core, since you'd need to parse the html - you wouldnt be happy to see html tags in repl right?
05:14SagiCZ1i guess
05:16clgvif you do not find a library that does that the `javadoc` approach is good enough with respect to the effort to implement a different solution that parses javadoc and tries to output it in a reeadable fashion in the repl
05:17SagiCZ1yeah i could write a util function that parses the information and prints it to repl if side effect of javadoc fn wasnt opening the browser
05:20clgvSagiCZ1: just extract the part that determines the URL from the `javadoc` function
05:21clgvSagiCZ1: then you can just read the document form the URL
05:21SagiCZ1good idea
05:22clgvSagiCZ1: if you succeed you can publish it as lib for others to use...
05:23SagiCZ1i would
05:23clgvSagiCZ1: maybe check if anyoneelse did that already ;)
05:26SagiCZ1i bet someone did
05:54dysfunSagiCZ1: you can also use w3m or similar to render it in text
06:00scottjSagiCZ1: if you use emacs, you might want to use eww (available in 24.4) to display the javadoc
06:05elfenlaidhi, quick question, is it possible to create macro like deref symbol (@)?
06:11SagiCZ1scottj: yeah i dont use emacs.. learning a new language and an obscure editor at the same time seemed like a bad idea, although i tried it for couple days..
06:14mearnshobscure?
06:15winkobscure.
06:19SagiCZ1mearnsh: yes
06:19scottjSagiCZ1: if you use screen and w3m, you could use this http://pastie.org/9669872 (might be able to replace "screen" with "tmux" and have it work) it creates a new tab with the docs open in w3m
06:20SagiCZ1what is w3m?
06:20scottja text web browser
06:23scottjif you just want text in your repl, you could change it to (-> (clojure.java.shell/sh "w3m" "-dump" url) :out println)
06:24scottjI think you'll discover quite quickly though that hypertext is convenient :)
06:36SagiCZ1scottj: thank you very much
07:08zapho53Anyone using thalia? I added this - :repl {:dependencies [[thalia "0.1.0"]]} - to my ~/.lein/profile.clj but (require 'thalia.doc) in lein repl results in "Could not locate thalia/doc__init.class or thalia/doc.clj on classpath"
07:09zapho53Lein repl downloaded the lib and it's in $HOME/.m2/repository.
07:11hyPiRion_zapho53: try to put it in the :user profile
07:14zapho53hyPiRion_: That's what I did.
07:14zapho53hyPiRion_: It only complains when I try to require it.
07:17hyPiRion_zapho53: like this: `{:user {:dependencies [[thalia "0.1.0"]]}}` ?
07:19zapho53hyPiRion_: No, just - :repl {:dependencies [[thalia "0.1.0"]]} - which is what the git doc says.
07:24zapho53hyPiRion_: That gets me past the exception but now - user=> (doc map) - results in: "CompilerException java.lang.RuntimeException: Unable to resolve symbol: doc)"
07:25zapho53hyPiRion_: Omit trailing ")"
07:29hyPiRion_zapho53: that's strange. I tried out having profiles.clj as both {:repl {:dependencies [[thalia "0.1.0"]]}} and {:user {:dependencies [[thalia "0.1.0"]]}}, and they both work fine
07:30zapho53hyPiRion_: Ah, I only added the one you suggested, not both.
07:31hyPiRion_zapho53: no, I mean, I tried {:repl {:dependencies [[thalia "0.1.0"]]}}, and then {:user {:dependencies [[thalia "0.1.0"]]}} afterwards
07:31hyPiRion_not both simultaneously
07:33zapho53hyPiRiion: Well only the one you suggested got me past the classpath exception but it still doesn't work with (doc)
07:33hyPiRion_what lein version are you on?
07:34zapho53hyPiRion_: Weirder still - I switched to a different clj project and it works.
07:35hyPiRion_zapho53: oh, then that's because you define :repl in the other project, and therefore shadow the profiles.clj definition
07:37zapho53hyPiRion_: I'll take a look.
07:38hyPiRion_It's better to specify the :repl dependency directly in the project.clj for now, from what I gather.
07:39zapho53hyPiRion_: The only oddities seem to be - :main ^:skip-aot db2.core :target-path "target/%s" - nothing about :repl
07:40hyPiRion_those looks in and by itself fine
07:41zapho53hyPiRion_: No profile.clj for the project where thalia fails
07:41hyPiRion_zapho53: project.clj, not profile.clj
07:41hyPiRion_or well, both of them can override the defaults
07:42zapho53hyPiRion_: As I said, the project.clj has only those 2 unusual entries. The rest are simple plugin deps
07:42hyPiRion_alright. Hrm.
07:43hyPiRion_zapho53: could you write an issue on the thalia github page with a minimal example?
07:45SagiCZ1where do you put documentation for defmethod?
08:02clgvSagiCZ1: in defmulti
08:03clgvSagiCZ1: you are actually calling a multimethod that has a certain contract of what it does - at call site you do not intend to call some specific implementation that does something entirley different then all the other multimethod implementations for different types
08:15visofhi
08:15visofcan i write java lambda expression inside closjure?
08:15visofclojure*
08:36clgvvisof: yes, you can
08:36clgvvisof: you mean lambda functions right?
08:36clgv,((fn [x] (* x x)) 3)
08:36clojurebot9
08:37clgv,(#(* % %) 3)
08:37clojurebot9
08:37der23hola
08:37der23cud sum1 tell me frm wer i can learn clojure frm basics?
08:38clgvder23: english please?
08:38der23Could someone tell me from where I can learn clojure from basics? :)
08:39clgvder23: there are a few good books and some online material. which one do you prefer?
08:39der23Online material, please :)
08:40clgvhttp://www.braveclojure.com/, http://clojure-doc.org/
08:40der23How long would it take me to grasp this?
08:40clgvthere is at least one more I do not recall right now
08:40clgvthat's really depending on you
08:40clgvhard to tell
08:41der23I have been coding in CPP for the past 4 years.
08:42clgvdo you have any functional programming languages or lisp experience?
08:42der23Well, I had a course in Scheme last semester.
08:42der23I didn't learn much in depth.
08:42clgvthat might help to speed up learning
08:42clgvoh well...
08:43der23Hmm. I just know the basics like making functions, recursive, iterative, table, tree etc. :/
08:43clgvI did learn clojure by reading through a book and playing around with the examples on a repl
08:45clgvI usually recommend solving the exercises on 4clojure.com
08:46visofclgv: so converting this JavaRDD<Integer> lineLengths = lines.map(s -> s.length()); should be (map (fn [x] (.length x)) lines) ?
08:48visofthis java map just take lambda expressions in java or functions represented by class which implement org.apache.spark.api.java.function
08:48visofclgv: so i try to use pass the easier which is lambda expressions if possible
08:49visofclgv: but when i try to run this i got java.lang.ClassCastException: Cannot cast testspark.core$_main$fn__13 to org.apache.spark.api.java.function.Function , which refer anonymous fn i passed need to be casted to Function
08:49visofso what you suggested guys?
08:51clgvvisof: well they expect a special class derived from their Function interface
08:51clgvvisof: you can use `reify` to build one
09:13TimMcbbloom: I was able to get the bencode crash reliably with that chunk of code I pasted earlier.
09:19sveriHi, I wonder if it is possible to invalidate a session for a user that is logged in via the friend library? Or is it possible to invalidate a seesion for a given client at all?
10:02roelofI have this assignment : http://pastebin.com/92KgLFLC
10:02roelofso I made this : http://pastebin.com/5kdEFvuY
10:03roelofbut now I see this error message : nsupportedOperationException nth not supported on this type: PersistentArrayMap clojure.lang.RT.nthFrom (RT.java:857)
10:03roelofwhich I do not understand
10:03roelofwhere did I go wrong ?
10:07perplexaroelof: conj the author to authors and assoc authors to book.
10:08roelofperplexa: so I have to make 2 conj or do you mean something else ?
10:08perplexaread again, please.
10:10roelofperplexa: oke, sorry for the two quick answers. So I have to make 2 things. One assoc to make the authors work and a conj for the authors
10:10roelofbut I still do not understand what the error message mean
10:11roelofand can this be done in one "rule"
10:12perplexa,(def book {:title "some book" :authors [{:name "some author"} {:name "other author"}]}) (def new-author {:name "added author"}) (assoc book (conj (:authors book) new-author))
10:12clojurebot#'sandbox/book
10:12perplexawat
10:13perplexa,(let [book {:title "some book" :authors [{:name "some author"} {:name "other author"}]} new-author {:name "added author"}] (assoc book (conj (:authors book) new-author)))
10:13clojurebot#<ArityException clojure.lang.ArityException: Wrong number of args (2) passed to: core/assoc>
10:13perplexa,(let [book {:title "some book" :authors [{:name "some author"} {:name "other author"}]} new-author {:name "added author"}] (assoc book :authors (conj (:authors book) new-author)))
10:13clojurebot{:title "some book", :authors [{:name "some author"} {:name "other author"} {:name "added author"}]}
10:13perplexathere.
10:13perplexa:P
10:14perplexashouldn't do your assignments for you tho ;(
10:15roelofperplexa: I know, Im studing your solution to understand what is going on
10:15roelofI find this one confusing
10:15roelofand for your peace. its a self study
10:20Bronsaroelof: you can use update-in in this case
10:20Bronsa,(update-in {:foo [1 2]} [:foo] conj 3)
10:20clojurebot{:foo [1 2 3]}
10:20roelofperplexa: I did a little bit investigation and am I right that the conj takes care that the new author get's added and not override the old values ?
10:21Bronsaevery time you find yourself in need to do something like (assoc x :foo (f (:foo x) ..)) you should use update-in instead
10:21roelofBronsa: thanks, that one is not explained in my course. I just learned to use conj and assoc
10:22Bronsaroelof: maybe they'll talk about update-in/assoc-in/get-in later on, they are really handy
10:22perplexaas long as there's just one :foo and it's not in some nested map that works idd ;p
10:23Bronsaperplexa: you talking about update-in?
10:23perplexayeah ;p
10:24Bronsaperplexa: update-in does work for nested-maps, that's its main use-case
10:24Bronsawell I didn't understand you then.
10:24perplexayeah i know, what i'm trying to say is that when he wants to update only one value and there are multiple matches, it could not work as expected as he intents
10:25roelofthen it schould like this update-in ( :authors [friedman, felleisen]} conj new-author) ?
10:25Bronsaroelof: the solution you posted earlier doesn't make a lot of sense btw
10:25Bronsaroelof: none of what you just wrote make any sense
10:25roelofstill he wonders why the exercise talks about using let
10:26roelofthen I hope the course is talking about update-in and I will understand better how it works
10:27Bronsaroelof: take some more time to understand the fundamentals before, I'm sorry I didn't understand you were just starting to learn the language when I suggested update-in
10:28Bronsaroelof: you should definitely play with assoc/conj before using more "advanced" functions
10:30roelofBronsa: np, in the next exercises I can play more with assoc and conj. I do the I loveponies tutorial where you have to do a lot self
10:30mavbozoroelof: maybe the current lesson wants to teach you about using let
10:32mavbozoroelof: (defn add-author [book author]
10:32mavbozo (let [old-authors (:authors book)
10:32mavbozo updated-authors (conj old-authors author)]
10:32mavbozo (assoc book :authors updated-authors )))
10:33roelofmavbozo: nope, let is already used in the first lesson
10:33roelofmavbozo: oke, like that way
10:34roelofbut everyone thanks for the lessons but I have to leave, Daugther get swimming lessons
10:54bbloomthheller: hm, interesting. i'll check it out. cljs.closure is a bit hairy, i was already contemplating rewriting it for my purposes
11:26gfredericksdoes the clojure compiler note when a local stops being used mid-function and clear it?
11:27bbloomgfredericks: i don't know for sure, i but i think that the locals-clearing thing does lexical liveness analysis and inserts null sets anywhere a local dies
11:28mdrogalisbbloom: Huh, I didnt know that. That's interesting
11:29bbloomgfredericks: grep for `canBeCleared` in compiler.java
11:29bbloomlet me know what you figure out :-)(
11:30gfredericksbbloom: oh I'm just going to run this code and see if I get an OOM :P
11:30bbloomha
11:31mdrogalislool
11:32Bronsagfredericks: bbloom is right -- the only caveat is that if a local is never used, it'll never be cleared
11:32gfredericksHUH.
11:33gfredericksokay that' shouldn't be a problem
11:33dankogooood morning vietnam!
11:33bbloomBronsa: is that a debugging feature? or just a side effect of clearing code being part of the local-use emit function?
11:33Bronsabbloom: the latter
11:35dankoso i am rocking this brave and true book right now
11:35dankopretty awesome, huh?
11:37mj_langford👍
11:39dankoi appreciate that mj
11:39dankosome acknowledgement in this world
11:40dankojust left my job to start company, pretty exciting stuff
11:40dankolearning clojure as i think it could come in handy
11:41gfredericksbbloom: OOM
11:41bbloomgfredericks: i can draw no conclusions w/o seeing your code
11:43gfredericksbbloom: yeah.
11:44dankodo y'all do web server programming mainly?
11:44dankoi am just leaving high frequency trading
11:51djamesIf my goal is to use Emacs/Clojure on the Mac but also not stray too far from Linux installs, is http://emacsformacosx.com a good choice?
11:54bostonaholicdjames: I installed via homebrew => brew install --cocoa --srgb emacs
11:54bostonaholicbut was using emacsformacosx.com before that
11:55djamesbostonaholic: what prompted the change?
11:55bostonaholicbrew upgrade
11:57djamesbostonaholic: haha. I mean, where you dissatisified with the DMG install?
11:57bostonaholicdjames: it made it easy to upgrade emacs instead of needing the DL a new dmg and installing
11:57djamesbostonaholic: got it; otherwise, the same?
11:57bostonaholicyeah, I believe so
11:57nullptremacsformacosx.com is a great choice if you want vanilla emacs in binary form, homebrew version is fine too
11:57djamesnullptr: thanks
11:58nullptrhomebrew version has a few flags to play with, and you have to compile it, but it will upgrade automagically ... both reasonable choices, you basically end up with vanilla emacs via either path
12:16thedankotest
12:17thedankoi am liking cursive
12:20mdrogalisClojure survey, some of these answers to "things I want" are border-line comical.
12:20mdrogalis"() instead of [], () instead of {}." Sure, we'll get that into 1.8
12:21bbloommdrogalis: that's either a joke or an angry common lisper
12:21technomancymdrogalis: linky?
12:21technomancybbloom: or both
12:21mdrogalishttp://cdn.cognitect.com/stateofclojure/2014/clj-feature.txt
12:21mdrogalisbbloom: Yeah, true
12:21nullptrguessing http://blog.cognitect.com/blog/2014/10/20/results-of-2014-state-of-clojure-and-clojurescript-survey
12:22mdrogalis"distributed core.async" Really?
12:22thheller@bbloom happy to help if you have questions. docs are basically non-existant unfortunately
12:22nullptrtl;dr "faster", and "types"
12:22mdrogalisnullptr: *Nod*
12:23bbloomthheller: yeah, i'm peaking at it. it's a bug bummer that google closure's require/provide stuff is so wonky w/ respect to file names and provides
12:23bbloompeeking*
12:23technomancyapparently two people want "-" as a clojure feature, did no one tell them subtraction is already supported?
12:23mdrogalistechnomancy: They couldn't find it in the docs.
12:23technomancyoh snap
12:24bbloomall the people mentioning typing blows my mind
12:24bbloomgo use scala, or import core.typed
12:24bbloomwhat more do they want?
12:24thedankoif you ask people what they want, they'll tell you a faster horse
12:24hiredmantypes and tpye inference?
12:24technomancybbloom: inference?
12:24justin_smith"A faster mechanism for dispatch on multiple JVM types (multimethods ain't it!)" this person should know about protocols
12:24mdrogalis"Whatever Rich thinks is a good idea" We've gone full cult :)
12:24bbloomtechnomancy: hiredman: psha. just infer everything is dynamic. done :-)
12:25mj_langfordMan, sad I missed that survey. I'd hvae asked for "Dr. Clojure" for new folks.
12:25mdrogalisIt'd be nice if there was a brief "reply" to some of these - because a few of these requests already exist.
12:25hiredman"A specification for alternative implementations of clojure"
12:25technomancywho made this text file... they forgot to escape quotes inside strings. ಠ_ಠ
12:26bbloomtechnomancy: fucking computers
12:26bbloomtechnomancy: surely you know what they meant, just parse-by-magic
12:27technomancy"Fully supported and documented standard library. I thought contrib was the right way to go." dems fightin' words
12:27hyPiRion_"A golang compiler backend"
12:28mdrogalis"Ability to propagate exceptions between threads on deref" That sounds .. Interesting. Is this common place anywhere else?
12:28technomancyhyPiRion_: someone is unfamiliar with the golang runtime apparently =)
12:28justin_smithmdrogalis: it happens already with futures
12:28Bronsaclj-weakness.txt: "JIRA"
12:29mdrogalisjustin_smith: Eh? Ah, I guess so. I discarded the "deref" bit mentally.
12:29mdrogalisI was picking threads bonking out and instantly taking down other threads.
12:30Bronsa"Limited BDFL bandwidth." that's a really nice way to put it
12:30justin_smithmdrogalis: you can see it in action with (future (#(let [a 0] (/ 1 a)))), @*1
12:31justin_smithmdrogalis: (simpler versions of this did the exceptional thing before the future even sent off thanks to optimization I guess)
12:31hyPiRion_technomancy: I'm not sure why, but people somehow assumes go is faster than the jvm.
12:31mdrogalisjustin_smith: Good point
12:31technomancyhyPiRion_: and they assume that google go supports dynamic loading
12:32justin_smithmdrogalis: it makes sense - if you are using the value, you should care about the exceptional condition invoked in calculating it
12:33technomancyheh, someone wants robert hooke for cljs
12:33technomancyor, they said that's what they want
12:33technomancywhat they actually want is vars for cljs
12:33justin_smiththe visual programming a-la Mx/MSP request would be a fun little cljs html5 hack
12:33technomancyhaha, "Static typing à la Haskell (core.typed should win)"
12:33technomancyso... which do you want? like haskell or like core.typed?
12:34hyPiRion_huh
12:34mj_langfordI'd love something that told us what was backwards derivable
12:34hyPiRion_"Extremely optional typing system" – I thought we had that already
12:34mj_langfordAnd generate core typed for us as much as possible
12:34mj_langfordand we could take that further (if that makes sense)
12:35bbloomgit s
12:35bbloomer wrong window
12:35hiredmanor extra space, we'll never know
12:36bridgethillyerMay I please have the, say, 2 sentence version explanation of feature expressions?
12:37mdrogalisDo something conditionally depending on what host you're compiling against.
12:37hyPiRion_bridgethillyer: I think it's like (def foo #+cljs cljs-expression #+clj clj-expression)
12:37justin_smithbridgethillyer: kind of like #ifdef in C but more elegant
12:37mdrogalise.g. Clojure, do X, Cljs, do Y
12:37bridgethillyerOh!!
12:37bbloomjustin_smith: questionably more elegant
12:37hiredmanhttp://dev.clojure.org/display/design/Feature+Expressions "There are Clojure dialects (Clojure, ClojureScript, ClojureCLR) hosted on several different platforms. We wish to write libraries that can share as much portable code as possible while leaving flexibility to provide platform-specific bits as needed, then have this code run on all of them."
12:38justin_smithbbloom: at least our macros are syntax aware
12:38bridgethillyerhyPiRion_, justin_smith: thanks - Exactly what I needed - I get it now
12:38bbloomjustin_smith: i'd call that less broken, but no more elegant :-)
12:38bridgethillyerhiredman: thanks!
12:38hyPiRion_np =)
12:39mmeixWhat would be the simplest way to turn [:a (3)] into [:a 3] ?
12:39Bronsa(fn [_] [:a 3])
12:39nullptrha
12:40hiredmanone of the barf sexp paredit commands?
12:40TimMcM-s
12:40hyPiRion_(fn [x [y]] [x y])
12:41TimMcmmeix: Seriously though, you need to specify the problem a little better.
12:41BronsahyPiRion_: more like (fn [[x [y]]] [x y])
12:41hyPiRion_Bronsa: yeah, more like that
12:42mmeixOk, I fiddled with a function with gave me something like {:a (2 3) :b (4)}
12:43joobus(flatten (quote [:a (3)]))
12:43joobusoops, wrong window
12:43Bronsajoobus: too late, we're all judging you for using flatten now
12:44joobusi figured...
12:44justin_smith,(update-in '[:a (3)] [1] first)
12:44clojurebot[:a 3]
12:44mmeixI would apply some function, if there would be more than one argument in the (...), if only one just get the "inner" songle value
12:45Bronsammeix: so your imput is {:a (1 2) :b (3)}, what would the output be?
12:45technomancywow... cljs has been around for how many years now, and people are still saying their biggest desire is "clojure off the jvm"
12:45Bronsainput*
12:45justin_smithmmeix: that's a bad idea - it's more useful if all of them are the same type - if any are sequences, let them all be
12:45justin_smithmmeix: otherwise the complexity of that conditional difference leaks into all the other related code, everyone needs single / plural conditionals
12:46mmeixBronsa: {:a (1 2) :b (3)} ==> {:a 3 :b 3}
12:46Bronsammeix: a being 3 because 2+1?
12:46mmeix(with + as reducing func)
12:46mmeixyes
12:47Bronsammeix: you can use reduce-kv for that
12:47thedanko hey guys, i am not sure what the protocol is exactly, but i wanted to introduce myself and say hi to everyone. i have been doing OO programming for a few years as a trader. i left my job last week and will be starting a company that will likely be highly software driven. i am taking a few months off and have decided to spend the first couple weeks at least starting to get familar with clojure. it seems like it will be mind-expand
12:47thedankoing to learn it.
12:47hyPiRion_(into {} (for [k v] [k (reduce + v)])) is also doable, perhaps more straightforward
12:47Bronsa,(reduce-kv (fn [m k v] (assoc m k (reduce + v))) {} '{:a (1 2) :b (3)})
12:47clojurebot{:b 3, :a 3}
12:47justin_smith,(reduce-kv (fn [m k v] (assoc m k (apply + v))) {} '{:a (1 2) :b (3)})
12:47clojurebot{:b 3, :a 3}
12:47justin_smithgreat minds think alike
12:48mmeixaha, reduce-kv was below my radar, thanks
12:48joobusbronsa and justin_smith are the same bot...
12:48BronsahyPiRion_: yeah, for some reason I always prefer reduce-kv over into {} + for
12:48joobus:P
12:48justin_smithactually I like hyPiRion's version
12:48justin_smith(inc hyPiRion)
12:48lazybot⇒ 51
12:49hyPiRion_Bronsa: we should really get a map-vals function in core I think. It's very common to map over values in maps
12:49BronsaI guess reduce-kv might be slightly more efficient though
12:49BronsahyPiRion_: yeah map-vals is defined in a ton of projects
12:49justin_smithBronsa: yeah, but in that case the into/for version is more straightforward to read
12:49Bronsajustin_smith: sure
12:50mmeixthanks to all, as ever :-)
12:50BronsaI think I actually called it update-vals rather than map-vals in tools.analyzer
12:50thedankois this thing on? apologies if so!
12:51justin_smithI DEMAND AN APOLOGY
12:51thedankoha, thanks!
12:51{blake}justin_smith, Sorry.
12:53hyPiRion_thedanko: cool, best of luck with learning :) I felt it was really valuable with a non-OO point of view programming-wise
12:54thedankohyPiRion_: awesome and thanks, i am certainly high confused currently which is exciting because it means i am learning something new!
12:54{blake}OK, I've built a ring server that, on request, reads a file and creates a map which contains a spec for an input screen. Now I want to generate a web-based interface from that spec, and I'm trying to decide whether I should have a CLJS app that builds the interface from the map, or have the ring server serve HTML. Or some mix.
12:55{blake}I'm leaning toward an Om-based app that parses the map all on its own, with the idea that that will give me the best opportunities for a responsive UI.
12:56{blake}Any thoughts?
12:58joobus{blake}: if you are going to use react, then use OM or reagent on the client. Otherwise, use something like enlive to build on server. IMO
12:58hyPiRion_thedanko: yeah, it think it was really hard to work with Clojure in the beginning, but that's because there are so many non-OO (well, non-Java/non-C#) concepts you're not familiar with yet
12:59{blake}joobus, The motivation there being that it's probably easier to build the interface on the server, right?
12:59justin_smithhyPiRion: thedanko: but the upside is that Clojure introduces ways of programming that are often much simpler than OO
13:00joobus{blake}: i don't know. I think it is more a question of whether or not you want to use react.
13:00thedankojustin_smith: sweet! that's what i am hoping to understand soon.
13:00gfredericksdoes anybody know anything about incomplete stacktraces? not missing entirely, just clearly only showing the top 20 frames or so
13:00gfredericksthis is the case for .getStackTrace so should have nothing to do with clojure tooling
13:01justin_smith{blake}: well, the advantage with react is you can update without a full page load, and get good responsive interaction, the advantage on server side is you can pre-build and cache things and less demands on the client's browser / computer - it depends on what kind of UI you need to have IMHO
13:01justin_smithgfredericks: is JIT in play?
13:01justin_smithgfredericks: because JIT is allowed to do weird things
13:02gfredericksjustin_smith: how can I make it not in play?
13:02gfredericksthe jvm was started by `lein repl`
13:02hyPiRion_gfredericks: I think the lein repl optimisations have/had a bug on stacktraces, which caused them to be too aggressively GCed
13:03puredangergfredericks: if you're using pst - it takes a number of frames to show I think
13:03gfrederickspuredanger: I'm using .getStackTrace
13:03{blake}justin_smith, The funny thing is, my interface should just be (basically) an input screen, all submitted at once, followed by an output screen. Maybe no react, then. The peeps around here are ga-ga for bootstrap, and I had sort of come to the whole Om/React thing through that. So maybe a wrong turn on my part.
13:03justin_smithgfredericks: -Djava.compiler=NONE
13:03gfredericksjustin_smith: k I will try that thanks
13:04justin_smithgfredericks: that could require :replace in the :jvm-opts in project.clj
13:04puredangerjustin_smith: I can't imagine that will end well :)
13:04justin_smithpuredanger: oh?
13:04puredangerI've never used it, just have to imagine that that's going to be really slow
13:05gfredericksis it fully interpreted bytecode?
13:05hyPiRiongfredericks: see if it's reproducible with :jvm-opts []
13:05thedankoha, that reminds me. i am really psyched about writing programs that can run on human time after HFT. stupid microseconds!
13:05gfredericksyeah good plan
13:06thedankopure interpreted is probably still not human time, ha
13:06joobus{blake}: do you have experience with react? Setting an app up is more involved than writing a page of html inputs, which can be advantageous sometimes, and sometimes not.
13:06justin_smithpuredanger: the suggestion pretty much comes from a "eliminate free variables until you find the cause" debugging philosophy - I would never suggest that setting as a long term solution :)
13:06puredangeroh understood. :)
13:07{blake}joobus, No, I'm just starting with React.
13:07thedankoso does anyone have a good autoformatting setup for cursive?
13:08thedankothe default one doesn't seem to break up lines
13:08thedankowell whatever i am doing doesn't
13:09justin_smiththedanko: cfleming_ is the cursive author, so if anyone knows it would likely be him
13:09thedankojustin_smith: sweet, thanks. i'll try a little more before bothering him.
13:09{blake}thedanko, Yeah, it doesn't seem to have an opinion on line breaks, from what I can tell.
13:10thedankomj_langford: downloading lisp_cast now, thanks for the rec!
13:12justin_smiththedanko: mostly I was just making sure that his name was uttered, that would make his IRC client alert him to this convo if he was available but not actively watching :)
13:13thedankojustin_smith: oh wow, thanks for explaining! i am new to IRC also.
13:14justin_smiththedanko: the feature is not something ALL clients would do, but common enough to risk a chance on
13:16gfredericksstill incomplete with :jvm-opts ^:replace [] :(
13:19justin_smithgfredericks: :jvm-opts ^:replace ["-Djava.compiler=NONE"]
13:19justin_smithcan't hurt to try at least
13:24thedankowoa just got to memoize
13:24thedankotripppy
13:24gfredericksI'm giving up for now
13:25AMALLOYTHIS IS STILL COOL, RIGHT?
13:25hiredmangfredericks: has anyone mentioned fastthrow?
13:25TimMcAMALLOY: You're infected!
13:25gfrederickshiredman: that was my first thought but my guess was that that only removes stacktraces entirely -- am I wrong?
13:25TimMcI wonder if I still have immunity.
13:25hiredmangfredericks: no idea
13:26gfrederickshiredman: I'll use my googler, thanks
13:26hiredmangfredericks: or try it and see?
13:26justin_smith(inc AMALLOY)
13:26lazybot⇒ 177
13:26hiredmanit is one of those options that is on by default so you have to set a flag to turn it off
13:39TimMcHaha, who put "illuminated macros" for their desired Clojure feature?
13:50TimMc"Rich Hickey's hair" <- But we already have it!
13:54justin_smithTimMc: Rich does, but I can't pull it in via a project.clj dep
13:54technomancyyou have to add sonatype-oss first
13:54technomancyit's a common mistake
13:56llasramha!
14:00dharanimannehi. I'm new and I would like to contribute to clojure. Where do I start?
14:01mdrogalistechnomancy: You stepped in something. :(
14:01hiredmanif you want to contribute code you'll need a contributor agreement
14:01llasramdharanimanne: Write a library to do something interesting
14:01justin_smithdharanimanne: a lot of interesting things can be done in a library, so you could start there
14:01llasramdharanimanne: For good or ill, very little development happens within Clojure itself
14:01justin_smithdharanimanne: contributions to the language itself are a whole other can of worms
14:01technomancymdrogalis: man, it's going to take a lot of scrubbing to get the jira smell off
14:02hiredmanhttp://clojure.org/contributing
14:02llasramdharanimanne: The good is that it doesn't need to -- even something as radical as core.async is just a library
14:03dharanimannethanks. I'll look into the page
14:05hiredmanonce you fill out the ca, you can start submitting patches to clojure itself or the collection of contributed libraries (which is mostly just everything under the clojure org on github)
14:06hiredmanalex miller every once in a while tries to send out an email with good "starter" issues (I've seen him do it twice, that is enough to establish a trend)
14:06mdrogalistechnomancy: *Step step step step SPLOOOSH* who the heck put a Jira ticket here?
14:07bostonaholicmdrogalis: Top 10 Clojure Features Requested in 2014: https://gist.github.com/bostonaholic/cef5a4916d46782ed368
14:07mdrogalisbostonaholic: Nice :)
14:07{blake}Heh, "Fast startup" and "Faster startup" are two separate entries.
14:08technomancysomeone needs to do an analysis like this guy did https://www.youtube.com/watch?v=3MvKLOecT1I
14:08technomancyclassification, etc. super thorough.
14:08hiredmanneeds stemming
14:08technomancy"fsvo needs"
14:08bostonaholicI'm sure it's not perfect, but it's close
14:08{blake}Consisting, one presumes, of those who want the startup to be faster in absolute terms versus those who would be satisfied with an incremental improvement in startup (even if still slow).
14:08hiredmanis there no stemmer in binutils?
14:09llasramMaybe named entity recognition
14:10llasram{blake}: What distinguishes "feature expressions" from "Feature expressions"?
14:10bostonaholicyeah, my script was done quickly
14:10bostonaholicthose would be the highest freq of single line answers
14:11bostonaholicreally should split the lines into bigrams/trigrams and count freq from there
14:16{blake}llasram, Case! Some want "feature expressions" as a general thing, while others are clearly referring to "Feature Expressions!", perhaps as an ideology or a name brand.
14:16{blake}bostonaholic, Oh, not busting on you at all, by the way. Just being goofy.
14:16bostonaholicno worries
14:17llasram{blake}: Oh! It's pretty obvious in retrospect. I mean, the Feature Expressions were even playing at the Tabernacle last week
14:17llasrambostonaholic: ditto :-)
14:18{blake}llasram, I saw Feature Expressions open for Turing Machine back in the '80s.
14:18bostonaholicall are welcome to improve my script
14:18bostonaholic(working on v2 now!)
14:18djamesACL played at ACL last year. That was so meta.
14:19{blake}djames, If they'd been commited to the meta, they would've all torn their ACLs before going on.
14:20djamesAcronym Overloading was quite impressed by that whole act.
14:21djamesBut the Standardization Committee blew a gasket and left without finishing their set.
14:21beppuHow do I make the inversions-raw function in this post tail recursive? http://boards.4chan.org/g/thread/44813406#p44836395
14:23djamesbeppu: you have code posted at 4chan?
14:23beppuIt's harmless.
14:27llasrambeppu: You want to enumerate all non-descending pairs each element can form which any subsequent element in the input sequence?
14:27llasrams,which,with,
14:27justin_smithbeppu: my first instinct at a shallow reading is it should be using mapcat
14:27beppullasram: yes
14:27arrdemdoes anyone have a self-hosted CI solution they like for Clojure projects?
14:28arrdemor is it just `lein test` :P
14:28justin_smitharrdem: had to use jenkins at work, it didn't suck balls (but I did not have to install or do system setup either)
14:28technomancywhile true do git pull && lein test && sleep 60; done
14:28{blake}Aw, man, I hate it when that happens.
14:28justin_smitharrdem: one of the steps in jenkins was lein test :)
14:29{blake}Going through the enlive tutorial (https://github.com/swannodette/enlive-tutorial/)
14:29beppujustin_smith: use mapcat instead of trying to recursively conj?
14:29arrdemtechnomancy: I've had a shell open with `watch -n 60 lein test` as a "CI" solution before
14:29technomancyarrdem: actually... hook that up with http://tools.suckless.org/ii/
14:29technomancyand you're in business =D
14:29justin_smithbeppu: yeah, but like I said that comes from a shallow reading, so may be off base
14:29beppuok
14:29llasrambeppu: Do you want an example of Clojure-style tail-recursion, or just a version which doesn't blow the stack on a large collection?
14:29{blake}And the first command fails. (hn-headlines) is supposed to pull from news.ycombinator.com and gets a 403. :(
14:30arrdemtechnomancy: oshit nice one!
14:30beppullasram: either would be fine.
14:30arrdem(inc technomancy)
14:30lazybot⇒ 153
14:30technomancyarrdem: lein test will write a .lein-test-failures file or something you could cat that to an irc channel with ii =)
14:30justin_smithtechnomancy: or even watch the file for changes...
14:31beppuI tried to (juxt conj) and change (inversions-raw (rest lst)) to (recur (rest lst)) but I was told that recur wasn't in the tail position.
14:31arrdemeh just write a post-recieve that pokes the rebuild system
14:31arrdemasynchronously
14:33dbaschbeppu: in (apply concat (filter not-empty (inversions-raw lst)))), why the filter clause?
14:34beppudbasch: part of the result set of inversions-raw were a bunch of empty lists that I didn't want
14:34beppudbasch: I didn't know how else to get rid of them.
14:34llasrambeppu: https://www.refheap.com/92198
14:35arrdembeppu: if you apply concat to a sequence containing empty lists... the empty lists do nothing
14:35beppullasram: That looks elegant. Thank you.
14:35beppuarrdem: orly? didn't know that.
14:35arrdemunless I'm loosing my mind...
14:35llasramarrdem: You are not
14:35arrdem&(apply concat '((1 3) () (4 5)))
14:35lazybot⇒ (1 3 4 5)
14:36llasramWell, you might be, but not on that :-)
14:36arrdemllasram: thanks for the vote of confidence :P
14:37beppullasram: Is it OK if I post your version in that thread?
14:37llasramarrdem: It's difficult to escape your history. I understand.
14:37dbascharrdem: that’s why I asked the question, it’s redundant
14:37llasrambeppu: sure thing
14:37bepputhanks for your help everyone
14:40pwmaskHow would I read a password from console input without having the password printed? Java interop with System/console is giving me troubles
14:45hyPiRionpwmask: java.io.Console.readPassword()
14:47arrdemhyPiRion: ... is that actually a thing?
14:47arrdemthat is a thing.
14:47arrdem(inc hyPiRion)
14:47hyPiRionarrdem: yes, http://docs.oracle.com/javase/7/docs/api/java/io/Console.html#readPassword()
14:47lazybot⇒ 52
14:49hyPiRionI have also implemented setEcho if you want to shoot yourself in the foot: https://github.com/hyPiRion/com.hypirion.io/blob/master/src/com/hypirion/io/ConsoleUtils.java#L56-L67
14:51arohnerare there any libraries/gists for profiling core.async channels? I have a process using several chans, and I'm curious to see which ones are full, empty, etc
14:52pwmaskhyPiRion: java.io.Console.readPassword() is not working for me.
14:53beppullasram: (take-while seq (iterate rest coll)) <-- that's really cool
14:53beppu(inc llasram)
14:53lazybot⇒ 39
14:53hyPiRionpwmask: in the lein repl, right? You'll have to use it with `lein run -m clojure.main`
14:54pwmaskhyPiRion: will it work when I uberjar my code?
14:55hyPiRionpwmask: almost definitely. As long at it works when you do `lein run`, it will work when you call the uberjar
14:55pwmaskOh, i meant if I would need to do anything special to add the -m portion to my uberjar
14:55hyPiRionoh, nono
14:55hyPiRionit has to do with the lein repl setup
15:06rsslldnphyAnyone using cemerick/friend seen an issue where a single request for a page requiring authentication is allowed *after* logout, with all subsequent requests being properly prevented?
15:07pwmaskhyPiRion: yep that works. Thanks!
15:08hyPiRionpwmask: np
15:10borkdudeI would have liked some analysis of this data like Chas Emerick did with the previous surveys http://blog.cognitect.com/blog/2014/10/20/results-of-2014-state-of-clojure-and-clojurescript-survey
15:10borkdudefor example: how many people use cljs and don't use clj
15:11puredangerI wrote about half of one but I decided to release the data rather than wait till I finished that (which might be a while)
15:12borkdudepuredanger cool
15:13puredangerin particular, I think it's most instructive to compare across the last few years
15:13borkdudepuredanger I think people who use clj(s) at work has gone up
15:13puredangerbut it really means building whole new charts that combine data across several surveys and that is slow
15:13borkdudepuredanger sure. I am particularly interesting now in the usage of cljs though, if people are using it who don't use clojure
15:14borkdudepuredanger I'm not sure how I can derive that daya
15:14puredangeryeah, can't really see that (except it's prob very few since 98% of respondents said they were using clojure)
15:17noonianpeople do come here from time to time trying to figure out how to compile cljs when they obviously have not used clojure and the dev tools
15:22pwmaskhyPiRion: is there any way to ensure System.console() won't return null? I know this is more of a java issue, but I'm not sure I understand why java believes it doesn't have a console in some cases
15:25hyPiRionpwmask: No, you cannot ensure the user has access to a console. Double-clicking on an uberjar for example won't open up a console, and if you redirect stdin from the shell you're in, you don't have access to the "console" either
15:26hyPiRion(Presumably the user is using the program wrong if you get back null)
15:31akurilinHey folks: is there an straightforward way I could glob files with an "older than x hours" filter on it?
15:31akurilinI was looking at raynes/fs
15:31akurilinOne option is that I glob and then check the age in clj
15:33danielcomptonakuriliin: file-seq + a filter?
15:44mdrogalisIs there a way to make clojure.tools.namespace.repl/refresh not refresh the tests?
15:51akurilindanielcompton: yeah probably something along those lines
15:57ToBeReplacedakurilin: if java 7+, java.nio.file gets you that, and i wrote a wrapper to make it a bit easier (nio.file)
16:01tony_I'd like to start using ClojureScript for my frontend development. Can someone recommend a workflow for dev/browser-repl?
16:02borkdudetony_ I suggest checking out weasel
16:03borkdudetony_ if you want to use Om, you can check out Chestnut. If you want to use Reagent check out the lein new liberagent template
16:03tony_or give me their thank you borkdude
16:04tony_*thank you borkdude
16:04tony_i tried Austin, but had some trouble setting it up and gave up
16:06mi6x3mhey clojure, what's the best way to create an empty sequence?
16:07tbaldridgemi6x3m: nil, or ()
16:07mi6x3mtbaldridge: oh, () is actually a literal
16:08tbaldridgemi6x3m: yep, although most of the time, nil works as well
16:08tbaldridge,(map inc nil)
16:08clojurebot()
16:08dbaschmi6x3m: it’s rare that you need to create an empty sequence though
16:08mi6x3m(inc tbaldridge)
16:08lazybot⇒ 12
16:08mi6x3mwell I need it in this case for consistency
16:09noonianthere's also the empty function so you can write generic things that return the same type, i.e. (fn [col] (into (empty col) (map inc col)))
16:10lodinnoonian: Watch out for vector vs list there though.
16:11akurilinToBeReplaced: oh neat, thanks for keeping me posted
16:11danielcomptonmdrogalis: can you pass it a directory of files to refresh?
16:11akurilinbtw what is pom.xml.asc when submitting to clojars?
16:11akurilinDo I need that in my source control at all?
16:12noonianlodin: yeah, you mean because of reverse ordering?
16:12noonianand performance
16:12lodinnoonian: Don't know about performance, but yeah, reverse ordering.
16:13nooniancool
16:15stuartsierraakurilin: .asc files are GPG signatures; should be generated automatically by your build tool.
16:15jdmmmmmMidje question: Does anyone know how to get fact names with variable interpolation?
16:15jdmmmmmEx, this does not show the evaluated string: (def x "foo") (fact (str "example " x) (cons 'a '()) => '(a b))
16:16JohnJoyyhi guys, any hardened soul could help me make a connection to SQL Server in Clojure? I'm having trouble doing it in a Mac after being able to get it done against a remote machine
16:16lodinnoonian: Ah, you're thinking about list not being editable, so transients can't be used? (I just looked at the source of into.)
16:16akurilinstuartsierra: I guess my question is, is it ok for me to get rid of it after a push to clojars?
16:17stuartsierraakurilin: yes
16:18akurilinperfect, thank you
16:18noonianlodin: i just mentioned performance on the off chance that it was what you were referring to. I don't normally worry about it unless its a problem and I don't know specifically with into if it is a problem
16:20jdmmmmmJohnJoyy: Have you mapped 127.0.0.1 to your mac machine name in your /etc/hosts file? I've never tried what you're trying to do, but I have had to make this configuration for other locally running server processes.
16:21technomancyakurilin: they should be in the default .gitignore
16:21weavejesterWhat are people’s thoughts on the #=() reader form? Is it something that should be used in code?
16:21JohnJoyyjdmmmmm: I am already able to connect with another client on Mac, I'm suspecting this is a problem with the Java classpath in Mac, does it assume the /Library/Java/Extensions or do I need to set it?
16:22technomancyweavejester: IMO it's a measure of last resort
16:22jdmmmmmJohnJoyy: What's your error?
16:22JohnJoyyjdmmmmm: java.sql.SQLException: No suitable driver found for jdbc:sqlserver:10.211.55.4\sqlexpress
16:23technomancyeval at read-time, like eval at runtime, is almost always a hacky way of doing something sketchy
16:23weavejestertechnomancy: I was trying to get the current namespace with *ns*
16:23weavejesterSo rather than writing (resource/url ‘foo.bar.baz “index.html”)
16:24weavejesterWhich would evaluate to “foo/bar/baz/index.html”
16:24weavejesterI could write (resource/url *ns* “index.html”)
16:24jdmmmmmJohnJoyy: Without answering your exact question, a strategy of connecting is mentioned here: https://github.com/clojure/java.jdbc
16:24weavejesterI was considering using #= to force the *ns* to be evaluated at the moment it’s compiled
16:24akurilintechnomancy: fair enough. It wasn't there in the Korma .gitignore so I added it now.
16:24weavejesteri.e. #=(resource/url *ns* “index.html”)
16:24weavejesterIs that terrible? :)
16:24jdmmmmmJohnJoyy: This should obviate any platform-dependent classpath issue you might face.
16:25technomancyweavejester: ::index.html maybe
16:25weavejestertechnomancy: Oh! That’s something I hadn’t considered...
16:25weavejester(resource/url ::example “.html”)
16:26weavejesterBut is that easier to understand than
16:26JohnJoyyjdmmmmm: yeah I tried that, couldn't manage to locate a Maven repository accessible to my system
16:26weavejester#=(resource/url *ns* “example.html")
16:26hiredmansyntax quote also namespace qualifies
16:26hiredman`foo
16:26technomancyweavejester: admittedly both methods are hacky
16:26jdmmmmmJohnJoyy: Are you're using leiningen?
16:26JohnJoyyjdmmmmm: yeah
16:26weavejester(resource/url `example.html) ...
16:28JohnJoyyjdmmmmm: should I use this https://github.com/kumarshantanu/lein-localrepo ?
16:29weavejesterMaybe I should just fully qualify the namespace
16:29weavejesterBut that seems prone to error
16:29weavejesterI could do (def ns *ns*) at the top level, but ick :)
16:29weavejesteror (def current-ns *ns*)
16:29jdmmmmmJohnJoyy: I think you'd have to install locally and use the :resource-paths leiningen configuration. Cf. http://stackoverflow.com/questions/2404426/leiningen-how-to-add-dependencies-for-local-jars
16:29technomancyheh, yeah ns is hard-coded
16:31weavejesterIf a namespace foo.bar.baz depends on resources foo/bar/baz/* I’d preferably like a way of specifying the namespace once
16:31weavejesterSo I could write (def current-ns *ns*) and then (resource/url current-ns “example.html”)
16:40weavejesterMy code looks neater with #= ...
16:49noonianwhat is this #= thing you speak of
16:49JohnJoyyjdmmmmm: tnx I'll try that
16:50noonianit's not very googleable
16:51ToBeReplacedweavejester: fwiw i'd go the (def ^:private this-ns *ns*) route if you're only using it within that namespace
16:52weavejesterToBeReplaced: Yeah… I don’t like the repetition, but it might be the clearest way of doing it.
16:52ToBeReplacedkind of weird having the namespace map directly to a file though... you could alternatively do (defmacro myurl ...) in a utility file
16:53weavejesterToBeReplaced: In my case it’s because the namespace relies on an external resource
16:53weavejesterToBeReplaced: For instance, foo.bar.endpoint.example might rely on the resource “foo/bar/endpoint/example/index.html”
16:54ToBeReplacedright
16:54ToBeReplaced(defmacro myurl [basename] `(resource/url ~*ns* ~basename)) maybe?
16:56weavejesterToBeReplaced: Yes, or simply (defmacro this-ns [] (ns-name *ns*)) might work.
16:56weavejesterI guess I’d need to quote it, but you get the idea.
16:56weavejesterOr just (defmacro this-ns [] *ns*) might work
16:57amalloyweavejester: probably not
16:57amalloytrying to embed a Namespace object in code doesn't sound happy
16:58weavejesteramalloy: Just tried it, and it works fine
17:00ToBeReplacedthere's definitely good reason for it... consider tools.logging
17:02weavejesterI’m actually tempted by the eval reader form
17:02weavejesterSince it’s very explicit as to what it does
17:03weavejesterWhereas a macro that grabs *ns* seems a little more iffy.
17:07sg2002Hello. Does anyone here uses Korma? I have somewhat newbish problem: I need to be able to close my db connection manually. But I also want transactions to work. Found this https://github.com/korma/Korma/issues/160, but there's no way to specify this custom object to the transaction macro...
17:09sg2002Oh, nevermind found with-db macro in korma sc. That worked...
17:19zerokarmaleftwhat's the advantage of using core.async/pipe vs directly hooking up two processes with one channel?
17:20zerokarmaleftthe shared channel seems to functioning as a pipe already
17:24arohnerzerokarmaleft: a/pipe copies between two channels
17:29akurilinztellman: quick question: what's the name of that streams library you wrote a while ago?
17:29akurilinCan't remember the name for the life of me :(
17:29ztellmanakurilin: manifold?
17:29arohnerlamina?
17:29akurilinaah ok
17:29ztellmanI have a number of them
17:29akurilinztellman: arohner thanks guys :P
17:29akurilinI'm trying to transform a byte[] into an output stream
17:29akurilinso I can Ring it out
17:29ztellmanakurilin: byte-streams
17:29ztellmanthat's the one you want
17:30akurilinztellman: thank you sir <3
17:30ztellmanand you want it to be an inputstream, btw
17:31akurilinztellman: oh ok I ahve these things backwards every time
17:32zerokarmaleftarohner: well yes, I mean use cases
17:33arohnerzerokarmaleft: for example, you could have multiple data sources that can be processed the same
17:33arohnerso you copy from multiple sources to the same dest
17:34zerokarmaleftah
17:34arohnerI'm using a/pipeline in code I'm writing right now, to use different levels of parallelism
17:47cfleming_thedanko: Did you get that formatting issue sorted out?
17:48thedankocfleming: greetings! not yet. i am watching the lisp cast video now and i see how he is putting in line breaks
17:48thedankocfleming: but i don't see how or whether cursive can do that automatically
17:48cflemingthedanko: I haven't seen the video - can you describe what you're trying to achieve?
17:48thedankocfleming: it does some autoformatting but no line breaks currently.
17:49cflemingthedanko: Are you talking about e.g. automatically inserting line breaks between map entries, or similar?
17:49thedankocfleming: i am brand new to clojure from java. in java, the autoformat would create line breaks when the lines got long or in other reaosnable places.
17:50cflemingthedanko: Ok, I see - Cursive doesn't do that yet, but the latest version actually just got a formatter upgrade that will allow that.
17:50cflemingthedanko: I still have to add the options so you can control where the breaks go.
17:50thedankocfleming: sweet, thanks. not trying to complain at all obviously, it's a great program! just wanted to make sure i wasn't missing something.
17:51cflemingthedanko: It's harder in general in Clojure than in Java because the syntax is so flexible, it's not immediately obvious what is a parameter when you're formatting, for example.
17:51cflemingthedanko: No, no worries, I'm always interested to know what people are missing.
17:52cflemingthedanko: So, hopefully within a couple of builds that will be in there, but it'll be more limited than you're used to in Java
17:52cflemingthedanko: Like a lot of the tooling in general, the language makes it more difficult.
17:52thedankocfleming: i look forward to it!
17:53thedankocfleming: just curious, do you primarily use the REPL in intellij?
17:54thedankocfleming: well i am not just curious i guess. i want to make sure i have a goodsetup going. cursive and the local repl seem great so far.
17:54cflemingthedanko: It's a mix - I often have the REPL running just to run tests, but do most of my work on tests and code in the editor.
17:54cflemingthedanko: I tend to use the REPL editor more when I'm playing with an idea or exploring an API.
17:55thedankocfleming: nice, thanks! great to hear from an expert.
17:55cflemingthedanko: You'll find over time what works for you, people have different ways of working with the REPL - see http://literateprogrammer.blogspot.co.nz/2014/10/hiding-repl.html for some discussion on that.
17:56EvanR2damn we have experts here?
17:56technomancyverma: was this your comment here? https://github.com/technomancy/leiningen/issues/1721
17:56borkdudesomeone know why this websocket conn isn't working just by looking at this screenshot? https://www.dropbox.com/s/zz57vgy2rhq5aop/Screenshot%202014-10-23%2023.50.30.png?dl=0
17:56thedankohaha
17:57technomancyEvanR2: no, only Señor Software Developers
17:57nwolfehaha
17:57EvanR2aye yai yai
17:57cflemingI prefer Mr Señor, actually.
17:58thedankocfleming: the keyboard shortcut guide on your website is awesome. have been working on them today. that was one of the first things i taught new hires.
18:05cflemingthedanko: Great, thanks - glad it's useful!
18:16technomancycan any lein-ring users tell me if https://github.com/technomancy/leiningen/issues/1710 is fixed with the latest commit on lein master?
18:19vIkSiThmm, whats the easiest way to get keys from a map while making sure that it returns empty in case that key doesn't exist?
18:20justin_smithvIkSiT: do you want the keys, or the values for certain keys?
18:20vIkSiTeg, in python, I could do mymap.get("key1", {}).get("key2", {}) ...
18:20vIkSiTat every level, i'm trying to get the value for a given key
18:20vIkSiTso i'm thinking (-> my-big-nested-map :key1 :key2 :key3)
18:20justin_smith,(get-in {:a {:b {:c 0}}} [:a :b :c])
18:21clojurebot0
18:21vIkSiT->>* rather
18:21vIkSiTah
18:21vIkSiTget-in.
18:21vIkSiTty justin_smith!
18:21justin_smithnp
18:21justin_smithalso works with vectors (but not lists / lazy-seqs)
18:21justin_smith,(get-in [[[42]]] [0 0 0])
18:21clojurebot42
18:22justin_smithkind of like foo[0][0][0] in an algol family lang
18:22vIkSiT,(get-in {:a {}} [:a :b])
18:22clojurebotnil
18:22vIkSiTah
18:25justin_smith,(get-in {:a {}} [:a :b] ::not-found) vIkSiT:
18:25clojurebot:sandbox/not-found
18:25vIkSiTaaah
18:25vIkSiTvery neat
18:25justin_smithyou probably would want that if you want to disambiguate
18:25vIkSiTtrue
18:25justin_smiththe namespaced keyword helps
18:26vIkSiTSo, how do you guys think about large code base organization? eg, i have a functionality that queries a server. but, there are three ways of doing it.
18:26vIkSiTso in OO world, you'd make an abstract class that does basic stuff
18:26vIkSiTand then implement class1 2 and 3
18:27vIkSiTwhich does some specific stuff.
18:27vIkSiTnow, should I be thinking protocols? multimethods?
18:27vIkSiTsomething else?
18:27amalloyfunctions. always think about functions
18:28justin_smithvIkSiT: provide functions that operate on some shape of data, and then have your querying functions return data in that shape
18:28justin_smithvIkSiT: the data you provide should be as seamlessly usable with clojure built-in functions as possible
18:29justin_smithvIkSiT: ring is a good example - you can use various http servers, all end up handing you a hash-map with certain keys you can operate on
18:30justin_smiththen you hand a hash-map or string back to the ring adapter and you're done
18:30vIkSiThmm
18:31vIkSiTwhy not protocols then?
18:31justin_smithand then separately you have compojure that gives convenience macros for acting on that data (mainly the specific problem of routing)
18:31vIkSiTfor instance, why can't I have an "indexer" protocol that contains the functions "query", "delete" and "index"
18:31justin_smithwell, in that specific example ring does use a protocol
18:31vIkSiTah
18:32vIkSiTand then i could have a "indexer-type1 and indexer-type2
18:32justin_smithvIkSiT: but here is the thing - I define protocols if I want other people to be able to hand me implementations that plug into my code
18:32vIkSiTwhere indexer and query are overwritten
18:32CaptainRantWhats the idiomatic way to check that after refactoring my function still returns an object of the same type(s) as before ?
18:32justin_smithvIkSiT: if I just have two functions that could be used to get the same sort of data, I don't need a protocol for that
18:32vIkSiTright. for instance, if someone needs to write a new indexer for this service
18:32vIkSiTthen all they do is implement the protocol
18:32vIkSiTand only worry about implementing the two funcions
18:32justin_smithvIkSiT: exactly
18:33vIkSiTand all other internal stuff (connection handling for instance) is within that protocol
18:33vIkSiTright, this isn't about just two functions
18:33sg2002Hello. I have another somewhat lamish question - what would be an idiomatic way to implement a stream in clojure? By stream I mean a lazy seq, every element of which can be read and after reading it can be gcd.
18:33vIkSiTit's about f[1..n] where, fn relies on fn-1, and so on till f1.
18:33justin_smithsg2002: lazy-seq
18:33vIkSiTso if i want to implement f'n
18:34vIkSiTthen i would either need to rewrite f1-n as f'1-f'n
18:34vIkSiTor, somehow encapsulate
18:34justin_smith(doc lazy-seq)
18:34clojurebot"([& body]); Takes a body of expressions that returns an ISeq or nil, and yields a Seqable object that will invoke the body only the first time seq is called, and will cache the result and return it on all subsequent seq calls. See also - realized?"
18:34vIkSiTjustin_smith ^
18:34justin_smithvIkSiT: yeah, that sounds about right
18:35sg2002justin_smith: The problem with lazy-seqs is that elements keep growing, hogging the memory.
18:35justin_smithvIkSiT: but remember that in clj land it's less often about information hiding, and more often about providing standard interfaces so functionality can be composed with the standard tools
18:35justin_smithsg2002: that's your fault for holding onto the head
18:35justin_smithsg2002: don't hold the head, and the elements get gc'd
18:36justin_smithsg2002: if you have a small example that has that issue, I can probably show you an alternate version that doesn't hold the head of the sequence
18:37sg2002justin_smith: Hmm, is there a way to stop holding head? I'm observing my lazy seq right now, it does not really seem to be gc-ing. And why would it? How clojure would know that I don't need some elements?
18:37justin_smithsg2002: because you don't have any object that provides access to those elements
18:37justin_smiththat's what not holding the head means
18:38justin_smith,(nth (range) 100000)
18:38clojurebot100000
18:38justin_smithin the above, there is no reason for the vm to hold onto the 0,1,2,...
18:38justin_smithand it is smart enough to gc them
18:39justin_smith,(def numbers (range))
18:39clojurebot#'sandbox/numbers
18:39justin_smith,(nth numbers 1000000)
18:39clojureboteval service is offline
18:39sg2002justin_smith: Ok, I have a lazy seq. Over this lazy seq I do a doseq . In doseq I pass element to some fn, after which I don't need it anymore. Would it gc?
18:39justin_smithin this example, it needs to hold onto the head
18:39justin_smithit can't throw them away
18:40justin_smithsg2002: as long as no binding is in scope to access the head of the sequence, yes
18:40justin_smithsg2002: the problem comes up as you see in my second version above, when "numbers" is still in scope
18:40justin_smithit crashed
18:43mikefikesjustin_smith: in (nth (range) 100000), does the argument vector count as a binding that could hold onto the head of the ooutput of (range)?
18:43amalloymikefikes: no
18:44justin_smithmikefikes: no - because there is no way outside that form to access that value
18:44justin_smithmikefikes: and the compiler can take that into account when compiling that form
18:44mikefikesCool, the compiler elides it?
18:44amalloyit only "counts" if you actually refer to that binding; the compiler knows when you use a lexical binding for the last time, and nulls out the reference once it can prove you're never touching it again
18:44amalloyeg, consider (defn foo [xs] (last xs))
18:44justin_smithmikefikes: not elides it, just constructs things such that the values can be quickly reclaimed after usage
18:45amalloyxs is obviously in scope the whole time that foo is finding the last element in (foo (range 1e7))
18:45mikefikesNice :)
18:45amalloybut the compiler sees that you're never reading it again, so it's eligible for collection
18:51mikefikesInterestingly (nth (range) n), where n is some huge integer, returns the correct result instantaneously for me in ClojureScript, as if the compiler has short-circuited something.
18:52justin_smithmikefikes: it runs pretty fast in clj too
18:52stuartsierraI think there's an experimental implementation of Range as a reified type in ClojureScript.
18:53mikefikesIt is taking a long time and pegging my CPU in JVM Clojure
18:53justin_smithmikefikes: oh, interesting
18:53SegFaultAXHow big is n?
18:54mikefikesGoogle Closure is not involved when evaluating things in a browser REPL, is it? Or is it as Stuart says, something intrinsic about the implementation?
18:54mikefikes(time (nth (range) 10000000000000))
18:54mikefikes"Elapsed time: 0 msecs"
18:54mikefikes=> 10000000000000
18:55Bronsamikefikes: yeah nth on range is implemented via arithmetic operations on start+step rather than by walking the entire seq
18:55mikefikes(The above is with ClojureScript)
18:55Bronsaso it's constant time
18:56stuartsierrahttps://github.com/clojure/clojurescript/blob/92a00c388a442186cb25ee328f0a71423df55341/src/cljs/cljs/core.cljs#L7536
18:56Bronsait has been that way for a long time btw
18:56mikefikesCool, I wanna learn more about what its doing there. Is that a capability that we mere humans have at our disposal when writing code?
18:57Bronsamikefikes: yes
18:58mikefikesBronsa: Is that true in CLJ also? Or is it "yes" because of the prevalent use of protocols in CLJS?
18:58Bronsamikefikes: it's not the case in CLJ atm
18:59Bronsamikefikes: but there's a ticket open to change the implementation of range to somewhat match the one used in CLJS
19:00Bronsamikefikes: http://dev.clojure.org/jira/browse/CLJ-1515
19:00mikefikesThanks Bronsa and Stuart, reading that stuff now :)
19:01Bronsamikefikes: the cljs impl is easier to read than the one proposed in the clj ticket as cljs is implemented in cljs while for clj the impl is in java
19:03mikefikesSo... will the ClojureScript compiler one day in the far off future be revised to emit JVM bytecode, etc. Seems like there is too much investment in the curent Clojure compiler to ever abandon it.
19:03justin_smithmikefikes: there have been various attempts at making clojure self hosting (or at least more self hosting than it is now)
19:04Bronsamikefikes: cljs has a different compilation model than clojure so that's highly unlikely
19:04Bronsamikefikes: however I've implemented a compiler on top of tools.analyzer.jvm that emits jvm bytecode https://github.com/clojure/tools.emitter.jvm
19:05mikefikesAhh OK. I thought the ClojureScript compilation model was temporary. I don't yet truly appreciate the compile time / runtime considerations.
19:06Bronsamikefikes: no, it's by design and unlikely to change
19:08mikefikesIf the Clojure compiler were being written today, would it follow the ClojureScript compiler design? In other words, is Clojure the way it is simply due to history, or is it on purpose?
19:09mikefikes(For what little I know, JVM bytecode and JavaScript are interchangable execution targets.)
19:09hiredmanfuh
19:09hiredmanno
19:10justin_smithmikefikes: there's a saying on ##java java : javascript :: ham : hamster
19:10hiredmanit would likely have protocols at (or near) the bottom like clojurescript but have clojure's runtime model
19:11hiredmanI mean, that would be my guess, the clojurescript model didn't come of design really, but necessity, from my understanding
19:12hiredmanclojurescript has to be the way it is to use the google closure optimizer and it has to use the google optimizer to have an acceptable foot print
19:12Bronsahiredman: you're right
19:13hiredmanas some who has written a lot of clojure, I find clojurescript rather anemic
19:13Bronsamikefikes: were clojure to be reimplemented today I'd guess quite a few things might be different but I seriously doubt the compilation model would be one of those
19:13Bronsahiredman: care to explain that statement a bit?
19:14technomancymy guess is no vars
19:14hiredmanBronsa: it just doesn't have all the stuff
19:14hiredmanmaybe I just haven't bothered to figure out how you setup a repl for it
19:15Bronsatechnomancy: I haven't written any cljs myself but it's my understanding that the lack of vars are not an issue really
19:15hiredmanthere was a lot lost in the translation to javascript, dnolen and company have been working overtime to recover it (source maps, etc)
19:16technomancyBronsa: yeah, and lack of a repl is "not that bad" when using google go if you listen to the true believers. I'm not buying it. =)
19:16clojurebotIk begrijp
19:16technomancythanks clojurebot; you're super helpful
19:16mikefikesThe bot burped?
19:17ghadishaybansomeone asked for Go as a backend in the survey
19:17ghadishaybansurprise surprise
19:17hiredmanwell, people are the worst, so it was bound to be asked for
19:18Bronsahiredman: I guess that's true, still having all the clj interfaces as protocols is something I envy a lot of cljs
19:19hiredmansure
19:20mysamdogWell, it's been a while since I've asked a stupid question here, so here I go
19:21Bronsait has its own issues though, because protocols don't partecipate in a hierarchy like interfaces do, there's no way to extend a -- say -- ISeq interface to a protocol and be done, in cljs you have to extend every concrete type
19:22hiredmanBronsa: there are some pretty sophisticated deftype like macros that help with that sort of thing
19:22hiredmanI think ztellman has some kind of def-map-type thing
19:22Bronsathis shows with https://github.com/clojure/clojurescript/blob/master/src/cljs/cljs/core.cljs#L8054-L8141
19:23ztellmanhttps://github.com/ztellman/potemkin#def-map-type
19:23djamesmikefikes: are you indirectly asking if one compiler may one day serve both the JVM and JavaScript?
19:23Bronsahiredman: sure I implemented something similar myself years ago https://github.com/Bronsa/neurotic
19:24mikefikesdjames: Yes. One to rule them all, maybe even other targets like SIL. Having host interop is nice, but it also leaks through in negative ways, but I understand that these are all pragmatic considerations.
19:25hiredmanSIL?
19:25mikefikesIf nothing else, pushing protocols farther down in Clojure's compiler might be nice.
19:25mikefikesSwift Intermediate Language; I'm guessing it is like bytecode but for Swift
19:26hiredmanugh, gross
19:26Bronsamikefikes: honestly, as things are now I doubt there will be a significant reworking of the Clojure compiler ever
19:27sg2002justin_smith: Thanks for the info. Good to know that clojure is doing the smart thing. Got the hintch that it doesn't from debugging a memory hog, now found, that it's not clojure, but on of my libs.
19:27mikefikesBronsa, yeah, that's what I figure
19:27hiredmanthe issue is, clojurescripts reduced semantics demand less of the host, so it seems like the style of clojure likely to spread to other platforms, which is sad, because clojure is better
19:28dwwoelfelHas anyone experienced line numbers being off with advanced compilation on ClojureScript source maps?
19:28mikefikeshiredman: I have no interest in Swift, I just want to be able to code in Clojure and target iOS
19:29djamesmikefikes: that would be nice
19:29mikefikesSo far, I've been using ClojureSwift, but the interop is painful
19:29Bronsafrom a compiler-writing POV I have to say I've frequently envied the lack of "runtime available" macros & resident compiler in cljs, I'm sure arrdem can sympathize with this
19:29mikefikesHeh, ClojureScript :)
19:30hiredmanBronsa: sure, and imagine the optimization passes you could do if you knew all the types at compile time!
19:30Bronsathere are optimizations that go from really hard to simply impossible because of the compilation model of clj :(
19:30hiredmansure
19:31hiredmanit leans hard on the optimizations in the jvm
19:33justin_smithsg2002: cool - fyi for future reference the jdk comes with a profiler (jvisualvm) and there are other profilers out there too, and profiling is the best way to figure out what is using up all your RAM / making your program slow / etc/
19:34sg2002justin_smith: Yep used jvisualvm.
19:41vermais there a workaround around this: https://github.com/technomancy/leiningen/issues/1710
19:41vermacan't get the output jar to work
19:42justin_smithverma: technomancy was asking people to try out some fix for that earlier
19:43vermajustin_smith, hmmm
19:43justin_smithverma: he asked if people would try out lein master and see if it's fixed
19:43vermajustin_smith, yeah the issue says that it probably didn't
19:44technomancyverma: that comment is 11 days old; I think today's master has a fix
19:44vermaoh nice
19:44vermachecking
19:44technomancyverma: also, is this your comment here? https://github.com/technomancy/leiningen/issues/1721
19:44technomancysometimes freenode nicks and github usernames don't match up and it's super confusing
19:45vermatechnomancy, no, I did work on that issue a little bit, trying to earn a sticker
19:45vermait got quite complex fast
19:46bostonah_mdrogalis: {blake}: llasram: even after improving the script, the results were nearly identical - https://gist.github.com/bostonaholic/cef5a4916d46782ed368
19:55vermatechnomancy, so I checked out the latest master, and went into the leiningen-core directory, and did a lein bootstrap, I then went to ../bin and tried to run lein, it came back with Failed to download https://github.com/technomancy/leiningen/releases/download/2.5.1-SNAPSHOT/leiningen-2.5.1-SNAPSHOT-standalone.jar
19:55vermaguess its looking for its release
19:55vermahow do I use lein from this checkout?
19:56{blake}bostonaholic, If you combine fast/faster startup, it ties for first with "feature expressions".
19:56{blake}bostonaholic, Or, wait, no it doesn't...wait I'm confused...this is the same list.
19:56bostonaholicyeah, I'd like to improve it to combine like terms, but that's a bit more work
19:57bostonaholicsame with "Types" vs. "type checking"
19:58technomancyverma: don't copy bin/lein out of the checkout; symlink it or just run bin/lein
19:58{blake}bostonaholic, Eh, it's pretty visible.
19:58{blake}Could do it by hand.
19:59vermatechnomancy, ok
20:03vermatechnomancy, lein --version gives out: Leiningen 2.5.1-SNAPSHOT on Java 1.8.0_11 Java HotSpot(TM) 64-Bit Server VM
20:03vermabut I still cannot create the jar
20:03vermait fails with the same error
20:03vermatechnomancy, Warning: The Main-Class specified does not exist within the jar. It may not be executable as expected. A gen-class directive may be missing in the namespace which contains the main method.
20:04technomancyoh, this is lein-ring, not lein uberjar
20:04vermaError: Could not find or load main class wtx_slack.handler.main
20:04vermaoh
20:07vermatechnomancy, is there a way around this to get a jar?
20:08technomancyI've tested lein uberjar
20:08technomancyI don't know about lein-ring; I've never used it
20:10vermatechnomancy, ok, thanks for your help
21:29sherhello, quick clojure question
21:31sherry'allo, quick clojure q
21:37kenrestivothat's pretty quick.
21:42kenrestivoi'm trying to decide which of the component frameworks to use. so far there is trapperkeeper, system, frodo, and leaven to evaluate. any others i've missed?
21:47sherryhi, quick clj question
21:48sherry??
21:48lazybotsherry: What are you, crazy? Of course not!
21:48clojurebotBOT FIGHT!!!!!111
21:49sherryhullo? quick clojure q
21:49kenrestivo /ignore
21:49sherryhow come people who use clojure a such pussies compared to python programmers?
21:51rpaulo_doh
21:52sherryhullo
21:53justin_smithkenrestivo: what about stuart sierra's component library?
21:53kenrestivoall of these use it, AFAICT. they're built around it
21:54justin_smithahh, OK, I did not realize
21:54kenrestivomaybe i should write my own. then there will be 5