#clojure logs

2015-11-02

01:03kenrestivoi 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
06:54lxsameercan I store a hug hashmap in an atom ?
07:01muhukwhat is a `hug hashmap`?
07:04noncomlike who hugs whom :)
07:04noncomlxsameer: assuming you meant "huge" - yes, there's no difference. you don't store anything in the atom, but simply the reference
07:05noncomlxsameer: (i assume you're aware what a reference is in Java or other similar languages)
07:07muhukI can't think of any good reasons for storing mutable objects in atoms (and the like).
07:07lxsameernoncom: yeah thanks
07:07noncomlxsameer: FYI clojure atom is just a wrapper for javas AtomicReference: https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/Atom.java
07:07noncommuhuk: what do you mean? i think when saying "hashmap", lxsameer meant {}, i.e. PersistentHashMap, not just HashMap
07:08lxsameernoncom: I have a huge Hashmap which I update constantly, is there any better data structure for this ? ( better than atom )
07:08lxsameernoncom: and ye PersistentHashMap
07:08muhuklxsameer: atom is good. Also see transients
07:08lxsameermuhuk: thanks
07:09noncomlxsameer: 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
07:09muhuklxsameer: how big is "huge"?
07:09lxsameermuhuk: about 20M key value
07:10muhuklegit
07:10Glenjaminhow many keys do you change per swap!?
07:10noncomyeah, transients could also be used, if your situation allows for them...
07:10noncombut they can get tricky
07:10muhuklxsameer: is it going to be modified from multiple threads?
07:10lxsameerGlenjamin: only one key
07:10Glenjaminshould be fine i'd expect then
07:10lxsameermuhuk: it's possible yeah
07:11muhuklxsameer: ok. AFAIK agents don't guarantee ordering, so beware.
07:11muhuklxsameer: if 1 small change per transaction transient is probably not worth it.
07:12lxsameermuhuk: what do you mean
07:12muhuklxsameer: you can also consider queuing changes and then do them in a batch
07:12lxsameer?
07:12lxsameermuhuk: yeah but it's a realtime system
07:12lxsameermuhuk: so I have to do them as fast as I can
07:12muhuklxsameer: transient! -> do one small change -> persistent! is probably worse than a simple swap!
07:13muhuklxsameer: anyways AFAIK performance doesn't decrease linearly with size
07:13muhukI would do the simplest implementation first, optimize later as needed
07:15lxsameermuhuk: thanks man
07:15lxsameerthanks everyone
07:15muhukyw
07:30jonathanjis there any way to have the lein-ring handler be a function?
07:31jonathanji need to parameterize parts of my application (like supplying API tokens)
07:57muhukjonathanj: isn't a handler already a function?
07:57muhukyou can look at how routing libs do their thing
07:58muhukI have middleware that attaches routes (for reversing) and config to the request. I suppose you just need to add info based on path etc.
07:59Glenjaminyou could change your config lookup into a delay
08:04jonathanjGlenjamin: mind elaborating a little?
08:04Glenjaminin your hander, read @config
08:05Glenjaminand elsewhere, (def config (delay {:conf (environ :conf)})) and so on
08:05Glenjamin,(def config (delay {:a (prn 123)}))
08:05clojurebot#'sandbox/config
08:05muhukwhy delay the inevitable?
08:05Glenjamin,@config
08:05clojurebot123\n{:a nil}
08:05Glenjaminso it doesn't blow up when compiling
08:06jonathanjhrm, that's an interesting idea
08:07muhukwhy would it not compile?
08:07muhukcalling environ now or later makes no difference
08:11Glenjaminit would require you to have the environment variables available at compile time if config was a top-level def
08:11Glenjaminit wouldn't compile them in, but would fail if not present
08:11Glenjaminanyone know if you can use CLI args in lein aliases?
08:12muhukGlenjamin: check this out: https://github.com/weavejester/environ/blob/master/environ/src/environ/core.clj
08:12Glenjaminoh right, i always wrap that with a function that throws for undefined variables when i'm using env vars for config
08:12muhukalso it doesn't really compile top level defs like constants
08:15jonathanjlistening on SSL is a bit of a ballache with Java/Clojure/Ring/whatever is responsible
08:15jonathanji have to supply a keystore and i have to supply a password for a keystore?
08:26jonathanjwhy does jetty prompt me for the keystore password when i've already specified it via the :key-pass option?
08:34jonathanjoh because it's not called that, damnit
08:35muhukI 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]
08:35muhukusing core.match, the 1st case is easy to cover
08:36muhukbut having the variable number of things in the beginning, I can't think of an easy way to do the 2nd variation
08:37MalnormaluloIt can only have up to those two non-matching items?
08:37muhukMalnormalulo: yes, never [... y z z] or [... y y z] etc.
08:38muhukI guess I can reverse the thing :) I'd rather not though
08:39gfredericksmuhuk: it's an awfully strange data structure
08:39gfredericksis it some external thing or did you design it that way?
08:40muhukgfredericks: it's a type signature
08:40MalnormaluloMaybe 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)
08:41gfredericksmuhuk: do you mean a destructuring form like [x1 x2 x3 x4 & xs]?
08:41muhukMalnormalulo: yes, it can definitely be done with recursion.
08:42muhukgfredericks: yes, except I don't care about the values of x1, x2 & xs as long as they're not '&
08:42MalnormaluloDid you want to avoid recursion?
08:42muhukwell, I don't care at this point. Just checking the shape.
08:42gfredericks,(let [[x1 x2 x3 & xs :as tom] (range)] (take 5 tom))
08:42clojurebot(0 1 2 3 4)
08:42muhukMalnormalulo: yes. Well, more like I'm curious about the alternatives
08:43muhukgfredericks: I don't see how that would help me?
08:43jonathanjis it possible to have ring-server (or jetty?) not listen on a non-SSL port?
08:43MalnormaluloYou 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...?
08:43jonathanj:port nil causes a NPE
08:44MalnormaluloSorry, imperatively
08:44Malnormalulo(I always mix up those terms)
08:46muhukthanks gfredericks Malnormalulo
08:47muhukI think I'll go with the recursive checking.
08:48gfredericksmuhuk: it doesn't help, I was just pointing out that if you're trying to handle arbitrary destructuring forms, they can get more complex
08:50muhukgfredericks: I see. But no, this is not clojure destructuring. It's not even quite clojure. Just writing it in clojure.
08:51muhukand FYI I got it working with the reverse trick, but it didn't end up good looking code.
08:55jonathanjhrm, is there a release of ring/ring-jetty-adapter that includes the :http? option?
08:56Malnormalulomuhuk: I don't know the underlying implementation, but intuitively it seems like reversing it is less efficient anyway
08:57muhukMalnormalulo: it's a vector. I think vectors are implemented in such a way that reversing is O(1)
08:57muhukI might be wrong though.
08:58muhukIt's backwards anyway.
08:58MalnormaluloPossibly. That would make sense. They've got indexing.
09:09McDougalHi, is there any recommended framework or apprach for web app dev in Clojure?
09:09vijaykiranMcDougal: http://www.luminusweb.net
09:09clojurebotPardon?
09:10muhukMcDougal: I'd say learn ring itself first.
09:11McDougalThanks 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.
09:12McDougalmuhuk: Any particular starter resource, the clojure ecosystem looks quite mature
09:13muhukMcDougal: what do you mean by resource?
09:13McDougalmuhuk: Tutorial or screencast on clojure web dev
09:13MalnormaluloLooks like luminus has a text tutorial walking you through a basic app
09:14muhukring should also have a tutorial
09:15muhukif only there was a website where we can enter keywords and find out relevant pages of intertubes
09:16muhukany 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.
09:16McDougalThanks muhuk, is it perhaps better to go even more lightweight than Luminus? Altho I must say the documentation looks really good
09:16muhukMcDougal: not, not because it's lightweight. Because it's the basics.
09:17muhukI'd be surprised if Luminus doesn't use ring under the hood.
09:18muhukMcDougal: I would also suggest bidi, once you need routing
09:18McDougalmuhuk, it looks like luminus is using immutant
09:18muhukMcDougal: don't pm unless it's private/personal
09:18McDougalgoogling bidi
09:19muhukMcDougal: pm me one more time and I'll ignore you
09:19McDougalIts ref your web dev request, otherwise no need for pm
09:21McDougalIs router speed relevant to web performance or negligible? Am checking the comparison on the bidi site.
09:23pbxMcDougal, 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 :)
09:23pbxha, pardon me McDougal, i thought i was in a different channel!
09:24McDougalpbx: Actually I was referring to the router lib in a web app.
09:24pbxyeah, i figured that out right after my post when i looked at the channel :\
09:26McDougalAllright, 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
09:27McDougalLisp syntax is v different, feels strange but something appealing about the conciseness
09:42vijaykiranMcDougal: quick-tip if you want to mention my name, you need to use my irc handle : vijaykiran :)
09:42McDougalReading the docs, Luminus is using Ring, I got it mixed up with it removing lib-noir.
09:43McDougalvijaykiran: Thanks. Are there any libs you find useful for CRUD style web apps? Am new to clojure and irc
09:45vijaykiranMcDougal: using luminus you should be good to go - you can tell the leiningen plugin to generate template project for a given DB
09:46vijaykiranMcDougal: I wrote some tutorial a couple of years ago - but it might be horribly outdated.
09:46McDougalvijaykiran: Thanks, am trying out a test app right now. Do you prefer Selmer or Hiccup for the views?
10:03vijaykiranMcDougal: you can start with Selmer which looks like HTML - it depends on your preference
10:03lxsameerit 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:04vijaykiranlxsameer: what would "free" mean ?
10:05lxsameervijaykiran: remove from the datastructure
10:06lxsameerfor example remove an element from a vector after certain amount of time
10:06vijaykiranlxsameer: I don't know what the usecase is - but create an atom and swap it in a timer thread might work
10:07muhuklxsameer: are you removing keys or the entire thing?
10:08lxsameermuhuk: just va value
10:09muhuklxsameer: how about storing the deadline and periodically cleaning it? (and using transients too in this case)
10:09muhukit's good if you're not resetting the timer frequently
10:10McDougalThanks vijay, more traditional html view preferable as am using reg React vs Om or Reagent.
10:10lxsameermuhuk: thanks man, I have to read more about transients
10:12muhukyw. Main point is there's a cost to conver to/from transients. So it makes sense when you have a few changes.
10:14McDougalmuhuk: 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:21noncomdoes anyone have experience with rewrite-clj?
12:56noncomdoes 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:17MickeyDIs Clojure mature for web development yet, or its web story still evolving?
13:18noncomMickeyD: it is very mature
13:19noncommany business web apps are already built with clojure
13:19noncomMickeyD: you could also be interested in #clojurescript
13:19noncomfor the front end
13:20MickeyDSo to deliver html formatted email receipts via mandrill for example, image resize, security such as crsf and authentication
13:21MickeyDnocom: Whats your primary use case with clojure if you don't mind me asking.
13:23MickeyDReason 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:25MickeyDI got the impression clojure is more a data processing focused community than web domain use cases
13:25mpenetit's very strong in both
13:25mpenet(imho)
13:26MickeyDmpenet, is there a good authentication lib thats become kinda community standard?
13:26mpenetI think there are a few out there. I personally had to write my own, but it was way back, still running this atm
13:27mpenetone quite popular is "friend"
13:28Frozenlo`MickeyD: 'friend' was the first really popular one. There's also 'buddy', which I find less confusing :-p
13:28MickeyDYes I remember that was one of the few polished and well documented ones. How about libs for interacting with cloud or SAAS providers?
13:29MickeyDFrozenlo - I'll take a look at Buddy, thanks
13:29MickeyDWhat do you folks favor for persistence? sql or orms?
13:32MickeyDFrozenlo - looks like Buddy has some nice security features
13:34MickeyDAnd I was wondering what email delivery lib is gen favored nowadays? I see Postal, Mailer and clj-mail on clojure-toolbox
13:38Frozenlo`MickeyD: I used Mailer, but I can't say if it's the most popular nowadays
13:39MickeyDFrozenlo: Will it work with smtp & deliver html formatted emails - i/e. for receipts on ecommerce transactions
13:41Frozenlo`Yes. You can check the readme, it shows little examples. https://github.com/clojurewerkz/mailer
14:05MickeyDFrozenlo: Thanks. Btw, what are you using to interact with your db?
14:07FrozenlockMickeyD: That depends on what you are using...
14:07Frozenlock(which DB)
14:08MickeyDFrozenlo: Am using Postgres.
14:08FrozenlockI would just google "postgres clojure" and see what's poping up :-p
14:16kwladykaI 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:17kwladykaalso base instructions tell about standalone java file, but i can't find good instruction to use ClojureScript with lein.
14:17dnolenkwladyka: the best way to get started is to go through the Quick Start which doesn't use Lein
14:17oddcullykwladyka: if you want to understand what's going on: https://github.com/clojure/clojurescript/wiki/Quick-Start
14:17MickeyDFrozenlock: I meant are you using an ORM like korma or straight jdbc sql?
14:18oddcullykwladyka: otherwise `lein new fighweel app` gives you a headstart
14:18kwladykadnolen, but why not use Lein? I did it but now i want to try with Lein :)
14:18dnolenafter you get the basics down then you can look at Figwheel, Boot, Lein, whatever
14:18dnolenkwladyka: because adding anything else just creates complications for understanding how ClojureScript actually works
14:18MickeyDDoes anyone here have experience with both Go and Clojure?
14:18kwladykaAnyway... better with lein or not? I guess it is better with lein?
14:19noncomMickeyD: 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:19kwladykadnolen, i did this quick start.. for me it is more complicated without lein ;)
14:19dnolenkwladyka: ClojureScript works great with Lein but I would not start learning it by using it is all I am suggesting
14:20dnolenkwladyka: if you went through the Quick Start then look at lein-cljsbuild docs
14:20rhg135Indeed, having scripts is nice
14:20dnolenkwladyka: there's also an active #clojurescript channel
14:20kwladykadnolen, 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:20kwladykadnolen, oh i didnt know that :)
14:20dnolenkwladyka: cool, I understand. Then look at cljsbuild docs as I said.
14:21kwladykadnolen, thx
14:21noncomMickeyD: i used korma for postgres, but actually i am more toward mongo with monger
14:21noncomMickeyD: also i have some little experience with Go
14:22MickeyDnocom: Have you considered rethinkdb? How dos it feel to you coding in Clojure vs Go?
14:23noncomMickeyD: 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:24kwladykaoddcully, thx for fighweel
14:24noncomMickeyD: 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:24MickeyDnocom: There is an excellent screencast on rethinkdb on pluralsight
14:24clojurebotc'est bon!
14:25MickeyDnocom: Do either feel natural or right to you for web dev?
14:25noncomMickeyD: thanks, i'll take a look!
14:25noncomMickeyD: i doubt anything than lisp can feel natural after you try lisp
14:25noncomMickeyD: Go feels more like C
14:26noncomwhich is ok and in some ways "natural" for the machine
14:26noncomother than that... idk what to say
14:26MickeyDnocom: I mean they work but Go does not seem like a natural fit for web dev, more like an awkward fit
14:26noncomsame as C or C++
14:26noncombut Go is somewhat better, but still, even python feels better
14:27MickeyDnocom: But a human is doing the coding :) Not a machine
14:27noncomyeah, 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:28MickeyDnocom: I think python looks & feels like a much more natural fit for web dev, same for ruby
14:28noncomMickeyD: that's just coz they are more abstracted from metal
14:28noncomand they have very smooth experience based on high abstractions
14:28noncomin other words, coding web in assembly is madness
14:29noncomso, they have both - abstractions and good libraries
14:29MickeyDnocom: There is a lot of merit to a smooth experience
14:29MickeyDBtw, I have yet to have my lisp aha moment
14:30noncomoh
14:30MickeyDRef the fluidity of lisp
14:30MickeyDMaybe not enough time in yet
14:31noncomidk.. sometimes it is good to write C, you know, after having the lisp aha, i also had C and java aha
14:31noncomi had a better picture of where they fit
14:31MickeyDnocom: I would wager doing web dev in assembly is a fundamentally flawed idea. for this reason I shunned Go for web dev
14:32noncomright. go maybe great for some things, but not web i think, that's so pointless
14:32MickeyDnocom: You feel the simplicity of data as code, code as data?
14:32noncomsure
14:33noncomalso, the simplicity of no syntax
14:33MickeyDI think Go i awesome for command line apps, simple focused background jobs, but web dev, its so awkward
14:33noncomyeah, 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:34noncomi know there's much difference, but not that much for my aims
14:34MalnormaluloWith its concurrency focus, I could see Go doing well serving web APIs if not sites and full apps
14:34MickeyDHmm, I have not had that religious experience yet, altho I did experience it in a couple other langs
14:35MickeyDnocom: Rich Hickey said he didn't want to spend rest of his life writing java. I think he missed that java aha moment
14:36MickeyDnocom: Have you tried any other functional langs?
14:37noncomyeah, i did scala for 2 years, did some haskell, some f#... maybe something else i did...
14:37noncomteh funny J language, for example
14:37MickeyDBut you like clojure the most?
14:37noncomcoffeescript..
14:38MickeyDHow about Nim, thats quite elegant
14:38noncomwell, 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:38noncompart of clojure appeal comes from the java ecosystem
14:38noncomdid not try Nim, can't say
14:38MickeyDnocom: I want to click with clojure, but its not happened yet, this is my 2nd attempt :)
14:39noncomyeah, i was trying for several timtes...
14:40MickeyDI think its because some of the libs were pretty bad, I got fedup and moved on to get stuff done in another lang
14:40MickeyDMaybe now would be a smoother experience
14:41noncomMickeyD: hmm, idk, most libs are okay
14:41MickeyDLisp to me is weird and elegant at the same time, hope to have the aha moment this time
14:42MickeyDA year and half ago community focus was more on data processing than web dev, seems to have changed
14:42noncomMickeyD: just be sure to stick along, ask here if you have questions
14:43MickeyDnocom: 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:43MickeyDThankyou for your feedback nocom :)
14:43noncomyeah!
14:43noncomnp :)
14:43noncomwelcome
15:17justin_smithmy 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{blake}justin_smith: What write-concern are you using?
17:13{blake}And now I'm curious how you know threads are being created and not destroyed. (Maybe I should be checking for that, too!)
17:29WorldsEndlessHow can I conditionally add a key-value pair (NOT a map) to an anonymous map?
17:30WorldsEndlessUsecase: I'm generating an HTML form element and need to programatically defined if something has "checked" as an attribute
17:35FrozenlockWorldsEndless: 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:38rhg135WorldsEndless: 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{blake}Does that seem like an appropriate use of async? It's one input queue and many output queues.
17:43rhg135seems 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:45rhg135synchronization seems like a good use
17:50celwellHello, 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:51celwellI would like to do something like: (sort-by (juxt :foo :bar) > x)
17:51hiredman> only works on numbers
17:51hiredmanjuxt returns a vector
17:52hiredmanso you cannot sort values created by juxt with >
17:52hiredman(values created by the function juxt returns)
17:54hyPiRioncelwell: If you want to reverse the result, you can use (sort-by (juxt :foo :bar) (comp - compare) ...)
17:55celwellhyPiRion: thanks
18:07SchrostfutzIs there a native xor in clojure?
18:07SchrostfutzFor booleans?
18:07amalloynot=
18:08Schrostfutzamalloy: ah, that's right =/
18:18hyPiRionjust 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:20Frozenlockditto
18:20{blake}I'm thinking of it as "(not= (not= false true) true)"
18:20{blake}Which it is not, clearly.
18:24{blake}Oh! It's (not (= false true true))
18:25{blake}Which is not an XOR as I normally think of it.
18:35MalnormaluloTruth tables, man
18:38{blake}Right?
18:42rhg135(is-true? true) => false
18:43Malnormalulo=> CompilerException
18:48TimMchyPiRion: I would expect (not= 1 2 3) -> true but (not= 1 2 2) -> false :-)
18:50MalnormaluloApparently the actual generalization of XOR to more than 2 operands is true iff it has an odd number of true operands.
18:50MalnormaluloSo sayeth Wikipedia, anyway
18:51MalnormaluloSo to implement it we'd probably need to use filter and count
18:51TimMcOr you could use reduce.
18:52MalnormaluloOr you could do that
19:17justin_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:36weathered-treeI'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:38weathered-treeusing 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:13makufiruSo 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:09justin_smith~gentlemen
21:09clojurebotYou can't fight in here. This is the war room.
22:07weathered-treeany 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:07weathered-treeI'd appreciate the help