#clojure logs

2012-11-07

00:00technomancysamrat: I have a branch for that but I don't think it got merged
00:00technomancyimplementation is pretty crappy since there's no :reload that works with load-file
00:01technomancyfor :reload-all anyway
00:01samrattechnomancy: I'll check it out
00:02samratthat was possible in slime right? I think I saw that in one of the Full Disclojure videos
00:02technomancyyeah, slime has the same crappy workaround as my nrepl.el branch
00:02technomancyclojure doesn't expose a way to do it properly
00:05technomancyForSpareParts: afaict ritz only exists for emacs integration
00:06ForSparePartstechnomancy, What do you mean? It looks like it contains some sort of debugger implementation...?
00:07technomancyForSpareParts: yeah, it's a slime backend
00:08ForSparePartstechnomancy, Ah. Yeah. The newer versions support nREPL, though there's not a lot of documentation yet.
00:08ForSparePartsI've figured out how to get ritz into my project (I think) and I've installed its .el, but I don't know how to set a breakpoint.
00:34ForSparePartshugod, If you're around -- are ritz breakpoints not implemented for nrepl yet? Or am I missing something?
00:50wingyhttp://www.chris-granger.com/2012/11/05/meet-the-new-light-table/
00:51wingyamazing shit
01:11tomojjust before I would have sent a datomic group post about resolving tempids with with, I tried something in the repl with the latest version, and discovered that I had missed the feature I needed in the changlelog :)
01:34ForSparePartswingy, I've been reading about that thing for ages. Seems like it's about time I actually try it out...
01:39brainproxylighttable seems cool, but at this point I'm not sure how I would w/o Emacs keybindings
01:39brainproxydid I miss something, and lighttable supports those, or can support those?
01:39brainproxywould *work
01:40ForSparePartsbrainproxy, I've thought the same thing, but I mean, basically every editor lets you rebind stuff, right?
01:40ForSparePartsIf they don't support it yet, it probably will soon.
01:40ForSpareParts*they
01:40brainproxyForSpareParts: good point
01:41brainproxyif so, I'll probably give it a more serious test drive
01:41brainproxyuntil then, Emacs 24 is the bomb :)
01:41ForSparePartsAnd in any case, I'm always willing to try a new workflow (even new bindings) -- they might turn out to be better/more efficient. If I didn't have that attitude, I would never have gotten into Emacs in the first place : D
01:42brainproxyForSpareParts: heh, another good point :D
01:42brainproxyI switched from MacVim about 1.5 years ago
01:42ForSparePartsAre there any known bugs that would cause Clojure to not recognize a call to a no-argument java method? I've got what's supposed to be a method call throwing a 'no field' exception.
01:43brainproxyanybody spent any time with Frege? https://github.com/Frege/frege
01:43brainproxyseems like a cool idea
01:43ForSparePartsbrainproxy, I haven't been able to really get into vim. Its commands and the mode-based editing thing don't seem to hook into my brain as well as emacs.
01:43ForSparePartsI think the key chords build good muscle memory, or something.
01:43brainproxybasically a Haskell work-alike (in terms of syntax and concepts) that's hosted on the JVM
01:44brainproxyForSpareParts: I used vim for many years, since way back
01:45brainproxybut I made the switch not too long before diving headlong into clojure
01:45brainproxyand I vastly prefer Emacs now
01:47brainproxySgeo: you should hack up some super-nifty bridge layer thing to allow easy interop between clojure dev and frege dev
01:47brainproxyyou know, just because you're into the Haskell stuff ;)
01:48SgeoNot sure why I would use Frege instead of Haskell, though
01:48brainproxyhmm, maybe you're right, though I was thinking it would be cool to have them living side-by-side in the jvm
01:49SgeoHmm, possibly
01:49brainproxyanyway, now I know what I want to start messing with in my spare time (not that I really have any atm :/)
01:50ForSparePartsbrainproxy, It frustrates me that our best editing tools have no UX polish. As much as I love Emacs, the era of its original design shows through. Hence my interest in lighttable -- I'd love something that was efficient and powerful (like Emacs) but felt more 21st-century.
01:51brainproxyForSpareParts: I can agree with that for the most part; it will be interesting to see where LT goes
01:51brainproxyand what innovation it may prompt
01:51ForSparePartsyeah
01:52brainproxyi.e. on the part of developers who take some of the idea and incorp. in legacy editors
02:02tomojis this silly? https://www.refheap.com/paste/6461
02:12daniel___http://stackoverflow.com/questions/13260494/clojure-zeromq
02:17wingyForSpareParts: it looks mature enough to use it for my project
03:45brainproxycontinuation monad makes my brain hurt
03:46SgeoMight be better to try to understand continuations outside of the context of monads
03:46SgeoMaybe
03:46brainproxyI've convinced myself I understand the first and second monad laws for it, and the left-hand side of the third law
03:47brainproxyworking through the right-hand side of 3rd law now...
03:55brainproxyactually, the right-hand side wasn't as brain bending as the left
03:55brainproxy:)
04:06WokenFuryanyone know why a Thread/sleep would be pegging cpu at 100%? I've tried the leap second fix I found online, no luck. and I'm using the Oracle jdk
04:06WokenFuryonly does it in repl. lein run is fine
04:18dspphttp://stackoverflow.com/questions/13260494/clojure-zeromq
04:26WokenFurydsantiago: https://clojars.org/org.zeromq/zmq ?
04:26WokenFurydspp even :|
04:37Apage43storm depends on zeromq and seems to have just uploaded a jar to clojars in the backtype/ group
04:46niclHey all, trying to figure out the #() form of: ((fn [x y] [x y]) \a \b)
04:46nicl(Just out of interest)
04:47niclBut can't seem to make it work
04:47niclMy initial guess is (#([%1 %2]) 1 2) but I get a WrongNumberOfArgs exception
04:47niclor rather an ArityException
04:48Apage43,(#(vector %1 %2) \a \b)
04:48clojurebot[\a \b]
04:48Apage43#([%1 %2]) => (fn [arg1 arg2] ([arg1 arg2]))
04:49niclApage43: ah thanks
04:49Apage43that is, what you did was calling the vector [arg1 arg2] as a function, with no arguments
04:49Apage43vectors can be functions, but they take args
04:49Apage43([\a \b] 0)
04:49Apage43,([\a \b] 0)
04:49clojurebot\a
04:49niclApage43: I guess I need to check up the macro
04:50Apage43just need to remember that #(…) is not (fn [args] …), but actually, (fn [args] (…))
04:50niclApage43: yeah, thanks. Much clearer
04:50nicl:)
05:02niclby the way, does anyone actually use #() or is it generally discouraged ?
05:03Iceland_jacknicl: I use it when you don't use the argument
05:04_ulisesnicl: if you end up with a #() that's too long and convoluted I prefer to have a separate fn declared for readability
05:05niclthanks for the feedback/thoughts
05:06_ulisesjust like with python, I try to favour readability of the code
05:06nicl_ulises: yeah, I guess if it starts looking confusing I'll use fn for now
05:07_ulisesnicl: or even declare the fn elsewhere and use it in your code
05:07nicl_ulises: yeah
05:08niclOn a side note, do you know how/where to look up #() in some docs?
05:09niclPerhaps am being stupid but I can't find it anywhere
05:09clgvnicl: http://clojure.org/reader but very brief ;)
05:09_uliseslook up the definition of #()?
05:10nicl_ulises: yeah, the macro for example
05:10_ulisessee what clgv said
05:10_uliseshello clgv!
05:11niclclgv: ok thanks, yeah. I guess if I want more info I should look up the source
05:13clgvnicl: dont do that. since it's implemented in the reader and that one is no clojure source ;)
05:14niclclgv: ah
05:15clgvnicl: and there is not much more to it than what is written on that page
05:15niclclgv: yeah, I'll take the written advice: This is not a replacement for fn - idiomatic used would be for very short one-off mapping/filter fns and the like.
05:16clgvnicl: yeah. also very handy for code golfing on 4clojure.com ;)
05:16niclclgv: thanks for the pointer. Am fairly confident I would not have found the explanation otherwise
05:16clgvnicl: ah there are several good books that would have explained it to you ;)
05:16niclclgv: yeah, am going to try 4clojure (am just starting to try clojure now really)
05:17niclclgv: I have the Joy of Clojure, but thinking about buying a more general language intro too
05:17clgvnicl: I would advise buying a starter book, if you have no lisp experience ^^
05:18niclclgv: can you tell?! ;)
05:18niclclgv: but yeah, the Joy of Clojure is great reading, but I probably need some more practical examples and gentle build up at first
05:19clgvI liked "Programming Clojure" - I read it in its first edition 3days fulltime and got started pretty quickly
05:21niclclgv: yeah, just noticed there seem to be 2 choices: 'Clojure Programming' (o'reilly) or 'Programming Clojure', which you mentioned
05:21RaynesI recommend Clojure Programming.
05:21niclalmost designed to be confusing - two almost identical titles, and released 2 days apart!
05:22clgvnicl: didnt read "Clojure Programming" but heard good things about it - I heard our group bought the book. gotta browse through it some time...;)
05:22clgvnicl: well, the first edition of "Programming CLojure" is much older ;)
05:24tickinghttp://stackoverflow.com/questions/2578837/comparing-clojure-books
05:24tickingnicl, it's a bit older but maybee it helps
05:29niclticking: yeah really useful thanks
05:29tickingnp^^
05:29degDoes Clojure have a way to specify required keyword arguments? To be exact, I want to write a function that accepts any number of arbitrary keyword/value pairs, but certain keywords must be supplied. So far, the cleanest way I've found to say this is with a precondition. Can I do better?
05:29degThis is what I have now: (defn make-rule [& {:as attrs}] {:pre [(:rule-id attrs) (:lhs attrs) (:rhs attrs) (:raw-lhs attrs) (:raw-rhs attrs)]} ...
05:30_ulisesdeg: you can use destructuring straight into the definition of your parameters
05:30_ulisesdeg: not entirely sure if then clojure will complain if you don't pass that keyword
05:32degI don't think it will complain about missing keywords. checking now.
05:32tickingdeg, it will turn then into nil
05:32_ulisesI don't either, but at least you can provide default values for them
05:33ticking,(do (defn foo [&{:keys [a b] :as args}] (println a b args))
05:33ticking(foo :a 1))
05:33clojurebot#<ExecutionException java.util.concurrent.ExecutionException: java.lang.RuntimeException: EOF while reading>
05:33degNope, it defaults to nil. And, I can't provide default values in my case; it is an error if they are not supplied.
05:33ticking,(do (defn foo [&{:keys [a b] :as args}] (println a b args))
05:33ticking11:31
05:33clojurebot#<ExecutionException java.util.concurrent.ExecutionException: java.lang.RuntimeException: EOF while reading>
05:33ticking(foo :a 1)))
05:33tickingwtf
05:34deg#ticking I believe that will allow a and b to not be supplied.
05:34tickingyeah
05:34tickingit will return 1 nil {:a 1}
05:34degThe precondition does do what I want, but just feels a little bit ugly.
05:35degBut, sounds like I can't do any better?
05:35tickingif you find a way tell us ^^
05:36degOh, does Clojure have any distribution mode where preconditions are "optimized" out of the code (like assert in C++)? Or, can I rely on them always being in my code?
05:43_ulisesdeg: if you use destructuring then your pre-conditions can simply be the params themselves
05:44_ulisesdeg: e.g. (defn f [& {:keys [a] :as args}] {:pre [a]} ...)
05:44degGood point. Yes, that will certainly make my code cleaner. thx.
05:44_ulisesit should make it at least a bit more readable
05:44_ulisesand it might even serve as documentation
05:44_ulises"oh, this can't be nil. ok then!"
05:44degyup
05:45deg(I should have seen that.... I was bothered by the smell of repeating "attrs" over and over in the precondition, but I didn't see answer; now obvious in hindsight)
05:47_ulises:)
06:16clgvdeg: maybe clojure.options with default params and transitive option doc suits you (https://github.com/guv/clojure.options)
06:19clgvdeg: there is a contract programming lib called "trammel"
07:27tonix81ciao
07:28tonix81!list
07:51Chironhi, what it is called the resulting function of partial ?
07:52Chironany convention?
07:52shachafA function?
07:52Chironyes, it is a function . but any used convention? such as partialed ?
07:52Chironor something
07:54shachafI don't see why. It's just a function.
07:54shachafThat may be my Haskell mindset speaking.
07:55Iceland_jackMany functions have special names
07:55Iceland_jackit's a legitmate question
07:56shachafIf you give it a name it has a name. :-)
07:58Iceland_jackA Partialtite
07:58clgvChiron: well your function has a name due to its semantics. probably the partial function has asemantic as well?
07:59clgvChiron: just naming every function resulting from a partial the same doesnt provide much info ;)
08:01Chironfor something like (convert [dir1 dir2 file]) i want to fix the first two args
08:01Chiron(partial convert dir1 dir2)
08:02clgvconvert-file?
08:05Chironclassy and sassy
08:19Chironwhy (concat [1 2] [3 4]) returns (1 2 3 4) . isn't that is what flatten should do? why not ((1 2) (3 4)) ?
08:19Chiron,(concat [1 2] [3 4])
08:19clojurebot(1 2 3 4)
08:20Chironclojurebot: do you know what it feels like to know that the lock on the door is changed?
08:20clojurebotCounterclockwise aka ccw at http://code.google.com/p/counterclockwise/
08:21Chiron,(flatten [1 2] [3 4])
08:21clojurebot#<ArityException clojure.lang.ArityException: Wrong number of args (2) passed to: core$flatten>
08:21Chironoops
08:22clgvChiron: concat stands for concatenation, i.e. put two or more sequable things together
08:22Chironyes, why its result is not ((1 2) (3 4)) ?
08:23clgvChiron:because thats no concatenation
08:23Chironi'm putting two sequable things together
08:23clgvthat is list construction. use ##(list [1 2] [3 4])
08:23lazybot⇒ ([1 2] [3 4])
08:23Chironeye c
09:00jcromartieis the guy who wrote Ironclad: Steam Legions ever on here?
09:00jcromartie"mikera"
09:07jcromartie~seen mikera
09:07clojurebotGabh mo leithscéal?
09:07jcromartiebleh
09:10clgv$seen mikera
09:10lazybotmikera was last seen joining on clojure 13 weeks and 1 day ago.
09:11degWhat is the best way to profile Clojure code?
09:12TimMcdeg: VisualVM is a general JVM profiler.
09:12TimMccriterium is a good Clojure benchmarker.
09:14jcromartiethanks clgv/lazybot :)
09:14tickingdeg, what do you want to do? find bottlenecks or compare two implementations of the same functionality?
09:14degFind bottlenecks.
09:14tickingdeg, then VisualVM it is ^^
09:14clgvdeg: there is also yourkit java profiler but that one will cost you after the trial period
09:15degIs integration of VisualVM trivial?
09:15tickingdeg yes
09:15tickingyou start your process
09:15degI'm looking for something lightweight in startup/learning time.
09:16tickingfire up visualvm, and hook into the process (it will find it automatically sinc its a java one)
09:16deg(I don't have much code yet, and could almost certainly solve my immediate needs in 1-2 hours even without a profiler.)
09:16degThat sounds good. I'm looking at the visualvm docs now, thanks.
09:16tickingdeg: I found visualvm to be pretty easy to use
09:17tickingdeg: I highy recomend downloading and throwing yourself into it, it's really not hard to use and easy to go exporatory
09:17degDoes clojure.contrib.profile still exist? It's doc makes it sound like VERY lightweight integration and probably good enough.
09:18tickingdeg, contrib is dead, maybee it got portet to a new namespace
09:18TimMc~contrib
09:18clojurebotMonolithic clojure.contrib has been split up in favor of smaller, actually-maintained libs. Transition notes here: http://dev.clojure.org/display/design/Where+Did+Clojure.Contrib+Go
09:19degI've looked there; it seems to say that .profile has been abandoned, if I'm reading it right.
09:21clgv ticking: downloading visualvm? that one is usually installed with your jdk
09:21tickingclgv, not on a mac for example
09:21clgvah ok. well than download it ;)
09:21degI'm on Windows, using Eclipse. (no snide remarks please)
09:22supertramppoor boy
09:22degc'mon, if you're gonna be snide, at least be really funny too. :-)
09:25degdisappearing for a bit ... not only am I in Windows and Eclipse, I also have to "soccer-dad" my kids for the next little while. But, looks like I'm good ... VisualVM started, and sees the clojure jvm. Now I just have to RTFM and I should be good. Thanks all.
09:29tickingnp^^
09:37alexnixonso I just set up an instance of lazybot on my companies internal IRC server, and the first thing that peeps tried was to break the sandboxing. Is it expected that you can cause lazybot (built on clojail) to output a list of files on the system?
09:42clgvalexnixon: guess not. but you can try here.
09:43clgv&(use 'clojure.java.io)
09:43lazybot⇒ nil
09:43alexnixon,(take 2 (tree-seq (memfn isDirectory) (memfn listFiles) (java.io.File. "..")))
09:43clojurebot#<ExecutionException java.util.concurrent.ExecutionException: java.lang.SecurityException: denied>
09:44alexnixon&(take 2 (tree-seq (memfn isDirectory) (memfn listFiles) (java.io.File. "..")))
09:44lazybot⇒ (#<File ..> #<File ../.cache>)
09:44clgvalexnixon: most likely you have forgotten to or improperly added the permissions file for the java sandbox
09:45clgv&(take (map str (tree-seq (memfn isDirectory) (memfn listFiles) (java.io.File. ".."))))
09:45lazybotclojure.lang.ArityException: Wrong number of args (1) passed to: core$take
09:45clgv&(map str (tree-seq (memfn isDirectory) (memfn listFiles) (java.io.File. "..")))
09:45lazybotExecution Timed Out!
09:45clgv&(take 5 (map str (tree-seq (memfn isDirectory) (memfn listFiles) (java.io.File. ".."))))
09:45lazybot⇒ (".." "../.cache" "../.cache/ctrlp" "../.cache/ctrlp/mru" "../.cache/ctrlp/mru/cache.txt")
09:46alexnixonyou can see the same behaviour on tryclj.com too
09:46clgvalexnion: I had a look at clojail a while ago. if the java sandbox permissions support it you can forbid it
09:47wingyhow can i check all variables in a namespace?
09:53jcromartiewingy: check?
09:53wingyjcromartie: listing all variables in a namespace
09:53clojurebotunderscores in namespaces is a bad idea
09:54jcromartie,(ns-publics 'clojure.core)
09:54clojurebot{sorted-map #'clojure.core/sorted-map, read-line #'clojure.core/read-line, re-pattern #'clojure.core/re-pattern, keyword? #'clojure.core/keyword?, unchecked-inc-int #'clojure.core/unchecked-inc-int, ...}
09:57wingyjcromartie: thx
09:58wingyis there a way to avoid escaping the " in a json string https://www.refheap.com/paste/6468
09:59jcromartiewingy: you don't have to quote most keys in a JSON object literal
09:59jcromartiealthough it's "more correct" it's not required as long as the keys are not JavaScript keywords
09:59jcromartieso when you're writing JSON by hand, you can skip the quotes, but if you're generating JSON please do automatically quote keys
09:59jcromartieor if the keys are invalid JavaScript identifiers
10:00wingyhm
10:00wingyill test
10:00clgvwingy: ##(do (use 'clojure.set) (keys (ns-publics 'clojure.set)))
10:00lazybotjava.lang.SecurityException: You tripped the alarm! ns-publics is bad!
10:00clgvoh well...
10:00TimMcjcromartie: The JSON spec requires quotes; with JSON literals in JS you're correct.
10:01wingyjcromartie: i get error if i remove the " around the keys
10:01wingysince the string is json it requires " around keys
10:01wingyand string values
10:01wingyi just wonder if there is a way to not having to escape those in clj
10:01jcromartiehmm, yeah I guess that's correct
10:02wingyso i can just copy paste but make it a valid json string in clj
10:02jcromartiewingy: no, because the only string literals in Clojure are double-quoted
10:02wingyperhaps if i create the string manually?
10:02jcromartiewingy: you can keep your JSON data in a .json file and load it
10:02jcromartiethen you don't have to worry about the Clojure string literal
10:04wingyyeah but unfortunately i am having these in tests
10:04wingybetter to have them in same place
10:04wingyi'll just escape :)
10:05jcromartiewingy: you can store resource files alongside your tests
10:05jcromartieit's not hard, really
10:05wingyyeah
10:05wingybut readability is worse
10:05jcromartieor just use Clojure maps/vector literals
10:05wingysince you then need to open mutiple files
10:05jcromartieand convert them to JSON
10:05wingyyepp
10:05jcromartieI'm assuming you need to send a JSON string to something
10:05wingybtw .. check out the new light table .. this version is frecking hot
10:05jcromartieyes it's nice
10:06wingylike 1000 times better than the previous one .. getting more mature and vim like
10:06jcromartiebut getting close enough to Emacs to make me wonder why I should use LightTable instaed :)
10:06jcromartiewith a minibuffer and all
10:06wingyits on clj!
10:06wingyfor clj
10:06clgvcljs ;)
10:06wingyand clj?
10:06clgvnot anymore it seems
10:06jcromartieI like it
10:07clgvcljs only running on chromium, chris granger said yesterday
10:07wingyok
10:07wingycool that he is using cljs
10:07wingya good killer app
10:07jcromartieI can't wait until it's open sourced
10:07clgvI wonder whether cljs development benefits from that ;)
10:08jcromartieso it's webkit huh?
10:08clgvyeah
10:08jcromartieOK that's awesome
10:08jcromartieexactly the kind of thing I hoped WebKit would power one day :)
10:08jcromartieI also want to see a WebKit terminal emulator
10:09wingyseems that web techs are still the best to make cross platfor
10:09wingym
10:09jcromartieoh https://github.com/unconed/TermKit
10:10fckwHi there.
10:11fckwI am currently playing around with a data structure that could be called "hanging tree".
10:11fckwEvery node (except leaves) is guaranteed to have exactly 2 children.
10:12fckwAND: However, unlike in common binary trees more than one parent can point to a child.
10:13fckwWhat I am looking for is finding a list of all common ancestors of leave nodes.
10:13TimMcSo... it's a binary DAG.
10:13fckwAh, did not know that's how it's called.
10:14TimMcWell, "binary DAG" may not be an existing term, but you're describing a type of DAG.
10:14fckwDo you know of any algorithms for finding a list of LACs?
10:14fckwIt certainly is, yes.
10:15fckwOf course I can reuse existing algorithms for finding LACs in DAGs.
10:15fckwBut I thought, maybe there's something more efficient, because I have a more restrictive graph, knowing that it's binary.
10:15wingyjcromartie: you are right .. better to have them in a json file
10:15wingymakes the test cleaner
10:15jcromartie:P
10:16wingyand no need to backslash
10:16wingyim not a shit worker!
10:16jcromartiewingy: are you familiar with resource loading?
10:16clgvwingy: well webkit with native deps that need to be linked seems to cause some issues when they are linked dynamically
10:16jcromartiewingy: yes, save yourself some work :)
10:16wingyjcromartie: how do i read the json string from file into memory
10:16wingyslurp?
10:16clojurebotslurp is worse
10:16jcromartiewingy: so you put your .json files on the classpath, and get the path with clojure.java.io/resource
10:17TimMcclojurebot: The hell are you on about?
10:17clojurebotI don't know anything about cshell.
10:17jcromartieslurp is not wrong here
10:17wingythen i just use slurp
10:17TimMcfckw: Does the DAG always have a unique root?
10:18TimMcAnd are you trying to find the closest common ancestor for a given pair of leaves?
10:18jcromartiewingy: yeah, so for instance, make a directory like test/resources/test_data.json
10:18jcromartiethen (slurp (clojure.java.io/resource "resources/test_data.json"))
10:19jcromartieand you're good
10:19fckw@TimMc: Yes - but there might be multiple ones, if I'm not mistaken.
10:19jcromartieand of course a convenience function like (defn load-json [name] (slurp (clojure.java.io/resource (str "resources/" name ".json"))))
10:19jcromartiecould be handy :)
10:20jcromartiewingy: and off you go :) have fun
10:20wingywhy do i need the (clojure.java.io)
10:21wingyseem that you can specify the path directly http://clojuredocs.org/clojure_core/clojure.core/slurp
10:22jcromartiewingy: because you want to resolve the path no matter where you run your program from
10:22jcromartiewingy: clojure.java.io/resource locates it as a resource on the classpath
10:23jcromartiewingy: it relieves you from making sure you're in the right working directory before running your program
10:23jcromartiewingy: and you can bundle resources in a .jar and load them this same way, so they don't necessarily have to be in the filesystem
10:25TimMcMan, the Light Table site looks like utter ass on my computer: http://i.imgur.com/05AFQ.jpg
10:25_ulisesthat does indeed look like arse
10:26TimMcFirefox 9, Linux Mint *probably* has something to do with it. :-P
10:26fckw@TimMc: I am currently checking, whether this is basically the same as a Binary Decision Diagram.
10:30fckwYes, it actually seems that what I'm looking for is an algorithm for finding all lowest common ancestors (LACs) in a binary decision diagram (BDD).
10:30fckwWikipedia on BDDs: http://en.wikipedia.org/wiki/Binary_decision_diagram
10:32wingyjcromartie: i must put it in resources?
10:32wingywhat if i wanna put it in the same folder as the test file
10:33jcromartiewingy: it's just a convention
10:34TimMc"LAC", not "LCA"?
10:35fckw"Lowest Common Ancestor".
10:35bordatouehello, is it possible to get integer overflow error in clojure when it does automatic promotion
10:35TimMcHmm, doesn't the DAG need to be rooted?
10:35wingyjcromartie: where should the resources folder be? in the project root or test/
10:35fckw(Yes, LCA.) Is it not rooted?
10:35TimMcbordatoue: Automatic promotion only happens with +', not +.
10:36wingybtw .. i put the json file in the same folder as the test file
10:36fckwIt's really the same data structure as used in a BDD, as I found out already. But unlike BDDs I am really not interested in using them for decision making, but for storing data.
10:36wingybut when doing (slurp "file.json") it cannot get it
10:36TimMcThat was a breaking change from 1.2 to 1.3 -- + was renamed to +', and non-promoting + introduced.
10:36bordatoueTimMc: what is +'
10:36wingyhow should i load it properly
10:36TimMcbordatoue: Auto-promoting +
10:37TimMcfckw: And BDDs only have 2 leaves.
10:37bordatoueTimMc: thanks
10:37bordatoueTimMc: so if i type (apply +' (range 100000000000000000)) should give me a result
10:38TimMcEventually.
10:38ivanhttp://vimeo.com/euroclojure/videos completely missed these
10:38TimMcbordatoue: err... except range might break
10:39fckw@TimMc: Yes, here's an important difference between BDDs and the data structure I mean. So it's really rather a "binary DAG", as you call it.
10:39jcromartiewingy: I told you how to load it :)
10:39bordatoueTimMc: thanks very much,
10:39jcromartiewingy: use clojure.java.io/resource
10:39TimMc,(take 5 (range Long/MAX_VALUE Double/POSITIVE_INFINITY))
10:39clojurebot#<ExecutionException java.util.concurrent.ExecutionException: java.lang.ArithmeticException: integer overflow>
10:39TimMc,(take 5 (range (bigint Long/MAX_VALUE) Double/POSITIVE_INFINITY))
10:39clojurebot(9223372036854775807N 9223372036854775808N 9223372036854775809N 9223372036854775810N 9223372036854775811N)
10:42clgvis it right that primitive functions (functions with primitive type hints since 1.3) are not called via their ".invokePrim" when I pass them around as first class functions and call them where needed?
10:42wingyjcromartie: it says java.lang.IllegalArgumentException: No implementation of method: :make-reader of protocol: #'clojure.java.io/IOFactory found for class: nil
10:42wingywhen running (slurp (clojure.java.io/resource "get_user_info.json"))
10:42degticking: So, I'm playing with VisualVM, but don't yet see how to find the results I want. I figured out that I need to look at a snapshot to see a tree view, but it only shows me clojure runtime methods, petering out with "self time" under clojure.core$pop.invoke. And, I found Tools|Options|Profiler CPU|Do not profile classes, but it doesn't seem to filter the output.
10:45jcromartiewingy: the argument to clojure.java.io/resource should be relative to the classpath… so since your "test" directory is on the classpath, it will search there, so use the path relative to test
10:45jcromartieso if you did it like I said and put it in your_project/test/resources/get_user_info.json then you'd load it with (resource "resources/get_user_info.json")
10:45degticking: Hmm, tried again. This time, I do finally see one of my functions. But I need to click/dive down about 20 levels, and I don't see my other functions that call that function.
10:46jcromartiewingy: Java resource loading is handy to understand, but it takes a while to "click"
10:46jcromartiewingy: once you get it, it will makes sense, though
10:46wingyjcromartie: worked
10:46wingyjcromartie: i need to read about it
10:46wingyhate when you dont get a thing
10:47wingyif you guys have good tutorials for class path/resource loading please share
10:48fckwOk, according to some uni script I found online, BDDs are allowed to have nodes with > 1 input edge. Then my data structure is really a BDD in this sense.
10:50wingyjcromartie: thx for the help btw
10:50bordatoueis there any function in clojure that would display all the symbols in a namespace
10:50jcromartiewingy: any time
10:50jcromartiebordatoue: we already did this today :)
10:50jcromartie,(ns-publics 'clojure.core)
10:50clojurebot{sorted-map #'clojure.core/sorted-map, read-line #'clojure.core/read-line, re-pattern #'clojure.core/re-pattern, keyword? #'clojure.core/keyword?, unchecked-inc-int #'clojure.core/unchecked-inc-int, ...}
10:51bordatouejcromartie: thanks
10:55fckwOk, got it now: There is a distinction between BDTs (binary decision trees) and BDDs (binary decision diagrams). BDDs allow a node to have > 1 ancestors, whereas in BDTs there must be exactly 1 ancestor. What I have in mind is a binary decision diagram.
10:55fckwBDD.
11:01tickingdeg, how about the hotspots tab?
11:12TimMcclgv: I think invokePrim only gets used when you call a prim fn by var name.
11:12clgvTimMc: I come to think the same. Is there no way to hint that a function passed to another function is primitive?
11:12TimMcGiven (defn some-prim ...), (some-prim 1 2 3) vs. (let [other-name some-prim] (other-name 1 2 3))
11:12TimMc...since I think it uses the :arglists on the var.
11:13TimMcIt's very hacky and terrible as of 1.3.
11:13clgvit does according to Compiler.java
11:13clgvis it better in 1.4?
11:14TimMcclgv: Here's what I wrote last time I actually read Compiler.java stuff: http://www.brainonfire.net/blog/hof-vs-prim-invoke-clojure/
11:14TimMcI don't know what happens in 1.4.
11:15clgvwell I think metadata on the callsite could enable primitive HOFs
11:15clgvbut it seems not that this is implemented :(
11:16clgvthat means I cant use primitive functions in my algorithm framework... ;(
11:18clgvI could create a callsite macro though
11:25sh10151anyone a slime/emacs user? the colors in sldb tracebacks are too pale and I can't figure out how to change them
11:25sh10151customize-face doesn't bring up a named face
11:26konr_trabis there already a "map-vals" function that gets applied to the values of a map? For example, (map-vals inc {:foo 1 :bar 2}) -> {:foo 2 :bar 3}
11:29chronnosh10151: I use the function at https://www.refheap.com/paste/6470 to find the name of the face the cursor is over
11:30TimMckonr_trab: Nothing in the core lib. zipmap may be useful, and (into {} (for [[k v] map] [k (f v)])) would certainly do the trick.
11:33alexnixonkonr_trab: https://github.com/flatland/useful/blob/develop/src/useful/map.clj#L47
11:34konr_trabalexnixon: haha, with the same name :)
11:38jweissif i want to replace fns like clojure.core/= clojure.core/some etc with traced versions (that print out input/output), just in the current thread, what's the best way? i could use a macro to replace all calls to those fns to re-point to my own with a different symbol, or i could use with-redefs to first make them dynamic, and then use a binding form as usual to enable tracing for the local thread. both seem a bit ugly.
11:38clgvwhy does this fail ##(Class/forName "clojure.lang.IFn$LLL") ??
11:38lazybotclgv: Uh, no. Why would you even ask?
11:38lazybot⇒ clojure.lang.IFn$LLL
11:39clgvhumm here it does not ...
11:39TimMcAre you in 1.2?
11:41bordatouehow to represent char '' in clojure
11:41TimMcWhich char?
11:41clgv1.3
11:41bordatoueTimMc: '' empty char
11:42TimMc...is that a thing?
11:42bordatoue/u0000
11:42TimMc,(char 0)
11:42clojurebot\
11:42TimMcNUL, not empty.
11:42bordatoueTimMc: what is \u0000
11:43TimMcIt is the Unicode code point for the NUL character.
11:43S11001001bordatoue: there is no such thing as an empty char, no more than there is an empty number
11:43ivan,\u0000
11:43clojurebot\
11:43ivan,(type \u0000)
11:43clojurebotjava.lang.Character
11:43TimMc&(= (char 0) \u0000)
11:43lazybot⇒ true
11:43TimMc&(= (char 65) \A)
11:43lazybot⇒ true
11:43bordatoueTimMc: thanks , is '' also represented as null
11:44TimMcbordatoue: '' does not exist.
11:44bordatoueTimMc: in java i can do something like tthis char c=''
11:44TimMcCheck if it is equal to '\u0000'.
11:45bordatoueTimMc: yes it is equal
11:45TimMcIt must be shorthand.
11:45bordatoueTimMc: thanks very much
11:47S11001001am glad java has a convenient way to specify the 0 character, I need to do it pretty often
11:47S11001001switching to java now
11:47clgv&(Class/forName "clojure.lang.IFn$LLL")
11:47lazybot⇒ clojure.lang.IFn$LLL
11:47S11001001will also enjoy writing numbers like 1_048_576
11:48clgvhumm that one fails on 1.4 here as well...
11:48bordatoueTimMc: if i create char-array in clojure will it be initialled with char 0
11:48jweisshow do i get around clojure.core vars not being dynamic. i want to rebind them.
11:48bordatoue,(seq (char-array 10))
11:48clojurebot(\
11:49clgvdamn typo that I did not copy...
11:49bordatouewhen i did (seq (char-array 10)) in the repl i got ( \@, \@ ....)
11:51cmnthat's just your shell/terminal's way of showing it
11:52bordatouecmn, thanks
11:53TimMcclgv: I wonder if it needs importing...
11:53TimMcclgv: Try clojure.lang.IFn$LLL in your REPL, by the way.
11:54clgvTimMc: no. I was obviously too tired to spot the typoe clojure.lang.IFN$LLL
11:55TimMcoh, ha
12:09seancorfieldibdknox: did an update to LightTable for Windows get posted fixing the pathing issue?
12:39ipostelnikin lein is it possible to only enable AOT compilation for uberjar, but leave it off when building a regular jar?
12:41mudgeI'm defining a class using gen-class. Inside my class I have a -main function where I instantiate my class --- how ever this does not compile. The compiler says that it cannot resolve the class name, any suggestions?
13:08qubit[01]is there anything like pop-nth ? That will remove the nth item from a sequence and return it ?
13:09ivanseqs are immutable
13:09ivanoh, I see what you mean
13:09qubit[01]well actually, I need it to be mutable, so that wont work
13:10qubit[01]I'm trying to learn clojure by doing problems, and this one is shuffling a deck
13:10qubit[01]I feel like Im makint it harder than it needs to be
13:11ivanI know of a library with the proper shuffling algo in pure Clojure
13:11uvtc,(shuffle [1 2 3 4])
13:11clojurebot[3 4 2 1]
13:11mudgeI'm defining a class using gen-class. Inside my class I have a -main function where I instantiate my class --- how ever this does not compile. The compiler says that it cannot resolve the class name, any suggestions?
13:11qubit[01]well shiz
13:13uvtcqubit[01]: :)
13:14scriptorqubit[01]: why does it have to be mutable?
13:14qubit[01]scriptor, just the implementation I was going with, have to rethink it
13:14qubit[01]but (shuffle) makes it ridicoulously easy
13:15scriptoras far as mutability goes, best to only use it in clojure when you really need it
13:15uvtcqubit[01]: the cheatsheet helps me out a lot.
13:16ipostelnikwell, clojure.core/shuffle converts a collection to an ArrayList, passes it to Collections#shuffle, and returns a new seq on top of the created list
13:19qubit[01]This is what I have for shuffling a deck, any suggestions https://www.refheap.com/paste/6472 ?
13:20qubit[01]also, how would I implement my own method of (shuffle) , I guess I'll try to do that
13:21scriptoryou could create a vector of new indexes
13:22scriptorwhere the indexes in the vector are the old card positions, and the values are the new ones
13:22ivanqubit[01]: https://github.com/clojure/test.generative/blob/master/src/main/clojure/clojure/test/generative/generators.clj#L277
13:22dnolenohpauleez: hey have you had a chance to checkout CLJS w/ the latest GClosure, might be worth chiming in on that thread to confirm Stuart can do a release.
13:23ohpauleezdnolen: Will do, it's been on my list
13:24qubit[01]ivan, ahh thanks
13:25dnolenohpauleez: excellent, thx
13:25qubit[01]scriptor, ok Ill try that
13:25ohpauleezdnolen: no problem, I'm definitely happy to have all the changes and the latest GClosure deployed :)
13:25dnolenohpauleez: I'm trying it out myself now
13:26alexnixonqubit[01]: there's a cute shuffle implementation here https://github.com/flatland/useful/blob/develop/src/useful/seq.clj#L149
13:30qubit[01]hmm how can I tell the repl not to display something
13:30qubit[01]let me google it first
13:32mudgeleiningen should find any class in src or target directories, right?
13:36ToBeReplacedwhy do people wrap their middleware around the main ring handler instead of the smaller subhandlers that require them?
13:38ToBeReplacedit seems like that obfuscates requirements and complicates testing... but maybe there's a performance reason? i'm not really buying the convenience argument
13:51tickingany idea how to call a function every full hour?
13:53augustlticking: I would find a java library
13:54tickingaugustl, sounds like a plan but only shifts the problem to a less familiar domain :D
13:55crossblaimhi
13:57TimMcticking: http://docs.oracle.com/javase/6/docs/api/java/util/Timer.html ?
13:58tickingTimMc, sounds like a plan thanks, I refined my googling to sheduling and that did the trick ^^
13:59tickingovertone at-at and quarzite seem to be idiomatic sheduler libs :D
13:59TimMcToo bad it doesn't take a Runnable and make a TimerTask out of it.
14:00tickingTimMc which one?
14:03tickingquarzite seems to be a full fetched sheduling lib for calendears and persistent storage awesome, but a little bit over the top for a clock app :D, so at-at it is ^^
14:05raekticking: cron4j has a simple syntax and accepts Runnables: https://gist.github.com/1496650
14:05tickingraek, awesome thanks :D
14:08raek(the string for __:00 every day would be "0 * * * *")
14:13mudgeHow do I call inherited methods in the init constructor?
14:31ohpauleezdnolen: I gave it a go across half my CLJS projects (one of which uses the third party stuff) and everything looked good to me
14:39dnolenohpauleez: sweet
14:39dnolenohpauleez: thx
14:39ohpauleeznp, definitely amped to see the release cut
14:41mudgeis it true that hyphens are illegal in clojure package paths?
14:43ohpauleezmudge: No, you can use dashes in the namespaces, but the directories will need to use underscores
14:44ohpauleez(this is necessary for java interop)
14:45mudgeohpauleez: I understand that you can use a namespace like this: com.domain.my-program
14:45mudgebut can you use a namespace like this: com.domain.trouble-here.myprogram
14:45ohpauleezyes
14:46ohpauleezbut the directory for trouble-here will be trouble_here
14:46mudgeohpauleez, really? It doesn't work for me. When I do it, it can't find the class
14:46mudgeI understand
14:46mudgeohpauleez: do you know of an example where this is being done?
14:47ohpauleezmudge: https://github.com/dakrone/clj-http/blob/master/src/clj_http/client.clj
14:47mudgeohpauleez: when I do it, it will compile, but at runtime it can't find the class
14:47mudgeohpauleez: yes I see. You are right.
14:49mudgeohpauleez: does it still work when using :gen-class to generate the class? Because in Java hyphens are illegal in the package names, so I'm wondering if it won't work when using :gen-class because gen-class is supposed to generate a Java class
14:49ohpauleezmudge: That's why the directories have to have underscores actually, because internally the compiler will convert them to underscores (to preserve interop)
14:50ohpauleezusually, I avoid hyphen names if I'm doing AOT compiling
14:50ohpauleezbut the general rule of thumb is don't do AOT compiling unless you really really have to
14:51mudgeohpauleez: yes makes sense. However if another Java class wants to use my class I generated in clojure, how would that java class be able to reference my clojure class when the clojure class has a hypen in its package path? because hyphens are illegal for java in package paths
14:51ohpauleezmudge: You use underscores from Java
14:52S11001001mudge: it won't have a hyphen, because of what ohpauleez said
14:52mudgeOkay, thanks guys
14:52ohpauleezmudge: NP, happy to help
14:54mudgewhen I try it I get a ClassNotFoundException
14:54mudgeThis is the namespace I use: java.lang.ClassNotFoundException: com.perfectabstractions.im-client.components.ImComponent
14:54mudgeAnd I changed the im-client directory to im_client
14:55mudgeI use lein run to execute the program
14:56ohpauleezmudge: Is the code available on github somewhere?
14:58mudgeohpauleez: you know what, I solved it. In my ImComponent class I create an instance of itself, but when i use ImComponent within ImComponent I need to use the underscore version of the namespace not the hyphen version
14:59mudgeohpauleez: so it appears that at runtime you have to use the underscore version of your namespace that you declared with a hyphen at compile time
15:00ohpauleezmudge: That's correct, because at runtime the compiler already converted all hyphens to underscores
15:00mudgeohpauleez: yes!!! here's a gist of the working code now: https://gist.github.com/4033999
15:01ohpauleezmudge: Correct, you totally get it!
15:01mudgeohpualeez: I guess the whole hpyen thing is kind of a hack to get around Java's limitation
15:01mudgeohpauleez: thanks for your help
15:02ohpauleezmudge: Most certainly, it's only there to preserve interop
15:02ohpauleezyou're totally welcome
15:13ibdknoxseancorfield: what was the exact error you were getting for windows?
15:21goracioibdknox: hi there is a problem with LT ubuntu 12.10 - opent instarepl and other commands not working
15:22ibdknoxgoracio: what do they do?
15:23goracioibdknox: nothing happens alt+ctrl+k or alt+ctrl+o nothing happens
15:23ibdknoxgoracio: don't press alt
15:25goracioibdknox: oh yes just ctrl+key is ok
15:26goracioibdknox: also if i use small menu at the command line choose command and enter nothing happens
15:26ibdknoxgoracio: press tab, then enter
15:26ibdknoxgoracio: there's a bug for that one
15:28goracioibdknox: ok just tab is ok
15:29goracioibdknox: seems to me it's just vim in cljs do you plan to make features that you talked about at the beginning ?
15:29ibdknoxyes
15:35goracioibdknox: www.codebubbles.org i found that ideas pretty useful, would be nice if some of that ideas will be in LT
15:36ibdknoxthe notions behind some of it will be
15:36ibdknoxtheir implementation ended up requiring a lot of time managing the bubbles
15:38goracioibdknox: microsoft used that ideas in debugger canvas
15:38ibdknoxI know, I built it for them
15:38ibdknox:)
15:39goracioibdknox: ok ) anyway i hope that something will be in LT soon
15:39goracioibdknox: something of it
15:40TimMcibdknox: FYI, lighttable.com on Firefox 9: http://i.imgur.com/05AFQ.jpg
15:41ivanwhat thing ships with FF9?
15:41TimMcNothing anymore, probably?
15:41TimMcFF10+ crashes my computer.
15:42TimMcThis isn't a major usability bug or anything, but I thought he should know.
15:42ibdknoxnot sure which part you're showing me
15:45TimMcFunky text, blurry background.
15:45ibdknoxyeah it's weird that the images are getting messed up
15:48TimMcOn a more serious note: "`GLIBC_2.14' not found"
15:55tickingclojure + ethernet enabled power block = awesomeness
15:56ibdknoxTimMc: fixed later today I believe
15:56tickingibdknox, btw is the spinny thing at the welcome page supposed to spin^^?
15:56ibdknoxticking: what spinny thing on the welcome page?
15:57tickingI stared 10 minutes at it after updating, and then wen't meh, and used LT ^^
15:57tickingwait a sec
15:57tickinghttp://cl.ly/image/2m370y1F1N2P
15:57ibdknoxhm
15:58ibdknoxwhat platform are you on?
15:58ibdknoxthat is an old version of LT
15:58tickingmac lion latest
15:58ibdknoxrm your ~/.lighttable
15:58ibdknoxI have no idea how you got that
15:58TimMcibdknox: Nonsense, that screen says "latest version". :-P
15:58ibdknoxI didn't release that publicly
15:58tickinglol
15:58TimMchaha
15:59tickingso I'll do a mv and then a rm ;P
15:59tickingand in 50 years I'm going to sell it on ebay, "Light Table collectors edition,prototype never officialiy released. This is how it all started! Grab your piece of history now!"
15:59ibdknoxlol
16:02tickingibdknox, well at least that explains why the "latest version" increased the crashes ^^
16:03ziltiI'm trying to do something like (-> arg list-of-functions) which obviously doesn't work, but I don't know how to work around this...
16:03Wild_Catibdknox: in LT, how do you dismiss the red error dialogs?
16:03goracioibdknox: btw new version updates itself ?
16:03TimMcibdknox: No, that GLIBC thing still happens with latest 64 off the website.
16:04ibdknoxTimMc: I said later today :p
16:04Wild_Cat(also, I'll try the Windows version tonight -- on OSX it looks smooooooooth)
16:04TimMcOh! Misread.
16:31ohpauleeznDuff: It's very unfortunate
16:32bbloomohpauleez: i use the shit out of rebase locally. i never use on other people's stuff
16:32nDuff*nod*.
16:33zilti##((first '(#(+ % 5) #(%))) 2)
16:33lazybotjava.lang.ClassCastException: clojure.lang.PersistentList cannot be cast to clojure.lang.IFn
16:33bbloomi use it to bubble sort small changes up to the top
16:33hiredmanhttp://openjdk.java.net/jeps/169 <-- has a nod to rich
16:33bbloom:-)
16:33nDuffIf I merge something, I want to have a record of both when and why that merge happened.
16:33nDuff(and to know, unambiguously, that the changesets that came in did so via that merge).
16:34ohpauleezbbloom: Are you making it to the Conj?
16:34bbloomohpauleez: unfortunately not
16:34ohpauleeztotal bummer
16:34ohpauleezI was definitely looking forward to catching up
16:37bbloomohpauleez: i'm not a big conference guy
16:37ziltiWhy isn't (function argument) == ((first function-list) argument)??
16:37lazybotzilti: What are you, crazy? Of course not!
16:37ziltilol
16:38bbloomzilti: um, it is.... are you sure function-list is what you think it is?
16:38ohpauleezbbloom: Nor am I, but the Conj is: 1.) Extremely fun 2.) has the most interesting conversations over beer 3.) Engaging and enlightening 4.) And full of people I totally admire and respect
16:38zilti##(#(+ % 5) 2)
16:38lazybot⇒ 7
16:39zilti##((first '(#(+ % 5) #(%))) 2)
16:39lazybotjava.lang.ClassCastException: clojure.lang.PersistentList cannot be cast to clojure.lang.IFn
16:39bbloomohpauleez: heh, 3 remaining late registration tickets
16:39zilti##(first '(#(+ % 5) #(%)))
16:39lazybot⇒ (fn* [p1__476557#] (+ p1__476557# 5))
16:39zilti##((fn* [p1__1169#] (+ p1__1169# 5)) 2)
16:39lazybot⇒ 7
16:39bbloomohpauleez: david cohen wants me to go to the techstars founder con in boston the few days before too
16:40bbloomohpauleez: and my mother wants me to come home for thanksgiving
16:40bbloommaybe i could do a east coast tour, heh
16:40ohpauleezbbloom: David cohen has also only given me bad advice
16:40ohpauleezhaha
16:40bbloomohpauleez: i'll refrain from public comment :-P
16:40ohpauleezbbloom: haha Give it some serious consideration. East coast whirlwind tours are always a blast (for me)
16:40ziltibbloom: So, yes, I'm sure a function list is what it is ;)
16:41bbloomzilti: no, i mean are you sure THAT one is what you think it is. (prn (class (first function-list))
16:41TimMczilti: You're quoting your fns.
16:42bbloomTimMc: I was trying to help him learn to debug it :-)
16:42ziltiNow that's a weird behaviour of lists
16:44ziltiSo "first" with a list gives me clojure.lang.PersistentList, "first" with a vector gives me the first item? Logic?
16:45bbloomzilti: you have a list of lists?
16:45bbloom,(first '(1 2 3))
16:45clojurebot1
16:45bbloom,(first '('(1) 2 3))
16:45clojurebot(quote (1))
16:45bbloom,(class (first '('(1) 2 3)))
16:45clojurebotclojure.lang.PersistentList
16:45bbloom,(class (first '(1 2 3)))
16:45clojurebotjava.lang.Long
16:46ziltiNo, I have:
16:46TimMcbbloom: Oops!
16:46bbloomzilti: when in doubt, print it out :-)
16:46zilti(prn (class (first '(#(+ % 5) #(%)))))
16:46zilti##(prn (class (first '(#(+ % 5) #(%)))))
16:46lazybot⇒ clojure.lang.PersistentList nil
16:47zilti##(prn (class (first '[#(+ % 5) #(%)])))
16:47lazybot⇒ clojure.lang.PersistentList nil
16:47ziltidamn
16:47TimMcCan I jsut cut to the chase?
16:47bbloomTimMc: heh, go for it :-)
16:47zilti(prn (class (first [#(+ % 5) #(%)])))
16:47zilti##(prn (class (first [#(+ % 5) #(%)])))
16:47lazybot⇒ sandbox7657$eval476645$fn__476646 nil
16:47TimMczilti: Why does '(foo) not give a "foo not found" error?
16:47ziltiTimMc: Because a quoted list is seen as data, not as code
16:48ziltiBut vectors are always seen as data so there's no need to quote
16:48TimMcNope.
16:48TimMc&[foo]
16:48lazybotjava.lang.RuntimeException: Unable to resolve symbol: foo in this context
16:48TimMc&'[foo]
16:48lazybot⇒ [foo]
16:48TimMc&'(foo)
16:48lazybot⇒ (foo)
16:49zilti&(first '[foo])
16:49lazybot⇒ foo
16:49zilti&(first '(foo))
16:49lazybot⇒ foo
16:50TimMczilti: And what is an inline function "as data", if not a list?
16:50zilti&(first (foo))
16:50lazybotjava.lang.RuntimeException: Unable to resolve symbol: foo in this context
16:50ziltiI have to buy a rubber duck
16:51TimMczilti: ' quotes the entire form and everything inside it. '() is the only way to write a list literal. If you want an inline list of non-quoted things, use (list ...).
16:52ziltiTimMc: Oh. I thought '() is short for (quote) and the same as (list), that's what was wrong
16:53AimHereNo, that's just a side-effect of the repl confusing you, because you have to quote in order to use lists there
16:54TimMc,''(foo bar)
16:54clojurebot(quote (foo bar))
16:55TimMc^ that's what '(foo bar) is read as
16:55TimMcOh, here we go: ##(read-string "'(foo bar)")
16:55lazybot⇒ (quote (foo bar))
17:08astoddard,(when-let [{:keys [b]} m] (println "Found " b))
17:10astoddard,(when-let [{:keys [b]} {:a 1}] (nil? b))
17:14astoddardWould someone please clue me in on evaling some code with lazybot here?
17:14sritchie$(* 1 1)
17:14sritchiemaybe?
17:14sritchieguess not
17:14bbloom&1
17:14lazybot⇒ 1
17:14TimMcastoddard: & is lazybot's eval prefix, , is clojurebot's
17:15TimMc## for inline eval with lazybot, although it accepts fewer forms.
17:15RaynesAnything with parentheses.
17:15TimMc,"You there?"
17:15clojurebot"You there?"
17:16TimMcLooks like it was down.
17:17bbloomooooh inline eval? you mean like ##(identity "this?")
17:17lazybot⇒ "this?"
17:17bbloomneat.
17:22astoddardI've tried to be too clever with when-let ##(when-let [{:keys [b]} {}] (nil? b))
17:22lazybot⇒ true
17:22TimMcastoddard: Yep.
17:23TimMcThe test is done on the result of the RHS, and then that result has destructuring applied.
17:24TimMcMaybe a multi-clause when-let or if-let would be appropriate.
17:24TimMcor you could use -?> cleverly somehow?
17:25TimMc,(let [{:keys [b]} {}] (when b (nil? b)))
17:25clojurebotnil
17:28alex_baranoskyhey guys I've got a question. I'm using cheshire.custom, and want to serialize sets differently than the way they do by default. I tried to extend the JSONable protocol to clojure.lang.IPersistentSet… but it is already extended to that interface in the internals of cheshire
17:29dnolenextensiblity of core.logic is starting to pay off: http://gist.github.com/4034937
17:30bbloomdnolen: what is actually going on there?
17:30seancorf`ibdknox: I get CreateProcessW: The system cannot find the file
17:30seancorf` specified
17:30unlinkI'm using the cookie store with ring.middleware.session/wrap-session. Why is it that when I restart my server process, then, that the existing sessions become invalid?
17:31seancorf`sorry for delayed response, was away at lunch
17:31unlinkOh, I am also supplying a secret key to the cookie store when I initialize it.
17:32dnolenbbloom: unification is entirely based on actual values, this shows that you can provide constraints on w*what kinds* of values should succeed.
17:32zackzackzackAny ideas about how to turn off DEBUG mode in noir?
17:32TimMczackzackzack: Start it in :prod mode.
17:32TimMcinstead of :dev
17:32zackzackzackAhh! Just saw that in the server file
17:32zackzackzackThanks
17:33bbloomdnolen: nice
17:33unlinkNever mind, I had the name of the option for the secret key wrong.
17:33unlink(And it was silently ignoring my option.)
17:33alex_baranoskycan I override a protocol that is already extended to a particular interface, with an alternate protocol method?
17:33dnolenbbloom: yes first cut, needs more work - but lynaghk has some cool use cases - I'm happy that even this early iteration was so easy to implement.
17:34alex_baranoskywhat I mean, is, if a protocol is already extended to IPersistentSet, can I extend it again in my own ns to get altered behavior? (specifically I want to alter the way cheshire.custom serializes set)
17:35dnolenbbloom: for some context, what lynaghk is trying to do http://gist.github.com/4004143
17:36bbloomdnolen: yup saw that
17:38TimMcalex_baranosky: Out of curiosity, what happens when you try it?
17:39alex_baranoskyTimMc: it seems to be not running the code we're attempting to overload with
17:40TimMcalex_baranosky: As a hacky fix, you might create a box class that you can stick sets into for an alternate serialization method.
17:40TimMcWhat are the two ways to serialize sets?
17:46alex_baranoskyTimMc: the reasons we're doing it are intricate, but we're serializing sets as maps like: "{\"a\": true, \"b\": true}"
17:46TimMcI see.
17:46alex_baranoskycheshire defaults to storing sets as arrays
17:50TimMcalex_baranosky: And you don't have much control over the data that's going into Cheshire?
17:54alex_baranoskyTimMc: we could do the wrap-a-set approach
17:55ibdknoxseancorfield: just to confirm, you definitely have java installed on that one?
17:56ibdknoxseancorfield: I think there might be something more than paths going on for you
18:00seancorfieldlein works fine from the command line on that win8 setup
18:00seancorfieldemacs / nrepl-jack-in also works fine
18:00ibdknoxseancorfield: k, that's what I needed to hear
18:00ibdknoxI fixed all the pathing stuff, but that error text implies something else going on
18:01seancorfieldi'm firing it up so i can run any tests you need me to, in order to debug stuff
18:01ibdknoxI think it might be a 64vs32 bit thing :(
18:01ibdknoxstupid node
18:01ibdknoxlol
18:01seancorfieldoh? it's 64-bit windows
18:02ibdknoxyeah and my VM is 32
18:02seancorfieldah, ok
18:03Raynesibdknox: Didn't you say you were going to release with more themes today?
18:03ibdknoxyeah
18:03RaynesI don't see an update mechanism. Is that gone?
18:04ibdknoxit auto-updates
18:04ibdknoxwith the exception of the shell
18:04RaynesIT'S SENTIENT?
18:04seancorfieldconfirmed lighttable.exe is 32 bit
18:04ibdknoxseancorfield: yeah, which should be fine
18:04ibdknoxseancorfield: it uses nodejs to shell out to cmd.exe
18:04ibdknoxseancorfield: my suspicion is it's looking in the wrong place for it
18:05Raynesibdknox: So, it should be updating then?
18:05ibdknoxRaynes: when I push the update
18:05RaynesOh, I assumed you had already.
18:05ibdknoxno sir
18:05ibdknoxtrying to clean up a bunch of things
18:05Rayness/clean up/break/
18:05ibdknoxlol :p
18:05TimMcalex_baranosky: If you have access to the sets to wrap them, why not just convert them into things that Cheshire will handle the way you want it to?
18:06seancorfieldibdknox: is there a log file / debug mode i can enable to help figure it out?
18:06TimMc(into {} (for [el my-set] [el true]))
18:06ibdknoxseancorfield: looking into what the best thing to do here is. Will let you know. :)
18:07RaynesExplode into unicorn dust.
18:18alex_baranoskyis there a way to remove a protocol implementation?
18:18alex_baranosky(in clojure 1.2)
18:20amalloyno
18:24Raynesalex_baranosky:
18:24Rayneshttp://www.youtube.com/watch?v=FshkO8HqQ10
18:34alex_baranoskyRaynes: https://github.com/dakrone/cheshire/blob/master/src/cheshire/custom.clj#L294 :)
18:34Raynesalex_baranosky: I didn't even look at your question, just piggiebacked on amalloy's no.
18:35amalloyalex_baranosky: doesn't actually work in all cases though
18:35alex_baranoskyRaynes: nice one :D
18:35alex_baranoskydoh
18:35amalloyit'll remove implementations added via extend[-type/protocol], but not those implemented inline in deftype/defrecord
18:36alex_baranoskyamalloy: good to know. Thanks.
18:39_francisI've got two sets of Joda DateTime objects, the strings (after I order them) are the same - however a test for equality fails. Thoughts anyone?
18:39hiredman_francis: what equality?
18:39_francis(= set0 set1)
18:39alex_baranoskysounds like somehow the toStrings for them are the same but .equals shows them to be not equal
18:40hiredman_francis: so for the individual datetime objects, find the ones that are not equal, and find out what is different
18:41hiredmantoString is not an equality check
18:56_francishiredman: thanks
19:01hiredmanhttp://dev.clojure.org/jira/browse/CLJ-1104 that is not a good time
19:01bjorkintoshapt-get install clojure, installs 1.1. is there a better way to get the latest?
19:01bjorkintoshgit perhaps?
19:02hiredmanbjorkintosh: clojure is a little different from most other languages
19:02TimMcbjorkintosh: Clojure is really a library, so you don't install it.
19:02hiredmanyou don't install it
19:02bjorkintoshah.
19:02xeqiI recommend leiningen.org
19:02TEttingeryep
19:02bjorkintoshthanks. leningen. that's what i was wondering about.
19:02hiredmanthe library dependency stuff in something like lein will make sure you have the version you want for a particular project
19:03TEttingeryou only need the leiningen executable, then run `lein self-install`
19:03TEttingerand it downloads clojure and deps
19:03TEttingerlein is pretty fantastic
19:05mdainesAny recommendations on a lein tutorial? I use the basics, but know I'm missing a lot.
19:05mdainesOn that note, any vim & clojure recommendations?
19:05TimMcclojurebot: install is <reply>You don't want to install Clojure, per se -- the Leiningen build tool will manage it as a dependency for you. This also allows projects to use different versions of Clojure.
19:05clojurebot'Sea, mhuise.
19:05tos9mdaines: VimClojure?
19:06xeqimdaines: theres https://github.com/technomancy/leiningen/tree/master/doc
19:06mdainestos9 I have to revisit it. I had trouble with it a while back and then didn't get around to resolving it.
19:06xeqimdaines: lein-tarsier for vim and clojure
19:07tos9mdaines: Only thing I had trouble with is nailgun, but that's my own laziness.
19:07bbloomoh, nevermind
19:08bbloomit is
19:08mdainesYeah, nailgun was my problem.
19:08bbloomhttp://clojure.org/downloads should move lein to the top of the list and recommend it more explicitly :-)
19:08tos9Yeah. So, I did too, but I don't actually want it that much (I use vimux anyhow, and don't usually want an interpreter open as well) but nailgun should work if I spent some time figuring out how to
19:09mdainesmy problem was not wanting to spend so much time setting up my env. I think I'm at the point now where I'm willing to invest more time.
19:11mdainesOr rather, see the value.
19:58TimMcmdaines: There's not much to know for basic development. If you run into issues, you can always ask for help here or in #leiningen.
20:08rbxbxmdaines were you looking into setting up vimclojure...? /me only saw the bit about nailgun
20:13mdainesrbxbx: I had tried to use it a while back and never got it set up right.
20:14rbxbxmdaines take a look at http://regretful.ly/clojure/2012/10/28/up-and-running-with-vimclojure/ and https://github.com/sattvik/lein-tarsier
20:14rbxbxboth aim to make the process easier
20:14rbxbxwithout forcing you to clobber your local vim config like vimclojure-easy
20:14bbloomdnolen: thing i wish i could do with cljs and core logic: specify optimizations along the lines of "if you see a case macro where all of the arguments are statically known to be a contiguous sequence of integers, emit a sane simple javascript switch block"
20:14mdainescool, thanks. That'll be my next project.
20:27ttimvisheris it possible to get slime to eval something in the frame when stopped by swank.core/break?
20:29rbxbxtechnomancy: any way to make lein run not require a project.clj be specified as with lein repl? I'm guessing throwing a step like this (https://github.com/technomancy/leiningen/blob/master/src/leiningen/repl.clj#L66) into lein run would be necessary. Is this something you'd like/approve of as a feature?
20:49TimMcrbxbx: Check out lein-oneoff
20:50rbxbxTimMc that would work but this is for end user tooling and it'd be nice to not require them install an additional plugin
20:57ttimvisheris there a union that takes an equality predicate?
20:57twobitspriteis it just that I'm running in a VM, or is lein really slow?
20:58ttimvishertwobitsprite: depends on your definition of slow :)
20:58twobitspritelike, vt100 slow :P
20:58ttimvisherthen it's probably that you're running on a vm, unless you don't really remember how slow vt100s were
20:59ttimvisher;)
20:59twobitspriteI don't know, 9.6 seconds to print the 33 lines of text output from "lein help"...
21:00Sgeo_I don't know why, but if I lein repl, and leave that running for a while, text entry slows to a crawl
21:00Sgeo_I'm on Windows 7
21:00ttimvisheractually thaht's about what it took for me
21:00ttimvishermacbook pro running lein from inside emacs
21:00ttimvisherbut i'm a java dev.
21:00twobitspritettimvisher: wow...
21:00ttimvisheri have a different understanding of time
21:01twobitspriteis that just the java startup cost?
21:01ttimvisheri seem to remember there being something in the faq about a series of questions regarding speed
21:01ttimvishertwobitsprite: plus the lack of hotspot optimization
21:01ttimvisherbut basically yes
21:01twobitspriteok... so, I should expect a longer-running java/clojure app to be much quicker?
21:02ttimvishertwobitsprite: oh yeah. once these things are jitted they fly
21:02ttimvisherhence the clojure community's answer to scripting being clojurescript
21:02ttimvisherbecause js startup time r4wks!
21:02twobitspriteright on
21:03twobitspritethanks for clearing that up, I was starting to get worried
21:03ttimvisherlol
21:03ttimvishermy boss (an old ruby hat) complains almost every day about how much jvm startup time sucks. and our main dev language is clojure!
21:04Urthwhyteclearly not a rails dev then!
21:04twobitspriteI'm actually overcoming a lot of personal biases by even considering clojure, so I'm a bit jumpy at times :P
21:05ttimvishertwobitsprite: hah. sounds like there's a story in there. :)
21:05AdmiralBumbleBeebias?
21:05Urthwhytehalf the dev time is spent loading the damn framework with Ruby, especially after 1.9.x changes
21:05ttimvisherUrthwhyte: yeah. don't think he's much of a fan of the 1.9 stuff
21:05ttimvisherbut almost all of our dev box tooling is written in ruby
21:05twobitsprite(as a sysadmin, it's a common experience for me to get a complaint that some server is running slow, only to find java as the top cpu and memory user on the system... in fact, I get surprised when it's not :P)
21:05ttimvisherand i must say it does scream compared to a jvm shell tool
21:05twobitsprite((but that could very well be the crappy code the devs where I work write)
21:05twobitsprite)
21:06ttimvishertwobitsprite: you're already picking up the parens!
21:06ttimvisherjust wait till you see paredit! :)
21:06twobitspriteI'm no stranger to lisp :)
21:06Urthwhytepssh, paredit
21:06Urthwhytevim is fine!
21:06ttimvisherlong live vim!
21:06twobitspriteUrthwhyte: hear, hear! :)
21:07bbloomis there a function which is basically (nth n (iterate f x)) ?
21:07UrthwhyteI do wish I could get silmv working properly, vimclojure is kinda buggy
21:07twobitspriteUrthwhyte: I'm just getting started with it, trying to get the nrepl stuff working
21:07tpopeI'm trying to solve the vimclojure problem once and for all
21:07bbloomi was hoping for (iterate n f x) overload
21:07Urthwhytetpope: replacing ng?
21:08tpopeyes
21:08bbloomtpope: i use a metricshitton of your plugins. thank you. if you do a clojure plugin i'd be extremely excited :-)
21:08Urthwhyte++bbloom
21:08tpopeI've got things talking to nrepl
21:08twobitspriteheh... in fact, nailgun is the problem I'm having... trying to get it to install, but lein just exits with "Wrong number of arguments to install task. Expected ()"
21:09Urthwhytehave you tried lein-tarsier?
21:09ttimvisherdynamic programming ftw!
21:09tpopegive me 48 hours and I should have something out there
21:09twobitspriteUrthwhyte: no...?
21:09twobitspritetpope: a replacement for ng?
21:09tpopesomething far more specific to vim
21:10twobitspritenice
21:10Urthwhytetwobitsprite: IIRC, all I had to was add {:user {:plugins [[lein-tarsier "0.9.3"]]}} to my lein profile and then build ng-client and move it into my path
21:10tpopeI've settled for shelling out to ruby, since the jvm startup time is so slow :)
21:10twobitspriteI have no experience with ng other than that I can't get it to install, but it sounds as if it needs replacing. In that case, carry on, good sir! :)
21:11tpopelimiting me to one server at a time is a pretty big dealbreaker
21:11twobitspriteUrthwhyte: forgive me, but how do I add that to my "lein profile"? I don't see anything in ~/.lein which appears to be a profile or configuration
21:12tpopetwobitsprite: add verbatim to ~/.lein/profiles.clj
21:12ttimvishertwobitsprite: touch ~/.lein/profiles.clj
21:12Urthwhytetwobitsprite: just do an echo "#{thing}">> ~/.lein/profile.clj
21:12ttimvisherlol
21:12twobitspriteahh, nice
21:12ttimvisheris it plural though, fyi
21:12ttimvisherit is*
21:12Urthwhytewoops, my mistake
21:13Urthwhytethe two top things I hate about how ng currently works is: unable to start up a vim session anywhere and open a repl and b) only one server at a time
21:14tpopeyep those were my biggest problems
21:14tpopeconnecting to lein repl solves problem b
21:15UrthwhyteI couldn't find an easy solution to a outside of creating a scratchpad project somewhere and creating a vim-clj alias
21:16tpopeokay well spitball with me for a bit
21:16tpopehow can I start a repl from inside Vim, get back whatever port it's bound to, and fork it into the background?
21:17Urthwhytecouldn't you wrap it in a script whose return value is the port?
21:17tpopewhat kind of script?
21:17twobitspriteor write to a file... not unlike writing out a .pid file for processes
21:17UrthwhyteI'm the guy who just found out about :%w ! let's you pipe stuff last week
21:17bbloomwhy return the port, rather than pass the port in as an argument?
21:17Urthwhytemy vimscript knowledge is 0
21:18tpopebbloom: just so I can get an available one automatically
21:18twobitspritemy vimscript is a bit rusty
21:18Urthwhytebbloom: Because you can have multiple ports open
21:18Urthwhytereally you could do port pooling, couldn't you?
21:18tpopethe problem is that java can't fork, no?
21:18Urthwhyteand just have an allocator daemon that keeps track
21:18Urthwhytethat might be simpler
21:19twobitspriteI don't know, but I do know scripts can fork
21:19tpopeyeah but then if the java part picks the port, the script doesn't know it
21:19UrthwhyteHave the java part touch a .pid then?
21:20bbloomis this any-old repl, or is this a lein repl?
21:20bbloomseems like you could ask lein what it's config is
21:20tpopeI was starting with lein repl
21:20tpopelein picks a port dynamically, by default
21:20bbloomheh, odd
21:21bbloomi've been using tmux pastebuffer for my eval needs in vim
21:21tpopewhich is beautiful, except for the whole finding out what it is when it's in the background part
21:21bbloomit's hacky as hell, but it works :-P
21:21Urthwhytethat sounds worse than my python setup haha
21:22bbloomtpope: you can force lein to use a port with LEIN_REPL_PORT
21:22ttimvishercan nrepl provide me with a repl at a breakpoint? i.e. make swank.core/break actually work?
21:22bbloomsucks that you'd have to replicate the detection, but might unblock your other work on this
21:23TimMcIs there a unixy utility to reserve a port?
21:23tpopebbloom: that may be useful, actually
21:23bbloomhttps://github.com/technomancy/leiningen/blob/master/src/leiningen/repl.clj
21:23bbloomtpope: one other thing to consider: multiple repls per vim session
21:24bbloomi very frequently have a clojure AND clojurescript repl open at once
21:24tpopeTimMc: I don't know of a utility for it. what I've done before is opened and immediately closed a dynamic port in ruby. the os will mark it reserved for a while
21:24bbloomat as nrepl evolves, i expect to have one clojurescript repl per browser :-P
21:24tpopebbloom: yeah I definitely intend on that
21:24bbloommy hero.
21:24tpopeI have it picking up target/repl-port automatically if it's running
21:26tpopeI don't know the first thing about clojurescript
21:26tpopesame basic story? can I spin up nrepl?
21:27bbloomcurrently, clojurescript's repl is just a function inside a clojure repl
21:27tpopethat sounds ... convenient
21:27bbloomlein lets you specify code to evaluate on repl startup
21:28bbloomyou just initialize and run the cljs repl from there
21:28bbloomthere are also several backing repl implementations
21:28bbloomone for browsers, one for rhino (ie on the jvm)
21:28bbloomand i believe a few folks have various hacked up node.js ones too
21:28bbloombut those probably have a different bootstrapping process
21:28tpopewell I will revisit this after I have the basics working
21:29bbloomyeah, unfortunately, i think it would require an nrepl plugin
21:29bbloommy hacked up solution works b/c it's just pasting text into a terminal
21:29bbloomi slap on a rlwrap and everything seems to work
21:31bbloomwhen you want to revisit it, i'd be happy to help make any changes to clojurescript to get it all working :-)
21:34tpopebbloom: sweet
22:07twobitspriteman, getting this nailgun server running is trickuy
22:07twobitsprites/uy/y
22:07twobitspritethen again, I never really understood java's classpath magic...
22:17muhoono magic, it's just paths, with zipfiled masquerading as paths inside
22:21UrthwhyteCan anyone suggest a good blogpost on the zipper data structure written from a lisp-y perspective?
22:22bbloomUrthwhyte: the zipper source is pretty small and approachable. why don't you try reading through it?
22:22trptcolinhttp://www.exampler.com/blog/2010/09/01/editing-trees-in-clojure-with-clojurezip/ and http://tech.puredanger.com/2010/10/22/zippers-with-records-in-clojure/
22:22bbloomhttps://github.com/clojure/clojure/blob/master/src/clj/clojure/zip.clj
22:23UrthwhyteI uh
22:23Urthwhytewas planning on reimplementing it myself
22:23Urthwhyteso was trying to avoid that
22:23bbloomah, heh, fair enough
22:23UrthwhyteI read Huet's original paper but was a little confused
22:24bbloomwell at the bottom of the source is a big (comment ...) block
22:24bbloommaybe load up the zippers code and then play around with some of those expressions
22:24bbloomto get a feel for how it works
22:29UrthwhyteWill do, thanks :)
22:40twobitspriteok, I got a nailgun server running... but for some reason the <Leader>sr command isn't working...
22:40twobitspritethe bundle/vimclojure-2.3.6 is in my loadpath
22:42Urthwhytewhat does :nomap reveal?
22:42Urthwhytenmap*
22:43twobitspritethey're all <Plug> instead of <LocalLeader>... maybe I'm reading an old howto?
22:44Urthwhytedo you have LocalLeader mapped in your vimrc?
22:47twobitspriteohh, I see why I'm confused... the tutorial I'm reading has <Leader> mappings, but vimclojuser users <LocalLeader>.... I was confused because the mappings I set from the tutorial are working but not the vimclojure mappings :P
22:48Urthwhytehmm
22:48UrthwhyteI use a different key than localleader for plugins
22:48UrthwhyteI have , set for my own bindings, and \ for plugins
22:48Urthwhytehttp://dl.dropbox.com/u/9061771/Screenshots/8vwg.png
22:48Urthwhyteargh
22:49Urthwhytehttps://gist.github.com/92b859b7bdcef85777a9
22:53twobitspriteif I don't have either set in my vimrc, the <Leader> mappings work, but the <LocalLeader> stuff speficiet in vimclojure don't
22:54twobitspriteif I set mapleader, it still doesn't work, just changes the <Leader> stuff the tutorial has me set
22:54twobitspriteif I set maplocalleader, still nothing
22:54Urthwhytehmm
22:54Urthwhytevery curious - I would try over in #vim
22:55twobitspritehttps://gist.github.com/4036676
22:56twobitspriteyeah, I'll ask them
23:05twobitspriteso, it looks like vimclojure isn't setting it's mappings... do I have to manually set up mapping for all those <Plug>etc commands, or is it supposed to set up mappings?
23:14twobitspritedoh... it helps if the ftplugin is loaded by actually opening a file of the right type :P
23:29Urthwhyteahhh
23:29Urthwhytehaha
23:30UrthwhyteYea you have to set either filetype= or open a clj(js)? file
23:54twobitspritewoot... I have a functioning clojure dev environment :) Now to put it to good use :)
23:58Urthwhyte\o/