#clojure log - Nov 16 2011

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

0:06 klauern: $implement-thought-in-brain ?

0:07 once that works, I'll quit the internet and computers

0:12 aperiodic: &(doall (filter good? aperiodic/thoughts))

0:12 lazybot: java.lang.RuntimeException: Unable to resolve symbol: good? in this context

0:12 aperiodic: darn

0:13 amalloy: aperiodic: you forgot (map implement) too

0:13 aperiodic: oh, right

0:15 unless my thoughts turn out to be functions that implement themselves without requiring further input

0:15 wtfcoder: so i have clojure-contrib pull in via lein deps (i see it in /libs) however ('use clojure.contrib.sql) seems to throw class not found error from lein run, is there any thing else i should be doing?

0:19 aperiodic: well you want to run (use 'clojure.contrib.sql), not ('use clojure.contrib.sql)

0:20 you quote the symbol you want to use to avoid it being evaluated

0:20 amalloy: unless he's doing it in a ns form...

0:25 aperiodic: i thought you could only use keywords in the ns form

0:25 amalloy: aperiodic: that *might* be the case, but adding a quote to c.c.sql would only make it worse. my point is we can't suggest a fix without context

0:28 aperiodic: amalloy: point taken

0:30 amalloy: fwiw, aperiodic, (ns foo (use clojure.java.io)) works fine - the ns macro just calls ##(doc name) on the grouping thingy

0:30 lazybot: ⇒ "([x]); Returns the name String of a string, symbol or keyword."

0:32 wtfcoder: No matching field found: getRoot for class clojure.lang.Var, compiling:(sql.clj:29)

0:32 at clojure.lang.Compiler$DefExpr.eval(Compiler.java:388)


0:32 aperiodic: amalloy: thanks, good to know

0:32 wtfcoder: this comes up by just including clojure.contrib.sql via use or require and doing nothing else

0:32 how should i start to debug/troubleshoot this..

0:32 amalloy: wtfcoder: don't use contrib

0:32 (especially not in a clojure-1.3 program)

0:33 wtfcoder: using contrib is considering bad practice now? (my study book is halloways first edition ~2yrs old)

0:34 amalloy: clojurebot: what happened to contrib?

0:34 clojurebot: Titim gan éirí ort.

0:34 amalloy: clojurebot: where did contrib go?

0:34 clojurebot: well... it's a long story: http://dev.clojure.org/display/design/Where+Did+Clojure.Contrib+Go

0:41 devth: what's a good way to handle date/time in clojure?

0:41 looks like several of the previous libs went missing.

0:42 Raynes: devth: clj-time

0:43 aperiodic: what's the canonical location of clj-time?

0:43 devth: Raynes: i saw that recommended a lot but the github page is gone. know of another place to find its docs?

0:43 aperiodic: i was using github/getwoven/clj-time, but i just checked, and it's gone now

0:43 Raynes: Yeah, just noticed that.

0:43 Strange.

0:44 https://github.com/seancorfield/clj-time <-- I think.

0:44 amalloy: wow, sean took that over too?

0:44 Raynes: Looks like it.

0:44 Man is a trooper.

0:44 amalloy: dude is a machine

0:45 Raynes: But mostly it's sad that everybody abandons their libraries.

0:45 devth: Raynes: thanks

0:45 amalloy: Raynes: don't look at me! just tonight i released an updated version of a library i haven't touched in half a year

0:45 Raynes: amalloy: Remember clj-config? Yeah, I still maintain that.

0:45 wtfcoder: how can I change leiningen to use the jdk at /opt/bin32-jdk/ rather than the system one (sun 64bit) I dont want to change the global JVM that intellij uses for its IDE app etc..

0:47 looks like just exporting JAVA_CMD will work from reading the lein script?

0:48 Raynes: Try it.

0:48 aperiodic: btw, Raynes, I really enjoyed your clojail slides

0:48 Raynes: aperiodic: :D!

0:48 aperiodic: learned a lot even without having the video

0:48 wtfcoder: just going to check if other bootstraps such as intellij launcher use this, but i think that uses JAVA_HOME instead

1:27 ollim: hmm.. why is this not working: (into (sorted-set) (map vec (sequence-of-lazy-sequences))) ? i get a clojure.lang.PersistentVector$ChunkedSeq cannot be cast to java.lang.Comparable exception

1:30 amalloy: &(sort [(range 2) (range 3)])

1:30 lazybot: java.lang.ClassCastException: clojure.lang.LazySeq cannot be cast to java.lang.Comparable

1:41 aperiodic: ollim: it's because vectors aren't comparable. you could work around that, but i think it would involve evaluating all of each lazy sequence, which is probably undesirable

1:42 amalloy: aperiodic: incorrect, vectors are comparable

1:43 but seqs are not sortable, and his vectors contained seqs, so the vector couldn't compare its elements to the other vector's elements

1:44 ollim: amalloy: what i was trying to accomplish is in fact to turn the lazy sequences into a collection of vectors

1:44 amalloy: you succeeded, but those vectors contained lazy sequences

1:45 &(sort [ [(range 5)] [(range 9)] ] )

1:45 lazybot: java.lang.ClassCastException: clojure.lang.LazySeq cannot be cast to java.lang.Comparable

1:46 aperiodic: amalloy: is the motivation for making vectors but not seqs comparable mainly performance?

1:46 amalloy: *shrug*

1:56 ollim: i still don't get it. my example data shows ((0 2) (0 1 2)) turned into ([0 2] [0 1 2]). and then i get the PersistentVector$ChunkedSeq cannot be cast to Comparable exception. I think I am just not properly understanding how the "chunked" plays into this. i think i will convert the code to use vectors all-round and forget entirely about lazy seqs for the time being.

2:00 amalloy: chunked doesn't matter

2:00 (in this context)

2:00 &(into (sorted-set) (map vec (for [n (range 10)] (range n))))

2:00 lazybot: ⇒ #{[] [0] [0 1] [0 1 2] [0 1 2 3] [0 1 2 3 4] [0 1 2 3 4 5] [0 1 2 3 4 5 6] [0 1 2 3 4 5 6 7] [0 1 2 3 4 5 6 7 8]}

2:01 amalloy: so if your input really were a seq of lazy seqs of "atoms", this would work fine

2:02 but it sounds like you're getting something else you don't expect

2:03 ollim: amalloy: it seems so. thanks for clarifying.

2:04 amalloy: though a sorted-set of vectors is something you might be surprised by the sort order of anyway

2:05 eg, ##(sort [[0 1 2] [3] [4 5]])

2:05 lazybot: ⇒ ([3] [4 5] [0 1 2])

2:13 ollim: yes, what i

2:14 .. am in need of is a string-like sort but on integer sequences

2:14 thanks again

3:42 Blkt: good morning everyone

3:43 ejackson: Good morning all

3:58 dbushenko: morning!

4:53 wtfcoder: on this snippet http://ideone.com/HVUXk where is the magic happening with param-groups, is this just a redundant local variable?

4:55 sorry ignore figured it out, duh

5:17 frankieboy: ,(+1 1)

5:17 clojurebot: #<ClassCastException java.lang.ClassCastException: java.lang.Long cannot be cast to clojure.lang.IFn>

5:17 frankieboy: ,(+ 1 1)

5:17 clojurebot: 2

6:06 leo2007: "Identities are modeled using one of the three reference types: refs, agents, atoms and vars."

6:06 but he listed 4 types.

6:07 a type?

6:07 typo*

6:07 Borkdude: lol

6:09 raek: There are exactly three (4) reference types in Clojure.

6:10 lucian: raek: i'm sure it's just a concurrent modification error :)

6:10 Borkdude: lol

6:10 lucian: text must've been generated with Java

6:14 Bahman: Hi all!

6:20 leo2007: OK, I think I read the sentence wrongly.

6:30 samaaron: morning, morning

6:35 cemerick: samaaron: Morning — good move on the nick change :-)

6:39 samaaron: cemerick: thanks :-)

6:40 cemerick: the previous one had some interesting symmetric properties, but this one is far more transparent ;-)

6:40 cemerick: hah, so it did, I'd never noticed :-P

6:41 when I started using irc again some years ago, I was la_mer for a while. Things got a whole lot simpler when I claimed cemerick.

6:42 samaaron: cemerick: are you a closet nin fan?

6:42 cemerick: samaaron: *very* astute!

6:42 samaaron: cemerick: it's one of the best tracks on that album

6:43 cemerick: apparently it's one of the first tracks he wrote as he moved out of depression after sitting in a studio unproductively for a year

6:45 arbscht: cemerick: that was you? I never noticed!

6:46 samaaron: ambrosebs: morning/afternoon to you goodly sir

6:46 that was a fleeting visit...

6:47 cemerick: samaaron: it's certainly on the better side of that double-album

6:47 that could have easily been a single CD

6:47 samaaron: cemerick: when that album was released I listened to it for a couple of months non stop

6:48 cemerick: likewise

6:48 samaaron: I haven't listened to it in a long while though - I kind of got bored of him being so angsty

6:48 cemerick: heh

6:48 angsty since 1994 or whatever :-P

6:48 samaaron: "cheer up already!"

6:48 * cemerick facepalm @ starfuckers

6:49 cemerick: arbscht: do you actually remember when I was still la_mer? That was years ago…

6:50 arbscht: cemerick: as far back as 2007 or something

6:50 cemerick: that's about right

6:50 switched ~mid '08 IIRC

6:51 got tired of people always saying "who are you again?"

6:51 arbscht: haha

7:10 clgv: ,(println "cemerick: Who are you again?")

7:10 clojurebot: cemerick: Who are you again?

7:11 * clgv points at the bot. "It was him. It was him." ;)

7:12 cemerick: one of the bots should have a way for people to direct messages to people in-channel via privmsg

7:12 That'd be fun for about 10 minutes :-P

7:30 Bahman: What's the convention for defining constants in Clojure with 'def'? Using '+' like (def +some-const+ 100)?

7:31 defining = naming

7:31 raek: Bahman: the convention is to not have any extra chars around the name

7:31 samaaron: Bahman: I think the official stance is just to use lower case as normal

7:31 raek: since all vars ideally are constants

7:32 samaaron: However, in Overtone we often use CAPS

7:32 raek: and things that change at runtime should be wrapped in a ref/atom/agent

7:32 Bahman: I see the point. So no need to add '*' or '+', right?

7:33 raek: *earmuffs* actually means something else in Clojure (dynamically rebindable var)

7:33 i.e. vars meant to be rebound with 'binding'

7:33 Bahman: Oh! Alright...then I will simply use (def some-const 100).

7:35 * lucian wishes for a Clojure C/Gobject backend or something

7:36 cemerick: Bahman: I've used +const+ before given the scheme convention, but that is pretty unpopular in Clojure-land.

7:37 That tendency has *almost* been beaten out of me. ;-)

7:37 kephale: a leading ♥?

7:37 frankieboy: jay, just discovered the pleasure of auto-complete.el and ac-slime

7:38 one of the few things I really missed from IntelliJ

7:44 * lucian will have to set up some clojure stuff in his evil emacs

7:50 leo2007: I am using JDK 7 but the javadoc function always open java 6 documentation.

7:50 Ideas?

7:51 Arafangion: "javadoc function"?

7:51 leo2007: (javadoc Math) for example.

7:51 I am using java version "1.7.0_147-icedtea"

7:52 Arafangion: Ah, from clojure.contrib.javadoc.

7:52 leo2007: clojure.java.javadoc

7:58 raek: leo2007: what does (System/getProperty "java.specification.version") return for you?

8:00 leo2007: raek: 1.7

8:07 dbushenko: guys, do you have autocompletion of java standard library in your emacs?

8:09 frankieboy: have just got it to work for clojure/lisp, have not experimented yet with java

8:09 dbushenko: frankieboy, how did you manage that?

8:09 M-/ ?

8:09 etags?

8:09 frankieboy: used auto-complete and ac-slime.

8:10 kzar: Is there a shorthand for something like this? (get (get {"example" {"silly" 1}} "example") "silly")

8:11 frankieboy: You can get them using the package manager, using the marmelade repository

8:11 I think you need to use emacs 24

8:12 mange: kzar: (get-in {"example" {"silly" 1}} ["example" "silly"])

8:12 kephale: ,(get-in {:a {:b 3}} [:a :b])

8:12 clojurebot: 3

8:12 Arafangion: Someone needs to make a patch for emacs, such that it eventually becomes emacs 24.7

8:13 frankieboy: dbushenko: watch http://www.youtube.com/watch?v=kH0gOE7rj7g to see how it works

8:13 I really like it

8:13 kzar: ,(get-in {"example" {"silly" 1}} ["example" "silly"])

8:13 clojurebot: 1

8:13 kzar: kephale: Cool thanks

8:13 dbushenko: frankieboy, thanks!

8:16 frankieboy: dbushenko: read this for something similiar for java: http://www.emacswiki.org/emacs/AutoJavaComplete

8:16 haven't played with that yet, have to do some real work now

8:17 dbushenko: thanks!

8:20 cemerick: leo2007: `javadoc` directs you to JDK 6 documentation by default; it doesn't check your JDK version.

8:27 leo2007: cemerick: thanks.

8:36 frankieboy: Is the video of the Overtone presentation already available?

8:37 I am doing a presentation next week, and I would like to show sam aaron playing the monome

8:44 cemerick: frankieboy: not yet.

8:44 When it becomes available, you won't likely miss it. :-)

8:50 duck1123: frankieboy: you have caused me to get auto-complete working again, and for that, I thank you

8:52 leo2007: duck1123: auto-complete?

8:53 duck1123: leo2007: the auto-complete and ac-slime packages for emacs

8:53 leo2007: thx

8:57 frankieboy: I really, really love auto-complete. It was the final missing piece to make emacs for Clojure in the same league as IntelliJ for Java

8:59 duck1123: I had it working a while ago back before it was available in elpa. I lost it when I yanked a bunch of stuff out of my init file. This was the final push I needed to get it set back up

9:00 frankieboy: the package system, starter-kits, auto-complete and ac-slime, in addition to clojure-jack-in make my init.el really small, sane defaults and immediate productivity

9:02 the only wish is some kind of link into clojuredocs from the popup, so that I can look at documentation and code examples

9:03 but that is nitpicking

9:14 fliebel: What do you use for routing? Compojure? Moustache? core.match?

9:16 bendlas: fliebel: moustache

9:17 fliebel: I think core.match could be really interesting, has anyone tried that? I've been suing Moustache as well.

9:23 duck1123: I wrote my own tool for routing

9:26 fliebel: duck1123: Can I see it?

9:28 duck1123: I've yet to document how the routing system works, but it takes a sequence of predicates that take a matcher map and match it against the request map and pass the request on to the next checker. If all the checkers match, then the action is invoked

9:28 https://github.com/duck1123/ciste/blob/master/src/ciste/routes.clj

9:29 And here's an example of some of the routes in action https://github.com/duck1123/jiksnu/blob/master/src/jiksnu/routes.clj

9:30 I really need to go back and fix up that namespace. I haven't needed to touch it in a while

9:30 fliebel: duck1123: So you basically have your own "regex" format?

9:32 duck1123: fliebel: each "predicate" (still need a better name) can read data from the matcher and use that to determine if the request matches. For HTTP routes, I just use Clout. But I can use this system for any request/response system

9:33 fliebel: ah

9:34 interlude: How are checkout deps in lein supposed to work? I made a checkouts folder, but dependency resolution doesn;t work.

9:35 If I add them to the project.clj, lein deps errors, if I don't I don't get the deps of the checkout deps.

9:36 duck1123: I believe checkouts adds those source folders to the classpath, but you still need to install the artifact for maven's dependency resolution

9:36 a simple lein install in that project once should do it

10:02 kzar: Where's the function to take an array map and filter away some of the keys? I'm sure someone showed me in the past but I can't find it

10:04 bendlas: kzar: are you looking for &(dissoc {:foo "foo" :bar "bar" :moo "moo"} :foo :bar)

10:04 cemerick: kzar: select-keys

10:04 dissoc will do, too; depends on whether you know which ones to keep vs. which ones to drop

10:05 bendlas: xctly

10:05 kzar: cemerick bendlas: cheers

10:05 did the trick :)

10:05 * cemerick goes to raise a pint

10:05 cemerick: dammit! No pint.

10:27 ninjudd: cemerick: of bacon?

10:28 cemerick: ninjudd: frightening :-)

10:40 Bahman: How can I make an executable jar out of lein project?

10:41 Fossi: ,(macroexpand (let [a 1] (let [b 2] 3)

10:41 clojurebot: #<ExecutionException java.util.concurrent.ExecutionException: java.lang.RuntimeException: EOF while reading>

10:41 Fossi: ,(macroexpand (let [a 1] (let [b 2] 3)))

10:41 clojurebot: 3

10:41 Fossi: ,(macroexpand '(let [a 1] (let [b 2] 3)))

10:41 clojurebot: (let* [a 1] (let [b 2] 3))

10:41 Fossi: why doesn't the second let not get expanded?

10:42 bendlas: because macroexpand and macroexpand-all always work on the outermost form

10:42 to do full expansion, you need to walk the source tree

10:43 i think there might be a helper for that somewhere in contrib

10:44 fliebel: clojure.walk/macroexpand-all

10:44 bendlas: it's clojure.walk/macroexpand-all

10:44 Borkdude: What is the best thing to use in emacs for java support?

10:44 bendlas: yep

10:44 Borkdude: I mean compiling etc

10:44 Fossi: thanks i'll try

10:45 bendlas: Borkdude: (shell-command "eclipse") IMO

10:45 klauern: Bahman: I haven't done it before, but I would think that specifying a :main in your project.clj and then doing `lein uberjar` would be enough to get it working

10:46 Bahman: klauern: Thanks.

10:46 Borkdude: \

10:46 fliebel: Does core.match provide access to all bindings? Like a macro has a hidden &env variable.

10:47 klauern: See `lein help sample` for an exploded project.clj with mention of how the :main should look

10:47 or easier: https://github.com/technomancy/leiningen/blob/stable/sample.project.clj

10:47 Fossi: is clojure.walk new in 1.3?

10:47 klauern: https://github.com/technomancy/leiningen/blob/stable/sample.project.clj#L95-L100

10:47 Bahman: klauern: Excellent...thanks again.

10:48 Fossi: ah, just too dumb to type

10:48 klauern: love that GitHub line highlighting thing

10:50 dfilimon: hi everyone! i'm trying to develop my first larger clojure program and i need to extend JPanel and override its paintComponent method in the process

10:50 i've made new class with gen-class and overrode the paintComponent method

10:50 but i also want to first call the superclass' implementation before i do my own drawing

10:51 will simply calling (.paintComponent this) work?

10:54 churib: ,(meta ^test 'x)

10:54 clojurebot: nil

10:55 churib: ,(meta (with-meta 'x {:key :myval}))

10:55 clojurebot: {:key :myval}

10:55 churib: why does the former not work?

10:55 Bahman: What are the parameters to '-main'? only [args]?

10:56 Chousuke_: churib: it puts the metadata on the (quote x) list, not the symbol x

10:57 ,(meta '^meta x)

10:57 clojurebot: {:tag meta}

10:57 churib: Chousuke_: aah, thanks!

10:57 Chousuke_: ^ is a read-time thing which is why it works like that.

10:58 churib: yes, of course. Didn't thought about that...

10:58 Chousuke: it's not obvious :)

10:58 TimMc: dfilimon: Do you actually need to call the super's paintComponent?

10:59 dfilimon: i don't really think i need to, but that's how it seems to be done in every java tutorial

10:59 anyway, i just tried something that seemed to work

10:59 i exposed the paintComponent method in the superclass under a different name

10:59 and then called that

11:00 but that really feels like a nasty hack

11:01 TimMc: dfilimon: proxy-super

11:01 dfilimon: but i'm not using proxy at all, i'm using gen-class

11:01 TimMc: appears to be a way to call a superclass' method from inside a proxy.

11:01 ah

11:02 fliebel: Does let expose a hidden variable with all the bindings?

11:03 TimMc: dfilimon: Here's how I made a Swing app -- I just proxied a JComponent as a canvas: https://github.com/timmc/CS4300-hw6/blob/master/src/hw6/core.clj#L25

11:04 dfilimon: thanks for that!

11:04 cemerick: fliebel: "hidden variable"?

11:05 fliebel: cemerick: Yea, like a macro exposes &env

11:05 cemerick: ah; nope

11:05 dfilimon: TimMc: will that work when resizing?

11:06 fliebel: ... or any other way to get to all the binding of a let

11:06 TimMc: dfilimon: I don't recall.

11:08 klauern: Bahman: If it follows java, it's probably analagous to "public void main (String[] args), "

11:10 TimMc: dfilimon: I think that app was not resizable. However, in a different app, I see that I added a (proxy'd) ComponentListener: https://github.com/timmc/CS4300-HW3/blob/master/src/timmcHW3/core.clj#L525

11:12 Kototama: hi, what's the best solution to have a bidirectional communication between two clojure processes?

11:13 dfilimon: TimMc: right now, i'm unsure whether to go for gen-classes of my own or try using proxies like you did

11:13 lucian: Kototama: possibly sockets

11:16 scgilardi: fliebel: here's a let variant that exposes bindings (has had approximately zero testing) https://gist.github.com/1370491

11:18 Kototama: i guess java pipes are more the solution but i was expecting something from clojure here

11:18 fliebel: scgilardi: yay. Only I don;t feel like patching clojure.match to use that ;)

11:19 I'll just opt for the moustache approach.

11:20 clgv: fliebel: scgilardi's macro has the disadvantag to show you every binding from &env and not just the ones from the let.

11:22 or was that the intention?

11:22 fliebel: clgv: Hm, I guess it't better to use argv directly.

11:22 clgv: you might use destructure from clojure.core

11:25 fliebel: Basically what I want to do is (match [1 2 3] [a 2 c] (f {:a 1 :c 3})) as a macro, so that you only need to supply the pattern and function.

11:27 Kototama: or maybe that: http://clj-me.cgrand.net/2009/11/18/are-pipe-dreams-made-of-promises/

11:28 cemerick: samaaron: feh, I should have thought about doing the automation in overtone from the start :-P

11:29 tsdh: technomancy: Hi. I'm just trying to convert my documentation generator into a standalone leiningen project, but I have a bootstrap issue.

11:29 samaaron: cemerick: it would be totally possible, but might be a bit of overkill for such a simple task (firing up a JVM and a SC ServeR)

11:30 cemerick: this might work for you: http://sox.sourceforge.net/

11:30 tsdh: technomancy: The plugin project's deps are clojure and hiccup, but since its sources reside in src/leiningen/gendoc.clj, invoking "lein <whatever>" wants to eval that and errors because hiccup is not there...

11:30 cemerick: I don't usually write scripts, but when I do, I like to wait for a JVM first.

11:32 samaaron: certainly seems right; don't know how I didn't find that before. :-/ Might do it in overtone anyway, just as an excuse to see the relevant parts of the API.

11:32 thanks in any case :-)

11:33 samaaron: cemerick: cool - it might also be the case that we need to brush up the wav output parts of Overtone too. It's been a while since I recorded some output.

11:33 cemerick: the documentation is pretty sketchy in this area, so it would be useful use this experiment to beef things up.

11:34 cemerick: I can totally help you work out what's necessary to get it to work if you like.

11:34 michael_campbell: Going to be one of those days... can't even spell my name right.

11:34 cemerick: samaaron: thanks; I've got you on speed dial in case I hit a wall ;-)

11:35 samaaron: cemerick: the "Overtone bat phone"!

11:35 cemerick: right on

11:37 samaaron: is there autodoc somewhere?

11:37 samaaron: what's autodoc?

11:37 cemerick: samaaron: it's what produces e.g. clojure.github.com/clojure/

11:37 http://clojure.github.com/clojure/

11:38 samaaron: ah, nice

11:38 no, we don't have that

11:38 does it use the namespaces, fn names and docstrings to generate the docs?

11:38 cemerick: right

11:38 samaaron: well we're jam full of docstrings

11:40 cemerick: samaaron: If you're interested, I'll see about adding autodoc to the project.clj; you could add the results to the pages so it appears as a subdir on http://overtone.github.com/

11:40 s/pages/pages branch

11:40 samaaron: sounds perfect

11:41 btw, do you know if BG lurks around in irc?

11:41 cemerick: very occasionally

11:41 G0SUB is his handle.

11:41 samaaron: nice

11:41 he had some advice regarding licensing

11:42 Overtone is currently MIT and he was suggesting Eclipse or GPL

11:42 cemerick: Certainly gives you more latitude for e.g. selling a supported version

11:43 fliebel: $findfn 1 '(1)

11:43 lazybot: [clojure.core/xml-seq clojure.core/vector clojure.core/pvalues clojure.core/list]

11:43 samaaron: yup, that was one of the arguments

11:44 cemerick: I think you have a wide array of commercialization opportunities, really.

11:53 samaaron: cemerick: it would be interesting to explore them

12:00 zerokarmaleft: mmm, the moog minimoog overtone select badass series, just 3k quid

12:01 samaaron: zerokarmaleft: or you could build your own minimoog within Overtone for free ;-)

12:02 zerokarmaleft: true, i think the attraction to moogs is largely to decorate studio apartments

12:03 cemerick: samaaron: see, you shoulda thrown in an ipad with touchosc preinstalled for £4k ;-)

12:03 samaaron: cemerick: are you the first customer? ;-)

12:04 cemerick: I'm just the ideas guy :-P

12:05 I didn't even know what a moog was before ducking it.

12:05 samaaron: it would be cool to have a dedicated touch display that had an ethernet port and talked OSC

12:05 I imagine trusting wifi at gigs isn't that sensible...

12:05 cemerick: why would it need to be wired?

12:05 dedicated secured wireless?

12:06 hard to jam on a thing trailing an ethernet cable, perhaps *shrug*

12:06 samaaron: cemerick: exactly and just fewer moving parts to go wrong

12:06 gtrak: bluetooth?

12:07 samaaron, what order of magnitude of latency are you dealing with right now?

12:07 samaaron: gtrak: from where to where?

12:07 cemerick: I think an android-based overtone/touchosc "appliance" sold with "premier" auto-updating, smooth documentation and a crazy asset library tucked in would be a killer offering that would see a lot of interest.

12:08 gtrak: with the matrix-button-box to sound

12:08 through overtone, through supercollider

12:08 samaaron: gtrak: ah, super low - 10s of ms

12:09 gtrak: well, the jump from say 5 to 20ms is meaningful, 20 to 60 is just as meaningful i think

12:10 samaaron: gtrak: I measured it a while ago and it was plenty fast. Sadly I forget the numbers though. However, when I play the monome I can't perceive any latency

12:12 nickmbailey: :q

12:12 doh

12:18 kzar: I use org.apache.commons.codec.binary for Hex and Base64 but now I need Base16 and I can't see it there. Anyone know of a Base16 library?

12:20 lucian: kzar: it should be easy to implement with java's Integer

12:28 hiredman_: ~ping

12:28 clojurebot: PONG!

12:42 Borkdude: Did I miss anything on Java in emacs while I was disconnected?

12:43 nDuff: Who's baby is the Clojure/conj survey? It's only allowing one selection each for favorite/good/excellent/poor talks

12:44 rabbler: :nDuff, I had the same issue.

12:44 cemerick: nDuff: I've emailed them, and thickey tweeted them, but…

12:44 samaaron: I emailed them too...

12:44 :-)

12:44 Raynes: Yeah, I was just about to whine.

12:45 rabbler: meaning that I had the same 'concern'. But I already submitted.

12:45 Raynes: I mean, it isn't fair if I can only select my own talk as my favorite. ;)

12:45 samaaron: Raynes: you can even select your talk as your favourite AND as excellent!

12:46 Raynes: Heh

12:46 cemerick: I wonder if they'll send us our ratings

12:46 Raynes: cemerick: I hope not.

12:46 cemerick: Raynes: oh, please :-P

12:46 you killed it

12:46 rabbler: raynes: your presentation was awesome.

12:47 samaaron: Raynes: it's super hard to have any idea how your talk is being perceived when you're doing the speaking

12:47 Raynes: Oh I know, but I'd hate for others to feel lesser in the shadow of my greatness.

12:47 cemerick: nice

12:47 samaaron: hail almighty greatness!

12:47 * cemerick bows and scrapes

12:47 Borkdude: haha

12:48 rabbler: samaaron: That is why rotten fruit/veg should be brought to cons. Then you know if you are tanking.

12:48 samaaron: "Turn your phone off - that's rude!"

12:48 cemerick: samaaron: I know, it's tough to tell how things are going over those standing ovations ;-)

12:48 Raynes: I *did* feel pretty fantastic after the talk. For example, I seem to recall telling chouser "good luck following that" while putting my laptop away.

12:48 Borkdude: I saw Rich programmed on a national exit poll in linux magazine of 2010, so probably I know who the auther of this survey code is? ;-)

12:48 samaaron: Raynes: haha, you smug mofo

12:49 cemerick: poor chouser got jammed up :-D

12:49 Raynes: I think I had two favorite talks. samaaron was one of them.

12:50 samaaron: Raynes: you're too kind

12:50 cemerick: samaaron's is going to be at least one SD above anyone else

12:50 Raynes: The other was Spiewak's functional data structure talk.

12:50 samaaron: yeah, sadly I missed Daniel's talk - I was taking it easy before my own

12:50 I'm looking forward to the video though

12:51 Raynes: I really enjoyed Stuart Sierra's talk, but they can't all be my favorites.

12:51 michael_campbell: Spiewak's was as much performance art as a talk. I loved it.

12:52 dfilimon: guys - question: i want to represent some sort of regular polygon in my code. i would be tempted to make a record or structure it somehow. should i rather leave it a map?

12:53 devn: Raynes: technomancy ninjudd -- good to hear you guys are going to devote efforts to the same build tool

12:53 Raynes: Build tool powers -- UNITE!

12:54 devn: Alphazord megazord power, NOW!

12:54 samaaron: dfilimon: I tend to start out with a map first - and if it becomes a perf bottle-neck I'll move to a record

12:54 dfilimon: can i restructure records like maps?

12:54 *destructure

12:54 devn: samaaron: Unfortunately I didn't get to see your talk -- had to leave the last day right after Craig's talk.

12:54 I really liked Craig's talk.

12:54 samaaron: dfilimon: it also depends how extensible you see the structure - maps are only fast if you know all the keys at compile time

12:55 dfilimon: samaaron: i will not be adding more entries to the maps

12:55 Raynes: devn: Unfortunately, samaaron won the Dancing On Stage During A Presentation badge instead of me.

12:56 technomancy: devn: yeah, I'm looking forward to rolling on 2.0

12:56 samaaron: dfilimon: I'd still start with a map, and if after perf measurement you see an improvement with records, then use them - the transition is simple

12:57 dfilimon: also, i'm feeling somewhat uncomfortable not having types for everything… is this normal for a beginner?

12:58 Raynes: Depending on your background, most likely.

12:58 Borkdude: dfilimon: everything has a type, but they're not always relevant

12:58 samaaron: dfilimon: everything does have a type

12:59 technomancy: dakrone: how hard would it be to support a bring-your-own-thread-pool model?

12:59 for clj-http?

12:59 dfilimon: yes they do, but if i put stuff in maps, most things are just maps, they don't have a type per-se

12:59 cemerick: samaaron: re: "maps are only fast if you know all the keys at compile time": I think you meant records

12:59 samaaron: cemerick: yep, I totally meant records :-)

13:00 devn: technomancy: I'm going to continue to bug you on the status of clojars -- is it ready for local dev work yet?

13:00 cemerick: dfilimon: you can attach metadata to maps to indicate "type"

13:00 used most often with multimethods, in my experience

13:00 samaaron: dfilimon: everything you throw in a map does have types, they're just not statically declared by default

13:00 devn: technomancy: I'd like to do a bit of design and help make clojars better

13:00 cemerick: ,(type ^{:type :foobar} {:a 5 :b 6})

13:00 clojurebot: :foobar

13:00 Raynes: technomancy, devn: Whatever you do, if you do *anything* for clojars, make the usernames not be case sensitive.

13:01 danlarkin: case insensitivity is bad

13:01 devn: :) I want to work on it, but it sounds like a local dev clojars (per technomancy) is a real pain to set up. There was some work by hiredman IIRC that would make that easier.

13:01 dfilimon: cemerick: did not know about that, thanks!

13:01 Borkdude: devn: and allow me to remove a jar file I accidentally pushed

13:01 technomancy: danlarkin: case insensitivity on lookup is, but case insensitivity on validation rules is not necessarily

13:01 cemerick: dfilimon: read the docs for type so you know what it's doing ;-)

13:02 technomancy: devn: I mostly need to knock out this lein-as-a-lib question since the merge conflict potential is blocking others. then I'll be ready to roll on clojars

13:02 Raynes: danlarkin: Case sensitivity is terrible when you can't remember if you signed up as Raynes raynes rayne Rayne DiscipleRayne disciplerayne et al.

13:02 cemerick: I have one thought for clojars if the suggestion box is open. :-P

13:02 dfilimon: also, unrelated question: why is it that the default repl doesn't import namespaces like clojure.repl or clojure.java.javadoc by default?

13:03 hiredman: win 20

13:03 dfilimon: or rather, why aren't functions like doc always available without having to import them?

13:03 samaaron: dfilimon: it doesn't make sense to pollute all namespaces with repl/javadoc fns by default

13:04 dfilimon: sure, not all the time, just when playing around in the repl

13:04 dakrone: technomancy: it's actually already built-in, just not documented

13:04 technomancy: dakrone: cool

13:04 dfilimon: always having a help function seems to me pretty useful

13:04 technomancy: dakrone: is it easy to just use the built-in agent thread pool

13:04 ?

13:04 devn: maybe clojars should just get a rewrite? :X

13:05 * devn cringes as others give him the evil eye

13:05 dakrone: technomancy: call core/make-reusable-conn-manager and bind the result to core/*connection-manager* whenever you make calls

13:05 technomancy: devn: it works amazingly considering it hasn't been updated in about two years

13:05 devn: technomancy: *nod* ato did a great job without much work.

13:06 technomancy: dakrone: rock. I want to make sure ability to share pools is considered a basic feature for every library that uses them.

13:06 http://blog.ometer.com/2011/11/13/task-dispatch-and-nonblocking-io-in-scala/ <- actually a pretty interesting read on the subject

13:06 dakrone: technomancy: it's not documented because I wasn't sure of the API, lemme know how it works for you

13:06 technomancy: apparently they really wish they had Clojure's send/send-off pools built-in

13:07 dakrone: it's for zkim actually. =)

13:07 * devn is excited for some new clojure builds so we could have clojuredocs' API included by default

13:07 devn: (maybe)

13:07 technomancy: though I don't know if he's having trouble with clj-http specifically, I just know in general the problem needs attention

13:10 algernon: hrm. I have a bit of a problem, possibly not clojure related, but perhaps someone here can shed a light on where I should look.. I'm using Storm, and from one of the bolts, I'm poking redis (via the accession lib). At work, everything's fine, and all that. On my home box, however, a new connection gets opened for each message passing through the bolt. I'm at a loss why this would happen. :|

13:11 dakrone: devn: eh? what's this about the clojuredocs' API?

13:11 dfilimon: cemerick: (= ^{:type 'cookie} {:x 1} {:x 1}) this seems to be true

13:11 ,(= ^{:type 'cookie} {:x 1} {:x 1})

13:11 clojurebot: true

13:12 dfilimon: why is this?

13:12 cemerick: dfilimon: yes, metadata does not impact equality

13:12 concrete type doesn't impact equality either

13:12 (= (array-map :a 5) (hash-map :a 5))

13:12 * cemerick ,(= (array-map :a 5) (hash-map :a 5))

13:12 cemerick: bah

13:12 ,(= (array-map :a 5) (hash-map :a 5))

13:12 clojurebot: true

13:12 Raynes: &(identical? ^{:type 'cookie} {:x 1} {:x 1})

13:12 lazybot: ⇒ false

13:12 devn: dakrone: Since we're talking about adding a "shot of easy" to Clojure, I really like the idea of bringing ClojureDocs into the fold as a sensible default development dependency

13:13 dakrone: Or for the time being have a "sensible newbie project.clj" which includes the clojuredocs-api dependency

13:13 ibdknox: clojuredocs-api

13:13 ?

13:13 dfilimon: hmm, okay then; i'm not sure if i agree with the principle but anyway

13:14 devn: ibdknox: there's a clojuredocs api querying thingamajig out there somewhere, im pretty sure dakrone wrote it

13:14 ibdknox: devn: ah, as in for the repl?

13:14 devn: yes

13:14 It's handy.

13:14 ibdknox: cool :)

13:14 devn: It's great for newcomers, and dumb people like me. :)

13:15 ibdknox: me too!

13:15 cemerick: dfilimon: Clojure just pushes further in that direction than, e.g. Java does:

13:15 ,(= (java.util.ArrayList.) (java.util.LinkedList.))

13:15 clojurebot: true

13:16 dfilimon: about the clojuredocs api, how do i add it as a dev-dependency? is it an actual package?

13:17 dakrone: dfilimon: https://github.com/dakrone/cd-client

13:17 it can be used from lein

13:17 * devn politely asks for a rename

13:17 ibdknox: yeah that's not a very useful name :p

13:17 devn: clojuredocs-client or something would be easier to find with google juice

13:18 dakrone: devn: yea, it's unfortunately named

13:18 devn: dakrone: it shouldn't be a big deal to rename right?

13:18 dfilimon: dakrone: thanks!

13:19 dakrone: devn: no, good idea, I will change it

13:19 devn: i guess where I'm headed by bringing up cd-client and so on is that it'd be cool if you could say "lein suite", "lein juice" or something -- which would fill your project.clj with some nice sensible tools for local development.

13:20 Raynes: devn: ibdknox and I are working on a new 'lein new' that uses templates and a little code gluing things together. You'll be able to distribute any kind of templates you want after we're done.

13:20 devn: One reason I love noir is that it made a lot of the annoying dependency wrangling I used to have to do with ring a lot simpler

13:21 dakrone: I really just need to rewrite it, it's very old

13:21 devn: Raynes: that's awesome. Exactly what I want.

13:21 dakrone: I'll help.

13:21 dakrone: I have time today after work if you want to remote pair with zkim's pair.io

13:21 dakrone: devn: timezone?

13:21 devn: CST

13:21 IIRC you're EST?

13:22 Raynes: Aw, I want pair.io. :<

13:23 dfilimon: does anyone use the user.clj config file in ~/.clojure to add functionality to the repl?

13:23 dakrone: devn: MST

13:23 dfilimon: and if so, why doesn't it get loaded when i run clojure-jack-in from emacs?

13:24 dakrone: devn: also renamed cd-client to clojuredocs-client and put a redirection notice at cd-client

13:24 devn: dakrone: so what time is it for you right now? It's 12:18PM here.

13:24 dakrone: 1 hour earlier

13:25 devn: added you to the repo, tonight should work for me for a bit, ping me later?

13:26 devn: dakrone: sounds good. :)

13:26 technomancy: dfilimon: ~/.clojure is not on the classpath. you could add it with :dev-resources-path "/home/you/.clojure" in project.clj if you like

13:27 dfilimon: technomancy: thanks!

13:28 cemerick: the conj survey is fixed

13:28 ibdknox: there's a conj survey?

13:28 cemerick: ibdknox: should be in your inbox?

13:29 ibdknox: never got it.. but there was also some weirdness with my ticket

13:29 devn: technomancy: so, with marmalade on -- Which packages do I need to get a nice working REPL with paredit

13:29 ibdknox: so it could've been related to that

13:29 devn: technomancy: does durendal still work?

13:30 michael_campbell: ibdknox: http://www.surveymonkey.com/s/G9H3RF5

13:30 ibdknox: michael_campbell: thanks

13:33 technomancy: devn: hmm... probably? I mostly used it for jack-in.

13:33 * devn thinks he needs to put up a package that adds some elisp for getting paredit to play nice in slime

13:53 ibdknox: dakrone: when you guys redo the client you should use colorize :D

13:53 cemerick: ibdknox: colorize?

13:54 ibdknox: cemerick: ansi-color wrapping for console output :)

13:54 (blue "hey " (red "what's up?")) and so on

13:54 or (color :blue "hey")

13:54 cemerick: https://github.com/ibdknox/colorize

13:54 I made that and watchtower at the conj

13:55 https://github.com/ibdknox/watchtower

13:56 tsdh: Is there some kind of "namespace reset"? Say, you've :use-ed some namespace in your repl, then get a warning because of name clash, and now you want to require it only :as foo.

13:56 devn: ibdknox: not sure if this at all interesting to you given it is in ruby, but my coworker Nick whipped this up, https://github.com/randland/colorful

13:57 it adds backgrounds, blinks, resets, etc.

13:57 ibdknox: I have reset, I didn't really have a use for blink and such, though I should probably add it

13:57 cemerick: ibdknox: what is this "console" of which you speak?

13:58 ibdknox: devn: the cool thing about this is 256 color support :) I'll have to look into that

13:58 cemerick: terminal :p

13:58 raek_: tsdh: you can use remove-ns and then start over with that ns

13:58 cemerick: And here I did that manually https://github.com/clojure/tools.nrepl/blob/master/src/main/clojure/clojure/tools/nrepl/cmdline.clj

13:58 ibdknox: mine is a dry irc wit ;-)

13:58 or, none at all, depending on who you ask

13:58 ibdknox: haha

13:59 tsdh: raek: Yes, that did the trick. Thanks a ton.

13:59 ibdknox: cemerick: (blue ..) is just so much prettier ;)

13:59 raek: np :)

14:00 cemerick: ibdknox: I agree wholeheartedly.

14:00 I was dumbfounded when chouser pointed me at those ANSI color codes, etc.

14:00 ibdknox: lol

14:00 cemerick: hardcore WTF

14:00 ibdknox: yeah it's pretty ridiculous

14:00 cemerick: can I get some CSS up in here?

14:00 ibdknox: yay for abstraction!

14:00 raek: tsdh: another more fine-grained approach is to use ns-unmap to remove mappings of the conflicting names and then use refer-clojure to bring in the original mappings

14:01 tsdh: raek: That could have spared me hundreds of skrew-up-ns/,sayonaraRET/M-xclojure-jack-inRET-cycles. :-)

14:01 ibdknox: watchtower is kind of neat: composable file/dir watchers

14:01 I'm on a composability kick lately

14:02 tsdh: raek: Hm, since compiling anew is so fast, I prefer the simple brute-force method. :-)

14:03 raek: yeah, it's easier to get the namespace into a known state using remove-ns

14:04 but ns-unmap can be useful e.g. when you want to re-evaluate a defonce or a defmulti

14:04 (so I though it could be a good idea to mention it too)

14:16 amalloy: cemerick: i never got a survey either

14:17 oh, that's a lie. wrong inbox

14:17 tsdh: raek: Sure, I'll try to remember it, but I'm low on RAM.

14:20 technomancy: I wish ns-unmap were exposed better by slime

14:22 jcromartie: there's something weird about ring/ring-jetty-adapter

14:22 on clojars

14:22 lein deps fails to get it with some zip file error

14:22 amalloy: cemerick: i note that the age groups are "under 17" and "18-24", so Raynes has no correct box to check?

14:22 jcromartie: it says the POM is invalid and then throws a ZipException

14:22 Raynes: I just checked

14:23 18-24

14:23 I'm close enough to 18 to not particularly care.

14:23 jcromartie: I'm using [ring/ring-jetty-adapter "1.0.0-RC1"]

14:23 amalloy: jcromartie: rm -rf ~/.m2? fixes all kinds of problems :P

14:23 jcromartie: hm :) OK

14:23 ibdknox: it really does

14:23 it's magical

14:24 technomancy: except the problem of "it's taking forever"

14:24 ibdknox: a magical nuclear bomb for all your maven woes

14:24 jcromartie: bingo

14:24 thanks guys

14:24 I just rm'ed ~/.m2/repository/ring

14:25 amalloy: technomancy: that's an opportunity, not a problem. downloading the whole internet is just so dang exciting

14:32 tsdh: Does anyone use core.logic here? I wanted to play around with it, but as soon as I do (defrel man x), I get Unable to resolve symbol: to-stream in this context...

14:32 jcromartie: LauJensen: is there a ClojureQL release I can use with 1.3

14:32 tsdh: That's with 0.6.5 and clojure-1.3.0.

14:35 ibdknox: jcromartie: out of curiosity, is there something specific missing from Korma that makes it not work for you?

14:37 jcromartie: ibdknox: In the little bit of time I spent with Korma, I found problems with joins and complex relationships in our DB schema that basically "broke" everything nice about Korma.

14:37 ibdknox: and is there a way around the "n + 1 selects" problem?

14:37 ibdknox: jcromartie: yep :)

14:37 jcromartie: if you use (join) instead of (with)

14:37 jcromartie: basically, I find that being able to compose ClojureQL relations and sling them around is a lot more useful for our nasty NASTY db

14:38 but (join) doesn't work with has-one has-many, does it?

14:38 ibdknox: jcromartie: sure it does

14:38 jcromartie: oh ok

14:38 ibdknox: jcromartie: it's literally the equivalent of writing a sql join clause

14:38 jcromartie: I see

14:38 ibdknox: jcromartie: so you can build out whatever sql is necessary

14:38 jcromartie: is (join) documented?

14:39 ibdknox: jcromartie: that being said, if you have a couple of simple examples, I'd love for you to shoot an email to the korma list. :) I want to make sure it can handle as much as possible

14:39 jcromartie: another thing that bugged me in Korma: it doesn't normalize (all lowercase keywords) the columns like ClojureQL does

14:39 it makes it hard when your DB has strange capitalization going on

14:39 like ours

14:40 ibdknox: jcromartie: ah, part of that is due to the use of quoted identifiers, which seems to be the only safe solution to the problem

14:40 amalloy: jcromartie: blame your db for that one?

14:40 jcromartie: yeah

14:40 amalloy: like, how should it "normalize" a column name like "the user's name goes here"

14:40 jcromartie: we have a whole table where the table and all of its columns use the mis-spelling "tranaction"

14:41 ibdknox: jcromartie: I think I can potentially provide a couple things to get let you shoot yourself in the foot (basically don't use quotes at all)

14:41 jcromartie: amalloy: I mean :fooBarBaz should become :foobarbaz

14:41 k

14:41 yeah

14:41 :)

14:44 ibdknox: jcromartie: in any case, I'd love to hear your grievances! It's the only way I can make korma better :)

14:50 jcromartie: ibdknox: sure :)

14:50 ibdknox: I do like what I see with Korma

14:50 I hate waffling back and forth

14:50 ibdknox: I know and I want to make sure you don't have to :)

14:50 jcromartie: one thing I really like about ClojureQL is the way the returned objects just represent the query

14:51 and deref gets the data

14:51 while in Korma the default is to execute

14:51 gfrederi1ks: $findfn [4 5] [7] [4 5 7]

14:51 lazybot: [clojure.set/union clojure.core/lazy-cat clojure.core/concat clojure.core/into]

14:51 jcromartie: and sql-only or dry-run is the extra work

14:52 ibdknox: (select* ..) is the equivalent for that

14:52 if you want to carry around the query

14:52 seems the same as (-> (table "blah"... to me

14:53 you can also ask for the sql in that case using as-sql

14:54 (def my-query (-> (select user) (where {:id [> 3]})))

14:54 (as-sql my-query)

14:54 or (exec my-query)

14:55 jcromartie: yeah

14:56 I wish select and select* were swapped :)

14:56 ibdknox: haha I see

14:56 jcromartie: to make deferred execution the default

14:56 manutter: anybody else using cssgen under 1.3? I'm getting "Could not locate clojure/contrib/generic/arithmetic__init.class..." on compile

14:56 ibdknox: well, I think for 90% of cases execution is the default

14:56 jcromartie: it just seems like a cleaner abstraction

14:56 manutter: cssgen 0.2.5-SNAPSHOT

14:56 jcromartie: ibdknox: probably so

14:57 ibdknox: I think that in my case, I end up juggling and composing views because of the database schema

14:58 ibdknox: jcromartie: absolutely, I don't think an extra * is so bad for that though :p

14:58 jcromartie: no

14:58 amalloy: jcromartie: define an alias: se1ect can return the sql

14:59 * amalloy idly wonders how many of his "obviously terrible" suggestions actually get implemented

14:59 * ibdknox goes to implement whole project aliasing :D

14:59 ibdknox: amalloy: just for you

15:00 jcromartie: amalloy: no

15:00 :)

15:00 technomancy: ibdknox: that would be swell; I've always wanted to refer to clj-http as gnir

15:00 ibdknox: technomancy: haha

15:01 technomancy: not to mention clj-time as chrono

15:02 ibdknox: does someone have chrono?

15:03 wow

15:03 it's open

15:03 hmm

15:03 brehaut: amalloy: https://github.com/fredericksgary/lib-2367

15:03 * ibdknox considers being a dick and reserving it :p

15:03 jcromartie: ibdknox: one thing I have a problem with is where a logical "entity" in our system might exist across tables

15:04 amalloy: brehaut: classy

15:04 glad to see someone following through on my crazy ideas

15:04 gfrederi1ks: which idea was I following through on?

15:04 ibdknox: jcromartie: is that addressed by clojureQL somehow?

15:04 brehaut: gfrederi1ks: naming lib-2367 lib-2367

15:04 technomancy: ibdknox: I wrote an early version of clj-time and called it chrono

15:04 but that was before clojars

15:04 gfrederi1ks: brehaut: I thought that was your idea

15:05 jcromartie: ibdknox: by being able to (def some-complex-thing (joins and unions and stuff))

15:05 brehaut: gfrederi1ks: amalloys

15:05 i was just the proxy

15:05 technomancy: disappointed to see it renamed, but I had dropped it by that point

15:05 jcromartie: ibdknox: whereas in Korma I am constrained by Korma's idea that entities <-> tables

15:05 ibdknox: jcromartie: hmm not really

15:05 jcromartie: no?

15:05 gfrederi1ks: what do people do when they want hiccup to make formatted html?

15:05 decide not to want it?

15:06 ibdknox: jcromartie: just define that as the base of your query and compose thereafter

15:07 jcromartie: (def myent (-> (select* some-ent) (join some-other-thing) (join something-else)))

15:07 jcromartie: hm

15:07 ibdknox: (-> my-ent (where (= :cool 3)) (exec))

15:09 jcromartie: ibdknox: what does (fields) do in defentity?

15:09 ibdknox: (entity-fields ...) is the one you want

15:09 and adds fields by default to any query that uses that entity

15:10 jcromartie: right

15:10 ibdknox: I may have screwed that up with explicit join though, I'll take a look later

15:11 amalloy: gfrederi1ks: i know prxml and data.xml have a formatting setting; i wouldn't be surprised if hiccup does too

15:11 jcromartie: ibdknox: and how about being able to specify a query modifier like "TOP 1"

15:11 or something like that

15:11 ibdknox: jcromartie: that I don't have yet, does clojureQL allow that?

15:11 jcromartie: yes

15:11 ibdknox: jcromartie: what's it look like?

15:11 jcromartie: (modify table "TOP 5")

15:12 ibdknox: ah

15:12 ok

15:12 jcromartie: so I can say (defn top [this n] (modify this (str "TOP " n)))

15:12 ibdknox: well that should be relatively trivial to add

15:14 gfrederi1ks: amalloy: cool, thx

15:14 ibdknox: cemerick: when are you thinking of putting up the podcasts you did at the conj? :)

15:21 TimMc: Is there a way to get Leiningen to do static checking on my Clojure code (class not found, etc.) that references some Java classes, but without having to tell it where all the *Java*'s dependencies live?

15:21 pmenon: ,(+ 1 2)

15:21 clojurebot: 3

15:21 pmenon: yay

15:21 lol

15:22 ,(reduce + (take 10 (range)))

15:22 clojurebot: 45

15:22 daniel__1: pmenon: show off

15:23 TimMc: (I have a Maven-built Java project that I am trying to wedge some Clojure into; the Clojure code is not AOT, and runs against the Java classes that Maven has compiled.)

15:25 daniel__1: i can't find the clojure documentation on the for loop, can anyone help me out?

15:25 TimMc: ,(doc for)

15:25 clojurebot: "([seq-exprs body-expr]); List comprehension. Takes a vector of one or more binding-form/collection-expr pairs, each followed by zero or more modifiers, and yields a lazy sequence of evaluations of expr. Collections are iterated in a nested fashion, rightmost fastest, and nested coll-exprs can refer to bindings created in prior binding-forms. Supported modifiers are: :let [binding-form expr ...], ...

15:25 TimMc: daniel__1: http://clojuredocs.org/clojure_core/clojure.core/for

15:26 daniel__1: cheers, i need the examples

15:26 TimMc: daniel__1: and http://richhickey.github.com/clojure/clojure.core-api.html#clojure.core/for

15:26 lazybot: Nooooo, that's so out of date! Please see instead http://clojure.github.com/clojure/clojure.core-api.html#clojure.core/for and try to stop linking to rich's repo.

15:26 TimMc: oops! Thanks, lazybot!

15:26 cemerick: ibdknox: First one this Friday.

15:26 lazybot: botsnack

15:26 lazybot: cemerick: Thanks! Om nom nom!!

15:26 TimMc: daniel__1: rather, http://clojure.github.com/clojure/clojure.core-api.html#clojure.core/for

15:27 daniel__1: danke schoen

15:27 cemerick: does anyone know why gihub.com/richhickey/clojure is still there at all?

15:28 hiredman: ~for

15:28 clojurebot: for is a loop...in Java

15:28 hiredman: ~for

15:28 clojurebot: for is not used enough

15:28 hiredman: ~for

15:28 clojurebot: for is complected

15:29 hiredman: clojurebot: damn your eyes

15:29 clojurebot: I don't understand.

15:29 hiredman: ~for

15:29 clojurebot: for is complected

15:29 hiredman: ~for is not a loop

15:29 clojurebot: Roger.

15:29 TimMc: hiredman: Maybe change clojurebot to prefer a factoid it hasn't recently said.

15:29 I don't know how annoying that would be to code.

15:29 daniel__1: ~let

15:29 clojurebot: Titim gan éirí ort.

15:30 TimMc: ...and it might encourage people to iterate through the whole sequence.

15:30 amalloy: cemerick: i agree, it should be wiped from the face of the earth

15:31 hiredman: clojurebot: Titim gan éirí ort is irish for "may your recursive calls always be in the tail position"

15:31 clojurebot: Ack. Ack.

15:31 cemerick: or maybe just replaced with redirects :-P

15:32 amalloy: cemerick: you could redirect richhickey.github.com/clojure, but not github.com/richhickey/clojure (i think)

15:32 cemerick: right

15:32 empty repos with a single link in the readme have a reliable effect tho

15:32 jcromartie: hiredman: having fun?

15:32 hiredman: me?

15:32 clojurebot: namespaces are (more or less, Chouser) java packages. they look like foo.bar; and corresponde to a directory foo/ containg a file bar.clj in your classpath. the namespace declaration in bar.clj would like like (ns foo.bar). Do not try to use single segment namespaces. a single segment namespace is a namespace without a period in it

15:32 hiredman: sure, always

15:33 daaku: i seem to be getting a exception in lein: "java.lang.NoSuchMethodError: clojure.lang.KeywordLookupSite.<init>(ILclojure/lang/Keyword;)V", but i'm not sure how to backtrack from the trace: https://gist.github.com/c21a37a3e88c28a0243c

15:34 hiredman: means you are using a library compiled for one version of clojure in a project using a different version

15:34 abi compat issue

15:34 cemerick: hiredman: is this the only (persistent) place where you ever commented on REPL protocols, etc? https://groups.google.com/group/clojure/browse_frm/thread/8b2a851d790ed0cc

15:35 hiredman: yes

15:35 daaku: hiredman: i see. would this happen for different java versions?

15:35 hiredman: actually I just started fiddling with slime.el to see if I could get it to speak nrepl

15:35 daaku: no, just different clojure versions

15:36 what version of clojure are you using?

15:36 daaku: hiredman: cool, thanks

15:36 1.3

15:36 hiredman: are you trying to use contrib?

15:36 daaku: i have a working env on one machine, and moving it to another and ran into this after lein deps

15:36 cemerick: hiredman: from a mechanical perspective, that should get a lot easier in the near future

15:36 daaku: i thought i got rid of contrib in my own usage, but i probably missed something, will check that too

15:37 cemerick: replacing commands w/ invocations on the remote side is potentially another story

15:37 hiredman: maybe, I dunno, there are several possible stumbling blocks to completely replacing swank-clojure

15:38 cemerick: and a few more no one knows about yet, I'ms ure

15:42 hiredman: I am sort of surprised there isn't a simple elisp client already (have slime talk to nrepl instead of swank-clojure maybe over ambitious)

15:42 hugod: cemerick: do I remember correctly that nrepl can send multiple replies to a single request?

15:43 cemerick: hiredman: it's hard to get emacs folks to stray ;-)

15:44 hugod: yup; that always happens, insofar as the current impl doesn't happen to mix responses that contain e.g. *out* content and printed value content.

15:45 the "spec" doesn't guarantee that separation, but it doesn't make sense to do anything else

15:45 hugod: cemerick: swank is definitely set up for a single reply to each request

15:45 hiredman: well

15:46 cemerick: and slime just always puts *out* before the value or something?

15:46 hiredman: sort of, but you have a similar separation (at least it seems like it from my mucking around in slime/swank)

15:46 hugod: stream output is handled by separate messages

15:46 cemerick: oh, ok

15:46 hugod: i.e., not linked to a request

15:47 cemerick: oooh.

15:47 hrmph

15:48 hugod: so multiple clients just get a muxed System/out or somesuch?

15:49 hugod: Been a while since I last looked. I'm just refreshing my memory…

15:49 cemerick: Yeah, I'll be there soon enough too.

15:49 I need to knock out this strawman, and then we can all go to town.

15:50 hugod: the stream is connection specific

15:50 hiredman: I think it's more like a session kind of thing, you have a repl session, and you get output for that session

15:51 where session is basically via thread id?

15:52 hugod: a session is based on the connection, at least for ritz

15:53 drewr: cemerick: straying isn't the problem

15:54 it's worse-is-better syndrome

15:54 cemerick: :-)

15:54 sure. same-same in this case, perhaps

15:54 drewr: a sort-of working swank setup is still better than anything else

15:55 brehaut: ,1.2E3

15:55 clojurebot: 1200.0

15:55 brehaut: crap

15:56 TimMc: ?

15:56 brehaut: clojure has a lot of variations on valid number literals

15:56 TimMc: not as many as Racket

15:57 brehaut: im glad im not writing a racket parser then

15:57 TimMc: brehaut: Writing a highlighter?

15:57 hiredman: what I really want is ensime

15:57 brehaut: TimMc: yeah

15:58 TimMc: https://github.com/brehaut/inc-clojure-brush

15:58 hiredman: which I mostly get with swank-clojure, I just want lexical hilighting

15:58 semantic hilighting, or whatever

15:59 brehaut: TimMc: the screenshot there is a bit antiquated; either clone the repo and check out the demo or http://brehaut.net/blog/2011/l_systems

16:00 cemerick: brehaut: in one table, FWIW: http://bit.ly/sfPJc9

16:00 TimMc: brehaut: I am fairly sure that #e1.0+3.0e7i is a valid Racket number literal.

16:00 brehaut: cemerick: thanks! apparently im missing hex numbers too

16:01 TimMc: excuse me, drop the "#e"

16:01 brehaut: TimMc: :O

16:02 TimMc: You can include some mix of exact/inexact, complex/read/imaginary, ratio/decimal/integral, base, exp, pos/neg

16:05 brehaut: ,0xffE5

16:05 clojurebot: 65509

16:05 brehaut: ,0xffE5/3

16:05 clojurebot: #<ExecutionException java.util.concurrent.ExecutionException: java.lang.NumberFormatException: Invalid number: 0xffE5/3>

16:05 jcromartie: ibdknox: what about two-way relationships? do I need to specify those?

16:06 ibdknox: like, (defentity clients (belongs-to client-type)) and (defentity client-type (has-many clients))

16:06 TimMc: brehaut: If only Clojure had a formal spec for its reader...

16:06 brehaut: TimMc: it does; it just happens to be written in java

16:07 TimMc: Self-documenting code, eh?

16:07 brehaut: what other kind is there ;)

16:07 TimMc: I'm just waiting for the self-coding documentation.

16:08 brehaut: ,+3

16:08 clojurebot: 3

16:08 nDuff: TimMc, I think that's "literate programming". :)

16:08 Raynes: Shh, you'll wake up Tim Daly.

16:08 brehaut: cemerick: your book notes that numbers can be prefixed with a dash, but it doesnt mention +

16:09 TimMc: ,[-0 +0]

16:09 clojurebot: [0 0]

16:09 cemerick: brehaut: nice :-D

16:09 thanks

16:09 TimMc: ,0/0

16:09 clojurebot: #<ExecutionException java.util.concurrent.ExecutionException: java.lang.ArithmeticException: Divide by zero>

16:11 TimMc: How do clojure.org docs get updated? Do I open a JIRA or what?

16:14 brehaut: TimMc: http://tech.puredanger.com/2011/11/10/improving-clojures-docs/ (although its 500'ing atm)

16:14 oh. back again

16:23 TimMc: OK, cool.

16:27 broquaint: What's the recommended way of documenting clojure code?

16:28 brehaut: broquaint: what do you mean?

16:28 language style, amount, comments vs doc strings? tools?

16:28 broquaint: Doc strings & tools, brehaut.

16:28 ohpauleez: broquaint: Doc strings on functions are pretty typical, line comments aren't seen a lot because of the structure of code

16:29 some people use literate style and marginalia

16:29 broquaint: Is there a dominant style across libraries?

16:29 brehaut: http://fogus.me/fun/marginalia/

16:29 ohpauleez: The best example to work from is clojuredocs.org if you don't use the literate style

16:29 (the docs of clojure itself)

16:29 hiredman: minimal maybe the dominant style

16:30 brehaut: its uncommon to try to put fussy annotations into the docstrings themselves; metadata is a better place for that

16:30 ohpauleez: for sure, minimal is preferred - usually with an example

16:30 broquaint: I've been wondering how much fun/pain it would be to get library docs into clojars.org (ala search.cpan.org) but wasn't sure where to start.

16:31 ohpauleez: broquaint: it's not that painful, you can use an incomplete project of mine as a base: https://github.com/ohpauleez/clopi

16:32 I pull the package list from clojars, then grab repo details from github and bitbucket

16:32 brehaut: syntax highlighting question: for quotes, [both '(form …) and (quote (form …))] should the heads of lists stop being highlighted as functions?

16:32 broquaint: Thanks, brehaut, ohpauleez & hiredman :)

16:32 ohpauleez: broquaint: totally welcome

16:33 brehaut: good question: vimclojure leaves highlighting intact when quoted

16:33 amalloy: brehaut: i don't think so

16:34 you're still "talking about" a function call, and it should be highlighted as such

16:34 brehaut: cool :)

16:35 i can get behind no doing work

16:35 s/no/not/

16:48 technomancy: amalloy: hope I didn't come across as to dismissive on the require thread. I'm up for discussing import :as, just wanted to get that thread back on track.

16:49 amalloy: no worries

16:50 technomancy: *too dismissive

16:50 when you're pushing for a small change you don't want to get associated with the wilder brainstorming efforts.

16:51 amalloy: i don't really see require/:refer as larger or smaller than import/:as, but i understand the desire to limit scope

16:59 cemerick: amalloy: There was much gnashing of teeth around aliasing of packages years ago. Rich was dead-set against it, IIRC.

16:59 jcromartie: ibdknox: here's one MAJOR point against ClojureQL - no LIKE operator

16:59 cemerick: Things change, of course, so who knows.

17:00 jcromartie: er hm

17:03 hiredman: ^- what the hell? underscores?

17:05 cemerick: hrm

17:06 My clojars idea from before was: let's make org.clojars.* artifacts available only from their own repo URL

17:08 hiredman: interesting

17:10 cemerick: and don't search that repo's index from clojars.org's web UI unless a checkbox is marked

17:11 technomancy: ooh; I could get behind that

17:11 cemerick: http://clojars.org/search?q=compojure => oh, there's compojure, org.clojars.strongh/compojure "1.0.0-SNAPSHOT"

17:11 * cemerick is looking forward to all the builds that will be broken :-D

17:14 brehaut: is it poor form to not specify a groupid on a lein/clojars project?

17:14 technomancy: brehaut: not if you created the project

17:14 well...

17:14 depends on who you ask I guess. =) larger JVM ecosystem may say yes.

17:14 cemerick: there are differing opinions on this :-)

17:15 TimMc: brehaut: I get twitchy about the potential collisions.

17:15 brehaut: oh dear

17:16 * brehaut ponders sticking his head in the sand and continuing to pretend the issue doesnt exist

17:16 cemerick: I don't think it's a question of collisions but of squatting.

17:16 TimMc: ?

17:17 brehaut: Why not just do net.brehaut/foo and be done with it?

17:18 brehaut: TimMc: i guess that would work too

17:18 TimMc: I do org.timmc for my stuff.

17:19 Or hell brehaut.net/foo :-)

17:19 brehaut: TimMc: now im certain that whatever i do will be wrong :P

17:22 TimMc: Ugh... I'm AOT'ing Clojure, and it doesn't want to compile against Foo.class since Foo.class was compiled against off-path Bar.class.

17:23 I don't think I can get Bar.class onto the classpath. Is my mission doomed?

17:26 technomancy: I wonder if clojuresphere could add ecosystem-wide grep.

17:27 ibdknox: lol

17:27 technomancy: ClojureSphere: how many projects have :use with :rename?

17:27 bam

17:27 ibdknox: very, very few would be my guess

17:27 technomancy: s/guess/hope/

17:28 ibdknox: I've never seen it used

17:29 except in the example code I saw from chouser once

17:29 TimMc: Huh. Does that rename individual items from the use'd namespace?

17:29 ibdknox: yeah

17:29 broquaint: I feel there should be a more idiomatic way of doing this but can't think what - http://paste.lisp.org/display/125891

17:29 TimMc: Im'ma start using that!

17:29 broquaint: Also what's a good clojure pastebin?

17:30 TimMc: ~paste

17:30 clojurebot: paste is http://gist.github.com/

17:30 ibdknox: broquaint: (apply alt (map lit-alt-seq ["my" "print" ...]))

17:30 broquaint: s/lit-alt-seq/lit-conc-seq/ ; oops

17:30 ibdknox: alt is a macro :(

17:31 ibdknox: broquaint: the only solution is another macro then :(

17:31 broquaint: Everything can be solved with another layer of macros eh? ;)

17:31 Thanks, TimMc.

17:31 ibdknox: basically

17:31 lol

17:31 brehaut: `(lit-conc-seq ~@(stuf)) ;)

17:31 broquaint: :)

17:31 TimMc: (applym alt ...)

17:31 ibdknox: ... applym?

17:32 ,(doc applym)

17:32 clojurebot: No entiendo

17:32 TimMc: (defmacro applym ...) :-P

17:32 ibdknox: haha :p

17:33 brehaut: the use of macros in fnparse is unfortunate :(

17:34 broquaint: Could you recommend alternative parsing library, brehaut?

17:34 brehaut: broquaint: not really. theres a bunch of combinator libs (mostly parsec ports)

17:34 cgrand has parsley that looks intersting but isnt a combinator lib

17:34 i want to look into parsley more though

17:35 broquaint: Thanks, will look into it too :)

17:36 brehaut: i think cgrand might have talked about parsley during his conj talk

17:36 although perhaps only tangentially

17:37 broquaint: https://github.com/relevance/clojure-conj/tree/master/2011-slides

17:42 broquaint: Ooh, slides from clojure-conj, thanks!

17:45 danbell: are clojure charaters != java characters?

17:45 trying to use isDigit, failing

17:45 amalloy: &(.isDigit \9)

17:45 lazybot: java.lang.IllegalArgumentException: No matching field found: isDigit for class java.lang.Character

17:45 hiredman: how are you trying to use it?

17:45 amalloy: &(Character/isDigit \9)

17:45 lazybot: ⇒ true

17:45 danbell: ah

17:46 pjstadig: ,(type \9)

17:46 danbell: it's a static method, then?

17:46 clojurebot: java.lang.Character

17:46 danbell: thank you much, all

17:48 brehaut: is it still reasonable to use type rather than just class?

17:48 for some reason i thought that the :type metadata was not really the norm these days

17:49 lucian: does anyone know of any news of Clojure on Android?

17:50 samaaron: lucian: it's possible: https://market.android.com/details?id=com.sattvik.clojure_repl&hl=en

17:51 natto: hello, spending inordinate time on this simple issue: (def a {:x :y}); given "x", how get :y? (a (symbol ":x")) does not work

17:52 lucian: samaaron: i know of that, i was wondering if someone knows of anything newer (and ideally feasible)

17:52 samaaron: lucian: it's unclear to me what you mean by that

17:53 brehaut: ,({:x :y) :x) ; natto

17:53 clojurebot: #<ExecutionException java.util.concurrent.ExecutionException: java.lang.RuntimeException: Unmatched delimiter: )>

17:53 brehaut: ({:x :y} :x) ; natto

17:53 ,({:x :y} :x) ; natto

17:53 clojurebot: :y

17:53 lucian: the approach taken by that project has severe limitations

17:53 gfrederi1ks: natto: ##({:x :y} (keyword "x"))

17:53 lazybot: ⇒ :y

17:54 natto: brehaut & gfrederi1ks : thanks, gfrederi1ks answers it

18:02 cemerick: ibdknox: did you resolve jcromartie's korma concerns?

18:03 ibdknox: cemerick: mostly, there were one or two things he mentioned that aren't there

18:03 for the most part it's all there, it's just a matter of thinking slightly differently about it

18:04 cemerick: ok; glad the loop got closed on that anyway

18:08 Interesting that .clone isn't handled specially…

18:08 ,(.clone (make-array Double/TYPE 10))

18:08 clojurebot: #<IllegalArgumentException java.lang.IllegalArgumentException: No matching field found: clone for class [D>

18:08 hiredman: interesting?

18:14 sritchie: do you guys have any ideas about how to extend a protocol to a byte array?

18:14 I'm not sure how to get the class, aside from (class (make-array Byte/TYPE 0))

18:17 brehaut: sritchie: heres a slightly squirrelly version https://github.com/brehaut/necessary-evil/blob/master/src/necessary_evil/value.clj#L161-163

18:17 ibdknox: haha

18:17 I like that

18:18 sritchie: me too, that's great

18:18 brehaut: thanks a lot, that'd been bugging me

18:18 brehaut: sritchie: no problem. im sure there must be a better way to do it, but i havent found it yet

18:18 ibdknox: I can't think of anything obvious

18:18 and that seems relatively clean

18:19 brehaut: im just glad that you can :)

18:20 simonadameit: hi

18:21 im somewhat lost at to what I need to install in emacs, to get clojure support with slime

18:21 TimMc: Counterclockwise doesn't seem to give me javadoc flyover support -- is there an IDE where I can get that?

18:21 simonadameit: there are slime, slime-clj, slime-ritz and clojure-mode available

18:21 but installing all of them seems to lead to conflicts

18:21 hiredman: ~swank

18:21 clojurebot: swank is try the readme. seriously.

18:21 TimMc: simonadameit: Get clojure-mode from marmalade.

18:22 Ph, sorry, misread.

18:22 simonadameit: TimMc: yes, I got that

18:22 TimMc: but where is the slime stuff?

18:22 TimMc: But yes, swank.

18:22 simonadameit: is it included in clojure mode?

18:23 TimMc: I don't know, actually.

18:23 simonadameit: hm

18:23 I can get clojure-mode running with a repl in the inferior-lisp buffer

18:24 TimMc: Looks like you want swank-clojure.

18:24 simonadameit: but I thought there was slime integration for clojure

18:24 TimMc: I'm an Emacs n00b -- I just use the emacs-starter-kit to get set up.

18:25 babilen: simonadameit: https://github.com/technomancy/swank-clojure ← use that

18:27 simonadameit: ah, ok i am somewhat confused with all the different versions of the same thing :)

18:27 i was using "ritz"

18:27 which should do the same - so I thought

18:34 andrewm`: so in 1.3 with the removal of dissoc-in is there a good func to remove keys from a nested map?

18:35 technomancy: andrewm`: doesn't update-in work with dissoc?

18:36 andrewm`: ahh yes that would be the obvious solution

18:36 Bahman: Would someone please guide me on how can I convert a vector into a byte array (i.e. byte[])?

18:36 ibdknox: ,(doc to-byte-array)

18:36 clojurebot: Pardon?

18:36 ibdknox: darn

18:37 ,(doc byte-array)

18:37 clojurebot: "([size-or-seq] [size init-val-or-seq]); Creates an array of bytes"

18:37 Bahman: Thanks ibdknox!

18:37 TimMc: ,(byte-array [1 2 3])

18:37 clojurebot: #<ClassCastException java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Byte>

18:38 TimMc: yuck

18:38 ibdknox: ,(byte-array (map byte [1 2 3]))

18:38 clojurebot: #<byte[] [B@f7a060>

18:39 TimMc: There's no way that's the most efficient way.

18:39 ibdknox: no one said anything about efficiency!

18:39 :p

18:39 simonadameit: hm, how come clojure-mode on clojure-jack-in tries to download its own version of leiningen?

18:39 I already have leiningen installed via homebrew

18:40 hiredman: don't use homebrew

18:40 andrewm`: technomancy: hmm nevermind that doesn't work as update-in operates on the values stored and will only create new entries

18:40 (update-in {:a {:b :c}} [:a :b] dissoc) => {:a {:b :c}}

18:41 ibdknox: ,(update-in {:a {:b :c}} [:a] dissoc :b)

18:41 clojurebot: {:a {}}

18:41 ibdknox: :)

18:41 andrewm`: ^

18:42 andrewm`: ibdknox: correct, but that still leaves keys in the map pointint to an empty map

18:43 ibdknox: huh?

18:43 ,(doc dissoc-in)

18:43 clojurebot: Cool story bro.

18:43 hiredman: ,(dissoc {:b :c} :b)

18:43 clojurebot: {}

18:43 hiredman: that is how dissoc works

18:43 andrewm`: whoops correct

18:43 ibdknox: ,(doc dissoc)

18:43 clojurebot: "([map] [map key] [map key & ks]); dissoc[iate]. Returns a new map of the same (hashed/sorted) type, that does not contain a mapping for key(s)."

18:44 andrewm`: tyvm

18:45 simonadameit: ok, now I see how it should work

18:46 clojure-mode on clojure-jack-in will get slime.el passed through and evaluated from swank-clojure

18:46 but unfortunately emacs gives this error in the process:

18:46 error in process filter: clojure-eval-bootstrap-region: Search failed: "(run-hooks 'slime-load-hook) ; on port"

18:49 so maybe I have incompatible versions of clojure-mode and swank-clojure?

18:49 andrewm`: simonadameit: I got that error some time ago and it was due to me having an older version of lein swank installed. Remove any version of slime you may have installed already, make sure you have the newest version of lein-swank installed and install the newest version of clojure-mode and try again.

18:50 ohpauleez: Is anyone at the nyc clojure meet up right now?

18:51 brehaut: crap i started vi in my emacs shell and i cant work out how to quit

18:52 ohpauleez: brehaut: from vi? or from viper mode?

18:52 brehaut: vi running in a emacs shell mode terminal

18:53 simonadameit: andrewm`: wohoo!! thank you :)

18:54 andrewm`: :-*

18:54 ohpauleez: brehaut: pressing escape a bunch and then ":q" doesn't work?

18:54 (no quotes)

18:54 brehaut: ohpauleez: tried that; emacs kept capturing the esc

18:54 ohpauleez: ahhh that sucks!

18:54 brehaut: (i also not that emacs was smart enough to not try to start up inside the emacs terminal)

18:55 simonadameit: technomancy: at your swank-clojure repo the readme.md says to install swank-clojure 1.3.2, while the current version 1.3.3 is the one that will work with the current clojure-mode in elpa/marmelade

18:56 paulfryzel: simonadameit: are you looking at https://github.com/technomancy/swank-clojure ?

18:56 i see "swank-clojure 1.3.3"

18:56 technomancy: simonadameit: thanks, just fixed it

18:57 simonadameit: paulfryzel:, technomancy : wow, now I wonder wether technomancy is really that fast, or I got it wrong :)

18:57 a mystery

19:03 technomancy: thanks for bringing the slime goodnesss to clojure :) - i just saw you commited an explanation how this all connects to clojure-mode

19:03 technomancy: simonadameit: yeah, long overdue; there was a bit too much "just do this and it works, heyyyy" which sucked when it didn't

19:05 brehaut: everyone loves the mumble style guide for lisp

19:06 technomancy: simonadameit: also, I didn't really bring it to clojure; I just halfheartedly maintain it.

19:16 alex_baranosky: I'm trying to move some code of mine to 1.3, and am getting a ClassNotFoundException in the ns call re: a record I created. Mind you this error does not occur in 1.2

19:16 code is here on GitHub: https://github.com/AlexBaranosky/EmailClojMatic/blob/master/src/core.clj

19:17 hiredman: :(

19:17 don't put dashes in type names

19:17 alex_baranosky: it can't find the CannotPArseReminderStone

19:17 amalloy: single-segment namespaces are evil also

19:17 alex_baranosky: you mean like "core"

19:18 amalloy: yes, and reminder-parsing

19:18 alex_baranosky: yeah, let me fix that

19:18 gfrederi1ks: "core" is the only namespace I use

19:18 alex_baranosky: right, basically the whole project

19:18 :)

19:18 'll fix that... do you think it's related to the failure?

19:18 I'll fix it anyway :|

19:18 amalloy: gfrederi1ks: your core namespace is the only one i use too

19:19 alex_baranosky: hiredman is probably closer to the actual problem

19:19 hiredman: it's very karmic, you do bad things and bad things happen to you

19:19 amalloy: hah

19:19 alex_baranosky: the record type has no dashes though

19:19 hiredman: it does

19:19 amalloy: alex_baranosky: its package does

19:19 alex_baranosky: you mean its namespace?

19:19 amalloy: yes, and also no

19:19 hiredman: you :import'ed it, right?

19:20 it's a java class

19:20 :import is for java classes

19:20 alex_baranosky: that's silly

19:20 hiredman: alex_baranosky: I think what you meant is "I don't understand"

19:20 alex_baranosky: its just an inconsistency

19:21 hiredman: no it is not

19:21 alex_baranosky: and those always bite people

19:21 hiredman: you just don't know anything about records

19:21 it's ok

19:22 alex_baranosky: so, you can use a namespace anywhere in clojure using dashes, btu as soon as you want to create a Record in one, then it won't work as it once dide

19:22 hiredman: no

19:22 java types cannot have '-' in the name, records are java types, …

19:23 dakrone: devn: ping

19:23 alex_baranosky: how does a Clojure namespace look from Java? say 'alex.reminder-parsing' ?

19:24 does it substitute dashes with underscores?

19:24 hiredman: depends on what you mean

19:24 there is the namespace object, an object with a name attribute with the value alex.reminder-parsing

19:24 there is the class generated when that namespace is compiled

19:25 which is something like alex.reminder_parsing

19:25 amalloy: hiredman: alex.reminder_parsing__init, i think?

19:25 hiredman: actually

19:25 yeah

19:25 that

19:25 which is written to the filesystem like alex/reminder_parsing__init if asked

19:25 you do get a alex.reminder_parsing if you have a :gen-class

19:26 alex/reminder_parsing__init.class

19:26 then there is the corresponding clojure file, alex/reminder_parsing.clj

19:26 alex_baranosky: so the CannotParseReminderStone, seems to compile fine to a clss with a matching name

19:27 hiredman: the important bit is the package name

19:27 which is namespace the record/type is defined in

19:27 and in your case contains a dash

19:29 alex_baranosky: so why did it work fine in 1.2?

19:29 hmm...

19:29 amalloy: wait, you're creating a stone class? the whole point of slingshot is that you don't have to create new classes for exceptions

19:30 just (throw+ {:reason :cannot-parse-reminder :other "whatever"})

19:30 alex_baranosky: I thought it would be a bit of self-documentation, considering it could be conceivably hard to follow the code between throwing of the stone, and catching of it

19:30 but maybe that's just old-fashioned oop bs talking

19:30 I'll try just nuking it

19:38 what changed between 1.2 and 1.3 to effect package names on Records

19:39 brehaut: name munging changed between 1.2.0 and 1.2.1

19:40 foo-bar.Record is as is in 1.2.0 (and below? i cant remember when records were added) and foo_bar.Record in 1.2.1 and above

19:41 amalloy: brehaut: they're new to 1.2

19:41 alex_baranosky: so can I import records that are in dashed namespaces with: (:import [dashed_namespace.RecordName]) ?

19:41 brehaut: i cant rmemeber what the big changes in 1.1 were then. hmm.

19:42 alex_baranosky: this project shouldn't even be using Records

19:42 f me

19:42 :P

19:42 amalloy: hahaha

19:42 a frequent realization

19:43 alex_baranosky: however the new ->Record functions are pretty sweet

19:43 brehaut: alex_baranosky: you can only _import_ a record that exists; if the namespace containing the definition hasnt been loaded, and the record hadnt been AOT compiled, then you need to require the namespace first

19:43 alex_baranosky: brehaut: thanks for the clarification

19:43 brehaut: if that ball of words was clarifying, im glad. it looks like soup to me :P

19:44 alex_baranosky: brehaut: dude I am *n* the soup

19:44 *in*

19:45 brehaut: and your guess that you dont want records is probably right

19:46 i think ive created 2 records in all my clojure code, and one of them isnt really all that necessary

19:47 alex_baranosky: brehaut: well, I originally added them in as a experiment with readability... that experiment has gone all sorts of terribly. Considering the potential pitfalls when using records

19:47 amalloy: brehaut: the only guy in here capable of making a ball of soup?

19:48 alex_baranosky: amalloy: one of the bread bowls I assumed.

19:48 brehaut: bread bowls?

19:48 amalloy: brehaut: for putting soup in?

19:48 brehaut: is this some weirdo north american thing?

19:49 amalloy: well i didn't *think* it was

19:49 brehaut: http://en.wikipedia.org/wiki/Bread_bowl

19:49 huh. it really is a thing

19:49 gfrederi1ks: amalloy: wow you wrote that wikipedia article fast!

19:50 amalloy: $write-wiki Bread Bowl

19:50 gfrederi1ks: that crazy lazy bot

19:50 klauern: bread bowls are pretty awesome, actually

19:50 It's like a sandwich, for soup

19:50 brehaut: relevant: http://xkcd.com/978/

19:51 klauern: my mind is blown

19:51 klauern: lol

19:51 amalloy: i like the concept of bread bowls but usually not the execution

19:51 brehaut: amalloy: huh. so like object orientation then?

19:51 but breadish?

19:51 gfrederi1ks: bread-oriented soup

19:52 brehaut: this has gone to a weird place

19:52 amalloy: brehaut: welcome to soup-oriented irc?

19:52 brehaut: i think its just an aspect

19:53 ps, what the hell are aspects?

19:53 amalloy: oh god

19:53 brehaut: amalloy: PTS ?

19:53 hiredman: people always say "cross cutting concerns" which is like, what?

19:54 gfrederi1ks: my friend was asking me just the other day how clojure people do aspect-oriented things

19:54 amalloy: no, more like embarrassment at my former self. i though AOP was really cool even though i knew i didn't understand it

19:54 brehaut: amalloy: you programmed PHP professional, its hardly your greatest embarassment

19:54 technomancy: I'll orient your aspect.

19:54 gfrederi1ks: run!

19:54 hiredman: like stuartsierra saying logic programming is the next cool thing, and then saying he didn't understand it?

19:55 maybe you didn't do it on stage

19:55 amalloy: my understanding is AOP is this great way to create spaghetti code, by secretly injecting code all over your codebase

19:55 brehaut: holy crap

19:56 that sounds like the worst idea since C++

19:56 technomancy: amalloy: alias_method_chain!

19:56 amalloy: technomancy: outside my area, i'm afraid

19:56 hiredman: someone just wrote a blog post

19:56 technomancy: amalloy: oh, it's a ruby thing. better not to know.

19:56 hiredman: https://github.com/raganwald/homoiconic/blob/master/2011/11/COMEFROM.md

19:57 alex_baranosky: all OOP is a mess on some level or another, and I can only assume production Clojure is also a mess, but LESS of a mess :) <bitter today>

19:57 klauern: hiredman: I was just going to find that post, as I just read it

19:57 amalloy: brehaut: like there was some notion of a "join point"; you could insert code before, after, or around various classes of join points. eg, "add this logging statement before every throw(foo) statement"

19:57 brehaut: wait, doesnt emacs have a thing for that?

19:57 hiredman: so, add-hook?

19:58 amalloy: i guess? like i said i never really understood it

19:58 alex_baranosky: amalloy: it has an intricate lexicon

19:58 gfrederi1ks: I don't remember any use cases other than logging

19:59 brehaut: amalloy: im slightly more informed than i was 10 minutes ago, so win!

19:59 rippinrobr: #clojureclr

19:59 woops

19:59 brehaut: theres a bit in the orielly beautiful code book about using the emacs hooks feature to make emacs work for the blind

20:00 that was pretty cool

20:00 amalloy: brehaut: also, gravity on pluto is over ten times stronger than on earth! (pointing out here that being more informed is only useful if information is true)

20:00 brehaut: amalloy: lol. point taken

20:00 gfrederi1ks: also there's usefulness

20:00 alex_baranosky: amalloy: unless you're trying to lie

20:01 gfrederi1ks: brehaut: I had chicken and shrimp for lunch

20:01 brehaut: monads are just endofunctors in the category of monoids, whats the problem?

20:01 alex_baranosky: brehaut: is that some new Parliament Funcadelic?

20:02 amalloy: so wait, in this analogy are shrimp the monads, or is lunch?

20:02 brehaut: i think lunch is the category in this analogy

20:02 so i think shrimp must be endofunctors

20:02 and monads is _the whole thing_

20:03 hiredman: clojurebot: shrimp |must be| endofunctors

20:03 clojurebot: In Ordnung

20:03 brehaut: honestly, i think this is the most profound discussion of monads we have ever had

20:32 hiredman: ~endofunctors |are| functors that map a category to itself.

20:32 clojurebot: In Ordnung

20:32 hiredman: ~shrimp

20:32 clojurebot: shrimp must be endofunctors

20:33 brehaut: ~endofunctors

20:33 clojurebot: #<RuntimeException java.lang.RuntimeException: java.sql.SQLSyntaxErrorException: Syntax error: Encountered "=" at line 1, column 38.>

20:33 amalloy: haha that's actually better than the expected result. he can't stand category theory

20:33 brehaut: clojurebot is not a category theorist

20:34 alex_baranosky: brehaut, so my example of mapping List[String] too List [String] would be Endofunctor??

20:34 lazybot: alex_baranosky: Definitely not.

20:34 brehaut: ~monads is #<RuntimeException java.lang.RuntimeException: java.sql.SQLSyntaxErrorException: Syntax error: Encountered "=" at line 1, column 38.>

20:34 clojurebot: Roger.

20:34 brehaut: ~monads

20:35 alex_baranosky: no idea ;)

20:35 clojurebot: Pardon?

20:35 amalloy: alex_baranosky: well, you gave the example in a different channel, so he can't be expected to guess what it was :P

20:36 * brehaut has no bot-fu

20:36 alex_baranosky: oops! 8)

20:37 amalloy: clojurebot: monads is #<RuntimeException java.lang.RuntimeException: java.sql.SQLSyntaxErrorException: Syntax error: Encountered "=" at line 1, column 38.>

20:37 clojurebot: Roger.

20:37 amalloy: ~monads

20:37 alex_baranosky: amalloy: that's what I get for quadruple-tasting while falling sleep

20:37 clojurebot: Titim gan éirí ort.

20:37 brehaut: alex_baranosky: are we talking about beer now?

20:37 amalloy: oh, i wonder if he's passing the factoid through the reader

20:37 brehaut: cause thats a category worthy of some theory

20:38 amalloy: clojurebot: monads is #=(str "super" "awesome")

20:38 clojurebot: You don't have to tell me twice.

20:38 amalloy: ~monads

20:38 clojurebot: Excuse me?

20:38 amalloy: dude's just confusing

20:39 brehaut: le sigh

20:40 hiredman: ~shrimp

20:40 clojurebot: shrimp must be functors that map a category to itself.

20:41 brehaut: hiredman: is this the inference working?

20:41 hiredman: yes

20:41 brehaut: thats fantastic :)

20:42 hiredman: well, after I smashed on it a bit (was only working for stuff defined with "is")

20:45 gfredericks: clojurebot: itself is a reflexive pronoun

20:45 clojurebot: You don't have to tell me twice.

20:45 gfredericks: ~shrimp

20:45 clojurebot: shrimp must be functors that map a category to itself.

20:45 technomancy: clojurebot has the decency to consider anaphora harmful

20:46 hiredman: if you botsnack with in 2 minutes of an infered result it becomes permanent

20:46 * gfredericks lolz quietly to himself

20:47 hiredman: https://gist.github.com/1372115

21:06 technomancy: hiredman: how about the reverse for botsmack?

21:06 Raynes: ~botsmack

21:06 technomancy: unlearn an accidentally-learned factoid if botsmacked within two minutes

21:06 clojurebot: Owww!

21:07 alex_baranosky: ~botsmack

21:07 hiredman: I'll think about it

21:07 clojurebot: Owww!

21:07 amalloy: best feature ever

21:07 technomancy: hiredman: it's a yin/yang thing

21:08 two sides of the same coin

21:08 amalloy: we'll all be like terribly abusive pet owners

21:11 alex_baranosky: ~botsmack

21:11 clojurebot: clojurebot evades successfully!

21:11 alex_baranosky: lol

21:11 TimMc: haha

21:11 ibdknox: ~botsmack

21:12 clojurebot: clojurebot evades successfully!

21:12 ibdknox: damn him

21:12 alex_baranosky: shoot it's learning

21:12 ibdknox: lol

21:12 skynet here we come

21:12 alex_baranosky: I give it 200 years

21:14 ~shrimp

21:14 clojurebot: shrimp must be functors that map a category to itself.

21:16 TimMc: I leave this channel for 4 hours and what the shit are you going on about?

21:16 alex_baranosky: ~monads

21:17 hiredman: I may have to fiddle with the inference makes lookup expensive

21:17 clojurebot: Gabh mo leithscéal?

21:18 alex_baranosky: ~factoid

21:18 clojurebot: Excuse me?

21:19 TimMc: clojurebot: It's Turing complete |is| <reply>Turing completeness is the Godwin's Law of language arguments

21:19 clojurebot: Roger.

21:19 TimMc: technomancy: ^

21:19 Did you come up with that or did you hear it somewhere?

21:22 hiredman: ~monads

21:23 clojurebot: monads is http://okmij.org/ftp/Scheme/monad-in-Scheme.html

21:49 alex_baranosky: what do you say to someone who says that it is not practical (yet) to write a webapp in clojure, that Rails is more effective dollar for dollar?

21:50 brehaut: alex_baranosky: ask them why they havent jumped to node?

21:51 you have two differing statements in your question

21:51 a) is it practical to write web apps in clojure

21:51 b) is rails more effective

21:51 a) absolutely practical

21:51 b) may be true

21:52 id say it depends on the particular application whether or not rails comes out on top

21:52 TimMc: alex_baranosky: "dollar for dollar" depends on hiring and feeding costs of Ruby programmers as well as productiveness and stability of the resulting Ruby apps,

21:52 .

21:52 brehaut: (the more that it is a web app rather than an application that happens to be on the web, the more it favors rails i would suggest)

21:56 alex_baranosky: speaking from the perspective of someone who does django day to day, django still has the edge over clojure because of the admin for CRUD cms type sites, and i wouldnt rush to try to replicate that in clojure yet

21:57 alex_baranosky: on the other hand, lein, enlive, and ring are all great

21:57 </blather>

22:00 alex_baranosky: brehaut: good points, I just looooove clojure and want to force everyone to use it :)

22:00 we need more awesome libraries to supplement and support the great language

22:02 * brehaut is waiting for ibdknox to do a composable forms library ;)

22:02 lghtng: visual clojure 2011

22:02 sry

22:03 brehaut: (i mean one that isnt part of webnoir obviously)

22:03 klauern: I feel Clojure needs something like playframework, but I have no idea what that would even be: www.playframework.org

22:03 lghtng: Visual Clojure Enterprise 2011 SP11

22:04 brehaut: its 2011; can we get past needing a 'framework' for web development please?

22:05 lghtng: i believe you have misspelt 'emacs'

22:05 lghtng: $899/yr Subscription w/ unlimited downloads for 14 days from FAST Clojure Servers

22:05 i spell emacs M-x

22:06 klauern: I'm not sure I follow. would "starter pack" or "boilerplate" or "starter kit" make it more appealing?

22:06 brehaut: klauern: im not sure why we anything beyond a bit of documentation?

22:09 lghtng: ls

22:09 er

22:09 brehaut: klauern: if you dont want to think about your web programming choices in clojure, theres already noir. its a good default

22:10 lghtng: modlisp

22:10 apache speed and punch, clojure sophistry

22:10 and security

22:10 brehaut: wait wait, apache _speed_ ?

22:11 lghtng: unless you are Oracle, yes

22:12 i think its pretty fast if your not trawling a swamp

22:13 ziff-davis may disagree, but then again, they run a swamp

22:13 * brehaut is content with an nginx reverse proxy

22:19 technomancy: TimMc: I don't think I came up with that

22:19 couldn't tell you where it's from though

22:44 duck1123: Is there any way in clojure to disallow any http connectections and mock them out with known results for unit tests?

22:45 alex_baranosky: duck1123: Midje is good for that kind of thing: https://github.com/marick/Midje

22:46 duck1123: I am using Midje, and I can mock out in known places. I'm just looking for something that can catch the ones I'm not thinking of

22:46 There was a gem for Ruby that did the same thing

22:46 brehaut: duck1123: why not just call the ring handler directly with request maps?

22:46 technomancy: with-redefs is another good one

22:47 duck1123: brehaut: I'm concerned with http connections going out from my server

22:48 I think I might be able to figure something out

22:48 brehaut: ah right

22:53 alex_baranosky: did something change in 1.3 affecting gen-class ?

22:54 code used to work fine on 1.2 but now when I run 'lein run' it gives a ClassNotFoundException

22:54 no dashes in namespace

22:54 duck1123: run doesn't compile

22:54 do a lein compile first

22:54 alex_baranosky: what about uberjar ? does it compile?

22:55 duck1123: I would assume so, I don't use it though

22:55 alex_baranosky: compiled then ran run, and got same error

22:56 duck1123: Oh well, I know that after cleaning, I need to compile before I can run

22:56 technomancy: anything that runs code in the project's JVM should cause compilation of whatever's in :aot in project.clj

22:56 alex_baranosky: is that a change from 1.2 to 1.3?

22:58 what I am doing is creating a simple gen-class with a -main function. Adding that ns to project.clj, and then running lein uberjar

22:58 technomancy: duck1123: hmm; if so that's a bug; it should always detect the need to compile if classes/ is empty.

22:59 alex_baranosky: in the past this made me a jar that worked fine at the command line

23:00 technomancy: alex_baranosky: if you can make a simple repro case please open a bug

23:00 duck1123: technomancy: It may be in part related to the peculiarities of Tigase's class loader. It scans every class file and jar for the implementations it needs

23:01 technomancy: tigase?

23:01 TimMc: XMPP server, yeah?

23:01 duck1123: Yeah, I use it in my server

23:01 TimMc: I think I use their free server to host my XMPP.

23:01 duck1123: I have to gen class the plugin to hook it in

23:01 alex_baranosky: thanks guys, gotta go. If it is a bug, and not my own error, I'll submit a report

23:01 adios

23:03 spoon16: how can I get lein to stop trying to use clojars and centeral?

23:03 technomancy: spoon16: :omit-default-repositories true

23:03 spoon16: thanks

23:03 technomancy: sure

23:04 spoon16: technomancy are you up in Seattle?

23:04 technomancy: spoon16: yeah, shoreline technically

23:04 spoon16: recently moved down to the bay area, from Redmond

23:04 technomancy: cool

23:04 spoon16: was kind of bummed out to see that you were from that area and I had not gone to any of the meetups or anything you are a part of

23:05 great work on lein btw

23:05 technomancy: thanks

23:05 yeah we have a lot of fun at seajure

23:05 duck1123: much less hair fire

23:05 technomancy: spoon16: too bad you hadn't heard of it; anything we could do to make sure everyone doing Clojure in the area knows about it?

23:06 maybe mention it on the main Clojure mailing list occasionally?

23:06 gfredericks: billboards.

23:07 technomancy: gfredericks: well I do have the leiningen logo in high-res now...

23:07 spoon16: I think you are doing alright

23:07 I was just barely getting started when I moved

23:07 * dnolen has perhaps figured out a way to get fair conjunction out of miniKanren ...

23:07 spoon16: so I just had not discovered much in the eco system

23:08 technomancy: spoon16: gotcha. there's a bay area meeting too, but it's not quite as cool as ours. =)

23:08 spoon16: yeah, I've started going to the bay area one

23:09 me and two other guys from Netflix have started attending

23:09 technomancy: great

23:11 brehaut: dnolen: 'fair conjunction'? what is that?

23:11 dnolen: brehaut: logical conjunction. miniKanren has fair disjunction.

23:11 brehaut: that means a branch in a logical or cannot steal all the computation time.

23:12 brehaut: ah right.

23:12 gfredericks: clojurebot: logic programming is the new monads

23:12 clojurebot: Ack. Ack.

23:12 dnolen: brehaut: but miniKanren still has some forms of divergence in clearly finite programs - because conjuction in miniKanren is not fair.

23:13 P & Q, where P is a recursive call that needs information from Q to fail. currently P & Q will diverge. I think I may have a fix… shouldn't get to hopeful yet.

23:13 brehaut: ~monads

23:13 clojurebot: monads is #<RuntimeException java.lang.RuntimeException: java.sql.SQLSyntaxErrorException: Syntax error: Encountered "=" at line 1, column 38.>

23:14 brehaut: bah

23:14 gfredericks: I guess it worked eventually?

23:14 brehaut: dnolen: interesting

23:14 gfredericks: yeah. almost; apparently i dont know enough bot-fu to not have him say 'monads is'

23:15 dnolen: brehaut: if this actual works, it'll fix a big wart in miniKanren, as well as remove a fairly strange hack.

23:15 brehaut: very cool :)

23:15 * dnolen crosses fingers

23:15 gfredericks: clojurebot: monads |are| the new gotos

23:15 clojurebot: You don't have to tell me twice.

23:15 brehaut: dnolen: core.logic must be about a year old now?

23:15 gfredericks: ~monads

23:15 clojurebot: Excuse me?

23:21 brehaut: dnolen: 9 days away from 1 year in fact

23:21 or maybe ten if you take timezones into account

23:22 spoon16: technomancy: how can I avoid repeating my repository credentials for each entry in :repositories (in a project.clj)?

23:23 I swear I read this in the docs, but can't find it now

23:23 technomancy: spoon16: "lein help deploying" should cover it

23:23 spoon16: thanks

23:27 dnolen: brehaut: oh yeah! wow

23:33 spoon16: it seems like you have to override "centeral" repository last in project.clj or the override will not take

23:39 nevermind, it's some wierd local maven problem if I clear my local cache all is good

23:55 Raynes: devn: https://github.com/Raynes/lein-newnewm <-- Thing we talked about earlier.

Logging service provided by n01se.net