#clojure logs

2010-07-11

00:35programbledoes fogus ever irc?
00:37lancepantzprogramble: yeah, he's here daily
00:38programblebut not when i need him
01:39KevinDHaX0rHow do I use the clojurebot?
01:39dakroneKevinDHaX0r: prepend your statement with a comma
01:39dakrone,(+ 2 2)
01:39clojurebot4
01:40KevinDHaX0r,(defn fact (n) (if (zerop n) 1 (* n (fact (- n 1)))))
01:40clojurebotjava.lang.IllegalArgumentException: Parameter declaration n should be a vector
01:40KevinDHaX0rjust learning clojure. used to ANSI CL.
01:40dakronethe arguments to a function go in a vector
01:40KevinDHaX0r,(math/sqrt -1)
01:40clojurebotjava.lang.Exception: No such namespace: math
01:41dakrone(defn fact [n] (if (zero? n) 1 (* n (face (- n 1)))))
01:41dakrones/face/fact/
01:41KevinDHaX0r,(defn fact [n] (if (zerop n) 1 (* n (fact (- n 1)))))
01:41KevinDHaX0rthank you.
01:41sexpbot(defn fact [n] (if (zero? n) 1 (* n (fact (- n 1)))))
01:41clojurebotDENIED
01:41dakroneunfortunately, clojurebot doesn't let you define functions so it doesn't get taken advantage of :)
01:42KevinDHaX0r,(fact 5)
01:42clojurebotjava.lang.Exception: Unable to resolve symbol: fact in this context
01:42KevinDHaX0r,((fn [x] x x) (fn [x] x x))
01:42clojurebot#<sandbox$eval498071$fn__498074 sandbox$eval498071$fn__498074@144eef3>
01:43KevinDHaX0rcool,
01:48KevinDHaX0r,(((fn [X] ((fn [procedure] (X (fn [arg] ((procedure procedure) arg)))) (fn [procedure] (X (fn [arg] ((procedure procedure) arg)))))) (fn [func-arg] (fn [n] (if (zero? n) 1 (* n (func-arg (- n 1))))))) 5)
01:48clojurebot120
01:49KevinDHaX0r,(((fn [X] ((fn [procedure] (X (fn [arg] ((procedure procedure) arg)))) (fn [procedure] (X (fn [arg] ((procedure procedure) arg)))))) (fn [func-arg] (fn [n] (if (zero? n) 1 (* n (func-arg (- n 1))))))) 100)
01:49KevinDHaX0rawsone. I like the bot.
01:49clojurebot93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000
01:49KevinDHaX0rworks without even defining a function :-) Is it ok if I do this.
01:50KevinDHaX0ror is tjhis abusing the bot. I want to play with your bot, but I don't want to piss anyone off doing this.
01:52KevinDHaX0rdakrone: is using the Y-Cominator to write annymous recusive functions ok.
01:53KevinDHaX0r,()
01:53clojurebot()
01:53dakroneKevinDHaX0r: it's hiredman's bot, I don't think he'd mind
01:53dakroneI believe the limitation was there so people couldn't overwrite core methods
01:54dakroneas long as it's not malicious :)
01:55KevinDHaX0rnope. just mathematical functions.
01:55KevinDHaX0rI forgot it was not like my lisp computer at my computer, you can't just restart the bot. The worse case, is that the bot runs out of stack space. but I don't see that happening.
01:56KevinDHaX0ror, at least, I hope a good compiler would not let that happen.
01:57dakroneit's running in a sandbox, so I believe it attempts to catch things that could harm it
01:57dakrone,(System/exit 0)
01:57clojurebotjava.security.AccessControlException: access denied (java.lang.RuntimePermission exitVM.0)
02:07KevinDHaX0r,(((fn [X] ((fn [procedure] (X (fn [arg] ((procedure procedure) arg)))) (fn [procedure] (X (fn [arg] ((procedure procedure) arg)))))) (fn [func-arg] (fn [n] (if (or (zero? n) (= 1 n) n (+ (func-arg (- n 1)) (func-arg (- n 2))))))) 5)
02:07clojurebotEOF while reading
02:08dakronemissed a paren, looks like
02:09KevinDHaX0r,(((fn [X] ((fn [procedure] (X (fn [arg] ((procedure procedure) arg)))) (fn [procedure] (X (fn [arg] ((procedure procedure) arg)))))) (fn [func-arg] (fn [n] (if (or (zero? n) (= 1 n) n (+ (func-arg (- n 1)) (func-arg (- n 2)))))))) 5)
02:09clojurebotjava.lang.Exception: Too few arguments to if
02:10KevinDHaX0rcaught it thanks to emacs
02:10KevinDHaX0r,(((fn [X] ((fn [procedure] (X (fn [arg] ((procedure procedure) arg)))) (fn [procedure] (X (fn [arg] ((procedure procedure) arg)))))) (fn [func-arg] (fn [n] (if (or (zero? n) (= 1 n)) n (+ (func-arg (- n 1)) (func-arg (- n 2))))))) 5)
02:10clojurebot5
02:12KevinDHaX0r,(((fn [X] ((fn [procedure] (X (fn [arg] ((procedure procedure) arg)))) (fn [procedure] (X (fn [arg] ((procedure procedure) arg)))))) (fn [func-arg] (fn [n] (if (or (zero? n) (= 1 n)) n (+ (func-arg (- n 1)) (func-arg (- n 2))))))) 10)
02:12clojurebot55
02:14KevinDHaX0rThank you for letting me use the bot.
02:21KevinDHaX0rGood night everybody. Thanks for letting me use your bot.
03:38LauJensenGood morning all
04:35Licensergood morning my lispy friends
04:35Licenser$(def fibs (lazy-cat [0 1] (map + fibs (rest fibs))))
04:35sexpbot=> #'net.licenser.sandbox.box3471/fibs
04:35Licenser$(nth fibs 10000000000)
04:35sexpbotjava.lang.Exception: EvalReader not allowed when *read-eval* is false.
04:36Licenser$(nth fibs 10000000000)
04:36sexpbotjava.lang.Exception: EvalReader not allowed when *read-eval* is false.
04:36Licenser$(nth fibs 100000)
04:36sexpbot=> 2597406934722172416615503402127591541488048538651769658472477070395253454351127368626555677283671674475463758722307443211163839947387509103096569738218830449305228763853133492135302679278956701051276... http://gist.github.com/
04:59anonymouse89Is there a way to access the index of an item when using map/pmap?
05:11anonymouse89right, got it: (map #(func % %1) coll (range coll-size))
05:11kib2anonymouse89: from Programming Clojure you can use this http://prism-pastebin.heroku.com/72
05:12BahmanHi all!
05:56roblallyHey guys, I little question: what's the correct way to determine if something is a ref? I had hoped that there would be a 'ref?' function but I can't see anything.
05:56AWizzArd,(instance? clojure.lang.Ref (ref 0))
05:56clojurebottrue
05:59roblallyYikes, that's not pretty. I assume since that's so ugly that I'm doing something wrong. I have some code that pulls data out of a ref, that I now want to call inside a transaction where the ref has already been derefed. I don't imagine that I'm the first person to want to do this so I guess I'm missing something.
06:02AWizzArdPlease give more details.
06:03mmarczykmorning
06:03mmarczykhi AWizzArd :-)
06:03AWizzArdHi mmarczyk
06:04mmarczykroblally: just call your code, the fact that the ref has been deref'd doesn't matter... although you might want to deref only once, storing the result in a local, and factor out any transformations into their own functions
06:05mmarczykincidentally, normally you don't need to check whether something is a Ref or not, because you just know it beforehand -- it's part of your design :-)
06:09roblallyAn example of what I'm talking about I have some code that looks like this: (defn get-foo [bar] (:x (:y (:z @bar))) Now inside a (dosync (alter bar (fn [bar..] I want to call get-foo. I know that it is a ref when I call get-foo, outside the dosync, and I know that I have the contents of the ref inside the transaction. It seems I need to either duplicate the code or make derefing the callers responsibility.
06:10mmarczykyou *should* make it the caller's responsibility
06:11AWizzArdIndeed, the ref is just the outer container for your real object. Your fns should operate on the objects, while your transactions work on the refs.
06:11mmarczykalso, you could simplify it to (get-in bar [:z :y :x]) or (-> bar :z :y :x)
06:11AWizzArdAnyone here with a recent clojure.jar? Please test if (do (set! *warn-on-reflection* true) (defrecord Foo [])) throws a Reflection warning for you too.
06:12mmarczykAWizzArd: yeah, I posted about it to the ggroup a while ago
06:13AWizzArdWould be great if one could have a switch that sets *w-o-r* to true during the build process of Clojure and Contirb.
06:13roblallyThat's obviously the lesser of the two evils, but making it easy for code to handle either would seem cleaner. Hence my thoughts along (defn get-foo [bar] if(ref? bar) (get-foo @bar) (....)). I'll try to stick with the idiomatic version, though. Thanks guys.
06:14mmarczykhm, actually I posted a more elaborate case
06:14mmarczyknot a completely empty defrecord
06:14mmarczykso this is better
06:14mmarczykAWizzArd: http://groups.google.com/group/clojure/browse_thread/thread/5d27195d45b2d214/fb51906b2f960d4c?lnk=gst&amp;q=reflection+warning#fb51906b2f960d4c
06:14mmarczykroblally: I have exactly the opposite opinion on what is cleaner :-)
06:15AWizzArdroblally: given that the object in the ref is a record you can define a Protocoll and implement get-foo for Refs and your record type.
06:16mmarczykyou should be explicit about dealing with mutable state, not only for the sake of the prevailing idiom, but to save yourself from weird surprises
06:16roblallyI'm avoiding 1.2 for the moment - I want to make sure that when things don't work it is my fault.
06:17mmarczyk(well, a multimethod would work too, but that's still just wrong :-P)
06:19Chousukeroblally: generally you should code functions so that they only deal with immutable data
06:20roblallyFor me, the cleaner choice is whatever makes things easier for the caller. Where easier means 1) not having to care about things, 2) fewer keystrokes. (I'd rather have ugly inside than outside. Sort of the opposite of how I choose my friends). My functions are only dealing with immutable state - except where they're not. The functions that are bothering me here are the ones that only read values.
06:20Chousukeroblally: the better version of get-foo is (defn get-foo [bar] (-> bar :z :y x)) which is then called as (get-foo @bar). That way, the function deals only with immutable data.
06:21Chousukeit also works with alter
06:21AWizzArdfewer keystrokes is good when it increases productivity
06:21Chousukeit's not "easier" on the user to hide the fact that bar is a ref
06:21AWizzArdsaving to type “deref” does not improve productivity
06:21AWizzArdthe keystrokes that you save by having a GC is, or that you can use fully persistent datastructures.
06:21Chousukerefs should be explicit, and the user should be aware of them; they're the things that you need to care about
06:21AWizzArdThat’s effective saving of keystrokes.
06:22Chousukeif get-foo is a pure function, then the user doesn't need to care about what it does to the ref, because it doesn't deal with the ref at all
06:23mmarczykthe user might be surprised to find that the bar he's been accessing through get-foo seems to have changed
06:23Chousukeconsider the case when you actually pass the ref to the function. You need to know what the function does to be sure that it doesn't mess with the ref
06:23mmarczykmore likely, the code might assume that nothing changes, since there's nothing to indicate there's any mutable state involved
06:23roblallyI want fewer keystrokes, not to save typing effort, but to reduce reading effort. (calculate-delta-path portfolio1 portfolio2) is easier than (calculate-delta-path (deref portfolio1) (deref portfolio2)) because there are fewer tokens to consider.
06:23mmarczykthen hilarity ensues
06:23Licenserhmm vectorial math isn't too bad in clojure :)
06:23Chousukeroblally: no
06:24Chousukeroblally: that would be @portfolio1 and @portfolio2
06:24Chousukeroblally: the thing is, *without* the @ signs you'd have to think about whether calculate-delta-path does something to the refs or not
06:24roblallyWell, yes or no - depending on what I happened to have typed - but point taken
06:24Chousukeroblally: that's much more effort than reading the @ signs
06:25Chousukewith the @ signs it's immediately obvious that the function only cares about the value of the ref, not the ref itself, and it's worry-free
06:26Chousukeit might still be doing the wrong thing but at least it won't mess up the rest of the program :)
06:26roblallyUnless the values point to other refs and then it isn't safe so you gained nothing.
06:26Chousukewell, yes, but that's nonidiomatic
06:26Chousukerefs shouldn't contain other refs
06:26Chousukethat breaks snapshotting
06:27roblallyInteresting, I didn't know that.
06:27roblallyHow would one model a bi-directional relationship without that?
06:27AWizzArdyes, for that you will need refs in refs
06:27Chousukeuse ids?
06:28AWizzArdids is what I use in my Clojure DB system
06:29Chousukeof course, all advice given here is just best-practice. Sometimes it might be necessary to break the rules
06:29Chousukebut it'll often lead to more complicated code.
06:30roblallyBut if it breaks snapshotting (by which I assume you mean the transactionality of fhe system) then isn't it a major problem?
06:30Chousukewell no, since you can still get a consistent image in a transaction
06:30ChousukeI meant easy snapshots with just a deref
06:31roblallyAhh, OK. So things still work - you just end up in the ugly-code corner I've painted myself into.
06:31AWizzArdClojure refs or ids are just references to some other objects. You need to deref (i.e. follow) both to arrive at the object that's referenced. In Clojure it is called deref, in sql the equivalent may be joins
06:31Chousukeif you have a single ref, you can just do @foo, but if you have many levels, you need to do (dosync (doall (for [thing @foo] @thing)))
06:32AWizzArdjoin ... on t1.id=t2.id ...
06:34roblallyAWizzArd: but in a DB you get cascading deletes to help you clean up. On the JVM you'll need to manage the IDs manually to stop them kicking round long after anyone cares about them.
06:34roblallyOr have I missed a clojure trick there?
06:35roblallyAnyway - I don't like the code I have, so I'm going to try redoing things taking your suggestions into account. I'll see how things turn out in version 2.
07:01cschreinerCan someone explain why Color. balks at this? http://gist.github.com/471459
07:02cschreinerDo I need to introduce type-hinting, or is the problem more obvious?
07:02hoeckcschreiner: can you paste the exception too?
07:02cschreinersure
07:03cschreinerthere
07:03cschreinerI can (Color. 1 2 3 4) in the repl
07:04cschreinerbut not from this fn
07:06hoeckcschreiner: maybe casting everything to a primitive int will work: (Color. (int red) (int green) (int blue) (int alpha))
07:06Licenserout of curiosity is this right: http://gist.github.com/471462 (A B and P are all vectors in the form of [x y z])
07:07cschreineryes, I typed the return of inside-byte
07:07cschreinerthat worked
07:08hoeckcschreiner: because java.awt.Color has many constructors, for ints, floats ..
07:08cschreinerhoeck: thanks
07:08hoecknp :)
07:08Licenserhmm I think it is wrong :(
07:11hoeckyay, geometry!!
07:12Licenserhoeck: I hate it especially when I don't find what I want since there is neither a simple expleation nor do I find my table collection :P
08:05cschreinerDarker and Lighter color-functions for use with css -> http://gist.github.com/471501
08:13cschreinerDoes it look idiomatic?
08:53mmarczykcschreiner: yes, it's very nice! you could do [red green blue] (map #(-> % (* fr) Math/round inside-byte) [(.getRed c) (.getGreen c) (.getBlue c)]) to make it a bit DRYer
08:53cschreinermmarczyk: yes I could. Good point..
08:55mmarczykcschreiner: also, you're repeating the condp form almost unchanged
08:55mmarczykhm, probably not worth refactoring though
08:55mmarczykbut maybe use identical?
08:55cschreiner,(doc identical?)
08:55clojurebot"([x y]); Tests if 2 arguments are the same object"
08:55cschreinerokay
08:55cschreinerI'll wrap my head around this now
08:55mmarczykfor 1.2, case would be nicer than condp
08:55cschreiner:)
08:55mmarczyk:-)
08:56cschreinerThanks
09:02Lajla,([1 1])
09:02clojurebotjava.lang.IllegalArgumentException: Wrong number of args (0) passed to: PersistentVector
09:02LajlaGuess not.
09:03Lajlammarczyk, how are you adapting to life without legs?
10:13cschreinerHopefully a little smarter, more idiomatic, with the addition of a blend fn -> http://gist.github.com/471501
10:14technomancysweet; I think I killed the "idiomatic namespaces" thread.
10:39cschreinerI need to turn "FFF" into "FFFFFF" or "AE9" into "AAEE99", what's the most mindblowing way of doing that?
10:40technomancy,(apply str (interleave ["FFF"] ["FFF"]))
10:40clojurebot"FFFFFF"
10:40Hodappmost mindblowing, or most efficient?
10:40cschreinerah interleave
10:40technomancy,(apply str (interleave (take 2 (repeat ["AE9"]))))
10:41clojurebotjava.lang.IllegalArgumentException: Wrong number of args (1) passed to: core$interleave
10:41technomancy,(apply str (apply interleave (take 2 (repeat ["AE9"]))))
10:41clojurebot"AE9AE9"
10:41cschreinerHodapp: suggestions?
10:41technomancydoh!
10:41cschreinerno dice :)
10:43technomancy,(apply interleave (take 2 (repeat "AEF"))) ; oh, right
10:43clojurebot(\A \A \E \E \F \F)
10:44technomancyapply str that
10:44mmarczyk(defn dupl [s] (if-let [x (first s)] (cons x (cons x (dupl (next s)))))) :-P
10:44cschreinertechnomancy: nice
10:44mmarczyk(apply str (dupl "AEF"))
10:44cschreiner,(doc dupl)
10:44clojurebotExcuse me?
10:45mmarczykfor the above solution, (repeat 2 "AEF") could be useful :-)
10:45mmarczykcschreiner: see the defn above
10:45cschreinermmarczyk: ok, I'm with you
10:45mmarczyk,(->> "AEF" (repeat 2) (apply interleave) str)
10:45clojurebot"clojure.lang.LazySeq@a7859cc1"
10:45mmarczyk,(->> "AEF" (repeat 2) (apply interleave) (apply str))
10:45clojurebot"AAEEFF"
10:46mmarczykhm, that's really nice actually :-)
10:46cschreinerindeed!
10:46technomancywinner!
10:46cschreiner:-)
10:47mmarczyk:-)
10:47wlangstrothis it odd that I find (apply str (apply interleave (repeat 2 "AEF"))) easier to read?
10:47mmarczyktechnomancy: is lein 1.2 on hold 'til the repl task gets sorted then?
10:47technomancymmarczyk: no, it's waiting for a Clojure release candidate
10:47mmarczykah, I see
10:48mmarczykI'd like to get onto some of those tasty tickets, but that'll be problematic due to time constraints for a week or so...
10:48mmarczykI'm still curious about your design ideas for the standalone compile, detached (projectless) plugins etc.
10:49mmarczykwith view of hopefully chipping in on the implementation in a little while :-)
10:50technomancyI'd love some help. I will start a brainstorming thread on the mailing list once the release goes out.
10:51cschreinerwlangstroth: it's not odd, we just need more training ;-)
10:53mmarczykcool.
10:58technomancymmarczyk: the other thing besides user-level plugins that i've been considering is writing shell wrappers to disk for when you install a project
10:59technomancymmarczyk: there aren't very many clojure programs right now meant to be launched from the shell... partly a cultural thing and partly a chicken/egg problem since the tools for that are crap right now.
11:02technomancyalso been thinking of a few things to help with making projects work with multiple clojure versions
11:03technomancyfirst would be making it easy to recompile all your deps with the current clojure version
11:03dsoptechnomancy: is there a separation between dev-deps and normal deps in lein 1.2 so that they are not thrown into the same lib directory anymore?
11:03technomancyand then a multitest task that can test with multiple dependency sets
11:03technomancydsop: yeah, that's been implemented in 1.2
11:03dsopoh great. thanks!
11:04technomancydsop: you can use self-install on 1.2.0-RC2
11:04technomancyno need for git
11:04dsopah okay, but I prefer running master. git is installed anyway.
11:05technomancysure
11:15mmarczyktechnomancy: interesting
11:15wlangstrothtechnomancy: I thought there were no clojure shell programs because it generally takes ages for the JVM to fire up
11:16technomancywlangstroth: well, that's why there are no short-running clojure shell programs
11:16technomancybut it would be convenient to have shell wrappers even for long-running server apps or web applications
11:16mmarczyktechnomancy: recompile deps, as in, extract clj files from the jars if available and have the project's clojure.jar compile them?
11:16technomancyyeah
11:17wlangstrothtechnomancy: ah, true
11:19mmarczyktechnomancy: the problem of clojure.string vs. clojure.contrib.str-utils{n} etc. remains... unless you're thinking of some automatic refactoring support for that :-)
11:21mmarczykabout the shell wrappers, how about "installer bundles" comprising a jar / uberjar, a shell wrapper and a shell script to put both someplace convenient and install a symlink to the shell wrapper wherever the user wants it?
11:21technomancywell, the old namespaces are going to stick around a while
11:21mmarczykalso, I wonder how much of cljr you'd want / be willing to duplicate?
11:22mmarczykor you could not care about that, I guess
11:22technomancyI haven't looked into that much
11:23technomancyI'm thinking you could just keep the shell script inside the jar so it could live in clojars
11:23technomancythen at install-time you'd check to see if a jar had a shell script in it and place it on the path if so
11:24technomancyrubygems has a neat wrapper script that lets you select various versions with environment variables; might be a nice idea to steal
11:26mmarczykah, I like the shell-in-a-jar thing
11:57cschreinerI dig the "some" fn
11:58MAslan2010,()
11:58clojurebot()
12:00technomancygood function, terrible name
12:39anonymouse89should pmap operate with less overhead than agents? or can I expect the same performance?
12:39anonymouse89(on very cpu intensive fn's, that is)
13:06mmarczykcschreiner: cool, now to make a Swing clone of 0to255.com with it :-)
13:29cschreinermmarczyk: yeah, why not..
13:49bleakgadflyI am trying to do a (load-file) in Clojure REPL but get java.lang.IllegalArgumentException (file.clj:1). Could anyone give me a hint about what it means?
13:50bleakgadflyIf I try to load it again, the only thing that changes is the number behind "file.clj", (file.clj:2) (file.clj:3) and it keeps going for as many times I try to do load-file.
13:50bleakgadflyI doubt theres an error in every single line of the code.
14:01LauJensenGood morning all
14:01qbgGood morning
14:08chouserbleakgadfly: It's probably an error in the ns macro at the top of file.clj. The line numbers sometimes get messed up.
14:14samg_I am having trouble setting up Clojure with SLIME on emacs. I get an error from swank I believe, saying progn is undefined, because it is using clojure intead of common lisp. Something is wrong wtih my .emacs file, but I am not sure what.
14:15samg_my .emacs: http://paste.lisp.org/display/112374
14:35bleakgadflychouser: Thanks, seems like thats where the error is coming from
14:36bleakgadflyGoing nuts trying to find out exactly what is giving me these errors
14:36bleakgadflyOnly got (:refer-clojure :exclude [reverse replace]) (use 'clojure.string) and (use '[clojure.java.io :as io]) at the top
14:38chousercan you get a full stacktrace? sometimes there's a hint in there as to what's actually failing.
14:38bleakgadflyI only get java.lang.IllegalArgumentException
14:38chouserThis is a plain terminal repl?
14:39bleakgadflyYeah
14:39bleakgadflyI have run it from terminal and via Emacs shell
14:39chousertry (.printStackTrace *e)
14:39bleakgadflySame error
14:39bleakgadflyOkay.
14:40chouserafter you try the load-file that is.
14:40bleakgadflyYeah
14:40bleakgadflyThanks
14:40bleakgadflyI found the error
14:41chouseroh, great.
14:41bleakgadflySeems like (str) didn't like to have another (str (.Date var)) in it.
15:16cschreinerbleakgadfly: (str (Date. ... you mean
17:23Kjellskiping?
17:23clojurebotPONG!
17:24Kjellski,(contains? [\a \b \c] 1)
17:24clojurebottrue
17:24Kjellski,(contains? [\a \b \c] \a)
17:24clojurebotfalse
17:24Kjellski,(doc contains?)
17:24clojurebot"([coll key]); Returns true if key is present in the given collection, otherwise returns false. Note that for numerically indexed collections like vectors and Java arrays, this tests if the numeric key is within the range of indexes. 'contains?' operates constant or logarithmic time; it will not perform a linear search for a value. See also 'some'."
17:25KjellskiCan someone give me a hint what to use to test wether a char is in a seq?
17:26KjellskinDuff: *signed*
17:28nDuff,(some #{\a} [\a \b \c])
17:28clojurebot\a
17:29nDuff,(some #{\d} [\a \b \c])
17:29clojurebotnil
17:29nDuffKjellski, ^^^
17:29KjellskinDuff: thanks, thought there would be something like pythons "in" ^^
17:33dnolen,(some #{\d} "abcd")
17:33clojurebot\d
19:34Raynestechnomancy: Is there a way to tell lein to output something other than projectname-version-standalone.jar on uberjar?
19:47lancepantzRaynes: i believe i saw a ticket related to that on github
19:47lancepantzi'm not sure if it ever got implemented
19:47Raynes:\
19:55mmarczykRaynes: yes there is
19:55mmarczyksince recently
19:56Raynesmmarczyk: Doesn't matter, I just stole liebke's cljr code.
19:56mmarczyk:jar-name, :uberjar-name
19:56mmarczykin project.clj
19:56mmarczykcljr code? to do what?
19:58mmarczyk(you could also say "lein jar foo.jar" / "lein uberjar foo.jar" to override the project.clj default, though uberjar still creates a regular jar first with the default name)
19:58Raynesmmarczyk: Installation stuff.
19:59Raynesmmarczyk: http://github.com/liebke/cljr/blob/master/src/main/resources/cljr/main.clj#L146
19:59RaynesHe and I use a similar installation for our applications here.
19:59mmarczyklet's see...
19:59RaynesAnd I didn't realize that when you run a jar, it's put on the classpath.
20:00RaynesI had the jar name hardcoded in my installer code, but the new RCs of Leiningen don't care for that.
20:00clojurebotthe leiningen screencast is on full disclojure: http://vimeo.com/8934942
20:00mmarczykah, so you no longer care about the jar's name
20:00mmarczykFull Disclojure! it's been ages...!
20:01mmarczyksince clojurebot's mentioned it.
20:26mmarczyk666 Clojure questions on SO :-)
22:10slyrus_anyone working on other graph libraries besides clojure.contrib.graph?
22:47thirddogLooking for clojure library for sql work (mysql, postgres, etc) - have tried clojureql & clj-record but not really happy with either. I like iBatis so is there anything out there that just does sql mapping to records/other structs?
23:38technomancywoot; _ato is going to share clojars maintainership duties!
23:51BahmanHi all!