#clojure log - Jan 03 2014

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

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://clojure-doc.org/articles/language/namespaces.html

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://ideone.com/KxGIeB my code is here, I modified what amalloy pasted last night, but it ain't working

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://dl.dropboxusercontent.com/u/11914692/dungeon-lotsa-ambushes.PNG the algorithm was used to find good hiding places on a maze-like map, by finding the group of locations that would take 5-6 steps to reach from a given cell, and rating the given cell by how many locations it was hidden from

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://github.com/flatland/ordered

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://pastebin.com/tkBd0VeH

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://pastebin.com/zKRiQ9qi

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://github.com/korma/Korma by ibdknox

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://www.infoq.com/presentations/DSL-Clojure

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://sla.ckers.org/forum/read.php?24,33349

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://www.refheap.com/22442

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://github.com/swannodette/enlive-tutorial

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://en.wikipedia.org/wiki/Dendrocnide_moroides

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://appletree.or.kr/quick_reference_cards/Others/ClojureScript%20Cheat%20Sheet.pdf

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://github.com/cgrand/enlive/blob/master/src/net/cgrand/enlive_html.clj#L1013 <- i just discovered

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://www.dangermouse.net/esoteric/piet/samples.html -- the Pi calculator is my favorite.

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://github.com/hyPiRion/hello-swearjure/blob/master/src/hello_swearjure/core.clj

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://i.imgur.com/MXUg1Cq.gif

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://github.com/llasram/ring/compare/reducible-body

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://github.com/clojure/clojurescript/blob/master/src/clj/cljs/compiler.clj#L665

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://maven.apache.org/plugins/maven-install-plugin/usage.html

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://groups.google.com/forum/#!topic/datomic/486mjOJZVVI

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://github.com/bigmlcom/sampling

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://skreksto.re/products/durr and http://feelspace.cogsci.uni-osnabrueck.de/ made less intrusive.

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://www.refheap.com/22448

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://github.com/clojure/clojurescript/blob/master/src/cljs/clojure/browser/dom.cljs#L26 confirms it only accepts strings, not keywords

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://github.com/kanaka/clojurescript/blob/cljs_in_cljs/src/cljs/clojure/browser/dom.cljs

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://news.ycombinator.com/item?id=7008622

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://www.youtube.com/watch?v=JYjIlHWBAVo vs my preferred: http://www.youtube.com/watch?v=aIQgwFcush0

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://github.com/overtone/at-at

17:52 which is mostly a wrapper around http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ScheduledThreadPoolExecutor.html

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://keminglabs.com/blog/cljs-app-designs/

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://pedestal.io/

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://github.com/swannodette/om/blob/sortable/examples/sortable/core.cljs

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://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html

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://github.com/noprompt/garden) extensively? What did you think of it?

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://www.learndatalogtoday.org

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?

Logging service provided by n01se.net