0:01 thirdy: Denommus, thanx. I guess I could say that (if) is less reluctant than (true?)
0:10 TEttinger3: ,morton
0:10 clojurebot: (0 1 4 5 16 ...)
0:10 TEttinger3: heyyy you can def stuff in privmsg
0:10 that's the set of 256 magic numbers (morton numbers) used for interposing numbers
0:10 (bitwise)
0:16 ,(Integer/toString (interself 2r10101) 2)
0:16 clojurebot: "1100110011"
0:31 ryanflorence: taking my first spin with clojure, how do I get (trim " foo ") to work? I'm sure I need to require something but I don't know what.
0:32 (require '[clojure.string]) doesn't seem to work like it does for other things (I'm using lein if that matters)
0:32 tim__: ryanflorence: you need to require clojure.string
0:33 and if you require it like you just said, you need to call it as clojure.string/trim
0:33 ryanflorence: tim__: forgive my ignorance, how can I import it w/o :as ?
0:33 tim__: or do (require [clojure.string :as string]) and then do string/trim
0:34 ryanflorence: is there a non-namespaced way to import it or is that bad practice?
0:34 ToBeReplaced: (require [clojure.string :refer [trim]])
0:35 tim__: ryanflorence: depends on your view, I tend to use :refer [trim] when I only want one function and when it's clear where trim is from.
0:35 ryanflorence: thanks ToBeReplaced and tim__: is there a nice guide somewhere on all the ways you can require things?
0:36 ToBeReplaced: see clojure-style-guide on github -- should have a complete example
0:37 ryanflorence: thanks
0:37 TEttinger3: I am only starting to heavily use (require 'naaaaamespace :reload) recently
0:37 it's so useful
0:37 tim__: ryanflorence: this may also help http://
0:37 TEttinger3: although admittedly less so when you are debugging an infinite-loop bug, which I was
1:06 bitemyapp: alexbaranosky: hello hello :)
1:08 arrdem: bitemyapp: well I can now assemble instructions correctly assuming that all immediate values are #(< %1 1024)
1:09 now I need to start writing tests in my shiny new assembler :D
1:09 bitemyapp: arrdem: :D
1:09 arrdem: bitemyapp: got time for a game? I'm about done for the night...
1:09 bitemyapp: arrdem: doters?
1:09 YISSSSSSS
1:09 rebootan
1:09 arrdem: lel
3:20 TEttinger3: ok, this is breaking my mind. how do I print the values in a transient map...
3:21 for vectors, it's easy, you get a count, doseq with nth on each value of the loop iter
3:21 but nth doesn't work for maps
3:23 this is part of a weird bug thing I am trying to fix in my code, for some reason a transient map is getting normal values assoc!ed onto it... then stopping once the count hits 8
3:23 no matter what other stuff goes on, the map never gets over 8 values
3:28 http://
3:40 Morgawr: TEttinger3: I don't think you can print a transient map, you need to make it persistent before accessing individual values inside it
3:41 but I haven't worked with transients a lot so idk
3:41 TEttinger3: Morgawr, I figured out part of it
3:41 I am not using the return value, ugh
3:44 pyrtsa: Looks like there just isn't a public method for listing the keys (nor the kv-pairs) contained in a transient map.
4:11 TEttinger3: fixed it, used an atom, it works great and is only slightly slower
4:17 pyrtsa: Atoms are great for that kind of usage. And in case you don't have to look something up at every iteration, you can even benefit from the internal use of transients by using e.g. (into my-map ...) instead of repeatedly assoc'ing.
4:18 (I mean, in case you don't need to view the contents of the map between every subsequent assoc's.)
4:19 TEttinger3: https://
4:23 pyrtsa: I see. Nice.
4:51 philed: bitemyapp: What was the reference to ad-hoc polymorphism for?
4:57 hiredman: TEttinger3: transients that start acting wierd once you get to a certain number values means you shouldn't be using transients (you haven't read / understood the docs)
4:57 you are bashing the transient in place
5:01 amalloy: TEttinger3: there's a reason the version i posted last night didn't use any transients - you don't need one, and keep trying to treat it as if it were an atom
5:12 arrdem: TEttinger3: ballin! what graphics system are you using?
5:15 pepijndevos: Is there a ordered data structure in clojure that allows fast deletes?
5:21 I remember seeing some table of time complexities somewhere...
5:23 t3soro: a hash map should be O(1)
5:24 raek: pepijndevos: finger trees, perhaps?
5:24 arrdem: t3soro: beware the constant....
5:24 pepijndevos: t3soro a hash is not ordered
5:24 TEttinger3: arrdem, libgdx, which uses lwjgl
5:24 raek: or maybe a ordered map with the right comparison operation
5:25 pepijndevos: hmmm
5:25 arrdem: pepijndevos: hashes are ordered by the hash value. what are you on about?
5:25 raek: pepijndevos: you want to maintain the order in which the elements were inserted?
5:26 pepijndevos: raek yea
5:26 TEttinger3: ordered, it's a lib
5:27 https://
5:29 raek: maybe this is cheating, but you could create a new filtered data structure like this: (into (empty x) (filter pred x))
5:30 no structure is shared this way, though
5:31 TEttinger3: ,(empty {:a [1 2 3]})
5:31 clojurebot: {}
5:32 t3soro: sorry it's late of course hash maps aren't sorted. you could try using a red-black binary search tree.
5:32 pepijndevos: yea, they look interesting
5:34 TEttinger3: the ordered data structures are insertion-ordered
5:34 there's of course ##(doc sorted-set-by)
5:34 lazybot isn't here
5:34 (doc sorted-set)
5:34 clojurebot: "([& keys]); Returns a new sorted set with supplied keys. Any equal keys are handled as if by repeated uses of conj."
5:35 TEttinger3: ,(doc sorted-map) ; as well
5:35 clojurebot: "([& keyvals]); keyval => key val Returns a new sorted map with supplied mappings. If any keys are equal, they are handled as if by repeated uses of assoc."
5:45 amalloy: pepijndevos, TEttinger3: the collections in ordered don't have very good deletion performance
5:45 i remember i had an implementation that was ln(n) deletion, but it slowed down all the much more common operations by a lot
5:46 pepijndevos: I see. good to know. would be usefull to put those in the readme
5:47 amalloy: well, it's kinda complicated. i guess what i said isn't quite right
5:48 the implementation of deletion involves leaving "blanks" in the collection, which will eventually eat up space and degrade performance if you delete many things from a collection
5:48 but the deletion operation itself is fast
5:49 and (flatland.ordered.common/compact m) will reclaim all that wasted space, at the expense of rebuilding the collection
5:52 lnostdal: how does one go about debugging `lein install` getting stuck in a 100% cpu loop? .. `lein repl` etc. works fine
5:52 TEttinger3: lnostdal, this just happened to me
5:52 err, install?
5:53 lnostdal, could it be a jar signing thing?
5:54 and it asks for a key passphrase in some hidden window so it can sign the jar, but the window isn't visible...
5:54 lnostdal: TEttinger3: no idea .. there's no output .. it just sits there x)
5:54 TEttinger3: that's happened to me
5:54 can you do the steps before install?
5:54 deps, compile, jar
5:55 lnostdal: hm, yup; all except jar
5:55 TEttinger3: do you have any folders named META_INF in your project?
5:56 or other jars as resources?
5:57 lnostdal: nope
5:59 TEttinger3: lnostdal, is this on github or something?
5:59 so I could see for myself
6:00 lnostdal: no, but maybe i could create a test case .. i'll try that
6:07 TEttinger3: I need to go to bed
6:08 lnostdal: oh, ffs. .. some idiot has created a circular symlink
7:40 dongchao: Has somebody trying to contribute to Storm now?
9:13 recursor94: Is there a simple way to create a resizeable table in compojure with input fields, and to get the id and value of every column of that table?
9:16 jcidaho: hi is anyone using Avout in anger in here?
9:22 devn: heh, in what sense?
9:22 jcidaho: in a large application that gets pretty well hammered
9:23 we're using it to store our config data, but we're seeing some kind of recursive loop kicking off
9:23 mullr: recursor94: Your question seems strange... do you mean the ring routing library?
9:24 jcidaho: i.e. http://
9:30 lgs32a: I just watched RH presenting Harmonikit and noticed he is using a naked inferior-lisp setup
9:31 mikerod: no clothes on it at all?
9:31 lgs32a: no nrepl at least
9:32 anildigital: help needed... I have two files in two different buffers in emacs.. 1. bob.clj 2. bob_test.clj .. I am able to compile bob.clj with C-c k
9:32 but when I try to compile bob_test.clj .. it's not able to find bob.clj
9:32 halp
9:32 lgs32a: how is it supposed to find bob.clj
9:33 what are you telling it to do?
9:33 gdev: anildigital, are you requiring it in your bob_test ns?
9:33 anildigital: (load-file "bob.clj")
9:33 yes
9:33 like above.. but somehow it's not able to find that file
9:33 mikerod: anildigital: are you using an nrepl server?
9:33 anildigital: mikerod: I have done cider-jack-in
9:34 and ran C-c k in bob.clj that worked
9:34 yes server is running in a port
9:34 mikerod: hmm, I wonder if jacking in on a "main" module file is causing the classpath to not be loaded with the "test" files
9:34 oh, never mind, I misread
9:35 your test file can't find your main file
9:35 anildigital: I just killed nrepl server .. opened bob.clj and did cider-jack-in .. I think now it found the file
9:36 seriously_random: is it possible to replace concat (conj '()? http://
9:36 mikerod: I'd think if you did the cider-jack-in with the test_bob.clj in the current buffer, it'd work
9:37 anildigital: mikerod: I did that with bob.clj and it worked
9:38 lumafi: i don't understand why you even want to conj onto an empty list
9:38 you can just put whatever you're conjing into a vector literal
9:38 mikerod: anildigital: that'd make sense too
9:39 anildigital: mikerod: thanks :)
9:39 mikerod: not sure what was your issue before though :)
9:39 hah no problem
9:39 seriously_random: lumafi, how?
9:39 lumafi: and have basically the same result (except having a vector instead of a list)
9:39 mikerod: seriously_random: what are you wanting to accomplish? there
9:39 seriously_random: mikerod, I want to replace concat (conj part
9:40 lumafi: instead of (conj ...), [(row-values ...)]
9:40 necronian: Does anyone have a recommendation on a good resource for learning about designing dsls?
9:40 mikerod: (map (fn [x] (row-values board [x 0])) (range 9))
9:41 lumafi: and if you make acc a vector, you can conj to its end directly: (conj acc (row-values ...))
9:41 seriously_random: lumafi, thanks
9:41 gdev: necronian, there's a whole book on it
9:41 mikerod: seriously_random: If you just want to map the `row-values` function across each number of (range 9), I'd think to just use map
9:42 necronian: gdev: I would assume there are many books on it... do you have a recommended title?
9:42 mikerod: `reduce` with an accumulator just sounds like you are doing the work more manually
9:43 seriously_random: mikerod, makes sense
9:44 lumafi: I'd use for rather than map with an anonymous function, but that's a matter of taste
9:44 gdev: necronian, yeah it's literally called Clojure for Domain-specific languages
9:44 mikerod: seriously_random: (map (fn [x] (row-values board [x 0])) (range 9)) ; if you missed it. I tend to avoid reduce if your doing something like a filter, with no transformations on the sequence data, or use map if you are mapping a transformation across *all* items in the sequence.
9:45 lumafi: I agree, I like anonymous fn for a case like this too
9:45 seriously_random: mikerod, no I didn't miss it
9:45 necronian: gdev: Welllll okay then I guess I'll go buy that....
9:45 gdev: necronian, wait, it only has a 1-star review on Amazon
9:46 anildigital: okay now clojure shows me {:type :summary, :pass 10, :test 14, :error 4, :fail 0}
9:46 but how can I know what those 4 errors are ..
9:47 mikerod: M-x clojure-test-show-result perhaps?
9:47 not sure how you are running the tests
9:47 necronian: gdev: I'm not a fan of packt really, but it's on sale for $5 right now. So it can't hurt.
9:50 gdev: On second thought, after looking at the table of contents it really looks more like a book on learning clojure.
9:50 gdev: necronian, yeah I'm skimming it now since I have access to it on Safari books. looks like the book assumes no knowledge of Clojure and so it teaches Clojure and DSLs which I don't like
9:50 that's like the worst place for a beginner to start
9:53 necronian, okay, so when you asked for a "good resource" I should've just said github
9:56 necronian, a good example of a DSL in Clojure is Korma https://
9:56 necronian: gdev: Yea I was looking at the source for korma, but who ever invented the code format I want to output to was on crack. So it's going to be more complicated I think, and probably beyond my abilities at the moment.
9:57 gdev: necronian, also check out Jim Duey's talk on it http://
9:58 necronian: gdev: Thanks a lot, very helpful
9:59 gdev: necronian, no problem, good luck =)
10:04 algernon, are you still interested in working on Marginalia?
10:05 algernon: gdev: yes. lacking time at the moment, though :(
10:05 gdev: algernon, ha, I know what you mean =)
10:08 rukor: Hi does any one know of existing clients for fressian in c++ and/or python
10:09 gdev: algernon, if you get some time later this month or in February, ping me if you want to spend a little bit of that free time working on it
10:10 algernon: gdev: okay
10:11 gdev: algernon, I'm still trying to get intimate with all the details of the library so hopefully I'll have a plan by that time =)
10:14 dnolen: pushed out Om 0.1.0 to Clojars, have fun
10:14 hyPiRion: (inc dnolen) ;; awesome
10:14 gdev: (inc dnolen)
10:14 hyPiRion: ah, lazybot is dead
10:14 Raynes: ^
10:43 gfredericks: long live lazybot?
11:46 TimMc: hyPiRion: Swearjurescript, have you looked into it?
11:49 gfredericks: seancorfield: ping
11:57 seancorfield: unping, just noticed master is fixed
12:02 hyPiRion: TimMc: no
12:04 TimMc: A quick review of the syntax didn't show me anything particularly different.
12:04 hyPiRion: Well, the compilation phase could be improved
12:05 TimMc: Coffeescript uses `backticks` to delimit raw JS, but CLJS uses js* or something.
12:06 hyPiRion: I mean, the output should clearly be in JS without alphanumerics
12:06 http://
12:07 bbloom: TimMc: shh no, CLJS doesn't use anything. that's a secret :-P
12:07 TimMc: oops
12:07 seancorfield: gfredericks: master of what?
12:08 TimMc: hyPiRion: Oh wait, we can get strings!
12:09 hyPiRion: (`[~@(+ + +)] (+)) ;= "f"
12:09 I'll leave you to it.
12:10 hyPiRion: TimMc: with Swearjurescript?
12:10 Finally a good reason to learn Clojurescript I guess
12:10 jonasen: Bronsa: https://
12:11 Bronsa: Am I using uniquify-locals wrong?
12:11 gfredericks: seancorfield: java.jdbc -- query calls vec when :as-arrays? is true (in old versions) for no reason I could figure out
12:11 it was precluding lazy processing
12:12 the req is A) process lazily B) maintain column order
12:20 Bronsa: jonasen: doesn't look like so, might be a bug. I'm looking into that
12:20 jcromartie: How do you manage the shared stuff between Enlive HTML templates. Like, if you have a common design for a bunch of fairly different pages that share the same basic markup, how do you avoid duplicating everything among the different actual .html files.
12:22 indigo: jcromartie: https://
12:22 Bronsa: jonasen: oh, you're using prewalk on uniquify-locals, you don't need to do that.
12:22 indigo: Specifically the part on template inheritance
12:22 Bronsa: jonasen: (uniquify-locals ast) will do what you want.
12:22 clojurebot: Excuse me?
12:24 jcromartie: indigo: yes, that covers it from the Clojure code perspective, but I'm just looking for suggestions for keeping my actual .html files clean
12:24 I guess I could use a single html file with different <sections> or something
12:25 but otherwise there is a lot of duplicated "boilerplate" in the HTML between the different pages that the designer maintains
12:25 indigo: Ah, yeah
12:25 jonasen: Bronsa: ok, dropping the prewalk and it works now! Thanks!
12:26 jcromartie: I don't think it's a dealbreaker or anything :)
12:26 indigo: <sections> are decent for this kind of organization ;P
12:26 jcromartie: yes
12:35 bitemyapp: bbloom: started my day off right, trolled Minsky and Harper in one go.
12:37 bbloom: bitemyapp: ?
12:38 bitemyapp: bbloom: ML people.
12:38 the latter is the intelligent but cranky homotopy guy.
12:39 bbloom: bitemyapp: i know who they are
12:39 bitemyapp: complains about Haskell a lot for some reason.
12:39 bbloom: well, they started it.
12:39 bbloom: but they seem to have ignored you...
12:39 not a very effective trolling
12:39 also... why?
12:42 bitemyapp: bbloom: narcissism of small differences is silly
12:42 arrdem: even the trees in Australia: http://
12:45 gfredericks: what are the implications of trying to get metadata on numbers in clj-jvm via ##(+ 32 (proxy [java.lang.Number] [] (longValue [] 10)))
12:46 ,(+ 32 (proxy [java.lang.Number] [] (longValue [] 10)))
12:46 clojurebot: 42
12:46 gfredericks: just curious
12:47 indigo: bitemyapp: How's it going in Haskell land
12:47 TimMc: Oh huh. This one reference PDF implies that with CLJS, macros can't be recursive.
12:47 bitemyapp: indigo: lazily.
12:47 indigo: :P
12:47 TimMc: Or... no, that's not quite what it implies.
12:47 hyPiRion: TimMc: huh? That would make no sense
12:47 TimMc: http://
12:47 indigo: Clearly you have seen the light of proper static typing and nothing else will compare ;)
12:48 TimMc: Bottom left: Macros must emit clojurescript.
12:48 It's an odd statement, and perhaps I was reading too much into it.
12:48 bitemyapp: indigo: I continue to drag souls to the other side of the fence with me as I go.
12:48 hyPiRion: TimMc: Yeah, that's a very odd statement
12:49 bitemyapp: indigo: I gave a brief presentation and an extended tutorial following that on some Haskell last night at the Clojure meetup.
12:49 indigo: Heh
12:50 bitemyapp: indigo: one of my project ideas is making a clean Fay wrapper for ReactJS, my only hesitation is that I kinda wanted to wait for typeclasses.
12:51 indigo: Sounds like a fun project
12:52 bitemyapp: could be.
12:52 indigo: I read a bunch of benchmarks on how awesome React is
12:55 jcromartie: wow, so Enlive is a better Hiccup than Hiccup
12:56 bitemyapp: jcromartie: refheap plz
12:58 jcromartie: bitemyapp: wat
12:58 bbloom: jcromartie: they are different things for different purposes...
12:58 arrdem: bitemyapp: that's awesome
13:01 bitemyapp: what's a dynamic language?
13:01 arrdem: clojurebot: assembler |is| a dynamic language
13:01 clojurebot: Ik begrijp
13:02 arrdem: bitemyapp: it's ints all the way down man...
13:02 * bitemyapp snorts
13:02 bitemyapp: arrdem: but seriously, what is "dynamic language" supposed to mean?
13:02 TimMc: Self-modifying? :-P
13:02 arrdem: bitemyapp: runtime dispatch of control
13:02 bitemyapp: optional dynamic code creation and execution
13:03 * arrdem realizes he's feeding
13:03 hyPiRion: (def dynamic? (complement static?))
13:03 arrdem: hyPiRion: see that doesn't make any sense...
13:04 also when on earth is (complement) ever useful?
13:04 seems like it's a (not) that got too big for its boots....
13:04 bitemyapp: arrdem: so Haskell is a dynamic language?
13:04 TimMc: When you want to write point-less code.
13:04 bitemyapp: good to know.
13:05 jcromartie: bbloom: but the net.cgrand.enlive-html/html function does what Hiccup does
13:05 but safely
13:05 (i.e. it escapes loose HTML entities)
13:05 so why use Hiccup?
13:07 bbloom: jcromartie: my comment was b/c i had no way of knowing enlive had grown to essentially essentially include hiccup: https://
13:07 TimMc: jcromartie: I have no idea. (Unless you use xeqi's wrapper on hiccup, which makes it safe.)
13:08 gdev: PLT trolling is so 2013
13:08 jcromartie: Hiccup still has useful functions for making things like forms
13:09 but the final rendering should probably be done with Enlive :P
13:09 bitemyapp: gdev: too right.
13:11 TimMc: bitemyapp: Piet is not dynamic. :-(
13:11 !
13:12 Piet should gain some turtle-graphics primitives so that it can modify instruction memory!
13:15 bitemyapp: TimMc: Piet is the ultimate quiche eater's programming language.
13:17 TimMc: I'm not sure what a quiche eater is, but if it results in more Piet programs, I'm all for it.
13:18 http://
13:18 SegFaultAX: Quiche is delicious.
13:18 TimMc: "Naturally, a more accurate value can be obtained by using a bigger program."
13:20 arrdem: ah esolangs...
13:20 in programming languages this last semester some classmates built an extended brainfuck with multiple concurrent threads, a single shared global memory and synchronization instructions 0.o
13:21 bbloom: arrdem: that. is. awesome.
13:21 but i've always been partial to befunge
13:21 hyPiRion: that sounds more like an extended Swearjure, really
13:21 bbloom: i wrote a befunge interpreter the first year or two i was learning to code. it was a transformative experience for me :-)
13:22 fabioportieri: hi guys
13:22 hyPiRion: You just need to provide swearjurian primitives for those things
13:22 fabioportieri: it's me, or clojure syntax suck asses?
13:22 bitemyapp: hyPiRion: isn't Swearjure a pure lambda calculus?
13:22 arrdem: hyPiRion: I thought you hadn't invented defs yet...
13:23 bitemyapp: hyPiRion: if so, I have a suggestion to make to Yaron Minsky about pure functional languages.
13:23 * arrdem looks fabioportieri up and down
13:23 bbloom: arrdem: please ignore the trolls
13:23 arrdem: bbloom: glad I wasn't the only person with that gut reaction.
13:23 bitemyapp: fabioportieri: it's definitely you that sucks asses.
13:23 bbloom: bitemyapp: that's not helping
13:24 arrdem: M-x zen-of-clojure
13:24 fabioportieri: i'll admit i come here to troll if you guys admit the syntax is horrendous.. wtf is all the js closure syntax-like?
13:24 bitemyapp: bbloom: I like hoisting the black flag and slitting throats too much.
13:24 hyPiRion: bitemyapp, arrdem: well, with 5 non-alphanums stuff we can do anything
13:24 bitemyapp: fabioportieri: this is #clojure not #closure.
13:24 hyPiRion: oh so it's impure? pity.
13:24 fabioportieri: bitemyapp: pardon me but i feel like the whole idea of clojure is ripped off from js closures
13:24 jcromartie: (∆ [] (™ £ ))
13:25 indigo: Loll
13:25 hyPiRion: bitemyapp: not the pure version
13:25 bitemyapp: fabioportieri: you're not very well informed.
13:25 hyPiRion: $google hello swearjure
13:25 bitemyapp: that's about as nice as I can possibly be.
13:25 hyPiRion: oh lazybot, do I have to provide stuff myself today?
13:25 fabioportieri: bitemyapp: are you saying it's just me, that the two things are completely unrelated?
13:25 hyPiRion: https://
13:25 indigo: bitemyapp: Why do I feel that every large software project tends to move toward static type checking
13:25 bitemyapp: indigo: :D
13:26 indigo: Facebook even made a statically typed PHP
13:26 bitemyapp: indigo: refactoring tools and general sanity retention.
13:26 * indigo shudder
13:26 bitemyapp: indigo: documentation.
13:26 arrdem: http://
13:26 TimMc: bitemyapp: The lack of nested functions is a great hindrance to making Swearjure implement any of the basic calculi
13:26 SegFaultAX: bitemyapp: Stop feeding the trolls. ;)
13:26 bitemyapp: fabioportieri: you have absolutely no idea what you're talking about. I can toss you some learning material or you can somehow supercede me in being an ass in IRC. This is not a contest you want to win.
13:27 TimMc: wot. No SKI?
13:27 * arrdem isn't sure whether kicking bitemyapp or fabioportieri is the better solution
13:27 bitemyapp: SegFaultAX: feeding him bleach, give me a minute.
13:27 hyPiRion: bitemyapp: it's not a contest he can win
13:27 arrdem: ah. nice.
13:27 hyPiRion: bitemyapp: it's SKI afaik
13:27 bitemyapp: hyPiRion: your confidence is appreciated.
13:28 SegFaultAX: arrdem: Can you +o?
13:28 arrdem: SegFaultAX: unless you promoted me no.
13:29 SegFaultAX: We need technomancy.
13:29 bitemyapp: he quieted.
13:29 and I'm about to leave to talk to icky humans.
13:29 SegFaultAX: bitemyapp: Ew. Hardware interfaces?
13:30 arrdem: SegFaultAX: yeah Tech and Rich are the only people with op access here that I know of.
13:30 SegFaultAX: arrdem: I don't.
13:30 Just Rich and Phil.
13:31 * arrdem wishes he could cross-op himself from #atx2600
13:31 TimMc: bitemyapp: Feel free to try making K in Swearjure.
13:32 It's infuriating. The simplest damn function...
13:33 SegFaultAX: TimMc: Well presumably that extends to any HOF that needs to a return a function.
13:34 Since you can't do #(... #())
13:34 TimMc: Exactly.
13:36 * arrdem wanders off to look at Motorolla ISAs
13:47 seangrove: Feel like Heroku has ADD sometimes. In the middle of a push: Received disconnect from 50.19.85.132: 10: user closed connection\n fatal: The remote end hung up unexpectedly
13:53 gfredericks: clojurebot: The lack of nested functions is a great hindrance to making Swearjure implement any of the basic calculi
13:53 clojurebot: Roger.
13:54 bitemyapp: omg I am going to die. I need to do something about the insomnia.
13:54 gfredericks: (Thread/sleep :night)
13:55 llasram: bitemyapp: Exercise can help. Also, Zolpidem
13:55 bitemyapp: llasram: I exercise and I don't want to crash my car into sexy walruses.
13:55 clearly the answer is to exercise more.
13:55 llasram: Yes!
13:56 TimMc: Ambien + handcuffs
13:56 bbloom: that Flux program helped me for a little while, then i got used to it & now no effect :-P
13:56 TimMc: (Nota bene: Buying these together may put you on a watchlist.)
13:56 SegFaultAX: F.lux is the shit.
13:57 bitemyapp: llasram: you'd think HIIT and strength-training on the same day would be enough -_-'
13:58 jcromartie: sexy walruses?
13:58 rovar: TimMc: handcuffs is a bit much, you just need to buy a t-shirt with your name and address printed on it.
13:58 bitemyapp: jcromartie: never done ambien I take it?
13:58 rovar: no, I don't want video proof in the aftermath.
13:59 llasram: bitemyapp: Geez. You'd think interval training would be enough by itself, actually. I guess then go run for 10-20k?
13:59 rovar: so are you sore after HIIT and strength training ?
13:59 bitemyapp: rovar: not especially if I
13:59 TimMc: jcromartie: Search "ambien walrus"
13:59 bitemyapp: rovar: am doing my routine regularly.
13:59 jcromartie: jesus christ
13:59 bitemyapp: I'm sore if I return to my routine after a break.
13:59 jcromartie: that's a thing?
13:59 it's like that one drug that made people gamble compulsively
13:59 TimMc: jcromartie: It's a scary, scary medication.
14:00 SegFaultAX: I thought it was an alergy medication?
14:00 TimMc: Insomnia.
14:00 SegFaultAX: I've never taken it.
14:00 I'll be sure to stay away from it then.
14:00 bitemyapp: llasram: it's not just the insomnia, I need to improve my sleep quality even on my better nights.
14:00 philed: Tamazapan works for me.
14:01 jcromartie: "Pathological gambling is a rare potential complication related to treatment of Parkinson disease"
14:01 I'm a big fan of the 'zapans
14:01 TimMc: SegFaultAX: But if you do, make sure to wear a headcam set to record on movement.
14:01 philed: *Tamazepan. Or Clonazepam. One of the 'pams.
14:01 As you say jcromartie
14:02 jcromartie: marzipan
14:02 llasram: (inc jcromartie)
14:02 Aww
14:02 rovar: my sleeping problems were fixed mostly by afrin and on the days that I do exercise, naproxen sodium
14:03 bitemyapp: rovar: I think I need to adjust my diet too.
14:03 rovar: further reduce calories, fast periodically, and avoid carbs.
14:03 rovar: no caffeine after 12pm, no food within 3 hours of sleep time
14:04 you might also experiment with phenibut
14:05 bitemyapp: rovar: yeah I don't think I'll touch phenylephrine.
14:05 phenibut sounds interesting.
14:05 rovar: i'm a bit of a nootropics junkie, I've never tried phenibut, but people I trust have.
14:06 bitemyapp: rovar: I'm not a nootropics junkie, but I have some regular/go-to things I use that are fairly mild.
14:06 rovar: they took it in med school the night before exams to ensure a good night's sleep without ambien-esque effects.
14:06 bitemyapp: rovar: mostly fish oil and vitamin d. I use to take tyrosine and a bunch of other stuff.
14:06 SegFaultAX: bitemyapp: It probably has nothing to do with the quantity of tea you drink.
14:06 bitemyapp: and yes, I took the vit D in the morning.
14:06 SegFaultAX: That's entirely uncorrelated.
14:06 rovar: I regularly take a acetyl-choline stack
14:06 bitemyapp: SegFaultAX: I switched to drinking bottles of water at night.
14:06 rovar: and magnesium
14:07 ooh. magnesium l-threonate can help with sleep as well.
14:07 bitemyapp: SegFaultAX: I could probably roll back how late I drink caffeine though.
14:07 rovar: and brain function.. especially as we get older..
14:07 bitemyapp: I'm usually drinking caffeine on into the afternoon.
14:07 this is why I <3 this channel.
14:07 SegFaultAX: bitemyapp: You could also take a week of e-vacation.
14:07 arrdem: the party starts nightly at 2am :D
14:07 SegFaultAX: Just don't get on your computer for a week or so.
14:08 bitemyapp: SegFaultAX: does that dis-include my Kindle?
14:08 SegFaultAX: bitemyapp: Yes. Nature only.
14:08 bitemyapp: fuck me.
14:08 I'd have to buy physical books to survive.
14:08 probably on type theory.
14:08 SegFaultAX: That'll do. It'll put you right to sleep.
14:08 bitemyapp: LOL
14:11 * TimMc throws TAPL at bitemyapp "Here, I'm not using this, you take it."
14:12 * arrdem remembers that he has Haskell books to read and goes back to wrestling sign bits
14:25 devn: Anyone know what the status of core.async.lab/broadcast?
14:25 is*
14:27 justin_smith: bitemyapp: I think you could still program on punch cards, just no feeding them into the hopper until the week is up
14:28 mdrogalis-home: devn: I never used the lab, but it sounds like that would be sort of what mult is now?
14:37 SuperDuper: hi
14:38 bitemyapp: SuperDuper: super hi
14:38 SuperDuper: i'm new to irc. using emacs as the client. how to i list the users in the room?
14:39 bitemyapp: SuperDuper: try /who
14:40 SuperDuper: thanks. typing "/who #clojure" worked.
14:40 do you use emacs for your clojure coding?
14:41 devn: mdrogalis-home: they look different to me
14:41 mdrogalis-home: "broadcast returns a broadcasting write port which, when written to, writes the value to each of ports"
14:41 gfredericks: SuperDuper: cemerick reports over half of survey respondents use emacs for clojure
14:42 devn: mdrogalis-home: multiplex: "returns a multiplexing read port which, when read from, produces a value from one of ports."
14:42 mdrogalis-home: devn: Ah, I gotcha. Yeah, I'm not sure what state it's in.
14:42 devn: compare that with "creates and returns multiple of the supplied channel"
14:43 mdrogalis-home: yeah, idk either, but im wondering about it for use in overtone
14:43 mdrogalis-home: devn: I see.
14:43 SuperDuper: I'm going to learn one of the lisps. trying to decide between CL, racket, and clojure.
14:44 devn: mdrogalis-home: samaaron asked about pub/sub 1->many and core.async
14:44 mdrogalis-home: On the mailing list?
14:44 devn: yes
14:45 earlier today
14:45 i think it would be cool to move overtone over to core.async
14:45 for the event model
14:46 mdrogalis-home: For the first time ever, I was bored with a Rich Hickey talk. (I'm not musical at all :P)
14:46 Glad he had fun with his talk though.
14:47 rovar: is there a bot whom I can ask when they last saw a person in this chat?
14:49 TimMc: rovar: Not today.
14:49 koalallama: nsabot
14:49 hyPiRion: lazybot is dead =/
14:50 bitemyapp: $seen lazybot
14:50 SHOTS FIRED
14:50 Raynes: ahem.
14:51 hyPiRion: bitemyapp: I've already pinged him, but realise that he's been very sick lately
14:51 bitemyapp: hyPiRion: I saw something on twitter about that.
14:51 Raynes: get bettar please :(
14:51 Raynes: ^
14:51 I missed hyPiRion's ping, somehow.
14:51 bitemyapp: Raynes: <3 don't die
14:51 $seen lazybot
14:51 lazybot: lazybot was last seen joining on typed-clojure 1 second and 679 milliseconds ago.
14:51 Raynes: I'll try.
14:52 bitemyapp: $seen Raynes
14:52 lazybot: Raynes was last seen talking on #clojure 4 seconds and 242 milliseconds ago.
14:52 rovar: :) :)
14:53 gfredericks: $seen lazybot
14:53 lazybot: lazybot was last seen joining on typed-clojure 1 minute and 11 seconds ago.
15:03 llasram: Any one using ring to stream chunked responses have any suggestions before I submit this PR? https://
15:13 jonasen: Bronsa: It seems that uniquify-locals doesn't update the :loop-locals key in the environment. Should it?
15:26 Bronsa: jonasen: if you need it I could make a patch but in t.a.jvm I only use :loop-locals for the :tag info
15:28 jonasen: Bronsa: There are probably many more ways to do what I'm trying to do but for the approach I've chosen, yes I need it :)
15:30 Bronsa: I could try to create a patch myself if you'd like
15:41 Bronsa: jonasen: I'd accept such a patch if you're willing to make one :)
15:42 jonasen: Bronsa: the problem is, that when I reach a :recur I need to know what symbols the :exprs corresponds to. In clojurescript there is a :frame key, see e.g. here: https://
15:43 Bronsa: so maybe there's another way I can figure out the loop-locals?
15:47 Bronsa: jonasen: I see. Well, :loop-locals is basically the same as (:params frame), so yeah, extending -uniquify-locals to do the alpha-transformation to :loop-locals should do what you want
15:51 jonasen: Bronsa: I'm trying to read the code but I don't (yet) see how to update the env correctly. Any pointers?
15:57 Guest32856: Howdy. not sure what the procedure for requesting help on here is, but does anyone have experience including local (private) maven dependencies into leiningen?
15:58 justin_smith: Guest32856: does local and hosted on the same machine suffice?
15:58 joegallo: strongbad: how do you type with boxing gloves on?
15:59 justin_smith: Guest32856: or do you need it to be available over a network plus private?
15:59 Guest32856: also, is it a lein / clojure dependency or a java / mvn one?
16:00 Guest32856: justin_smith: no, i just need it to be available to the local project. The dependency is datomic
16:01 justin_smith: Guest32856: mvn install should suffice - it is a maven project right?
16:01 http://
16:01 Guest32856: justin_smith: Yes, i tried this: mvn install:install-file -DgroupId=com.datomic -DartifactId=datomic-pro -Dfile=datomic-pro-0.9.4384.jar -Dversion=0.9.4384 -Dpackaging=jar -DcreateChecksum=true -DlocalRepositoryPath=local_mvn_repo
16:01 justin_smith: you really shouldn't need all those args
16:02 did you try just "mvn install" by any chance?
16:02 if it comes with a pom that should suffice
16:02 Guest32856: justin_smith: hmm, ok, let me try that. thanks
16:02 Bronsa: jonasen: extending -uniquify-locals for :recur and mapping normalize on:loop-local s should do it
16:03 redinger: Guest32856: In your unzipped datomic directory, there should be a bin/maven-install
16:03 Just run that
16:04 jonasen: Bronsa: so then the :recur env is up-to-date (which is enough for my usecase) but all the other environments are not updated
16:04 Guest32856: redinger: if I deploy my project to a different machine, won't it lose the datomic dependency as bin/maven-install will install it outside of my project's directory ?
16:05 jonasen: Bronsa: should I instead do the mapping on :default?
16:06 justin_smith: Guest32856: yes, it needs to be installed on each machine on which you will run it
16:06 redinger: Guest32856: Yes, you would need to install it on the machine you want to run it on.
16:06 Guest32856: hmm - it's a heroku machine. I suppose that's possible?
16:07 justin_smith, redinger: thanks
16:09 arrdem: is there a nice shorthand for selecting N random elements of a sequence?
16:09 Bronsa: jonasen: not on :default, it won't get called on :binding/:local etc that way. probably the best way is to introduce uniquify-locals* that first updated the env and then -uniquify-locals && replace calls of -uniquify-locals with uniquify-locals*
16:09 justin_smith: Guest32856: a thread about datomic on heroku https://
16:09 Guest32856: justin_smith, redinger: what i'm trying to do is include the maven repository within my project directory, so when i deploy it to heroku, all the dependencies are still there. I'm not sure if this approach will work.
16:09 arrdem: or do I jhust need to pull down https://
16:09 justin_smith: arrdem: 10 distinct, or can repeats be valid?
16:10 arrdem: justin_smith: repeats are considered wastefull, but not harmful.
16:11 justin_smith: ,(repeatedly #(rand-nth (range 10000)))
16:11 clojurebot: (8619 6903 9822 2591 8960 ...)
16:11 jonasen: Bronsa: there already is a uniquify-locals* function and it gets called by all -uniquify-locals methods except :binding and :local
16:11 justin_smith: arrdem: repeatedly rand-nth should be simple enough I hope
16:11 bitemyapp: arrdem: lol @ tests.
16:11 arrdem: tickets to austin are $273 round-trip from SF.
16:11 frickin' awesome.
16:12 gfredericks: arrdem: (take n (shuffle foo)) if shuffling isn't too slow
16:12 justin_smith: arrdem: you could turn it into an iterate if you want to dissoc the selections as you go, but that is likely only useful for smaller collections
16:12 arrdem: bitemyapp: because I'm fuzzing my assembler suite I can push my assertion count all the way up to Long/MAX_VALUE :D
16:12 but then I have to wait for my computer to count that high... :/
16:12 justin_smith: oh, yeah, shuffle is a good option there
16:13 arrdem: yeah I think I'll go with shuffle.
16:13 Bronsa: jonasen: duh. well, the point still holds, pick another name :). If you have a better approach feel free to do it your way btw
16:14 bitemyapp: arrdem: I finally found two hardware project ideas I could conceivably give a fuck about.
16:15 arrdem: bitemyapp: oh?
16:16 jonasen: Bronsa: I'll create a patch. Thanks for your help!
16:16 arrdem: 1 test passes with 250,000 assertions. I consider this library fuzzed :D
16:17 bitemyapp: arrdem: I can't use Rust. pcwalton thinks Golang is a good language.
16:17 persona non grata.
16:17 arrdem: http://
16:17 arrdem: bitemyapp: when I took compilers one of my buddies at school did the first several assignments in Rust.. then said it wasn't mature enough yet :/
16:17 bitemyapp: haven'
16:18 t played with golang yet
16:18 hyPiRion: bitemyapp: Golang is amazing if you need to destroy something but isn't angry enough to utterly demolish it
16:18 arrdem: C99 - it still wins at clobbering the entire heap :D
16:20 bitemyapp: arrdem: Rust has a lot of promise, I'm just :( pcwalton likes Go.
16:20 arrdem: bitemyapp: those projects are both pretty cool!
16:21 * arrdem still kina wants to get neodyneum shards in his fingertips
16:22 bitemyapp: arrdem: I wouldn't do that :(
16:22 not worth risking nerve damage.
16:22 or infection.
16:22 arrdem: see it's the infection/rejection that worries me.
16:22 justin_smith: I imagine it would make typing difficult for a while
16:22 bitemyapp: arrdem: that too, I need you in tip-top shape for the doters.
16:22 arrdem: lololol
16:22 justin_smith: but then you would be able to use inductors instead of keyswitches, and have a keyboard with no moving parts
16:23 arrdem: justin_smith: more like I'd be able to feel charged circuits :D
16:23 justin_smith: well that too
16:23 this would just be a side effect
16:23 arrdem: technically the magnetic complement but yes
16:24 justin_smith: you could also use three antenna as a 3d mouse
16:30 rhg135: !w 75042
16:30 TimMc: bitemyapp: I remember hearing about the feelspace belt some years ago. IIRC, after the experiment was over, the participants had a harder time navigating.
16:30 rhg135: damn
16:30 wrong window
16:30 bitemyapp: TimMc: wow, ouch.
16:30 TimMc: I guess I'll pass then.
16:31 TimMc: I already have a pretty good internal compass.
16:31 justin_smith: reminds me of that recent research about dogs and magnetic orientation
16:33 TimMc: bitemyapp: Not all of them, I think. And maybe it was just a perception.
16:33 but it's very easy -- sometimes too easy -- to get used to augmentation technologies.
16:35 rovar: for instance, I've found that my human host has definitely improved my mobility
16:38 jonasen: Bronsa: patch submitted
16:40 rovar: what does 'parameter declaration missing' usually mean when trying to write macros?
16:41 I mean.. aside from the obvious, where there is clearly a param vector..
16:42 hmm.. when I change my args to ~@args it stops complaining, but I'm not sure that's right..
16:44 arrdem: rovar: paste?
16:46 justin_smith: rovar let / defn / loop / for / doseq etc. without the binding vector?
16:47 noonian: most of the time when i get that it's because i accidentally typed defn instead of def
16:47 rovar: https://
16:47 in line five, if I leave off the ~@ it gives me the error
16:48 s/fn is serializable.fn
16:48 justin_smith: does the body start with a vector of parameters?
16:48 rovar: also.. I know my verbname is wrong..
16:48 It doesn't let me get past the creation of the macro
16:48 justin_smith: if so, without the @ it would be hidden in a list, and thus missing
16:48 rovar: but yes..
16:48 arrdem: rovar: needs to be ~verbname...
16:48 rovar: ya
16:48 arrdem: rovar: and ~doc
16:49 w00t [me.arrdem/toothpick "0.1.0"] is live :D
16:49 now to 0.1.0 batbridge...
16:49 rovar: what isL?
16:50 justin_smith: ,`([a ~(list [:a :b :c] 1 2 3)] [a ~@(list [:a :b :c] 1 2 3)]) ; rovar
16:50 clojurebot: ([sandbox/a ([:a :b :c] 1 2 3)] [sandbox/a [:a :b :c] 1 2 3])
16:51 noonian: s/fn is probably like a normal fn in that it expects an argument vector
16:51 justin_smith: right
16:51 noonian: (s/fn [x] (+ x 1))
16:51 rovar: arrdem: you are a madman. Love it
16:52 arrdem: rovar: lil bit. I just appreciate that yall put up with me :D
16:52 rovar: arrdem: what is your intended purpose for toothpick and batbridge?
16:53 amalloy: are you around?
16:54 amalloy: yes, why?
16:55 rovar: amalloy: I was hoping to find some answers about Jiraph
16:55 I'm hoping you're the right person to ask.
16:56 firstly, is there some updated examples running around of how to get a basic graph up and storing/retrieving data in a simple way?
16:56 amalloy: well. jiraph never really transitioned from "works well if you're an expert who developed it" to "usable by normal people"
16:56 arrdem: rovar: batbridge was school work that I never quite finished
16:56 rovar: <-- normal person
16:57 arrdem: rovar: it has served its purpose, and is just a toy bytecode machine
16:57 amalloy: now that nobody is being paid to work on jiraph, it probably won't make that transition
16:58 arrdem: rovar: toothpick I hope will go on and be able to generate bytecode for x86 and JVM. Maybe one day it'll backend a Clojure on Metal based on Clojure in Clojure but that's a loooong way off.
16:58 rovar: amalloy: gotcha.. I was trying to chose between either it or Titanium, Titanium seems to be under more active development, but it is also broken, I think at the Titan level, and I can't get a response from either group for issues I've posted.
16:59 arrdem: rovar: batbridge may see some more work as a demonstration platoform for various hardware concepts and to further aid as a test target of Toothpick but otherwise this is the end of the line for it.
17:00 rovar: arrdem: I would one day like to target LLVM for arm with clojure. I have looked briefly at mjollnir, but it seems so many projects are built as a POC because its fun to build things in clojure.
17:01 mrhanky: why does this not work? (clojure.browser.dom): (dom/append (dom/get-element list) (dom/element [:li item]))
17:01 rovar: amalloy: at some point soon I may dig deeper into jiraph and help it make that transition. It depends on how desperate I get.
17:01 mrhanky: gets me: Uncaught Error: No protocol method DOMBuilder.-element defined for type cljs.core/Keyword: :li
17:02 arrdem: rovar: I hear you there. I looked at Mjollnir, but half of my reason to build toothpick was to build my own assembler from the ground up since the code generator I wrote for my compilers class never quite made it. I'm also really not a fan of calling off the JVM, so being able to say that Clojure on metal via Toothpick is Clojure all the way down I think is significant.
17:03 amalloy: mrhanky: the error message sounds like dom/element doesn't like those args, and https://
17:03 mrhanky: ah thanks amalloy, i used another cljs compiler before which supported keywords
17:04 amalloy: uhhhhh...the cljs compiler is happy to support keywords
17:04 it's this function in clojure.browser.dom that doesn't like them
17:04 mrhanky: i meant the function clj.browser.dom from that compiler :)
17:04 +from
17:05 rovar: yea I would think that keywords would be the right thing here..
17:05 I wish the github code viewer would do paren matching
17:06 mrhanky: hum
17:07 i compared the dom.cljs from my old compiler with the official one, they're the same
17:07 rovar: so does "li" work?
17:07 mrhanky: yes
17:08 but i'm wondering why it does not support li as keyword?
17:09 rovar: because there is no dom/-element defined for keywords. Not sure why, maybe it was an oversight
17:09 mrhanky: but the two dom.cljs i compared are exact the same, and the "old" one supported keywords
17:10 rovar: you could do a quick patch which defines -element for a keyword which converts the word to a string and then calls -element again :)
17:10 github says that hasn't been edited in two years.
17:12 mrhanky: rovar, https://
17:12 they're exactly the same one
17:13 strange
17:13 rovar: then one of two things are possible: you misremembered, or some external force caused that code to break. perhaps in previous versions of clojurescript keywords were treated as strings..
17:13 just guessing
17:15 mrhanky: hm..
17:31 dnolen: mrhanky: I wouldn't use clojure.browser/dom.cljs
17:31 mrhanky: what should i use instead?
17:31 hiccup(s)?
17:32 dnolen: mrhanky: something that's maintained
17:32 mrhanky: i see :)
17:32 dnolen: mrhanky: clojure.browser/dom.cljs was just created for the ClojureScript launch, better alternatives exist
17:33 mrhanky: the reason keywords work in kanaka's fork is that keywords used to be strings, no longer
17:37 bitemyapp: arrdem: doters? I got home early.
17:38 seangrove: I think I've found bitemyapp's kindred spirit https://
17:41 arrdem: seangrove: haha
17:41 bitemyapp: your timing's good...
17:41 marcopolo`: dnolen: have you looked at pedestal? The more I look into react the more similar they appear
17:42 dnolen: marcopolo`: they are many conceptual similarities yes
17:42 marcopolo`: though pedestal's solution to the front end was very server centric
17:42 marcopolo`: where React is very client centric
17:42 seangrove: marcopolo`: I thought so too, but I think react is a subset
17:43 marcopolo`: seangrove: react is definetly smaller, and I like that better
17:43 more portable
17:43 dnolen: server centric?
17:43 dnolen: marcopolo`: it doesn't really have a very sophisticated front end story
17:43 bitemyapp: arrdem: mumburs
17:43 marcopolo`: I was watching a presentation at jsconf eu and they talked about getting react working in a webworker. I thought, hey the pedestal guys did that too!
17:44 dnolen: agreed
17:44 bitemyapp: seangrove: not quite, this guy listens to bitchy high school metal. I listen to way better stuff than this.
17:44 dnolen: marcopolo`: putting React in a webworker is more an experiment than something practical at this point.
17:44 marcopolo`: I'm excited to see this design becoming a trend, and I'm really excited for Om
17:44 dnolen: marcopolo`: and entirely unnecessary React is plenty fast
17:44 bitemyapp: seangrove: contrast his: http://
17:45 seangrove: he's a pleb.
17:45 dnolen: marcopolo`: I am to, the history/time travel stuff in Om I think will turn out to be powerful
17:45 marcopolo`: how to organize applications stills needs work but it looks like quite a few people are diving into Om head first
17:45 bitemyapp: seangrove: I even use a powered amplifier with my headphones when I jam out to metal, it's part of the reason I want to work from home.
17:45 dnolen: marcopolo`: despite being pre pre pre alpha
17:46 marcopolo`: dnolen: yeah, I'm surprised by the attention it's gathered in it's early phase. but I see it as a good sign!
17:46 dnolen: and you are working on top of a _slightly_ more mature reactjs
17:46 dnolen: marcopolo`: I think it's because even in this early state it's good enough for many applications
17:47 marcopolo`: I'm curious about how composable Om will turn out to be, delegating components and stuff like that
17:47 marcopolo`: which are a bit more obvious to do in OO setting, at least for me
17:47 marcopolo`: yeah React is great, and the people working on it are great/helpful
17:47 marcopolo`: glad the rendering layer of things is in good hands and we can focus on other problems
17:47 bitemyapp: seangrove: replied.
17:48 marcopolo`: dnolen: The OO is apparent, but just the good parts at least. Hopefully we can make bigger use of composition :)
17:50 I love how many Clojurist are on the #reactjs channel
17:50 rovar: what would be a recommended analog for setTimeout() in java?
17:51 egghead: Thread.sleep lol
17:51 rovar: I could sleep in a separate thread and call a fn
17:51 but that sounds quite dreadful
17:51 egghead: rovar: use core.async
17:51 rovar: core.async has such a thing? I should have guessed.
17:52 marcopolo`: rovar: it has timeout, which a channel that will close after some time
17:52 egghead: reading from a timeout channel will park for the amount of time, same deal as a setTimeout
17:52 Cr8: https://
17:52 which is mostly a wrapper around http://
17:53 if you make your own ScheduleThreadPoolExecutor you can just throw regular ol' clojure fns at it, since they're Callable.
17:54 rovar: nice
17:55 marcopolo`: So I'm organizing a meetup soon, and I'm looking for ideas of something we can build in about an hour at the meetup
17:56 the idea being to show how to build stuff with clojure. Everyone will get a turn programming it with someone helping if they get stuck
17:56 My first thought was a scraper, since it's relatively easy. but a bit boring
17:59 edw: marcopolo`: I just started playing with core.logic (it had been a while since I'd made it throught the Reasoned Schemer) and I had a lot of fun building a simple dependency manager.
17:59 marcopolo`: edw: ooo that sounds like fun!
17:59 a good example of: can your programming language do this?
17:59 edw: Yeah. Everyone should be able to build their own Make.
18:00 Maybe do it the functional way first, then the LP way.
18:00 marcopolo`: yeah, I like it!
18:01 thanks
18:01 edw: And then maybe think about how you could model resolved vs unresolved dependencies.
18:01 And building (ordered) plans for resolving them.
18:01 Fun stuff.
18:01 marcopolo`: Where is your meetup?
18:02 marcopolo`: Gainesville, FL
18:03 xnil: marcopolo`: when's that?L
18:03 marcopolo`: xnil: not sure yet, maybe the week after next. Are you in the area?
18:26 TimMc: marcopolo`: Ah, my partner's parents live there.
18:26 marcopolo`: TimMc: If your in town, your welcome to come!
18:28 mrhanky: dnolen, should i also avoid clojure.browser.event ?
18:29 dnolen: mrhanky: avoid clojure.browser.*
18:30 marcopolo`: s/your/you're
18:30 I'm toying with the idea of making a chrome extension to setup a brepl connection, thoughts?
18:40 mrhanky: is there a smarter way to make a keyword from two strings than this? (keyword (str "#" name))
18:40 bbloom: mrhanky: define "smarter"
18:41 mrhanky: i have no idea, but maybe there is another way which is shorter than this?
18:41 noonian: well if you're trying to be cute
18:41 bbloom: mrhanky: i dunno, that seems about as short as it possibly could be.... are you doing this so frequently as to need a dramatically shorter way?
18:42 mrhanky: also, you shouldn't lead a keyword with a #
18:42 mrhanky: dommy requires this
18:42 noonian: (apply (comp keyword str) ["#" name])
18:42 hyPiRion: noonian: or just ((comp keyword str) "#" name)
18:42 noonian: doh
18:43 hyPiRion: thanks
18:43 bbloom: # is an invalid symbol and :# is a arguably an invalid keyword too
18:43 mrhanky: works fine for dommy
18:43 hyPiRion: ,:#foo
18:43 clojurebot: :#foo
18:43 bbloom: *shrug* # is allowed in symbols and keywords, but definitely can't lead a symbol. i guess it technically works for keywords, but i wouldn't rely on it
18:43 noonian: ,:$foo
18:44 clojurebot: :$foo
18:44 mrhanky: no, not using frequently, but as i'm a bloody beginner i'm just wanted to know if there is a shorter way
18:44 noonian: mrhanky: what you are doing is fine and pretty short
18:44 hyPiRion: mrhanky: I don't think there's a shorter way without defining some function
18:44 noonian: you can always stick it in a helper function and call that so its a single function call
18:44 bbloom: mrhanky: i'd suggest separating your notion of better from your notion of shorter :-)
18:46 akurilin: Is there a clojurescript channel out there?
18:47 bbloom: akurilin: there is #clojurescript but i don't think it gets much/any use. just use #clojure
18:47 akurilin: bbloom: got it.
18:47 noonian: yeah, no one's responded to anything i've ever said there
18:48 akurilin: I just wanted to ask people heavily involved in the project about what they think of where the ecosystem is going to go in the next 6-12 months with Om and all that amazing stuff that's pouring out of dnolen.
18:48 More specfically, are there plans to completely bypass the less OOish frameworks like Angular and have something super functional that works really well with cljs?
18:49 I don't know if cool kids call it FRP these days.
18:49 bbloom: akurilin: FRP and "reactive" in general is a term that is so poorly understand that i hesitate to use it ever
18:50 akurilin: React.js is a complete misnomer
18:50 noonian: i'm very interested in om, being the only clojurescript framework out there right now, and i plan on experimenting with using it for mobile development
18:50 clojurebot: Titim gan éirí ort.
18:50 akurilin: bbloom: that's fair, I've yet to figure out what it means either.
18:51 noonian: when you say framework, does that necessarily imply there's a MVC-like structure to it?
18:51 arrdem: gdev_away: you did mean to make that pharmacy db public, right?
18:52 noonian: akurilin: om is built on top of reactjs, my understanding is its a way of creating isolated components with one way data binding to your model, so yeah its a form of MVC
18:53 I haven't done anything with Om yet, but I am trying to make an app with angular and cljs right now and it's not all that nice having to do a ton of js interop
18:54 bbloom: MVC is another totally misunderstood acronym that has become essentially useless for conveying an idea
18:55 noonian: akurilin: here's a blog post on cljs app designs (from before om or reactjs was released): http://
18:55 there are also other cljs FRP libraries like Javelin that all have todoMVC implementations
18:55 marcopolo`: there is pedestal, but it's in a limbo state right now
18:56 akurilin: noonian: good link, thanks
18:57 noonian: np
19:00 akurilin: bbloom: is that true though? I think MVC conveys the general idea of separating concerns and decoupling interaction with UI into a few distinct chunks, but fundamentally it doesn't matter if it's Smalltalk MVC, GoF MVC, Rails MVC etc.
19:00 Kind of reminds me of REST and how nobody actually does Fielding's REST.
19:01 bbloom: REST is the most useless of all three of these acronyms :-)
19:01 akurilin: Actually one guy here at the office implemented a full-blown completely data-driven api+client, it's kind of nuts.
19:01 bbloom: akurilin: react.js' developers sometimes talk about React as the V part of MVC
19:03 akurilin: bbloom: I guess that part makes sense. I really liked the analogy of the DOM being like a game's frame buffer.
19:04 I'm not super familiar with current rendering logic in browsers, but I imagine doing a jQuery animation of a moving piece of the DOM must be impressively inefficient.
19:15 seangrove: Makes sure your MVC's can pass as MVP for a HATEOS-inspired REST FRP framework.
19:24 akurilin: seangrove: wouldn't settle for anything less.
19:37 dnolen: noonian: React.js is not really an MVC, and Om isn't intended to replace such monstrocities
19:38 nonuby: React.js is a DOM rendering engine, Om gives you a sane interaction model over unadorned ClojureScript data
19:38 oops for noonian
19:38 noonian: but it does let you map your data onto the dom right?
19:39 dnolen: akurilin: I have no big plans for Om, but I think big things are possible when you use it.
19:40 noonian: thats all I meant by calling it a form of MVC, I guess it leaves the M and the C up to the programmer.\
19:41 dnolen: noonian: I don't think you need an M. You do need C because it nice to be able to represent logical UI components
19:41 noonian: but the basic concept is you don't put data into crap, it's always there for the taking
19:41 snapshottable and restorable
19:43 akurilin: I think one of the biggest benefits of something like Om is development, being able to VCR the app state while developing live w/ a REPL will be I think a very interesting combo.
19:43 noonian: yeah, i kind of think of the data as the model
19:43 dnolen: akurilin: what stinks about traditional REPL is losing state
19:44 seangrove: dnolen: I like the idea of storing app state, and then on an error, reporting the vcr-state to a server along with the exception
19:44 In effect, creating an automatic repro case for debugging and automated tests
19:44 That could hugely simplify development and debugging production apps
19:44 akurilin: That's pretty great.
19:47 dnolen: seangrove: yeah also I also rewinding and modifying something in the past and propagating it forward could it also be useful
19:54 akurilin: So will I be able to avoid having to learn Angular if I jump on the Om train in a few months? :)
19:55 seangrove: akurilin: Possibly. Probably no one will force you either way
19:55 seako: you can avoid learning anything you want
19:55 noonian: that probably depends on who you work with and whether or not they are using angular :P
19:56 akurilin: seangrove: reason why I ask is that I want to start using CLJS at some point but I remember dnolen telling me that it's a pretty poor for Backbone which most of our web apps are on right now.
19:56 *fit
19:57 Heavy OO and all.
19:57 dnolen: akurilin: yeah
19:57 seangrove: Yeah, I don't know much about using it with Backbone. I'm certainly more in the react/pedestal camp
19:57 dnolen: akurilin: another reason I dived on Om, much less of mismatch, lets data structures shine
19:57 no more clj->js crap
19:57 akurilin: And I don't want to blow a few months on Angular if the CLJS people are going to put out something better anyway.
19:58 No pressure there, dnolen ;)
19:58 dnolen: akurilin: I think React model is superior to Angular, and Angular is a big dependency
19:58 seangrove: dnolen: Yeah, the interop side is pretty painful in terms of perf hit, so it's nice to be able to stay in cljs-land
19:59 akurilin: It's a good idea to play with angular anyway, at least to see how they approach building things
19:59 Though I might recommend pedestal before that
20:00 akurilin: I think the more minimalistic, the more palatable it'd be to the clj crowd. Pedestal looked like a pretty complete solution when I looked at it a few months ago.
20:01 seangrove: but good suggestion on checking out Angular, will put it on my list
20:04 seangrove: Pedestal is surprisingly encompassing, but it has some great ideas
20:04 Very much worth understanding
20:04 Angular is a ton of work to pick up
20:07 akurilin: Good to know, will keep that in mind.
20:15 dubsg: What is pedestal, competing http framework to compojure? Or comething different?
20:16 seangrove: dubsg: Considerably more encompassing
20:17 dubsg: I see, I'm just starting to pick up clojure as a scala dev... I'll have to look into it.
20:17 seangrove: http://
20:17 Probably not a good place to start, honestly
20:17 It does things pretty differently
20:30 Raynes: Compete! Bah!
20:30 Nobody competes in the Clojure community.
20:30 We merely write new things and give each other hugs.
20:32 rhg135: Raynes, otherwise you get epatents etc.
20:40 jtoy: how can I have this return 0? (get {:var nil} :var 0)
20:41 gfredericks: ,(or (get {:var nil} :var) 0)
20:41 clojurebot: 0
20:42 jtoy: should have though of that, thx
20:43 amalloy: ,((fnil identity 0) (get {:var nil} :var)) ; genius-level use of fnil
20:43 clojurebot: 0
20:54 rhg135: ,(doc fnil)
20:54 clojurebot: "([f x] [f x y] [f x y z]); Takes a function f, and returns a function that calls f, replacing a nil first argument to f with the supplied value x. Higher arity versions can replace arguments in the second and third positions (y, z). Note that the function f can take any number of arguments, not just the one(s) being nil-patched."
20:54 rhg135: Ic
20:59 amalloy: seriously though don't use fnil for that
21:04 marcopolo`: is there a select-keys for coll indices?
21:09 gfredericks: marcopolo`: if it's a vector you can use map
21:09 ,(map [7 8 9 10 11 12] [1 3 5])
21:09 clojurebot: (8 10 12)
21:09 marcopolo`: nice, thanks
21:17 Macky: Looking for additional clojure libraries for Linear Programming - Simplex Algorithm, other than levand/prolin
21:22 lsdafjklsd: ,(doc cond->)
21:22 clojurebot: "([expr & clauses]); Takes an expression and a set of test/form pairs. Threads expr (via ->) through each form for which the corresponding test expression is true. Note that, unlike cond branching, cond-> threading does not short circuit after the first true test expression."
21:24 lsdafjklsd: ,(def chars (into [] "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"))
21:24 clojurebot: #<CompilerException java.lang.SecurityException: denied, compiling:(NO_SOURCE_PATH:0:0)>
21:27 lsdafjklsd: bbloom: Hey man, I work building a web app using Ember but in my free time enjoy developing with clojure and recently om. I'm still interested in seeing how the big picture fits together, like layout management, and url support as far as clojure app goes
21:28 bbloom: developing client side apps in cljs feels like backbone again, where I don't know how to organize my stuff in a way that is maintainable. Interested in learning the macro techniques of app development, versus the micro bottom up approach
21:29 bbloom: no idea why I just singled you out haha, saw your previous convo and have been wanting to say the above stuff to someone
21:30 mischanix: Is there a better way to do this?
21:30 ,(let [subsets '(() ({:id 1}) ({:id 2}) ({:id 1} {:id 2}))] (map #(set (map vector (repeat :id) (map :id %))) subsets))
21:30 clojurebot: (#{} #{[:id 1]} #{[:id 2]} #{[:id 1] [:id 2]})
21:31 mischanix: for use with some
21:34 dnolen: lsdafjklsd: organize your code around the data, use namespaces for logical grouping
21:35 lsdafjklsd: dnolen: ok, so is your strategy to contain all state to an `app-state` atom?
21:35 dnolen: lsdafjklsd: I think client side routing is goofy
21:35 lsdafjklsd: in the Om model the whole Google Wave like push state thing is trivial
21:36 lsdafjklsd: think of app-state more like a client side database
21:36 lsdafjklsd: dnolen: ok, that make's sense
21:37 dnolen: lsdafjklsd: this part of Om is not fully baked yet, but in the future I think app-state will be pretty flat
21:37 lsdafjklsd: dnolen: so I was working on routing with just secretary, and I couldn't really come up with a great way to render pages
21:37 dnolen: it felt bad to store :current-page "login" in my app-state
21:37 dnolen: lsdafjklsd: I don't expect serious apps to use deeply nested structures
21:38 lsdafjklsd: dnolen: with a long cond rendering different components based on that
21:38 dnolen: lsdafjklsd: don't be afraid to put that stuff in your component local state via om/set-state! om/get-state if it makes sense.
21:38 lsdafjklsd: dnolen: yea
21:39 dnolen: lsdafjklsd: multimethods work, also you can push down the renders via opts
21:39 er, I mean the component rendering fns
21:39 lsdafjklsd: if you've got conds, something is not right
21:39 lsdafjklsd: dnolen: ok yea
21:40 dnolen: it seemed really bad, and I was frusterated at how bad I was designing things hah
21:40 dnolen: lsdafjklsd: Om is naturally going to be conservative, Clojure brings serious firepower to the table
21:40 lsdafjklsd: dnolen: this im learning
21:40 ambrosebs: is there a flag to disable all inlining in the JVM compiler?
21:41 lsdafjklsd: dnolen: what about complex nested layouts?
21:42 dnolen: how do I render into another component
21:42 dnolen: if I have a component that is an app shell, with a header sidebar footer, and I want to render into the 'main' section
21:42 dnolen: lsdafjklsd: like parameterized rendering right?
21:43 lsdafjklsd: just pass the rendering functions via opts
21:43 lsdafjklsd: https://
21:43 lsdafjklsd: wip, but see how sortable can render any view because it takes it as a option
21:43 lsdafjklsd: dnolen: ok
21:44 apiology: ambrosebs: I've never used the options, but I see -XX:InlineSmallCode, -XX:MaxInlineSize and -XX:FreqInlineSize: http://
21:44 ambrosebs: apiology: ah I meant the :inline metadata on vars
21:45 apiology: thanks anyway, that's interesting
21:45 mischanix: Does what I did above look sane to someone?
21:46 lsdafjklsd: dnolen: is there literature you can recommend about ui development that would be relevent. You said on twitter "not doing anything UI devs haven't already been doing". I'm sure what we are doing is analogous to stuff that has always been done, I'm just not aware
21:47 dnolen: I just do MVC development, I've never built a game... and previously most clojure apps seemed to implement the render loop strategy
21:47 dnolen: lsdafjklsd: there's not a lot of good stuff out there, there have been weak attempts to break out of the OO approaches towards UIs
21:47 DomKM: Has anyone here used Garden (https://
21:47 dnolen: lsdafjklsd: none of them went anywhere, but also not a lot of people were thinking/working on the problem
21:48 lsdafjklsd: honestly until I saw React I was skeptical a mostly FP approach to UI could actually work :P
21:48 lsdafjklsd: so you're on the cutting edge here :)
21:48 lsdafjklsd: dnolen: yea it's fun
21:49 dnolen: you're a smart guy, I'll just follow what you recommend haha
21:49 dnolen: lsdafjklsd: for me the big idea is that FP gives us time travel, I think most of the organizational principles can be drawn from OO.
21:50 lsdafjklsd: dnolen: which is huge for applications
21:50 dnolen: lsdafjklsd: my main complaint with Ember and other systems is that they reify every little pattern and concept into an Object
21:50 lsdafjklsd: it's tiresome
21:50 seangrove: Should `lein with-profile jenkins test :all` load the test profile at all?
21:50 I would expect not, but it seems to be, and the test profile is overwriting some important jenkins-specific profile info
21:51 dnolen: lsdafjklsd: but I think taking the Ember model and saying what's a simple functional version of this that doesn't need a name
21:51 lsdafjklsd: is a good approach
21:52 lsdafjklsd: dnolen: yea, I've been drawing on that for sure. I'm still learning the fp ropes so I have doubts in my implementations... and I'll drop routing for a while, that was a rabbit hole of no productivity
21:53 petehunt: bbloom: yt?
21:53 lsdafjklsd: dnolen: do you have any other good ideas for little apps to build?
21:53 dnolen: lsdafjklsd: try something that can take advantage of history, that'll be really eye opening
21:53 petehunt: or... anyone who knows something about datomic?
21:53 dnolen: lsdafjklsd: like do something speculative, update the user interface, fail, restore old snapshot
21:53 lsdafjklsd: dnolen: k
21:54 dnolen: lsdafjklsd: that type of thing in Om is so easy and mind blowingly cool
21:54 lsdafjklsd: also ClojureScript comes with clojure.data so you can do diffing trivially over two app states
21:54 lsdafjklsd: it will give you the delta
21:56 lsdafjklsd: dnolen: ah cool, didn't know clojure.data existed until now
21:56 dnolen: lsdafjklsd: useful if you want to manage what type of changes you want to record or ignore
21:56 lsdafjklsd: dnolen: yea
21:56 dnolen: petehunt: quite a few people, I'm no expect, but ask away.
21:56 petehunt: there's a friendly datomic channel too
21:57 s/expect/expert
21:57 petehunt: dnolen: i watched a rich hickey video on the design decisions. you're probably a good person for me to ask because you have the context for the world i inhabit :)
21:57 dnolen: petehunt: go for it
21:57 petehunt: dnolen: what i am wondering is: why does it have transactions?
21:57 dnolen: petehunt: vs what?
21:58 petehunt: it seems to me that if you have a fully normalized data store (basically an append-only log of everything that ever happened) you would never need transactions since you'd never have any duplicated data
21:58 i know that datomic works by adding and retracting facts, but i'm wondering why they didn't go with that sort of approach
21:58 egghead: they allow consistency & provide a reference to every change
21:58 dnolen: petehunt: datomic isn't append only. It's ACID database built on 1000+ ways persistent data structure
21:59 petehunt: dnolen: right
21:59 but wondering why they didn't take that approach
21:59 egghead: it is append only in the sense that the transaction ids increment, but you can say for instance 'alice lives in the us'
22:00 petehunt: like in react we never have synchronization problems because there is only 1 canonical piece of state and everything is computed off of that
22:00 and we use lazy eval and memoization to get the perf we need
22:00 the canonical example for transactions is bank account transfers, where you need to atomically write 2 account balances when you do a transfer
22:01 i'm wondering why we don't just keep an append only log of "transaction of $X from A to B"
22:01 dnolen: petehunt: lots of downsides
22:01 petehunt: in Datomic you can load the database at any point in time
22:01 egghead: why not just think of the transactions as the method of appending?
22:02 dnolen: petehunt: if you base everything on storing transitions you have to reconstruct, queries get more complicated slower
22:02 petehunt: as opposed to the append-only log approach, which would require you to rollup from the last snapshot/compaction
22:02 dnolen: petehunt: this is all stuff I'm trying to avoid in the way that Om uses React BTW
22:03 petehunt: right, i seem to remember seeing a twitter debate about command pattern vs persistent datastructures
22:03 dnolen: petehunt: we don't store deltas, and persistent data structure let us jump around in the timeline efficiently
22:03 petehunt: and we can compute delta efficiently if we need them because ...
22:03 persistent data structures
22:03 petehunt: that is nice.
22:04 i'll have to mull this over some more
22:04 btw, does datomic actually work? :)
22:05 dnolen: petehunt: yeah, there are people doing some very serious work w/ it
22:05 petehunt: dnolen: do you know what backing store they're using?
22:05 dnolen: petehunt: seems popular with financial companies in NYC
22:06 lsdafjklsd: dnolen: whaaat. do you know how they are using it?
22:06 egghead: still waiting for aphyr jepsen of datomic
22:06 seangrove: egghead: Heh, would be interesting
22:06 dnolen: petehunt: Riak seems popular, and I think for some people DynamoDB when perf is critical
22:06 seangrove: petehunt: I believe bitemyapp uses the postgres backend, it's what we're looking at as well
22:06 petehunt: i see
22:06 dnolen: petehunt: also PostgreSQL because that's what people use
22:07 petehunt: instagram included :)
22:07 dnolen: petehunt: I've never used Datomic seriously, but I love the query language, http://
22:07 is a rad tutorial
22:09 petehunt: yeah bbloom told me to look at it
22:09 seems pretty sweet
22:09 i still have a dream of a fully normalized, performant data store though :)
22:09 but maybe that's just sugar on top of datomic
22:14 TEttinger3: lnostdal, did you figure out your issue from... 16 hours ago?