#clojure logs

2012-05-12

00:01TimMc_KY_: Emacs or vim. Do it.
00:01TimMcAlthough apparently Eclipse support is getting pretty good?
00:01_KY_I need to do some GUI stuff...
00:02echo-areaamalloy: I think there is a difference between `sieve' and what I pasted, though they all use lazy sequences. While without `doall', `sieve' recurs (perhaps very heavy) layered lazy sequences, what I post is only one-layer lazy sequence, recuring itself but not to another layer of lazy sequence.
00:03amalloyno, you (swap! inputs read-inputs), which is setting inputs to (keep f read-inputs)
00:05Raynes_KY_: What have you tried that you found 'unusable'?
00:06_KY_IntelliJ won't let you resize panels...
00:06_KY_Enclojure won't let me run hello world
00:06RaynesYou made two wrong choices. If you need a big fat button-laden IDE, Eclipse is your best bet.
00:07RaynesGiven recent developments in counterclockwise, I'd feel good saying that Eclipse makes a fine development environment for Clojure.
00:08PeregrinePDXI keep having issues with Eclipse but I haven't bothered to look enough to know it's not me
00:08RaynesPost issues to the issue tracker and/or ping lpetit, as he is often in here.
00:09RaynesI'm pretty sure Enclojure is pretty much dead, but they seem to keep a lovely site up just to mislead new Clojurians or something.
00:10echo-areaamalloy: http://pastebin.com/t8b3H4s9 <-- Okay atom removed, but stack overflow still there.
00:10amalloyyou're still calling (keep (keep (keep ...)))
00:10amalloybecause sq is the result of a (keep) call, and you're calling (keep sq)
00:11echo-areaHmm, let me see..
00:34echo-areaBefore passing the last line, all lines of the input file is consumed and the corresponding items in `sq' are already realized. This part should not occupy stack frames. Problem arises at the last time realizing the lazy seq returned by `read-inputs', in this iteration `read-line-or-nil' returns nil, making `read-inputs' realize the rest of inputs, which is an empty sequence. What I can't explain is why this depends on the number of
00:34echo-arealines of the first file.
00:49antares_travis-ci.org now runs leiningen2 preview 4. Give it a try.
00:55ivan_KY_: which panels can't you resize in IntelliJ?
01:01technomancyenclojure has a really good icon
02:20gaffoSo I've got a list of maps and I just want to get a list of the values for one key, say [{:k "v1"} {:k "v2"}], and I want ["v1" "v2"]. Any help would be appreciated
02:20amalloy(map :k ms)
02:21gafforeally? that seems backwards
02:22gaffosince it's normally ({:k "v"} :k) => "v"
02:22amalloynope. :k is a function that takes a map and returns its value for the :k key
02:22amalloywhat you pasted just now is acceptable, but not really "normal"
02:23gaffoso normally I should write (:k map-var) when I want key from map map-var?
02:23gaffoif I'm writing proper form?
02:24amalloythat's more normal. the guideline is to write (:k m) if you're getting a key from a "struct" or "object" sort of map, ie one with fixed/known keys, and (m k) or (get m k) if you're getting from a "real" map that could have any number of keys
02:25gaffohuh
02:25gaffoany reason for that?
02:25gaffoto treat maps and struct maps different?
02:26amalloyhttp://stackoverflow.com/questions/7034803/idiomatic-clojure-map-lookup-by-keyword
02:27gaffoamalloy, thanks
02:30gaffoso if (k m) is faster on struct maps, why not use it on normal maps as well? I see that it's from the library coding standards. Any other reason?
02:31amalloynote i'm not talking about actual struct-map objects, here. just maps that you "treat" like structs
02:32amalloyif ti's a collection where you don't know what the keys are ahead of time, then you usually can't call (k m), because the key doesn't implement ILookup
02:32amalloy&(let [k "test", m {"test" 5, "data" 10"}] (k m)) ;; eg, this doesn't work
02:32lazybotjava.lang.RuntimeException: EOF while reading string
02:33amalloy&(let [k "test", m {"test" 5, "data" 10}] (k m)) ;; eg, this doesn't work
02:33lazybotjava.lang.ClassCastException: java.lang.String cannot be cast to clojure.lang.IFn
02:33gaffoaah
02:33gaffobut if I'm using :'s for everything that doesn't matter?
02:33amalloymmmm
02:33gaffo(not sure what the term for those is, in ruby, symbols)
02:34amalloyif you're using keywords for everything, it's pretty likely that your map is conceptually a struct
02:34amalloyclojure keywords are basically ruby symbols
02:34gaffokeywords, thanks
02:34gaffoterminology gets confused when you hit language 4 or 5
02:35amalloyclojure has symbols too, but they're not quite the same thing
02:35gaffoI read that maps with less than around 10 keys are basically struct maps in implementation
02:35amalloywell, they're basically arrays
02:36gaffoaah, so N < 10 is pretty fast to just walk it and find the right item?
02:36amalloyyes, faster than hashing and looking up in buckets, etc
02:36gaffokk, makes sense.
02:36gaffoyeah, currently I'm extracting some stuff from json into 4 item hashes
02:37gaffowith keywords as keys
02:37gaffothis makes a lot more sense now
02:38amalloygreat
02:38amalloynow go write a blog post about it, and then you'll really understand it
02:38gaffoor just be dead wrong. can I blame you for all errors :)
02:39gaffo"all errors are me not undestanding amalloy correctly"
02:39amalloy*nod*
02:40gaffosweet
03:18rbxbxTo bed with me, g'night #clojure.
03:18RaynesThanks for the announcement, sir.
03:19RaynesGoodnight to you as well, my excitable friend.
03:20rbxbxQuite easy to obtain friendship and excitability around here, apparently ;)
03:20rbxbxCheers Raynes, good night.
04:19kralnamaste
05:40bobryuh, this is confusing -- there's lein-cljsbuild, lein-cljs and lein-clojurescript
05:40bobrywhich one should I use?
07:31hyPiRionQuestion: Will (= (zipmap (keys m) (vals m)) m) for all maps?
07:50raekhyPiRion: yes.
07:50raekkeys and vals are guaranteed to use the same order
08:01mduerksenin clojure.core.logic i'm currently stating this: (fresh [c s d] (membero [c q s d 'Zebra] z)) - i would rather write this: (membero [_ q _ _ 'Zebra] z), but it doesnt work. is there something like this in core.logic?
08:09hyPiRionraek: Thanks.
08:09hyPiRionI couldn't find anything in the doc saying that maps have to deliver them in the same order.
08:43ikitatI've been spinning in circles trying to wrap my brain around a concept rhickey spoke about in two of his recorded "simplicity" talks.
08:44ikitatHe talks about data and recommends not building domain objects, but instead choose sets, maps, lists, json, xml, etc.
08:45ikitatNow, I realize that lists, maps, sets are a very natural way of representation in clojure, but how could one apply this same concept when they need to work in a language like Java
08:45jonaskoelkerikitat: awkwardly :-P
08:45ikitatright?
08:45clojurebotflatten |is| rarely the right answer. What if your "base type" is a list
08:46jonaskoelkerikitat: yes. Java doesn't seem to have much in the way of handling those simple data structures, and to the extent it does it's hard to remember
08:46ikitatthe best I can come up with is continue to build the domain objects, but maybe just implement them in terms of map
08:46jonaskoelkerikitat: well, you could just pass that map around to the data users
08:47jonaskoelkerthen have Util.mangleMap, Util.frobMap, Util.twiddleMap, etc.
08:47rodikitat: i think the message to take away is don't *assume* you need to wrap everything up in domain objects. you're going to need to apply the principle on a language to language basis where it makes sense.
08:48ikitatwell, it was interesting because he referenced not needing to create a new class every time, which seems to imply a Java-like language
08:49gfredericksruby might be a language where it makes sense to say that and is easier to apply
08:49jonaskoelkerpython as well
08:49ikitattrue, any dynamic language really
08:49gfredericksthe rubyists like making new classes just for the sake of configging something
08:49ikitatso, that still leaves me to wonder if there is anything I can take from that concept and use it in Java
08:50rodyeah sure. but i think the point is don't start with the assumption "right lets create a class then munge my problem into it". if an array and a function will do then just use that, ya know?
08:50jonaskoelkerikitat: you _could_, though I think it's a lose-lose proposition
08:50jonaskoelker:P
08:50jonaskoelkerthen again, that would me my anti-java bias
08:51ikitatif anything, it sure will be fun to wait around for java to gain an ample amount of expressiveness
08:51jonaskoelker=)
08:52jonaskoelker"Oh look, I'm typing boilerplate code again. This must be java"
08:52gfredericksisn't that what scala is?
08:52jonaskoelker^^ +1 like
09:02jonaskoelkerdo you guys have any experience with haskell? If so, what do you make of it?
09:03jonaskoelker= f a b c
09:03jonaskoelkeroops, nvm
09:04carkhaskelll is lovely but it takes a whille to learn it
09:05carki like how the type system is actually helping in creating stuff, rather than just being a "check your program" thing
09:05ikitatsome, it has a fascinating set of features... my favorite is actually how the type system represents code with side effects
09:06jonaskoelkeragreed, ikitat; how so, cark?
09:06ikitatquickcheck is a very cool idea too
09:06carkwell
09:07carkfor instance
09:07ikitatand type inference keeps you from longing for a dynamic language to some extent
09:07carkdata Exp e = Val e | Sum e e
09:08carkthat single type says a lot
09:08jonaskoelkeryeah, type inferencing is a near-must in any self-respecting language
09:08carkdata Exp e = Val e | Sum (Exp e) (Exp e)
09:08jonaskoelkerscala's is decent, I find---I'm not cluttering my code with type annotations, but get the benefits
09:08carki knew i shouldn't try without a compiler =)
09:09carkin a single type declaration you define a recursive type, that will direct your way of thinking at the problem, thats far and beyond mere type checking
09:10jonaskoelkeryeah, agreed
09:10carkand btw i'd love to find a good way to emulate that in clojure, along with typeclasses
09:10jonaskoelkeraren't typeclasses basically vtables?
09:11carkright you can do all sort of things, but to make it so it integrates well with the rest of your clojure code ...that's harder i think
09:11jonaskoelkerdat be true
09:12carkparticulary the dinstinction between a type and its constructors, i've been stumped on that
09:12jonaskoelkerhowever, for tree-ish types, you can just represent your data as sexps?
09:12carksure or maps
09:12drguildodoes anyone here use clooj?
09:14matessimLight table is going to be HUGEEE for clojure :P
09:15carkmatessim: depends on how it scales to large projects
09:15matessimnot only, if clojure had a easy go-to IDE that's shiny
09:16matessimit would serve as a giant attractor to the clojure community.
09:16matessimfor*
09:16carktrue, and "easy to install on windows" tooling
09:18jonaskoelkeremacs not shiny enough? :)
09:19carkgood enough for me, but not everyone is ready to spend a week learning emacs, and setting it up for clojure
09:20carkconsidering that's only for testing that strange language with all the parens
09:20drguildoonly a week?
09:21carkright i may be understating a bit =)
09:22jonaskoelkerwhat---all you do is press escape meta alt control shift, then you're ready to go :D
09:22carkhaha indeed
09:23jonaskoelkerfun thing to do: set up your caps lock key to be all those mods at the same time :-)
09:23jonaskoelkerthen it'd be the emacs key
09:25carkto go back to haskell, what i really like about it is all those nice concepts originating there
09:25carkmonads, arrows and so on
09:26carki'd love to see a good implementation fo arrows in clojure
09:26carkwith some kind of clojuresque port of the arrow notation
09:27carkwhich looks like non-trivial to me
09:40jasonjckncark: there's an implementation of monads in clojure
09:40carkyes =)
09:51beffbernardHow would you go about validating a sexp against a BNF like grammar?
09:53carkuse a parser ? one that's abstract enough to take any kind of state instead of just sequences of character
09:54bobryis it possible to make cljsbuild report errors in a human readable way? currently all I see is a Java stack trace ending with 'Caused by: java.lang.RuntimeException: Unmatched delimiter: )'
09:55bobryhaving a filename and a line number would help :)
09:55beffbernardcark: I technically don't need a parser.. It's already in a lisp datastructure.. I just want to validate my sexp is valid against a grammar
09:55jasonjcknbeffbernard: convert the SEXP to string, then use BNF grammar is used to parse any string
09:56beffbernardjasonjckn: antlr?
09:56jasonjcknbeffbernard: is that a parser? there's plenty to choose from
09:56jasonjcknbeffbernard: if you want a clojure parser I can list a few
09:56beffbernardyes, thanks
09:57carkbeffbernard: validating some kind of state with a grammer is what a parser does
09:57carkgrammar =/
09:57carkparsing is not about strings and characters
09:58jasonjcknbeffbernard: i've always wanted to use this, I think it would be my favorite one: https://github.com/cgrand/parsley
09:59jasonjcknbeffbernard: i've used this a lot, it matches haskell's parsec api quite closely https://github.com/jasonjckn/clarsec
09:59jasonjcknbeffbernard: but it's not documented, and wouldn't be as fast as parsley, it's a combinator parser
10:00jasonjcknhowever, at least you don't get grammar conflicts
10:00beffbernardjasonjckn: cool.. not being fast is ok.. correctness is what I'm after
10:01beffbernardI'm actually interoping with a haskell data type declarations
10:01beffbernardwith Haskel*
10:01beffbernardHaskell*
10:02jasonjcknif I had to guess both libraries are about the same in terms of correctness and interop (whch I haven't a clue how to do)
10:02jasonjcknbeffbernard: if you think in terms of BNF parsley is probably better
10:02jasonjcknit's an lr1 parser ish
10:03jasonjcknclarsec's code will probably be a bit shorter, and reads more like english
10:03jasonjcknbeffbernard: what are you doing?
10:03jasonjcknbeffbernard: what's the language like
10:04jasonjcknbeffbernard: if you need to interop with haskell, why not just write the parser in haskell?
10:05beffbernardI don't know if i'm allowed to tell you the details, but it's a DSL for a particular domain to interact with an engine we're writing
10:05jasonjcknhaskell parsers are more mature than clojure's
10:05beffbernardvague I know
10:05beffbernardThe engine is written in Haskell and the webapp is clojure
10:05beffbernardand they communicate through this DSL language
10:06jasonjcknso you're sending ascii over the wire?
10:06beffbernardsort of
10:07jasonjcknI think you can parse sexp directly with clarsec
10:07jasonjcknbut you might have to change the code a little bit, i've never tried to do that
10:08carkbeffbernard: here is a very simple parser combinator library that should work for parsing just about anything, should be useable as a base for parsing sexp https://gist.github.com/2666682
10:08jasonjckndo you know how combinator parsers work?
10:08beffbernardNot so much
10:09jasonjcknbeffbernard: do you know how monads work?
10:09carkmonads are not necessary to make a parsor combinator, but they sure help =)
10:09beffbernardLow-level no.. but I use them day to day
10:10gfredericksdidn't flatland/useful have an unpartial function?
10:12hyPiRionSo, while on the topic of parsers - Have anyone found a good lexer for Clojure?
10:13jasonjcknbeffbernard: well, if I were in your position with an sexp, i'd use combinator parsers
10:13beffbernardjasonjckn: ok
10:13jasonjcknbeffbernard: the only library i've seen with documentation is http://brehaut.net/blog/2011/fnparse_introduction
10:14jasonjcknbeffbernard: i'm very familiar with clarsec, but there's no documentation, i can get you started if you'd like, but i can't write a tutorial for you :)
10:14jasonjcknbeffbernard: if you send something to parse, i'll try to write a parser
10:15beffbernardWant to talk through some other venue?
10:15jasonjckncan you PM?
10:15beffbernardYup
10:42wkmanireGood morning.
11:17_KY_What's an efficient way to store a tree with arbitrary number of children at each node?
11:20tmciver_KY_: how about just use a map as a node with key :children whose value is a collection of nodes?
11:21_KY_I thought of that...
11:22_KY_But what if some nodes are huge sub-trees?
11:22_KY_Can the map handle that?
11:23tmciver_KY_: Sure, especially if you can construct it lazily.
11:26_KY_But then how can I store say a number in each node?
11:27_KY_Oh maybe store it at index 0 of the collection of children
11:27progoumm, {:value 4 :children [...]} ?
11:28_KY_progo: but then each node must have a list of children... even if null
11:29progo'I have zero children, their names are []'.
11:29progoempty seq is a valid seq.
11:29_KY_Yes but it doubles the map size....
11:30tmciver_KY_: here's a function that builds up a tree with key children:
11:30tmciverhttps://www.refheap.com/paste/2696
11:30xeqi&(:children {:value 3})
11:30lazybot⇒ nil
11:30tmciverthe get-children method should create nodes in whatever fashion you want.
11:31marmae_anyone knows why the swank repl inside emacs keeps telling me that it doesn't know the doc function?
11:32tmcivermarmae_: unfortunately, you must (use 'clojure.repl) first.
11:33_KY_What is the key of that map?
11:33marmae_tmciver: thanks!
11:33_KY_:Children ?
11:33tmcivermarmae_: no problem
11:35tmciver_KY_: in the build-tree function? It's :children
11:36_KY_&(:children {:value 3}) <--- the outer layer is just a list Ision't it?
11:36lazybot⇒ nil
11:37_KY_So that map is already addressable by children
11:37tmciver_KY_: that was just an example what happens when you try to get the children from a map that doesn't have any.
11:39_KY_I see...
11:40_KY_But I thought a map must be a sequence of key-value pairs?
11:41tmciver_KY_: a tree structure using maps might look something like: {:value 3 :children [{:value 2} {:value 1}]}
11:42tmciver_KY_: it's tree of three nodes; one root node that has two child nodes.
11:42_KY_I see...
11:42_KY_Does it matter if some values are very big in size?
11:43_KY_They would be heavily nested... right?
11:43tmciver_KY_: The child nodes do not have children of their own but they could have had children keys with an empty collection.
11:43_KY_Right...
11:45tmciver_KY_: heavily nested? It depends upon your data.
11:45_KY_The tree may grow in size...
11:45wtetzner_KY_: yes, if you add more stuff to the tree, it will get bigger
11:46_KY_Then you'd have a map where certain values are particularly big in size...
11:46_KY_I was wondering if that'd be a problem
11:46tmciver_KY_: no more a problem than building a tree data structure in some other way.
11:47_KY_But how can the map be addressed in constant time?
11:47_KY_If its element sizes are uneven?
11:47wtetznerthe value stored in the map is just a pointer
11:48_KY_I see...
11:48_KY_Ok, thanks a lot of, ... it's getting more like C++ talk...
11:48_KY_=)
11:48wtetznerall java types that are not primitives (int, long, boolean, etc.) are reference types
11:49wtetznermeaning you don't copy them when passing them around
11:49wtetzneryou always refer to the one instance of it
11:49tmciver_KY_: you can never access nodes of a tree data structure in constant time; it's a function of how many levels you have.
11:50wtetznerbut you can access the keys in a given node in constant time
11:50_KY_Yeah... I mean for a single map
11:50wtetznerwell, near-constant
11:54_KY_So the maps have 2 keys, :value and :children?
11:55_KY_That is double the size of a map with a single key I think
11:56metellusyeah, but the size of that particular map will be the same regardless of how many children it has
12:00_KY_I see...
12:00_KY_Is it inefficient to grow the size of a vector, as opposed to a list?
12:03technomancygrowing vectors is fine as long as you add at the end
12:03_KY_That's good...
12:03_KY_What's the reason behind that? =)
12:04_KY_They are allocated blocks of memory in advance I guess
12:05matessimDid you guys know Steven Spielberg directed Pinky and the brain?
12:09tmcivermatessim: Ha! Really? I knew there was a reason I liked that show.
12:10matessimYep, i found it fascinating too lol.
12:10matessim(This fact and the show)
12:10gfredericks_KY_: it's because of the fixed-size array chunks that make up the underlying trees
12:11gfredericks_KY_: it's a performance tradeoff; this video discusses why I believe: http://blip.tv/clojure/daniel-spiewak-extreme-cleverness-functional-data-structures-in-scala-5970151
12:14_KY_Steven Spielberg's daddy was one of the early developers of UNIX
12:23twhumealoha. Is there a really good tutorial for dummies on making lazy sequences? All the ones I've seen concentrate on the fibonacci sequence as an example, but it's a little different to what I'm after. I'd like to create a sequence of the form "A", "B", "C", "AA", "AB", "AC", "BA", "BB", "BC", "CA", "CB", "CC", "AAA" ... (i.e. breadth-first traversal of a tree)
12:35wolkefmI'm attempting to set up clojure mode for emacs - however I'm slightly confused about placing clojure-mode.el in ~/.emacs.d/
12:36wolkefmhow is this a directory? I see no record of it anywhere - and I can't create it due to begining with period
12:38rlbwolkefm: I'm not certain that it's OK to put arbitrary files in .emacs.d. You can put your own code in .emacs.d/init.el, but emacs itself uses other files in that directory (i.e. .gtkrc, backup files, etc.).
12:38rlbwolkefm: what OS?
12:39wolkefmwindows
12:39wolkefmxp
12:39rlbvia cygwin, or native emacs?
12:40wolkefmI simply used add folder via the desktop envrioment
12:40bobrydoes anyone here have clojurescript in *production*?
12:40wolkefmwell, fialed to rather
12:40rlbI mean are you running cygwin emacs or a native emacs?
12:40wolkefmnative
12:42rlbI'm not really sure how that works. If it helps, in linux, you'd normally just edit your ~/.emacs file (wherever that is for windows), and add a directory to the load-path, and then put clojure-mode.el (and whatever else you like) in there.
12:42rlbs/linux/most other emacs flavors/
12:43rlbi.e. (push "/home/rlb/lib/emacs" load-path) or whatever.
12:47rlbwolkefm: check out the emacs info pages appendix G (wrt windows). Looks like ".emacs" should work fine (though the windows gui itself might not let you create it).
12:48rlb(and it says emacs also supports _ as an alternative to . on windows -- since .foo files are sometimes hard to create)
12:49wolkefmgoogling now. I think I ran across this earlier, supposedly a default file instead of .emacs - however I couldn't find one (or the init file that was also mentioned - though could be totally seperate docs - lemme check)
12:50rlbwolkefm: .emacs won't exist until you create it.
12:51rlbwolkefm: if you just fire up emacs and ask it to edit (via C-x C-f) ~/.emacs, I suspect you'll get the right thing.
12:51rlband emacs will probably let you create the file, even if the windows gui won't.
12:51rlbAlternately, create ~/_emacs.
12:52wolkefmthank you - I'll let you know how it goes
13:17michaelr525hello
13:18eggsbyhello michaelr525
13:19michaelr525what's up?
13:20eggsbyworking on some toy problem for practice, you?
13:23michaelr525i'm working on a pinterest clone of sorts
13:23michaelr525not my day job of course, just a clojure project for fun and profit\
13:34muhoo$seen cemerick
13:34lazybotcemerick was last seen quitting 3 days and 23 hours ago.
13:34fliebelHow do I run cKanren? More specifically, once in the petit repl, how do I load/import/require it?
13:35Licenserwhat once has been seen can nevrer been unseen! http://chicksontheright.com/wp-content/uploads/2010/09/what-has-been-seen-cannot-be-unseen.jpg
13:39robertstuttafordis this worth grabbing? https://peepcode.com/products/functional-programming-with-clojure
13:43tomojthat's what I started with, and I liked it, but the video is presumably very out of date, though the code is only somewhat out of date
13:43robertstuttafordthanks
13:45uvtcThe lein2 preview 4 announcement says that it now uses Clojure 1.4.0 internally, but here's my output from running lein the first time: <https://www.refheap.com/paste/2697&gt;. It's grabbing Clojure 1.3.0.
13:45uvtcIn fact, the Clojure 1.2.1 pom is mentioned in there as well, but the jar for it does not appear to be downloaded.
13:49uvtcWhoops. Ran out of time. Will post to the ML about it.
14:08wolkefmI've installed leiningen via .bat file downloading the corresponding .jar. Is there any way to get this to work without placing it in my $PATH?
14:09wolkefmI'm working off my portable hard drive on a university computer at the moment and I can't edit the $PATH
14:12wolkefmthe wording 'place it in your $path (I like to use ~/bin/lein/) make me think that adding it as an enviroment varible (something I only vaugely remember) isn't the correct interpertation. idk thoughts anyone
14:12wolkefmhttps://github.com/technomancy/leiningen - also link.
14:17wolkefmnevermind - Need to get some sleep and pick this up when I get up
14:26fliebelDoes anyone know how to compute the sum of a list in cKanren?
14:38ibdknoxAnyone got a cool algorithm that has a naive (slow) implementation and a fast one that might be fun to visualize? I have a neat idea for a Light Table demo
14:39matessimibdknox=Chris Granger?
14:39matessim:O
14:39ibdknoxit does :)
14:40matessimI was totally awe-inspired by you're Kickstarter, + I discovered Bret Victor through it
14:40pushp0pooh light table demo?
14:40matessimAnd by you, lol.
14:40ibdknoxhaha thanks :)
14:40blasturahi, I'm looking for a nice way to loop through all the number in an int, ex: 2345 -> (map myfunc [2 3 4 5]), how can I split an int to a sequence of every number?
14:41ibdknoxpushp0p: yeah, gotta try to get up to 300k ;) It's going to be a really cool demo
14:41xeqialready implemented or just looking for ideas?
14:42ibdknoxxeqi: a lot of it is implemented. I came up with this algorithm thing late last night though, so looking for ideas on that :)
14:42raekblastura: one way is to turn the number into a string and then turn each character into a number
14:43matessimshuffling algorithms perhaps?
14:43matessimnaive one and Knuth-fisher?
14:43matessim-Yates*
14:43matessimto ibdknox
14:44ibdknoxthat could work :)
14:44raek,(for [d (str 2345)] (Character/digit d 10)])
14:44clojurebot#<ExecutionException java.util.concurrent.ExecutionException: java.lang.RuntimeException: Unmatched delimiter: ]>
14:44beffbernardI would visualize a sort.. O(n^2) vs O(log n)
14:44raek,(for [d (str 2345)] (Character/digit d 10))
14:44clojurebot(2 3 4 5)
14:44ibdknoxbeffbernard: yeah I was thinking something like that as well
14:44raekthen you can map over that sequence
14:44blasturaraek: yea but that seems a bit ugly
14:45ibdknoxthough the point is less the algorithm itself and more of what if you could see a graph of performance characteristics in real-time between two different implementations :)
14:45blasturaraek: thanks anyway I'll use that for now
14:45raekblastura: what is ugly about it?
14:45ibdknoxactually
14:45blasturareak: just though there might be another way without converting to a string
14:45ibdknoxshowing the difference between map and pmap would work really well for that
14:46ibdknoxas the advantage is based on the size of the operation
14:46raekblastura: well, digits is a formatting concept
14:47matessimibdknox, is the IDE meant to be full screen, or are you just filming like that? If it isn't it would be nice if you'd enable such a feature, immersive coding is a pretty important addition IMO.
14:47beffbernard$491 until 200k.. sweet
14:47ibdknoxmatessim: it's all fullscreen
14:47ibdknoxseems like a waste otherwise
14:47matessim591$
14:47matessim^ +1
14:47ibdknoxthough it doesn't *have* to be
14:47beffbernardhhehe typo
14:48ibdknoxI'll give you guys a hint
14:48matessimhow does Kickstarter work exactly? do they release all the money immidietly or do they need to be given progress reports etc and follow up on these things?
14:48matessim(to you)
14:49ibdknoxin Clojure, macros make it very easy to create DSLs. What if there was a platform that made it trivially simple to build domain specific tools? :)
14:49ibdknoxmatessim: once the time runs out all the money is transfered
14:49matessimokay :)
14:49matessimthanks.
14:49beffbernardibdknox: in clojure or any supported language?
14:49ibdknoxbeffbernard: any :)
14:50ibdknoxbeffbernard: to prove my point, I'll be using python
14:50beffbernardthat would be sweet
14:51weavejesteribdknox: Did you notice I added a make-route function in Compojure 1.1.0-SNAPSHOT ?
14:51ibdknoxweavejester: oo, I did not
14:51weavejesteribdknox: If that removes your need to eval in Noir, I can release 1.1.0 fairly soon.
14:52ibdknoxweavejester: I think it does
14:53weavejesteribdknox: When you have some code up in Noir, let me know and I'll push out 1.1.0 :)
14:53weavejesterAnd for now, I need to do some shopping...
14:53ibdknoxenjoy :)
14:58mtkoanhow can i transform this: [1 ([2 3] [4 5])] into this: [1 [2 3] [4 5]] ?
14:59jasonjcknmtkoan (juxt first (comp first second))
14:59RaynesThat's pretty specific.
15:00mtkoanjasonjckn: thanks
15:00mtkoanRaynes: yes it is?
15:02dnolenibdknox: $91 away
15:02ibdknoxthat was quick
15:02ibdknoxlol
15:03ibdknoxah someone kicked in $500 :)
15:03Raynesibdknox: No way it'll ever hit $300k.
15:03ibdknoxwatch me ;)
15:03RaynesYou're a dirty greedy skank.
15:04mtkoanoh I see what you mean, too specific.. yes I need [1 ([2 3] [4 5] ... [n n+1])]
15:04ibdknoxRaynes: haha
15:04Raynes:p
15:05jasonjckn,(apply vector [1 ([2 3] [4 5])] )
15:05clojurebot#<IllegalArgumentException java.lang.IllegalArgumentException: Key must be integer>
15:05jasonjckn,(apply vector [1 '([2 3] [4 5])] )
15:05clojurebot[1 ([2 3] [4 5])]
15:06alexbaranoskyseems like there is every reason in the world to imagine it would get to $300k
15:06jasonjckn,(apply #(apply vector %) [1 '([2 3] [4 5])] )
15:06clojurebot#<ArityException clojure.lang.ArityException: Wrong number of args (2) passed to: sandbox$eval80$fn>
15:06Raynesalexbaranosky: I guess if he can get a bunch of people to throw 10ks into the mix.
15:07RaynesI don't see it getting there otherwise.
15:07ibdknoxRaynes: I haven't hit the python crowd yet
15:07jasonjckn,(apply #(apply vector %&) [1 '([2 3] [4 5])] )
15:07clojurebot[1 ([2 3] [4 5])]
15:07RaynesBut Jesus, it hit its goal.
15:07RaynesCan we be happy about that?
15:07lynaghkibdknox: High five!
15:07RaynesWell, hasn't *quite* hit its goal.
15:07RaynesGive it 30 minutes.
15:07lynaghkRaynes: Anti-high five!
15:08alexbaranoskyyeah congrats ... meeting the goal is eminent
15:08ibdknox:)
15:08jasonjcknmtkoan: (let [[a [& b]] [1 '([2 3] [4 5])]] (cons a b)) good enough
15:08jasonjcknibdknox: how many people are you working with?
15:08RaynesDone.
15:08yawntLIGHTTABLE IS NOT GOING TO HAPPEN
15:08ibdknoxjasonjckn: right now, it's just me. My co-founder is finishing school
15:08RaynesGoal is met on kickstarter.
15:09jonasenibdknox: congrats!
15:09yawntjust kiddin
15:09yawntlooks promising
15:09yawnt:D
15:09lynaghkRaynes: I'm using tentacles to figure out who I should grab coffee with while I'm in Palo Alto next week. Nice library, thanks.
15:09Rayneslynaghk: Bahaha, man, that's all I ever wrote it for.
15:09jasonjcknibdknox: pretty sweet deal then :-P 200k to found a company
15:09jasonjckncongrats
15:10alexbaranoskylynaghk, did it say me Kevin?
15:10RaynesYou're no fun.
15:10lynaghkalexbaranosky: yes, it does list you as in the Bay Area. Want to grab coffee?
15:10mtkoanjasonjckn: thank you much.. have to look at this abit ;)
15:10Raynesalexbaranosky: Didn't we spend like a hour arguing with you about the merits of for vs map at the Conj party?
15:11alexbaranoskyI work right next to Palo Alto... I think my motel right now might actually be technically in Palo Alto
15:11alexbaranoskyRaynes, yes
15:12alexbaranoskymy heuristic for when to use 'for' is as soon as the funny symbols becomes more than you'd get with 'for' hehe
15:12ibdknoxjasonjckn: it'll certainly be more than that :)
15:12ibdknoxjasonjckn: hopefully 3-4 more
15:12jasonjcknibdknox: 3-400k?
15:12jasonjcknibdknox: or people?
15:12ibdknoxjasonjckn: people
15:12alexbaranoskyoops, meant to say use for when too many funny symbols with map
15:12dnolenibdknox: congrats!
15:13ibdknoxdnolen: thanks :)
15:13alexbaranoskylynaghk, I just moved out here a week ago to work at Runa
15:13ibdknoxdnolen: thanks for helping spread the word
15:13jasonjcknibdknox: ah that's more dollar value then :)
15:13ibdknoxjasonjckn: yeah, that runs out quick ;)
15:14fliebelWhat? whoa! congrats, ibdknox! If I ever get a credit card...
15:15ibdknoxhaha
15:17ibdknoxI'm just excited that hopefully I'll get to realize all of the potential here
15:17ibdknoxthere's so much room for our tools to grow
15:19lynaghkibdknox: I'm definitely excited to see what you guys come up with. "Bad Relationship" isn't the best way to describe me & emacs, but it's the first way that comes to mind.
15:19ibdknoxhaha
15:19ibdknoxactually for the kind of work you do, I think it's especially well-suited
15:19jasonjckni actually have no qualms with emacs for clojure development
15:19lynaghkLight Table re: visualization, you mean?
15:19ibdknoxlynaghk: yeah
15:20ibdknoxsorry that was really ambiguous lol
15:20jasonjcknSometimes when interactive developing, even after running C-c C-k it either falsely fails to compile, or falsely succeeds in compiling
15:21lynaghkibdknox: yep. A year or two back I integrated ProtoVis with Ymacs, but it was just a little hack. An extensible editor on the web platform would be boss (assuming I can jack it into my brain as directly as emacs)
15:21MadsyMeta-question: How long does it usually take to get a post accepted to the Google Group? It's gone 2 hours, so I wonder if I triggered the spam filter or whatnot :)
15:21jasonjcknThat issue would be nice to solve, but it's very tricky
15:21Madsybeen*
15:21dnolenMadsy: have you posted before?
15:21Madsydnolen: No, this is my first post.
15:22dnolenMadsy: first posts are moderated, it's the weekend so don't expect it to appear soon.
15:22MadsyOkay, thanks.
15:22Raynesibdknox: Fly me out to San Francisco.
15:23ibdknoxlol you're just moving to LA aren't you :p
15:23scottjibdknox: are you quitting day job?
15:23Raynesibdknox: Well, yeah, but not right now. I can come to SF. :p
15:23ibdknoxscottj: did that a couple months ago
15:23Raynesscottj: He quit that ages ago.
15:27scottjibdknox: http://appjs.org/ maybe just in time for light table
15:29ibdknoxscottj: yeah, I saw thought. Unfortunately it requires node to already be installed
15:30ibdknoxscottj: right now I'm just messing around in my little mac-only wrapper :)
15:30scottjibdknox: btw there is macgap but don't think it ever became crossplatform
15:31ibdknoxscottj: huh, hadn't seen that
15:33lynaghkRaynes: Can I ask tentacles to abstract away the pagination within a lazy seq?
15:35franksibdknox: congrats with getting the funding!!!
15:35ibdknoxfranks: thanks :)
15:40Rayneslynaghk: Yeah, someone added it a few days ago.
15:41Rayneslynaghk: I haven't documented it yet, look at the last few commits.
15:41Rayneslynaghk: Should be an :all-pages option.
15:43lynaghkRaynes: cool, thanks.
15:48jasonjckn200k on the money
15:49progo:)
15:50progofeeling compelled to switch my backing to $50 for early access
15:54BorkdudeI would like to know how the t-shirt is going to look ;)
15:55RaynesA lamp sitting on a coffee table.
15:55RaynesObviously.
15:57TimMcDidn't g-somebody come up with a neat design?
16:00muhooibdknox: congratulations, hope you can ship soon :-)
16:01BorkdudeRaynes: maybe a t-shirt with lamp built in (batteries included)
16:07Borkdudeibdknox: sssSSSsss noises… you're going to program a snake game as a first demo… cool :P
16:07ibdknoxhaha
16:07ibdknox:D
16:12marmae_did anyone of you read "land of lisp"?
16:12marmae_is it a good book?
16:13MadsyIt's been a few days, so I'll ask again. What is the best approach to get third-party libraries exposed to Clojure and leiningen? I have a more recent library than what's available at Clojars and Maven. Also the library is jOGL, and it uses JNI and hence depend on platform-speciic libraries.
16:13Borkdudemadsy: you could use a local jar?
16:13fliebelmarmae_: I don't know, but I imagine 0x10c will look like the video :)
16:14zanes,expt
16:14clojurebot#<CompilerException java.lang.RuntimeException: Unable to resolve symbol: expt in this context, compiling:(NO_SOURCE_PATH:0)>
16:14zanesWhat's the correct way to get access to expt in 1.4.0?
16:14MadsyBorkdude: Although that would make distribution a bit harder, yes I could. But how do I prepend the paths to the classpath of my leiningen project?
16:14BorkdudeMadsy: https://github.com/kumarshantanu/lein-localrepo
16:15MadsyBorkdude: And lein-localrepo works with JNI-libraries?
16:16dreishzanes: Are you referring to exponentiation? That would be (Math/pow x y)
16:16marmae_fliebel: har har ;)
16:16zanesdreish: I was indeed. It looks like there are clojure-specific implementations in contrib / other places, so I was confused.
16:16devnRaynes: what's the deal with your jerk response to the URI lib announcement?
16:17zanesdreish: Thanks!
16:17marmae_first time i heard of it, tbh.
16:17BorkdudeMadsy: I don't know, is it a normal jar? I never used JNI, never needed to
16:17Raynesdevn: Eh?
16:18devnRaynes: exactly what i said. I think your response is nasty. asking "how on earth" and so on. it's just a jerk response.
16:18MadsyBorkdude: I have different jars for different platforms. jogl.all.x86.linux.jar etc
16:18Raynesdevn: I gave him suggestions after reading his code. I'm not going to apologize for that. Also, if you're here to berate me, can you do it in PM so as to not bother the channel? :\
16:18BorkdudeMadsy: you could also try #leiningen for more suggestions
16:18MadsyBorkdude: Thanks
16:18devnRandom Person: "Hello I created a library." Raynes: "Your codes are disgusting. I will rant about them publicly instead of submitting a pull request."
16:19devnRaynes: You berated him publicly.
16:19devnSo you deserve the same.
16:19Raynes...
16:19RaynesI didn't say a single thing that sounded like "Your code is disgusting."
16:19RaynesGiven his code, I thought he was relatively new to the language, so I figured a few suggestions would be helpful. I'd happily send a pull request if he asked me to. I was honestly curious about his usage of association lists.
16:20devnRaynes: your phrasing on a few things did not translate well to email.
16:20RaynesAlso, wtetzner is in this channel, so if I offended him, I'd kindly ask him personally to tell me so and I will certainly apologize for anything that actually did offend him.
16:20devn"How on earth", "never (use) without :only"
16:20devnive seen people (use) without :only on plenty of occassions, yourself included
16:21RaynesAnd that makes it okay?
16:21devni dont disagree with what you were saying, but i disagree with how public it was, and how you presented it
16:21ibdknoxeh
16:21RaynesWhatever.
16:21RaynesLeave me alone, please.
16:21Raynes:\
16:21ibdknoxhe posted on a public list
16:22ibdknoxit's bound to be public
16:22devnSo submit a pull request and don't be a dick.
16:22devnIt's simple.
16:22RaynesI also disagree that I worded anything in a degrading tone.
16:22devnagree to disagree then
16:22technomancy~gentlemen
16:22clojurebotYou can't fight in here. This is the war room.
16:22devnlol
16:22fliebeldevn: Try reading it again while imagining Raynes smiling and looking cherfull. See if it still sounds ugly.
16:23ivannote the lack of "How on earth"
16:23ivanoh, "Why"
16:24ibdknoxeh, if he has a solid position then he should be unfazed either way
16:24BorkdudeI read the post just now and it seems like good suggestions to me, I wouldn't be offended by it
16:24ibdknoxyeah
16:25devnibdknox: nerds are temperamental. take care on the list of not scaring new people off. that's where i'm coming from.
16:25dreishBeing newbie-friendly is a good thing to be mindful of. Perhaps a *friendly* reminder would be in order once in a while. Probably not an attack like "How could you be so rude!", though.
16:25RaynesI honestly thought he was relatively new to the language and would benefit from suggestions rather than just a pull request. As a matter of fact, I told him his library was awesome a few minutes before I wrote that post here in this channel.
16:25RaynesBut I've been known to be a dick by accident before, so *shrug*. Sorry if so.
16:25ibdknoxdevn: sure, but berating without context is just as bad
16:26rlb===(((tahtwasfairlyimpressive)))===
16:26ibdknoxwat
16:26rlboops
16:26rlbwrong window
16:26devnlol
16:26fliebelcan't. resist. http://xkcd.com/481/
16:26ibdknoxhttp://i.imgur.com/04937.png
16:26Raynesdevn: Also, if you happen across a piece of code in a library of mine that people use or code that I've recently written, by all means, alert me immediately so I can fix that crap!
16:26zanesdreish: Ah, I was hoping for something like expt from http://richhickey.github.com/clojure-contrib/math-api.html -- i.e. returns exact number if the base is exact and the power is an integer?
16:26lazybotNooooo, that's so out of date! Please see instead http://clojure.github.com/clojure-contrib/math-api.html and try to stop linking to rich's repo.
16:26devn"Faps_Into_Socks"
16:27dreishzanes: There must be something like that out there, but I don't know where. I've written it a few times just for fun.
16:27devnRaynes: im not trying to attack you, im just trying to defend the realm. i care too much sometimes. sorry about that.
16:28MadsyBorkdude: I think I have an idea what to do now, thank you. I can either make poms for the individual platforms, or repackage jOGL and find the correct libraries at runtime.
16:29wtetznerRaynes: no problem dude
16:29wtetzneri didn't have a problem with your post
16:30Raynesdevn: I didn't take the :use stuff as an attack. technomancy is certainly not shy about telling me when I use :use without :only. He is a freak about that stuff. :p
16:30wtetznerexcept for the fact that you were wrong about my use of association lists :)
16:30ivanwtetzner: way to chill a flamewar, man
16:30devnhahaha
16:31zanesdreish: It's apparently in https://github.com/clojure/math.numeric-tower
16:31Rayneswtetzner: I was curious about that!
16:31zanesdreish: But I couldn't find that library with lein search. Hm.
16:31Rayneswtetzner: Got time to walk me through how you're using them?
16:31Borkdudedevn: I have found the clojure community friendlier than others for newcomers, it's good to keep that etiquette, agree
16:31wtetznerRaynes: sure
16:32devnBorkdude: we gotta be careful or people will just start posting: "I DISLIKE THE WAY YOU INDENTED YOUR FUNCTION. GO DIE IN A FIRE."
16:32devn</slippery-slope-fallacy>
16:32wtetzneroften query strings are used in ways that aren't map-like
16:32dreishzanes: That looks nice, but a little dated.
16:32wtetznerfor example, sometimes people use them as a mini-language
16:32Borkdudedevn: I have found people in CL sometimes be grumpy or just showing off without really helping
16:32wtetznerwhich means keys can appear multiple times
16:32devnBorkdude: yeah. that's why i left CL.
16:32RaynesAh!
16:32wtetznerand the order in which they appear has an effect
16:32RaynesThat's a good point.
16:33dreishzanes: Though it uses protocols and datatypes, so that's probably modern enough. Just the fact that it hasn't been touched in 7 months is a little worrying.
16:33wtetzneri was also careful to make sure that when turning a query string into an alist and turning it back into a query string
16:33wtetzneryou'd get the same query string back
16:33wtetznerso x=y&x&&x=&=&=y
16:33wtetznercould safely be passed through unchanged
16:34zanesdreish: 'src' was touched a month ago? Anyway, I can't figure out how to install it with lein.
16:34wtetznersince a lot of sites rely on poorly constructed urls
16:34Rayneswtetzner: Okay, that makes total sense.
16:34Raynes:)
16:35technomancyHTTP headers are the same way; it's super annoying
16:35devn(inc wtetzner)
16:35lazybot⇒ 1
16:35devn(inc Raynes)
16:35lazybot⇒ 13
16:35technomancyexcept HTTP headers have extra facepalminess in that they're case-insensitive
16:35devn"facepalminess"
16:35devn(inc technomancy)
16:35lazybot⇒ 24
16:37Rayneswtetzner: You'll have to forgive me for freaking out about the association lists. I've literally never seen anybody with a real reasonable use for them in Clojure, so without knowledge of query string nuttiness, it really does look strange. I'll probably send you a pull request shortly with suggestions for your (ns ..) declarations and some comments for the query-string code to explain it a bit more.
16:37Rayneswtetzner: If you had ordered maps, could they perhaps be represented as that? Just curious.
16:38technomancyRaynes: they still need to be multimaps
16:38Raynestechnomancy: Not really. Multiple keys could be represented with vectors, no?
16:38wtetznerRaynes: but order matters
16:39Raynes"foo=bar&foo=baz" -> {:foo ["bar" "baz"]} or something.
16:39technomancyRaynes: yeah, but that causes them to be collapsed
16:39wtetznerx=1&x=2&y=2 is different from x=1&y=2&x=2
16:39technomancyyou couldn't represent "foo=bar&baz=y&foo=no"
16:39RaynesYeah, you've got me.
16:39RaynesYou win! Okay!!?!?!
16:39technomancyhehe
16:40technomancyI agree that my first reaction upon seeing alists is "oh, someone came from CL and assumes Clojure's maps are similarly useless" =)
16:40technomancyor elisp
16:42Rayneswtetzner: In that case, your code is exceedingly thoughtful and clever and I've written a URI library myself that didn't even account for this stuff.
16:42Rayneswtetzner: Also, what does the name mean? It's killing me inside.
16:42wtetznerRaynes: haha
16:42wtetznerRaynes: the name doesn't mean anything
16:42wtetznerRaynes: but it's memorable
16:43wtetznerRaynes: and not likely to be confused with something else
16:43RaynesThat's for sure!
16:46TimMc"Some people when faced with a problem think, I know, I'll use distributed computing. Now they have n^2 problems."
16:47TimMchttps://twitter.com/#!/jamesiry
16:47Rayneswtetzner: Is there a reason user-info couldn't also be split automatically into the user/pass portions for easier retrieval?
16:47TimMc^ this is my new favorite version of that
16:47RaynesWondering because other libraries avoid doing that as well.
16:51Borkdudelol! https://twitter.com/#!/fakerichhickey/status/200963481565011969
16:52ianbarberis there anything anywhere about the relative sizes of the thread pools for agents using send/send-off. I am guessing send uses one ~= to the number of cores?
16:53ianbarberlooks like, based on this stack overflow: http://stackoverflow.com/questions/1646351/what-is-the-difference-between-clojures-send-and-send-off-functions-with-re
16:54ianbarberso that answers that, sorry for the needless chatter :)
16:56Borkdudeso what's the deal with "wat"… it's just a the Dutch word for "what"
16:56mmarczykI for one don't get what's people's problem with prefix lists *at all*; I rather think they should be used whenever possible as a matter of style
16:57Licenseryay I backed light table 1000th backer in the category
16:57mmarczykconversion to the (:require [foo.bar.baz ...] [foo.bar.quux ...]) style is < 10 lines of code (which I've written), so it's not as if this really makes anything more difficult for any sort of tooling
16:57beffbernardTimMC: N^2 or N! problems? ;)
16:57mmarczykat least as long as it's written in Clojure, but if it isn't, that's hardly the biggest problem.
16:58mmarczykok, so much for my rant. :-P
17:02Borkdude(in fact U literaly means you, and lol means fun in Dutch… it's just slang)
17:09wtetznerRaynes: no reason
17:09wtetznerRaynes: I just didn't think of it
17:09wtetznerRaynes: although i'd have to double check what the rules are for it
17:09RaynesRight
17:10RaynesIt isn't a big deal either way (it's not like I lose anything because of it, nobody else does it either). :)
17:11Rayneswtetzner: Refheap has been fish'd: https://github.com/Raynes/refheap/commit/23750209ff9c9df84f4c3b31ce8aeee2317b08dc
17:11Raynes:D
17:12wtetznerRaynes: awesome
17:12wtetznerRaynes: i'm sure you'll let me know if you find any bugs :)
17:13zxtxhey anybody around who had success to calling scala code from clojure?
17:13RaynesYeah, publicly and with strong words. :P
17:13technomancyzxtx: I was able to invoke the scala compiler
17:13technomancybut that was through ant, so it might not count
17:13zxtxtechnomancy, I am trying to wrap a scala library that makes heavy use of traits
17:14zxtxhow are traits expressed in the jvm
17:14zxtxi know this is more of a scala question, but I want to wrap clojure so figure here works better to ask
17:18gfredericksif trace-lvars reveals that the value of a logic variable is a lazy seq, does that mean I did something wrong?
17:18mmarczykzxtx: http://www.codecommit.com/blog/java/interop-between-java-and-scala
17:18technomancyhm; I don't know what traits are
17:19gfredericksmixins?
17:19zxtxmmarczyk, yep just found that page now
17:20zxtxok now, this is definitely going to be painful :)
17:21Bronsaè
17:21Bronsaops
17:23TimMczxtx: I sense macros in your future.
17:24zxtxTimMc, yep
17:28zxtxhopefully I can see if someone did some of this legwork already
17:38al-maisanwhat's the easiest way to define a bunch of tasks that are independent of each other and have them executed in parallel?
17:40al-maisanI am looking for something like the "go" construct in golang
17:40mrakanaOften I wish I could remove the state I've accumulated inside the repl. How can I just "clear everything" and start from scratch, but without restarting the entire java environment?
17:43arohneral-maisan: there's not anything directly like that, but you could use future or pmap
17:44arohnermrakana: recent versions of swank clear the NS if you use C-c C-l
17:45al-maisanarohner: when using futures: will they be executed w/o any further interaction or do I need to deref them in order to trigger execution?
17:46arohneral-maisan: they start executing immediately. Deref only blocks until the future is done
17:46mrakanaarohner: Thanks, I'll try that out.
17:46al-maisanarohner: I see .. will try them .. thanks!
17:46arohneral-maisan: one tricky aspect is that future uses the IO thread pool, rather than the CPU threadpool
17:46arohnerso be careful about starting large numbers of CPU bound tasks that way
17:47al-maisanwhat is the difference between these pools?
17:47arohnerthe CPU pool is set to N+2 threads, where N is the number of cores you have
17:47arohnerthe IO pool is unlimited
17:47al-maisanah .. I see.
17:47al-maisanthanks for the advice!
17:56arohnersomeone really needs to write future-cpu. I've wanted that before...
18:20Borkdudehow about this for a macro? (inspired by if-let only taking one binding) https://www.refheap.com/paste/2699
18:20lynaghkmmarczyk: just tidied up my cljs benchmark runner---I saw you had some stuff in cljs core on the topic, so you might want to check it out: https://github.com/lynaghk/profile-cljs
18:20al-maisanarohner: hmm .. I am running 50k tasks using futures on a 4-core CPU machine but see only 2 cores being used
18:21al-maisanarohner: here's the source if you'd like to take a look: http://bit.ly/KdrU48
18:22al-maisanall the action is in the main function, lines 48-62
18:23arohneral-maisan: seqs are lazy, so you might not be forcing the evaluation
18:24arohnersee what happens if you put a doall around the map that creates the futures
18:24arohner(for [sexp (doall (map vector...))
18:24LauJensenGood evening gents
18:25BorkdudeLauJensen: good evening
18:26jasonjcknamalloy: did you figure out what rich wanted?
18:26amalloyjasonjckn: i haven't done anything since his response this morning
18:26jasonjcknamalloy: do you know what to do? I can take a look if that helps
18:27al-maisanarohner: the "doall" is doing the trick .. thanks again!!
18:27amalloysorta. i realize my current patch is basically a flamethrower approach, but he implies it's possible to use something a lot more delicate than i think is possible
18:27arohnernp
18:28jasonjcknamalloy: *nods* I haven't a clue yet, but i'll give it some time, see what I come up with
18:29amalloyspecifically, ISeq is not a four-method interface, it is at least nine methods, because it extends IPersistentCollection
18:29amalloythe other twenty or so are necessary only for java interop, which i was under the impression was an important design requirement for seqs, but perhaps isn't. i need to ask him about that
18:30al-maisanWow! The load on my linux box is 300 and growing .. so much for using futures (IO thread pool) for CPU-bound tasks :P
18:31jasonjcknamalloy: Is there no way to inherit from LazySeq and extend reducer protocols?
18:31Borkdudewhat is the place to issue something which is not correct in the docstring of a function in clojure.core?
18:31amalloynot in clojure, only in java
18:32jasonjcknhm, yah dunno what rich had in mind
18:33arohneral-maisan: since you're already using for, pmap might be a better solution
18:33al-maisanmaybe
18:34jasonjcknamalloy: rich says 7 methods, as oppose to 9
18:34arohnerwell, pmap won't give you load of 300 :-)
18:34jasonjcknamalloy: eitherway, he acknowledges a lot of methods, and he says to farm out implementation
18:34amalloyjasonjckn: i don't understand "farm out implementation"
18:35jasonjcknamalloy: Just take the implementation of LazySeq and put it inside its own function that you can call when implementing ISeq (?)
18:35al-maisanarohner: I tried pmap .. wasn't quite happy with the execution time (golang binary 20 seconds, erlang implementation 5 minutes, clojure/pmap 12 minutes)
18:36al-maisanarohner: see http://bit.ly/IWSgZI
18:36jasonjcknamalloy: maybe i'm being naive, i haven't looked at LazySeq code
18:36amalloyjasonjckn: okay, i reread his comment - last time i read it i was still sleepy
18:36jasonjcknkk
18:37amalloyand i think i understand what he's suggesting
18:37arohneral-maisan: again, laziness. try (doall (pmap..))
18:37al-maisanok
18:37PeregrinePDXhttp://stackoverflow.com/questions/2103599/better-alternative-to-pmap-in-clojure-for-parallelizing-moderately-inexpensive-f
18:38amalloyjasonjckn: btw, if you don't mind my asking...should i know who you are? a week ago i'd never heard of you, and suddenly you're doing some cool work on this reducers stuff, and explaining core.logic in irc
18:38jasonjcknamalloy: hah well I use to go under the name Null-A
18:38jasonjcknamalloy: but that won't help you much either
18:38amalloyoh, okay
18:39amalloysure it will. you hang out in irc all the time
18:39jasonjcknamalloy: IRL i worked at backtype before it was bought by twitter
18:39jasonjcknamalloy: and will be starting at twitter very shortly
18:39jasonjcknamalloy: i've worked a lot with nathanmarz
18:39jasonjckncontributed a bit to storm
18:40amalloyinteresting. i wonder if we met in SF
18:40jasonjcknprobably not yet, but if you live there, it will happen
18:40jasonjckni just graduated, so i'll be moving out there shortly
18:40jasonjckn(I was back and forth before)
18:40amalloynah, i lived there a year ago and went to some meetups, including nathanmarz's presentation
18:40amalloyin LA now
18:41jasonjcknAh, maybe we did, i went to a few bay area lisp meetups
18:42jasonjckni went to one on "kludge" another one about a DSL for writing contracts
18:42jasonjcknand a cascalog one, i'm sure if that was bay area lisp meetup though
18:45amalloyright, i was at the clojure meetup on cascalog
18:45amalloyin like...last april or so
18:46jasonjcknprobably met then :)
18:54RaynesHe was the guy with the ponytail and eyes that melt your heart.
18:55amalloyjasonjckn: i just commented again on the issue, if you'd like to keep up to date
18:55jasonjckni'm watching
18:57TEttingerhow do I call a function on each member of a sequence? is it apply, or map, or what?
18:57TEttingerI can never tell all these docs apart
18:57jasonjcknmap
18:57TEttingerthanks
18:57jasonjcknclojuredocs.org may be more useful
18:57amalloyTEttinger: you can ask lazybot, too
18:57jasonjcknor there's many great books
18:57amalloy$findfn inc [1 2 3 4] [2 3 4 5]
18:57lazybot[clojure.core/mapv clojure.core/map clojure.core/keep]
18:58TEttinger,(map #(inc %) [1 2 3])
18:58clojurebot(2 3 4)
18:58jasonjckn,(map inc [1 2 3])
18:58clojurebot(2 3 4)
18:58TEttingeroh :-)
18:59ivan$findfn (1 2 3) (1 3 2)
18:59lazybotjava.lang.ClassCastException: java.lang.Long cannot be cast to clojure.lang.IFn
18:59ivan$findfn '(1 2 3) '(1 3 2)
18:59lazybot[]
19:00jasonjcknunfortunately it's not a strong AI
19:01gfredericks$findfn [1 2 3] [1 2 3]
19:01lazybot[clojure.set/union clojure.set/intersection clojure.set/difference clojure.core/list* clojure.core/time clojure.core/dosync clojure.core/distinct clojure.core/lazy-cat clojure.core/sequence clojure.core/with-loading-context clojure.core/vec clojure.core/concat c... https://www.refheap.com/paste/2702
19:04al-maisanarohner: FYI: the "doall" made no real difference:
19:04al-maisanreal 11m59.194s
19:04al-maisanuser 33m19.577s
19:04al-maisansys 0m7.740s
19:05al-maisanBTW, the version with the futures (that caused the high load) fared as follows:
19:05al-maisanreal 12m17.674s
19:05al-maisanuser 43m32.027s
19:05al-maisansys 0m9.077s
19:05al-maisanthanks for all your help!
19:05PeregrinePDXtry partitioning your seq if you can
19:05PeregrinePDXand pmap on each partition.
19:05al-maisanaha
19:06al-maisanOK
19:06al-maisanwill try that
19:06al-maisanthanks!
19:08jasonjcknamalloy: never heard of range-list (?)
19:08amalloyjasonjckn: i just made it up
19:08amalloythe point is that it would work currently, and break if i don't implement the java interop interfaces
19:09jasonjcknamalloy: ArrayList accepts Collection interface, implement that?
19:09jasonjcknArrayList ctor*
19:09amalloyexactly. that's the other 20 methods i was objecting to
19:09jasonjcknah
19:09amalloy(i think it's more like 10, and another 10 to implement List)
19:11jasonjcknmaybe worse, because one of them is Iterator<E> iterator()
19:11amalloymeh, that's not a problem
19:11amalloyif you look at my patch, i did implement all of those interfaces, in a macro
19:12dnolenthe beginnings of some proper Mori documentation, http://swannodette.github.com/mori/
19:12dnolenif anybody wants to help with logo, copy, code, examples, typography, etc, fork away.
19:12jasonjcknamalloy: ArrayList ctor might not call all those methods though, particularly the description in java doc says "Constructs a list containing the elements of the specified collection, in the order they are returned by the collection's iterator."
19:13jasonjcknamalloy: although i guess it's bad karma to not implement everything
19:13amalloydoesn't matter, the arraylist constructor is just one example
19:15jasonjcknif ISeq was a protocol that would solve this right?
19:15amalloyuhhhh. i don't see how, but i'm not willing to commit to a "no"
19:17jasonjckni need to look at code more
19:18michaelr525hiccup automatically htmlencodes everything, is there a way to tell it not to encode part of the content?
19:19lynaghkdnolen: just spent some time with my cljs profiling kit. It's now "ugly and usable" instead of "ugly and useless". Comparisons between simple/advanced mode compilation. Also buttons.
19:21dnolenlynaghk: yeah just saw that! will check it out later
19:21lynaghkdnolen: let me know if there are any features you want.
19:23lynaghkmichaelr525: I thought hiccup explicitly does NOT htmlencode everything so that you can nest
19:24lynaghkmichaelr525: https://github.com/weavejester/hiccup/issues/5
19:24michaelr525lynaghk: well probably not everything. my use case is when I create html templates for use on the client side
19:25weavejesterI've been considering having Hiccup convert into a DOM first, then have different HTML renders you could use.
19:25lynaghkmichaelr525: are you actually using hiccup, or are you using crate or c2?
19:26michaelr525i'm using noir, isn't it using hiccup?
19:26weavejesterBut as it stands, direct serializing HTML into strings is, while fast, not really compatible with encoding everything.
19:26lynaghkweavejester: would that be a continuation of the "refactor" branch where you process everything into maps of {:elem :attr :children} ?
19:26weavejesterlynaghk: Yep
19:27michaelr525i write [:a {:src "<%= url %>"}] for example and it encode the <>
19:27lynaghkweavejester: ah. Yeah. For what it's worth, I've cleaned that up a bit as part of the cljs hiccup compiler in C2
19:27michaelr525encodes
19:27weavejesterlynaghk: Could you give me a link?
19:28lynaghkweavejester: https://github.com/lynaghk/c2/blob/master/src/cljs/c2/dom.cljs#L231
19:28lynaghkit's not that much cleaner; I just replaced some of the crazier nested conditionals with core.match.
19:29lynaghkweavejester: having a DOM with some special nodes is something I've been thinking about lately as part of a knockout.js-like DOM/data binding library. Especially mapping collections to the DOM.
19:30weavejesterlynaghk: Yeah, I was meaning on using core.match too.
19:31lynaghkweavejester: it's a great library, though there are some outstanding issues with AOT compilation at the moment.
19:31jasonjcknglad i'm not the only one
19:32weavejesterHiccup's design is not that elegant currently, but it is fast. The problem is that using a DOM and renderer would slow it down, unless the renderer precompiles, too.
19:32weavejesterAlthough, I wonder in practise how important it is to render quickly. I guess it depends on the project.
19:32lynaghkweavejester: yeah.
19:34lynaghkanyway, gotta run before the pastry store closes. back later.
19:59mittchelHello everyone :)
20:00mittchelIs anyone able to help me out on a function? It's not returning what I expected :P
20:00brehaut~anyone
20:00clojurebotJust a heads up, you're more likely to get some help if you ask the question you really want the answer to, instead of "does anyone ..."
20:01brehautif its a short function just paste it in, if its larger, use a paste site
20:01mittchel@brehaut thanks for your feedback:)
20:02mittchelI'm trying to develop a function with takes an X amount of variables. It should check the type of the parameter and when it's a string it should print it out.
20:02brehautmittchel: no worries. whats the function, and what is it doing wrong?
20:02mittchel(defn returnString [& y]
20:02mittchel (if (next y)
20:02mittchel ((fn [x] (if(= (type x) "java.lang.String")(print x)))y)
20:02mittchel (recur (next y))))
20:02mittchelThat's my code, but unfortunately it's printing nothing
20:02brehautmittchel: next time its a multiliner, use refheap.com or a gist or similar
20:03amalloyy is always a list, never an item of a list
20:03seancorfield&(type "string")
20:03lazybot⇒ java.lang.String
20:03mittchel@brehaut Alright, thanks. Thought this was relatively small haha
20:03brehautone line is small ;)
20:03amalloyso it's never a string
20:03brehautalso you should probably prefer class to type
20:03mittchelhmm sounds logical
20:03brehautbut in this case string? is more useful
20:04mittchelBut I have to give you guys a heads up. I'm very new at Clojure. I'm basically a java programmer so it's much different for me haha.
20:04brehaut,(map string? ["ab" ()])
20:04clojurebot(true false)
20:04mittchelCould you use the: ? on every type?
20:04mittchelso lets say int?
20:04brehautnope
20:05brehaut,(apropos '?)
20:05clojurebot(keyword? chunked-seq? instance? sequential? fn? ...)
20:05seancorfieldand you know it'll print the string and return nil mittchel ?
20:05amalloyit's not a magical syntactic thing, it's just a normal function with a ? in the name
20:05brehauttheres also instance?
20:05brehaut,(instance? Integer 1)
20:05clojurebotfalse
20:05mittchelhm let me try to get it working with string?
20:06brehautlol
20:06seancorfield&(sort (apropos "?"))
20:06lazybotjava.lang.RuntimeException: Unable to resolve symbol: apropos in this context
20:06seancorfieldno repl in lazybot?
20:06mittchelShould I use filter for this though?
20:06Raynes&(use 'clojure.repl)
20:06lazybotjava.lang.ClassNotFoundException: clojure.repl
20:06mittchelOr is my function completely wrong haha
20:07RaynesApparentlyn ot./
20:07seancorfield,(sort (apropos "?"))
20:07clojurebot(associative? blank? bound? char? chunked-seq? ...)
20:07seancorfielddoes clojurebot limit by *print-length* ?
20:07seancorfield,*print-length
20:07clojurebot#<CompilerException java.lang.RuntimeException: Unable to resolve symbol: *print-length in this context, compiling:(NO_SOURCE_PATH:0)>
20:07seancorfield,*print-length*
20:07clojurebot5
20:08brehaut&(binding [*print-length* 60] (apropos '?))
20:08lazybotjava.lang.SecurityException: You tripped the alarm! pop-thread-bindings is bad!
20:08seancorfield,(binding [*print-length* 100] (sort (apropos "?")))
20:08clojurebot(associative? blank? bound? char? chunked-seq? ...)
20:08seancorfieldbah...
20:08amalloy,(binding [*print-length* 100] (prn (sort (apropos "?"))))
20:08clojurebot(associative? blank? bound? char? chunked-seq? class? coll? contains? counted? decimal? delay? distinct? empty? even? every? extends? false? float? fn? future-cancelled? future-done? future? identical? ifn? instance? integer? isa? keyword? list? map? neg? nil? not-any? not-every? number? odd? pos? ratio? rational? realized? reversible? satisfies? seq? sequential? set? sorted? special-symbol? strin...
20:09seancorfieldthanx amalloy
20:09mittchel@ammaloy how am I able to check if that 'list item' is indeed a string? Like I said, I'm very new at this and I can't seem to get it working with (if(string? y)) either.
20:10mittchelamalloy*
20:10mittchelsorry for that.
20:10seancorfieldyou want to test the first element of the sequence?
20:10seancorfield(if (string? (first y)) ...)
20:11mittchelWhat I want is to check for every element which is passed threw the function
20:11seancorfieldalso, watch out for the difference between ##(next ()) and ##(rest ())
20:11lazybot(next ()) ⇒ nil
20:11lazybot(rest ()) ⇒ ()
20:12brehaut,(every? string? ["a" 1])
20:12clojurebotfalse
20:12brehaut,(every? string? ["a" "b"])
20:12clojurebottrue
20:12seancorfield,(filter string? ["a" 1])
20:12clojurebot("a")
20:13mittchelArggg this is frustrating
20:13brehautmittchel: tell us what you want the function to do
20:13brehautin
20:13brehautenglish
20:13brehaut(sorry about the spurious return)
20:13mittchelNo problem I understand
20:13mittchelFact of the mather is I do understand what you mean, but I'm not able to implement it due the lack of knowledge currently
20:14seancorfieldbtw, the reason i've been absent from #clojure for a couple of weeks is due to work pressures... we migrated all our legacy sites to our new cfml / clojure platform at the end of april so i've been a tad busy with that... we added about 2.5M users to the new platform in april as we migrated sites over... so it's been... a little hectic at times :)
20:14mittchelI have to create a function which accepts X amount of variables. I have to filter the arguments which are of type String and return this as a result.
20:15seancorfieldso you're writing a filter function for string? elements of a collection
20:15mittchelYes
20:16brehaut(def only-strings (partial apply filter string?))
20:16brehautmittchel: discard any notion of camel case being good style btw
20:16seancorfieldis this for a course exercise? are there any restrictions on what functions you're allowed to use in the solution? (e.g., 4clojure doesn't let you use the function it is trying to encourage you to implement directly)
20:16mittchelIt indeed is a course exercise.. it actually gives me a hint to use: type
20:17seancorfieldso they don't want the simple, obvious solution: (defn return-strings [& args] (filter string? args))
20:17mittchelIt's for a school assignment. It's the last exercise which I'm having trouble with haha
20:17mittchelMaybe my teacher hasn't thought of the simple and obvious one
20:18seancorfield'k ... so you're on the right track with [& y] to allow return-string to accept any number of arguments
20:19mittchelActually when I compile your code seancorfield, it gives me an error.
20:19seancorfieldbut (recur (next y)) is going to call it with a single argument - the rest of the collection - rather than all the remaining arguments
20:19mittchelahh
20:19amalloyseancorfield: not true
20:19mittchelUnable to resolve symbol: return-string in this context,
20:19mittchelIt's giving me a hard time haha
20:20amalloywhen you recur to a vararg function, you pass it a collection, not a bunch of args
20:21seancorfieldamalloy: really? oh, learn something new every day... what about (defn f [x & y] ... (recur y)) ?
20:21amalloycomplains because you're passing it x and not y
20:21mittchelBut basically this should do what I want right: (defn return-strings [& args] (filter string? args))
20:23amalloyassuming that what you want is to return a list of all the strings in your arglist
20:23mittchelYea that's even better, but why does it give me a runtimeexception?
20:24amalloyi assume because you're doing something else wrong
20:24mittchelMaybe when I'm calling the function?
20:25mittchelCause I'm trying like this: (return-string ["test" 1 "test2"])
20:25seancorfieldreturn-string vs return-strings
20:26mittchelholy cow that scared me haha lol
20:26seancorfieldand you'd call it like this: (return-strings "test" 1 "test2")
20:26mittchelbrackets ([ ]) are only with collections right?
20:27seancorfieldin (return-string ["test" 1 "test2"]) you're passing a single argument, a vector...
20:27seancorfield(which is why i was confused about recur - thanx amalloy for setting me straight)
20:27mittchelAlright, thanks a lot :)
20:28mittchelIs it also possible to use this function but with type? Or do you have to work recur with that?
20:29seancorfieldsure... string? is a function that is like (fn [s] (= "java.lang.String" (type s)))
20:29brehaut,(class (type "a"))
20:29clojurebotjava.lang.Class
20:30brehautcomparing a string to a class is always going to be false
20:30seancorfieldso ##(filter (fn [s] (= "java.lang.String" (type s))) ["test" 1 "test2" 3])
20:30lazybot⇒ ()
20:30brehaut,(= (type "A") java.lang.String)
20:30clojurebottrue
20:31seancorfieldah, my bad... shouldn't be "quoted"
20:31tomoj,(filter (comp #{String} type) ["test" 1])
20:31clojurebot("test")
20:32seancorfieldshould be ##(filter (fn [s] (= java.lang.String (type s))) ["test" 1
20:32seancorfield "test2" 3])
20:32seancorfieldminus the newline :)
20:32mittchelhaha
20:32mittchelThanks
20:32seancorfield,(filter (fn [s] (= java.lang.String (type s))) ["test" 1 "two" 3.0 "four"])
20:32clojurebot("test" "two" "four")
20:33mittchelyou guys gave me a lot of solutions
20:33seancorfieldthere are often many, many ways to solve a problem in clojure :)
20:33brehautif your teacher is telling you to use type to test types, you should point out that they should be using instance? at least
20:34brehaut,(= (class {}) clojure.lang.IPersistentMap)
20:34clojurebotfalse
20:34seancorfield,(filter (fn [s] (instance? java.lang.String s)) ["testing" 1 "two" 3.0 "four"])
20:34clojurebot("testing" "two" "four")
20:34brehaut,(instance? clojure.lang.IPersistantMap {})
20:34clojurebot#<CompilerException java.lang.RuntimeException: java.lang.ClassNotFoundException: clojure.lang.IPersistantMap, compiling:(NO_SOURCE_PATH:0)>
20:34mittchelBut, this one works with vectors right: (filter (fn [s] (= java.lang.String (type s))) ["test" 1 "two" 3.0 "four"])
20:35mittchelOr collections
20:35brehaut,(instance? clojure.lang.IPersistentMap {})
20:35clojurebottrue
20:35srid`any avout users here who found a way to drop zookeeper dependency?
20:35seancorfieldany sequences... and [& y] gives you a sequence in y
20:35srid`it seems to me even using using the mongo backend will require zk for co-ordination.
20:35srid`(sorry for emacs wrapping up that message into two lines)
20:36tomojwould it be very difficult to write cljs versions of defprotocol/satisfies?/reify/extend-type/defrecord etc
20:36tomojfor exposing to js
20:36seancorfieldbtw mittchel welcome to clojure :)
20:37mittchelThanks a lot haha:D
20:37mittchelIs there any website or something else you guys would advice me to read as a real beginner
20:38gfredericksdid someone say 4clojure.com yet?
20:38seancorfieldclojure koans project is good to practice on - as well as 4clojure.com
20:39mittchelI'm really going to give that a go.
20:39mittchelI think my main problem is my way of thinking
20:40PeregrinePDXJust a warning. If you're slightly obsessive at all. Do not start a 4clojure problem if you intend to go to bed soon.
20:40PeregrinePDX4clojure robbed me of a night of sleep since i couldn't figure out a solution
20:40mittchelhaha I actually had the same problem with this one.
20:40seancorfieldmittchel: mark volkmann's tutorial is probably a good read too http://java.ociweb.com/mark/clojure/article.html
20:40mittchelMaybe it sounds bad, but I've actually been working for 2 and half hours on this particular problem
20:41PeregrinePDXYou're a newbie
20:41PeregrinePDXI'm a newbie too
20:41mittchelseancorfield. looks awesome!
20:41mittchelIs anyone using a Mac by coincidence?:P
20:41PeregrinePDXSo I won't be judging people on how long it takes them to solve a problem.
20:41seancorfieldmittchel: most clojure developers are on macs i think
20:42mittchelIs there a way to get clojure working in terminal? Since eclipse gets buggy with the repl somethimes
20:42seancorfieldmac and linux... very few windows folks...
20:42amalloyseancorfield: that's a pretty strong statement. mac or linux, yes
20:42seancorfieldleiningen is your friend
20:42seancorfieldmittchel: https://github.com/technomancy/leiningen
20:42gfredericksclojure confs don't look as macky as ruby confs
20:43mittchelThanks seancor
20:43seancorfieldleiningen manages all of your dependencies so you don't have to worry about java classpath nonsense, then you can just do: lein repl
20:43seancorfieldgfredericks: clojure/west and clojure/conj both seemed very mac-heavy to me...
20:43mittchelDoes the installation take long? otherwise I'll do it now
20:43seancorfieldleiningen is a single shell script
20:44mittchelI actually just got a macbook air so getting used to it hehe
20:44seancorfieldscroll down to "Installation", right-click on "Download the script" and save it to somewhere, make it executable and ensure it's on your path
20:45mittchelOften have the problem of having 3000 applications still running
20:45seancorfieldfolks generally put it in ~/bin/ i think
20:45mittcheldoes ~/bin exist on mac?
20:45seancorfieldi.e., /Users/{username}/bin
20:45seancorfieldyou may have to create it
20:45mittchelalright, thanks again
20:45mittchelReally appreciate your help
20:45seancorfieldwhat were you using before mac?
20:46mittchelWindows
20:46mittchelhaha
20:46mittchelDon't insult me now I said that
20:46seancorfieldso you're still getting used to Terminal and *nix? :)
20:46gfredericksC:\
20:46mittchelYep basicly.
20:46mittchelWeird thing was like I tried to ping a website
20:46mittcheland it kept on going
20:46mittchelhaha
20:46seancorfieldhey, i have win xp and win 8 in VMs on my mac!
20:47seancorfieldmostly to practice emacs / leiningen / clojure setup on so i can help others :)
20:47seancorfieldalthough i run sql server express on xp so i can test clojure.java.jdbc
20:47mittchelhaha great
20:47mittchelDoes that work good?
20:48seancorfieldit works well enough to unit test c.j.jdbc against the MS jdbc driver and the jtds driver :)
20:49seancorfieldi don't use windows for much except testing stuff when i have to
20:49mittchelmy bin folder is actually in the main folder where Users map also is
20:49seancorfieldi'm trying to avoid installing postgresql and oracle locally but at some point i'll probably do it so i can better test c.j.jdbc against those :(
20:50seancorfieldmittchel: ~/bin should be /Users/{username}/bin - that's the most common place
20:50mittchelAlright, well the bin folder I mean is actually private anyways:P
20:50mittchelseancorfield Could you give me 10% of your clojure knowlodge?
20:50seancorfieldalthough you could always put the lein script in /usr/bin - unix system bin folder
20:50mittchelhaha
20:51mittchelYou know whats giving me a hard time in mac
20:51seancorfieldlol... i'm still pretty new... i only started with clojure in 2010... went to amit rathore's "pro bootcamp" one saturday
20:51mittchelsimply creating a folder.. you have to press somewhere that is not a file lol
20:51seancorfieldbest $200 i ever spent
20:51mittchelhaha
20:52mittchel2010
20:52mittchelthat's 2 years
20:52uvtcmittchel: Although it's focus is on getting set up on GNU/Linux, you might have a look at this: <http://www.unexpected-vortices.com/clojure/brief-beginners-guide/&gt;.
20:52gfredericks2 years in clojure is new. Most of us have been doing it for 10 or 15.
20:52seancorfieldlol gfredericks !!
20:53mittchelWow
20:53seancorfieldmittchel: i mostly create folders in Terminal... mkdir somefolder
20:53mittchelYou're a liar
20:53mittchelwiki says Clojure is made in 2007
20:53mittchelhaha
20:53seancorfieldgfredericks: is teasing :)
20:53mittchelI figured haha
20:54mittchel@seancorfield: Do I need to download the source from lein too?
20:54mittchelOr just the script
20:56gfredericksmittchel: the lein script bootstraps itself
20:56mittchelalright
20:56gfredericksyou'll probably see it doing that the first time you run it
20:56mittchelbecause its a .txt file when I download it
20:57gfredericksthat is weird.
20:57seancorfieldmittchel: just rename it to 'lein'
20:57uvtcmittchel: lein is a shell script. When you first run it (`lein self-install`), it installs the rest of Leiningen.
20:57seancorfieldthen make it executable: chmod +x lein
20:58seancorfielduvtc: i believe leiningen bootstraps itself on first use - you don't even need self-install these days?
20:58uvtcseancorfield: Right.
20:58gfredericksdat true.
20:58seancorfielddownload, make executable, lein repl
20:58mittchelI actually tried this: /Users/mittchel/bin/lein
20:58mittchelThanks for the help again :P
20:58gfredericksthen at the repl run (#(% %) #(% %))
20:59gfredericksto make sure your computer is awake
20:59seancorfieldyou're so mean :)
20:59mittchelhaha
20:59seancorfieldif it's in that folder, then chmod +x ~/bin/lein should work
20:59mittchelwhen I did the chmod, then do the lein-instll command?
20:59mittchelSince it still shows as a text file
20:59seancorfieldno, just ~/bin/lein repl
21:00seancorfieldyou renamed it to just lein?
21:00uvtcmittchel: <http://www.unexpected-vortices.com/clojure/brief-beginners-guide/development-env.html#clojure-projects&gt;
21:00mittchelYes I did haha
21:00seancorfieldthen all you should need is ~/bin/lein repl
21:00seancorfieldyou'll want to put ~/bin on your path at some point for convenience
21:00uvtcmittchel: Oh, wait --- sorry, that guide is for Leiningen 2. I didn't ask which you were running (lein 1.x or 2)
21:01mittchelchmod: /Users/mittchel/bin/lein: No such file or directorya
21:01mittchelNot running anything yet haha
21:01seancorfieldit'll be lein 1.7.1 from the site
21:01mittchelWhy does it give me the chmod error:/
21:01seancorfieldmittchel: you said it was lein.txt - did you rename it?
21:02uvtcseancorfield: the "download the lein script" link at <http://leiningen.org/index.html&gt; points to lein 2.
21:02mittchelI did
21:02mittchelto just basically lein
21:02seancorfielduvtc: i pointed him at the github site
21:02seancorfieldwhich is https://raw.github.com/technomancy/leiningen/stable/bin/lein and that's 1.7.1 i believe
21:02mittchelI removed the .txt from the name
21:02uvtcseancorfield: Oh, whoops, sorry.
21:03seancorfieldmittchel: so do: ls -l ~/bin
21:03seancorfieldwhat does it show?
21:03mittcheltotal 24
21:03mittchel-rwxr-xr-x@ 1 mittchel staff 9905 13 mei 02:51 lein.txt
21:03mittchelstill lein.txt
21:03mittchelhuh
21:03seancorfielddo: mv ~/bin/lein.txt ~/bin/lein
21:03seancorfieldthen: chmod +x ~/bin/lein
21:04seancorfieldthen: ~/bin/lein repl
21:04mittchelyou are fast damn
21:04seancorfieldi've been typing on *nix systems since '79 :)
21:04mittchelIt's downloading stuff
21:04clojurebotPardon?
21:04seancorfieldmittchel: yup, it's installing itself and clojure
21:04mittchel79? May I ask what your age is?
21:05amalloyseancorfield: save yourself some typing! mv ~/bin/lein{.txt,}
21:05seancorfieldyou'll get clojure 1.2.1 by default (outside a project)
21:05seancorfieldyou can create a new project: ~/bin/lein new playground
21:05mittchelI have to start it always by: ~bin/lein repl
21:05mittchel?
21:06seancorfieldunless you add ~/bin to your path (edit .profile )
21:06gfredericksseancorfield is ##(+ (- 2012 1979) 10 (rand-int 30)) years old
21:06lazybot⇒ 70
21:07gfrederickslazybot: you'd better apologize
21:07uvtc~bin
21:07clojurebot:|
21:07amalloy10d8
21:07clojurebot48
21:07mittchelWhere can I find the .profile if I may ask the last noob question haha
21:07amalloyprobably a better guess by clojurebot
21:07seancorfielddo: ls -a
21:07seancorfieldthat will show hidden files
21:08seancorfieldand you may not have .profile yet on a brand new mac (? maybe)
21:08seancorfieldwhat text editor are you using?
21:08mittchel-a command not found haha
21:08mittchelBasic one: Texteditor
21:08seancorfieldfor the record everyone i'll be 50 on july 7th (and i already have my AARP card :p )
21:08uvtcmittchel: `cd` then `ls -a`
21:08gfredericksman clojurebot is good
21:09uvtcgfredericks: I wish I knew more of its secrets.
21:09mittchelit says
21:09mittchel. .. .DS_Store lein
21:09uvtc~age-of-universe
21:09clojurebotNo entiendo
21:09mittchelhehe
21:09gfredericks~42
21:09clojurebot42 is the answer
21:10uvtcgfredericks: I laughed out loud when I read in the log what it replied to "gentlemen"
21:10gfredericks~gentlemen
21:10clojurebotYou can't fight in here. This is the war room.
21:10seancorfieldmittchel: sounds like you're in ~/bin not your home folder
21:11mittchelYou can simply get in home by: 'cd'
21:11mittchel?
21:11mittchelin there
21:11mittchelhaha
21:11seancorfieldmittchel: the pwd command will show you where you are and, yes, cd takes you home
21:11mittchel. ..
21:11mittchelthats the output lol
21:12seancorfieldok so: open -a TextEdit .profile
21:12seancorfieldthat will fire up TextEdit to edit that file (I hope )
21:12mittchelThe file /home/.profile does not exist.
21:12mittchelwe should create it first I guess
21:12mittchel:P
21:12seancorfieldtouch .profile
21:12seancorfield:)
21:13seancorfield(that's a command)
21:13mittcheloperation not supported
21:13mittchel:P
21:13seancorfieldreally?
21:13mittchelReally haha
21:13mittchelMacBook-Air-van-Mittchel:home mittchel$ touch .profile
21:13mittcheltouch: .profile: Operation not supported
21:13amalloyseancorfield: you had him write it to /home
21:13amalloyinstead of to ~
21:13mittchelshouldn't I be in users?
21:13amalloyor at any rate he did it. dunno if you told him to
21:13mittchelin my user directory
21:14mittchelGoogle tells me this: The .profile file in MacOSX works exactly how you would expect. Simply create the .profile file in your user directory if it doesn't exist.
21:14amalloycd ~
21:14seancorfieldif he did `cd` he should be in his home folder
21:14seancorfieldmittchel: when you typed cd (on its own), where did it put you? type pwd to find out
21:15mittcheldamn I screwed
21:15mittchelYou were right
21:15mittchelit brings me to /Users/Mittchel
21:15mittchelbut I actually have a 'home' folder so I thought you meant that one
21:15uvtcmittchel: "in your user directory" means in /Users/yourname, not in /Users.
21:15mittchelIt has a .profile yay haha
21:15uvtcmittchel: and the `cd` command takes you to /Users/yourname.
21:15seancorfieldopen -a TextEdit .profile
21:16mittchelyea it's open:D
21:16mittchelBut nothing in there..
21:16seancorfieldthe fallibility of the english language
21:16seancorfieldok, add one line: export PATH=/Users/mittchel/bin;$PATH
21:16seancorfieldthen save it
21:16seancorfieldthen in Terminal: . .profile
21:16seancorfieldthat should reload it and then: which lein
21:17seancorfieldshould tell you /Users/mittchel/bin/lein
21:17uvtcseancorfield: I think that should be a colon, not a semicolon.
21:17seancorfieldyou are right - just realized - sorry
21:17mittchelMacBook-Air-van-Mittchel:~ mittchel$ . .profile
21:17mittchel-bash: /Users/mittchel/bin: is a directory
21:17mittchelhehe
21:17seancorfieldexport PATH=/Users/mittchel/bin:$PATH
21:17seancorfieldsorry
21:18mittchelMy terminal is doing some weird stuff
21:18mittchelMacBook-Air-van-Mittchel:~ mittchel$ ls -a
21:18mittchel-bash: ls: command not found
21:18mittchelwhile in my user folder:/
21:19uvtcmittchel: type: `which ls`
21:19gfredericksmittchel: are you sure you're using a computer?
21:19mittchelhahaha
21:19mittchelMacBook-Air-van-Mittchel:~ mittchel$ which ls
21:19mittchel-bash: which: command not found
21:20seancorfieldsounds like the line in .profile is messed up
21:20seancorfieldand you'll need to do: . .profile
21:20uvtcHm. I'm not a mac person ... is there some extra dev or unix packages you need to install to get the usual suite of commands?
21:20seancorfieldno
21:21gfredericksbrew install linux
21:21seancorfieldmac has a full unix system already
21:21mittchelAlright I edited .profile
21:21seancorfieldok, and: . .profile
21:21seancorfieldbut you may need to open a new Terminal window
21:21seancorfieldwe may have messed up PATH in this one :)
21:21mittchelwhen I type . .profile
21:22mittchelit just gives me a new line
21:22mittchelhaha
21:22seancorfieldyes, that's right
21:22mittchelwhich lein now right
21:22seancorfieldyup
21:22seancorfieldif it doesn't work, open a new Terminal window and try in there
21:22mittchelIt works
21:22mittchelMacBook-Air-van-Mittchel:~ mittchel$ which lein
21:22seancorfieldw00t!
21:22mittchelyay
21:22mittchellein repl works
21:23seancorfieldso now you can just type lein repl
21:23seancorfieldyay :)
21:23mittchel@seancorfield: You my man are the best!
21:23seancorfieldyou're off to the races now!
21:23mittchelhaha
21:23seancorfieldsorry it was a bumpy ride
21:23wkmanireI want to be, the very best, like noone was before.
21:23uvtcseancorfield: but why couldn't he see `ls` or `which` earlier?
21:23seancorfieldbtw, one of the great things on a mac is iChat because you can screen share with it and do remote pair programming
21:24seancorfielduvtc: because we messed up the PATH variable
21:24mittchelTo catch 'em all is my real test
21:24uvtcseancorfield: Ah.
21:24seancorfieldremote debugging via irc can be hard...
21:24mittchel@seancorfield: Didn't really was bumpy. You guided me great
21:24wkmaniremittchel: What did you install?
21:25seancorfieldwkmanire: lein shell script
21:25mittchelLeining, I heard
21:25mittchelhaha
21:25wkmanireWhich version?
21:25wkmanireI want to try to switch to 2 pretty soon.
21:25mittchelAlright. So I'll read this: http://java.ociweb.com/mark/clojure/article.html#FP and start with 4clojure.com
21:25mittchel1.7 if I'm correct
21:25seancorfieldmittchel: have you used iChat yet? if you have Gtalk account, feel free to add me: seancorfield@gmail.com
21:26seancorfieldi'll be happy to help via IM or even screen share if you want
21:26mittchel@seancorfield: haven't used yet. I'm going to add you. I would like to thank you for your help, you're very kind person :)
21:28mittchelDoesn't iChat come with the OS?
21:28mittchelIt's not on my machine lol
21:28seancorfieldany time... always happy to help folks new to clojure and new to mac
21:28seancorfieldah, on new macs it's iMessage or Messages or something
21:28mittchelAhh alright
21:29mittchelI was having doubts between iMessage and facetime
21:29mittchelbut iMessage is something you have to install yourself
21:29mittchelSo I think its facetime
21:29seancorfieldone of iChat or iMessage should be pre-installed
21:29seancorfieldi would have expected it to be in your dock already
21:30mittchelIt's still iChat on your mac?
21:30seancorfieldi'm on 10.7.3 and have iChat
21:31mittchelWell
21:31mittcheliMessage allows you to send plain text messages to an Apple device
21:31mittchelI guess its facetime
21:31seancorfieldyup, i haven't installed the beta of that yet
21:31seancorfieldwhich mac os are you on?
21:32mittchelMac OS X Lion 10.7.3 (11D50d)
21:32seancorfield(click on the apple, top left, select About this Mac...)
21:32mittchelThats the only thing I do know
21:32mittchelhaha
21:32seancorfieldyou should have iChat then
21:32seancorfieldin the Applications folder
21:33mittchelFor some reason I don't have it
21:33mittchelmaybe I deleted it? don't remember lol
21:33mittchelI wouldn't delete an application, but you never know
21:33seancorfieldout of curiosity, in a Terminal, type: open -a iChat
21:34wkmanireI'm not sure how to write unit tests for my seesaw based UI.
21:34wkmanireMy code is only instantiating swing objects and showing them.
21:35mittchelit opens iMessage huh
21:35wkmanireAll of the work is being done by seesaw.
21:35mittchelbut that's not correct.. it can't be. cause I message is for plain text like to mobile phones and such
21:35wkmanireIs there any value in testing that the UI layer laying itself out correctly?
21:35seancorfieldmittchel: it works for AIM, Yahoo! and Gtalk as well
21:36ibdknoxwkmanire: it's really valuable to unit test pure UI code
21:36seancorfieldyou just have to add those accounts
21:36ibdknoxwkmanire: correction: rarely
21:36mittchelIt shows your google talk account
21:36mittchelbut as soon as I'm trying to send the message it says user doesn't have imessage
21:36mittchelhaha
21:36wkmanireibdknox: You confused me.
21:36seancorfieldi suppose i should upgrade then :)
21:37ibdknoxwkmanire: sorry. It is rarely useful to unit test pure UI code
21:37ibdknoxit's usually a lot of work, frail, and doesn't actually prove things are doing what you expect
21:37mittchelAre you able to share screen with iChat?
21:37wkmanireibdknox: So I won't worry about it and I'll make sure there isn't anything in there that is test worthy.
21:38wkmanireibdknox: Thank you.
21:38xeqiyeah, unit testing UI isn't worth the effort
21:38seancorfieldyes, iChat does screen sharing... so I'm sure iMessage does too since it's the upgrade
21:38xeqiintegration testing can be sometimes
21:38seancorfieldthe iMessage installer wants me to reboot so i'll be back in a bit
21:39mittchelSure no problem
21:39gfredericksboot and reboot were in a boat. boot fell out. who was left?
21:40wkmaniregfredericks: re?
21:40gfredericks(def re? (partial instance? java.util.regex.Pattern))
21:40ibdknoxlol
21:44wkmanireI just listened to a heavy metal version of Trolololol on youtube.
21:44wkmanireI was expecting to turn it off after a few seconds.
21:44wkmanireIt ended up exceding all expectations.
21:44uvtcIs it too far off-topic to ask git questions in here?
21:45amalloywkmanire: some good advice i got is to make sure your app can run in CLI mode or GUI mode. then it's easy to write functionality tests against the CLI version, and you can't accidentally entangle business logic with the shiny buttons
21:45wkmanireamalloy: Is that always practical?
21:45wkmanireamalloy: In this particular case it is.
21:45amalloyis unit testing always practical?
21:46wkmanireI don't know the answer to that question actually.
21:46mittchelWhat's the best way for me to build this: for (int i = 0; i < 10; i += 2) in Clojure using Loop
21:47gfredericksmittchel: why do you want to use loop?
21:47mittchelI actually have to
21:47gfredericksis this some 4clojure thing?
21:47mittchelNo it's actually something for school
21:47mittchela small part of an assignment
21:47gfredericksclojure is in school?
21:48mittchelYe they wanted to bring in some functional programming
21:48gfredericksI saw clojure in B&N today for the first time
21:48gfredericksmittchel: and they wanted you to use clojure.core/loop specifically?
21:48mittchelYep they do
21:48mittchelhaha
21:49amalloy&#'clojure.core/loop
21:49lazybot⇒ #'clojure.core/loop
21:49mittchelThey wanted me to transform some java code into clojure.. and I had to use loop for that part
21:49gfredericksamalloy: I realized that false fact because you were in my head telling me it. Your communications are conflicting.
21:49amalloyi'll work on it
21:49gfredericksnow wtf is that a var. isn't it a special form?
21:49gfredericks&#"clojure.core/if
21:49lazybotjava.lang.RuntimeException: EOF while reading regex
21:50gfredericks&#'clojure.core/if
21:50lazybotjava.lang.ClassNotFoundException: clojure.core
21:50amalloyit's a macro
21:51gfredericksmittchel: (loop [i 0] (when (< i 10) (do stuff) (recur (+ 2 i)))); though personally I would (doseq [i (range 0 10 2)] ...)
21:51amalloyon top of loop*
21:51gfredericksbah.
21:51mittchelAhh
21:52mittchelElementary is even easier than Easy right haha
21:53mittchelNow he's asking me to write my own predicate: not-zero?
21:53mittchelTime to go to bed
21:53mittchelhaha
21:54mittchelProblem is that he does;t provide any documentation on that whatsoever
21:55gfredericks(def not-zero? (complement zero?))
21:57mittchellol
21:57mittchelI was actually writing an if
21:58mittchelto check if(=( 0)
21:59mittchelhow can you 'return false' in clojure?
22:00mittchelLike lets say (if(= x 0) x) I want it to return 0
22:00mittcheluhh true
22:01gfredericks(if (= x 0) true false)?
22:01gfredericksor you probably want the other way around
22:01seancorfieldfalse is false, so is nil, true is true (so is anything that isn't nil or false)
22:01seancorfieldmittchel: i'm upgraded to iMessage btw
22:02mittchelseancorfield: let me try to reach you:P
22:02mittchel(defn not-zeroo? [x]
22:02mittchel (if(>= x 0)
22:02mittchel true false))
22:02mittchelWhy does it give me true when I give it a number of 5 and 0
22:03mittcheloh nevermind
22:03seancorfieldx >= 0
22:03mittchelyeap
22:03mittchelI noticed
22:03mittchelits getting late
22:03mittchelhaha
22:03seancorfield(def non-zero? (complement zero?)) ;; :)
22:03mittchelYea gfredericks told me that one too
22:03mittchelIt's so frustrating that I'm always thinking the hard way
22:04mittchelSean Corfield is not available for iMessage
22:04mittchelhaha
22:04mittchelTry to contact me: mittchel@gmail.com
22:04PeregrinePDXAt some point I am sure I will learn to type clojure-jack-in instead of clojure-hack-in
22:05mittchelSo basically complement does everything in the opposite way?
22:06mittchelseancorfield: is it working when you try to message me?
22:06amalloyPeregrinePDX: just bind it to C-c j
22:07gfredericksyeah complement takes a predicate (a true/false function) and returns a new function that does the opposite
22:07gfrederickscomplement is for opposite day
22:07mittchelDoes it only take predicates?
22:07mittchelso (complement odd?) gives you even numers
22:07mittchelWell, a check for even numbers
22:08seancorfieldmittchel: i added you - probably waiting for accept on the request?
22:08mittchelAre you using iMessage? (blue cloud logo)
22:08gfredericksmittchel: any function can be thought of as a predicate, due to the fuzzy definitions of truthy and falsy
22:10gfredericksI guess what I mean is that 'predicate' is a loose concept
22:10PeregrinePDXamalloy, hmm that's a good idea. Goes to figure out how to bind.
22:10mittchelgfredericks: thanks
22:10mittchelseancorfield: This is really weird, I don't think you need to accept people
22:12seancorfieldoh, i'm used to ichat...
22:13seancorfieldit said i couldn't send to you
22:14mittchel@seancorfield: You've got a google talk message.
22:14mittchel@seancorfield: you added me on jabber too
22:15technomancyPeregrinePDX: and read a few William Gibson novels while you're at it
22:16technomancystarting with Neuromancer, naturally
22:18PeregrinePDXYay I figured out how to bind the key
22:19wkmanireIsn't there function that shows all of the members of Java object instances?
22:21wkmanireThat was a crappy question. I remember reading somewhere in the seesaw documentation that you can list which functions will work on a swing object.
22:21wkmanireGonna go look again.
22:21amalloyclojure.reflect/reflect?
22:22clojurebotvimclojure is http://kotka.de/projects/clojure/vimclojure.html
22:22amalloythanks clojurebot
22:25technomancyis it just me, or is lein-cljsbuild's recommended new format needlessly verbose and boilerplatey for basic use?
22:25technomancycan't we just have good defaults?
22:25wkmanireI haven't tried to use it yet.
22:32xeqi&(vec (.getMethods :k))
22:32lazybotjava.lang.IllegalArgumentException: No matching field found: getMethods for class clojure.lang.Keyword
22:33Raynesgf3: This is going to be the weirdest thing you ever hear me saying, but: cljbin seems to be down.
22:33gfredericksoptimizing a nontrivial core.logic program is a fascinating process.
22:34wkmanireI have a list of maps, I want to pull one key from each item in the list into a seperate list. Should I use 'for' for that?
22:35amalloyor map. up to you
22:36wkmanireamalloy: I used map, thanks.
22:58gfrederickswkmanire: map is easier when your keys are keywords, since the key itself can be your map fn
22:58wkmaniregfredericks: That is what I did. thank you
22:59wkmaniregfredericks: Although it turned out to be the wrong way to do it.
22:59gfredericksdrat.
22:59wkmanireit* being what I'm tryin to do.
22:59wkmanireI want to bind a list of maps to a listbox.
23:00wkmanireI need to provider a renderer to the listbox I think.
23:01wkmaniregfredericks: (seesaw.core/config! l :model ads :renderer :name) but this isn't working.
23:04wkmaniregfredericks: ads is a list of maps that contain addresses. I want to bind it as the model of a listbox from seesaw.core. I want it to show the name from each map.
23:05wkmanireI've tried a couple of things, I'm sure I'll figure it out here soon.
23:20xeqiwkmanire: have you seen https://github.com/daveray/seesaw/blob/master/test/seesaw/test/examples/cell_renderers.clj?
23:21_KY_How do I find the source code for function "assoc-in"?
23:21amalloy~def assoc-in
23:22_KY_Nice=)
23:22technomancywhat's thiiiiiis? https://github.com/technomancy/lein-gnome
23:23amalloytechnomancy: it's in your github account! if you don't know what it is, someone may have hacked you!!!
23:55geoffeg_cfor clojurescript templating, is hiccups still a good choice? has something that's still under active development come along? https://github.com/teropa/hiccups
23:56gfredericksgeoffeg_c: crate?
23:57geoffeg_cjesus, this ibdknox guy
23:57tomojthere is enfocus, but I haven't used it
23:59bsteuberibdknox: congrats :) so nice to see this come to reality..
23:59PeregrinePDXGah stoopid bees