#clojure log - Nov 02 2015

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

1:03 kenrestivo: i ended up spending some time with jdbc. it seems there's some new deprecated thing for c3po? this library's README seems to say not to use it, if i'm reading it right... https://github.com/samphilipd/clojure.jdbc-c3p0

6:54 lxsameer: can I store a hug hashmap in an atom ?

7:01 muhuk: what is a `hug hashmap`?

7:04 noncom: like who hugs whom :)

7:04 lxsameer: assuming you meant "huge" - yes, there's no difference. you don't store anything in the atom, but simply the reference

7:05 lxsameer: (i assume you're aware what a reference is in Java or other similar languages)

7:07 muhuk: I can't think of any good reasons for storing mutable objects in atoms (and the like).

7:07 lxsameer: noncom: yeah thanks

7:07 noncom: lxsameer: FYI clojure atom is just a wrapper for javas AtomicReference: https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/Atom.java

7:07 muhuk: what do you mean? i think when saying "hashmap", lxsameer meant {}, i.e. PersistentHashMap, not just HashMap

7:08 lxsameer: noncom: I have a huge Hashmap which I update constantly, is there any better data structure for this ? ( better than atom )

7:08 noncom: and ye PersistentHashMap

7:08 muhuk: lxsameer: atom is good. Also see transients

7:08 lxsameer: muhuk: thanks

7:09 noncom: lxsameer: i think no better. the only thing you can optimise is the access pattern, like do as little derefs and swaps as possible... also, if you do not care about WHEN the values will be written to the {}, you can take a look at the agents

7:09 muhuk: lxsameer: how big is "huge"?

7:09 lxsameer: muhuk: about 20M key value

7:10 muhuk: legit

7:10 Glenjamin: how many keys do you change per swap!?

7:10 noncom: yeah, transients could also be used, if your situation allows for them...

7:10 but they can get tricky

7:10 muhuk: lxsameer: is it going to be modified from multiple threads?

7:10 lxsameer: Glenjamin: only one key

7:10 Glenjamin: should be fine i'd expect then

7:10 lxsameer: muhuk: it's possible yeah

7:11 muhuk: lxsameer: ok. AFAIK agents don't guarantee ordering, so beware.

7:11 lxsameer: if 1 small change per transaction transient is probably not worth it.

7:12 lxsameer: muhuk: what do you mean

7:12 muhuk: lxsameer: you can also consider queuing changes and then do them in a batch

7:12 lxsameer: ?

7:12 muhuk: yeah but it's a realtime system

7:12 muhuk: so I have to do them as fast as I can

7:12 muhuk: lxsameer: transient! -> do one small change -> persistent! is probably worse than a simple swap!

7:13 lxsameer: anyways AFAIK performance doesn't decrease linearly with size

7:13 I would do the simplest implementation first, optimize later as needed

7:15 lxsameer: muhuk: thanks man

7:15 thanks everyone

7:15 muhuk: yw

7:30 jonathanj: is there any way to have the lein-ring handler be a function?

7:31 i need to parameterize parts of my application (like supplying API tokens)

7:57 muhuk: jonathanj: isn't a handler already a function?

7:57 you can look at how routing libs do their thing

7:58 I have middleware that attaches routes (for reversing) and config to the request. I suppose you just need to add info based on path etc.

7:59 Glenjamin: you could change your config lookup into a delay

8:04 jonathanj: Glenjamin: mind elaborating a little?

8:04 Glenjamin: in your hander, read @config

8:05 and elsewhere, (def config (delay {:conf (environ :conf)})) and so on

8:05 ,(def config (delay {:a (prn 123)}))

8:05 clojurebot: #'sandbox/config

8:05 muhuk: why delay the inevitable?

8:05 Glenjamin: ,@config

8:05 clojurebot: 123\n{:a nil}

8:05 Glenjamin: so it doesn't blow up when compiling

8:06 jonathanj: hrm, that's an interesting idea

8:07 muhuk: why would it not compile?

8:07 calling environ now or later makes no difference

8:11 Glenjamin: it would require you to have the environment variables available at compile time if config was a top-level def

8:11 it wouldn't compile them in, but would fail if not present

8:11 anyone know if you can use CLI args in lein aliases?

8:12 muhuk: Glenjamin: check this out: https://github.com/weavejester/environ/blob/master/environ/src/environ/core.clj

8:12 Glenjamin: oh right, i always wrap that with a function that throws for undefined variables when i'm using env vars for config

8:12 muhuk: also it doesn't really compile top level defs like constants

8:15 jonathanj: listening on SSL is a bit of a ballache with Java/Clojure/Ring/whatever is responsible

8:15 i have to supply a keystore and i have to supply a password for a keystore?

8:26 why does jetty prompt me for the keystore password when i've already specified it via the :key-pass option?

8:34 oh because it's not called that, damnit

8:35 muhuk: I have a data structure that I want to validate, it goes like [x x ...] (any number of x's), or it can be [x x ... y z]

8:35 using core.match, the 1st case is easy to cover

8:36 but having the variable number of things in the beginning, I can't think of an easy way to do the 2nd variation

8:37 Malnormalulo: It can only have up to those two non-matching items?

8:37 muhuk: Malnormalulo: yes, never [... y z z] or [... y y z] etc.

8:38 I guess I can reverse the thing :) I'd rather not though

8:39 gfredericks: muhuk: it's an awfully strange data structure

8:39 is it some external thing or did you design it that way?

8:40 muhuk: gfredericks: it's a type signature

8:40 Malnormalulo: Maybe check first for seq being precisely 2 distinct items which do not match the repeated datum (and then stop recursion if true), and then check whether (first seq) is x (and then recurse)

8:41 gfredericks: muhuk: do you mean a destructuring form like [x1 x2 x3 x4 & xs]?

8:41 muhuk: Malnormalulo: yes, it can definitely be done with recursion.

8:42 gfredericks: yes, except I don't care about the values of x1, x2 & xs as long as they're not '&

8:42 Malnormalulo: Did you want to avoid recursion?

8:42 muhuk: well, I don't care at this point. Just checking the shape.

8:42 gfredericks: ,(let [[x1 x2 x3 & xs :as tom] (range)] (take 5 tom))

8:42 clojurebot: (0 1 2 3 4)

8:42 muhuk: Malnormalulo: yes. Well, more like I'm curious about the alternatives

8:43 gfredericks: I don't see how that would help me?

8:43 jonathanj: is it possible to have ring-server (or jetty?) not listen on a non-SSL port?

8:43 Malnormalulo: You have to iterate through each item, one way or the other. Recursion would be the functional way to do that, as I understand it. I guess there might be a way to do it procedurally...?

8:43 jonathanj: :port nil causes a NPE

8:44 Malnormalulo: Sorry, imperatively

8:44 (I always mix up those terms)

8:46 muhuk: thanks gfredericks Malnormalulo

8:47 I think I'll go with the recursive checking.

8:48 gfredericks: muhuk: it doesn't help, I was just pointing out that if you're trying to handle arbitrary destructuring forms, they can get more complex

8:50 muhuk: gfredericks: I see. But no, this is not clojure destructuring. It's not even quite clojure. Just writing it in clojure.

8:51 and FYI I got it working with the reverse trick, but it didn't end up good looking code.

8:55 jonathanj: hrm, is there a release of ring/ring-jetty-adapter that includes the :http? option?

8:56 Malnormalulo: muhuk: I don't know the underlying implementation, but intuitively it seems like reversing it is less efficient anyway

8:57 muhuk: Malnormalulo: it's a vector. I think vectors are implemented in such a way that reversing is O(1)

8:57 I might be wrong though.

8:58 It's backwards anyway.

8:58 Malnormalulo: Possibly. That would make sense. They've got indexing.

9:09 McDougal: Hi, is there any recommended framework or apprach for web app dev in Clojure?

9:09 vijaykiran: McDougal: http://www.luminusweb.net

9:09 clojurebot: Pardon?

9:10 muhuk: McDougal: I'd say learn ring itself first.

9:11 McDougal: Thanks Vijay, am checking Luminus. Do you find web dev in Clojure to be natural or takes a little getting used to due to the lisp syntax? Its not hard but is quite different to the OO I've been working in.

9:12 muhuk: Any particular starter resource, the clojure ecosystem looks quite mature

9:13 muhuk: McDougal: what do you mean by resource?

9:13 McDougal: muhuk: Tutorial or screencast on clojure web dev

9:13 Malnormalulo: Looks like luminus has a text tutorial walking you through a basic app

9:14 muhuk: ring should also have a tutorial

9:15 if only there was a website where we can enter keywords and find out relevant pages of intertubes

9:16 any webdevs here? I have a great idea. I just need some code monkeys. It's going to be huge! I might even give you shares.

9:16 McDougal: Thanks muhuk, is it perhaps better to go even more lightweight than Luminus? Altho I must say the documentation looks really good

9:16 muhuk: McDougal: not, not because it's lightweight. Because it's the basics.

9:17 I'd be surprised if Luminus doesn't use ring under the hood.

9:18 McDougal: I would also suggest bidi, once you need routing

9:18 McDougal: muhuk, it looks like luminus is using immutant

9:18 muhuk: McDougal: don't pm unless it's private/personal

9:18 McDougal: googling bidi

9:19 muhuk: McDougal: pm me one more time and I'll ignore you

9:19 McDougal: Its ref your web dev request, otherwise no need for pm

9:21 Is router speed relevant to web performance or negligible? Am checking the comparison on the bidi site.

9:23 pbx: McDougal, in almost all cases wifi router speed far outstrips broadband, if that's what you're asking. i.e. it's your internet connection, not your router :)

9:23 ha, pardon me McDougal, i thought i was in a different channel!

9:24 McDougal: pbx: Actually I was referring to the router lib in a web app.

9:24 pbx: yeah, i figured that out right after my post when i looked at the channel :\

9:26 McDougal: Allright, thanks for your help guys, I think I can get up to speed pretty quick with Luminus, plus I got a few books on Clojure

9:27 Lisp syntax is v different, feels strange but something appealing about the conciseness

9:42 vijaykiran: McDougal: quick-tip if you want to mention my name, you need to use my irc handle : vijaykiran :)

9:42 McDougal: Reading the docs, Luminus is using Ring, I got it mixed up with it removing lib-noir.

9:43 vijaykiran: Thanks. Are there any libs you find useful for CRUD style web apps? Am new to clojure and irc

9:45 vijaykiran: McDougal: using luminus you should be good to go - you can tell the leiningen plugin to generate template project for a given DB

9:46 McDougal: I wrote some tutorial a couple of years ago - but it might be horribly outdated.

9:46 McDougal: vijaykiran: Thanks, am trying out a test app right now. Do you prefer Selmer or Hiccup for the views?

10:03 vijaykiran: McDougal: you can start with Selmer which looks like HTML - it depends on your preference

10:03 lxsameer: it may seems stupid, but is there any way to define an expire time for a data structure, and after that the data free automatically ? ( wow such a bad english )

10:04 vijaykiran: lxsameer: what would "free" mean ?

10:05 lxsameer: vijaykiran: remove from the datastructure

10:06 for example remove an element from a vector after certain amount of time

10:06 vijaykiran: lxsameer: I don't know what the usecase is - but create an atom and swap it in a timer thread might work

10:07 muhuk: lxsameer: are you removing keys or the entire thing?

10:08 lxsameer: muhuk: just va value

10:09 muhuk: lxsameer: how about storing the deadline and periodically cleaning it? (and using transients too in this case)

10:09 it's good if you're not resetting the timer frequently

10:10 McDougal: Thanks vijay, more traditional html view preferable as am using reg React vs Om or Reagent.

10:10 lxsameer: muhuk: thanks man, I have to read more about transients

10:12 muhuk: yw. Main point is there's a cost to conver to/from transients. So it makes sense when you have a few changes.

10:14 McDougal: muhuk: I pm'ed ref your request for web devs for your big idea, not something I'd assume you'd discuss in public. Anyhow forget it. cheers.

11:21 noncom: does anyone have experience with rewrite-clj?

12:56 does anyone have experience of working with a scene graph as an immutable data structure that is passed from cycle to cycle of the app?

13:17 MickeyD: Is Clojure mature for web development yet, or its web story still evolving?

13:18 noncom: MickeyD: it is very mature

13:19 many business web apps are already built with clojure

13:19 MickeyD: you could also be interested in #clojurescript

13:19 for the front end

13:20 MickeyD: So to deliver html formatted email receipts via mandrill for example, image resize, security such as crsf and authentication

13:21 nocom: Whats your primary use case with clojure if you don't mind me asking.

13:23 Reason I ask is about a year ago a lot of the libs were half baked, I burned a lot of hours such as on migration libs, or postal for smtp delivery

13:25 I got the impression clojure is more a data processing focused community than web domain use cases

13:25 mpenet: it's very strong in both

13:25 (imho)

13:26 MickeyD: mpenet, is there a good authentication lib thats become kinda community standard?

13:26 mpenet: I think there are a few out there. I personally had to write my own, but it was way back, still running this atm

13:27 one quite popular is "friend"

13:28 Frozenlo`: MickeyD: 'friend' was the first really popular one. There's also 'buddy', which I find less confusing :-p

13:28 MickeyD: Yes I remember that was one of the few polished and well documented ones. How about libs for interacting with cloud or SAAS providers?

13:29 Frozenlo - I'll take a look at Buddy, thanks

13:29 What do you folks favor for persistence? sql or orms?

13:32 Frozenlo - looks like Buddy has some nice security features

13:34 And I was wondering what email delivery lib is gen favored nowadays? I see Postal, Mailer and clj-mail on clojure-toolbox

13:38 Frozenlo`: MickeyD: I used Mailer, but I can't say if it's the most popular nowadays

13:39 MickeyD: Frozenlo: Will it work with smtp & deliver html formatted emails - i/e. for receipts on ecommerce transactions

13:41 Frozenlo`: Yes. You can check the readme, it shows little examples. https://github.com/clojurewerkz/mailer

14:05 MickeyD: Frozenlo: Thanks. Btw, what are you using to interact with your db?

14:07 Frozenlock: MickeyD: That depends on what you are using...

14:07 (which DB)

14:08 MickeyD: Frozenlo: Am using Postgres.

14:08 Frozenlock: I would just google "postgres clojure" and see what's poping up :-p

14:16 kwladyka: I am learning ClojureScript. What is the best way to start a project? lein new new-project or something like that or create files manually?

14:17 also base instructions tell about standalone java file, but i can't find good instruction to use ClojureScript with lein.

14:17 dnolen: kwladyka: the best way to get started is to go through the Quick Start which doesn't use Lein

14:17 oddcully: kwladyka: if you want to understand what's going on: https://github.com/clojure/clojurescript/wiki/Quick-Start

14:17 MickeyD: Frozenlock: I meant are you using an ORM like korma or straight jdbc sql?

14:18 oddcully: kwladyka: otherwise `lein new fighweel app` gives you a headstart

14:18 kwladyka: dnolen, but why not use Lein? I did it but now i want to try with Lein :)

14:18 dnolen: after you get the basics down then you can look at Figwheel, Boot, Lein, whatever

14:18 kwladyka: because adding anything else just creates complications for understanding how ClojureScript actually works

14:18 MickeyD: Does anyone here have experience with both Go and Clojure?

14:18 kwladyka: Anyway... better with lein or not? I guess it is better with lein?

14:19 noncom: MickeyD: my primary use of clojure is 3D graphics with OpenGL, Processing, system scripting tools, Continious Integration tooling, web apps (CRM), experiments in logic programming, answer set system, and much other things

14:19 kwladyka: dnolen, i did this quick start.. for me it is more complicated without lein ;)

14:19 dnolen: kwladyka: ClojureScript works great with Lein but I would not start learning it by using it is all I am suggesting

14:20 kwladyka: if you went through the Quick Start then look at lein-cljsbuild docs

14:20 rhg135: Indeed, having scripts is nice

14:20 dnolen: kwladyka: there's also an active #clojurescript channel

14:20 kwladyka: dnolen, i did quick start for clojurescript. I am familiar with lein and i prefer to learn in way which i will really use it.

14:20 dnolen, oh i didnt know that :)

14:20 dnolen: kwladyka: cool, I understand. Then look at cljsbuild docs as I said.

14:21 kwladyka: dnolen, thx

14:21 noncom: MickeyD: i used korma for postgres, but actually i am more toward mongo with monger

14:21 MickeyD: also i have some little experience with Go

14:22 MickeyD: nocom: Have you considered rethinkdb? How dos it feel to you coding in Clojure vs Go?

14:23 noncom: MickeyD: I have not heard of rethinkdb before, but from reading their website now, I can say that it is a very interesting thing and I am sure to try it out

14:24 kwladyka: oddcully, thx for fighweel

14:24 noncom: MickeyD: as for Clojure vs Go - umm, i don't actually feel much. To me Go is more like C. It is not a lisp anyway, so the comparison is not going to work... it is impossible to compare a lisp to a non-lisp

14:24 MickeyD: nocom: There is an excellent screencast on rethinkdb on pluralsight

14:24 clojurebot: c'est bon!

14:25 MickeyD: nocom: Do either feel natural or right to you for web dev?

14:25 noncom: MickeyD: thanks, i'll take a look!

14:25 MickeyD: i doubt anything than lisp can feel natural after you try lisp

14:25 MickeyD: Go feels more like C

14:26 which is ok and in some ways "natural" for the machine

14:26 other than that... idk what to say

14:26 MickeyD: nocom: I mean they work but Go does not seem like a natural fit for web dev, more like an awkward fit

14:26 noncom: same as C or C++

14:26 but Go is somewhat better, but still, even python feels better

14:27 MickeyD: nocom: But a human is doing the coding :) Not a machine

14:27 noncom: yeah, and here, once again, i can only cite this great post about what is a lisp: http://www.defmacro.org/ramblings/lisp-ducati.html

14:28 MickeyD: nocom: I think python looks & feels like a much more natural fit for web dev, same for ruby

14:28 noncom: MickeyD: that's just coz they are more abstracted from metal

14:28 and they have very smooth experience based on high abstractions

14:28 in other words, coding web in assembly is madness

14:29 so, they have both - abstractions and good libraries

14:29 MickeyD: nocom: There is a lot of merit to a smooth experience

14:29 Btw, I have yet to have my lisp aha moment

14:30 noncom: oh

14:30 MickeyD: Ref the fluidity of lisp

14:30 Maybe not enough time in yet

14:31 noncom: idk.. sometimes it is good to write C, you know, after having the lisp aha, i also had C and java aha

14:31 i had a better picture of where they fit

14:31 MickeyD: nocom: I would wager doing web dev in assembly is a fundamentally flawed idea. for this reason I shunned Go for web dev

14:32 noncom: right. go maybe great for some things, but not web i think, that's so pointless

14:32 MickeyD: nocom: You feel the simplicity of data as code, code as data?

14:32 noncom: sure

14:33 also, the simplicity of no syntax

14:33 MickeyD: I think Go i awesome for command line apps, simple focused background jobs, but web dev, its so awkward

14:33 noncom: yeah, command lines could be cool i think. did not do much in go, so cannot say. in my mind it's like C with some advanced features

14:34 i know there's much difference, but not that much for my aims

14:34 Malnormalulo: With its concurrency focus, I could see Go doing well serving web APIs if not sites and full apps

14:34 MickeyD: Hmm, I have not had that religious experience yet, altho I did experience it in a couple other langs

14:35 nocom: Rich Hickey said he didn't want to spend rest of his life writing java. I think he missed that java aha moment

14:36 nocom: Have you tried any other functional langs?

14:37 noncom: yeah, i did scala for 2 years, did some haskell, some f#... maybe something else i did...

14:37 teh funny J language, for example

14:37 MickeyD: But you like clojure the most?

14:37 noncom: coffeescript..

14:38 MickeyD: How about Nim, thats quite elegant

14:38 noncom: well, clojure simply hits the right spot. it is a lisp, with super-modern features, with full support of the huge huge huge java libraries ecosystem

14:38 part of clojure appeal comes from the java ecosystem

14:38 did not try Nim, can't say

14:38 MickeyD: nocom: I want to click with clojure, but its not happened yet, this is my 2nd attempt :)

14:39 noncom: yeah, i was trying for several timtes...

14:40 MickeyD: I think its because some of the libs were pretty bad, I got fedup and moved on to get stuff done in another lang

14:40 Maybe now would be a smoother experience

14:41 noncom: MickeyD: hmm, idk, most libs are okay

14:41 MickeyD: Lisp to me is weird and elegant at the same time, hope to have the aha moment this time

14:42 A year and half ago community focus was more on data processing than web dev, seems to have changed

14:42 noncom: MickeyD: just be sure to stick along, ask here if you have questions

14:43 MickeyD: nocom: Wil do, I will work on a clojure app every day for a week, sometimes it takes a week or 2 total immersion for something to click

14:43 Thankyou for your feedback nocom :)

14:43 noncom: yeah!

14:43 np :)

14:43 welcome

15:17 justin_smith: my calls to monger.collection/update are resulting in threads that don't exit for the lifetime of the app, they just hang waiting on a read they never complete (but the socket doesn't close either...) - is this something I would fix by changing my write-concern?

17:12 {blake}: justin_smith: I have never seen that!

17:12 justin_smith: What write-concern are you using?

17:13 And now I'm curious how you know threads are being created and not destroyed. (Maybe I should be checking for that, too!)

17:29 WorldsEndless: How can I conditionally add a key-value pair (NOT a map) to an anonymous map?

17:30 Usecase: I'm generating an HTML form element and need to programatically defined if something has "checked" as an attribute

17:35 Frozenlock: WorldsEndless: I'm not really sure of what you are asking, but you could always do this: (merge my-map (when true my-other-map))

17:38 {blake}: WorldsEndless: (if cond (assoc {:anonymous :map} :new-key :new-value)) ?

17:38 rhg135: WorldsEndless: cond-> can be useful here

17:42 {blake}: I have a bunch of threads competing for resources, so I'm forcing them to access these resources through a function call which puts a request on the resource-manager's input channel, and returns an output channel that their results will appear on.

17:42 Does that seem like an appropriate use of async? It's one input queue and many output queues.

17:43 rhg135: seems fine

17:44 {blake}: Since I'm familiar with RabbitMQ, I was inclined to make one input and one output queue, but then I'd have to filter for each thread. So if it's not a big resource deal, seems cleaner just to wait for your particular response.

17:45 rhg135: synchronization seems like a good use

17:50 celwell: Hello, I see this example in the clojuredocs: (sort-by (juxt :foo :bar) x) . However,if I add a comparator to it, it i will throw an exception (clojure.lang.PersistentVector cannot be cast to java.lang.Number)

17:51 I would like to do something like: (sort-by (juxt :foo :bar) > x)

17:51 hiredman: > only works on numbers

17:51 juxt returns a vector

17:52 so you cannot sort values created by juxt with >

17:52 (values created by the function juxt returns)

17:54 hyPiRion: celwell: If you want to reverse the result, you can use (sort-by (juxt :foo :bar) (comp - compare) ...)

17:55 celwell: hyPiRion: thanks

18:07 Schrostfutz: Is there a native xor in clojure?

18:07 For booleans?

18:07 amalloy: not=

18:08 Schrostfutz: amalloy: ah, that's right =/

18:18 hyPiRion: just be aware that (not= false true true) is true, not false like one may initially expect

18:20 {blake}: hyPiRion: OK, that's what I'd expect, what am I missing?

18:20 Frozenlock: ditto

18:20 {blake}: I'm thinking of it as "(not= (not= false true) true)"

18:20 Which it is not, clearly.

18:24 Oh! It's (not (= false true true))

18:25 Which is not an XOR as I normally think of it.

18:35 Malnormalulo: Truth tables, man

18:38 {blake}: Right?

18:42 rhg135: (is-true? true) => false

18:43 Malnormalulo: => CompilerException

18:48 TimMc: hyPiRion: I would expect (not= 1 2 3) -> true but (not= 1 2 2) -> false :-)

18:50 Malnormalulo: Apparently the actual generalization of XOR to more than 2 operands is true iff it has an odd number of true operands.

18:50 So sayeth Wikipedia, anyway

18:51 So to implement it we'd probably need to use filter and count

18:51 TimMc: Or you could use reduce.

18:52 Malnormalulo: Or you could do that

19:17 justin_smith: {blake}: I know the threads are staying open because I used a profiler, and after each call there is a thread that is "runnable", waiting on data from mongo, and open but inactive for the rest of the app lifetime

19:36 weathered-tree: I'm trying to set permissions using the nio Files createDirectory static method. However, even though I set PosixFilePermissions into a FileAttribute array using into-array, it doesn't seem to actually set the permissions. Any ideas on why this might happen? I'd appreciate the help.

19:38 using Files/setPosixFilePermissions seems to work just fine, but the createDirectory example here: https://docs.oracle.com/javase/tutorial/essential/io/dirs.html doesn't work, no errors, creates the directory, but fails to set the correct permissions.

20:13 makufiru: So I found a resource for browser-testing in clojure using https://github.com/semperos/clj-webdriver. Does anyone have any resources/tutorials/libraries for capturing the browser's `console.log(x)` and `console.error(x)` logs in clojure?

21:09 justin_smith: ~gentlemen

21:09 clojurebot: You can't fight in here. This is the war room.

22:07 weathered-tree: any thoughts on why (java.nio.file.Files/createDirectory path (into-array FileAttribute [(PosixFilePermissions/asFileAttribute (PosixFilePermissions/fromString "rwxrwxrwx"))])) doesn't work, but (Files/setPosixFilePermissions) does?

22:07 I'd appreciate the help

Logging service provided by n01se.net