#clojure log - Nov 27 2011

The Joy of Clojure
Main Clojure site
Google Group
List of all logged dates

0:08 alexbaranosky: what the heck is &form ?

0:08 :)

0:08 cgray`: in what context?

0:08 alexbaranosky: I'm not sure if its a Clojure thing or a Midje code-base thing

0:08 I see it in some code I'm reading

0:09 cgray`: is it an argument to a function?

0:09 alexbaranosky: (in Midje)

0:09 yes, as well as to a macro, and also in a backtick empalte like such : '~&form

0:10 empalte => template

0:10 ahhh is it anaphora or something/

0:11 cgray`: it's not something i've seen :)

0:11 alexbaranosky: a way to reference the form of macro that you're inside of?

0:16 cgray`: it could just be a weird name for a variable...

0:17 i would think it would be here: http://clojure.org/reader if it was actually something

0:24 technomancy: &form and &env are implicit arguments to every macro

0:24 lazybot: java.lang.RuntimeException: Unable to resolve symbol: form in this context

0:28 amalloy: alexbaranosky: it's anaphorically added to every macro definition: (defmacro foo [x] (println &form) x) (foo (+ 1 2)) prints (foo (+ 1 2)) and expands to (+ 1 2)

0:29 it's not mentioned in the reader because it's unrelated to the reader

0:29 alexbaranosky: technomancy, what does &env do?

0:32 amalloy, that's neat

0:32 amalloy: it's a map containing information about the lexical environment into which the macro will be expanded

0:33 alexbaranosky: you have an example of &env in action, in utilize - the datatypes namespace checks out &env to figure out what typehint its argument has been given

0:33 alexbaranosky: amalloy, checking..........

0:33 quotemstr: Wait --- rest is being changed, and the lazy sequence model redesigned?

0:34 amalloy: quotemstr: that is *very* old. the change has happened

0:34 quotemstr: Oh, okay. Good.

0:41 alexbaranosky: are there any good links to read more about &env?

0:41 nevermind: http://blog.jayfields.com/2011/02/clojure-and.html

0:42 didn't think I could effectively google for things starting with &

1:31 lghtng: ,&env

1:31 clojurebot: #<CompilerException java.lang.RuntimeException: Unable to resolve symbol: &env in this context, compiling:(NO_SOURCE_PATH:0)>

1:31 lghtng: ,google &env

1:31 clojurebot: #<CompilerException java.lang.RuntimeException: Unable to resolve symbol: google in this context, compiling:(NO_SOURCE_PATH:0)>

1:31 lghtng: ,g &env

1:31 clojurebot: #<CompilerException java.lang.RuntimeException: Unable to resolve symbol: g in this context, compiling:(NO_SOURCE_PATH:0)>

1:32 lghtng: ,search &env

1:32 clojurebot: #<CompilerException java.lang.RuntimeException: Unable to resolve symbol: search in this context, compiling:(NO_SOURCE_PATH:0)>

1:32 lghtng: ,uptime

1:32 clojurebot: #<CompilerException java.lang.RuntimeException: Unable to resolve symbol: uptime in this context, compiling:(NO_SOURCE_PATH:0)>

1:32 amalloy: lghtng: if you're going to try to brute-force this, could you do it im PM?

1:32 lghtng: lol, ok

1:32 devn: heh

1:32 lghtng: sry

1:32 amalloy: $google &env

1:32 lazybot: [Jay Fields' Thoughts: Clojure: &env and &form] http://blog.jayfields.com/2011/02/clojure-and.html

1:32 devn: lghtng: np bro u r kewl

1:33 lghtng: what happened to the keywords in fsbot?

1:33 tnx

1:33 devn: ur so welcome bro

1:34 amalloy: lghtng: you're not in #emacs, buddy. we don't have fsbot

1:35 devn: "you're not in #emacs anymore"

1:36 justicefries: the new vim chantitle

1:36 devn: justicefries: in madison?

1:36 justicefries: me?

1:36 clojurebot: slime-installer is deprecated

1:37 justicefries: like the city?

1:37 devn: justicefries: indeed

1:37 justicefries: no, I spoke there at madison ruby conf...fell in love with it, wouldn't mind going back. why?

1:37 or living there.

1:37 devn: <-bendyworks

1:38 justicefries: oh nice.

1:38 yeah, seems like the main place for a rubyist to work.

1:41 I may end up moving there, we'll see. coolest place ever.

1:45 cgray`: ok, to answer my question from about 45 minutes ago, typehinting with ^"[Ljava.lang.Object;" is the way to go

1:45 amalloy: ^objects

1:45 cgray`: damn

1:45 i thought i tried that

1:46 amalloy: well, i guess it might not work anymore, but i think it's supposed to

1:46 cgray`: i might have tried ^Objects

1:46 amalloy: any you still want to know the general syntax for things that don't have a shortcut like objects

1:47 cgray`: yeah, you can get it with (type foo)...

1:47 it sped my code up by about 100x

3:53 quotemstr: Why is /= an "invalid token"?

4:00 amalloy: quotemstr: / is the namespace separator

4:05 quotemstr: amalloy: But it's not separating anything.

4:05 amalloy: that's why it's invalid

4:06 quotemstr: Symbols _starting_ with / are unambiguous and should be treated normally.

4:06 amalloy: meh

4:06 quotemstr: ( /= is what Lisp uses, so it'd be nice to be able to use the same symbol.)

4:06 amalloy: there's an exception for clojure.core//, but in general / isn't a legal part of a symbol

4:07 using /= instead of not= just because you're used to a different lisp is kinda gross. you can't use 1+ either; just dive in and use clojure's names

4:07 or +1 - i could never remember which order the dang things went in

4:08 quotemstr: 1+.

4:08 +1 is an integer.

4:27 Is there a way of writing (new foo bar) so that bar is evaluated?

4:27 That is, is there a way to choose the constructor used at runtime?

4:28 nickmbailey: that is how it will work by default

4:29 amalloy: i assume quotemstr meant he wants foo evaluated

4:29 nickmbailey: (new foo (bar))?

4:29 wait, foo or bar

4:30 amalloy: quotemstr: reflection. you can muddle through the javadocs to do it by hand, or let clojure.lang.Reflector/invokeConstructor do it

4:30 quotemstr: Err, yes, I meant foo.

4:30 Thanks.

4:32 nickmbailey: is it fairly standard to rebind *in* and *out* to new stream readers and use things like println and read-line for working with streams?

4:34 quotemstr: nickmbailey: I do it all the time in Lisp.

4:35 nickmbailey: just encountered it recently and the idea took me by surprise

4:36 quotemstr: Heck, I've seen people do that in C, with printf.

4:37 amalloy: really? surely it's easier to just use fprintf there

4:38 quotemstr: amalloy: Easier than reassigning stdout?

4:38 amalloy: yeah

4:40 quotemstr: amalloy: You might want to temporarily reassign stdout for the same reason you might want to temporarily bind *out*.

4:40 amalloy: i guess that's true

4:41 the only serious C programming i ever did was on a device with no stdout, so i guess i'm out of touch there

4:42 * quotemstr uses C every day.

4:48 gmaggior: Excuse me, can you tell me why (defn bbb [x y] ((get (vec x)) y)) and (bbb '(1 2 3) 1) give invalid argument exception to get?

4:49 amalloy: gmaggior: your parens are way off

4:49 inside of bbb

4:49 gmaggior: oh

4:50 amalloy: (defn bbb [x y] (get (vec x) y)) ;; although this would be simpler: (def bbb nth)

4:51 alexbaranosky: amalloy, I should remember to use nth next time I am writing a bbb util function

4:51 it's so much more concise

4:52 gmaggior: amalloy: thank you very much amalloy. It works. Actually I'm writing a function to simulate nth instead of using it (it is a 4clojure problem)

4:53 alexbaranosky: aha! nice, do they wouldn't let you try the old (def bbb nth) trick anyway

4:53 tomoj: alexbaranosky: consider (nth (range) 3)

4:54 Raynes: (def bbc "Doctor Who")

4:54 alexbaranosky: tomoj, ?

4:55 amalloy: yeah, i guess we should have added a test to verify that your nth works for infinite sequences. too late to change now, though

5:26 quotemstr: Why is :keys necessary when an :or is present?

5:26 A bare :or provides all the information you need.

5:26 amalloy: they're orthogonal

5:27 quotemstr: I want to write a destructuring expression with default key values, and I don't want to repeat the key names.

5:27 amalloy: (let [{user-name :user-record-data-name :or {user-name "no user"}} the-data] (do stuff with user-name...))

5:27 quotemstr: {:keys [a b] :or [a 0 b 2]} seems silly when the :or part indicates that key parsing is desired.

5:28 amalloy: no; the keys in the or refer to your local names, which are not by any means always the same as the keys in the original map

5:28 quotemstr: Err, {a 0 b 2}.

5:29 Still, I want is fairly common, I imagine.

5:29 amalloy: i don't really see :or get used that often. once in a while, sure

5:30 quotemstr: Maybe that's because you have to repeat the local names.

5:30 amalloy: haha

5:32 quotemstr: Why not follow CL and allow :keys [(key default-form)...] ?

5:32 amalloy: so, write a let+ macro that finds {:keys-or {a 0 b 2}} and replaces it with {:keys [a b] :or {a 0 b 2}}

5:33 quotemstr: or if you only use the value once, don't destructure it at all. (let [m (...)] (+ (m :a 0) (m :b 2)))

5:33 quotemstr: I'd have to provide a + version of every destructuring form.

5:51 Bahman: Hi all!

6:01 _ulises: morning folk

6:02 fbru02: hey guys !! I still have the same question that a couple days ago, before when evaluating sth with the same name it issued a warning , now it gives an IlligalStateException : x already refers to ... , is there away to enforce this evaluation?

6:04 _ulises: can one have different :pre and :post conditions for different arities of a function? or even, how do pre and post-conditions work when one defines functions like (defn foo ([] ...) ([p] ...) ...)?

6:05 fbru02: have any code to show what you're getting?

6:05 a simple example that is

6:06 fbru02: _ulises: no, is just more like the order i was using when developing... but let me think on how i can clarify

6:06 _ulises: fbru02: are you using slime?

6:06 fbru02: _ulises: yes

6:06 _ulises: I get that sometimes when I move things about between files and my swank server maintains state

6:07 I tried with (ns-unmap ...) but perhaps I wasn't using it correctly

6:07 I think you may want to experiment with that

6:07 as in, it didn't work for me, but in theory that's what you'd want to clear a namespace

6:08 fbru02: _ulises: awesome didn't know about its existence , thanks

6:09 _ulises: no worries

6:09 let me know if this works and how you got it to work though :)

6:21 * _ulises silently hopes somebody can shed some light into the pre and post conditions for multiple-arity fns

8:53 gfredericks: _ulises: I know it's been a couple hours, but I just confirmed at the repl that you can enter separate conditions for each arity-definition.

8:53 Specifically I did (defn foo ([a] {:pre [(pos? a)]} (inc a)) ([a b] {:pre [(= 15 (+ a b))]} (- a b))) and it worked as you would expect

8:55 Raynes: Yeah. I imagine I'd have tried it rather than asking about it for two days with no answers. :P

8:57 gfredericks: Raynes: does clojurebot have a snarky phrase handy for that?

8:57 ~try-it

8:57 Raynes: Don't think so.

8:57 clojurebot: I don't understand.

8:57 Raynes: clojurebot: try-it |is| Why not just try it? It's quicker that way.

8:57 clojurebot: 'Sea, mhuise.

8:58 Raynes: ~try-it

8:58 clojurebot: try-it is Why not just try it? It's quicker that way.

8:58 Raynes: Well... close enough.

8:58 clojurebot: try-it |is| <reply>Why not just try it? It's quicker that way.

8:58 clojurebot: 'Sea, mhuise.

8:58 gfredericks: dang what was the syntax for that.

8:58 Raynes: ~try-it

8:58 clojurebot: try-it is Why not just try it? It's quicker that way.

8:58 gfredericks: ~try-it

8:58 Raynes: Well, something like that.

8:58 clojurebot: Why not just try it? It's quicker that way.

8:58 Raynes: There we go.

8:58 gfredericks: Raynes: it worked, he's just got both now

8:58 clojurebot: forget try-it

8:58 clojurebot: Why not just try it? It's quicker that way.

8:58 gfredericks: ~try-it

8:58 clojurebot: try-it is Why not just try it? It's quicker that way.

8:59 Raynes: I concede.

8:59 gfredericks: clojurebot: forget try-it |is| Why not just try it? It's quicker that way.

8:59 clojurebot: I forgot that try-it is Why not just try it? It's quicker that way.

8:59 gfredericks: ~try-it

8:59 clojurebot: Why not just try it? It's quicker that way.

8:59 gfredericks: okay I think he's better now

8:59 ejackson: i think clojurebot had too much turkey

9:00 gfredericks: ~turkey

9:00 clojurebot: Excuse me?

9:12 biallym: Hey is there a way to have a function called on or around garbage collection of an object?

9:13 Like an Idisposable for C#

9:52 ambrosebs: has anyone explored adding compiler hooks to Clojurescript?

10:03 tauntaun: Glad to see that clojurebot is freely available. I'll assume that the absence of a user guide means it's trivially easy to use :-)

11:27 fliebel: Is there a 1.3 Clojure lib for dealing with complex numbers?

11:37 reiddraper: What's the rationale behind the namespace naming pattern foo.core? Is it not possible to put code in the foo namespace directly?

12:00 fliebel: reiddraper: You can, I think the idea is that when you have a large app, it makes sense to have a core.

12:00 technomancy_: reiddraper: it's not possible in certain contexts

12:06 reiddraper: ok, it's not a restriction for me or anything, just curious. thanks

12:43 fliebel: technomancy_: re namespaces: in which cases is it not possible?

12:49 gtrak``: Raynes, so are you considering university?

12:50 Raynes: gtrak``: Not particularly. At some point, possibly.

12:50 fliebel: I don't remember the details, but I know of some classloader bizarreness that is the result of single-segment namespaces.

12:51 Man, why isn't the guy who did this here: https://github.com/jedahu/story

12:51 I need to tell him how awesome he is.

12:52 fliebel: Raynes: Ok, so we should have more names like del.ico.us, because I dislike core.

12:53 Raynes: I like core. Core is cool.

12:54 mdeboard: Raynes: Great blog post

12:54 Raynes: mdeboard: Thanks. :>

12:56 TimMc: co/re.clj

12:57 gtrak``: core/.clj

13:00 Raynes: fliebel: Just start using namespaces like fliebel.moar and fliebel.coar.

13:01 fliebel: Raynes: For some reason, IRC is the only place I'm called fliebel.

13:01 Raynes: fliebel: That's because it is impossible to pronounce your name.

13:03 mdeboard: Raynes: Dude god, I thought I was doing good getting my career started. Your first job is backend dev with Clojure? I quit.

13:03 fliebel: Raynes: I suppose you can say Dijkstra's algorithm, right?

13:03 Raynes: Heh. Did you praise me for my post before you finished reading it? :p

13:03 fliebel: I'm not entirely confident that I know how to pronounce his name either.

13:03 I *think* I do though.

13:04 mdeboard: Raynes: Well since you're just a child I thought you could use some positive encouragement. Just kidding -- I read through the 2010 part then my ADHD attacked. :P

13:04 Raynes: Heh

13:07 fliebel: Raynes: Maybe I can teach you how to say my name on (next conj), I'm already devising things to talk about and ways to make money :P

13:07 Raynes: :p

13:09 fliebel: &(next ())

13:09 lazybot: ⇒ nil

13:09 Raynes: &(-> () next next next next next)

13:09 lazybot: ⇒ nil

13:10 fliebel: Raynes: I still can't remember rest/next ##(-> () rest rest rest rest)

13:10 lazybot: ⇒ ()

13:14 alexbaranosky: Raynes, nice article.

13:15 gtrak``: i need to get off my ass and learn haskell, this is an encouragement

13:16 jamiltron: Sorry to backtrack, but what article?

13:16 gtrak``: http://blog.raynes.me/blog/2011/11/27/the-clojure-community-and-me/

13:16 mdeboard: gtrak``: Ditto. Haskell is awesome. I use it to work on stuff in my discrete math course

13:17 jamiltron: Same here. I love Haskell but feel so humbled by it I never feel like I can run with it for long enough.

13:17 gtrak``: mdeboard, yea, I need to see what all the fuss is about with types, i talked to djspiewak once about it and he convinced me it's interesting

13:18 Derander: glorious, glorious types

13:18 Raynes: alexbaranosky: Thanks. :)

13:18 mdeboard: The deeper I get into discrete math the more I understand haskell

13:18 And I understand essentially nothing.

13:18 alexbaranosky: Derander: timewasting, pain-in-the ass, types ;-)

13:18 gtrak``: discrete-math like fields and groups?

13:19 finite field?

13:19 Derander: alexbaranosky: :-P

13:19 mdeboard: I understand Haskell the way someone who once flew over a library with a book about Italian food understands the Mona Lisa.

13:20 alexbaranosky: Haskell's a lot like Clojure but with all these annoying types all over the place - and without all the delicious power that homoiconicity provides

13:20 Derander: mooonaaaaadddssss

13:20 gtrak``: i do like my power delicious

13:20 alexbaranosky: :P

13:20 Raynes: Haskell is also painfully non-dynamic. lazybot would have been so much of a bitch to write if I had done it in Haskell.

13:21 gtrak``: i'm starting up 'reasoned schemer' because of what was said about core.logic and ad-hoc typing

13:23 Derander: someone wrote a pattern matching library for clojure.. does anyone know the name?

13:23 gtrak``: core.match

13:23 Derander: gtrak``: danke :-)

13:27 gtrak``: anyone have a good guide to starting a meetup? I want a Baltimore FP meetup, it seems like there's a small group of people that would do it.

13:30 ckirkendall: gtrack: In cincy carin miers and I started up one. We spread the word through twitter and through the leaders of other meetups. Our first meeting had 30 people much of that was carin's sales job.

13:31 gtrak``: ah, ckirkendall I remember talking to you about this :-)

13:31 ckirkendall: We got a simple websites through wordpress. We created a google group.

13:31 all of this was done before the first meetup

13:32 gtrak``: ckirkendall, it seems like there's some interest and programming talent around, but not much going on in the way of meetups here. We have a javascript meetup, though they meet like less than once a month

13:33 but i could totally run a site

13:33 and I could do an intro to clojure talk probably

13:35 ckirkendall: gtrak: we also made the decision to do a functional programming group and not just a clojure group.

13:36 gtrak``: yea, at this point i want to be inclusive

13:36 and i'm interested in FP in general

13:37 ckirkendall: We were all amazed at how many people were interested in FP

13:37 I also have done presentation at other meetups pitching cincyfp

13:38 gtrak``: awesome

13:38 ckirkendall: If you have some technical friends that have a good following on twitter in balt. That was our best way to get the word out.

13:39 gtrak``: yea, i don't have enough contacts to piggyback off of stuff like that, it might take a while

13:39 but that's ok

13:40 mdeboard: I think I'm going to disable the 80+ minor mode for clojure

13:41 The highlighting drives me bananas

13:42 Raynes: http://blog.raynes.me/blog/2011/11/27/the-clojure-community-and-me/#comment-373681480

13:42 "Continue being awesome."

13:42 * Raynes chuckles

13:43 ckirkendall: I didn't even know what twitter really was before meeting carin. It was here contacts that got the word out.

13:43 gtrak``: maybe she knows people in balty :-)

13:48 Saturnation: Raynes, nice post

13:49 Raynes: Saturnation: Thanks. :)

13:50 Saturnation: Brilliant talk at the Conj to, btw. :)

13:52 Raynes: Saturnation: Double thanks. :)

13:55 Saturnation: And thanks for your work on 4Clojure

13:56 * Saturnation stops now before it looks like he is kissing up... :)

13:57 Raynes: I haven't actually done a whole lot on 4Clojure.

13:58 Definitely not enough to earn any ecreds.

14:00 Oh shit -- I got hn'd: http://news.ycombinator.com/item?id=3282837

14:00 tolstoy: Raynes: Yep. I'm reading your blog post right now as a result. ;)

14:05 mdeboard: Raynes: So I'm trying to get lazybot up and running, but when I run `lein uberjar` it tells me that "Release versions may not depend upon snapshots", or set an env var. Should I just set the env var and move on or ..?

14:06 Raynes: Yes.

14:06 Or just do 'lein run'.

14:06 That should work.

14:06 I think.

14:06 ibdknox: it will

14:07 Raynes: I should update the docs about that.

14:07 ibdknox: we have to be careful though... at the rate we're going there will be a lazybot army

14:07 Raynes: Heh

14:07 mdeboard: Link them all together

14:07 shtutgart: hm, i'm getting "error in process filter: Wrong number of arguments: nil, 0" after sending (keys (:members (r/reflect "foo"))) to REPL. I've tried to relaunch swank, but the problem persist. (vals ...) or just (:members ...) work fine

14:07 mdeboard: I mean, lisps ARE all about AI after all right

14:07 Raynes: There was a fellow who PMed me a few days ago because he wanted to run his own instance of the bot.

14:08 shtutgart: ideas? is it a bug?

14:08 ibdknox: shtutgart: what's returned from members?

14:10 shtutgart: ibdknox: it's a set of clojure.reflect.Method

14:11 ibdknox: shtutgart: https://github.com/technomancy/swank-clojure/issues/31

14:11 shtutgart: not only Method, Field, Constructor etc

14:11 ibdknox: not sure if that's related

14:12 but it appears to be an issue at the swank-clojure/slime level

14:12 which means I'm useless

14:12 :)

14:13 Raynes: you're famous! #2 on HN

14:14 shtutgart: ibdknox: not really, other expressions like (+ "foo" "bar") and even (vals (:members (r/reflect "foo"))) work fine (I mean, throw exceptions), just this one causes the problem

14:14 Raynes: I know. I didn't even realize it was hn'd until like 10 minutes ago. Saw it was on the front page and pissed myself.

14:14 ibdknox: Raynes: so now that you're doing all this writing... when will I be getting some chapters? :p

14:15 mdeboard: Only bad part about getting frontpaged on HN is it usually draws out the worst HN commenters, at least IME

14:15 ibdknox: shtutgart: yeah, but the error itself is a swank one. Try it in lein repl and see what happens? Maybe that will give some clues

14:15 Raynes: ibdknox: Once I finish reviewing Keith's reviews and he reviews my reviews of his reviews and I review... yeah. After that, he should send the first chapter down your pipe.

14:15 shtutgart: ibdknox: yeah, already trying...

14:15 Raynes: There is only one chapter at this point that is close to ready for technical review.

14:16 ibdknox: mdeboard: it's true. There are some scary people on HN.

14:16 Raynes: Another one is currently under developmental review, and I should be submitting another chapter around the 5th.

14:16 ibdknox: Raynes: awesome :D

14:17 mdeboard: ibdknox: I wrote to Dr. Norvig to see if he would chime in on people using his "Teach Yourself Programming in Ten Years" as a bludgeon to beat up on new programmers. He did so, graciously.

14:17 ibdknox: mdeboard: :D

14:20 mdeboard: Raynes: Am I missing a config step with mongo here? When I `lein run` or run the jarfile I get this error: http://paste.pocoo.org/show/513666/ I haven't touched mongo except to get its daemon running. I didn't see anything in .lazybot/config.clj about mongo config.

14:22 Raynes: mdeboard: I have no idea what that means.

14:22 Is there a stacktrace?

14:22 mdeboard: ya

14:22 sec

14:23 http://paste.pocoo.org/show/513668/

14:23 Raynes: Huh.

14:23 mdeboard: Maybe the port is wrong?

14:23 What port is mongo running on?

14:24 mdeboard: 27017 & 28017

14:24 Raynes: Well..

14:24 mdeboard: Is :servers-port supposed to be the mongo port?

14:25 Raynes: No.

14:25 mdeboard: Ok

14:25 Didn't think so, but maybe I was going crazy

14:25 Raynes: Well, one problem here is that printStackTrace isn't real.

14:25 Let's fix that first. Give me a sec.

14:29 mdeboard: Could you hop over to #flatland?

14:30 mdeboard: sure

14:34 sritchie: Raynes, are you around?

14:34 quick question on lein-nenew

14:34 s/nenew/newnew

14:34 Raynes: sritchie: I am.

14:34 Sure. Shoot.

14:35 sritchie: how do you recommend creating a new templates? forking lein-newnew and adding them directly, or is there some way to pull a template in separately and have "lein templates" pick it up?

14:35 Raynes: Ah, that's the beauty of it! Templates need only be maven artifacts.

14:35 Just create your template and then publish it on clojars.

14:36 You can then 'lein plugin install' your template just like any other leiningen plugin and it'll be picked up by lein-newnew.

14:36 ibdknox: just think of all the awesome template packs

14:37 sritchie: awesome, that's great

14:38 so for a template called "axelrod", I'd create a project with "leiningen/new/axelrod.clj" and "leiningen/new/axelrod/<templatefiles>"

14:38 Raynes: Yes.

14:38 sritchie: boom

14:38 ibdknox: sritchie: there's a template for creating templates :D

14:38 sritchie: how about a recursive template template

14:38 Raynes: sritchie: Since lein-newnew is in Leiningen now (master), the templates that currently exist are probably the only ones that'll ever be included with it.

14:38 sritchie: nice

14:38 Raynes: `lein new template mytemplate`

14:38 :D

14:39 sritchie: I'm making a template for *-koans projects

14:39 I pulled the macros, etc out of clojure-koans, so now anyone can make koan projects for their own libraries

14:39 Raynes: Excellent usage.

14:40 ibdknox: sritchie: I still need to look into that cljs-watch change you made :)

14:40 sritchie: I think though, that it won't work without changes to the CLJS compiler :(

14:40 sritchie: yeah, I realized after I sent it in that it'll only work for local files

14:40 files in your project

14:40 it's a very anti-social pull request

14:40 ibdknox: haha

14:41 devn: what are people's feelings about including swank-clojure as a dev-dependency?

14:41 ibdknox: don't do it

14:41 devn: I often find it annoying that I need to add it to the project.clj for every project I pull down

14:41 ibdknox: user level plugins ftw

14:41 Raynes: devn: You totally don't.

14:41 ibdknox: lein plugin install swank-clojure some-version

14:41 sritchie: devn: you can install it locally

14:41 Raynes: devn: lein plugin install swank-clojure 1.3.3

14:42 devn: lol, when did I miss this memo

14:42 sritchie: I just figured this out too

14:42 ibdknox: totally 6 months behind :p

14:42 a while back during the 1.3.0 transition I sent out a post telling everyone to remove it

14:42 lol

14:43 with some other general clean up things

14:43 Raynes: marginalia has a lein-vimclojure plugin in the dev deps.

14:43 Makes me want to kill myself.

14:43 ibdknox: now now. Vim is a special case :D

14:43 we have to wave our flag proudly

14:43 as we are the few here

14:44 Raynes: Heh.

14:44 You should be the transitioning.

14:44 ibdknox: sritchie: you were building something with Noir, right? How did that go?

14:45 Raynes: pfft, where's the fun in that? Then I'd have to *actually* help with swank issues and such... for now I can just claim ignorance.

14:45 sritchie: ibdknox: it's going really well -- I've had to let it sit for a bit while I rework this elephantdb project

14:45 gfredericks: $inc ibdknox

14:45 lazybot: ⇒ 5

14:45 Raynes: There isn't any helping to be done.

14:45 M-x clojure-jack-in and stfu.

14:45 ibdknox: lol

14:46 gfredericks: every other question in #clojure has something to do with skank-swim-mode or whatever

14:46 ibdknox: lol

14:46 Raynes: I bet ejackson thinks that was directed at him now.

14:46 ibdknox: sritchie: haha

14:46 sritchie: there's always something :)

14:46 sritchie: ibdknox: I'm starting to play with clojurescript, though

14:46 technomancy: gfredericks: and they're all answered by the documentation!

14:46 Raynes: He's probably sitting there muttering "what did I do" in his little English accent.

14:46 sritchie: ibdknox: I set up a little google maps demo with noir: https://github.com/sritchie/contour

14:47 ejackson: Raynes: I'm struggling with the XML aspersions, to take any more on board

14:47 Raynes: technomancy: You should really get some t-shirts made of the docs.

14:47 devn: ibdknox: did you see some of the conversation that happened around how noir puts the V and C in the same file?

14:47 gfredericks: technomancy: I know, I just get bitter that my editor isn't all tricked out so I have to find something to complain about

14:47 ibdknox: devn: you should read my epic response :)

14:47 devn: ibdknox: is it on the issue that was submitted?

14:47 ibdknox: sritchie: oh awesome

14:47 sritchie: along with my clojurescript "getting started" tips, as if there aren't enough floating around

14:47 * gfredericks wants to read an epic response

14:47 ibdknox: devn: http://groups.google.com/group/clj-noir/browse_thread/thread/1718a9b1312156d3

14:48 devn: be back in 7 hours after I finish reading this

14:48 ibdknox: sritchie: that's really cool :)

14:49 sritchie: how was working with CLJS?

14:49 devn: have you guys seen trail?

14:50 https://github.com/bobby/trail

14:50 ibdknox: yeah

14:51 I was going to sit down and start figuring that stuff out for pinot soon. I actually don't think the classic approach is necessarily the best one in this case

14:51 but I haven't really gone into it yet, so I could be totally wrong :D

14:52 gfredericks: ibdknox: I am glad you wrote this.

14:53 ibdknox: gfredericks: why's that?

14:53 sritchie: ibdknox: I found that the browser repl helped a lot; it was a bit difficult to figure out how to examine javascript objects, etc, but that's more my problem

14:53 gfredericks: ibdknox: because I like the ideas and I hadn't thought of it that way before.

14:54 sritchie: I'm heading to pinot next

14:54 ibdknox: gfredericks: yeah, I mean the main thing they wanted to accomplish with MVC was separation of business and presentation

14:55 gfredericks: controllers seems a bit of an after thought, but were important in contexts where any number of actions might cause changes (e.g. in a standard client interface)

14:55 sritchie: let me know how that goes. I think most of what you need is there, but I won't claim it's "good" yet :) The hiccup over dom objects is really fun though

14:56 lots of cool things you can do with that

14:56 Raynes: sritchie: Let me know when your template is out.

14:57 ibdknox: Also. Trynoir. Do it.

14:57 ibdknox: I know

14:57 ugh, just have too much going on :(

14:57 Raynes: You just think you do.

14:57 ibdknox: haha

14:58 mdeboard: ibdknox: Don't get yourself burnt out

14:58 sritchie: ibdknox: this maps project is going to evolve into the front end for a clojure-based deforestation-monitoring system I've been working on

14:58 Raynes: If he gets burnt out he'll just make me maintain his stuff until he is okay.

14:59 "Hi, I'm Anthony Grimger here to talk about Noir and Korma."

14:59 ibdknox: sritchie: interesting. Where are you going to get the data?

14:59 cgag: Did you make noir? I'm just getting into clojure and was thinking of trying it. I was going to ask what the current options were as far as web dev with clojure.

14:59 Dyscrete: Raynes, your blog post on HN sent me here :D

14:59 Raynes: Dyscrete: Hi! :)

14:59 ibdknox: cgag: yep, I wrote it :) It'll be by far the easiest starting point if you're new

14:59 Raynes: cgag: ibdknox wrote noir.

14:59 sritchie: ibdknox: I've got a hadoop workflow that processes NASA's MODIS dataset back to 2000; the bulk of the work is generating timeseries, extracting some trends and running a classification algorithm over all of the pixels

15:00 ckirkendall: Raynes: I second that.

15:00 mdeboard: Dyscrete: Welcome

15:00 cgag: If yours was the post about the clojure community that's what sent me here as well :)

15:00 Dyscrete: thanks all

15:00 sritchie: so the final dataset is, for every pixel, a percent chance of deforestation in the next time period

15:00 Raynes: cgag: It was.

15:00 sritchie: Raynes: you KNOW it

15:00 almost done here, just need to test this thing out

15:01 ibdknox: sritchie: that's cool stuff, are you going to open source it? I'd love to see what that ends up looking like

15:01 sritchie: ibdknox: yup, hopefully in the next month or two

15:02 ibdknox: sritchie: cool. You're not in the bay area are you?

15:02 sritchie: yeah, actually, I'm at twitter

15:02 ibdknox: hah

15:02 sritchie: I need throw an interface between my thrift schema and the hadoop logic, and then it should be good to go

15:02 ibdknox: sritchie: we should get together sometime

15:02 sritchie: sounds good, man

15:03 I'm back in town tomorrow, I'll send you a note

15:03 ibdknox: awesome.

15:03 There are a lot of us around here, it's funny that none of us seem to find eachother though

15:04 you guys don't come to the user group :p

15:04 mdeboard: Wild_Cat: ping

15:04 devn: get thee to a user group!

15:04 sritchie: haha, I busted in late at the last one

15:04 rudely interrupting your pinot demonstration

15:04 ibdknox: haha

15:04 pmooser: ok I am going to go read this article

15:05 and maybe I'll be so impressed that I'll join IRC a second time

15:05 ibdknox: devn: did you read that response?

15:05 sritchie: but it's a fair point, I'll add myself to the meetup

15:05 ibdknox: :)

15:05 Now I need to convince mark to go

15:06 and other heroku people

15:06 Wild_Cat: mdeboard: pong?

15:06 devn: ibdknox: I did. I liked it. :)

15:07 zmanji: Is there a document that enumerates the difference between Clojure and Scheme/Racket? I have used Scheme before and I am interested in learning and using Clojure

15:07 devn: zmanji: yes, as a matter of fact there is :)

15:07 dnolen: zmanji: too many to list :)

15:07 ibdknox: my deep dark secret: Noir is the 4th web framework I've built

15:07 devn: zmanji: http://hyperpolyglot.org/lisp

15:07 zmanji: thanks devn

15:07 devn: np

15:07 mdeboard: ibdknox: When you say web framework, what do you mean, specifically? Just a collection of abstractions for common HTTP-handling tasks?

15:08 devn: dnolen: someone did the work :)

15:08 ibdknox: mdeboard: depends, is that what you would label rails?

15:08 dnolen: devn: well that's a detail oriented list, but it doesn't list the bigger philosophical differences

15:09 mdeboard: ibdknox: I've never used rails, but I'd describe a subset of Django's codebase that way

15:09 devn: dnolen: it

15:09 dnolen: it's a very, *very* long list. They get into some of that later on in the document.

15:09 ibdknox: mdeboard: I've always struggled with the difference between "library" and "framework", the distinction I ultimately settled on was that a framework is something you write code *in* while a library is something you write code around

15:09 pmooser: Nice article, Raynes.

15:09 Raynes: <3

15:10 ibdknox: mdeboard: I wrote two at the level of django

15:10 Wild_Cat: mdeboard: say, since you appear to be involved in both the Python andClojure communities, would you have a couple Clojure-for-the-Python-programmer tutorials to recommend? I've gone through Mark Volmann's, which is good but apparently written for an older version of Clojure

15:10 dnolen: devn: for "define class" it says use Java :P

15:10 ibdknox: mdeboard: one more like noir

15:10 pmooser: I was at the conj this year and your talk was cool and entertaining, and it didn't seem like you were nervous at all ;)

15:10 dnolen: for the Clojure table entry

15:10 devn: dnolen: haha, no one said it was perfect! :)

15:10 jgrimes: I came here because of that article Raynes, it was quite good

15:10 Raynes: Happy you enjoyed it. :)

15:10 devn: dnolen: I was using it to translate what I've learned about Clojure back to scheme

15:11 * ibdknox bows before the mighty celebrity that is Raynes :D

15:11 mdeboard: Wild_Cat: Unfortunately not, I basically just learn by doing/tinkering :-\ I think a "CLojure for Python programmers" tutorial would do a grave injustice to Clojure. "Python for Clojure programmers" would be more appropriate, but I've not seen that either.

15:11 Wild_Cat: (more specifically, the actors and destructuring parts were out of date, and I/O was mostly glossed over)

15:12 ibdknox: mdeboard: the first one I wrote was a PHP MVC framework, well before django ever existed :)

15:12 mdeboard: Wild_Cat: I always recommend picking up either Joy of Clojure or Practical Clojure

15:12 devn: the new pragprog clojure book is quite good

15:12 pmooser: The updated edition of the old one ?

15:12 devn: *nod*

15:12 ibdknox: mdeboard: the one after that was a crazy declarative metaprogramming thing that let you write out your site in xml. It was very cool, but meh.

15:12 mdeboard: the last was called trigger, it was a very lightweight event-based framework for building sites

15:13 devn: ibdknox: bad memories! *shows you a cross*

15:13 mdeboard: "xml... very cool..." aka "a face only a mother could love"

15:13 ibdknox: lol

15:13 devn: hey, don't beat up on XML

15:13 ibdknox: it was all we had!

15:13 devn: when we ran out of zeros, we just used 1s

15:13 mdeboard: I have a new appreciation for XML after taking that Stanford online DB class

15:14 devn: and then we had to walk 4 miles up hill both ways to get more zeros.

15:14 and we liked it.

15:14 ibdknox: exactly

15:14 Raynes: jgrimes: Hey. I just realized you and I have the same last name.

15:14 Wild_Cat: mdeboard: Joy of Clojure? Nice. I'll take a look at it, probably once I've completed my move and can justify buying books :p

15:14 jgrimes: Raynes: oh, nice :)

15:14 Raynes: It took me way too long to notice that.

15:14 jgrimes: haha

15:15 mdeboard: Wild_Cat: If you have a Kindle it's one of hte few tech books I think reads quite well in ebook format

15:16 Wild_Cat: mdeboard: well, since I'm planning to buy a Kindle shortly before the aforementioned move, I'll add that one to my initial buy-list

15:16 Bahman: Is there any easy way to copy a byte array into another one?

15:18 Wild_Cat: mdeboard: does it include a guide to the Clojure ecosystem too (Leiningen, Clojars, useful libs, etc.?)

15:18 mdeboard: Wild_Cat: No not at all. Definitely use irc for that

15:18 raek: Bahman: http://docs.oracle.com/javase/6/docs/api/java/util/Arrays.html#copyOf(T[], int)

15:19 ibdknox: supposedly the 2nd edition of Programming Clojure has Noir in it

15:19 mdeboard: ibdknox: nice

15:19 Wild_Cat: mdeboard: ah, bit of a shame, that.

15:19 mdeboard: I do like Noir a lot

15:19 Raynes: My book will have whole chapters on Leiningen and Noir.

15:19 Wild_Cat: what's Noir?

15:19 ibdknox: meh, it's ok ;)

15:19 mdeboard: I'm kind of burnt out on hand-wavey we frameworks

15:19 Bahman: Thanks raek!

15:19 devn: I will love noir when I can get haml templates :X

15:19 mdeboard: s/we/web

15:19 ibdknox: there's not a java haml implementation?

15:20 devn: https://github.com/mmikulicic/haml-macro

15:20 devn: ibdknox: yes, it needs some work though

15:20 ibdknox: Wild_Cat: it's a web framework I wrote: www.webnoir.org

15:21 devn: I'm not so hot with parsers, so that's been a bit of a stumbling block for me with haml-macro

15:21 ibdknox: devn: I'd just find a java lib, wrap it real quick, and be done

15:21 Wild_Cat: ibdknox: hmm. A web framework for the JVM that doesn't suck harder than a black hole? That could be nifty.

15:22 ibdknox: Wild_Cat: 100% less suck ;)

15:22 Wild_Cat: what, you mean it blows? :p

15:22 mdeboard: lol

15:22 ibdknox: damn

15:22 beat at my own game

15:22 gfredericks: I'm writing some clojure code to use from java/jruby, and am curious how poor everyone thinks this idea is: a macro called at the end of a file that creates a class with a static method for every public function in the namespace.

15:22 Wild_Cat: :D

15:22 ibdknox: devn: this one seems active: https://github.com/raymyers/JHaml

15:22 ericmoritz\0: 100% less suck means it neither sucks nor blows

15:23 ibdknox: true.

15:23 it's neutral

15:23 Wild_Cat: ibdknox: looks cool. No boilerplate. I like that.

15:23 devn: ibdknox: it seems to be missing quite a bit

15:24 no interpolation is a bummer

15:24 ibdknox: devn: I didn't look much into it :)

15:24 never really wanted haml myself

15:24 Wild_Cat: while we're on the topic of noob stuff, is there a good lib, preferably in the stdlib, that I could use to scrape HTML?

15:25 mdeboard: Wild_Cat: Get used to most things not being in the std lib

15:25 Wild_Cat: ack :(

15:25 devn: this isn't common lisp! :)

15:25 ibdknox: there appears to be a scala haml impl

15:25 mdeboard: Wild_Cat: https://github.com/heyZeus/clj-web-crawler

15:25 devn: ibdknox: yeah, i'll have to do some more digging.

15:25 mdeboard: Wild_Cat: I was looking at that last night for similar reasons

15:25 Wild_Cat: devn: well, I'm a Python guy, really. That's where I got the "hey, it's in the stdlib"-itis from ;)

15:27 mdeboard: Wild_Cat: Ya ditto on that

15:28 devn: heh, I've been a Ruby guy, so "The standard library is a ghetto!" has always made me a little bit iffy about locking into stdlib

15:28 Wild_Cat: to be fair, the Python stdlib includes a lot of really dodgy stuff, and no HTML scraping lib.

15:29 devn: Wild_Cat: same with Ruby. so much of it has been abandoned or was written to work with pre-1.0 ruby

15:29 Wild_Cat: (if I'd had a dollar for every time someone came to #python trying to parse HTML with regxes...)

15:29 devn: it's a lot of garbage and a couple of useful bits

15:31 Wild_Cat: there are a bunch of options for HTML parsing. I know of html-parse which uses tagsoup, there's also a lib called apricot-soup, and a couple hundred more written in Java I'm sure that you could use from clojure

15:31 I'm sure I'm leaving dozens of options out

15:32 Wild_Cat: yeah, figures. I was mostly looking for the standard clojuric way of doing that ;)

15:33 (i.e. the local equivalent to "use lxml or BeautifulSoup"

15:33 )

15:35 devn: Wild_Cat: well, you already seem to be matching your parens. seems like you're well on your way to mastery. :)

15:35 Wild_Cat: haha

15:37 I gotta say, I still find all those parens somewhat ugly. In fact, Clojure scored tons of points in my book by using vectors for function signatures and by including set/dict/vector literals. Suddenly the code looks tons more readable.

15:39 devn: yeah, even without syntax highlighting I have very little trouble parsing clojure code due to binding forms being delimited by []s

15:39 parens in lisp and scheme are overloaded. they mean everything.

15:41 Wild_Cat: yeah, that's how I felt.

15:42 besides, I consider the dict/map an important enough data structure that it deserves syntax-level support in any language.

15:43 cgag: i feel like i've read people actually complaining about the fact that it's not all parens, which I don't get at all. The literal syntaxes are excellent imo.

15:43 Wild_Cat: practicality beats purity ;)

15:44 samaaron: are there any linux-based clojurians willing to test out the new Overtone asset manager in here?

15:50 Saturnation: asset manager?

15:50 samaaron: Saturnation: yup

15:51 Saturnation: do you rock the linux?

15:51 mdeboard: lol

15:51 brogrammers

15:51 samaaron: mdeboard: brogramming motherfucker!

15:52 Saturnation: I use the linux :)

15:52 it doesn't rock when I use it, fairly stable :)

15:52 pmooser: Hey Sam, what was the name of that input device you were using during your talk at the conj ?

15:52 samaaron: Saturnation: nice - and have you ever installed Overtone?

15:52 Saturnation: yes, but was painful :(

15:52 samaaron: pmooser: It's called a monome: http://monome.org

15:52 Wild_Cat: oh, is there a video of the Overtone conj vid? I heard it was awesome?

15:53 pmooser: Thank you

15:53 Wild_Cat: s/vid/talk/ >.<

15:53 samaaron: Saturnation: painful? How? And why didn't you share your pain on the mailing list?

15:53 Saturnation: Wild_Cat, not yet and it was :)

15:53 Wild_Cat: ffffffuuuuuuuuuu--

15:53 * Saturnation is a clojure and overtone noob

15:54 sritchie: Raynes: all done! I've got to wait for abedra and trptcolin to make me a few github projects, then I'll announce it and ping you

15:54 Saturnation: the one thing is that it doesn't seem to start the super collider server when running local or whatever it is...

15:54 sritchie: love the plugin :)

15:54 Raynes: :D

15:54 sritchie: Raynes: pardon me for asking before checking the lein-newnew source myself, BUT is it possible to keep file permissions on template copying?

15:54 Nick_1: 1

15:54 Saturnation: samaaron, for reference, I was the guy at the Overtone unconj with the computer...

15:55 s/with/without

15:55 samaaron: Saturnation: oh cool - hello :-)

15:55 Saturnation: hello :)

15:55 Raynes: sritchie: Nope. Not at the moment.

15:55 * Saturnation atempts to fire up overtone with the external server...

15:55 sritchie: no worries, thanks again

15:55 samaaron: Saturnation: did you ever get the internal server working? (use 'overtone.live)

15:56 Saturnation: I did

15:56 samaaron: perfect

15:56 Raynes: sritchie: I would accept a patch for that though. And migrate it to Leiningen.

15:56 Saturnation: is it meant to be using super collider internally?

15:56 sritchie: I'll see if I can take a peek in the next few days

15:57 samaaron: Saturnation: yep, if (use 'overtone.live) works for you, then it will have booted an internal server

15:57 Saturnation: could you do a fresh pull of the master branch on http://github.com/overtone/overtone

15:57 Saturnation: echo wasn't working when I tried some of the examples with internal server (didn't try them with the external server...)

15:57 samaaron: Saturnation: did you manage to make *any* kind of sound with the internal server?

15:58 Saturnation: OK, give a sec, was just firing up a clojar version

15:58 lots of good noises :)

15:58 loved the examples

15:58 devn: wub wub wub

15:58 Saturnation: keen to give the jazz chords a go as well

15:58 samaaron: Saturnation: ok, so it'll be a bug in the examples, not a problem with the internal server

15:58 Saturnation: cool

15:58 * Saturnation goes off to pull from github

15:58 samaaron: Saturnation: if you come across any such bugs, please either file an issue or fire off a message to the mailing lists

15:59 Saturnation: 'k

15:59 devn: samaaron: how cool is this random jazz scales thread? Apparently the key is to just incredibly open ended questions about an interesting topic.

15:59 just post*

15:59 samaaron: devn: it's crazy cool

15:59 devn: I'm just suffering from a severe loss in the family, so i haven't been able to devote too much brain time to it yet

15:59 devn: samaaron: speaking of overtone, I still need to write up those remote server notes

16:00 samaaron: sorry to hear that. :\

16:00 samaaron: devn: that would be cool

16:00 devn: me too - particularly as we don't know if it's suicide or murder

16:00 devn: samaaron: i don't even know how to properly respond to that. that's terrible.

16:01 samaaron: and both options are too hideous to contemplate

16:01 Saturnation: I can just lein swank from overtone, yes?

16:01 samaaron: devn: i don't think there is a proper response - that's why i'm still pretty numb

16:01 so i'm spending time with the family and hacking on stuff i can wrap my brains around, which currently is the asset manager stuff

16:02 Saturnation: you should just need to `lein deps` and then `lein swank` from within the freshly pulled overtone dir

16:02 Saturnation: "Warning - old config directory detected. Moved to ~/.overtone-old and replaced with new, empty config."

16:02 samaaron: Saturnation: that's a good sign :)

16:02 Saturnation: lein swank appears to have done a lein deps

16:03 Bahman: Is it possible to return a string from -main to the invoking program?

16:03 Saturnation: swank seems to have died :(

16:03 Wild_Cat: Bahman: write it to stdout

16:03 samaaron: Saturnation: oh. How?

16:03 Bahman: Wild_Cat: Is it considered "return"ing?

16:03 Saturnation: JVM segfault

16:04 samaaron: Saturnation: but you got the internal server working before?

16:04 Saturnation: :(

16:04 yes

16:04 I can act insane and try again? :)

16:04 samaaron: hmm, that's odd - i haven't touched the server code

16:04 sure, do a `lein deps` for sanity purposes

16:04 Wild_Cat: Bahman: well, the thing is, a program's return code is always an integer. For any kind of more complicated communication between processes (any processes) you'll have to use something beefier than a simple return statement in your main.

16:05 Bahman: Saturnation: If you're on Windoze, restart the computer several times to solve the problem :-P

16:05 Wild_Cat: Bahman: those ways include stdin/stdout (the parent process can read from the child's stdout and write to its stdin), files, UNIX pipes, general-purpose IPC libs like DBus...

16:05 samaaron: Bahman: I believe he's on Linux - but if there are any windows users, i'd love them to lend a hand testign out the latest overtone

16:05 Bahman: Wild_Cat: You're right. Now I recall that from C times.

16:05 Wild_Cat: yeah, it's a language-independent problem ;)

16:05 Saturnation: OK, doing lein deps

16:06 for what its worth "JackServer::Open() failed with -1"

16:06 Wild_Cat: Bahman: if you can get away with simple stdout reading, do it. ;)

16:06 samaaron: Saturnation: damned jack

16:06 Saturnation: Um, when I got it working, wasn't with github, but lein and clojars dependencies

16:07 daniel___: can anyone explain this error? https://gist.github.com/1398139

16:07 samaaron: Saturnation: sure, but I don't remember changing any jack-related code since 0.5.0

16:07 Bahman: Wild_Cat: That's a good suggestion. I just worry that if there are runtime exceptions the caller may get garbage instead of a useful result :-)

16:07 daniel___: im using openjdk6

16:07 Bahman: Or exceptions are written to stderr?

16:07 Wild_Cat: Bahman: that's where the return code comes in handy.

16:07 Saturnation: (require 'overtone.live) sufficient/correct way to do this?

16:07 samaaron: Saturnation: do you have SuperCollider installed?

16:08 Saturnation: Pretty sure I do, what's the command line for it?

16:08 samaaron: scsynth

16:08 devn: samaaron: i have noticed that a lot of the examples are out of date or are missing some info. for instance, there is composed_dubstep, but overtone.sc.machinery.defcgen seems to have moved

16:08 Wild_Cat: Bahman: if the subprocess returns 0, it means it executed correctly. Otherwise, it means an error of some sort occurred, in which case you shouldn't bother with whatever data it produced

16:08 samaaron: devn: that issue is fixed in 0.6-dev

16:08 Bahman: Wild_Cat: Thank you. That gave me an idea.

16:08 Saturnation: that's the front end, isn't it?

16:09 samaaron: Saturnation: well, it's a separate program entirely

16:09 but if scsynth is in your PATH then you're probably good

16:09 Saturnation: I'm good

16:09 from that point of view

16:09 samaaron: ok, so just stick with lein repl for the time being

16:09 Saturnation: did that, still died :(

16:10 samaaron: it dies when you do `lein repl`?

16:10 Saturnation: for sanity, going to do this from my lein project...

16:10 samaaron: Saturnation: wait a moment

16:10 devn: samaaron: should I be using the localhost server or the internal server as my default for local dev?>

16:11 samaaron: Saturnation: just for the record, you just need to type `lein repl` and the JVM crashes?

16:11 Saturnation: no

16:11 samaaron: Saturnation: well, you're rushing ahead of yourself then ;-)

16:11 Saturnation: user => (require 'overtone.live) and JVM crashes

16:11 samaaron: Saturnation: I just mentioned `lein repl` nothing else...

16:12 quotemstr: #clojure, we need to talk about keyword arguments. I'm trying to get CL-equivalent semantics. Is there a concise way to provide a list of keys, a list of default values for each key, and means to signal an error if keys not on the list are supplied?

16:12 * Saturnation waits for him to check up with himself

16:12 Saturnation: OK, reset, what would you like me to test?

16:12 samaaron: devn: this page might help https://github.com/overtone/overtone/wiki/Connecting-scsynth

16:12 Saturnation: right now, I just want to see if you can make a sound with the master branch

16:12 daniel___: can anyone explain this error? https://gist.github.com/1398139

16:12 im using openjdk6

16:13 samaaron: it seems that your jack<->overtone setup is broken

16:13 Saturnation: OK, what's the best way to make a sound?

16:13 agreed

16:13 samaaron: so i think we're best going with an external server

16:13 so for that, you don't (use 'overtone.live)

16:13 instead you (use 'overtone.core)

16:13 and then (boot-external-server)

16:14 Saturnation: don't think I ever got (boot-external-server) to work ever

16:15 but was able to start the super collider server then connect to it fully the tutorials

16:15 spoke too soon maybe :)

16:15 devn: samaaron: curiously enough I'm blowing up now on overtone.live

16:16 samaaron: devn: which os?

16:16 devn: OSX, 10.7.2, I'm using a Presonus Firestudio

16:16 samaaron: devn: I have no idea what a "Presonus Firestudio" is. Which version of Overtone?

16:16 devn: 0.5.0

16:17 samaaron: Saturnation: did booting the external server blow up?

16:17 Saturnation: nope, looked like it connected

16:17 but I accidentally killed the repl and can't get it to reconnect :(

16:17 devn: In SC: Number of Devices: 6, 0: ..., 2: ..., etc. followed by

16:17 samaaron: devn: is that a non-apple machine?

16:18 devn: input and output sample rates do not match. 44100 != 48000, could not initialize audio

16:18 samaaron: Saturnation: sounds like you're having fun!

16:18 Wild_Cat: Could Overtone be used as a VST-type audio source in a DAW?

16:18 Saturnation: :P

16:18 devn: I then start a swank server, and connect to the swank server

16:18 mdeboard: this kills the swank server

16:18 samaaron: devn: ah, that's an annoying problem - i'm not sure how to automatically fix it. The solution is to go open up Audio MIDI Setup and set the rate of built-in output to 44100Hz

16:19 devn: samaaron: will that cause overtone to crash?

16:19 samaaron: devn: yep, it causes SC to freak out, which causes Overtone to crash if you're trying to boot an internal server (internal server crashes kill the JVM process)

16:19 devn: samaaron: that fixed it. thanks.

16:20 samaaron: devn: great - i should really document that fix - unless someone knows some magic AppleSCript vodoo

16:20 Saturnation: so do you have a repl fired up yet?

16:22 Saturnation: yep, but not connected to the server... Getting a message to stop the application using hw:0, but NOOO idea what applicaiton that is :(

16:23 samaaron: Saturnation: I'm not sure what that means...

16:23 Saturnation: it means I needed to kill my browser :)

16:23 OK, I'm there and started :)

16:24 samaaron: Saturnation: great

16:24 Saturnation: so (demo (sin-osc)) works?

16:24 Saturnation: Houston, we have a beep! :)

16:24 yes it does

16:24 samaaron: Saturnation: hell yeah

16:24 ok, now for the real test...

16:24 Saturnation: Oh :)

16:24 quotemstr: Why does Clojure use vector syntax for lambda lists again?

16:24 samaaron: do a (use 'overtone.inst.sampled-piano)

16:25 Saturnation: Failed to create temporary directory after 10000 attempts.

16:25 samaaron: Saturnation: oh crap

16:25 Saturnation: :(

16:25 samaaron: i wonder why that failed

16:26 Saturnation: I have no idea, but that won't stop me from having a look...

16:26 samaaron: Saturnation: are you still keen to help out?

16:26 Saturnation: as much as I'm able to

16:27 samaaron: go into the overtone.helpers.file ns

16:27 Saturnation: use use?

16:27 OK?

16:28 samaaron: (in-ns 'overtone.helpers.file)

16:28 Saturnation: eek

16:28 samaaron: Saturnation: still with it?

16:28 devn: samaaron: where do I get mdapiano?

16:29 Saturnation: yep, but some errors or warnings

16:29 Exception Error in checker for ugen binary-op-u-gen. Error: after initialisation, not all inputs to this ugen were numbers or other ugens (inputs which are explicitly allowed to be other data types (i.e strings) will have been converted to numbers at this point): [#<sc-ugen: binary-op-u-gen:ir [2]> overtone.helpers.file] overtone.sc.machinery.ugen.specs/with-ugen-checker-fn (specs.clj:133)

16:29 sorry

16:30 samaaron: devn: mdapiano sucks - you want to use the new sampled piano in 0.6-dev

16:30 devn: but if you do want it, you need to use an external server with the bonus ugens installed

16:30 Saturnation: what did you do?

16:31 Saturnation: typed the wrong thing, sorry :/

16:31 OK, in overtone.helper.file

16:31 samaaron: devn: it would be cool to see if you can get the sampled-piano working too - just do a fresh pull of overtone in a new dir, lein deps, lein repl, (use 'overtone.live), (use 'overtone.inst.sampled-piano)

16:32 Saturnation: it should be overtone.helpers.file

16:32 Saturnation: yes, I typed badly :)

16:32 but I am there

16:32 samaaron: try (mk-tmp-dir!)

16:32 same error?

16:33 Saturnation: yep, that failed

16:33 devn: samaaron: It's downloading it now

16:33 Saturnation: Exception Failed to create temporary directory after 10000 attempts. overtone.helpers.file/mk-tmp-dir! (file.clj:339)

16:33 samaaron: devn: awesome!!

16:33 devn: samaaron: I'll say. This is crazy.

16:33 samaaron: devn: :-) It's great when things work

16:33 devn: I did not expect that at all. I assumed I'd need to go all over creation moving things into the proper directories, installing stuff, etc.

16:34 samaaron: devn: haha - Overtone is the magic source

16:34 well, only on OS X at the moment it seems...

16:34 devn: samaaron: since I'm using sampled-piano, do I just replace calls to piano with sampled-piano?

16:34 samaaron: devn: yup

16:35 devn: and once you've downloaded it, it's cached in your ~/.overtone dir

16:35 Saturnation: try (System/getProperty "java.io.tmpdir")

16:35 devn: samaaron: I'm trying to run the example Jeff Rose posted

16:35 Saturnation: it's /tmp

16:35 just looking at the code now

16:36 samaaron: devn: did it download already?

16:36 devn: He built a player fn that took piano as its second arg

16:36 ah, wrong number of args

16:36 * devn opens up source

16:36 samaaron: devn: does (sampled-piano 60) work?

16:37 devn: samaaron: no unfortunately

16:37 samaaron: Saturnation: could you try evaluating (System/getProperty "java.io.tmpdir")

16:37 Saturnation: I did, it's tmp

16:37 samaaron: devn: oh - did it download successfully?

16:38 devn: samaaron: "Download successful", yes

16:38 Saturnation: just walking through the code at the repl now

16:38 samaaron: Saturnation: the output is "tmp"?

16:38 Saturnation: not "/tmp"

16:38 devn: could you take a look inside ~/.overtone/assets

16:39 devn: samaaron: I think it is actually playing, but it's not being routed to the right outputs

16:39 Saturnation: it is the tmp directory "/tmp"

16:39 samaaron: Saturnation: ok, great

16:39 Saturnation: samaaron, give a few minutes, I'll chase this one down...

16:39 devn: (sampled-piano 60) => 28, (sampled-piano 60) => 29, etc.

16:39 so it looks like it's working, but the output is wrong

16:40 samaaron: devn: the 28 and 29 are the synth ids

16:40 devn: does (demo (sin-osc)) work?

16:40 devn: samaaron: *nod*, my firestudio uses output 3/4 instead of 1/2 for the headphones

16:40 so that's where the issue is I think

16:40 Saturnation: I think the issue may be that it's /tmp and not /tmp/?

16:41 samaaron: devn: weird that the sin-osc plays though

16:41 Saturnation: nope, not right...

16:41 devn: samaaron: it doesn't

16:41 samaaron: do you know how to set the outputs explicitly to be 3/4 instead of 1/2?

16:41 samaaron: devn: ah, so you can't get any sound?

16:41 devn: samaaron: correct

16:41 samaaron: devn: where i come from *nod* means yes ;-)

16:42 devn: samaaron: ah, well it does "work", but I just don't hear it

16:42 :)

16:42 samaaron: devn: also 0 is typically left and 1 is right

16:42 so you might be on 2/3

16:42 Saturnation: I was right

16:43 samaaron: devn: but i have no quick solution for routing output to 2/3

16:43 Saturnation: samaaron, the file to string doesn't print the trailing / on directories it would appear

16:43 samaaron: Saturnation: cool - swap str with mk-path in the second line of the let clause after base-name

16:44 * Saturnation just throw in the "/" after the tmp-dir

16:44 samaaron: Saturnation: we need to deal with windows which uses \

16:45 quotemstr: *sigh* Also, is anyone working on fixing contrib.error-kit to work with 1.3?

16:45 * Saturnation is just in debug mode

16:45 Saturnation: it's downloading now :)

16:45 quotemstr: contrib.error-kit is relying on the implicit dynamicness of *variables*.

16:45 samaaron: please try mk-dir - so i know i have a fix

16:45 devn: samaaron: regardless, how would one go about changing the outputs for a selected output device. I have 6 outputs and I just need to change which ones it is using

16:45 Saturnation: OK

16:45 samaaron: devn: i honestly don't know

16:46 devn: i'll have to think about it

16:47 Saturnation: nope, didn't like mk-path :(

16:47 samaaron: devn: we've ever considered 2 channels - 0 and 1

16:47 Saturnation: ah, my bad - that wouldn't work

16:48 Saturnation: it looks correct when printed out...

16:49 samaaron: Saturnation: could you try this: https://gist.github.com/1398198

16:50 devn: so would would a solution look like for you?

16:50 devn: samaaron: i switched the cable and sure enough it is sending to 1/2 instead of 3/4

16:51 samaaron: devn: so you have sound now?

16:51 devn: well, sort of

16:51 samaaron: only the right channel works?

16:51 devn: my external device has a number of inputs and outputs

16:51 Saturnation: yay! :)

16:51 downloading now

16:52 samaaron: Saturnation: nice

16:52 devn: the default outputs are split left and right, but I use the output for headphones which is 3/4

16:52 samaaron: devn: if you unplug the external device, can you make a sound?

16:52 Saturnation: you did the hard bits

16:52 3% complete, this may take some time

16:52 samaaron: Saturnation: :-)

16:52 devn: samaaron: i know for a fact i can make sound, im just trying to figure out how to tell supercollider to use different default outputs

16:52 Saturnation: brb

16:53 devn: it has 6 outputs to choose from, it chooses the first two it sees. I want to tell it to use different ones

16:53 samaaron: devn: ok

16:53 devn: the mailing list might be the best place for this

16:54 devn: so with your external device, you have 0 and 1 on speakers and 2 and 3 on headphones?

16:55 devn: samaaron: in OSX they get referred to in the audio midi setup as: Master, 1: DAW 1, 2: DAW 2...6: DAW 6

16:55 1 is Left, 2 is Right, 3 and 4 map to the headphone output

16:55 samaaron: devn: annoyingly supercollider is zero-indexed

16:56 so (demo (sin-osc)) comes through the speakers, but not the headphones?

16:57 devn: samaaron: i moved the cable I had going from my headphone out to my speakers, and changed it to be the first output on the device (which is Left) going to the speakers

16:57 Saturnation: my new tag line may have to be "I'm Sam Aaron's code monkey..." :)

16:57 devn: I can get sound this way, but it is on one channel

16:57 samaaron: Saturnation: code monkey boy, code!

16:57 devn: the demo will be one channel only

16:57 Saturnation: 30%

16:58 samaaron: devn: can you hear the sampled-piano?

16:58 even only on one channel?

16:58 devn: samaaron: yes, out of one channel, because i have two outputs, one of them is left, the other is right. do you see what I mean?

16:58 samaaron: YEY!

16:58 so the asset manager thingy is working

16:58 devn: It is using the first outputs it finds. I want to say: no. start here instead.

16:59 or no, use these specific outputs

16:59 samaaron: devn: that's not built in yet

16:59 duck1123: I just set up Overtone and played through the samples on the wiki. Pretty neat

16:59 samaaron: duck1123: brilliant

16:59 devn: samaaron: it seems like it must be. People have to have needed this in supercollider before.

16:59 samaaron: devn: oh, outputting to specific channels is

17:00 devn: yes, how do I do that?

17:00 samaaron: you'd have to write your own synths

17:00 devn: wha? this seems crazy. I'll figure it out

17:00 samaaron: devn: it's only crazy because you're the first to try to get Overtone working with a crazy powerful external device

17:01 Overtone tries to make things easy for people

17:01 devn: samaaron: I think we are misunderstanding eachother.

17:01 samaaron: and so far everyone has just got stereo systems

17:01 but if you stick to the primitives, you should be fine :-)

17:01 devn: This is not a problem with overtone. it is a supercollider setting or a hardware setting. I'm trying to determine how to get supercollider to change it's default outputs, not overtone.

17:01 samaaron: try: (demo (out 3 (sin-osc)))

17:01 devn: overtone should just send where supercollider knows to send to

17:02 samaaron: devn: I don't think you can get supercollider to change its default outputs

17:02 devn: it's crazy low-level like that - we probably need to build those smarts into overtone itself

17:02 devn: just like the noise limiting system i built

17:02 devn: samaaron: zero indexing indeed!

17:02 samaaron: devn: which you would expect sueprcollider to have

17:03 devn: (demo (out 2 (sin-osc))) and (demo (out 3 (sin-osc))) are where I want to send

17:03 samaaron: perfect

17:03 ok, we need to think of a nice solution for overtone to handle this case

17:04 so you essentially want to offset all output by n channels?

17:04 devn: yeah, basically

17:04 samaaron: so you'd lose access to 0 and 1

17:04 but that would be ok?

17:05 devn: samaaron: yeah, that'd be fine -- i think the ideal solution would be something like:

17:05 (defchannel speakers [0 1])

17:05 or something like that, so you could define channel output groups to send to

17:06 samaaron: devn: yeah, maybe - ideas like that will need a lot of fleshing out

17:06 we could definitely do with this kind of abstraction though

17:07 we want to move away from supercollider's super low-level attitude to everything

17:07 Saturnation: 83%

17:08 devn: samaaron: yeah, i don't mean to be a pain, honestly this could be fixed by just getting a couple of cables out of a box, but based on my experience with other applications like logic pro, etc. you can just say: "for this track, send output to 3/4"

17:08 I figured the same would be true for supercollider

17:09 samaaron: devn: we have to start somewhere :-)

17:10 Saturnation: be pleased you're getting % updates - I worked on that today :-)

17:10 Saturnation: something to do while we wait :)

17:10 samaaron: :-)

17:11 devn: btw, if i'm coming across less friendly than usual - my apologies, but my mind isn't where it normally is

17:11 devn: samaaron: nono, not at all, i'm struggling to explain my setup and there were some small hurdles with 0 indexed outputs and so on

17:11 samaaron: thanks for your help

17:11 Saturnation: Houston, we have sampled-piano!

17:11 samaaron: Saturnation: very cool

17:11 so linux is in the house

17:11 Saturnation: anything else?

17:12 samaaron: Saturnation: yes - you now need to have fun with it! :-)

17:12 Saturnation: devn: thanks so much for your help

17:12 Saturnation: thank you for all the work you've put into it

17:12 I'll do my best to play later

17:12 devn: samaaron: annnddd I fixed it.

17:12 * Saturnation heads off to eat

17:12 samaaron: Saturnation: youan thank me by having fun with it

17:13 s/youan/you can/

17:13 devn: what did you do?

17:13 devn: samaaron: I opened up the configuration utility that came with the device that up until now seemed useless

17:13 and I switched outputs 3-4 to be mixer instead of 1-2

17:14 samaaron: devn: ah, so you found a device-oriented fix?

17:15 devn: samaaron: *nod*

17:15 samaaron: devn: cool

17:15 devn: <-fool

17:15 samaaron: devn: although i still think you raise some important points

17:15 devn: overtone should also be able to handle this sort of thing

17:16 devn: now to figure out how to get this to play with sampled-piano instead of piano

17:16 piano sure took a lot of args

17:18 samaaron: will there be additional params added to sampled-piano to set the length?

17:19 samaaron: devn: perhaps - it's just a pre-recorded sample being played back

17:19 devn: we could run an envelope over it

17:20 devn: but it does sound *much* better than the synth piano

17:21 devn: happy to accept sample-piano improvement patches. I've not put any time into it - I just got it working. My efforts have been put into the asset manager stuff

17:22 Overtone can now reference arbitrary wav files on thh web and cache them locally

17:22 I feel like it's a huge step forward

17:28 kylert: \exit

17:28 lnostdal: does clojure hava a "common" (parent) data type that covers all integer types?

17:30 devn: samaaron: muahaha, sorry, got totally distracted with playing generated jazz progressions

17:31 Raynes: lnostdal: Number, I'd think.

17:31 lnostdal: but that covers non-integer types too, Raynes

17:32 Raynes: Oh, Integer types.

17:32 Sorry, I've been awake for too long.

17:32 lnostdal: :)

17:32 samaaron: devn: that's ok, i got distracted by the cat wanting some fuss

17:32 now it's time for bed

17:32 devn: it's super cool that you're having fun with the jazz progressions :-)

17:32 devn: samaaron: thanks for the help. feel better.

17:32 Raynes: http://raynes.me/hfiles/mraow.mov

17:33 samaaron: devn: i'll try - but i'm sure it'll take quite some time

17:33 Raynes: <3 cats.

17:35 gfredericks: Raynes: they're fluffy.

17:35 Raynes: gfredericks and cute. :>

17:36 gfredericks: Raynes: that'd be an interesting slogan for me

17:36 Raynes: Yeah, linkinus decided to not put a semicolon there.

17:36 gfredericks: now I'm imagining it as the subtitle of a movie

17:42 technomancy: Raynes: seeing the backscroll about permissions, you can't actually read or set octal permissions until JDK 7

17:42 you can just set the executable bit

17:43 Raynes: technomancy: Ah. Makes sense. /cc sritchie

17:43 technomancy: well... I would posit that it does not make sense.

17:43 but that's how it is

17:48 danlarkin: because permissions aren't a feature of all the platforms to which java has been ported

17:48 therefore it cannot be supported

17:48 it's genius!

18:02 zakwilson: I had no idea Raynes was a teenager. On the internet, nobody knows you're a dog.

18:05 Raynes: zakwilson: Indeed.

18:06 zakwilson: Well, good work. I know I'm using a library or two you've written somewhere, and that's more than I've contributed to any open source community as far as I'm aware.

18:06 Raynes: Heh, thanks.

18:18 alexbaranosky: hey guys, is cake still going to exist after the merger with Leiningen?

18:19 Raynes: alexbaranosky: It isn't going to be taken down and eliminated from the internet, one file system at a time if that's what you mean.

18:19 It'll only be actively developed as long as we still need it for our projects at Geni.

18:19 Which realistically means a couple of months, probably.

18:21 alexbaranosky: Raynes, I tried to download it via the script I found on the site, but the url wasn't found

18:21 Raynes, I'm wondering if I should be keeping the cake-midje plugin up to date with the lein one

18:21 Raynes: Don't bother.

18:22 As for the URL problem, no clue. It's been down for a while and I'm unclear about whether or not it is intentionally not being brought back up.

18:24 alexbaranosky: Raynes, thanks for the info, I now know I can leave cake's Midje plugin to rot :)

18:25 Raynes: Feels good, doesn't it? Being able to only maintain one thing.

18:25 alexbaranosky: yes, especially since I don't even have cake setup on my machine -- I couldn't even get past that one initial stage =D

18:31 zakwilson: What's this? Lein/cake merger?

18:32 ibdknox: and the people rejoice :)

18:32 zakwilson: Yes, probably a good thing.

18:33 ibdknox: definitely a good thing!

18:33 zakwilson: Hey, wait. You're the korma guy, aren't you?

18:33 ibdknox: maybe

18:33 :)

18:33 zakwilson: Yes if I have a compliment, no if I have a complaint?

18:33 ibdknox: basically.

18:33 haha

18:33 What's up?

18:34 zakwilson: I haven't used it yet. I did poke around the site and source though. What does it do with dates?

18:34 ibdknox: JDBC turns them into java.sql.TimeStamps

18:34 alexbaranosky: zakwilson, if you're looking for help with your love life, korma's not that kind of thing

18:35 ibdknox: everyone loves indian food!

18:35 :p

18:35 zakwilson: alexbaranosky: I disagree. My girlfriend loves it when I make curry.

18:35 ibdknox: mine does too :D

18:35 zakwilson: Are java.sql.TimeStamps those horrible things based on java.util.Date?

18:36 ibdknox: I believe so

18:36 I just convert them into millis

18:36 that isn't specific to Korma though

18:36 all java.jdbc will do that

18:36 I believe

18:37 zakwilson: Right, I had that impression. I wonder how hard it would be to make it use clj-time.

18:37 And what were the people who wrote the Java data libraries smoking?

18:37 ibdknox: lol

18:37 well the trivial solution is to just convert them

18:38 fixing the use of java.sql.timestamp would likely mean changing the sql drivers

18:38 which isn't worth the effort

18:39 zakwilson: http://pastebin.com/CUyv7rSA <-- is this reasonable, or is there a better way?

18:41 ibdknox: not sure, like I said, I always just convert to millis :)

18:43 zakwilson: Fair enough. Thanks for trying to make the nasty little problems a little nicer. SQL has the most horrid syntax....

18:44 ibdknox: haha you're telling me, ugh

18:44 people keep telling me about quirks between them

19:02 zakwilson: Yeah, that's potentially nasty too. I think it actually might be better if databases all had different query languages and abstraction was done at the library level.

19:11 gfredericks: zakwilson: we could call it JDBC

19:12 ibdknox: lol

19:16 zakwilson: JDBC, as I understand it doesn't abstract away any of the differences in SQL.

19:16 gfredericks: oh. then that would be a bad name for it.

19:17 maybe korma?

19:17 amalloy: yes it does

19:18 eg getting table metadata takes different describe commands in postgres vs mysql,. but i'm fairly sure it's the same in jdbc

19:18 zakwilson: Of course, I haven't used JDBC directly and don't know what the hell I'm talking about.

19:19 ibdknox: JDBC does do some unification

19:19 though it doesn't unify SQL differences itself

19:19 things like "AS" for example

19:20 basically it's a mess :)

19:21 zakwilson: I bet half the nosql movement wouldn't exist if relational databases came with a nice query language.

19:21 ibdknox: hm, how would you do it better?

19:22 Raynes: He wouldn't do it at all and would instead opt to write things his application needs to store down on paper and place them in file cabinents.

19:22 ibdknox: woah

19:22 that's awesome, isn't storage space pretty limited though?

19:22 zakwilson: It has already been done better, I suspect. QUEL looks like a nicer language than SQL.

19:23 ibdknox: how's lookup time?

19:23 gfredericks: ibdknox: I think your wrist would be the bottleneck before the cabinet size would be

19:23 ibdknox: lol

19:23 true

19:23 zakwilson: To generalize, I'd give it a more regular syntax and try to make it easy for the query language to be a compiler target.

19:23 gfredericks: hence cabinet size is effectively infinite, and we all need to switch to cabinet-persistence

19:24 ibdknox: zakwilson: my sql compiler is < 500 lines

19:24 zakwilson: I'd probably just make it based on data structure literals. I suspect it would look lispy.

19:25 ibdknox: SQL would be fine if everyone adhered cleanly to the specs

19:26 and for the most part they do

19:26 otherwise korma wouldn't work at all

19:26 lol

19:26 zakwilson: As a compiler target, sure. As a language for using directly... it's pretty bad.

19:27 tolstoy: The guys I knew who worked a lot with it would always "tune" queries to appeal to the underlying engine. And re-arrange tables to work at "scale". The promise of SQL sort of disappears after a while.

19:27 ibdknox: that's true

19:28 zakwilson: The relational model is actually pretty nice for most apps, but real databases feel like they're from the stone age.

19:28 gfredericks: funny when the stone age things are the ones with all the features

19:28 tolstoy: Yeah, I like SQL if I get to use it without thinking about "performance" and so on. Nice and declarative.

19:29 gfredericks: and the new things are the simple ones

19:29 amalloy: seancorfield: is your clj-time repo the official one?

19:29 Raynes: It is.

19:29 ibdknox: what happened to the other one?

19:30 huh

19:30 I missed this... when did getwoven disappear?

19:30 and why?

19:32 zakwilson: SQL is declarative, but it isn't very nice. Mixed prefix, infix and postfix, prepositions that don't actually do anything, but have to be there, different syntax for closely related operations (I'm thinking of create/alter and insert/update)

19:33 If I tried to push a programming language with nice semantics (say... those of Clojure) and a syntax like that, somebody would probably force me to have a psych evaluation.

19:33 * ibdknox points at JavaScript

19:33 ibdknox: :D

19:33 zakwilson: JS has some warts, but it's no SQL.

19:33 gfredericks: o_O

19:33 ibdknox: ...

19:34 gfredericks: I think in terms of obvious ways it could have been better....

19:34 tolstoy: zakwilson: I guess so. But when faced with an SQL string vs Hypernate (or some such scheme)….

19:34 zakwilson: PHP is bad too, but everyone here probably knows that already.

19:34 tolstoy: Hibernate? Something like that.

19:34 ibdknox: PHP is bad for very different reasons than JS

19:34 zakwilson: I've never used Hibernate. The only ORMs I've used a clsql and activerecord.

19:34 ibdknox: and very different reasons the SQL

19:35 gfredericks: I can't imagine anyone choosing to use JavaScript if it hadn't been defaulted on them

19:35 zakwilson: Are you aware of node.js? It's the latest trendy thing. Everybody's doing it.

19:35 gfredericks: yes I am.

19:35 ibdknox: because they started with JS

19:35 zakwilson: (except me - I'm with you on that - don't see the point)

19:36 tolstoy: My boss LOVES node.js. I keep getting hints. Like "Threaded app servers are a legacy architecture."

19:36 ibdknox: haha

19:36 I've tried building something large and performant in node

19:36 It was painful

19:36 and not performant :)

19:37 zakwilson: Using events by default seems backwards. Most things you'd want to do probably shouldn't be event-based. Futures are nice.

19:37 tolstoy: Seems like it might be okay for a simple, single-purpose API, but I end up writing apps which have (say) and MQ broker sending stuff out, or what have you, and I don't see how node handles that.

19:37 Erlang, on the other hand....

19:37 ibdknox: zakwilson: are you zak on HN?

19:38 tolstoy: zakwilson: I've been trying to find research about events vs threads, and I can't make much sense of it. events for mostly do-nothing, long-running connections, threads for quick request/response. *shrug*

19:38 zakwilson: ibdknox: yes

19:39 tolstoy: thread pools managed by your runtime for all of it.

19:39 tolstoy: zakwilson: By "much sense" I mean most of it seem alike advocacy.

19:39 ibdknox: zakwilson: did my response on the reasoning behind Korma answer your question?

19:39 zakwilson: tolstoy: oh, of course it is.

19:40 ibdknox: yes. I'm convinced enough to give it a try on the project I should work on later tonight after I get the project I've been procrastinating on done.

19:40 ibdknox: haha

19:40 use 0.3.0-alpha5

19:41 Raynes: ibdknox: We require new noir version with new lein-noir version using my fork.

19:41 zakwilson: Why?

19:41 clojurebot: why not?

19:41 ibdknox: Raynes: haha we require it, huh?

19:41 alexbaranosky: ~shrimp

19:41 clojurebot: shrimp are small

19:42 Raynes: ibdknox: I REQUIRE IT.

19:42 (require new.lein.noir.version)

19:43 ibdknox: well

19:43 I think 1.2.2 will be coming out next weekend probably

19:43 I need to do a docs pass

19:44 Raynes: Acceptable.

19:44 ibdknox: Have you considered marginalia? As in, would you accept a patch to add marg docs?

19:44 zakwilson: Why do I want to use the alpha? Will it differ greatly from the docs?

19:44 ibdknox: zakwilson: bug fixes, and a better syntax for with

19:45 Raynes: marg couldn't run over the project last time I tried

19:45 Raynes: ibdknox: Bullshit.

19:45 Give me 20 seconds.

19:45 ibdknox: Raynes: hah

19:45 Raynes: I'm the bloody king of marginalia.

19:45 gfredericks: one of those bots needs a stopwatch

19:45 ibdknox: Raynes: there was some issue with having hiccup in it

19:51 ambrosebs: who's got a Confluence admin account? My account needs editing privs (ambrosebs)

19:51 please

19:56 devn: ambrosebs: any rush? i think i saw you posted to the ML about this, yeah?

19:56 ambrosebs: :) just excited about creating a page for compiler hooks

19:57 I can wait

19:57 ibdknox: compiler hooks?

19:58 ambrosebs: currently there is no entry point for customizing the compiler

19:58 devn: ambrosebs: I don't have admin. Sorry man.

19:58 ambrosebs: for example, I want to perform some type checking when every top level form is evaled

19:58 or "analyse"d

19:59 ibdknox: I see

19:59 ambrosebs: much easier to target Clourescript atm

20:00 ibdknox: yeah, there was talk of this at the Conj

20:00 about exposing analysis

20:00 it would be very useful for tools :)

20:01 devn: ibdknox: you need some noir and pinot logos

20:02 ibdknox: as I am a mediocre visual designer, I always do text logos :)

20:02 Pinot needs to have a real release too

20:02 devn: ibdknox: if i came up with a couple for you to peek at maybe?

20:03 ibdknox: sure!

20:09 devn: I'm not so great at it myself, but I've been trying to learn. I have an eye but I don't know a lot of the tools well enough to make what I want.

20:10 ibdknox: devn: yeah, I'm the same. Worked with some world class designers, so I *know* good graphic design, I just haven't worked enough at it to get above "meh"

20:13 devn: your colors are really nice

20:22 brehaut: ibdknox: it makes a huge difference having worked with good designers though

20:23 ibdknox: brehaut: yes it does

20:23 brehaut: you do internalize a lot of the smaller details

20:25 devn: ibdknox: https://skitch.com/thinkslate/gma6i/noir

20:25 ibdknox: ;)

20:32 ibdknox: that is of course, a picture of dick tracy

20:33 alexbaranosky: devn, ibdknox: Dick Tracey is of course, the shit

20:34 devn: hah

20:34 alexbaranosky: devn: did I see you had an autotest project on github?

20:35 or lazytest - something near to that

20:38 devn: alexbaranosky: I'm cleaning up my github, that's Stuart Sierra's

20:40 alexbaranosky: Are there any Boston-area Clojure jobs with opening these days? I'd love to be going to work tomorrow to do Clojure instead of Java/Scala... I know there's Sonian, but not sure if they're hiring.

20:55 devn: alexbaranosky: careful, this channel is logged publicly

20:55 :)

20:55 alexbaranosky: ha

20:59 tolstoy: I have to admit, being able to use a Mac and work in a fun language (Clojure, Erlang, even Scala) would be a plus for me, but what I'd REALLY like is a shop with clear business goals. Even if they last one month at a time.

21:01 devn: tolstoy: what if they last for more than a month but they aren't your own?

21:01 i don't know that i value consistency over evolvability

21:02 tolstoy: devn: I value clarity, more and more.

21:02 devn: but maybe that is a false dichotomy

21:02 tolstoy: Yeah.

21:02 devn: a thing can be consistent in its evolvability, or evolvably consistent

21:03 tolstoy: A lot of times we argue for this or that architecture, this or that technology choice. The sad thing is, just about anything can work. But clear business goals help focus the decisions.

21:03 devn: tolstoy: to what end?

21:04 tolstoy: To the end of achieving the goals.

21:04 devn: goals are too specific IMO. "intentions" are more important.

21:05 they're more malleable.

21:05 tolstoy: Well, hm.

21:06 Maybe we mean the same thing with goals/intentions.

21:06 devn: maybe. but goals are often hard-coded. "this is the concrete goal"

21:06 alexbaranosky: tolstoy, you're just saying you want to work somewhere with direction?

21:06 tolstoy: I don't mean, "A web form with three fields," as a goal, for instance. But it would be nice to know if keeping petabytes of data for 10 years is a goal.

21:07 alexbaranosky: Yeah. Well, I mean, over time, I find myself less concerned with my tools, and more interested in having clarity on the problem I need to solve.

21:07 devn: concreteness in the face of uncertainty seems foolish, which is why i prefer to think of intentions instead. if our intention is to get a lot of users, that is different from a goal of getting a lot of users. one of them is a finish line, the other is a sequence of possible finish lines

21:08 tolstoy: Or maybe more accurately, why these problems and not others need to be solved, or the context in which the problems are even meaningful beyond just your boss telling you to do it.

21:08 devn: heh, well, that is one for the ages.

21:08 alexbaranosky: tolstoy: I agree, to an extent, but certain tools are better fits for certain jobs, and certain tools are just better all around - just mho

21:09 tolstoy: alexbaranosky: Yep. I agree wholeheartedly.

21:09 mdeboard: Noir's philosophy in 38 seconds: http://www.youtube.com/watch?v=USlnfTGlhXc

21:10 devn: mdeboard: hahahahaha

21:10 tolstoy: Heh. That's what I tell all my slaves.

21:11 mdeboard: devn: ibdknox's post on the listserv reminded me

21:11 devn: mdeboard: we should put stuart halloway's face over bruce lee's

21:14 alexbaranosky: Would anyone local to the Boston are be interested in getting together for Clojure hacking sessions?

21:15 actually that might be a good question for the mailing list

21:15 tmciver: alexbaranosky: absolutely!

21:15 devn: alexbaranosky: start a meetup

21:15 alexbaranosky: dev: do you have your graphic design software out to get to work on that?

21:16 tmciver: are you around beantown? I'm in E. Boston

21:16 tmciver: There is a Boston Clojure meetup already and they're due for another one soon.

21:16 tolstoy: mdeboard: That post is great.

21:16 tmciver: alexbaranosky: yeah, north of Boston

21:16 mdeboard: tolstoy: It is indeed

21:16 I don't compare just anyone to Bruce lee

21:17 alexbaranosky: tmciver, yeah, but they're so infrequent, and also, I think it'd be cool to focus on contributing to open source

21:17 tmciver: I didn't meet you at the Conj did I ?

21:18 tmciver: alexbaranosky: I'm not sure :\

21:18 alexbaranosky: tmciver: me neither hehe

21:19 tmciver: alexbaranosky: are you a member of the Boston meetup group?

21:19 alexbaranosky: tmciver: I am - I was at the last one with the angry Racket programmer

21:19 tolstoy: mdeboard: I get the idea that ibdknox has begun to think of web development as a fine art. I like it.

21:20 tmciver: Oh yeah, we did meet! :)

21:21 alexbaranosky: tmciver: is your name Tim? I think Rob and I might have talked to you about our BAZNEX group??

21:21 lazybot: alexbaranosky: Definitely not.

21:21 tmciver: Yes, I was just trying to remember that name.

21:22 alexbaranosky: well, we were sortof thinking that something like that, but only for Clojure programmers might be interesting, because we could send out messages to the different lips/clojure groups locally and get more people to hack with

21:23 tmciver: http://groups.google.com/group/baznex

21:23 tmciver: alexbaranosky: Yeah, I was just checking it out. Did you guys ever meet at Sprout?

21:24 alexbaranosky: probably this wweek, the day before thanksgiving was a dumb idea

21:24 mdeboard: tolstoy: He's been doing it a long time, he probably doesn't even see the numbers anymore; all he sees now is blonde, brunette, redhead.

21:26 tmciver: alexbaranosky: I'll definitely be at the next meeting if I can make it.

21:27 alexbaranosky: tmciver: how much time in advance is it best for you to know, for scheduling? We've been being very impromptu about it, but that should really change - we should make the schedule firmer for people like you who have to travel into Boston a little

21:29 tmciver: alexbaranosky: it's no problem. I work in Cambridge and have been going into town from work occasionally lately. I'm flexible.

21:30 alexbaranosky: in fact, I'll sign up for the google group now.

21:30 alexbaranosky: tmciver: great, we always talk on the google group about upcoming gatherings

21:31 I've hit a bit of a wall in adding method stubbing/mocking to Midje

21:31 mdeboard: Indianapolis y u no have clojure meetups

21:31 tmciver: alexbaranosky: Done. So is there a meetup planned for Wednesday?

21:31 alexbaranosky: mdeboard, why u no started one?

21:32 mdeboard: alexbaranosky: I don't have the time or I would have already

21:32 alexbaranosky: let me post about it. I think yes is the answer

21:32 time is an underrepresented form of wealth

21:33 mdeboard: alexbaranosky: Indeed. Single parenthood + an hour-long commute every day = huge time drain

21:33 gfredericks: make the kid do the commute instead: both problems solved.

21:35 alexbaranosky: hey tmciver: just add yourself to the thread I started saying you're interested :)

21:38 tmciver: alexbaranosky: Done.

21:41 alexbaranosky: tmciver: great. !

21:41 it's always good to bring your laptop, since we pair a lot on stuff, more laptops is best

21:45 tmciver: alexbaranosky: Yup, I was going to anyway.

21:50 alexbaranosky: Wednesday is the 30th . . .

21:50 alexbaranosky: did you mean this Wednesday?

21:50 alexbaranosky: crap

21:50 hehe

21:51 let me fix post again. I'll add your interest to my post, so you don't have to post again

21:51 tmciver: cool

21:51 alexbaranosky: I looked at the calendar for November... durrr

21:51 tmciver: and you call yourself a geek . . .

21:51 alexbaranosky: I'm a dumb geek though

21:52 tmciver: It's OK, me too.

22:02 quotemstr: What's wrong with (use 'clojure.string '(split)) ?

22:04 tmciver: quotemstr: are you referring to the warnings from name conflicts?

22:04 trptcolin: ,(use '[clojure.string :only [split]])

22:04 clojurebot: nil

22:04 quotemstr: trptcolin: The documentation says "list", so I thought round brackets.

22:04 trptcolin: that'll work too

22:04 quotemstr: tmciver: I'm trying to work around those warnings.

22:04 trptcolin: ,(use '[clojure.string :only (split)])

22:04 clojurebot: nil

22:04 quotemstr: user=> (refer 'clojure.string :only '(split))

22:04 Exception No namespace: clojure.string clojure.core/refer (core.clj:3761)

22:05 use gives the same error.

22:05 trptcolin: you need the whole thing wrapped in a vector like mine

22:06 quotemstr: Ah!

22:07 trptcolin: it would be nice to have an examples in the use docstring, but until then: http://blog.8thlight.com/colin-jones/2010/12/05/clojure-libs-and-namespaces-require-use-import-and-ns.html

22:08 err, pretend i know about grammar and that i said "an example"

22:08 quotemstr: Okay, (use '[clojure.string :only (split)]) works but (use '(clojure.string :only (split))) doesn't.

22:09 Aren't both just seqs?

22:09 Is there a way to just refer to string.split directly?

22:10 trptcolin: libspecs have to be vectors

22:10 or symbols

22:10 quotemstr: Actually, that reminds me: if I'm storing pairs of things, should I use a two-element vector, a two-element list, or something else?

22:11 amalloy: two-element vectors are most common

22:11 quotemstr: Aha!

22:11 Thanks for the blog post.

22:12 And while we're on namespaces: I want to load-file, but in the context of a particular namespace (or a particular lexical environment, more generally). Is there a high-level way to do that?

22:12 And in the repl, once I (ns foo), doc no longer works. Where does it come from?

22:12 amalloy: you can't really eval code in a non-null lexical environment

22:12 quotemstr: Ah, repl.

22:13 amalloy: Well, I want to load a configuration file, and I want to define some primitives for the configuration file to use.

22:13 amalloy: (eval `(let [...] ~(read the file)))

22:14 is the only way i can think to do it

22:20 quotemstr: Or just have the configuration file begin with a namespace directive. I'll just do that.

22:20 Thanks.

22:21 Actually, one more thing: using immutable locals is _very_ inconvenient in some cases. One example is doing some complex text layout where multiple sets of coordinates need to be maintained and updated.

22:21 How bad is it to use vars even when there's no thread-dependent state?

22:22 amalloy: vars are usually the wrong tool. a ref or atom makes more sense, if you can't restructure it to be immutable (which is always possible, of course, but might not be most convenient, as you say)

22:23 quotemstr: Using a ref for something only modified by one thread feels wrong somehow.

22:23 amalloy: not as wrong as a var for something that isn't top-level

22:24 quotemstr: Hrm, okay.

22:24 Why is #' a reader macro? Is (var foo) all that common?

22:24 amalloy: plus they're move convenient anyway, with alter/swap! functions instead of var-set/var-get

22:25 huh, good question. it does seem like an odd choice, just to save three or four characters

22:28 perhaps it's a remnant from a time when vars were more-special in some way, and (var foo) didn't exist

22:28 but that's just a crazy guess. who can know why rich added #'

22:30 quotemstr: Well, it does conveniently stomp on a common CLism. :-)

22:30 amalloy: i don't get "stomp on" in this context. i mean, i know what #' does in CL, but...?

22:31 quotemstr: It conflicts, that's all.

22:31 It's still habit to write #'function.

22:32 amalloy: quotemstr: well, that still works

22:32 &(map #'inc [1 2 3 4])

22:32 lazybot: ⇒ (2 3 4 5)

22:32 quotemstr: Oh, right.

22:32 Because functions are vars.

22:32 amalloy: it's a bad habit, but not an actual problem

22:32 because vars are functions

22:32 or i guess you could think of it that way

22:32 quotemstr: amalloy: The other way around, yes?

22:33 amalloy: &(ifn? #'inc)

22:33 lazybot: ⇒ true

22:33 amalloy: vars are functions which, when called, delegate to their current value'

22:33 whereas not every function is a var

22:34 quotemstr: Ah.

22:34 So that's why all defs are highlighted in font-lock-function-name-face.

22:38 amalloy: i doubt if that's related. it's not like the parser knows "clojure thinks this is a function"; whoever wrote the syntax highlighter just figured things you def at the top level should stand out and might as well be highlighted as functions

22:39 trptcolin: before i post this to the dev list, anybody see anything silly i'm missing with this clojure.java.io issue? https://gist.github.com/1398972

22:40 i have a patch ready for it, just would love another set of eyes - getting shot down over IRC doesn't hurt as bad

22:42 amalloy: trptcolin: doesn't really seem like an issue related to java.io, does it?

22:43 trptcolin: i feel like the Coercions protocol should handle the encoding/decoding

22:43 as-file / as-url

22:43 ambrosebs: gtrak: you might be interested in following this project https://github.com/frenchy64/typed-clojure

22:43 amalloy: jio/resource is just delegating to .getResource on the classloader

22:43 trptcolin: yeah jio/resource is cool

22:44 but when readers & writers get constructed, that's the problem

22:44 amalloy: maybe you could clarify what change you plan to make?

22:45 trptcolin: yep, that'll help :)

22:45 https://gist.github.com/1398988

22:49 .toURL is what's currently used on the File (as-url ...) coercion, and that's deprecated in java 1.6; but my real issue is with slurping resource URLs, and i'm feeling decent about the change

22:50 but usually when i feel this confident about a problem in clojure i'm wrong :)

22:52 i guess normally resources are in jarfiles, so things like spaces would be much rarer...

22:54 technomancy: trptcolin: hey... someone suggested that your ns blog post would make a good replacement for http://clojure.org/libs

22:56 jodaro: hrm

22:56 trptcolin: that came up on the mailing list awhile back (I think on Alex's initial clojure.org push), didn't seem to get much clojure/core traction

22:56 jodaro: lein daemon should fork and return me to the shell, no?

22:57 technomancy: trptcolin: if you know the thread I can pipe up in favour

22:57 trptcolin: not sure if it just fell through the cracks or if there was actual opposition. i can understand wanting clojure.org to be docstring-y

22:57 lemme take a look

22:57 technomancy: Rich actually said during dinner at the conj that he always has to look up examples to remember how ns works, so ... I think that's a pretty good argument for needing better docs =)

22:58 trptcolin: did you see http://dev.clojure.org/jira/browse/CLJ-879 ?

22:58 trptcolin: yeah, i like it

22:59 i also kind of like the idea that came up on the list (maybe hiredman?) about using symbols instead of keywords in the ns macro

22:59 especially since it already works, as someone (amalloy?) pointed out

23:00 so (ns foo (require bar))

23:00 technomancy: I think the point of keywords is that it looks more declarative, which I can buy

23:00 to switch to symbols you would have to rewrite require-the-function to make it work exactly like the require clause of ns

23:00 otherwise you're just asking for confusion

23:01 trptcolin: require-the-function?

23:01 oh, nm

23:01 gotcha

23:02 technomancy: discussing breaking changes right after 1.3 has landed definitely falls into the category of long-term dreaming =)

23:03 trptcolin: :)

23:07 here's that thread: https://groups.google.com/d/topic/clojure-dev/JluIepQCGbI/discussion - looks like Andy, Alex, & I had a brief offline chat about it, but didn't land anywhere

23:07 technomancy: thanks

23:17 ckirkendall: does anyone no a good way in clojure script to check for the type NodeList

23:17 *know

23:17 dnolen: did you try (instance? js/NodeList x)

23:19 ckirkendall: dnolen: crap I forgot the "js" thx!

23:20 quotemstr: Why isn't every deref in a transaction an ensure?

23:21 hiredman: quotemstr: deref derefs many things besides refs

23:23 quotemstr: Okay, so why isn't every deref or a ref an ensure?

23:23 hiredman: deref on a ref?

23:24 because then there would be no way to get the value of a ref without ensuring it

23:24 quotemstr: Why would you want to do that?

23:25 hiredman: because you may have a most unrelated ref you just want to grab whatever value from

23:25 mostly

23:30 amalloy: eg maybe you want to log a message like "about N% done" - doesn't have to be super-accurate, but you'd like to deref the %-done ref

23:31 mdeboard: alexbaranosky: nice :P http://news.ycombinator.com/item?id=3283713

Logging service provided by n01se.net