#clojure log - Apr 14 2015

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

0:05 justin_smith: TEttinger: so I am learning how to install lein and light table on Windows for clojurebridge, because we can assume a bunch of people are going to show up with Windows machines and only one of us even had access to a Windows machine

0:05 TEttinger: justin_smith, did you start with a jdk?

0:05 justin_smith: TEttinger: well, first off I am installing the VM image from MS

0:05 TEttinger: and likely that will be the first step, yeah

0:06 I may bring the JDKs on a removable disk to make it easy

0:06 TEttinger: right

0:06 justin_smith: instead of waiting for everyone to download

0:06 TEttinger: you should build openjdk 8 yourself, just to make things absurdly difficult

0:06 justin_smith: LOL

0:07 yeah, I am going to build openjdk on Windows, as someone who has never been a day to day Windows user...

0:07 TEttinger: (it is something I intend to do at some point. or did, but now Zulu is going to be offering a 32-bit openjdk)

0:07 justin_smith: why 32 bit?

0:07 TEttinger: they already offer 64

0:07 but not 32

0:07 the thing is, openjdk is ideal for bundling as a JRE with an app

0:08 it isn't burdened by the same licensing as Oracle JDK

0:08 and it can be modified

0:08 justin_smith: right, and you want to support 32 bit systems

0:08 TEttinger: right

0:10 ok, so justin_smith: a few things, you want to set up PATH. start > right click computer -> properties, advanced system settings in the left bar -> environment variables

0:10 you have two options now

0:10 one is to delete all environment variables and spend the next 3 hours dec-ing TEttinger

0:11 justin_smith: TEttinger: these are the current instructions for win 7 https://github.com/ClojureBridge/curriculum/blob/master/outline/setup_win7.md

0:12 and for win 8 https://github.com/ClojureBridge/curriculum/blob/master/outline/setup_win8.md

0:12 TEttinger: the recommended option is to add JAVA_HOME to be C:\Program Files\Java\jdk1.8.0_25 (updated for whatver version you're on, I dunno)

0:13 (that's different if they have 64-bit windows and installed 32-bit java, btw)

0:13 you may also need to set LEIN_JAVA_CMD but I doubt that

0:13 justin_smith: TEttinger: my plan is to download everything they list there, put it all on a USB key, and follow the instructions on those pages

0:13 TEttinger: coo

0:14 justin_smith: somehow there is no mention of "path" in that guide

0:14 amazing

0:15 TEttinger: it could be set up automagically

0:15 it often isn't

0:15 that could be because I was updating not fresh-installing

0:15 (also I think java 8 handles path correctly, but earlier ones don't)

0:16 you should try it on the vm without touching path

0:16 justin_smith: yeah, my plan is to try the literal instructions, then come back and pester you if things don't work

0:17 amazing that you can just download a full windows system from MS now

0:17 (a vm image, that is)

0:17 TEttinger: for cash money?

0:18 justin_smith: no, multiple OS versions, all free

0:18 that's the part that surprises me

0:18 TEttinger: justin_smith, I should probably mention that I am the only known windows user running a lazybot

0:18 justin_smith: the images are distributed explicitly for web devs who don't run windows to make sure they have IE support working

0:18 TEttinger: (there aren't many of us)

0:18 justin_smith: TEttinger: I recall you mentioning that

0:19 TEttinger: it's windows server 2008 R2, which is surprisingly... my current favorite windows

0:19 it has better startup time than windows 7 and it's been all kinds of reliable

0:19 (I got it for free from my college)

0:21 justin_smith: TEttinger: regarding my plan to share the files via a USB key - am I better off just serving it over the local network? Should I be concerned about USB storage viruses or is that not a big thing with recent windows versions?

0:21 should I put on my hazard suit before coming near anything MS?

0:21 haha

0:22 "If you receive errors while running Light Table about Java or JDK, these may be resolved by finishing the installation of Leiningen first. If not, see a TA to look at your environment variables."

0:22 TEttinger: usb storage... viruses?

0:22 justin_smith: TEttinger: like viruses that attach to usb storage sticks

0:22 I've heard this is a thing

0:22 maybe it's super rare, I honestly have no idea

0:23 TEttinger: justin_smith. stuxnet attacked by local wifi, which most people don't even know their computers have

0:23 justin_smith: fair enough

0:23 TEttinger: it may have also spread by bluetooth

0:23 justin_smith: TEttinger: stuxnet was fancy

0:23 TEttinger: there are several variants on stuxnet too

0:23 some circulating now

0:24 justin_smith: TEttinger: I was super sad to discover that my smart phone acts as a wifi hotspot via an ad-hoc network, and my android tablet explicitly cannot do ad-hoc wifi

0:24 :P

0:24 I would have had super simple mobile data for my tablet if not for that

0:24 TEttinger: (presumably people have reverse engineered stuxnet all to hell, in order to vampirize its fanciness)

0:24 justin_smith: of course

0:25 TEttinger: but yeah, the primary things you need to be afraid of for viruses are the ones that no one knows about yet COUGH HEARTBLEED COUGH

0:26 justin_smith: this is also going to be my first time trying light table

0:26 adu: everyone knows about heartbleed

0:26 TEttinger: that and every hard drive made in the last few years probably has an NSA rootkit somewhere on it

0:27 which is just waiting for some malicious third party to figure out how to access it...

0:28 so yeah my stance in regards to computer security is, you're probably screwed unless you're in a faraday cage

0:31 http://www.belfasttelegraph.co.uk/technology/google-engineers-on-nsa-and-gchq-surveillance-f-these-guys-29734200.html

0:32 if google can be surprised out of the blue by this stuff, I mean, nobody's immune

0:34 justin_smith, the part you'll have the most trouble with on windows and that tutorial is git

0:35 git bash is different in subtle ways from the windows command line

0:35 I do recommend Github for Windows

0:35 justin_smith: how? is it mostly about quoting and invoking other commands?

0:36 TEttinger: I'm not sure really how git bash is different, since cd and git work the sam

0:36 e

0:36 but it could be confusing if the user doesn't know which they're in

0:37 git for windows is pretty much a no-brainer, though you probably need to have a github account (openid works) first

0:37 *github for windows

0:37 git for windows is not so good

0:37 justin_smith: I'll keep that in mind if we get problems with the cli

0:37 TEttinger: s/if/when/

0:37 justin_smith: haha

0:38 TEttinger: the git command tools are pretty weird especially if they haven't used git

0:39 git push, git pull, git remote add, but there's no git fork

0:39 justin_smith: git fork isn't a command!

0:39 TEttinger: exactly

0:39 justin_smith: git clone?

0:39 TEttinger: but people talk about forking a repo all the time

0:39 justin_smith: ahh, right

0:39 now I see the line above it :)

0:39 git spoon

0:40 TEttinger: haha

0:40 justin_smith: git some salt and pepper

0:40 git eatin'

0:41 TEttinger: http://git-man-page-generator.lokaltog.net/#2cd5bc5d6475efcccd69cc5314dab78c

1:02 fading: i like tortoisegit (and tortoiseHG and tortoisesvn)

1:05 lexi-lambda: Is there any built-in function that would do something like this? (fn [value op] (and value (op value)))

1:05 Basically just apply op to value if value is truthy, otherwise return the falsy value.

1:05 justin_smith: lexi-lambda: some-> (but only for nil)

1:05 TEttinger: (doc some->)

1:05 justin_smith: and some-> chains like -> does too (each time stopping if it hits a nil)

1:05 clojurebot: "([expr & forms]); When expr is not nil, threads it into the first form (via ->), and when that result is not nil, through the next etc"

1:05 TEttinger: (inc justin_smith)

1:05 lazybot: ⇒ 239

1:06 TEttinger: ,(some-> nil inc)

1:06 clojurebot: nil

1:06 lexi-lambda: Perfect, that's exactly what I'm looking for. :)

1:06 justin_smith: awesome

1:06 TEttinger: ,(some-> 1 inc print print)

1:06 clojurebot: 2

1:06 TEttinger: nice

1:07 justin_smith: there's probably a monad that does that, I don't know its name though

1:18 lexi-lambda: justin_smith: Well, in Haskell, that'd be the Maybe monad. :p

1:18 justin_smith: lexi-lambda: thanks, I am haskell impaired

1:18 lexi-lambda: that would have been my first guess, but it would have only been a guess

1:18 lexi-lambda: that's alright, me too, I just happen to know that, haha

1:27 justin_smith: TEttinger: turns out this is a 90 day preview

1:27 better than nothing I guess

1:28 TEttinger: hehe

1:28 VS Community makes you register within 90 days

1:28 but it keeps working after that 90 if you register

1:30 justin_smith: TEttinger: grabbed the wrong file by mistake (the 5gig OS image) and now the file browser isn't responding ;(

1:30 TEttinger: D:

1:30 in windows?

1:31 justin_smith: yeah - it was just being really slow about popping up the copy menu

1:31 I was able to cancel it

1:31 it was about to copy the disk image I was running, into the disk image I was running

1:31 escher would be proud

1:33 oh man this jvm is about to install a toolbar on my crap isn't it

1:33 raspasov_: justin_smith: wow yea I heard about that but have never seen it

1:33 that's crazy that Oracle would do that

1:34 justin_smith: raspasov_: luckily I was able to choose the right options to not make it happen - I'll need to be careful to ensure the clojurebridge participants don't get toolbar'd

1:35 raspasov_: in case you weren't following the conversation above, I am installing the clojurebridge setup on a windows vm so I'll be sure I can help the people that show up with windows machines

1:35 raspasov_: yea that's a sad state of affairs, I mean come on guys, do you really need that extra few million from this crap, some manager really got his incentives setup very wrong

1:35 justin_smith: it's an adventure!

1:36 raspasov_: yea I wasn't following :) good luck with it! always great to help new people

1:36 justin_smith: it'll be like what I try to do on irc, but harder because face to face

1:37 TEttinger: does leiningen for windows really need a jdk? shouldn't a jre suffice?

1:38 haha, the installer has a click button for "custom location" but no menu to choose said location

1:38 TEttinger: it needs a jdk. it can't compile .class files otherwise

1:38 justin_smith: ahh

1:38 thanks!

1:38 TEttinger: also, the jdk doesn't install a toolbar (if you rush through and fail to uncheck a checkbox in the JRE installer)

1:39 (yeah, oracle is just... in a death spiral)

1:40 justin_smith: my state is actually taking oracle to court for how they handled the state health insurance web site

1:40 TEttinger: oh wow

1:40 which state?

1:40 justin_smith: OR

1:40 TEttinger: I liek oregon

1:40 varry greeeeeen

1:40 justin_smith: http://techcrunch.com/2014/08/22/oregon-sues-oracle/

1:40 TEttinger: and we are having clojure/west here soon

1:42 TEttinger: I'll be at home, petting a cat

1:42 justin_smith: "malware detected"

1:42 TEttinger: https://dl.dropboxusercontent.com/u/11914692/Satchmo_Curious.jpg

1:43 justin_smith: oh haha

1:43 TEttinger: satchmo wants to know if you're doing bad things to that computer

1:44 justin_smith: TEttinger: it was a drive by that ended up on my Linux downloads folder, and I did a "mv *.exe ~/win-shared/" because I didn't expect it to exist

1:44 windows dealt the thing a quick death blow though

1:47 yay, I got a repl

1:47 go me

1:49 TEttinger: when I have a command prompt open, how do I make a new one?

1:52 TEttinger: btw all the paths got set up properly with no fiddling needed

1:53 TEttinger: justin_smith: right click the command prompt in the bottom bar, click command prompt

1:54 I uh use conemu, which is better in every way

1:54 justin_smith: cool, thanks

1:54 TEttinger: it's a small dl tooo

1:54 justin_smith: also good to know

1:54 TEttinger: http://conemu.github.io/

1:56 justin_smith: TEttinger: aha - this git they have us use installs something called "git bash" which is a shell that creates a more nixy env

1:56 so that things like find and sort are the nix version

1:57 ahh, path problems with the git install...

1:57 oh, duh, I selected things that mean I need to use "git bash", of course :)

2:04 TEttinger: I accidentally clicked on "STORE" and I have no idea what is happening or how to exit and it wants me to buy crap

2:04 help

2:05 TEttinger: are you on windows 8?

2:05 justin_smith: yeah

2:05 TEttinger: this is your first mistake

2:05 justin_smith: haha

2:05 I am seeing this

2:05 it wants me to buy a game that has a cat dressed up like a bobby

2:06 but I can't figure out how to leave this screen

2:06 TEttinger: esc

2:06 if that fails, ctrl-q

2:06 if THAT fails, alt-f4

2:06 justin_smith: esc, C-q, C-w, the goggles, each respectively do nothing

2:06 TEttinger: if THAT fails, ctrl-alt-del and kill the thing

2:06 justin_smith: alt-f4 did it

2:06 that is such an evil feature!

2:06 wtf

2:07 TEttinger: it probably has a slidey touchy interface

2:07 justin_smith: of course

2:07 TEttinger: TinderOS

2:08 * justin_smith swipes whichever direction means "never see this again"

2:08 TEttinger: a swipe with your middle finger insults the program

2:09 justin_smith: I made it through the installs, and didn't have to touch any weirdness, beyond the store I accidentally clicked on

2:09 TEttinger: hha

2:09 I'm glad you're trooping through this

2:09 justin_smith: TEttinger: oh, and even with the jdk I still had to click no on a "java blablah is ready to integrate with your browser"

2:09 TEttinger: ah, because it has a JRE installer too

2:10 it bundles the JRE installer... I wonder hang on

2:10 justin_smith: TEttinger: me too, it will be helpful for the clojurebridge students. And it will mean I can help windows users in the future if need be.

2:10 or verify/ fix windows only bugs in clojure code in general

2:11 TEttinger: I'm wondering if http://www.azulsystems.com/products/zulu/downloads#Windows is going to be better for distribution

2:11 but it might also be cleaner to install

2:11 it's meant for automated server stuff

2:11 justin_smith: maybe after this 90 day trial runs out

2:11 this is working for now though

2:12 oh wait, you mean these jdk / jre versions

2:12 now I get it

2:12 I thought this was an alternate windows vm

2:13 TEttinger: it's a prebuilt openjdk 8

2:18 justin_smith: TEttinger: so if some student discovers that her paths are totally screwed and we need to fix it, do you have a good guide for that?

2:18 TEttinger: uhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh

2:20 if they delete their path, the best solution is a system restore to the latest restore point from windows update

2:20 but I've never needed that

2:20 (system restore shouldn't delete any of their files, it just changes installed programs)

2:22 path absolutely needs to be separated with semicolon, since colon means drive letter stuff

2:22 C:\ etc.

2:23 justin_smith: cool

2:23 TEttinger: but yeah there has to be an easier way!

2:23 * TEttinger starts checking for a oneget/chocolatey package for clojure dev

2:24 justin_smith: TEttinger2: https://chocolatey.org/packages?q=clojure

2:25 TEttinger: maybe this would be a good submission as an improvement to the clojurebridge install guide?

2:25 https://chocolatey.org/packages?q=leiningen

2:25 light table is on there too

2:25 TEttinger: https://chocolatey.org/packages/Lein is broken

2:25 justin_smith: in what way?

2:26 TEttinger: n/m just found the comment

2:27 TEttinger: that would otherwise be a good solution. chocolatey basically runs through all the installers for you

2:28 justin_smith: OK, I'm turning in for the night, thanks for the help

2:28 (inc TEttinger)

2:28 lazybot: ⇒ 50

2:28 TEttinger: night justin_smith

2:28 no prob

2:31 sqd: hi! intellij 14.1.1 complains that cursive 0.1.53 is incompatible with my current installation. any idea where i could start looking to solve this?

2:32 ah found it in the cursive bug tracker, i needed to change my plugin repository

3:38 mbac: what's the minimum amount of RAM i want on a VPS to serve clojure?

3:39 i guess i could just run lein repl and look at the rss or something huh

3:39 500M to fire up [lein repl] and run (range 10)

3:40 opqdonut: yeah I was about to suggest at least 1G

3:40 depends on everything of course

3:59 sm0ke: is there a lein option for continuous compilation?

4:02 hyPiRion: That's what you have a repl for, generally

4:02 Otherwise CIDER and friends have compilation hooks I tend to use

4:03 sm0ke: No i know that, but i want the classes to be compiled to target/classes on change

4:05 i guess i will mix watchtower and `compile`

4:41 zot: trying out emacs midje-mode for the first time, no love. any clue on this one? Symbol's value as variable is void: nrepl-buffer-ns — regrettably, i'm not even a fledgling w/ emacs lisp. i tried resetting the namespace in the cider repl, that had no impact. and i don't know how to track down where it's coming from…

4:42 Empperi: hmm, can I write macros into cljc files and call those in clojurescript?

4:43 or do I still have to write those into clj -files?

4:44 answering to myself: yes I can \o/

4:44 fuck yes

4:56 borkdude: Empperi nice :)

5:08 anti-freeze: Hi everyone, I was wondering if anyone has any experience with the midje test framework?

5:24 dstockton: anti-freeze: ask your question, no one will want to answer you unless they have an idea whats coming next

5:25 anti-freeze: dstockton: Sorry. I don't think its a midje issue, I think I'm just an idiot. I get a NullPtrException when attempting to run tests during the namespace (:require [],,)

5:25 dstockton: you have :require [] ? you don't need to specify :require if there's nothing to require

5:26 or was that just shorthand

5:26 anti-freeze: dstockton: That was just an example

5:26 dstockton: Do you think it could be related to the macros defined in another file?

5:26 dstockton: ok, maybe someone can help if you post a stacktrace and the code that fails

5:26 anti-freeze: dstockton: Alright, give me a sec

5:28 dstockton: Stacktrace: https://www.refheap.com/99596 Code: https://www.refheap.com/99597

5:29 dstockton: looks like the problem is in art-thingy.routes.auth

5:29 art-thingy.routes.auth/handle-login (auth.clj:76)

5:30 check that line

5:31 anti-freeze: How did you find that?

5:32 Ah, I see. Told you I was a moron :P

5:32 Seems like the same issues I was having with the buddy encryption algorithms. If you pass nil, it shits itself

5:33 dstockton: you usually want to look as far down the stack trace as possible

5:33 to find where the error originates

5:33 anti-freeze: dstockton: Alright. Thank you. On the road to learning clojure I suppose

5:34 dstockton: stacktraces are something people frequently complain about, they do often contain a lot of noise

5:34 anti-freeze: dstockton: I guess it comes with the seamless Java interop

5:35 dstockton: yeah, you get used to filtering the noise, sometimes it can also come in handy

5:36 might want to read https://aphyr.com/posts/319-clojure-from-the-ground-up-debugging

5:36 anti-freeze: dstockton: I guess so. Still better than C++ template errors

5:36 dstockton: it helped me

5:36 anti-freeze: Oh, this is great, thanks

5:36 * the-kenny doesn't really see the point in Midje

5:36 anti-freeze: the-kenny: What do you advise then. I haven't found it too great either

5:36 the-kenny: I just use clojure.test

5:37 anti-freeze: the-kenny: I don't know why I went with Midje. Clojure seems to have a pretty good testing suite from the get go

5:40 dstockton: Alright, I found the issue. Apparently destructuring like this [{:keys [credentials pass]}] rather than [{pass :pass credentials :credentials}] breaks everything

5:40 dysfun: the-kenny: i quite like midje actually

5:40 i find my test suite is considerably more concise with midje

5:41 too much of clojure.test doesn't lend itself to code elimination

5:41 more than that, it feels like it gets out of my way, and it's a miracle for me to not hate writing tests

5:42 borkdude: when using clojurescript, I get feedback about unrecognized vars and such while programming. Is there such a thing for clojure, preferably in emacs? It would be cool if we could get the feedback inside the editor.

5:42 dstockton: the-kenny: do you auto run your tests after changes? and how?

5:42 the-kenny: borkdude: I just do C-c ,

5:42 borkdude: the-kenny that will run a test namespace?

5:43 dstockton: borkdude: maybe you can find a plugin for eastwood

5:43 the-kenny: Yup

5:43 dstockton: perhaps https://github.com/clojure-emacs/squiggly-clojure

5:44 borkdude: dstockton looks interesting, thanks

5:44 dstockton: i use vim-eastwood, it works quite well for this kind of thing

5:51 sm0ke: can clojure aot compilation be made incremental?

5:51 i see it just compiles everything on `lein compile`

6:01 dysfun: why on earth do you need AOT to be incremental? you'd only really want to use that for uberjar

6:01 micrypt: Having an issue with something that I'd figured would be straightforward … "clojure.lang.ExceptionInfo: :refer must be followed by a sequence of symbols in :require / :require-macros; offending spec: [pbxme.utils :refer :all]"

6:02 dysfun: i'm guessing clojurescript doesn't support :all

6:03 micrypt: dysfun: Ah, fair enough. Cheers.

6:03 dysfun: you can :as u as a near-enough

6:04 sm0ke: dysfun: It could be useful in systems which send code to other machines

6:04 dysfun: heh

6:05 i'll let you keep the pieces when it breaks :)

6:05 sm0ke: :P

6:06 no its just for easy dev, on production system it would be running only once compiled code

6:06 i mean at least there should have been a timestamp based approach

6:07 recompiling everything everytime is horribly slow

6:07 dysfun: you might have better look experimenting with it on boot

6:07 it has a generic watcher mechanism you can tap into

6:07 luck*

6:07 sm0ke: i have a small function which `compile` only changed files

6:08 but i fail to understand compile

6:08 is it must to have a (:gen-class) for aot compile? i guess not! or how is lein compiling it

6:09 dysfun: you'll need someone with more experience with aot stuff than me, sorry.

6:12 sm0ke: this is kind of funny https://github.com/technomancy/leiningen/blob/master/src/leiningen/compile.clj#L7

6:14 there is something surely fishy here , did anyone ever managed to reach this `if` condition?

6:14 https://github.com/technomancy/leiningen/blob/master/src/leiningen/compile.clj#L144

6:14 I have NEVER seen this!

6:20 dysfun: hang on, i'm digging

6:20 sm0ke: me too

6:20 check this `stale-namespaces` it looks weird

6:21 dysfun: okay, so it's been like this since pre-2.0 https://github.com/technomancy/leiningen/commit/10723b20434670942d94cf8612d607f7b582941e

6:22 the commit history was a bit tricky to follow, but it's clearly been there a while

6:22 sm0ke: that makes sense the if condition is not required

6:22 but it think that `stale-namespaces` surely is wrong

6:22 it the reason why files are getting compiled everytime

6:23 it didnt know you can use comprehensions that weridly before

6:23 I*

6:24 * dysfun bangs his head repeatedly against the wall

6:24 sm0ke: you found it?

6:24 dysfun: no, i'm just disgusted at that function for being difficult to follow

6:25 try doing it in the repl and overriding that function

6:26 sm0ke: I wish it had been possible to :eval-in-lein from a project repl somehow

6:26 dysfun: it's possible in boot :)

6:26 sm0ke: what is it with you and boot

6:26 dysfun: it's quite neat

6:26 sm0ke: ugh

6:26 dysfun: needs more plugins though. i've started writing two

6:27 (marginalia and codox)

6:27 i had to release a project with lein this morning because i haven't written either of them yet)

6:51 sm0ke: that function is correct

6:55 slipset: achievement unlocked: comp and partial used in same form

6:55 ,(->> (range 6 14) (map (comp (partial str "2015-04-") (partial format "%02d")))))

6:55 clojurebot: ("2015-04-06" "2015-04-07" "2015-04-08" "2015-04-09" "2015-04-10" ...)

6:57 slipset: my brain would be happier with an rcomp which takes its argument in reverse order.

6:57 hyPiRion: It's called -> and ->>

6:58 slipset: hyperion: not quite, I cannot pass -> as first argument to map, can I?

6:58 hyPiRion: ,(->> (range 6 14) (map #(->> % (format "%02d") (str "2015-04-"))))

6:58 clojurebot: ("2015-04-06" "2015-04-07" "2015-04-08" "2015-04-09" "2015-04-10" ...)

6:59 slipset: hyperion: you're cheating, your're creating an anon function.

6:59 which I did as well, but with comp instead of #(..)

7:00 hyPiRion: I'm not sure I understand the rules

7:10 slipset: hyPiRion: there are no rules, I just try to end up writing map/filter/keep etc using partial instead of #(..)

7:13 hyPiRion: ah

7:15 Well, I'd just use (map #(format "2015-04-%02d" %) (range 6 14)), but that's because I find partial so long to write

7:16 slipset: :)

7:16 So I guess my achievement is disqualified since I didn't know how to use format :(

7:21 hyPiRion: Well, it may still be valuable if "2015-04-" was a variable that may include %-signs

9:09 borkdude: how do I express something like this with clojure/jdbc ? "position = position + 1"

9:09 is that even possible?

9:10 Empperi: ["position = position + 1"]

9:10 :P

9:12 borkdude: ah :-)

9:23 acron^: gah

9:24 is there a way to use swap! to completely re-assign an atom?

9:24 justin_smith: acron^: reset!

9:24 acron^: <3

9:24 cheers mate

9:25 dysfun: also constantly, but reset! is better. constantly is useful with higher order stuff more generally

9:39 sveri: Hi...does anyone know about a library creating html structure based on data (json, edn, whatever). Doesn't have to be clojure, java would be fine too

9:41 dstockton: sveri: hiccup?

9:43 sveri: dstockton: yea, that might be one option. but I would like to generate html directly, like this I would have to transform twice: edn -> hiccup -> html

9:43 justin_smith: sveri: hiccup is edn

9:43 dstockton: ^^

9:52 sveri: :P

9:52 of course

9:53 justin_smith: dstockton you are right. But my data definition would be an abstraction over hiccup, like: [:fooname [:varchar 40] :null false] which I would have to transform to valid hiccup then

9:54 dstockton: thought you were more flexible in the format of the data (json, edn, whatever)

9:54 sounds like you want to transform your specific data representation into html?

9:55 mpenet: sveri: but no lib is going to auto-magically generate html for arbitrary edn data

9:55 should be easy to add a little layer to do the transformation

9:55 justin_smith: mpenet: I could make one that does, but nobody would like the output

9:55 (constantly "<html><body><h1>HELLO WORLD</h1></body></html>") ; done

10:01 sveri: dstockton: right

10:02 justin_smith: ah, thats nice, but not very flexible I am afraid :D

10:02 justin_smith: haha

10:03 mavbozo: sveri, at least it maintains backward compatibilty by omitting DOCTYPE

10:03 sveri: it's also easy to understand

10:03 but it complects content with structure

10:04 justin_smith: sveri: but it handles all input uniformly

10:04 sveri: hm, pros and cons :-)

10:05 Glenjamin: its very simple

10:06 sveri: still. generating hiccup from my edn is becoming more and more viable in my head, I don't have to handle all the html stuff then which sounds very nice

10:47 sritchie: do cljc files go into the normal clojure source directory?

11:24 dnolen: sritchie: yep

11:24 sritchie: it really doesn't matter, just needs to be on the classpath

11:24 sritchie: cool, thanks

11:30 dysfun: sveri: amusingly, i'm working on this already. i have a CMS-backed app for a microsite that stores all the content in a single edn file and i want to present it to the user

11:31 (that is i'm building the library that generates forms for the given edn)

11:36 timvisher: i'm trying to write a shared library that will provide the canonical `(start|stop)-server!` behaviors to all of our services rather than having to write them all over and over again. i usually use a var reference (?) for my ring-handler to pass it to `run-jetty` like `(run-jetty #'app ...)` so that I can live edit the handler and have the changes pass through to jetty. i _think_ i'm running into an issue with this pattern wh

11:36 can't be passed in to the library and still be resolved. is there a workaround for that?

11:38 bah. doesn't look like it was the issue anyway... maybe

11:38 i don't really understand what `#'var` does

11:41 kolov: I need help with cemerick/friend Trying to use it with the new google OpenIdConnect (works fine with the old). Nothing wrong with friend itself, but openid4java fails. I can't make it work with the demo at https://code.google.com/p/openid4java/

11:42 Someone using friend (or OptnId4java) with google OpenIdConnect or linkedin?

11:44 cemerick: kolov: my understanding is that OpenIdConnect is an "identity layer" on top of oauth2

11:44 so, openid4java (and thus friend's existing OpenId support) are irrelevant

11:45 kolov: see https://github.com/cemerick/friend/issues/117

11:45 kolov: Let me see exactly what google said exactly. I constructed a url and passed it the same way I did wit 2.0

11:47 I am reading this page https://developers.google.com/identity/protocols/OpenID2Migration#openid-connect , Migrating to OpenID Connect (OAuth 2.0 for login)

11:49 I understand it is still Oauth 2.0 wit a new URL: Open Id Connect = OAuth 2.0 for Login (OpenID Connect).

11:51 it also fails with linked in ( I mean, both my program using friend and the openid4java demo, in the same way).

11:52 cemerick, if I pass the new URL (still oauth2) openid4java dies with a NPE

11:52 cemerick: kolov: OpenId != oauth2

11:53 (That they called this new thing "OpenIdConnect" when it's actually an oauth 2 mechanism is obviously not helpful.)

11:53 kolov: oops :-)

11:53 cemerick: kolov: see the friend issue I linked above; that's the furthest anyone has gotten with friend + OpenIdConnect AFAIK

11:54 kolov: thank, I'll have a look

12:14 timvisher: should i be able to pass a ring handler var into another namespace and have ring-jetty-adapter/run-jetty work?

12:18 mavbozo: timvisher, you can :require :refer the var in another namespace

12:18 timvisher: mavbozo: would that be different than passing it in?

12:19 mavbozo: timvisher, sorry, i dont quite get what you mean by 'pass' into another namespace

12:20 timvisher: sorry, so the context is that i'm trying to create generic `(start|stop)-server!` functions to share among the services at my shop

12:20 to do that, i need to pass in the handler so that `run-jetty` can wrap the right thing

12:21 i think i might have figured it out though. and this would be the second time today that i was editing a local copy and not the thing on my vm...

12:21 justin_smith: timvisher: do you mean like (web-ns/start-server! #'this-handler) -- that should totally work, and the server should see any live updates to the handler definition

12:21 * timvisher should never open tramp and local at the same time...

12:21 justin_smith: haha

12:22 timvisher: justin_smith: exactly that

12:22 justin_smith: timvisher: do you have that buffer naming feature where the file gets prefixed if it has the same name?

12:22 timvisher: justin_smith: i do. i'm also fairly blind to it :)

12:22 i do remember life before uniquify buffers though

12:22 and it was no fun :)

12:23 justin_smith: and here I thought I might have a helpful suggestion

12:24 timvisher: justin_smith: lol. you're always very helpful. :)

12:24 there's some ui principle that headsup help quickly becomes invisible to most users, right?

12:25 justin_smith: oh yeah, anything that is constantly present tends to become invisible

12:25 * justin_smith vanishes.

12:25 mavbozo: like y/n from rm

12:26 oh wait, that's when people use rm -i alias

12:28 timvisher: mavbozo: heh. i have `alias rm=rm -rf` :)

12:28 _do._ _it._ _live._

12:29 * timvisher is _so_ kidding about that alias

12:35 mavbozo: timvisher, lol, for a few seconds there, i thought you are one of those who realize the impermanence of things

12:36 timvisher: mavbozo: that almost sounds desirable :)

12:36 is there a way to make in-ns safe from creating a new ns by accident?

12:36 i thought `(in-ns (find-ns ...))` but in-ns takes a symbol not a namespace

12:37 noncom: (when (find-ns ..) (in-ns ..)) ?

12:37 justin_smith: ,(#(when (find-ns %) (in-ns %)) 'foo)

12:37 clojurebot: nil

12:38 timvisher: that's sort of sucky...

12:38 :)

12:38 any of the util libs out there have a wrapper for that?

12:39 justin_smith: timvisher: I just gave you function that does it, I don't think you'll find anything simpler

12:39 timvisher: justin_smith: yeah. just wondering if there was a switch-ns function out there. it's obviously incredibly easy to write

12:39 thanks! :)

12:42 gfredericks: tcrawley: ping

12:43 arrdem: $seen andyf

12:43 lazybot: andyf was last seen quittingPing timeout: 246 seconds 2 days and 13 hours ago.

12:50 gfredericks: is there a library of utilities to nicen up clojure.test a bit? if not should one exist?

12:51 justin_smith: "I know you're code is perfect, but I'm sorry to say that I couldn't get the following tests to pass, maybe we misunderstood?"

12:52 gfredericks: eh?

12:52 justin_smith: bad joke

12:52 gfredericks: ooh

12:52 I see it

12:53 schmir: gfredericks: humane-test-output

12:53 timvisher: gfredericks: humane-test-output indeed is one, but what exactly are you nicening up?

12:55 gfredericks: ah not the output

12:55 more the API

12:55 e.g.

12:55 docstrings for deftest; alternate docstring ordering for is

12:55 maybe fixtures could be improved?

12:56 I can't remember if it's still difficult to run a single test with fixtures

12:56 there could also be something for people who hate naming their tests with symbols

12:57 not sure how that would go exactly though

13:11 mpenet: like clojure.test/testing? I think symbols make sense in def* forms

13:11 gfredericks: yeah they're idiomatic but if you really like naming tests in english it can get redundant

13:11 mpenet: I find clojure.test pretty good already, it's true that fixture are a bit lacking tho

13:11 justin_smith: mpenet: yeah, I pretty much use clojure.test/testing as a replacement for doc-strings on deftest

13:12 gfredericks: so you might do (deftest some-name "and a docstring" ...) or (a-different-testing-macro "with only english here, no symbol" ...)

13:12 depending on taste

13:13 justin_smith: without the symbol, reloads are a problem

13:13 gfredericks: depending on what it does

13:13 one idea is hashing the string to generate a var name

13:14 tcrawley: gfredericks: what up, my man?

13:14 gfredericks: tcrawley: I was diagnosing a dependency conflict involving immutant (1.0.2, so maybe irrelevantly old) and core.cache; I was looking at the project.clj for immutant-cache and was totally confused

13:15 there seems to be this dumb backwards compatibility issue between core.memoize 0.5.5 vs 0.5.6 and I keep running into it

13:15 I couldn't tell if newer versions of immutant had upgraded or not

13:16 tcrawley: well, immutant 1.x is confusing. the stuff in namespaces/cache/project.clj will only be used if you load the cache dep *outside* of Immutant

13:16 modules/cache/project.clj is what is used inside

13:16 I think

13:16 it's all fuzzy now

13:17 but 1.1.2 (the last 1.x release) still depends on core.cache 0.5.5

13:17 gfredericks: I have a workaround for now; not sure if it's worth sorting out

13:17 oh okay; does 2.x upgrade?

13:18 tcrawley: we've struggled with core.cache/core.memoize issues quite a bit with immutant 1.x

13:18 immutant 2 doesn't have a dep on either

13:18 you bring your own

13:18 gfredericks: oh cool; it gets more confusing because I don't think this application actually uses immutant O_O

13:19 tcrawley: see http://immutant.org/documentation/current/apidoc/guide-caching.html#h5326

13:19 heh

13:19 gfredericks: so it can probably be deleted

13:19 anyhow thanks for summarizing the deps story

13:19 tcrawley: glad to help

13:19 in some small way

13:19 gfredericks: :)

14:21 yogthos: Frozenlock: not that I know

14:21 Frozenlock: yogthos: Ok, thanks

14:21 That cross channel communication...

14:22 mavbozo: yogthos, thanks for wrapping yuicompressor in asset-minifier

14:22 (inc yogthos)

14:22 lazybot: ⇒ 2

14:23 yogthos: w00t! :)

14:23 mavbozo: yogthos is underappreciated here

14:23 justin_smith: 'tis true

14:23 (inc yogthos)

14:24 lazybot: ⇒ 3

14:24 yogthos: d'aww thanks guys :)

14:25 Frozenlock: mavbozo: only if you associate appreciation with lazybot karma points ;-)

14:34 nuwanda_: has anyone had any trouble adding env variables in project.clj using environ? It's so simple, and I've done it before without an issue, but it's not working in a new project for some reason.

14:35 sveri: nuwanda_ actually I never got it working

14:35 especially when passing them in from the "outside"

14:35 mavbozo: nuwanda_, never been a problem

14:35 arrdem: using it quite successfully in Grimoire... what's the issue?

14:36 mavbozo: (inc weavejester) ;; for environ

14:36 lazybot: ⇒ 13

14:36 arrdem: (inc weavejester)

14:36 lazybot: ⇒ 14

14:36 expez: If I want to use the previously generated test.check value to generate another value. How do I nest this stuff? E.g. I might first generate a string, and then generate an int which is bounded by the length of said string.

14:36 I tried just nesting gen/for-all but the inner thing would never run

14:37 arrdem: expez: I think you want to write a composite generator returning a pair [int str] or some such

14:37 * mavbozo will inc every person for each library used

14:37 reiddraper: expez: https://github.com/clojure/test.check/blob/master/doc/intro.md#bind

14:37 nuwanda_: well, environ is creating the env map just fine, I've checked in the repl, but it's not merging with the :env map I have in :profiles, :dev

14:37 arrdem: (doseq [lib libs author (authors lib)] (inc author))

14:37 reiddraper: expez: or https://github.com/clojure/test.check/blob/master/doc/intro.md#fmap

14:38 expez: your example could be done with fmap

14:38 expez: reiddraper: can I create the keyword-vector in a prop/for-all binding instead of as a toplevel def?

14:39 reiddraper: expez: if i understand you correctly, no

14:39 expez: but, maybe an example would help

14:42 mgaare: nuwanda_: do you have the lein-env plugin in your project file?

14:43 expez: reiddraper: https://gist.github.com/expez/93525e807028df691c35 this test passes

14:43 reiddraper: expez: nested properties are not supported at the moment

14:44 expez: reiddraper: which surprised me, but I guess it somehow makes sense because it's wrong and the inner block never runs

14:44 reiddraper: i'd like to support them sooner than later, but, for now, you'll need to make a generator which returns your `s` and `sep` as a two-tuple

14:44 expez: aight

14:49 timvisher: is there a good way to retrieve the running version of a clojure application (i.e. the project.clj version string) that doesn't care whether you it was `lein run` or `java -jar` that started it?

14:51 expez: reiddraper: will you accept a pull request making such nonsense fail in the meanwhile? I thought all my tests were golden, but I was just lucky the implementation was correct :/

14:51 the-kenny: timvisher: system/getproperties seems to contain {"pepa.version" "0.1.0-SNAPSHOT"} for me. pepa is the project name.

14:52 reiddraper: expez: pull request no, jira patch, yes

14:52 expez: https://github.com/clojure/test.check/blob/master/CONTRIBUTING.md

14:52 timvisher: the-kenny: is that also in your uberjar?

14:52 the-kenny: not sure, sorry

14:52 timvisher: cool. i can test it

16:26 lvh: hey!

16:26 how do I compile reagent-template down to a static website?

16:27 teh template seems very hell-bent on producing something heroku-y; I wanted to deploy to github pages

16:32 dnolen: lvh: might want to ask that question again in #clojurescript

16:33 lvh: dnolen: thanks!

17:06 amalloy: tbaldridge: you mentioned in http://stackoverflow.com/a/29612902/625403 that fexprs are more powerful than macros. i can't figure out from the wikipedia page what makes fexprs more powerful - what fexpr can i write that has no equivalent macro definition?

17:14 tbaldrid_: amalloy: fexprs are run at run-time, not compiletime. So they execute every single time they are called. Macros run once, when they are compiled

17:15 amalloy: the advantage, i guess, being that you can use runtime data values to decide what code to produce/evaluate?

17:29 gfredericks: so to get something equivalent with macros you'd have to call eval I imagine

17:29 or something evallike

17:29 puredanger: they're very fexpressive

17:29 gfredericks: hey now

17:30 amalloy: gfredericks: well if you're calling eval you don't need a macro at all, just write a function

17:30 gfredericks: amalloy: need the macro to snag the &form

17:31 amalloy: wow what i just said was super wrong

17:31 tbaldrid_: right, so if you had fexprs you could write when like this: https://gist.github.com/halgari/78d44aabc6adc3b6ff56

17:32 so it's less about code transforms, and more about deciding when to eval arguments (or not).

17:33 gfredericks: that's a weird explanation since conditional evaluation is one of the ways people explain macro-power

17:33 or at least an example use case

17:34 amalloy: right, and when is an example of something that is just as easy to do with macros

17:34 gfredericks: as long as the set of forms you might want to eval is static you can do it with a macro

17:34 (static at compile-time I mean)

17:34 amalloy: actually i remember a SO question that might have a different answer if clojure had fexprs

17:35 http://stackoverflow.com/q/9345056/625403

17:35 you could, i guess, use fexprs to inject the keyvals of the map's runtime value into a let-binding

17:35 gfredericks: like for runtime-conditional shadowing?

17:40 amalloy: yeah

17:41 which as i remark in that answer sounds awful

17:41 but would be more natural with fexprs i guess

17:47 gfredericks: ~fexprs |are| a mechanism for doing awful things more naturally

17:47 clojurebot: c'est bon!

18:00 tbaldrid_: So I guess I see macros as a bit of a hack. In a classic meta-circular evaluator you have eval and apply, right. It seems that it's trivial in that case to mark some functions as being fexprs and hence skip the arg eval before the apply.

18:02 So in that way I've always seen fexprs as the cleaner approach. Macros requiring an extra compilation step. But I suppose you could just as easily put macros into such a interpreter by expanding macros on every invocation of the macro form.

18:36 TimMc: puredanger: fexprethive

18:37 *fexthprethive

18:38 I have my next repo name.

19:45 arrdem: andyf_: ping

19:45 andyf_: arrdem: pung

19:45 arrdem: andyf_: can I pursuade you to CC0 the examples I pulled from Thalia for Grimoire? https://twitter.com/arrdem/status/587856428661997568

19:46 andyf_: Link to what CC0 means?

19:46 arrdem: https://creativecommons.org/publicdomain/zero/1.0/

19:47 this would just apply to the examples of yours already in Grim, not to the Thalia project.

19:49 andyf_: Understood. Any reason why you choose public domain, rather than something more MIT- or 2-clause-BSD-like?

19:49 arrdem: andyf_: to harmonize with the fact that zkim CC0'd the examples that I seeded Grimoire with originally and which constitute about 80% of my data.

19:50 no real thought beyond that given to the question tho.

19:51 andyf_: Sounds reasonable. Best to send you an email acknowledging this?

19:51 arrdem: That'd be awesome. Thanks Andy.

19:55 gfredericks: andyf_: clojure/west? clojure/west? clojure/west?

19:55 andyf_: gfredericks: I was strongly considering it, but decided I'd rather put the money towards training and/or tutoring in web development for me

19:56 Something I've never really learned to do, but would like to get into as a serious hobby.

19:58 gfredericks: andyf_: I will refrain from mentioning my disappointment and instead wish you luck with your new endeavors

19:59 the key concept in web development is that no matter what you do you're doing REST wrong

19:59 andyf_: I'll definitely get to another Clojure conference some time. Definitely if nearer to where I live, or definitely if my talk submissions are accepted :)

20:01 gfredericks: the whole point of clojure/west is to be nearer to where andy fingerhut lives

20:02 andyf_: LOL. I guess I should add "and definitely when I'm no longer paying for college tuition for kids"

20:03 amalloy: andyf_: kick em to the curb. clojure is more important; they'll understand

20:04 gfredericks: college tuition: it's like paying for diapers, but if you wanted a whole lot of diapers

20:04 andyf_: Diapers for the mind

20:04 Wow, that sounds even worse after typing it.

20:05 tcrayford____: gfredericks: bjeanes says hi btw

20:05 gfredericks: hi G. Beans

20:07 (inc andyf)

20:07 lazybot: ⇒ 27

20:07 tcrayford____: (inc andyf)

20:07 lazybot: ⇒ 28

20:07 tcrayford____: (inc (inc andyf))

20:07 :/

20:07 amalloy: tcrayford____: no math allowed!

20:08 lasergoat: i'm curious about whether anyone's built something systematic for identifying points of pressure in core.async pipelines

20:09 i have a complicated pipeline and it would be useful to know where things are starving because downstream consumers aren't doing pulling stuff through fast enough

20:10 i'm sort of hacking something together but i figured i'd ask in case someone has already thought this through more carefully than me

20:29 bobby_: puredanger: Are there plans for a core.async build in the near future? Current (0.1.346.0-17112a-alpha) is getting a bit stale (i.e. impl doesn’t match doc w/r/t new features like poll! et. al., ClojureScript ioc_helpers.cljs doesn’t recognize (catch :default e), etc.)

20:29 puredanger: also, hello!

20:30 puredanger: and you and dnolen are doing a fabulous job with the language(s) and communities. It has ever been thus, but it’s been an experience seeing it from my new perspective.

20:32 timvisher: can i attach a docstring to a defonce?

20:34 justin_smith: ,(defonce ^{:doc "a foo"} foo 1)

20:34 clojurebot: #'sandbox/foo

20:34 justin_smith: ,(doc foo)

20:34 clojurebot: "; a foo"

20:35 justin_smith: it's clumsier than other things that create vars, to be sure

20:37 timvisher: justin_smith: awesome

20:37 there's a apparently a long standing bug about this...

20:37 http://dev.clojure.org/jira/browse/CLJ-1148

20:37 justin_smith: a bug or missing feature?

20:38 timvisher: why was a `;` attached to the output there?

20:38 ,(doc foo)

20:38 clojurebot: "; a foo"

20:38 timvisher: ?

20:38 justin_smith: timvisher: clojurebot is silly

20:38 timvisher: ah :)

20:38 justin_smith: timvisher: you'll see more normal output in a repl

20:38 gfredericks: ,(-> foo var meta :doc)

20:39 clojurebot: "a foo"

20:39 justin_smith: fun fact, if we changed that hash-map to {:doc "a foo" :test true} it would also be a terrible unit test that would not run properly

20:40 timvisher: justin_smith: why wouldn't it run properly?

20:40 justin_smith: timvisher: 1 isn't a function

20:40 but the metadata would tell clojure.test to run it

20:41 and then you get the predictable error

20:41 timvisher: hah

20:41 ah

20:41 justin_smith: sometimes the corners of clojure where things are made of string and chewing gum are amusing

20:50 timvisher: i have nrepl-server embedded in my service and the service is running on a vagrant vm

20:51 the nrepl port is forwarded (4006 in this instance) by vagrant

20:51 this is using cider-nrepl 0.8.2 and whatever version of tools.nrepl it depends on

20:52 when i try to connect to it from the HOST, it connects and then immediately disconnects with a 'connection broken by remote peer' error

20:52 justin_smith: does vagrant treat your machine as a local or remote host?

20:53 because nrepl should not be visible to remote hosts (it would be a huge security hole)

20:53 timvisher: i believe it treats it as remote

20:53 justin_smith: you may need to create a tunnel via ssh

20:53 ssh -L

20:53 timvisher: yeah, that's what i was afraid of

20:53 i _thought_ that vagrant forwards _were_ that

20:54 and indeed they work when i don't have the nrepl server embedded (instead relying on either ring nrepl or cider-nrepl as a plugin)

20:54 justin_smith: or let nrepl broadcast to if stuff forwarded from vagrant to you isn't forwarded from you to the wide world

20:54 timvisher: yeah, i'm going to try that just to rule it out

20:54 we've yet to decide on running nrepl in prod so we're still just talking dev

20:55 justin_smith: it's too bad unix domain sockets aren't portable to all the platforms clojure explicitly supports

20:55 timvisher: and of course things work swimmingly when i ssh -L the port

20:55 justin_smith: because they would be a much nicer model to work with security wise

20:55 of course :)

20:57 timvisher: justin_smith: i don't know anything about unix domain sockets :)

20:57 hah. does the trick...

20:57 justin_smith: timvisher: unlike network sockets you can use file permissions on them

20:57 timvisher: that's a shame...

20:57 justin_smith: oh nice.

20:58 justin_smith: timvisher: yeah, would work too, but make sure nobody else can access it, it's a huge security hole

20:58 timvisher: i feel like so much of web security is a half-assed reproduction of the unix file permissions model

20:58 justin_smith: timvisher: and unix was a half-assed reproduction of multics' security model

20:58 timvisher: justin_smith: eh, we actualy have an html repl hooked up that anyone can use, no big deal ;)

20:58 justin_smith: haha

20:59 I hope you have some kind of sandboxing at least? or is just just a machine you don't care about at all?

20:59 timvisher: justin_smith: no we don't actually have that

20:59 justin_smith: OK

20:59 timvisher: i'm basically the first one in my org who is doing interactive development at all

20:59 which is _crazy_ to me, but it's the situation

20:59 justin_smith: because I was gonna say they could also use that machine to attack the rest of your infrastructure

21:00 timvisher: so i'm taking care of setting up all the infrastructure, including the capacity to run nrepl in prod (which i _really_ badly want

21:00 )

21:00 elvis4526: how do you use not(x) with garden ?

21:00 timvisher: but in prod it _definitely_ should be binding to localhost so you can use ssh to access it but nothing else

21:01 if our ssh security fails, then pretty much all bets are off, so i'm comofortable with that

21:01 all the other secure transports make me nervous...

21:01 justin_smith: for good reason

21:01 timvisher: mainly because i don't understand their models as well as i understand ssh (which is actually not very well)

21:02 so this is pretty easy, i can environ this bind address so in dev we're on and all others would be default localhost

21:02 :swoon:

21:02 i love inventing all this stuff myself everytime i need it :)

21:02 didn't abedra give a talk about that or something :)

21:02 * justin_smith is clearly chopped liver.

21:02 timvisher: where's he gone by the way? is he still at etsy?

21:03 justin_smith: heh. ;)

21:41 puredanger: bobby_: hey man, an updated async build is overdue for sure. it turns out the async-103 stuff in it is bad and needs to come out. all just sidelined by other things atm.

21:42 bobby_: puredanger: thanks for the update! I’m sure things are busy there with Clojure/west looming. If I were to chip in, would a patch for async-103 help, or are there other blockers to getting a build out?

21:44 puredanger: bobby_: it's easier to just revert the commit I think. if you could take care of all my prep for Clojure/West that would help a lot ;)

21:44 bobby_: puredanger: hehe! good luck with the conference, it looks like a good lineup!

21:45 puredanger: no guarantees but I'll see if we can take care of it sometime this week

21:46 bobby_: puredanger: that would be great, but don’t lose sleep over it! my code will survive until after C/w.

22:17 timvisher: are transient dependencies not placed on the classpath?

22:17 i can `lein deps :tree` and see the dependency, but when i `lein run` the thing, it complains that it can't find it on the classpath...

22:18 TEttinger: I seem to recall a `lein classpath` command

22:19 timvisher: TEttinger: hmm...

22:20 puredanger: consider whether the jar actually contains the thing you think it does

22:20 by using "jar tf" on the jar in your maven repo

22:21 there is a failure mode of maven download that can write an html error page as a jar in your local repo

22:21 which is really fun to track down

22:23 TEttinger: wow puredanger

22:23 (inc puredanger)

22:23 lazybot: ⇒ 42

22:23 puredanger: SWEET

22:23 no one can inc me anymore

22:23 TEttinger: (inc the trials and tribulations of puredanger)

22:23 lazybot: ⇒ 1

22:24 TEttinger: (identity TEttinger)

22:24 lazybot: TEttinger has karma 50.

22:24 TEttinger: (identity amalloy)

22:24 lazybot: amalloy has karma 257.

22:24 TEttinger: wowza

22:27 puredanger: but see amalloy cheats by being super-smart. that's not fair.

22:27 where can I cash these karma points in anyways?

22:28 timvisher: puredanger: at Fake Internet Bank of course...

22:28 puredanger: probably equivalent to some bitcoins

22:28 amalloy: says the guy who convinced cognitect to release same-day videos, shamelessly cheating his way into dozens of karma points

22:29 puredanger: I think lynn had more to do with that :)

22:30 but I'm happy to take the credit in her absence

23:55 brainproxy_: ,(let [x {}] (= x (vary-meta x assoc :a 'bc)))

23:55 clojurebot: true

23:55 brainproxy_: ,(let [x (fn [])] (= x (vary-meta x assoc :a 'bc)))

23:55 clojurebot: false

23:55 brainproxy_: ^ is that just how things are?

23:58 noidi: huh

23:58 looks like a bug

23:59 justin_smith: brainproxy_: {} has structural equality, fn has none

23:59 brainproxy_: when you vary-meta, you create a new object

23:59 fn only has object identity

Logging service provided by n01se.net