0:00 gfredericks: 1) your call to print is causing things to be printed (a side effect)
0:00 y3di: im gettin the same error that this guy had: https://
0:00 gfredericks: 2) print is returning nil, and those nils are being collected into a list which is the return value of the for expression; that list of nils is being printed at the repl because the repl prints the return value of the expression you give it
0:01 so two things are printed: "0123" and "(nil nil nil nil)"
0:01 and they're somewhat interleaved in the output
0:01 SrPx: actually
0:02 if that was true then I would get the output "0123 (nil nil nil nil)". but I'm getting the output "(0123 nil nil nil nil)"
0:02 how is the 1234 getting inside the parenthesis
0:02 gfredericks: welp
0:02 for is lazy
0:02 it returns immediately with a lazy seq
0:02 the repl say "oh I have a seq; that means I need to print an open paren and the print the contents"
0:03 so it prints the open paren and then proceeds to read the contents of the seq
0:03 which causes the side effects
0:03 you might expect (0nil 1nil 2nil 3nil) or something like that
0:03 ,(for [a '[0 1 2 3]] (print a))
0:03 clojurebot: (0123nil nil nil nil)
0:03 gfredericks: ,(for [a '(0 1 2 3)] (print a))
0:03 clojurebot: (01nil 2nil 3nil nil)
0:03 gfredericks: ah like that ^
0:04 the reason you don't get something more interleaved like that, and instead get the whole "0123" up front is because some seqs are chunked for optimization
0:04 so when you request the first thing, the first 32 things are computed. or 4 in this case since there are only 4.
0:04 SrPx: wow
0:04 gfredericks: this whole thing can be avoided if
0:04 SrPx: ,(for [a '[0 1 2 3]] (print a))
0:04 clojurebot: (0123nil nil nil nil)
0:05 gfredericks: you don't mix laziness with side effects
0:05 SrPx: ,(for [a '[0 1 2 3]] (print a))
0:05 clojurebot: (0123nil nil nil nil)
0:05 SrPx: ,(for [a '[0 1 2 3]] (print a))
0:05 clojurebot: (0123nil nil nil nil)
0:05 SrPx: wat
0:05 gfredericks: for is lazy and print is a side effect
0:05 doseq is good for side effects
0:05 SrPx: how did you manage to get that different output
0:05 gfredericks: ,(doseq [a (range 4)] (print a))
0:05 clojurebot: 0123
0:05 gfredericks: SrPx: using a list instead of a vector
0:05 SrPx: oh I see
0:05 gfredericks: vectors are chunked, lists are not
0:05 apparently
0:06 SrPx: ,(for [a '(0 1 2 3)] (print a))
0:06 clojurebot: (01nil 2nil 3nil nil)
0:06 gfredericks: you got chunked output originally because range is also chunked
0:06 SrPx: ,(for [a '(0 1 2 3)] (print a))
0:06 clojurebot: (01nil 2nil 3nil nil)
0:06 gfredericks: ,(for [a (take 4 (iterate inc 0))] (print a))
0:06 clojurebot: (01nil 2nil 3nil nil)
0:06 gfredericks: ^ that's another way to avoid chunking
0:06 SrPx: hm
0:07 gfredericks: 99% of the time you don't have to think about these things
0:07 SrPx: anyway
0:07 for generates a list
0:07 gfredericks: yep
0:07 SrPx: would be more to a list comprehension on python than python's for itself right
0:07 gfredericks: correct
0:07 SrPx: (=
0:08 very cool.
0:08 gfredericks: so the second question was about a succincter syntax for function composition?
0:09 SrPx: I dont know the word succincter but well, just asking if some syntax sugars are possible
0:10 gfredericks: with macros most sugars are possible, within a couple constraints
0:10 1) you still have to use s-expressions -- i.e., only what the clojure reader accepts
0:11 2) macros have to be called as a list, i.e. (macro-name ...other-things...)
0:11 SrPx: so I definitely cant make something like (+ 3*2 2) >> 8
0:11 (not that I want that, just wondering)
0:11 gfredericks: per constraint 2, you could arrange that IF that expression were wrapped in a macro that was managing it for you
0:11 well
0:12 constraint 1 will probably say that 3*2 is unreadable
0:12 but (+ 3 * 2 2) should be possible
0:12 ,(read-string "3*2")
0:12 clojurebot: #<NumberFormatException java.lang.NumberFormatException: Invalid number: 3*2>
0:12 SrPx: gfredericks: should it?
0:13 gfredericks: SrPx: if it was wrapped in a macro; e.g. (with-funny-syntax (+ 3 * 2 2))
0:13 SrPx: gfredericks: how? + is not a macro so... ?
0:13 gfredericks: or I suppose you could also define a macro called +
0:13 different tradeoffs in each case
0:18 bhenry: has anyone else run into this? http://
0:18 i can't figure out where my code is making that happen.
0:19 gfredericks: bhenry: that's interesting looking
0:20 bhenry: you have an re-matches in your code somewhere?
0:20 bhenry: nope!
0:20 it must be used in ibdknox's remote stuff with his fetch library
0:21 gfredericks: it looks like something that could get compiled from (let [[x y z] (re-matches ...)] ...)
0:21 but in clojure when re-matches returns nil then it should just bind x y and z to nil
0:21 rather than crash
0:21 I can't imagine cljs behaving differently
0:22 surely someone would have noticed by now :)
0:22 but can't say more than that without seeing the source for that line
0:22 and I'm going to bed anyhow
0:22 * gfredericks goes to bed
3:04 michaelr525: 2.5 hours of full channel sleep
4:54 4.5 hours of full channel sleep
4:54 Erika_Mustermann: hush
5:52 muhoo: zzzzz
5:52 this has been a much less chatty channel in recent months than it used to be
5:52 not sure tht's a bad thing tho
5:52 * muhoo sleeps
6:00 michaelr525: muhoo: if you want to sleep, sleep! don't talk!
6:24 bartj: hello, can someone please have a look at this tiny example of multimethods: http://
6:24 antares_: clojurebot: anyone
6:24 clojurebot: Just a heads up, you're more likely to get some help if you ask the question you really want the answer to, instead of "does anyone ..."
6:25 bartj: I am not sure why the multimethod is not getting executed. Instead it throws the error: java.lang.IllegalArgumentException: No method in multimethod 'test' for dispatch value: true (NO_SOURCE_FILE:0)
6:27 antares_: bartj: because you defined implementations for [true] and [false]
6:27 not true and false
6:27 2nd argument to defmethod is an exact value, not a vector: https://
6:28 bartj: ok, I think you mean the first argument?
6:29 because when I do this: (defmethod mtest true [_] (println "hello"))
6:29 (defmethod mtest false [_] (println "world"))
6:29 it works
6:29 antares_: yes, that's the 2nd argument
6:29 Guest52069: hi
6:30 antares_: bartj: so it is [name of multimethod] [dispatch value] [vector of args] [body]
6:31 bartj: antares_, thank you very much!
6:31 antares_: bartj: no problem
7:22 gtuckerkellogg: i just upgraded to 1.4, and now clojure-jack-in fails :(
7:23 anyone else seen this: "error in process filter: slime-require: Assertion failed: (keywordp module)"
7:23 bhenry: gtuckerkellogg: did you also upgrade lein-swank?
7:24 gtuckerkellogg: hmm
7:25 bhenry, you mean swank-clojure?
7:26 bhenry: gtuckerkellogg: yes that's exactly what i mean, sorry
7:27 * gtuckerkellogg runs off to check his installs
7:31 gtuckerkellogg: i seem to be using lein-swank 1.4.4, but lein 1.7.1
7:31 antares_: gtuckerkellogg: I have lein-swank 1.4.3 here and it works great with 1.3 and 1.4 codebases
7:31 I use lein2, though
7:31 for everything
7:31 gtuckerkellogg: maybe I should upgrade
7:32 to lein2
8:32 espeed: what's the recommended Thrift library?
8:39 dfgdfgdfg: am planning to do SICP in the next couple of months..would it be advisable to use clojure instead of scheme?
8:40 michaelr525: dfgdfgdfg: dfgdfgfhgdfgdg
8:40 dfgdfgdfg: michaelr525: I cannot decipher
8:42 antares_: dfgdfgdfg: yes
8:42 dfgdfgdfg: antares_: alright, I am going to give it a shot
8:42 antares_: dfgdfgdfg: there is nothing wrong with scheme but clojure has many nice aspects about it and some traditional Lisp baggage that was dropped (for good)
8:43 dfgdfgdfg: antares_: cool, I might even be able to do something with it at work :)
8:45 antares_: dfgdfgdfg: right :)
9:15 samrat: ok, so i've downloaded this repo https://
9:16 also, i already have lein installed
9:16 can anyone help me
9:18 antares_: project.clj has a comment that says there are unit tests
9:18 so, lein test
9:20 michaelr525: samrat: you can 'lein repl' and then '(load "file.clj")' and then you can run any of the functions from that file
9:21 samrat: michaelr525: thanks, i'll try it
10:02 tenso: Hi, this gives me an error in slime / swank:
10:02 (do (println "LOG: Computing...")
10:02 (+ 1 1))
10:02 sry
10:03 it makes slime-repl print "; Evaluation aborted."
10:04 Vinzent: tenso, that's all? No buffer with stacktrace?
10:09 tenso: Huh, the error disappeared after I restarted Emacs
10:10 xeqi: I've had that occasionally, when I restart swank it disappears
10:10 Vinzent: you probably sent something BAD before :)
10:10 tenso: weird, it might be I still had a stacktrace open in the background
10:29 jhowarth: Is there a keybind in emacs paredit mode for swapping a s-expression's surrounding character? e.g. change ( to [?
10:33 AimHere: Unlikely, since paredit is really for all lisps, and users of not-Clojure lisps have no need of brackets that aren't your traditional rounded parentheses
10:33 It's the sort of thing you'd write your own binding for if you had a pressing need for it
10:37 jhowarth: AimHere:
10:37 Thanks
10:43 y3di: getting swank-clojure on windows is feeling impossible, sigh
10:43 Scorchin: What are the best "introduction to clojure" lightning talks (10-15 min) out there? Bonus points if you can provide a link to view/download a video.
10:48 nonrecursive: Scorchin: this is a good talk but it's an hour and ten minutesL http://
10:48 Scorchin: nonrecursive: cool, thanks!
10:49 nonrecursive: np
10:49 Just put my first noir site on heroku :) :)
10:57 jhowarth: grats!
10:57 Hoping I can do the same this weekend :D
10:58 Frozenlo`: Why on Heroku VS your own machine?
10:59 jhowarth: I actually was more hoping to get my first noir site done this weekend. Hadn't thought about hosting.
10:59 heroku is easier initially to get setup
11:36 bartj: ,(+ 18.99 1.90)
11:36 clojurebot: 20.889999999999997
11:37 bartj: why is the above result not simply 20.89
11:37 how can I get clojure to output: 20.89 ?
11:37 AimHere: Because you're using floating point numbers, which are necessarily inaccurate
11:38 ,(+ 1899/100 19/10)
11:38 clojurebot: 2089/100
11:38 AimHere: You could try rounding the numbers somehow
11:38 zomg: wut, does 1/2 to mean 0.5 work?
11:38 Neat
11:39 AimHere: Well clojure does support rationals
11:39 bartj, if you want it as a String, eventually, you could use format
11:39 ,(format "%.2f" (+ 18.99 1.90))
11:39 clojurebot: "20.89"
11:39 zomg: AimHere: well a lot of languages do but first time I see that syntax for it :)
11:42 bartj: , (+ (Double/parseDouble "18.99") (Double/parseDouble "1.90"))
11:42 clojurebot: 20.889999999999997
11:42 bartj: I tried using double instead of float but, still the precision does not seem enough
11:42 gfredericks: ,(let [third (double 1/3)] (+ third third third))
11:42 clojurebot: 1.0
11:42 gfredericks: ^ why does that happen?
11:43 bartj: if you don't like floating point spookiness, use rationals
11:43 it's not too hard to write an exact function that outputs a rational in decimal format to any precision you like
11:44 AimHere: Trouble is, you see, bartj, floating point numbers are always going to have artifacts of that nature. You could write a dinky little function to round the function to the nth significant figure, if there isn't one pinched from Java in Math/foo or whatever
11:48 bartj: AimHere, gfredericks thanks!
11:49 gfredericks: ,(first (drop-while #(= 1.0 (apply + (repeat % (double (/ 1 %))))) (drop 2 (range))))
11:49 clojurebot: 6
11:49 gfredericks: ,(let [x 1/6] (+ x x x x x x))
11:49 clojurebot: 1N
11:50 gfredericks: ,(let [x (double 1/6)] (+ x x x x x x))
11:50 clojurebot: 1.0000000000000002
11:50 gfredericks: I still don't understand why 1/3 and 1/5 escape
11:51 kaoD: gfredericks, what do you mean escape?
11:52 gfredericks: kaoD: why is (+ 1/3 1/3 1/3) equal to 1.0 in floating point addition?
11:52 (double 1/3) must be rounded either up or down
11:52 so it stands to reason that the sum should be either greater or less than 1.0
11:53 it's as if there's some sort of trivial exception logic built in to the floating point ALU
11:53 mmarczyk: ,(+ 0.3333333333333333333333333333333333333333333333333 0.33333333333333333333333333333333333333333 0.33333333333333333333333333333333333333333333)
11:53 clojurebot: 1.0
11:54 gfredericks: or else the software is silently rounding things that look really close to other things
11:54 but that's disturbing as well
11:54 * gfredericks tries it in ruby
11:56 gfredericks: ruby has the same threshold (6 breaks, 3 and 5 don't)
11:56 but stranger, the result for 6 it still prints as "1.0" despite reporting that it doesn't equal 1.0
11:56 mmarczyk: huh?
11:57 kaoD: gfredericks, I guess rounding is right there
11:57 mmarczyk: irb says 0.333... + 0.333... + 0.333... == 1.0
11:57 gfredericks: x=1.0/6;y=x+x+x+x+x+x;[y.to_s,y==1.0]
11:57 mmarczyk: oh, for 6
11:57 bartj: gfredericks, you are very curious
11:57 kaoD: ,(float 1/3)
11:57 clojurebot: 0.33333334
11:57 mmarczyk: well, nothing suspect about this
11:57 kaoD: ,(* 3 0.33333334)
11:57 clojurebot: 1.0000000199999999
11:58 mmarczyk: an extra digit of precision appears "to the left", so some precision might be lost "to the right"
11:58 gfredericks: mmarczyk: about what?
11:58 kaoD: ,(float (* 3 0.33333334))
11:58 clojurebot: 1.0
11:58 kaoD: see?
11:58 it's just lucky about the rounding error
11:58 gfredericks: mmarczyk: what extra digit of precision?
11:59 mmarczyk: gfredericks: just before the decimal point in our representation of choice
11:59 gfredericks: 101 vs 110 both have 3 digits
11:59 whence the difference between 5 and 6?
11:59 mmarczyk: what kaoD said
12:00 kaoD: floating point representation is quite different from binary
12:00 gfredericks: well they're inverted so 101 vs 110 doesn't apply I guess
12:00 kaoD: see IEEE754
12:00 gfredericks: kaoD: I'm familiar with it
12:00 kaoD: (double 1/3) must be either slightly less or greater than the ideal 1/3, right?
12:00 mmarczyk: you could draw diagrams of ieee 754 doubles and do the calculations by hand to check :-)
12:01 kaoD: let's see
12:01 ,(double 1/3)
12:01 clojurebot: 0.3333333333333333
12:01 kaoD: ,(* 3 (double 1/3))
12:01 clojurebot: 1.0
12:01 kaoD: you don't see the rounding error really
12:01 you can see it in float (using double)
12:01 but double is the max representation
12:01 mmarczyk: that doesn't mean that when you add three of them you won't get 1.0
12:01 gfredericks: why not?
12:02 oh hmmm maybe I can imagine
12:02 mmarczyk: since the "ideal" result of adding three copies of the double closest to 1/3 might turn out to be the double closest to 1.0
12:02 that is, 1.0
12:02 gfredericks: so perhaps it is larger by a slight amount but that amount gets lopped off?
12:02 kaoD: gfredericks, that's it
12:02 gfredericks: okay, I can buy that
12:02 kaoD: I insist: it's easier to se in float because you can use double to see the actual rounding error
12:02 but it happens in double too
12:03 mmarczyk: I mean, might turn out to be closest to the double closets to 1.0 :-P
12:03 kaoD: and not only that, most FPUs have extra bits of precision
12:03 mmarczyk: closest
12:03 gfredericks: ,(first (drop-while #(= 1.0 (apply + (repeat % (float (/ 1 %))))) (drop 2 (range))))
12:03 clojurebot: 3
12:03 kaoD: and once that bit's trimmed, there's an extra rounding error there too
12:03 (which luckily turns 1.3*3 into 1.0)
12:04 gfredericks: ,(take 10 (remove #(= 1.0 (apply + (repeat % (float (/ 1 %))))) (drop 2 (range))))
12:04 clojurebot: (3 5 6 7 9 ...)
12:04 kaoD: in fact, think about the internal representation
12:04 the implied 1 bit
12:04 and a lot of zeroes
12:04 (in the mantissa, of course)
12:04 gfredericks: of course
12:04 kaoD: if, after rounding, you lose all the ones, it will be rounded to 1.0
12:05 gfredericks: so for 1/6, too much error is accumulated
12:05 kaoD: no
12:05 the error is at the end
12:05 once the floating point value is truncated
12:05 as I said, most FPUs have extra bits
12:06 and it might be truncated only at the end
12:06 y3di: hm, i can't seem to find clojure-mode in the package list for emacs, does that mean i might already have it installed
12:06 kaoD: y3di, nope, that means you oughta add marmalade to your package list
12:07 see the slime-clojure (or swank-clojure, not sure) README.md at their GitHub repo
12:07 gotta go, cya!
12:09 rlb: ...and with x86 you those extra bits can be confusing if you forget they're there. gcc has some options to control their use.
12:10 y3di: i followed a tutorial, and this is in my init.el file: (add-to-list 'load-path "~/.emacs.d/")
12:10 (require 'clojure-mode)
12:10 i assume this may mean i already have clojure-mode?
12:11 and i installed swank-clojure through lein
12:11 so i think i should be good to go
12:13 hm but doing m-x swank/slime shows no match
12:13 m-x clojure-jack-in works however
12:17 Vinzent: y3di, well you also need slime, slime-repl and swank-clojure in your emacs
12:20 y3di: hm, I installed swank-clojure through lein
12:20 im having trouble figuring out how ti install slime/slime-repl/swank-clojure
12:20 reading the swank readme, it says to get marmalade
13:08 SrPx: how can I see a list of variables on local namespace?
13:19 jhowarth: y3di: I recently setup slime so I might be able to help. Did you end up upgrading to emacs 24?
13:24 kaoD: y3di, as I said, you've got to add the Marmalade package repositories
13:24 see the README.md of related projects at GitHub, it's there somewhere
13:25 you might need Emacs snapshot, if you're not using it already
13:25 and make sure you just add clojure-mode and paredit
13:25 don't install anything else, clojure-mode takes care of SLIME for you
13:25 (just invoke clojure-jack-in and it'll download and install everything)
13:26 and don't even try clojure starter kit, it didn't work very well for me
14:01 Rakin05: hi guys. i'm a vimmer at heart and found my love for clojure. i downloaded VimClojure and installed it. now i have the question if there is any syntaxchecker for clojure that can work with syntastic?
14:36 y3di: kaoD, thanks, imma pm you
14:45 kaoD: y3di, answered your pm, not sure if you've read it
14:58 Scorchin: what's the easiest way to convert a ByteArrayInputStream into clojure string?
14:58 *into a clojure string
14:59 S11001001: ,(doc slurp)
14:59 clojurebot: "([f & opts]); Opens a reader on f and reads all its contents, returning a string. See clojure.java.io/reader for a complete list of supported arguments."
14:59 S11001001: ^^ Scorchin
15:01 Scorchin: S11001001: thanks
15:04 shawnlewis: Is there a way to specify contrib.datalog as a dependency in leiningen, given that contrib is gone and datalog didn't move?
15:04 (with clojure 1.3)
15:04 S11001001: no; put it in your own source under a different namespace, or offer to maintain it
15:05 shawnlewis: S11001001: word, thanks
15:06 S11001001: you could complain to jstraszheim about it, but I'm not sure that will work
15:08 shawnlewis: S11001001: well… no complaint really. I was just wondering if I was right that its gone away.
15:12 jicksta: Can anyone explain why doing (take 5 (cycle (range 6)) in the REPL would hang?
15:13 raek: jicksta: the repl waits for one more closing parenthesis
15:14 jicksta: Haha, a much stupider problem that I expected. I was getting problems with the (cycle (range 6)) outputting an infinite sequence just before this so I thought it was the same problem. Thanks :)
15:22 Rakin05: is there anything like "~ compile" from sbt/scala in leiningen?
15:24 S11001001: Rakin05: no; compilation doesn't take long, and doesn't really help you code anyway
15:25 Rakin05: S11001001: what about live error checking? is there anything?
15:25 S11001001: Rakin05: also, in clj-land, we code by installing new source into a running program, not compiler loops
15:25 Rakin05: I make edits and press C-c C-l to load my source changes into the running program
15:26 Rakin05: S11001001: You use Emacs?
15:26 S11001001: yes
15:26 for scala too
15:27 Rakin05: S11001001: tried emacs...my pinky still hurts
15:27 S11001001: swap your caps lock and control keys
15:27 or just replace caps lock, who needs that
15:27 I guess there is also a vimclojure thing if you're into that, but I don't care about vim usage
15:28 and some IDE things, but I don't care about those either
15:28 Rakin05: S11001001: does'nt that mean that i write Uppercase and Lowercase randomly?
15:28 S11001001: uh, what
15:28 I am fairly sure they all provide live loading into a running program
15:28 so, I replaced caps lock with control
15:28 when I hold down caps lock, it just does what ctrl does
15:29 even the vim people I know do this
15:29 rlb: (and it's much better)
15:29 Rakin05: Ohhh...okay...i understand. you mean via system settings
15:30 bartj: hello, was the "run/test" task added to leningen after version 1.1 ?
15:30 i can't seem to find them in version 1.1
15:30 S11001001: 1.1?!?!
15:32 bartj: yes :)
15:32 S11001001: bartj: can you not upgrade for some reason?
15:34 Rakin05: you may like to peruse my intro to clojure for scalawags at https://
15:34 in progress :)
15:35 SrPx: How do you guys organize your project? For example, in C++ it would be .cpp files for class implementation, .h files for header implementation, with the old OO design of classes and methods...
15:35 How are clojure projects organized?
15:35 Rakin05: S11001001: The idea with Caps Lock Ctrl switching is great. thanks for that hint
15:36 uvtc: SrPx, `lein new` gets you off to a good start.
15:36 SrPx, The newest version will also create a "doc" dir for you and start you off with, I think, an "intro.md" file.
15:37 S11001001: I assume due to github bias?
15:37 SrPx: lein new,? let me see
15:38 uvtc: S11001001, may as well settle on a standard, IMO. .md files in a "doc" directory seems to work fine.
15:38 Which brings me to...
15:38 S11001001: hmm.
15:39 uvtc: I've been working some more on my project to centralize project docs. I added a way to create examples for a given project, similar to how there's examples at clojuredocs.
15:39 The project is called "The Alcove" and it's at http://
15:40 I'll announce it on the ML, but thought I'd post here first, and maybe get some feedback and also suggestions on projects to add.
15:40 It works now for projects without a "doc" directory,
15:40 and also even for projects without a README.md file.
15:40 bartj: SrPx, https://
15:42 jhowarth: Does Korma guard against sql injection?
15:44 uvtc: S11001001, regarding creating docs for a project, I don't think it's necessarily a github bias, though github does use markdown all over the place. But so do sites like reddit and various blog commenting systems. And marginalia uses it too. And it's the nicest of the bunch (of markup formats that I've used). And pretty much everyone already knows it or can learn the basics in a few minutes.
15:45 S11001001: alright, good
15:46 uvtc: What other projects should I add to the alcove? For what projects do you think others might be interested in adding examples?
15:49 S11001001: uvtc: slingshot, tools.macro, and algo.monads are good example fodder
15:51 uvtc: S11001001: Some of those are contrib. I think contrib docs/examples are at clojuredocs, correct?
15:51 wingy: how is closjurescript doing in async programming?
15:51 S11001001: I don't know
15:52 uvtc: S11001001, Looks like they are. For example, monads: http://
15:52 S11001001: that would be ancient history
15:53 your chance to grab onto the new hotness while clojuredocs is stuck with the old and busted
15:54 uvtc: S11001001, added slingshot. Thanks.
15:55 S11001001, I actually emailed clojuredocs to see about having the alcove hosted there. Have not heard back yet.
15:55 S11001001, I mean, Zachary.
15:56 SrPx: seriously what is that
15:56 o.o
15:56 what do you use instead of classes, just this?
15:57 S11001001: SrPx: that what?
16:01 SrPx: lein
16:01 S11001001: lein is a build tool
16:01 it knows how to create project trees and set up a REPL with your code and libraries you're using
16:02 if you mean organization at the source level, clojure programs are organized mostly as functions in namespaces
16:12 technomancy: rlb: did you say you're working on getting emacs 24 into Debian?
16:28 bartj: is the error: "Exception in thread "main" java.lang.Exception: Unable to resolve symbol: defrecord in this context" because of an older clojure version ?
16:30 S11001001: Yes
16:31 still wondering why you're stuck with lein 1.1
16:32 bartj: S11001001, I've upgraded
16:32 Leiningen 2.0.0-preview6 on Java 1.6.0_22 Java HotSpot(TM) Client VM
16:32 S11001001: ok, so your clojure version in project.clj...
16:38 clj_newb_024587: I have a clojure web app currently setup using ring, compojure, friend, clojurescript. Now, I want to add ssl support to it. What is the easiest way to do this?
16:39 weavejester: clj_newb_024587: Usually it's easiest to proxy from nginx or something similar.
16:39 clj_newb_024587: I am using ubuntu 12.04. I have no exprience setting up ssl, though I am familiar with crypto. Which one do I have the smallest chance of fucking up?
16:39 weavejester: clj_newb_024587: The Ring Jetty adapter does support SSL, but it's often useful to separate it out into a proxy.
16:40 clj_newb_024587: nginx SSL is fairly straightforward.
16:40 clj_newb_024587: weavejester: this is very low bandwidth, i.e. I have a dual 8GB machine, and there's be a max of 3 concurrent users at any time.
16:40 So I can set this all up using just ring-jetty, without nginx?
16:41 weavejester: clj_newb_024587: It's often useful to proxy a web server through a proxy nginx as a matter of course. That way you can bind nginx to port 80 as root, but have your web app run as an unpriviledged user.
16:41 clj_newb_024587: right now, I have an iptables rule forwarding port 80 to port 8080
16:42 but it sounds like I should learn about ngninx
16:43 weavejester: clj_newb_024587: I think nginx would be my choice, whether I was writing a web app in Clojure or Ruby or something else.
16:43 clj_newb_024587: weavejester: can you recommend something better than http://
16:44 weavejester: clj_newb_024587: Let me see if I can find something...
16:45 clj_newb_024587: weavejester: one more thing; how do I get a signed ssl certificate?
16:45 do I just go and throw my wallet at godaddy ?
16:45 arrdem: clj_newb_024587: that'll work.... but I would look around some first
16:46 godaddy is not what you would call cheap.
16:46 clj_newb_024587: arrdem: what would you use?
16:46 arrdem: clj_newb_024587: honestly? no idea. I have never worked with SSL/HTTPS certs. I've just had sub-optiomal experiences with GDDY
16:49 clj_newb_024587: http://
16:49 weavejester: clj_newb_024587: Try looking at this for examples of proxying: https://
16:50 clj_newb_024587: It's actually not that complex… You just need to dump one file in a directory, and then run one command, if memory serves.
16:50 clj_newb_024587: it's like NP-complete; an expoenntial amount of work for a short solution
16:57 weavejester: clj_newb_024587: This file should be all you need to proxy (HTTP at least): https://
16:57 clj_newb_024587: intersting you merged in proxy.conf
16:57 (I was just working through the tutorial)
16:58 weavejester: clj_newb_024587: You just dump that in /etc/nginx/available, and sym-link ot to /etc/nginx/enabled and then reload
16:58 clj_newb_024587: so I have this weird situation right now, where (1) ssh-ed into my server, "lynx localhost:80" works (it gets me localhost:8080's content); however, from my laptop, going to remote-addr:80 ... it hangs
16:58 weavejester: For SSL, add another server to listen on 443
16:59 clj_newb_024587: crap ; I think I just nuked my ssh conections
17:00 okay; my current problems = firewall problem; not nginx problem
17:00 weavejester: thanks for help
17:00 weavejester: clj_newb_024587: np
17:01 clj_newb_024587: weavejester: one more dumb question; I acutally don't need to change anythign on the ring/compojre/clojure side right? i.e. I can just redirect 443 to port 8080, and not modify my clojure code, and everything will wor as is, since nginx handles everything?
17:02 weavejester: clj_newb_024587: Right
17:03 clj_newb_024587: If you wanted to work with client SSL certificates, you'd have to have Jetty handle the SSL, but client SSL certs are rarely used
17:03 clj_newb_024587: Once nginx is setup, you can use any back end web server and not have to worry about SSL anymore
17:03 clj_newb_024587: I like this separation of concerns.
17:04 weavejester: clj_newb_024587: Another benefit is that you can configure nginx to wait if the web app is down, so you can restart your app with new code, and users wouldn't see any downtime - their connections would just be delayed for a few seconds while the app restarts.
17:05 clj_newb_024587: weavejester: oh boy, I'm not sure if that is possible with jvm start up times
17:07 weavejester: clj_newb_024587: The JVM only takes a few seconds to boot, right?
17:07 clj_newb_024587: Alternatively, you could have two servers, and restart each separately, so you always have one server up.
17:11 bartj: in clojure.test is there a diff b/w error and failure ?
17:13 cky: bartj: Yes. A failure means your code has a bug. An error means some unexpected error occurred, which means your code may or may not be buggy.
17:13 xeqi: did it throw an exception or fail an (is ..)
17:14 bartj: i purposefully changed an expected test-case which it showed as "failure"
17:14 clj_newb_09824: weavejester: okay, after firewall fixing, port 443 forwarding works now
17:14 so correct me if i"mwrong all I need now is to generate the fiels cert.pem and cert.key
17:14 bartj: xeqi, failure
17:15 is it possible to write a multimethod for this scenario:
17:15 input is a string
17:16 weavejester: clj_newb_09824: I can never remember the exact steps, but essentially a cert is a public key plus metadata about the site (domain name, owner, etc.). You need to generate the key-pair, generate the cert, then upload the cert to a cert authority to sign it.
17:16 bartj: if input contains the string "abc" return 1, if input contains the string "xyz" return 2, input is "pqr" return 3
17:16 weavejester: clj_newb_09824: Then nginx needs to have a file with the signed cert, and the private key.
17:16 bartj: i think it is not possible because the dispatch value has to be a *constant*
17:19 Raynes: mmarczyk: The problem we were seeing in refheap was that mongo-session had a transitive dependency on an ancient version of the java mongo driver. Updating it fixed that issue.
17:20 bartj: That would require predicate dispatch which Clojure's multimethods do not support.
17:26 mmarczyk: Also, this is ridiculously slow.
17:26 :(
17:26 20 seconds to highlight a 655 line java file.
17:27 bartj: Raynes, I meant something like this: http://
17:28 do you think that implementation is wrong, for the problem I posted above?
17:29 Raynes: bartj: That looks about right. (nth foo 1) is just (second foo) though.
17:29 &(nth [1 2 3] 1)
17:29 Damn bot.
17:29 bartj: but, you said it wasn't possible ?
17:29 so I was wondering...
17:30 Raynes: I thought you were asking for something much more general.
17:30 It sounded like you wanted to execute a different function for each method implementation until one matched.
17:46 clj_newb_09824: hmm
17:46 where can I get my *.csr file signed?
17:49 rlb: technomancy: yes, should be soonish (next few days I hope).
17:50 cky: clj_newb_09824: Any certificate authority will do that for you for some $$$.
18:00 technomancy: rlb: godspeed =)
18:01 rlb: thx -- nearly finished; the dfsg split and debian "multiple flavor" infrastructure just takes some time.
18:11 hcliff: hey, anyone know how to bring up the chrome debugger from the clojurescript reply? (js* "debugger") isn't working
18:13 brehaut: hcliff: are you wanting to just make it appear, or to break at a certain point?
18:28 jlewis: do the runtime characteristics of assocEx differ from assoc in IPersistentHashMap?
18:33 gfredericks: I was wondering what assocEx was the other day
18:33 is that assoc where you know the key to be already present?
18:33 jlewis: well, i think what it does is throw an exception immediately if the key already exists
18:33 but... if that's the case, what does assoc do when the key already exists?
18:36 oh, i see
18:36 assoc replaces the value
18:36 assocEx blows up
19:11 ibdknox: dnolen: have you run into this showing up with master: clojure.lang.PersistentHashMap.create.call(null, b)
19:11 dnolen: it's appearing in cljs.core.js->clj and blowing up
19:34 iwillig: does anyone know if i can call a compojure application with a ring request ?
19:35 weavejester: iwillig: Yes; Compojure is built on top of Ring.
19:35 iwillig: cool
19:35 weavejester: iwillig: Compojure's effectively a routing library for Ring
19:36 Almost every function in Compojure returns a Ring handler
19:36 iwillig: so if i have an compojure app... I should be able to call (app (request :get "/"))
19:36 mmarczyk: ibdknox: do you have an example of code where this happens?
19:36 weavejester: iwillig: Right
19:36 iwillig: where request is from request ring-mock
19:36 cool weavejester thanks
19:36 ibdknox: mmarczyk: it's in cljs.core
19:37 weavejester: iwillig: A compojure app = a ring handler
19:37 mmarczyk: ibdknox: I mean, a call to js->clj which is guaranteed to blow up
19:37 I've never seen this happen
19:37 iwillig: lovely thank weavejester
19:38 ibdknox: mmarczyk: here's what is in my output: https://
19:38 mmarczyk: any call to js->clj will trigger that path
19:39 mmarczyk: whoa
19:39 iwillig: weavejester: when i try (app (request :get "/"))
19:39 i keep on getting an key must be an integer error
19:39 ibdknox: mmarczyk: yeah, I have no idea what's going on
19:39 mmarczyk: makes no sense to me
19:40 weavejester: iwillig: It sounds like there's a problem in your app
19:40 iwillig: okay
19:40 ibdknox: mmarczyk: this started happening after I picked up the analyzer split changes
19:40 mmarczyk: I was a little behind though, so it could be anything since then
19:40 iwillig: shoot silly error sorry to bug you
19:44 gfredericks: there is no cljs.core/format?
19:44 I guess because it'd have to be implemented from scratch instead of deferring to jvm?
19:45 ibdknox: gfredericks: correct
19:45 gfredericks: is that a wanted feature?
19:46 dnolen: ibdknox: I just looked at my output, I don't see this. Did you try cleaning everything?
19:46 ibdknox: dnolen: yeah
19:46 dnolen: I'll recheckout
19:46 gfredericks: I'd love it :D
19:46 gfredericks: is there a jira ticket for it?
19:46 dnolen: gfredericks: no
19:46 gfredericks: dnolen: shall I?
19:46 dnolen: gfredericks: please do.
19:46 gfredericks: or are there design questions?
19:46 mmarczyk: ibdknox: yeah, I don't have this in my compiled output either
19:46 gfredericks: on it
19:47 ibdknox: dnolen: mmarczyk: I'm on 1.5, not sure if that might make a difference
19:47 mmarczyk: ibdknox: https://
19:48 dnolen: ibdknox: that looks like map destructuring is completely broken.
19:48 ibdknox: hmm ... that might, on 1.4 here. are you using 1.5 specific things?
19:48 ibdknox: yeah
19:49 mmarczyk: oh yeah
19:49 replacing clojure.jar in lib with 1.5.0-alpha1 breaks things for me
19:49 *but*
19:49 not in the same way :-P
19:49 ibdknox: lol
19:50 I'm using clojure master
19:51 dnolen: ibdknox: yeah destructuring macro changed.
19:51 gfredericks: cljs.core/format sounds like a good target for the macro-and-function pattern
19:51 dnolen: ibdknox: inline clojure.lang.PersistentHashMap/create reference in Clojure HEAD
19:51 ibdknox: which of course does not exist in CLJS.
19:51 ibdknox: dnolen: right
19:52 mmarczyk: hah
19:52 dnolen: this a pretty argument for continuing with static fields pattern even though not necessary for JS target ...
19:53 ibdknox: dnolen: suggestion? If necessary I can likely recreate my changes on 1.4 instead. If there's a straightforward path to a fix, I can work on that instead though.
19:54 mmarczyk: this is also possibly an argument in favour of bbloom 's host-specific-macro-based approach to map creation, although here I guess it wouldn't help (since any macros imported from clojure.core would still have been compiled to use clojure.core's helpers)
19:54 dnolen: mmarczyk: ibdknox: http://
19:54 ibdknox: seems like a simple patch.
19:54 mmarczyk: how was the 1.5 breakage you were seeing different from ibdknox's?
19:55 mmarczyk: dnolen: Reflection warning, cljs/analyzer.clj:234 - call to create can't be resolved.
19:55 dnolen: Reflection warning, cljs/compiler.clj:500 - call to create can't be resolved.
19:55 dnolen: and loads more with different line numbers
19:56 dnolen: compiled output looked ok at first (cursory) glance
19:56 dnolen: mmarczyk: oh right ...
19:56 mmarczyk: that's a Java class reference.
19:56 mmarczyk: yeah
19:56 freaked me out though
19:56 until I looked at the output :-P
19:57 dnolen: mmarczyk: we probably need to move destructure into core.clj macros file.
19:58 mmarczyk: dnolen: ...and possibly revisit :properties destructuring? :-)
19:58 dnolen: wouldn't that entail moving let, loop, fn, defn, defmacro (... ?) into cljs also?
19:59 not that I necessarily see a problem with that
19:59 dnolen: mmarczyk: ah ... yeah since they will be calling the wrong destructure.
20:00 mmarczyk: also, with cljs-specific macros c.l.PHM/create wouldn't be needed
20:01 dnolen: mmarczyk: yeah
20:02 mmarczyk: at some point those macros may simply need to be imported -- certainly if cljs were to become *the* Clojure compiler (w/ a JVM backend), possibly if non-JVM cross-host issues or something else of importance required cljs-specific changes
20:04 dnolen: mmarczyk: I don't think we need to move that many macros. only let and loop far as I can tell.
20:09 mmarczyk: dnolen: oh, it does look that way
20:18 was there a ticket for 93c795fe10ee5c92a36b6ec6373b3c80a31135c4 (in Clojure)?
20:18 I'd like to read the rationale
20:22 technomancy: rlb: yeah, I don't envy anyone who has to get in the middle of the dfsg and the gfdl.
20:22 I'd imagine it's something like http://
20:26 dnolen: mmarczyk: hmm I vaguely recall something
20:27 mmarczyk: dnolen: ?
20:27 gfredericks: it looks like the example test sort of uses it as a way to provide default values?
20:27 SrPx: is there any way to save REPL state?
20:27 dnolen: mmarczyk: http://
20:28 mmarczyk: dnolen: thanks!
20:29 now this really makes me see bbloom's emitter idea in a new light
20:30 bbloom: mmarczyk: :-)
20:30 mmarczyk: expanding to (unchecked-create-map ...) w/ unchecked-create-map inlined on the JVM would save as some hassle
20:30 bbloom: :-)
20:30 bbloom: thanks for the extensive reply, by the way, I'll be answering soon
20:30 bbloom: what did i miss?
20:31 mmarczyk: bbloom: I do think I came across in a more negative way than I aimed for -- I just think macro-based constant handling should happen no sooner than generic factories are in place
20:31 bbloom: cljs breaks with Clojure 1.5 because of a change to clojure.core/destructure
20:32 bbloom: which now calls clojure.lang.PersistentHashMap/create directly
20:32 bbloom: mmarczyk: ah. yes, need a generic factory function for it to call directly?
20:32 mmarczyk: bbloom: ah, also, set is comparable to vec, not vector... hash-set is the analogue of hash-map
20:32 bbloom: right
20:33 bbloom: mmarczyk: yeah, in that patch, i used set*
20:33 mmarczyk: set* ?
20:33 bbloom: mmarczyk: yeah, didn't know what else to call it to differentiate the same was as vec vs vector
20:34 mmarczyk: bbloom: ah, right
20:34 bbloom: mmarczyk: because you need the vector-version of set to work well with a macro otherwise you need to break down the form to get the tems
20:34 and the form might just be a symbol! which is no good
20:34 tems -> items
20:35 simply (defn set* [& items] (set items))
20:35 and then you can define a set* macro
20:35 probably needs a better name :-P
20:35 i guess could use hash-set directly
20:37 mmarczyk: create-$foo ?
20:38 and unchecked-create-foo for places where the standard ctor / factory objects to some kind of errors (like duplicate keys in sets/maps)
20:39 bbloom: incidentally, that PHSet/fromArray thing could be a separate patch -- should be a 100% clear gain right now, I think
20:39 imo, at any rate
20:39 bbloom: mmarczyk: ok ill look at that in a sec
20:39 mmarczyk: cool
20:54 bbloom: mmarczyk: https://
20:55 seems like a win to me :-)
20:56 mmarczyk: bbloom: hah! cool :-)
20:56 bbloom: ignore that -equiv thing on string
20:56 didn't mean to have that in there :-P
21:00 mmarczyk: dnolen: so I have a working version of cljs with destructure, let and loop in cljs.core; tests pass
21:00 dnolen: mmarczyk: great make a ticket and a patch and I'll take a look.
21:00 mmarczyk: dnolen: k, just a sec
21:01 dnolen: mmarczyk: er I mean attach patch to existing ticket :)
21:01 bbloom: mmarczyk: dnolen: http://
21:01 SrPx: Okay after playing with windows command prompt I really need an editor for the REPL
21:01 are you guys all using emacs?
21:02 leo2007: it is the only sensible option.
21:02 bbloom: mmarczyk: you mean let and loop implemented as macros? or just namespaced? or what?
21:02 mmarczyk: bbloom: I mean copy & paste + adjustments to make them work again (because some things they use are on the :refer-clojure :exclude list)
21:03 bbloom: http://
21:03 bbloom: part of cljs's struggle for independence ;-)
21:03 bbloom: mmarczyk: yup :-) hence why i keep adding missing bits and pieces from clj proper heh
21:03 mmarczyk: right
21:03 SrPx: that's one good choice
21:03 bbloom: mmarczyk: one small step at a time towards the canonical CinC ;-)
21:04 mmarczyk: I don't know of another one
21:04 bbloom: totally! :-)
21:04 SrPx: mmarczyk: I can't install it u.u
21:05 mmarczyk: (actually I do like my Vim, used it to write thousands of lines of Scheme, but Paredit put me under a spell)
21:05 SrPx: what OS?
21:05 SrPx: xp
21:05 bbloom: i'm still wed to vim… haven't tried the vimparedit thing yet
21:06 mmarczyk: bbloom: don't try the Emacs version if you want to stay faithful
21:06 SrPx: mmarczyk: is it bad?
21:07 mmarczyk: (actually I haven't tried Vim's paredit impls, but I'm told they don't implement the full range of functionality -- and I think I use most of what's available)
21:07 SrPx: oh nvm
21:07 bbloom: mmarczyk: i figure i need to try emacs&slime at some point but the last time i tried i wanted to cry b/c my vim muscle memory is very very deep. also i do *a lot* of different languages in any given coding session, so i just need my vim bindings and no vim-emulation mode will ever cut it
21:07 SrPx: anyway
21:08 mmarczyk: SrPx: hm, I'm not sure I can be much help except to say I have run Emacs on XP with no problems
21:08 SrPx: I've cloned slime, swank clojure, clojure mode... I have slime working... no idea what to do with that code, though
21:08 mmarczyk: SrPx: slime on the other hand... would you be willing to try cygwin?
21:09 SrPx: why not?
21:09 mmarczyk: bbloom: I know what you mean, Vim is absolutely the best editor
21:10 SrPx: I'm under an impression that vim doesn't matter that much for lisp
21:10 bbloom: minus vimscript… *cringe*
21:10 mmarczyk: bbloom: supposedly evil (latest vim emulator for emacs) is very good -- I must give it a try, but I'll be really surprised if it solves the problem
21:10 SrPx: All your code is small s-expressions, right?
21:10 mmarczyk: ah, vimscript doesn't come into it for me
21:10 I said "editor" :-)
21:10 bbloom: heh
21:10 mmarczyk: so the Emacs text editing experience is somewhat inferior imo
21:10 in general
21:10 bbloom: i don't know of any hardcore vim guys who have tried evil and stuck
21:10 and i know a few who tried hard
21:11 but it was a while ago
21:11 mmarczyk: certain modes offer so much on top of the basics though
21:11 bbloom: maybe i'll try it sometime
21:11 SrPx: but mmarczyk does it matter that much for clojure?
21:11 mmarczyk: plus there are fantastic emacs "apps" -- org mode etc.
21:11 magit
21:12 SrPx: )=
21:12 mmarczyk: SrPx: as mentioned above, I've written thousands of lines of scheme in Vim and I loved that experience
21:12 I switched to Emacs for a number of reasons
21:13 but for lisp editing paredit made the most difference
21:13 plus the fact that I simply came to prefer a workflow where I have hundreds of buffers in a single editor session :-P
21:13 a server running in the background, clients -- X and terminal -- coming and going...
21:13 ah, the Emacs life
21:14 anyway. there are new addons for Vim which introduce stuff like text objects useful in lisp, some subset of paredit functionality etc.
21:15 it's well worth a try
21:15 bbloom: i use the shit out of text objects in vim
21:15 gfredericks: mmarczyk: I work with a bunch of vimmy folk and they're always closing vim and CDing somewhere and opening another file in a new vim session...........it pains me to watch it
21:15 bbloom: dap baby dap all the way
21:15 mmarczyk: gfredericks: yeah :-)
21:16 bbloom: gfredericks: why is that painful? i don't do that when working on a project, but on a server editing configs? i do that non stop
21:16 mmarczyk: gfredericks: I used to open loads of files in Vim too -- with tabs, NERDtree -- but it never felt as natural as it does in Emadcs
21:16 Emacs.
21:16 gfredericks: bbloom: because they do it when working on a project
21:16 bbloom: heh
21:16 gfredericks: mmarczyk: yeah I was using nerdtree during my last few months of vim
21:16 bbloom: luckily vim starts fast :-)
21:17 mmarczyk: SrPx: but if you want slime, I think cygwin might help
21:17 gfredericks: well, I actually still use Vim a fair bit -- I'd really love it for Evil to be as good as it's made out to be
21:18 bbloom: i've even got one of those kenisis concave keyboards with the modifiers on the thumbs… people assume i'm an emacs guy :-P
21:18 mmarczyk: I was planning to give it a spin come end of June, so I guess I'll find out soon :-P
21:19 bbloom: oh cool, always wanted to touch one of those things
21:19 bbloom: mmarczyk: took about 1 week to get back up to speed a few years ago
21:19 mmarczyk: I don't believe they're stocked by any brick & mortar 'round here :-(
21:19 bbloom: mmarczyk: love this dopey thing
21:20 mmarczyk: :-)
21:20 bbloom: yeah, i ordered online
21:20 mmarczyk: I think it'd be slightly dangerous in my current situation
21:20 SrPx: no idea how to use it sigh
21:22 mmarczyk: moving around with a laptop quite a lot, I mean
21:23 the switch from a MS keyboard to the laptop keyboard was already painful, if the kinesis thing is anywhere near as good as it looks ... :-P
21:23 SrPx: cygwin?
21:24 bbloom: *cringe* @ cygwin
21:25 Hodapp: cygwin helps keep my sanity on my Windows box at work
21:26 SrPx: õo
21:26 S11001001: truth
21:28 gfredericks: mmarczyk: I never even considered being proficient at both editors simultaneously
21:28 that sounds like a recipe for confusion and frustration
21:28 ditto for qwerty and dvorak
21:29 y3di: have you guys tried out haskell? and if so, why do you like clojure better?
21:30 bbloom: gfredericks: probably pretty easily overcome. i used to think the same thing when i started doing a few different languages for a few different projects at the same time or in the same file. HOW DO I KEEP ALL THESE ESCAPE SEQUENCES RIGHT!?! but eventually you just get good at it
21:31 mmarczyk: y3di: I have, I love it
21:31 y3di: as for the why question, there are two answers
21:33 S11001001: y3di: who said I like clojure better? :?
21:33 mmarczyk: the first is that I like the Lisp style of programming best, I find Clojure's design particularly elegant etc. -- could go on
21:33 the second is Cabal
21:34 w/o the second answer I think this would be a pretty close call, I absolutely love doing stuff in Haskell when I'm not fighting the packaging facility
21:35 there's hsenv now and the Yesod thing (cabal-meta?) which I haven't tried yet, so things are getting better
21:38 SrPx: What is cabal?
21:39 mmarczyk: the blog post on cabal-meta is dated April 5, 2012 and it includes the sentence (describing the pre-cabal-meta state of affairs) "Even with all these tools, one day I found myself completely incapable of installng Yesod from source."
21:40 I still think Haskell is a marvellous language and an overall glorious achievement, but *argh*
21:40 SrPx: Haskell package manager
21:40 SrPx: well, build tool
21:41 S11001001: sort of both
21:41 mmarczyk: that's actually an acronym
21:41 S11001001: fetches deps anyway
21:41 mmarczyk: http://
21:42 with certain recently developed utilities it can be used sort of like lein
21:43 but getting the correct versions of deps resolved seems to be more of a problem
21:52 treehug: how would i go about using goog.dom.query in a clojurescript app? i got this far: https://
21:53 bbloom: treehug: hmm.. looks like you're getting errors in core, not your code
21:53 i see you're using cljsbuild, have you managed to compile an empty project at all?
21:54 treehug: yes, if i leave out the deps i have listed there it compiles. even using goog.dom.* functions if i 'require them
21:54 (that is, i remove the reference to good.dom.query from mutest.cljs)
21:54 technomancy: mmarczyk: it's funny that build nightmares are also my biggest complaint with ocaml
21:54 the general advice is "just use apt"
21:55 mmarczyk: ouch
21:56 jhowarth: Is there an equivalent in emacs for M+( that will wrap an s-exp in brackets instead?
21:56 bbloom: treehug: is that the right sep? do you want (:use [goog.dom :only [query]]))
21:57 or (:require [goog.dom.query :as query])
21:57 i think you're running into the export == module name issue
21:57 mmarczyk: jhowarth: there's no default binding, but the function is called paredit-wrap-square
21:58 bbloom: treehug: let me know if either of those work
21:58 jhowarth: mmarczyk: Thanks!
22:02 cgag: i'm messing with aleph and my code looks like this: https://
22:02 rlb: technomancy: yeah, it's unfortunate, but I understand how we got here, and at the moment, it's the situation we have.
22:03 technomancy: though I was very happy when guile dropped the non-dfsg bits.
22:03 (Running candidate 24.4+1-1 build now...)
22:05 cgag: anyone know if my that code looks reasonable?
22:06 treehug: bbloom: i tried (:require [goog.dom.query :as query]) w/ (query/query …), also (:use [goog.dom.query :only [query]) w/ (query …) and (:use [goog.dom :only [query]) w/ (query …) -- basically the same error message with only the namespace text different
22:07 bbloom: treehug: what version of cljs are you using?
22:07 treehug: or, i guess revision
22:08 ibdknox: I have very exciting news for tomorrow :)
22:09 mmarczyk: ibdknox: http://
22:09 bbloom: treehug: are you sure you have the right namespace? i think it's good.dojo.dom.query
22:09 ibdknox: mmarczyk: ah, thank you!
22:09 bbloom: treehug: http://
22:09 treehug: bbloom: interesting question… i take it that cljsbuild provided me lein-cljsbuild-compiler-0/cljs/core.cljs but i'm not sure where from
22:10 bbloom: hmm maybe there is goog.dom.query too
22:10 treehug: ok i'll try that
22:10 bbloom: is there a git repo in there? what revision is it?
22:10 mmarczyk: ibdknox: now I'm going to wonder what kind of news :-P
22:10 is tomorrow many hours away in your TZ? :-)
22:11 ibdknox: I'll be releasing the playground tomorrow :)
22:11 treehug: nothing in it, i'll try a clean & deps and see where it downloads from
22:11 bbloom: ibdknox: ah, cool.
22:11 ibdknox: I suspect there will be a sudden spike in interest for "learning clojure" materials
22:11 mmarczyk: ibdknox: oh great, now you've ruined my start-of-week productivity :-D
22:12 ibdknox: haha
22:12 bbloom: ibdknox: presumably only to kickstarter backers? or more boradly?
22:12 broadly*
22:12 ibdknox: the playground will go out to the world
22:12 mmarczyk: seriously though, can't wait to have a look :-)
22:14 gtuckerkellogg: is anyone here using clojure in with org-babel?
22:16 treehug: bbloom: looks like org/clojure/clojurescript/0.0-1236/clojurescript-0.0-1236 is downloaded by cljsbuild
22:19 i think it must be my project.clj -- even if i just have (ns mytest) and that
22:20 's all i get the same kind of error
22:20 bbloom: treehug: oh, heh, that's what i was asking about before…. like i said: you're getting errors loading stuff at the top of cljs core… you're not importing goog.string for example, but core is
22:21 pterygota: hello, anyone working with overtone in here?
22:21 treehug: bbloom: yeah sorry, i've been messing around with my project and at one point a simple empty file did compile properly…
22:22 bbloom: treehug: try to break it down to a minimal repo & the problem will hopefully become more apparent :-)
22:24 treehug: bbloom: ok https://
22:25 bbloom: i don't use cljsbuild myself, so i don't know: do you need a gclosure dep? or is that implicitly provided by leon?
22:25 lein* stupid apple auto correct
22:28 treehug: it looks like leon cljsbuild is downloading a clojurescript and a closure-library to ~/.m2/repository and then compiling a cljs.js info ./.lein-cljsbuild-compiler-0/cljs/core.js maybe my explicitly including closure-library/closure-library-thirdparty on top of the gclosure bits compiled into cljs.js conflict
22:29 bbloom: maybe. again, i don't use cljsbuild… have you tried just using query without the deps in project.clj ?
22:31 technomancy: clojurebot: leon is a good sign it's time to turn off auto-"correct"
22:31 clojurebot: c'est bon!
22:31 bbloom: leon.
22:31 xeqi: ~leon
22:31 bbloom: no? :-P
22:31 clojurebot: leon is a good sign it's time to turn off auto-"correct"
22:31 technomancy: I should write a library named after Ponce de Leon just to mess with people
22:31 bbloom: heh.
22:32 i use Textual irc which doesn't disable auto correct in it's little message box, it's pretty much the only time i ever encounter a normal cocoa text box
22:33 chrome, terminal, and vim is pretty much the only other times i type anything :-P
22:34 SrPx: https://
22:35 abp: ibdknox: Holding my breath. ;D
22:35 bbloom: SrPx: what does which part mean?
22:36 SrPx: do you have a project.clj file?
22:36 SrPx: No, I don't even know what this is?
22:36 bbloom: leon, er i mean lein
22:36 pterygota: SrPx: if you create a project with lein new projectname, you should get a directory with a project.clj in it called projectname
22:36 bbloom: SrPx: it's clojure's project system https://
22:37 treehug: bbloom: no doesn't work either - i think because clojurescript doesn't use the thirdpaty closure stuff. anyway i just discovered domina uses good.dom.query and depends on a goog.jar for it and does some magic :libs ["goog/dom/query.js"] in the project.clj. i'll experiment a bit more with that
22:37 pterygota: and in project.clj there will be a plugins section
22:37 treehug: bbloom thanks for your help and ideas
22:38 SrPx: but how can I install it? I don't have any of those package manages
22:38 managers
22:38 pterygota: just install lein by downloading it as described on that page and running it
22:57 dnolen: mmarczyk: ping
22:57 wolgo: hi
22:57 mmarczyk: dnolen: pong
22:57 dnolen: mmarczyk: see my comment on 325?
22:58 wolgo: I want to start learning clojure. Outside of writing, programs what is recommended as a decent first read for someone that has some lisp exposure and can program in other languages?
22:58 mmarczyk: dnolen: assert-args was already in cljs.core, I just moved it to the top of the file
22:59 dnolen: it's only used to validate macro args, not in the expansion
22:59 scottj: wolgo: fav book of the channel is clojurebook.com
22:59 mmarczyk: expansions
22:59 dnolen: mmarczyk: oh right, gotcha.
23:00 wolgo: okay thanks
23:00 I will be back when I have questions. You have been warned!
23:03 dnolen: mmarczyk: ibdknox: CLJS-325 resolved.
23:04 mmarczyk: great!
23:04 rlb: technomancy: probably won't upload emacs24 until at least tomorrow fwiw -- everything looks good, but I need to test the install a bit more.
23:27 technomancy: rlb: no worries; I'm on testing anyway