#clojure log - Sep 27 2013

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

0:13 kennylovesroaste: the nice thing about non-OO functional systems like clojure is that they conform to modern C++ systems that are not OO

0:13 entity-relationships

0:14 chord: kennylovesroaste: you gonna work on a rts or rpg game made in clojure?

0:14 kennylovesroaste: another case where OO just fails

0:14 chord: no, just an AI system possibly

0:14 Cua: if you have to name one simple project with idiomatic clojure code, which will you choose?

0:14 I am looking for clojure example to get the 'feel' of it, reading clojurescript compiler atm

0:14 kennylovesroaste: I would do an AI system in clojure and the engine in C++

0:15 TEttinger: Cua, that's a good question.

0:15 I imagine lein is pretty large

0:15 Cua: it seems quite... different from other languages I have touched, and I even touched a few FP ones

0:15 brehaut: Cua: ring is good. lein is large but technomancy tries to make it approachable

0:15 TEttinger: $google github Raynes

0:15 lazybot: [Raynes (Anthony Grimes) · GitHub] https://github.com/Raynes

0:16 Raynes: ohai

0:16 Cua: brehaut: TEttinger thank

0:16 TEttinger: Raynes, you write idiomatic clojure code right?

0:17 Raynes: Uh, I certainly hope so.

0:17 kennylovesroaste: trying to look for good examples, but modern AAA game programmers totally reject classical OO patterns

0:17 chord: kennylovesroaste: what kind of AI are you trying to dio

0:17 TEttinger: heh. I was just looking for a nice bunch of clojure repos for Cua to browse

0:17 kennylovesroaste: chord: : simulation of group behavior

0:17 * Cua is reading clojurescript source, feels like his brain is going to explode

0:18 sm0ke: hey if my clojure code turns bad in one night how do i debug it..i swear it was working last night :D

0:18 Raynes: Clojure code rarely has an expiration date.

0:18 sm0ke: stupid cosmic rays

0:18 brehaut: sm0ke: did you reload in your repl a bunch?

0:19 kennylovesroaste: i'm still trying to feel my way around clojure for repl programming, because i love stepping through code which is kindof shunned in the clojure community

0:19 Raynes: It's best to use it within a week of opening though.

0:19 sm0ke: brehaut: yea i did that

0:20 brehaut: sm0ke: you probably have a var that you changed the name of being referenced. when you reloaded the namespace the old name stayed and the new name appeared, but code was calling the old name

0:20 sm0ke: or seomthing along those lines

0:20 TEttinger: Cua: https://github.com/Raynes/refheap seems pretty well-organized

0:20 chord: kennylovesroaste: what does simulation of group behavior mean exactly

0:20 Cua: oh, nice, simple but useful example

0:20 thank again

0:21 TEttinger: Cua, it isn't exactly small, but all the parts are small so it shouldn't be total overload

0:21 sm0ke: brehaut: just before sleeping last night i remember i moved my file to a new folder and changed my namespace...thats all i did

0:21 TEttinger: thank Raynes!

0:21 Raynes: You're welcome peoples!

0:21 kennylovesroaste: http://www.gamasutra.com/view/feature/3382/implementing_a_group_behavioral_.php

0:22 Cua: TEttinger: to me FP seems easier to grasp, if a function 'feels' correct, then it is unlikely to screw you up later on

0:22 kennylovesroaste: chord: forget graphics, get your AI down first

0:22 Cua: (also I have absolutely no experience with Java, read the essay 'Kingdom of nouns' back then and don't to touch it, ever)

0:22 TEttinger: kennylovesroaste, you might like dijkstra maps (a generalization of dijkstra pathfinding)

0:23 kennylovesroaste: chord: : specifically large world, human world interactions

0:23 chord: : people I know have been contacted to do simulations on large world AI + human dynamics

0:23 TEttinger: kennylovesroaste: http://paleoludic.com/writing/whitespace-reasoning/ http://paleoludic.com/writing/a-pathfinding-primer/ http://paleoludic.com/writing/engineering-pds/

0:24 kennylovesroaste: TEttinger: yep

0:24 chord: kennylovesroaste: overrated

0:24 TEttinger: I have a clojure implementation, it turns out pretty fast in practice

0:25 kennylovesroaste: the dynamics of large scale human and AI agents is interesting

0:25 mostly because of humans are very good at exploitation

0:25 it's easy to just spawn mobs and AI them

0:26 but dynamic graphs of human graph change is very hard when you have constraints

0:26 TEttinger: have you seen tucker's kobolds?

0:26 kennylovesroaste: no

0:26 didn't read the whole article

0:26 will do

0:27 TEttinger: http://www.tuckerskobolds.com/ excellent example of AI gone horribly wrong

0:27 kennylovesroaste: that's the thing

0:27 TEttinger: (for the players)

0:27 (great for the world)

0:27 kennylovesroaste: when you get funky with AI and humans are smart as hell and they exploit it

0:28 i'd love to exploit minecraft

0:28 wish we had the real source code

0:28 just to explore things

0:29 the old school mud guys know some things :)

0:30 sm0ke: Aha i added this zookeeper-clj dependency which fu**ed up the logging deps.

0:31 why would he directly include log4j instead of -api!!

0:31 seriously this log4j slf4j and all 4js for logging are turly nuisance in java

0:32 8 out of 10 runtime conflicts are due to logging apis

0:32 what the jar hell

0:33 kennylovesroaste: what is the normal HOME for Emacs...gonna bite the bullet

0:34 even though i hate "text editors"

0:34 yogthos|away: : you love eclipse right?

0:34 why can't i script eclipse, intellij like emacs

0:35 and have org-mode too

0:36 sm0ke: eclipse is the internet explorer of java world.

0:37 kennylovesroaste: can i paste something about AI and why classical OO is wrong?

0:37 Objectification It is profitable for an actor not to think about what it can do. It should project its capacities onto the world around it, asking what the world can do for it. This is a very practical view, but it seems strange because we use it automatically, without understanding it. An everyday object like a hammer seems to be for driving nails and, if it has a claw, for pulling them; this is the only property of a hamme

0:37 sm0ke: so lately i am finding myself wrapping up everything inside a go or future where there is a blocking code..like a network socket read etc...am i doing this right?

0:37 kennylovesroaste: actors don't do shit

0:37 sm0ke: kennylovesroaste: what is it with you and hate for OO?

0:37 kennylovesroaste: things don't do shit

0:37 sm0ke: : i hate classical OO

0:38 it's wrong

0:38 sm0ke: kennylovesroaste: what's wrong about it?

0:38 kennylovesroaste: methods and data structures don't belong together

0:38 sm0ke: kennylovesroaste: why not?

0:38 kennylovesroaste: just wrong

0:38 can't explain it...ask the Common Lisp guys

0:39 generic methods

0:39 multi-methods

0:39 Raynes: In my experience, people don't much like it when you say bad things about something without a solid backing on why you think said thing is bad.

0:39 sm0ke: what about it?

0:39 kennylovesroaste: it's just wrong that data and methods are together

0:39 plain wrong

0:39 sm0ke: wow he is religious

0:39 about OO being wrong

0:40 kennylovesroaste: no, Common Lisp generic functions and multi-dispatch is right

0:40 that's OO in my book

0:40 tbaldridge: kennylovesroaste: not that I don't agree with you, but you can't just make statements like that without backing it up...you won't last long arguing with someone who actually knows how to use OOP correctly.

0:40 Raynes: THESE THINGS ARE WRONG AND THESE THINGS ARE RIGHT AND I DON'T KNOW WHY.

0:40 kennylovesroaste: i don't have to back it up. it's just the way i feel

0:40 sorry

0:40 methods and data are separate

0:40 sm0ke: :D you sir are wrong

0:41 kennylovesroaste: sm0ke: : ask Rich about that

0:41 tbaldridge: coding by feeling is always a bad idea,

0:41 it just feels wrong

0:41 kennylovesroaste: ask rich how he feels about methods and data being in the same "group"

0:41 noonian: tbaldridge: lol

0:42 kennylovesroaste: rich will tell us why it's wrong

0:42 fine

0:42 i'll tell you why

0:42 mischov: Raynes: wrong all the things!

0:42 kennylovesroaste: because then you have first-class methods

0:42 sm0ke: i think i am going to coin a new term "lisp fanboys"

0:42 kennylovesroaste: and other methods acting on your objects

0:42 it's bullshit

0:43 total bullshit

0:43 tbaldridge: kennylovesroaste: so is it attaching methods to objects, or mutability?

0:43 kennylovesroaste: smalltalk greybeards that taught us wrong

0:43 attaching a method to an object is wrong

0:43 plain and simple

0:43 we have data and functions

0:43 tbaldridge: kennylovesroaste: so what are protocols in Clojure?

0:44 xeqi: &(partial merge {:a 2}) ;; apparently this is wrong

0:44 lazybot: ⇒ #<core$partial$fn__4070 clojure.core$partial$fn__4070@1e34443>

0:44 kennylovesroaste: you tell me

0:44 the answer to the expression problem?

0:44 Cua: kennylovesroaste: by 'attaching' you mean 'this object owns the method, other non-inherited objects can't use it?'

0:45 kennylovesroaste: it's a first class thing

0:45 for example, my day job

0:45 extension methods

0:45 * Cua 'feels' clojure protocol or Google Go methods make sense

0:45 kennylovesroaste: it just feels wrong that any method is attached to a DTO

0:45 Cua: make sense = easy for my brain to digest, just me though

0:46 kennylovesroaste: what we call in the .net world

0:46 we have data structures and we have functions

0:46 old school

0:46 chord: i need a "Learn you a clojure" book

0:46 kennylovesroaste: why do some methods are first class

0:46 chord: whats the best one out there

0:46 sm0ke: so whats the idiomatic way for doing tasks which block and also communicate with them in clojure? e.g. a socket which blocks on receive but still can be written on from somewhere else?

0:46 kennylovesroaste: and then we have to artifically attach methods ex-post-facto

0:46 to some object

0:46 total bullshit

0:47 plus, multi-methods are the way to go

0:47 be declarative

0:47 sm0ke: before this in scala i used to do concurrency with actors..which also guarantee thread safety for local objects

0:47 kennylovesroaste: declare your intention with multimethods

0:47 tbaldridge: kennylovesroaste: then why did rich add protocols?

0:48 kennylovesroaste: tbaldridge: : from what i remember, a great way to interop with java and plus very, very fast...multimethods are slow

0:48 yes, multimethods are slow

0:49 i only like clojure for the semantics

0:49 hate lisp and the syntax

0:49 sm0ke: kennylovesroaste: do you know that clojure is a lisp?

0:49 tbaldridge: oh great one more of these guys...

0:49 kennylovesroaste: tbaldridge: : no dude, i accept what clojure is

0:50 tbaldridge: : i said nothing more..clojure is great

0:50 don't get stupid on me about how I have to accept s-expression

0:50 scottj: tbaldridge: when I started watching your screencast and I saw you were using multimethods I was like "I bet he's going to run into that annoying multimethod redefinition issue". That thing is so annoying (and what's most annoying is that it hasn't always been there).

0:50 sm0ke: f*ck it , i need to get a book

0:50 kennylovesroaste: that's idiot

0:51 tbaldridge: sm0ke: yeah I hate that

0:52 kennylovesroaste: tbaldridge: heh, have they solved multimethods in scala yet?

0:53 tbaldridge: : big debate on LTU many moons ago

0:53 'ye old expression problem"

0:53 tbaldridge: I don't know about scala, but I used multimethods in C#

0:54 sm0ke: wtf...everyone has multimethods...even java

0:54 i think polymorphic methods translate to multimethods?

0:55 jonasen: tbaldridge: Great video on macros

0:55 tbaldridge: sm0ke: not really

0:55 sm0ke: i dont know much clojure to know subtle differences though

0:55 chord: so how question how do I write the main function in clojure...

0:55 tbaldridge: sm0ke: multimethods have a dispatch fn that decides how things are dispatched

0:57 sm0ke: chord: defn -main [] ?

0:58 chord: why the hell is it -main and not main

0:58 Apage43: (clojure.java.shell/sh "open" "-a" "Starcraft.app")

0:58 sm0ke: chord: haha man you are worse than me in clojure i see

0:58 chord: i think its just a convention

0:59 chord: ok seriously i need a book

0:59 i need a book that explains why there are these conventions

0:59 Apage43: (:gen-class) expects the fns in its namespace that it makes into methods on the generated class to have a prefix, - is the default

0:59 sm0ke: chord: like functions in clojure which have side effect a written with a bang like sideeffect!

0:59 Apage43: you can change it

1:00 chord: wtf is (:gen-class)

1:00 sm0ke: Apage43: Ah i see

1:00 callen: Frightened and angry Haskell user. Tonight is a good night.

1:00 Apage43: http://clojuredocs.org/clojure_core/clojure.core/gen-class

1:00 chord: Apage43: WTF WHY IS MAIN FUNCTION SO COMPLICATED

1:01 sm0ke: Apage43: but is the gen class implicit for every namespace?

1:01 Apage43: no

1:01 xeqi: why is it called main?

1:01 I want it to be -core

1:01 Apage43: classes aren't generated unless you put a (:gen-class) in your (ns) form

1:01 callen: why is it called?

1:01 why is it?

1:01 why is is?

1:01 why is?

1:01 why?

1:01 clojurebot: why is the ram gone is <reply>I blame UTF-16. http://www.tumblr.com/tagged/but-why-is-the-ram-gone

1:01 callen: ?

1:01 Apage43: (if you make a uberjar without adding it to the ns with your -main, you won't be able to java -jar it)

1:02 chord: Apage43: wtf who thought it was a good idea to complicate main with (:gen-class)

1:02 sm0ke: Apage43: so you are saying when you decalre a :main in lein..it adds a gen-class ?

1:02 Apage43: sm0ke: no, it doesn't

1:02 sm0ke: eee

1:02 Apage43: it works fine with lein run if you don't

1:02 but if you want a standalone jar

1:02 TimMc: Go home, callen, you're drunk.

1:02 Apage43: you'll need to add it

1:03 callen: TimMc: just pre-competition jitters and memories of philosophizing

1:03 tbaldridge: jonasen: thanks

1:03 Apage43: you can ignore gen-class for -main if you don't want an executable standalone jar

1:03 chord: ok you know that clojure is a piece of shit when its harder to understand hello world clojure over hello world clojure

1:03 over hello world python

1:04 callen: Hickey's Design and Composition talk addresses this.

1:04 sm0ke: :D

1:05 chord: callen: i need your clojure book NOW

1:05 noonian: ,"hello, world"

1:05 clojurebot: "hello, world"

1:07 callen: chord: if it's going to make people like you write clojure, then I shouldn't write the book.

1:07 TimMc: snrk

1:07 arrdem: pwnt

1:07 sm0ke: chord: what are you trying to write in clojure?

1:07 chord: callen: i'm going to learn clojure JUST TO SPITE YOU

1:08 tbaldridge: http://31.media.tumblr.com/tumblr_lmhjcvHNao1qewg7lo1_250.gif

1:08 chord: sm0ke: right now i'm trying to get to the point of using JOGL

1:09 sm0ke: chord: whats stopping you?

1:09 arrdem: wow I got off light... 95% of #clojure's logs only translates to about 1.68M messages not the 5M I was estimating

1:09 chord: sm0ke: I DON'T UNDERSTAND HOW TO MAKE MAIN

1:09 arrdem: chord: :gen-class is indeed a difficult thing to type

1:10 kennylovesroaste: chord: no caps bro

1:10 callen: I got a reaction gif out of tbaldridge? Today is a triumphant today.

1:10 kennylovesroaste: chord: people will help you

1:10 Apage43: lein new app starcraft

1:10 callen: I fully expect these good auspices to mean my team will win Clojure Cup.

1:10 chord: arrdem: why do i need to understand :gen-class, even c++ main function is simpler, that is just wrong

1:10 callen: lein new starcraft mai-clone

1:10 sm0ke: chord: writing in CAPS wont help either...did you know about lein??

1:10 lazybot: sm0ke: Definitely not.

1:10 arrdem: Apage43: an app I can get behind!

1:10 tbaldridge: callen: it doesn't help that the client I'm currently working with requires an animated gif on every commit

1:10 callen: tbaldridge: <3

1:10 noonian: chord: because most of the time using clojure, you never need to do what you are trying to do

1:10 chord: sm0ke: I'm using eclipse so I don't know whats going on in the backgroud

1:10 kennylovesroaste: non P.C their asian

1:10 arrdem: tbaldridge: I'm so sorry

1:11 Apage43: (if you use "lein new app <projectname>" it creates main *for* you)

1:11 tbaldridge: lol

1:11 kennylovesroaste: that's how asians communicate

1:11 callen: kennylovesroaste: they're*, unless people own asians now.

1:11 kennylovesroaste: "give me the codes"

1:11 muhoo: this is feeling kind of icky

1:12 callen: muhoo: I'm sure that's how my one dollar bills feel on the weekend.

1:13 muhoo: oh, having fun at the O'Farrell?

1:13 chord: arrdem: explain what i need to do here to make this work https://gist.github.com/anonymous/6724234

1:13 kennylovesroaste: muhoo: : almost my last name

1:13 callen: muhoo: not lately, but the prevalence of such institutions helps to make slurs against my own character more believable than they need to be.

1:13 kennylovesroaste: muhoo: : but english instead of irish

1:13 arrdem: chord: you just need to add a (:gen-class) to your (ns), after you get a better attitude

1:13 muhoo: kennylovesroaste: in joke, sorry, callen lives in san francsico, look up "mitchell brother's o'farrell theater"

1:14 kennylovesroaste: muhoo: : ahh..i'm a Ferrell..it's english

1:14 amalloy: muhoo: when i was in sf i lived right across the street from there

1:14 muhoo: hahah, in the TL? wow

1:14 arrdem: chord: although if you `lein run -m rts.core` it may just work without the gen-class

1:14 callen: amalloy is a hero to inspire us all.

1:15 kennylovesroaste: do you guys learn to live without debugger?

1:15 callen: kennylovesroaste: yes

1:15 kennylovesroaste: i love a stepping

1:15 steppin;' is fun for me

1:15 callen: Referentially transparent code doesn't need it as much and stepping is more tedious than trace dumps.

1:15 kennylovesroaste: step and see locals and such

1:15 amalloy: muhoo: yeah, 888 Ofarrell is actually a pretty nice building, despite being on the edge of the TL

1:15 callen: deftrace > n n n n n n n n n n n n n n shit...went too far.... n n n n n n n n n n s n n n n n s

1:16 muhoo: i find referential transparencey doesn't help when you have a chain of 12 referentially transparent functions and a bug somewhere in them.

1:16 in between them, most ofte

1:16 noonian: kennylovesroaste: I just use print and pprint statements

1:16 kennylovesroaste: muhoo: : oh brother, chains of s-expressions

1:16 small funcs i guess

1:16 muhoo: (-> foo bar baz quux doh wtf omg)

1:16 callen: muhoo: I have emacs macros that inject deftrace across swaths of functions for me :P

1:16 kennylovesroaste: awesome, but when something goes wrong

1:16 muhoo: and there's a bug in what's passed between quuz and doh

1:16 callen: kennylovesroaste: when something goes wrong? use Ritz.

1:16 kennylovesroaste: yes, yes

1:17 callen: muhoo: the trace log shows what passed between quuz and doh.

1:17 kennylovesroaste: that's why i'm doing emacs

1:17 callen: it shows arguments and returns.

1:17 kennylovesroaste: and org-mode

1:17 muhoo: ~deftrace

1:17 clojurebot: Pardon?

1:17 kennylovesroaste: i'm not smart enough to debug dynamic languages

1:17 callen: people need to learn to use c.t.t - it's seriously good.

1:17 muhoo: ,(doc deftrace)

1:17 clojurebot: No entiendo

1:17 callen: kennylovesroaste: I had a stepping debugger in Python. Don't miss it anymore.

1:17 muhoo: :-/

1:17 callen: muhoo: https://github.com/clojure/tools.trace/

1:18 kennylovesroaste: callen: thank god for small functions

1:18 think about small functions

1:18 noonian: I tend to test the bits as I write them and then I only find myself lost debugging when I'm refactoring stuff

1:18 callen: trace is sufficient for referentially transparent functions that are sufficiently small. Only thing I'd like to add is conditional tracing based on arg/return predicates.

1:18 kennylovesroaste: our MVC C# is a mess with all that javascript

1:18 callen: noonian: my unit tests tend to cover that.

1:19 kennylovesroaste: to be honest though, clojure is still dynamic

1:19 callen: I can usually "sense" when a function needs a test.

1:19 tbaldridge: kennylovesroaste: sadly, C# can be done very nicely, just most people don't do it that way

1:19 kennylovesroaste: tbaldridge: : our client-side is a damn mess..hoping to introduce at least knockout

1:19 noonian: callen: do you have any advice on that? I've seen plenty of resources on how to test, but not what to test

1:19 kennylovesroaste: callback-after-callback-after-callback

1:20 tbaldridge: one app I worked on, I used functions, Linq.Expressions and DTOs to the nth degree, basically it ended up looking like Clojure code. lol

1:20 kennylovesroaste: i'm in the weeds this week

1:20 the C# isn't the problem

1:20 callen: noonian: probability of failure / degree to which I can fully encapsulate it in my mind at a glance (as a percentage)

1:20 kennylovesroaste: javascript is always the problem

1:20 tbaldridge: you could even port core.async to C# if you felt like it.

1:20 yeah

1:20 kennylovesroaste: we can't compile it

1:20 and see our resharper

1:20 callen: noonian: 50% likelihood first version is wrong? and I can only understand 50% of the implications? write a test that breaks out the expected cases.

1:21 including at least one or two pathological, depending.

1:21 kennylovesroaste: maybe i'm in the wrong channel and should be in #scala

1:21 callen: kennylovesroaste: see ya!

1:21 kennylovesroaste: even though i love, fucking love clojure semantics

1:21 callen: noonian: I don't test anything that's obvious.

1:21 kennylovesroaste: we'll miss your casual racism. Maybe chord can pick up the slack on that.

1:21 noonian: callen: thanks, thats a good way to look at it about knowing something probably isn't perfect but not what

1:21 kennylovesroaste: callen: : thanks dude

1:21 callen: : huh?

1:22 callen: kennylovesroaste: I'm teasing you for what you said earlier.

1:22 kennylovesroaste: i wanna hear about my causual racism

1:22 i'm not P.C!

1:22 callen: also my housemates are burning a raccoon on the stove and I'm going to lose my mind.

1:22 not being P.C. isn't a license to be a dick and make generalizations about people based on things they have no control over :)

1:23 kennylovesroaste: us white boys in america are the minority

1:23 whatever

1:23 i brought it up

1:23 you brought it up

1:23 sm0ke: hello i always keep getting a "Exception in thread "async-dispatch-4" java.nio.channels.CancelledKeyException" inside a go block..but the same code terminates elegantly inside a future?

1:23 tbaldridge: gist?

1:23 clojurebot: gist is http://gist.github.com/

1:23 callen: http://i.imgur.com/vdFA01K.png

1:24 kennylovesroaste: question

1:24 how do you debug deeply nested s-expression?

1:24 i don't get it

1:24 small funcs?

1:24 callen: the s-expressions are besides the point.

1:24 Write small functions.

1:24 noonian: run one of the expressions thats deeply nested and see if that works, then run the next one up with the return value of the first on as the arg, repeat until you find the bug

1:25 kennylovesroaste: so when you ->

1:25 you repl individual parts

1:25 callen: what noonian said if you're too lazy to defn the sub-components and deftrace all of it.

1:25 noonian: but you can usually guess where it is from the error, it is almost always an argument is not what a function expects

1:25 Brand0: does rich hickey ever log onto #clojure?

1:25 callen: I'm too lazy to do stuff manually, so I just use trace.

1:25 Brand0: last time I talked to him on IRC was in '08 or '09

1:26 definitely not in '10

1:26 that doesn't mean he wasn't around though.

1:26 there are lots of Cogni employees in here that could tell you a more precise answer :P

1:26 Brand0: thanks

1:26 kennylovesroaste: good community

1:26 love the semantics

1:27 love my static typing and python like syntax

1:27 i'll still hang out

1:27 just wish i could have it

1:27 callen: kennylovesroaste: are you Steven?

1:27 kennylovesroaste: we can't do programming in the large without static typing

1:27 no bro

1:27 just me

1:27 chris

1:28 callen: you talk to yourself in public just like this other solipsist that frequented the channel

1:28 kennylovesroaste: i'll do my own programming emacs and stuff, but can never ever introduce dynamic lisp into my team

1:28 love solopist

1:28 callen: solipsist.

1:28 kennylovesroaste: yes

1:28 sorry

1:28 noonian: kennylovesroaste: rich hickey wrote clojure so he could use it for programming in the large

1:29 kennylovesroaste: do you want to argue noonian ?

1:29 noonian: no

1:29 tbaldridge: kennylovesroaste: I beg to differ, I work daily on very large Clojure codebases, static types just get in the way

1:29 kennylovesroaste: i love clojure for anti-OO and it's seq semantics

1:30 tbaldridge: : cool

1:30 tbaldridge: you think you're more productive because you spend half your day re-writing your types to fit some new requirement.

1:30 sm0ke: i think clojure has type hints

1:30 kennylovesroaste: tbaldridge: : since our codebase is increasingly javascript i guess it doesn't matter

1:30 i just like static semantic help with the IDE

1:30 sm0ke: is that equivalent to static typing?

1:31 i mean does type hints catch compile time errors?

1:31 kennylovesroaste: since clojure isn't OO it's much easier on semantic help

1:31 Cua: isn't type hinting only for optimization

1:31 kennylovesroaste: sm0ke: : yes

1:31 Cua: for some cases

1:31 kennylovesroaste: but i want for teams our ides helping us out

1:32 i know it's hard core to think that we don't need help

1:32 callen: Clojure has the faculties of an OO language, just in a simpler and more composable form.

1:32 kennylovesroaste: but then you do Intellij or Resharper and then you realize

1:32 tbaldridge: kennylovesroaste: PyCharm would beg to differ about static typing needed for IDE support

1:32 kennylovesroaste: tbaldridge: : very hard, and heuristic

1:32 callen: I use Rope in Emacs with Python, IDE-esque support works fine.

1:32 kennylovesroaste: jetbrains are geniusis

1:33 sic

1:33 callen: no they aren't, lol.

1:33 sm0ke: this also seems interseting https://github.com/clojure/core.typed

1:33 Apage43: There's also light table-like stuff, which just instruments and traces your code

1:33 callen: they're a product company.

1:33 kennylovesroaste: they are very good at heuristics

1:33 Apage43: and you can see the data flow through it

1:33 kennylovesroaste: when you're dynamics then you're heuristic

1:33 and not absolute

1:33 noonian: Apage43: how do you configure that in light table?

1:33 tbaldridge: if Clojure is anything it's pragmatic, OO when you need it, functions when you need it, immutable except when you need immutability.

1:34 Apage43: dunno how to turn it on on files. In the instarepl its always on

1:34 noonian: I saw the kickstarter video but I haven't been able to get that working

1:34 kennylovesroaste: tbaldridge: : what do you say about clojure vs scala?

1:34 callen: tbaldridge: except when you need mutability*

1:34 Scala is tedious and mis-designed.

1:34 Apage43: I haven't really used it extensively, mostly because I am not very productive outside of vim or emacs

1:34 callen: if you could say it was designed at all.

1:34 kennylovesroaste: i'm amazed that clojure is beating out scala

1:35 as a dynamic typing and a lisp

1:35 amazing

1:35 i have my feelings

1:35 callen: kennylovesroaste: this is kind of tedious. do you come with a -q flag that restricts your output to Clojure stuff?

1:35 say, questions about how to do things?

1:35 you're less relevant than chord, and that dude tries his hardest to be irrelevant of anybody in here.

1:35 sm0ke: kennylovesroaste: sup odersky

1:35 kennylovesroaste: callen: tell OO people how to not do OO

1:36 sm0ke: :D

1:36 kennylovesroaste: callen: tell java/c#/Ruby/Python people how they've been doing it wrong

1:36 chord: callen: you think I will fail to learn clojure, BUT YOU ARE WRONG, i'm focused right now on figuring out this gen-class bullshit

1:36 kennylovesroaste: callen: i'm not chord

1:36 callen: Some childen grew up never being told to be quiet by their parents. Those children grew up to become chord and kennylovesroaste.

1:36 kennylovesroaste: you were made for each other.

1:37 sm0ke: this channel is entertaining today

1:37 callen: kennylovesroaste: speak for others' benefit, not yours. shush.

1:37 kennylovesroaste: callen: you hurt my feelings ;(

1:37 chord: callen: I'm going to get JOGL working without your help, and i'm not going to show the code to you

1:37 kennylovesroaste: i thought i had some insight about non-OO

1:37 Apage43: I read some code I would've rather not seen today

1:37 kennylovesroaste: i guess not

1:37 dissipate: Apage43, a coding horror?

1:37 noonian: can never be unseen lol

1:37 callen: Apage43: o rly? Do I need to share my transitive tree breakdown -> bag of entities -> tree rematerialization code to you?

1:38 because boy, do I have some horrors for you.

1:38 Apage43: callen: see, that'd actually be interesting

1:38 kennylovesroaste: callen: : what do you do for a living then?

1:38 Apage43: this was a coding challenge submission

1:38 kennylovesroaste: callen: : with your transitive tree breakdowns?

1:38 Apage43: (a coworker was challenging a canditate)

1:38 and the thing *didn't compile or run*

1:38 callen: I was top-down converting an arbitrarily embedded hierarchical data structure into bags of entities datomic understands with the metadata necessary to reconstitute the tree bottom-up from the nth-most children.

1:39 Apage43: the code had never been tried

1:39 kennylovesroaste: sounds like the clojure version of Tony Morris

1:39 too big for his britches

1:39 Apage43: just "hope it works!"

1:39 callen: and I was going from tree -> bag of entities -> back to tree

1:39 dissipate: Apage43, which language?

1:39 Apage43: Java.

1:39 kennylovesroaste: callen: like git?

1:39 noonian: chord: you need to ahead of time compile your code also for gen-class to work, i'm not sure how to do that from eclipse but its just a config option in leiningen

1:39 dissipate: Apage43, is it a Java shop?

1:39 callen: kennylovesroaste: nothing like git.

1:39 Cua: so what do you guys think about Scala vs Clojure? Yes I know I am in #clojure

1:39 Apage43: the position was a java position

1:39 callen: tbaldridge: if you run into anybody that's trying to coerce data from document stores to something datomic understands and back again...have them ping me :P

1:40 Cua: stop.

1:40 Cua: I looks at Scala and get this 'C++ like' feeling

1:40 so I choose the other one

1:40 callen: okay

1:40 callen: stop talking about things that aren't Clojure.

1:40 nobody cares what you think about Scala here or in #scala.

1:40 * Cua muted

1:40 callen: just code.

1:40 dissipate: Apage43, there in lies your problem. Java is a really low bar inherently.

1:40 tbaldridge: chord: just add -main to core.clj. Then add :main myproject.core to your project.clj and then do lein run from the commandline

1:40 kennylovesroaste: callen: talk about real world things then

1:40 callen: I was...just a moment ago.

1:41 kennylovesroaste: not about bags of trees

1:41 callen: I was talking about what I did at work today and yesterday.

1:41 dissipate: Apage43, hire for a Haskell position, or Clojure. the bar is raised.

1:41 callen: I'm working on a data warehouse, I have to turn the contents of a semantic database into something that works for Datomic.

1:41 that's as real-world as it gets.

1:41 kennylovesroaste: talk about how javascript sucks on the front end

1:41 Apage43: yeah but then I have to tell the haskell/clojure guy to write Java

1:41 =P

1:42 callen: Apage43: you use Java at your shop?

1:42 kennylovesroaste: and how callback to callback and callback sucks

1:42 Apage43: anyway I'm not the guy over this position anyhow

1:42 callen: Android

1:42 callen: #jobsIdoNotWant

1:42 tbaldridge: kennylovesroaste: use clojurescript on the front-end. problem solved. :-P

1:42 dissipate: callen, nobody seems to want to admit that they work at a Java shop or they run a Java shop

1:42 kennylovesroaste: talk about how i can deal with popups on the frontend

1:42 Apage43: specifically an Android library

1:42 callen: tbaldridge: Prismatic used to have a backend driven by CLJS on Node.js

1:43 dissipate: Apage43, was the code challenge on site or take home?

1:43 Apage43: dissipate: take home

1:43 kennylovesroaste: tbaldridge: :so i have a popup that needs to talk to the page

1:43 chord: tbaldridge: TOO LATE I ALREADY FOUND THIS Clojure Gently video : http://www.youtube.com/watch?v=dQ6hhnitzHg

1:43 dissipate: haha, if it was take home, that's an epic fail

1:43 kennylovesroaste: tbaldridge: : and we have ajax, jquery, and all sorts of mess

1:43 Brand0: does anyone here have much experience running pure clojure in the back end as web server? how does it scale memory-wise?

1:43 kennylovesroaste: it's a freaking mess

1:43 noonian: then the haskell guy will write haskell that writes java

1:43 kennylovesroaste: i'm in hell

1:43 javascript hell

1:44 callen: I think hell is debugging haskell-java.

1:44 brehaut: Brand0: it depends a lot on how much time you spend tuning your JVM

1:44 kennylovesroaste: and tomorrow when i sober up it'll be hell

1:44 callen: MonadVisitorPatternFactory

1:44 MonadTransformerParserCombinatorObserverSupervisor

1:44 clojurebot: excusez-moi

1:44 kennylovesroaste: ajax after callback after callback

1:44 Brand0: brehaut, do most people use J2EE?

1:44 (or do you?)

1:44 brehaut: callen: VistorMonadTransformerStateFactoryFactory

1:44 kennylovesroaste: sorry tbaldridge

1:44 just us brothers in the field

1:44 brehaut: Brand0: i would assume nearly nobody uses J2EE

1:45 dissipate: Apage43, good luck hiring a competent Java programmer. one reason why Java inherently has a much lower bar is because that's what all the universities teach. so someone goes to get their CS degree and they learn Java, and that's all they know pretty much. then they go out to find a job. Java is the herd, other languages thin the herd. hope that makes sense.

1:45 callen: brehaut: I now have a new favorite way to troll Haskell users. Write faux Haskell code with Factory in the name.

1:45 kennylovesroaste: can someone give a brother a framework for doing wizards in jquery

1:45 just simple shit

1:45 callen: kennylovesroaste: no. learn to code.

1:45 kennylovesroaste: callen: : fuck you

1:45 callen: kennylovesroaste: just simple shit - so just code it.

1:45 brehaut: step one: stop doing wizards. step two: stop using jquery. problems all solved

1:45 kennylovesroaste: callen: : i gotta deal with other assholes

1:46 callen: : knockout

1:46 Apage43: dissipate: yeah, pretty much true. Hiring is hard.

1:46 kennylovesroaste: i guess that's why i make 120k

1:46 callen: Apage43: my secret weapon in hiring is fizzbuzz.

1:46 kennylovesroaste: to solve problems

1:46 Apage43: yeah, I had this conversation today

1:47 callen: Apage43: are you sure?

1:47 Apage43: the guy's coding challenge was a little complex

1:47 callen: Apage43: it's the (inc (inc (inc fizzbuzz)))

1:47 Apage43: you start with vanilla fizzbuzz, but the difficulty steadily and smoothly ratchets up.

1:47 Apage43: and the point was made that even a really simple challenge filters out a *lot* of folks

1:47 callen: Apage43: I've never once had someone survive all stages of my fizzbuzz interview question.

1:47 Apage43: huh

1:47 kennylovesroaste: Apage43: : i would be filtered out, but i would produce on a team

1:47 Apage43: fun :)

1:48 kennylovesroaste: there's a difference

1:48 callen: Apage43: it's based on Dave Fayram's.

1:48 kennylovesroaste: you think all your brains can be leaders?

1:48 callen: Apage43: has about 6 or 7 stages, depending on whether they skip stages.

1:48 Apage43: starts with the standard fizzbuzz and then gets abstracted more and more.

1:48 brehaut: callen: aha brilliant. his fizz buzz is stunning

1:49 callen: brehaut: the trick was in producing something that steadily ups the difficulty across his version and beyond it.

1:49 dissipate: wtf? this fizz buzz thing is a joke right?

1:49 kennylovesroaste: fizzbuzz is simple shit, but that stupid mensa crap is bullshit

1:49 callen: it's the perfect interview question.

1:49 kennylovesroaste: you wouldn't get past stage 2 of my fizzbuzz :P

1:49 I guarantee it.

1:49 kennylovesroaste: maybe not

1:49 brehaut: http://dave.fayr.am/posts/2012-10-4-finding-fizzbuzz.html ← dissipate

1:49 callen: I've flunked out engineers that have been programming for 15 years at stage 2 or 3.

1:49 kennylovesroaste: but callen i'd lead you

1:49 callen: kennylovesroaste: you wouldn't.

1:49 kennylovesroaste: I don't answer to brainless dickwits.

1:49 kennylovesroaste: callen: you'd never lead anybody

1:50 callen: kennylovesroaste: I was the CTO of my last company.

1:50 kennylovesroaste: so that's patently false.

1:50 I lead a team of engineers.

1:50 kennylovesroaste: callen: : "your last company"

1:50 callen: yes, a startup.

1:50 chord: keenylovesroaste: you're doing a good job keep on trolling callen until I figure out this clojure shit

1:50 callen: we were funded.

1:50 kennylovesroaste: i'd put my brain against yours

1:50 clojurebot: Gabh mo leithscéal?

1:50 kennylovesroaste: you want math?

1:50 callen: I want code.

1:50 kennylovesroaste: sieves?

1:50 factorials

1:51 callen: are factorials supposed to be complicated?

1:51 kennylovesroaste: fibonicas

1:51 callen: or fibonacci?

1:51 kennylovesroaste: bullshit

1:51 you're an idiot

1:51 Brand0: more trolling haskell users tips

1:51 kennylovesroaste: i'd fire you on the spot

1:51 do you think I or YOU want a Carmack?

1:51 callen: I've found someone I like less than chord.

1:52 chord: you're now my second-least-favorite person. You've been promoted.

1:52 kennylovesroaste: or a rockstar?

1:52 callen: chord: say hi to your bottom-buddy kennylovesroaste.

1:52 kennylovesroaste: you don't want rockstars

1:52 i fire middle-managers like callen

1:52 chord: is there a bot recording this conversation to a log

1:53 callen: chord: it's IRC

1:53 noonian: you can be fairly sure the NSA has access to a log

1:53 kennylovesroaste: this guy callen is another one i've dealth with

1:54 many, many times

1:54 callen: you don't actually know if I'm a guy or not, but we can go with that.

1:54 glosoli: lol

1:54 callen: can we add casual sexism to the list?

1:54 kennylovesroaste: can we add hate P.C to the list

1:54 anyway..

1:54 OtherRaven: it's not much of an addition on the internet

1:55 kennylovesroaste: no, we're not allowed to hate on some people

1:55 callen: OtherRaven: I'm not even one to usually notice sexism or racism, but this guy is obliterating my tolerance levels.

1:55 kennylovesroaste: i can hate on white people like callen though? please?

1:55 callen: you don't know if I'm white either.

1:55 kennylovesroaste: white men?

1:55 callen: or a man.

1:55 why don't we just go with "people" unqualified by creed, race, or gender and focus on the content of their thoughts and deeds?

1:55 OtherRaven: callen: yeah, but he's trying so hard it's laughable

1:56 kennylovesroaste: if you're not either, it's very cool

1:56 are you an Indian woman?

1:56 callen: OtherRaven: the funny part is, I'm usually the villain in this channel. This guy makes me look like a saint.

1:56 TEttinger: it hasn't taken long for #clojure to get inundated with trolls, has it

1:56 kennylovesroaste: it's fun

1:56 callen: TEttinger: depends on how long you've been here for that perspective to be the case.

1:56 brehaut: TEttinger: 5 or 6 years?

1:56 clojurebot: excusez-moi

1:56 Apage43: now we know we've made it :)

1:57 OtherRaven: callen: not everyone has what it takes to be a Real Troll

1:57 callen: took longer than I thought I would, shorter than I would've liked.

1:57 kennylovesroaste: i hate callen

1:57 callen is an evil white male

1:57 mtp: i'm a pretty bad antitroll

1:57 * callen laughs

1:57 kennylovesroaste: we have estabished that

1:57 :)

1:57 just messing around

1:57 mtp: i'm just joking

1:57 kennylovesroaste: i'm not

1:58 callen is pure evil

1:58 he's a white male

1:58 noonian: hey, leave us innocent white males out of it

1:58 brehaut: TEttinger: the earliest logs i know of are from Feb 1s 2008

1:58 kennylovesroaste: or a indian male

1:58 which is almost as evil

1:58 indian as the continent not P.C native american

1:59 TEttinger: brehaut, I more meant since chord came back, and kennylovesroaste got here, it just got way worse very quickly

1:59 OtherRaven: men aren't evil, they're just a little porcine

1:59 kennylovesroaste: sorry TEttinger

1:59 TEttinger: you're not though

1:59 kennylovesroaste: i'll shut up

1:59 callen: OtherRaven: men are delicious and offensive to jewish people?

1:59 kennylovesroaste: TEttinger: : can we just be free to talk?

1:59 OtherRaven: callen: yes XD

2:00 callen: the nice part of the trolls is that I'm no longer even close to the most hated person here anymore

2:00 now I can do my dark work unnoticed.

2:00 kennylovesroaste: it's not troll

2:00 TEttinger: kennylovesroaste, yes, I'm putting you on ignore though

2:00 kennylovesroaste: cool

2:00 callen: TEttinger: don't plonk him. Suffer with us.

2:00 it'll refine the soul.

2:00 TEttinger: I don't have your amazing stamina callen

2:01 kennylovesroaste: what does rich say!

2:01 OtherRaven: I'd ignore him (and that other one, what's his name) but then I'd be tormented by curiosity.

2:01 callen: TEttinger: I am indeed an everlasting doom-engine of hatred.

2:01 muhoo: wtf happened here? ugh.

2:01 kennylovesroaste: that's your ultimate thinking

2:01 rich would say get rid of me

2:01 callen: OtherRaven: that's why I don't.

2:01 * muhoo backs away slowly

2:01 callen: It's not worth the partial snips of trolling of people reacting.

2:01 You can ignore direct replies, but stuff leaks through.

2:01 kennylovesroaste: i do have some interesting quips

2:01 and not total troll

2:02 so there!

2:02 TEttinger: eh, it's ok. I just get less messages to check

2:02 callen: muhoo: so how about them 49'ers?

2:02 muhoo: I'm taking off work tomorrow for Clojure Cup :)

2:02 TEttinger: didn't they just crush the rams?

2:02 callen: TEttinger: I wouldn't know. Just making conversation, haha.

2:02 TEttinger: it was a really one-sided game is all

2:03 apparently most of them have been so far

2:03 OtherRaven: that's, like, football right?

2:03 callen: OtherRaven: american football I think.

2:03 TEttinger: american football yes

2:03 kennylovesroaste: listen, sorry to "troll" you guys

2:03 i'm not trolling

2:03 i love languages

2:03 glosoli: Hmm if I create some custom keyboard for config in my lein project.clj file under dev profile, is there some way to retrieve its value?

2:03 kennylovesroaste: i'll leave you guys alone

2:03 callen: glosoli: keyboard?

2:03 noonian: I won't be able to find joy until the basketball season starts up again

2:04 TEttinger: 49ers refers to the gold rush of 1849, which sorta brought most of the future inhabitants of san francisco to california IIRC

2:04 callen: noonian: college or pro?

2:04 glosoli: callen: wtf, sorry keyword... sleepy damn

2:04 noonian: pro\

2:04 TEttinger: why they named the team that...

2:04 noonian: I like college football heh

2:04 callen: noonian: too much drama these days.

2:04 chord: you guys are talking too fast I can't keep up with the chat and do google searches

2:04 TEttinger: noonian, harvey mudd has a football team. did I say football I meant foosball

2:05 my brother went there

2:05 OtherRaven: chord: they're talking about sports... you're not missing much

2:06 callen: hater.

2:06 I should talk about my strength training programming, then you'd get really bored :)

2:06 OtherRaven: don't be hating on haters

2:07 chord: lein uberjar Warning: specified :main without including it in :aot. Implicit AOT of :main will be removed in Leiningen 3.0.0. If you only need AOT for your uberjar, consider adding :aot :all into your :uberjar profile instead.

2:07 wtf is that

2:07 noonian: chord: its all good I get that too

2:07 callen: chord: AOT.

2:07 noonian: no no, let the fear permeate his mind.

2:07 noonian: ahead of time compile

2:08 callen: noonian: it makes the flesh tastier for the harvesting when they're perpetually afraid.

2:08 kennylovesroaste: go Rams

2:08 arrdem: callen: you continue to brighten my day.

2:08 * callen rubs hands together greedily and smacks lips at chord

2:08 noonian: as opposed to 'just in time compiled'

2:08 kennylovesroaste: callen: do you do paredit?

2:09 callen: kennylovesroaste: not lately, didn't offer enough money.

2:09 kennylovesroaste: do you for a fitty and a tank of gas tho.

2:09 kennylovesroaste: callen: :2 fity per tank

2:09 paredit

2:09 callen:

2:10 callen: kennylovesroaste: for a fitty and a tank of gas I'll balance your parens alright.

2:10 gotcher structural editin' right here son.

2:10 kennylovesroaste: yes

2:10 arrdem: callen: but can you reindent indentation sensitive grammars?

2:11 kennylovesroaste: you slurp s-expressions like Obama does the private economy

2:11 chord: why did the following work even without :gen-class java -jar ./target/rts-0.1.0-SNAPSHOT-standalone.jar

2:11 callen: I don't think anybody understood what I was saying.

2:11 kennylovesroaste: callen: no i just slurped it to my own political means

2:12 brehaut: http://xkcd.com/1270/

2:12 marcopolo2: Anyone know how I can do the cljs equivalent of some.library.with.func(12,5)? Instead of doing (.func (.-with (.-library ....

2:12 OtherRaven: callen: you were making structural editing sound like prostution... I think

2:12 callen: jesus, at least somebody got it.

2:12 thick ass yobbos.

2:12 kennylovesroaste: tell me how it work with prostituion?

2:12 arrdem: callen: I mean do you want audience feedback here? you're doing this heckling thing pretty well

2:12 kennylovesroaste: yes, slurp functions

2:12 arrdem: callen: and the popcorn is hot

2:13 callen: kennylovesroaste: I work it. With you. Working it.

2:13 kennylovesroaste: for a fitty and a tank of gas. And I rebalance your parens. Greek.

2:13 bare symbols, the works.

2:13 kennylovesroaste: callen: : fity 2

2:13 callen: you're not very good at this conversation thing.

2:14 OtherRaven: you geeks and your jargon

2:14 kennylovesroaste: not at all, just south park

2:14 2 fity

2:14 callen: did the world collectively decide psychometrics weren't a thing? Can we still do a channel gatekeeper that subjects the entrant to an IQ test?

2:14 I know it might be culturally insensitive/biased, but the false negatives might be worth it.

2:15 arrdem: ok so unless you want this troll to get community rep points I suggest we kick it posthaste.

2:15 kennylovesroaste: callen: :nope, you got me

2:15 callen: : what would you do without being a big man

2:15 shit

2:15 muhoo: ~gentlemen

2:15 clojurebot: You can't fight in here. This is the war room.

2:15 noonian: thats awesome

2:15 OtherRaven: tehehe

2:15 callen: muhoo: there's no fight here. He runs flailing into brick walls back and forth. I sit in my chair and heckle.

2:15 * arrdem reaches for the boxing gloves under the seat back infront of him

2:16 kennylovesroaste: callen wants to be a big man

2:16 callen: we could do a strength competition, but if you don't train, you'll probably lose.

2:16 I'm okay with deciding things on that basis, home team advantage.

2:17 OtherRaven: is this the sort of strength training you program?

2:17 callen: I just don't think it's the most relevant metric.

2:17 kennylovesroaste: it reminds me of Boogie Nights

2:17 "how much do you bench"

2:17 chord: Ok I finally got lein run working, now I need someone to tell me how to get JOGL working

2:17 callen: haha, I do a lot more than just bench.

2:17 squats/bench/press/deadlifts/power cleans...

2:17 arrdem: callen: dost thou even hoist?

2:18 callen: arrdem: VERILY

2:18 kennylovesroaste: callen: how many men have you killed in combat?

2:18 muhoo: callen: do not feed

2:18 * arrdem high fives callen

2:18 callen: kennylovesroaste: none, are you volunteering?

2:18 muhoo: fine fine.

2:18 kennylovesroaste: callen: you've never killed a man?

2:18 arrdem: muhoo: until we kick it, I say let him loose.

2:18 chord: If I don't get an explanation of how to do JOGL from someone like tbaldridge in 1 minute I'm going to start trolling

2:18 callen: kennylovesroaste: no but you're making me reconsider my ethics.

2:18 arrdem: kennylovesroaste: I'm about to once this reverse whois finishes..

2:19 callen: LOL

2:19 kennylovesroaste: callen: you've never been in war?

2:19 callen: chord: threats don't work. The nation of Clojure does not respond to terrorist demands.

2:19 arrdem: kennylovesroaste: just keep typing. you'll know when it gets to you

2:20 kennylovesroaste: hah

2:20 never fought in Afghan or Iraq?

2:20 haha

2:20 you've never been in war

2:20 bitch

2:21 arrdem: callen: at what point are we allowed to mention t3ch and get these idiots out of here

2:21 callen: arrdem: I'm thinking about it.

2:21 kennylovesroaste: callen: you're a punk

2:21 callen: you never fought in war

2:21 arrdem: callen: I'm down. Also submitting a PR to clojurebot for a ~votekick

2:21 s/pr/issue/

2:21 callen: god that would be amazing.

2:22 kennylovesroaste: probably european

2:22 callen: maybe based on a rolling log of activity?

2:22 kennylovesroaste: swede or something

2:22 callen: participation I mean.

2:22 kennylovesroaste: callen: you're a punk ass-bitch

2:22 arrdem: callen: nah. I'll base it on my clojure-cup entry which is community rep estimation

2:22 callen: arrdem: *serious-face* we're going to crush you.

2:23 kennylovesroaste: europeans

2:23 callen: arrdem: I have a crack team represented by California, Chicago, and Vancouver :)

2:23 arrdem: callen: I have a team of Austinites. we win.

2:23 callen: arrdem: only in income left-over after taxes :(

2:23 kennylovesroaste: some of us fight in wars

2:23 callen: everytime I see a pay-stub I cry deep deep tears of sorrow.

2:23 kennylovesroaste: some of us don't

2:23 you're a punk!

2:23 arrdem: technomancy: sorry to bug you but for the love of god kick this troll

2:24 * arrdem cowers a little bit

2:24 kennylovesroaste: us americans fight for you

2:24 callen: I think t3ch won't do it just because he latched onto my butthole.

2:24 and will blame me because the last two trolls latched onto me.

2:24 arrdem: callen: wat

2:24 oh. eh.

2:24 callen: arrdem: half-joking.

2:25 kennylovesroaste: fuck you europeans!

2:25 arrdem: callen: yeah I'll be interested to see what the other rep systems look like..

2:25 callen: arrdem: we're doing Simonides.

2:25 arrdem: callen: I don't get it.

2:25 callen: superhero lossless client analytics :D

2:26 * arrdem claps

2:26 kennylovesroaste: i will always hate leftists

2:26 arrdem: I think our name is nil punters :/

2:26 kennylovesroaste: which means all europeans

2:26 callen: arrdem: our team is named Flying Parens

2:26 kennylovesroaste: just pure fucking scum

2:26 kick me

2:26 callen: project name is Simonides.

2:26 kennylovesroaste: rich hates leftist too!

2:27 arrdem: ah. we settled on cloutjure, hence my earlier complaining about LEIN_IRONIC_JURE

2:27 kennylovesroaste: rich hates european scum

2:27 marcopolo2: Okay, another cljs question; How do I do new someObj.foo() ?

2:27 kennylovesroaste: fucking leftists

2:27 arrdem: marcopolo2: (.foo someObj)

2:28 marcopolo2: arrdem: note the new keyword

2:28 chord: where do I download jogl jars, I can't find it among the trillion deep link hell on their webpage

2:28 marcopolo2: (.foo someObj) would become someObj.foo()

2:28 callen: chord: http://download.java.net/maven/2/net/java/dev/jogl/

2:28 chord: http://docs.codehaus.org/display/MAVENUSER/Projects+With+JNI

2:28 chord: http://opensource.mxtelecom.com/maven/repo/com/wapmx/native/mx-native-loader/1.2/

2:29 gws: chord: http://jogamp.org/wiki/index.php/Downloading_and_installing_JOGL

2:29 callen: chord: http://maven.apache.org/guides/mini/guide-3rd-party-jars-local.html

2:29 chord: I don't use maven

2:29 so no

2:29 arrdem: (inc callen)

2:29 lazybot: ⇒ 12

2:29 callen: gave him everything he needed and still spat it back out.

2:29 chord: maven is overbloated piece of shit

2:29 arrdem: sadly the record I built today only counts up not down, and will not reflect his poor choices.

2:30 gws: callen: http://slash7.com/2006/12/22/vampires/

2:30 chord: i already went through like 5 hours just to get main function working, i'm not spending another 5 hours to figure out maven

2:30 callen: gws: that is a really old post by Amy Hoy. That's awesome. I've been doing IRC long enough to know the pattern, didn't know the name for it.

2:30 gws: cool stuff, thanks :)

2:31 * arrdem makes a note to do a "thaks counting" pass

2:32 chord: (dec maven)

2:32 lazybot: ⇒ -1

2:32 callen: chord: http://i.imgur.com/ul5CO44.gif

2:33 gws: http://i.imgur.com/Tg4KupP.gif

2:34 gws: very fitting - just the right amount of aggression

2:35 callen: gws: http://i.imgur.com/Ay29K.jpg

2:37 chord: holy shit how am I suppose to ship my game this jogl jar is 24 megabytes

2:37 callen: chord: http://i.imgur.com/xllH4.gif

2:38 arrdem: callen: congradulations on optimizing yourself out to a gif search

2:38 chord: you can't expect people to download a 24 megabytes of bloat

2:38 callen: chord: http://i.imgur.com/SRjI8UV.gif

2:39 * arrdem checks the size of his windows install

2:39 chord: arrdem: now you realize why your clojure games fail to get downloaded

2:40 arrdem: chord: .... I'm a language and software engineer. I don't do games.

2:42 callen: arrdem->chord == http://i.imgur.com/SCC5vcX.gif

2:43 arrdem: callen: but seriously. it'd be awesome if clojurebot could pull down the reps of voters and hold a time window, thresholded kick vote

2:43 callen: arrdem: http://i.imgur.com/W8MIvcH.gif

2:43 arrdem: callen: there was some talk of using karma as a backend, but that's easy to abuse

2:44 * arrdem digs for the SFW subset of his gifs

2:45 chord: we need kenny back

2:46 arrdem: callen: http://i.minus.com/ieNOTP0kc1MRf.gif

2:47 callen: arrdem: http://i.imgur.com/nelFxeU.gif

2:49 chord: how do I add jogl jar to the project clitoris file: project.clj

2:49 callen: chord: http://i.imgur.com/YEqx5oK.jpg

2:50 arrdem: callen: re last http://i.imgur.com/zo6Kb6y.gif

2:51 Apage43: oh man

2:51 chord: you guys are dumb dumb

2:51 callen: chord: http://i.imgur.com/mwzRcmL.jpg

2:52 arrdem: chord: http://i.minus.com/i8Mlu0EqJoZb0.gif

2:52 Apage43: I switch back to this channel (with my IRC client that inlines images)

2:52 and I have no idea what's going on but there are cats everywhere

2:52 gws: chord: http://i.imgur.com/bsdLyZO.gif

2:53 arrdem: (inc gws) THANK you I wanted to post that!

2:53 (inc gws) ; THANK you I wanted to post that! ;; goddamn comments

2:53 lazybot: ⇒ 2

2:54 chord: the reason why you're all posting images is to deal with the pain of your girlfriend dumping you

2:55 arrdem: chord: http://i.imgur.com/NOt65Pn.gif

2:55 chord: I'M BLOCKING YOU ALL

2:55 gws: chord: http://i.imgur.com/W9j3TzM.gif

2:57 callen: (inc arrdem) (inc gws)

2:57 lazybot: ⇒ 1

2:57 callen: (inc gws)

2:57 lazybot: ⇒ 3

2:58 arrdem: t3chnomancy right about now.. http://i.imgur.com/nGfeX9C.gif

2:58 callen: me, when he notices - http://i.imgur.com/rgA8DCz.gif

2:59 gws: callen: i had thought maybe http://i.imgur.com/D6sI2iv.gif

2:59 chord: I need kenny to distract these assholes

2:59 kennylovesroaste where are you

3:00 gws: this will turn out to be a weird prank and they'll both leave at once with #HASKELL RULES part messages

3:01 callen: gws: perfect @ gif.

3:01 chord: OH FUCK IT JUST TEACH ME HOW TO USE MAVEN TO GET JOGL

3:01 NOW NOW NOW

3:02 noonian_: you can probably do a google search for maven jogl, find the current name and version number, and put [somthing/jogl "version"] in your leiningen project.clj and leiningen will get it for you

3:02 chord: how the hell does leiningen know where maven stuff is

3:03 Jarda: http://mvnrepository.com/

3:03 seancorfield: it searches maven central and clojars

3:03 Jarda: use teh search

3:03 seancorfield: and anywhere else you tell it

3:03 callen: chord: I sent you all the info for this had you been paying attention.

3:04 chord: wait, what am I thinking? http://i.imgur.com/KFVH0CE.gif

3:04 seancorfield: perhaps [org.jogamp.jogl/jogl "2.0.2"]

3:04 arrdem: (inc callen)

3:04 lazybot: ⇒ 13

3:06 Jarda: http://i.imgur.com/sMAo5PW.gif

3:07 chord: (do it 13 times please (dec callen))

3:07 gws: chord: http://i.imgur.com/zEEsLlz.gif

3:08 chord: where are you retards finding these

3:09 arrdem: chord: http://i.imgur.com/dk43Yma.jpg

3:12 dissipate: chord, clearly they are finding them on imgur

3:12 chord: noonian_ you LIED TO ME THES FAILED :dependencies [[org.clojure/clojure "1.5.1"] [org.jogamp/jogl "2.0.2"]]

3:12 dissipate: fail?

3:12 chord: dissipate how me get jogl work NOW

3:12 lein run Could not find artifact org.jogamp:jogl:jar:2.0.2 in central (http://repo1.maven.org/maven2/) Could not find artifact org.jogamp:jogl:jar:2.0.2 in clojars (https://clojars.org/repo/)

3:12 DISSIPATE DEBUG NOW

3:12 gws: chord: http://i.imgur.com/EJXmGbv.gif

3:12 noonian_: chord: try [org.jogamp.jogl/jogl "2.0.2"]

3:13 dissipate: chord, sorry, i haven't done anything with clojure dependencies. :(

3:13 chord: noonian_wtf how did you know that would work

3:13 dissipate: chord, i heard noonian_ is pretty good at FizzBuzz

3:14 chord: noonian_ and dissipate we are going to make a starcraft clone in clojure

3:14 ok go go go team

3:14 callen: chord: time for http://i.imgur.com/9xNfB70.jpg

3:14 noonian_: chord: I guessed based on the 'home » org.jogamp.jogl » jogl-all' at this webpage: http://mvnrepository.com/artifact/org.jogamp.jogl/jogl-all

3:17 chord: noonia_ are you working on the project?

3:18 noonian_ you working?

3:18 noonian_: jogl? no lol

3:18 i hadn't heard of it before you mentioned it today

3:19 chord: noonian_ so thats why your girlfriend cheated on you?

3:21 noonian_: yeah, she was into opengl

3:21 arrdem: cal1en: I clam that ch0rd is a bot due to this being its 5th use of that hook... that or it has a script :/

3:22 callen: arrdem: he works on a script.

3:23 arrdem: callen: how unfortunate. at least I could hope for some originality...

3:23 callen: arrdem: well, it's not explicit. Just an unoriginal creature :)

3:23 chord: you are all anime video game addicted losers with no friends fat and drink junk food and watch hentai and get made fun of you are all losers

3:23 arrdem: callen: http://i.imgur.com/kby68UN.gif I don't get people

3:24 chord: http://i.imgur.com/UN25Bfq.gif

3:24 callen: chord: http://i.imgur.com/bz3YWZh.jpg

3:24 gws: chord: http://i.imgur.com/TL81F.gif

3:25 dissipate: chord, are you kidding me? we are hot software developers with fast cars and mansions

3:26 chord: why does swing awt and swt all exist for jogl

3:27 callen: chord: http://i.imgur.com/iSYWY6A.gif

3:27 arrdem: callen, gws: http://i.imgur.com/IvI0r4i.gif

3:28 thanks for the laughs, I must retire now

3:29 chord: YOU ARE ALL STUPID WITH NO GIRLFRIEND

3:29 gws: arrdem: http://i.imgur.com/MjyuQOi.gif

3:30 callen: gws: http://i.imgur.com/eQEm8Zp.gif

3:30 arrdem: chord: http://i.imgur.com/AD623pX.jpg

3:31 chord: you guys are so sad

3:31 gws: chord: http://i.imgur.com/ieUhuJ8.gif

3:31 chord: instead of being with your girlfriend

3:31 you look at imgur

3:31 so girlfriend must have dumped you

3:31 arrdem: chord: http://25.media.tumblr.com/28601fce603ad7128c223a571866d35f/tumblr_moe8f81Va11sppmago1_400.gif

3:32 seancorfield: i daren't even click on these links...

3:32 chord: arrdem: tell me about she cheated on you

3:32 arrdem: seancorfield: I'm just shuffling at this point. the results are awesome.

3:33 seancorfield: chord: did you ever actually get jogl running?

3:33 chord: NO

3:33 seancorfield: damn chord you must be really stupid! :)

3:33 arrdem: seancorfield: http://i.imgur.com/DlkEtqy.gif

3:33 seancorfield: i'm not clicking those links arrdem :)

3:34 gws: (inc arrdem)

3:34 lazybot: ⇒ 6

3:34 callen: chord: http://i.imgur.com/bJ3sovW.gif

3:34 arrdem: seancorfield: that one was totally safe. I swear.

3:35 callen: chord right now == http://i.imgur.com/BUcgW6q.gif

3:35 chord: FUCK YOU ALL

3:36 callen: http://i.imgur.com/INz7Q1u.gif

3:37 seancorfield: what happened to kennylovesroaste ? that was all so entertaining... it was like a free cabaret between you guys...

3:37 callen: seancorfield: -_-'

3:37 dissipate: seancorfield, he's too busy earning his $120K

3:38 TEttinger: dissipate: s/$120K/disgust of his peers/

3:39 dissipate: a lot of people earning $120K are cranking out terrible code. :(

3:39 pay doesn't mean much in terms of quality in the software industry. most companies just don't care about code quality.

3:40 * arrdem mutters darkly about what people think they can hire undergrads for

3:40 TEttinger: yeah, look at callen. he doesn't pay the people he hires minimum wage but insists they pass a 7-tier fizzbuzz test :)

3:40 seancorfield: lol

3:40 callen: TEttinger: it's not a strict pass/fail

3:41 TEttinger: it's just a score card for comparing candidates.

3:41 and you can skip over parts of it if you make the leap of logic to skip the more immediate obvious step

3:41 TEttinger: I'm taking notes callen

3:41 you're giving away secretz

3:41 noonian_: well thanks guys, I did my googling and I'm ready for that test should it ever come up in an an interview

3:41 seancorfield: my tolerance for "coding tests" is very low so you'd probably kick me out too...

3:41 dissipate: TEttinger, i have the solution to his test right here: http://dave.fayr.am/posts/2012-10-4-finding-fizzbuzz.html

3:42 callen: seancorfield: I'm terrible at coding tests. That's why I use fizzbuzz.

3:42 TEttinger: that was only 2 or 3 steps I thought?

3:42 callen: dissipate: mine is different, but there are some lessons there.

3:42 dissipate: i've passed all the coding tests i've taken, but they were actually pretty lame

3:42 seancorfield: callen: i worked for a company that _forced_ me to write a coding test for applicants.. i told them it was a bad idea... then they said all the current hires should take it so we had a baseline

3:43 all the senior folks passed... you know, the ones who'd been promoted to pure management positions... and all the _programmers_ failed it

3:43 which was about what i expected

3:43 dissipate: i don't think i would ever work for google. my tolerance for high pressure interviews is not that good.

3:43 callen: seancorfield: fizzbuzz isn't a coding test, it's a bare minimum filter and it's a nice gradient for "placing" people.

3:44 opqdonut: I too have found the need for a "bare minimum filter"

3:44 some candidates just don't seem to know how to program

3:44 gws: dissipate: http://www.techspot.com/news/52973-google-admits-job-interview-brainteasers-were-waste-of-time-gpas-and-test-scores-dont-matter.html

3:44 seancorfield: dissipate: google have admitted their old interview technique is a "complete waste of time"

3:44 callen: I should really stop calling my test fizzbuzz, that's almost deceptive.

3:44 seancorfield: yup, that's the article

3:44 kizzx2: maybe i missed, but why are coding tests bad idea in general?

3:44 callen: seancorfield: they didn't ditch the coding tests, they ditched the weird brain teasers.

3:45 dissipate: I'm terrible at coding interviews and survived a Facebook technical interview. Google is harder but not that much. There are worse coding interviews than Google.

3:45 dissipate: gws, seancorfield, yeah, i saw that. but has google actually eliminated their high pressure interview tactics?

3:45 opqdonut: kizzx2: the technical interview situation is highly artificial and very stressful

3:45 callen: kizzx2: people that work well when given time to think, breathe, sip coffee, and read papers do poorly in that context.

3:45 kizzx2: that's true

3:45 callen: it's intended to produce false negatives in favor of meeting some kind of bare minimum.

3:45 opqdonut: kizzx2: how well you do in a technical interview doesn't necessarily reflect how well you can do actual normal day-to-day programming

3:46 callen: it also optimizes for people that are willing to devote time to optimizing for getting good at contrived problems for the sake of self-advancement.

3:46 kizzx2: but i guess that would be better than just looking at GPAs

3:46 callen: whether or not that's something you want to 'select' for in your interviewing process depends on the kind of company you are.

3:46 I prefer to look at github repos, ask them about their work, deep dive a project they were responsible for, and then do fizzbuzz.

3:47 fizzbuzz at the end because it can go on for hours.

3:47 kizzx2: i had a guy who said he programmed for high precision medical software, when asked to write a function to calculate area of circle he started with "int area_of_circle(int r)"

3:47 callen: although I usually cut it off after 15-30m

3:47 dissipate: any place that has interviews that go on for a week or more is not a place i will ever work

3:47 kizzx2: that was C++

3:47 Apage43: We just throw candidates at a grab-bag of random folks for ~45min each

3:47 which is a bit odd

3:48 I have no idea how anyone else does interviews

3:48 callen: that's what happens at my company and we usually do it in pairs/triples but my coworkers usually prefer to watch me do my thing.

3:48 seancorfield: i ask about projects, and look at their google footprint (github etc), but don't bother with a specific coding style problem

3:48 Apage43: I usually yeah, have them Explain Like I'm Five a project they worked on

3:48 callen: I try to keep them as relaxed as possible.

3:49 Apage43: that's a good start, but I like to start diving into the particulars of their project to see how well they understood it.

3:49 and if they're representing the degree of involvement they had.

3:49 seancorfield: what was your worst project? why? what was your best project? why?

3:49 then drill in

3:49 Apage43: yeah, once I get the high level thing I'll start picking things and having them drill in

3:49 callen: seancorfield: yeah.

3:49 dissipate: callen, and how much emphasis do you put on clean code? i've seen programmers who can write very complex code that appears to be correct that is unreadable and unmaintainable, and they don't give a damn. would you hire a 'write only' programmer?

3:49 TEttinger: kizzx2: I just realized how bad that is.

3:50 callen: Apage43: the project I just got over the hump of...I'll be telling stories about it for a decade at least.

3:50 dissipate: I don't usually get a clean-room way to evaluate clean code.

3:50 seancorfield: i'm amazed at how many devs have no real grasp of software process (tdd, ci, cd, bug tracking and lifecycles, version control strategies)

3:50 TEttinger: dissipate: I wouldn't hire me.

3:50 callen: dissipate: whiteboard code is unfair. github code is rarely serious enough to judge on that basis.

3:50 I prefer clean code by a huge amount, but I haven't found a way to measure it.

3:51 Apage43: The last guy I did though was awkward, since every time I tried to drill down I got "I don't know how that works, it was a library."

3:51 callen: I'm way stricter than my coworkers. I write immutable Python classes and the like.

3:51 Apage43: Which wouldn't have been so bad if he didn't list all those topics on his resume as "skills"

3:51 callen: not in interviews, for production.

3:51 Apage43: some skill. dem googlin'.

3:51 dissipate: callen, one simple rule of thumb is function size and whether they adhere to the 'do one thing' rule.

3:52 callen: if you say so? I take a more nuanced point of view but ultimately I don't get to see real world code from them.

3:52 Kelet: seancorfield: Well, maybe you are referring to more senior developers, but at my university we did theory, a bit of coding, and almost nothing related to version control, tdd, agile, or bug tracking, or any of that.

3:52 (For CS)

3:52 callen: Unless I give them a homework assignment which I hate doing except as a follow-up

3:52 Kelet: I wish more universities had a software engineering degree or something.

3:52 callen: Kelet: I don't.

3:52 I wish more universities actually taught people CS and programming.

3:53 you can learn git in an afternoon from a free book.

3:53 dissipate: callen, how about a clean code test? show them some gnarly code and ask how they would clean it up. it wouldn't show that they are clean coders, but at least find out if they know how to clean code.

3:53 gws: callen: please tell my coworkers that

3:53 callen: gws: dude. my company uses hg. I am ready to hang from the rafters.

3:53 seancorfield: callen: right, which is why i'm stunned that many devs don't seem to understand those industry basics... even tho' university doesn't teach it

3:53 Apage43: it's a lot easier to teach git to someone who doesn't understand source control at all than to teach it to someone who thinks subversion is fantastic =P

3:54 callen: dissipate: it's a nifty idea but they can always foist off by saying they don't know the language or something.

3:54 Kelet: I don't know, it took me a while to really figure out git. Sure, you can know it conceptually, but when you get into tricky situations it can be difficult to apply a concept.

3:54 gws: we used SVN and switched, and i've had some of the strangest discussions...

3:54 callen: Apage43: yep.

3:54 dissipate: Kelet, a lot of shops don't do TDD, agile, bug tracking

3:54 gws: (inc Apage43)

3:54 lazybot: ⇒ 6

3:54 callen: (inc Apage43)

3:54 lazybot: ⇒ 7

3:54 dissipate: callen, they can say they don't know the language for the language they are interviewing for?

3:54 seancorfield: dissipate: i used to show candidates a bad implementation of strcpy() or something similar and ask them to find the bugs... but that was pretty low level

3:54 TEttinger: pfft bug tracking. I prefer my bugs silent and unnoticed

3:55 noonian_: man, I was using rcs at my university; it was rough

3:55 callen: "I do not recognize the existence of flaws in my software"

3:55 Apage43: I once worked somewhere that build a version control system in house

3:55 seancorfield: rcs... oh i remember that... as a step up from sccs :)

3:55 TEttinger: not invented here eh

3:56 Apage43: yep

3:56 seancorfield: Apage43: srsly?

3:56 Apage43: yep

3:56 gws: you worked for microsoft?

3:56 dissipate: seancorfield, ask them to clean up code that has clear violations of Demeter's Law or dependency injection.

3:56 TEttinger: teamserver 2016: it won't work for 3 more years

3:56 Apage43: it was made of perl, VB6, informix, and rexec

3:56 callen: Demeter's is such utter nonsense.

3:57 dissipate: callen, how so? seems pretty basic to me.

3:57 TEttinger: Demeter, mother of persephone?

3:57 Apage43: and was tightly integrated into the deployment system

3:57 callen: dissipate: tripe.

3:57 dissipate: callen, poppycock?

3:57 Apage43: (you could only deploy code that was checked into the system)

3:57 callen: indeed.

3:57 dissipate: callen, and this is why we can't have clean code

3:57 callen: dissipate: http://i.imgur.com/ZBwTnNI.gif

3:58 noonian_: just drink beer with them, chat em up, and go with your gut imo you'll probably do just as well

3:58 hyPiRion: noonian_: yeah, I wouldn't be surprised if that were the case

3:58 callen: noonian_: I'd still probe their knowledge over beer.

3:58 noonian_: yeah for sure

3:58 callen: I'm kind of insistent with my probes. Just ask my ex-girlfriends.

4:00 chord: I STILL HATE YOU ALL

4:00 but i need help

4:01 wedr: gnaa

4:01 chord: http://lifeofaprogrammergeek.blogspot.com/2009/04/opengl-in-clojure.html

4:01 wtf is doto

4:01 wedr: /ignore chord

4:01 ups

4:01 callen: chord: http://i.imgur.com/x4R1BHY.gif

4:01 gws: chord: extinct bird

4:01 callen: (inc gws)

4:01 chord: (doto (.getGL drawable)

4:01 lazybot: ⇒ 4

4:01 chord: wtf does that do

4:01 arrdem: (inc callen)

4:01 lazybot: ⇒ 14

4:02 Apage43: ,(doto 12 println)

4:02 clojurebot: 12\n12

4:02 noonian_: ,(do (println 12) (println 13))

4:02 clojurebot: 12\n13\n

4:03 chord: YOU GUYS AREN'T HELPING

4:03 gws: chord: it does getGL to drawable

4:04 noonian_: chord: in java you often have to call a series of methods on a mutable obect, so doto is a macro that sticks (.getGL drawable) in as the first argument to all of those method calls in (init ...

4:04 callen: chord: http://i.imgur.com/eWeAKfu.gif

4:04 chord: you retards are all drunk

4:05 callen: http://i.imgur.com/CV2xoTY.gif

4:05 seancorfield: chord: you're not helping your cause man... but you're entertaining :)

4:06 noonian_: it would be nice if there were units on the graph here: https://github.com/ptaoussanis/clojure-web-server-benchmarks

4:06 callen: noonian_: http://www.techempower.com/benchmarks/

4:06 noonian_: nice, thanks callen

4:06 callen: noonian_: the unit is requests per second mate.

4:07 noonian_: yeah, I was guessing that higher was better

4:07 callen: noonian_: my recommendation? use jetty or http-kit.

4:07 gws: noonian_: i admin a network and somebody was complaining about speed just the other day - he sent me this: http://puu.sh/4zjjH.png

4:07 i am completely serious

4:07 noonian_: yeah, I've been using jetty but I'm looking at maybe moving to http-kit for the websocket support

4:08 callen: gws: rm -rf /mnt/nfsroot/home/user_responsible

4:08 noonian_: gws: lol

4:08 Apage43: I usually use aleph for that

4:08 seancorfield: ok, i've had about as much entertainment as i can stand so it's bedtime for me...

4:08 callen: my only real complaint, if it can be called such, about http-kit is that you have to write your code async-safe. No thread affinity. No thread-local bs.

4:09 noonian_: so no dynamic vars?

4:09 callen: noonian_: I wouldn't recommend it :)

4:10 I, for one, am in favor of forcing people to not rely on thread-per-request semantics.

4:10 chord: (.addGLEventListener canvas (proxy [GLEventListener] [] .......

4:10 how the fuck does that work

4:10 callen: but I haven't convinced yogthos to take a flamethrower to lib-noir in favor of this crusade yet.

4:10 chord: wtf is proxy

4:10 Apage43: ew, proxy

4:11 use reify

4:11 callen: chord: http://i.imgur.com/4vf35gb.gif

4:11 chord: the corresponding java code does the following, how does the proxy create the new joglExample canvas.addGLEventListener(new joglExample());

4:12 noonian_: answer now hurry up

4:12 noonian_: I'm not a monkey

4:12 chord: noonian_: so you admit you're not a clojure expert

4:13 dissipate: chord, #java

4:13 noonian_: yeah dude, I'm pretty new to clojure

4:13 chord: dissipate: i'm asking about proxy

4:13 noonian_: but I think it creates an object that acts like a GLEventListener I think

4:13 I've never used proxy myself

4:14 and I think its been deprecated in favor of reify and stuff

4:15 Apage43: http://i.imgur.com/wiqqwQm.jpg

4:16 chord: ok noonian_ Apage43 explain proxy vs reify

4:17 gws: chord: http://stackoverflow.com/questions/5821892/why-should-i-use-reify-instead-of-proxy-in-clojure

4:17 noonian_: you should google them there are tons of examples out there

4:17 chord: THAT STILL DOESN'T EXPLAIN WHAT REIFY IS

4:17 gws: ,(doc reify)

4:17 chord: STOP BEING LAZY NOONIAN_ JUST TELL ME THE ANSWER

4:17 clojurebot: "([& opts+specs]); reify is a macro with the following structure: (reify options* specs*) Currently there are no options. Each spec consists of the protocol or interface name followed by zero or more method bodies: protocol-or-interface-or-Object (methodName [args+] body)* Methods should be supplied for all methods of the desired protocol(s) and interface(s). You can also define overrides for meth...

4:18 chord: wtf that documentation doesn't help

4:18 just more confusion

4:18 metellus: what're the odds of an op showing up here ever

4:18 gws: chord: http://clojure.org/datatypes

4:18 chord: metellus you can makes things go faster be explaining how this works http://lifeofaprogrammergeek.blogspot.com/2009/04/opengl-in-clojure.html

4:19 llasram: metellus: technomancy has ops, so worst-case is most PDT waking-hours

4:19 noonian_: it returns an instance anonymous class that can implement zero or more interfaces

4:20 metellus: good to know, thanks

4:20 hyPiRion: guys, guys

4:20 /ignore is your friend

4:21 llasram: Oh, is that what we're talking about?

4:21 I /ignored that guy days ago (assuming it's the starcraft clone dude)

4:21 chord: hey i'm not trolling, i'm making progress

4:21 I have code to prove it

4:21 callen: chord: three lines of code, one of which is (doto ...)

4:24 noonian_: one thing you could do chord, assuming you are trying to get that code running, is try to indent everything better because it doesn't have very clear style imo

4:24 chord: am I suppose to use proxy or reify is there no "new" function to create an object?

4:25 Apage43: ,(new java.util.Date)

4:25 clojurebot: #inst "2013-09-27T07:54:31.952-00:00"

4:26 chord: ok but I can't add crap to that to convert this to clojure: frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { exit(); } });

4:26 (new WindowAdapter ..... uh yah stuff go here?????

4:27 Apage43: (doto frame (.addWindowListener (reify WindowAdapter (windowClosing [this _e] (.exit this)))))

4:28 chord: so why can't I ignore new and always just use reify

4:28 noonian_: you can use new to create instances of existing java classes

4:29 but usually you would use the sugar

4:29 (Integer. 6)

4:30 chord: still not understanding why new exists if reify exists

4:30 Apage43: new Thing() { extra methods; } is different from new Thing()

4:30 noonian_: I don't think you could create an instance of Integer with reify

4:31 Apage43: the first is closer to reify. It creates a new class that implements some interface, and instantiates it, all at once

4:31 just like reify

4:31 whereas new Thing(), and regular new, just instantiate existing classes

4:34 chord: (reshape [#^GLAutoDrawable drawable x y w h]

4:34 #^

4:34 ???????????????????????????????

4:36 i demand an explanation

4:36 noonian_: its part of the proxy form, its the definition of the reshape method like the java one

4:37 chord: noonian_ no web documentation = you bullshitting me

4:38 noonian_: its just like the java version lower down in that file you were linking

4:39 i told you it was indented poorly, and i don't need documentation because you posted the code

4:39 chord: (.addWindowListener (proxy [WindowAdapter] [] (windowClosing [e] (exit))))

4:39 that one has no #^

4:39 so you lying

4:40 noonian_: (proxy [GLEventListener] []

4:41 public class joglExample implements GLEventListener

4:41 public void reshape(GLAutoDrawable gLDrawable, int x, int y, int width, int height) {

4:42 (reshape [#^GLAutoDrawable drawable x y w h]

4:43 chord: and how does that help me understand #^

4:43 noonian_: oh, i didn't realize thats what you were asking lol

4:43 that is a type declaration I think

4:43 like GLAutoDrawable gLDrawable

4:43 in java

4:43 chord: wtf why is there type declaration in a dynamic language

4:44 noonian_: well, you are interacting with a java library what did you expect?

4:44 chord: so why does x y w h have no type declarations

4:44 and what happens if you leave off the type declaration on drawable

4:45 SEE YOU GUYS ARE ALL CLOJURE NOOBS

4:45 NONE OF YOU ARE ANSWERING IN 1 NANOSECOND

4:45 NICE JOB YOU EXPERS

4:45 EXPERTS

4:46 noonian_: i wouldn't be surprised if it worked without the type hint

4:46 clgv: chord: lol. all-morning trolling tour started? :P

4:47 noonian_: its probably faster with it

4:47 chord: clgv: i'm not trolling

4:47 clgv: i have code

4:47 noonian_: lol

4:47 jkj_: chord: prolly works without type hints, but might be faster with it because could skip some reflection

4:47 clgv: noonian_: yes, you are right, most interop calls will also work without type hints.

4:48 chord: you are trolling in your uppercase messages :P

4:48 noonian_: clgv: thanks, I haven't done much interop

4:48 chord: clgv: you're just mad that I'm actually making progress towards making an opengl window in clojure where you failed

4:48 jkj_: :D

4:49 chord: see even jkj_ agrees with me

4:49 clgv: chord: that's the kind of trolling I meant ;)

4:49 chord: clgv: so no denial means i'm right though

4:49 clgv: chord: just keep a polite tone around here and you will get a lot of help as everyone else does

4:50 TEttinger: the well may have been poisoned, clgv.

4:50 jkj: btw. why ^# here and not just ^

4:50 oops

4:50 #^

4:50 Apage43: i believe that's older syntax

4:50 clgv: jkj: thats old syntax somewhat prior to clojure 1.2

4:50 TEttinger: jkj: isn't that the old syntax for type hints, ninja Apage43

4:51 chord: oh shit so this example i'm looking at is old syntax?

4:51 whats the new way

4:51 Apage43: ^

4:52 katratxo: e.g ^String

4:54 chord: so next question after i get a window up: how the hell do you implement something like chrono trigger where there are multiple time lines

4:55 noonian_: get a sprite up, then take a game design course

4:55 Apage43: http://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html

4:55 jkj: Chrono Trigger! クロノ・トリガー!

4:56 Apage43: http://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html#UNDECIMBER

4:56 jkj: chord: http://stackoverflow.com/questions/16385049/timers-in-clojure

4:56 chord: didn't answer your question though

4:57 chord: ok lets go simpler zelda, how the hell do they maintain the state of the world that moves the plot forward and forward

4:58 Apage43: http://www.slate.com/articles/arts/culturebox/2013/07/hollywood_and_blake_snyder_s_screenwriting_book_save_the_cat.html

4:58 chord: so no answer means you guys are too dump to know how they do it

4:58 noonian_: theres probably a variable somewhere called world that holds that state

4:58 jkj: now. we've just forgotten how we did it

4:58 noonian_: afk

4:59 chord: so you guys admitting you don't know how they implement zelda

4:59 jkj: chord: you can e.g. have an agent holding the big world state map

4:59 chord: and then send-off funcs to modify worl state

5:00 not my core competence so i wouldn't know...^H ^H ^H^^H ^H care to answer because i've only forgotten

5:00 troll-friday

5:00 gotta grab lunch

5:01 what's the time?

5:01 chord: its night time...

5:02 jkj: so i'm having my weekend before you. oh goody. 11:31 here

5:04 chord: jkj: so you make a clone of zelda: a link to the past, now you hire retarded script writers like Apage43, what is the data representation that allows Apage43 to add all the triggers that modify the state to make the plot work in game

5:06 jkj: chord: i'd say data should be hierarchical maps and state changes functions that modify the tree

5:06 chord: I WANT DETAILS OF HOW TO DO THIS

5:06 SOMEONE MUST HAVE ASKED THE EXACT SAME QUESTION BEFORE

5:06 jkj: chord: momentos

5:06 chord: THERE SHOULD BE AN ARTICLE OUT THERE

5:06 GIVE ME A LINK TO IT

5:06 jkj: chord: http://clojuredocs.org/clojure_core/clojure.core/add-watch

5:06 chord: GIVE ME A LINK TO THE PAST (you see that pun I'm really cool)

5:07 jkj: chord: you register a watch that reacts to the world changes

5:07 chord: i don't e at memenmtos

5:07 horrible candy

5:07 OtherRaven: chord: so what is it a troll eats?

5:08 chord: OtherRaven: if you don't have an answer to how they implement zelda link to a past then you are useless to me

5:09 OtherRaven: chord: good, I'm loath to be useful to you

5:10 jkj: tired trolls need some lone time in recuperacoon, in comfortable sopor slime

5:11 OtherRaven: that sounds... messy

5:12 noonian_: sopor slime, always good for parties

5:12 the top link on google for sopor slime just made my night/morning

5:16 chord: so when I get an opengl window up what project are we going to make

5:16 you guys are going to help me right

5:17 noonian_: have you ever made a game in any language before?

5:18 chord: noonian_ if I say yes will that mean you will help

5:18 noonian_: not a chance, I'm passing out soon

5:18 chord: why are you guys so resistant to game idea

5:19 noonian_: if you write a game I will look at some of the code if its short enough, but I'm not going to write one for you

5:21 chord: noonian_ oh so you admit you're going to STEAL MY CODE

5:21 noonian_: no, I didn't say I'd use it

5:22 chord: AH HAH I CAUGGHT YOU

5:23 noonian_: you won't have anything to worry about until you write something worth stealing

5:24 chord: noonian_ so you're saying i'm WORTHLESS

5:24 noonian_: you keep putting words in my mouth, I'm not saying anything you're saying I'm saying

5:25 good luck with your game

5:25 chord: noonian_ you're going to help me with starcraft clone

5:28 noonian_ just say yse

5:32 DAMN IT

5:32 NO ONE HELPS ME

5:33 hyPiRion: chord: Life is not always delivered on a silver platter. If you treat people with respect, have an open mind, do some research yourself (e.g. by reading books and, in general practise programming and problem solving) you will get far

5:35 chord: hpYiRion: but I am spoiled.

5:37 TEttinger: $google the first ten games you make

5:37 lazybot: [The 12 Best Games on Facebook - Kotaku] http://kotaku.com/5878915/the-9-best-games-on-facebook

5:37 chord: $google starcraft clone

5:37 lazybot: [Atrox (starcraft clone) gameplay 1v2 vs Ai - YouTube] http://www.youtube.com/watch?v=1PGHy_4dXkE

5:37 hyPiRion: I love how that title says "the 12 best" and, in the link, says "the-9-best"

5:38 chord: $google will hyPiRion help me to make a starcraft clone

5:38 lazybot: [Stetmann's research log - StarCraft and StarCraft II Wiki] http://starcraft.wikia.com/wiki/Stetmann's_research_log

5:40 TEttinger: “Your first ten games will suck.” – Jesse Schell (Game Designer, Author of “The Art of Game Design: A Book of Lenses“)

5:41 chord: Tettinger: guy made his first game http://www.achrongame.com/

5:42 didn't suck

5:43 mercwithamouth: ok i can't believe you're still on here talking about starcraft

5:43 i'm new to #clojure but is this some sort of 'fetish' for you?

5:43 TEttinger: mercwithamouth, it's a disease. trollitis, or anon's syndrome.

5:44 chord: you like call of duty games instead?

5:44 mercwithamouth: TEttinger: my god...

5:45 if i were to make a game it would be futuristic levitating cars fighting in cities...same angle/perspective as starcraft...

5:45 but lets not get 'that' started...

5:46 anyone bought the lispcast video?

5:47 i just grabbed it..it seems like it may be quite good for new guys

5:47 chord: lets talk starcraft instead

5:47 mercwithamouth: go to #gamedev

5:47 chord: they already banned me

5:48 mercwithamouth: that's an idea...

5:59 djcoin: Ahah, I worship StarCraft (broodwar) too :)

6:00 mercwithamouth: chord: write a clojure book on natural language processing for me please

6:47 hashcat: different betweem protocol and multimethod

6:47 ?

6:47 clojurebot: Gabh mo leithscéal?

7:06 clgv: hashcat: protocols dispatch on the first argument only multimethods can dispatch on any argument

7:07 hashcat: what exactly do you want to know?

7:07 hashcat: clgv: which of them I should use

7:07 clgv: hashcat: depends on what you want to do

7:07 hashcat: I get it now

7:08 clgv: hashcat: protocols are located closer to the OOP world whereas multimethods are rooted in the functional world ;)

7:13 hashcat: clgv: that's a concise advice

7:52 klokbask_: having trouble saving the complete body of a POST response (using clj-http)

7:53 actually, it's the same problem even if I just GET the url and save it. It's an mp3 file but it's missing some bytes

7:54 so I guess the problem is how I use io/input-stream and io/output-stream. any takers?

8:01 llasram: klokbask_: It's hard to say much without code. Refheap/gist?

8:06 * mercwithamouth is always asking questions about books, i know

8:06 mercwithamouth: when would you say the joy of clojure is suitable to read? i'm only 1/4 through programming clojure(oreilly book)

8:08 llasram: mercwithamouth: I think it's the best programming language book I've read, so definitely yes IMHO

8:08 Oh, *when*

8:08 Hah

8:08 Eh, I think you only need the basics of the language

8:10 mercwithamouth: llasram: gotcha. ordering. i like to have a few books on hand...i'm getting comfortable with the basics and this seems like a book that'll answer my 'why' questions

8:10 `cbp: mercwithamouth: read 3/5 of clojure programming and then move on to joc

8:12 mercwithamouth: `cbp: and not 3/6? =P

8:13 `cbp: well its divided into 5 sections :P

8:13 mercwithamouth: `cbp: gotcha...i figured after building abstractions =P

8:14 `cbp: actually you're dead on.

8:15 klokbask_: llasram: https://gist.github.com/grav/6727373

8:16 llsram: test-url: http://vaas.acapela-group.com/MESSAGES/009086065076095086065065083/EVAL_3480291/sounds/330594833_d29b45429f745.mp3

8:16 this will say "one two three four five", but some of the 'five' is cut off. If I curl it, it works fine

8:18 llasram: klokbask_: You need to make sure your streams are properly closed. This is probably a result of buffering on the output stream not being written yet when you examine the file

8:18 klokbask_: In this case, you can actually just change your `let` to `with-open` and it should work fine

8:22 klokbask_: llasram: great, thanks a lot. how come with-open is required, couldn't it be handled automatically when something goes out of scope? just wondering

8:27 llasram: klokbask_: In some languages, kind of. In Clojure and on the JVM in general, you have garbage collection semantics which I think this post is a good way to think about: http://blogs.msdn.com/b/oldnewthing/archive/2010/08/09/10047586.aspx

8:47 borkdude: why didn't anyone tell me about lein retest before...

8:49 mdrogalis: borkdude: I've been using Midje autotest.

8:52 borkdude: we're not using midje right now

8:52 but thanks

8:53 mdrogalis: Yep.

9:11 ni291187: Is there a documentation page where all the special character are explained: @, ~, #, ' etc.?

9:12 ragge: ni291887: http://clojure.org/reader

9:12 repl: http://clojure.org/reader

9:12 might be what you're looking for

9:13 repl: ragge: exactly what I was looking for, thanks!

9:27 mdrogalis: tbaldridge: ping

9:27 tbaldridge: mdrogalis: pong

9:36 mzdravkov: Ok, I can destruct function argument with [head & tail] for example, but can I "struct" it when passing to function like: (fun [h & tail]), like I can do in erlang

9:37 or I will have to concatenate them manualy

9:40 ambroseb_: mzdravkov: have you looked at apply?

9:41 mzdravkov: I don't think I understand what you mean.

9:43 mzdravkov: ambroseb_: I am writting a recursive function, where I want to apply some operations on a collection of items. the number of operations to be applied on every item is random, so I want to do something like (defn myfun [[item & other-items] remaining-operations])

9:44 and this function will be recursively called working on the same item, while decrasing the remaining-operations "var"

9:44 ohh I understand...

9:45 I can make the function multiarity and there will be no need to do it with concatenating the head and tail

9:48 hfaafb: mzdravkov: I don't understand why you would want to pass in the head of the collection again

9:50 if you have some example code it might help clarify

9:50 mzdravkov: hfaafb: in the common situation you want to apply some operations over all elements of a collection, like map or similar, but only once per each element. I want to do it multiple times, where the number of times for each element is a random number

9:50 hfaab: I will write it just in second

9:55 hfaafb: something like this

9:55 https://gist.github.com/mzdravkov/6728540

9:56 (refresh the gist please, i had forgot to decrement pos)

10:02 clgv: mzdravkov: you can use (cons head tail) or even (list* head tail)

10:03 mzdravkov: clgv: thanks, i always forgot cons. Can't get used to use it :)

10:06 jowag: Hi, why does associative? return false on Strings?

10:08 clgv: because they are not associative

10:09 borkdude: so what more linting tools can I use apart from eastwood

10:09 clgv: why should they?

10:10 jowag: well in that case (get "abc" 0) should not be valid

10:10 BobSchack: That's lookup not association

10:12 jowag: ah yes, my bad

10:13 ok and what about counted?, returns fals on strings but the count works, and is constant time

10:13 borkdude: can lein ancient also find outdate plugins (for example itself)

10:14 clgv: well with String you are in an interop scenario. clojure cant implement those predicates for all maybe unknown java classes ;)

10:15 but you can ask on the mailing list and see if others think that should be fixed...

10:15 jowag: You can extend protocol on java classes or even interfaces

10:16 clgv: jowag: clojure.lang.Counted is an interface and not a protocol

10:18 jowag: heh I forgot, working with Clojurescript lately, whete this is a protocol.

10:19 anyway, I just wanted to know if the reason is a technical/historical one, or if there is some fundamental reason why String should be so special

10:20 because when we will have CinC, I suppose all clojure.lang interfaces will be replaced by protocols

10:21 wakeup: hi all

10:23 I am looking for a clojure library that provides me with primitives suitable for building a RESTful API. Important: It needs to be session aware. E.g. I have to implement a stateful protocol on top of HTTP. Any suggestions?

10:28 pyykkis: wakeup: ring or http-kit and compojure + session middleware

10:33 chenjf: whois wakeup

10:42 s4muel: wakeup: liberator

10:48 devn: Anyone here know how to hook a clojurescript project up inside light table?

10:48 so i can use the browser tab thingy?

10:50 clgv: isnt there a light table video showing this?

10:50 devn: maybe :X

11:20 logic_prog: using clojurescript, is htere a clean way to (1) take a block of HTML code (2) render it to a DOM elemnet in the background [i.e. don't display it] -- perferably using domina. The point is that when I "switch" to the element, I want it already pre-rendered

11:33 postwait: I'm trying to inject a def into another namespace from Java and I'm having issues.

11:34 mdrogalis: postwait: I'll bet.

11:34 postwait: Is that not possible?

11:34 mdrogalis: postwait: I'm not sure, but it doesn't sound easy.

11:34 You probably can, but it's not at-hand knowledge for me.

11:35 postwait: I thought it would be as easy as "(ns some.namespace) (def foo (fn [x] x))

11:35 Compiler.load(new StringReader(that string));

11:35 but that doesn't work

11:35 clgv: postwait: use `intern`

11:35 mdrogalis: I always never interact with Clojure via Java, but I don't think it quite works that way.

11:36 postwait: clgv: Var.intern ?

11:37 clgv: postwait: I meant the clojure function. if you are sure the ns is loaded already (in-ns 'some.ns) (def foo ...) would be more appropriate

11:37 tbaldridge: mdrogalis: see http://skillsmatter.com/podcast/scala/impromptu-rich-hickey-lightning-talk

11:39 nDuff: postwait: your_ns = Namespace.findOrCreate(Symbol.intern("some.namespace")); Var foo = Var.intern(your_ns, Symbol.intern("foo"), value_being_injected)

11:40 postwait: value_being_injected needs to be a function.. I guess I could just run (fn [x] x) and get it's value.. then use that?

11:42 is there a named identity function in clojure already?

11:42 tbaldridge: ,(doc identity)

11:43 clojurebot: "([x]); Returns its argument."

11:43 hfaafb: are paid clojurists expected to know java? :)

11:43 postwait: and if I was to fetch that from RT.var(ns, "identity"), what name space? "clojure/core" ?

11:44 tbaldridge: hfaafb: ish....I'd say when I interview people I expect them to know enough Java that I don't notice during the interview that they don't know java :-P

11:46 hfaafb: fair enough, are you more concerned with library knowledge or as fundamental knowledge of clojure's implementation?

11:46 postwait: clojure is nice.. Java is fine… it's using the interconnect that requires frequent hand sanitizer.

11:47 nDuff: hfaafb: ...well, there are places where being familiar with the Java standard library is important. There are places where Clojure doesn't have concurrency primitives because java.util.concurrent's are good enough, for instance.

11:47 hfaafb: ...someone who tries to (ab)use the primitives Clojure _does_ provide because they don't know about the j.u.c ones isn't using the right tools for the job.

11:48 tbaldridge: hfaafb: and there's stuff like Long/parseLong that you need sometimes, so it's good to know the basics. But for the most part, if you know enough Java to be able to understand all the API docs that you read, then I see that as a good sign.

11:49 hfaafb: so make sure you know what all the keywords do (volatile, static, public, private, etc.), and be able to interpret the docs, you should be fine.

11:50 mdrogalis: tbaldridge: I know it's the camera, but he looks like a supervillain.

11:51 hfaafb: thanks tbaldridge & nDuff

11:51 ToBeReplaced: nDuff: like what? LBQ and the like seems less necessary post core.async?

11:51 tbaldridge: mdrogalis: personally I think he looks like Dr. Who: http://upload.wikimedia.org/wikipedia/en/2/2a/Fourth_Doctor.jpg

11:52 and that also explains why Clojure is so powerful, it's from the future.

11:53 mdrogalis: tbaldridge: Scarves are the new fashion for programming indoors I suppose.

11:57 indigo: tbaldridge: Ever since I started programming in Clojure I've neglected to cut my hair

11:57 nDuff: ToBeReplaced: *PoolExecutor, to start with. Agents are pretty explicitly intended for cases where their state-carrying nature is needed, but they get all kinds of other uses as well.

11:58 bbloom: tbaldridge: aw you "fixed" by bug by changing the doc string

11:58 mzdravkov: hey guys, I am trying to implement very basic and non-optimized algorithm for searching in a maze (2d matrix). This is my function: https://gist.github.com/mzdravkov/6730316 The problem is that when a function-thread/'thread of the pmap' (i dont really know the proper term) find the target, the other threads don't stop. So this really creates something like exponential creating of threads... what is the good clojure way of handling this?

11:58 tbaldridge: bbloom: yeah, I figured I had made you wait long enough. Don't want to seem too friendly :-P

11:58 bbloom: tbaldridge: it's OK

11:58 ToBeReplaced: nDuff: yea the pool executors... i've never utilized agents before

11:59 bbloom: tbaldridge: i'll just have to implement/propose core.random

11:59 tbaldridge: bbloom: actually this is just the first core.async bug fixing spree I've done in about a month.

12:00 technomancy: kickstarter to buy Rich a 12-foot scarf and red frock coat

12:01 egghead: lol

12:01 i'd pitch in if I was guaranteed photo evidence

12:03 devn: eggs

12:04 * devn waves to tbaldridge

12:05 devn: also, yes to technomancy

12:05 indigo: technomancy: Yes

12:06 Also include that if you pitch in $30+ you get a mug with a picture of him wearing that garb

12:06 devn: if you pay $10,000 you get to fly around in his tardis with him for an hour...or is it?

12:06 * Raynes pokes devn with a pencil.

12:06 * devn squirms uncomfortably

12:06 indigo: $10,000 and you'll have already flown around in his tardis with him

12:07 devn: lol nice

12:07 indigo: How about that ;D

12:07 Raynes: devn: How's the API clienty stuff goin'?

12:07 devn: Raynes: good, I'm going to work on it today for a bit I think

12:07 Raynes: :3

12:07 devn: "a bit" => 12 hours

12:08 Raynes: what are you hacking on?

12:08 Raynes: Mostly work stuff right now.

12:09 I need to hop back in and finish up some laser stuff I was doing.

12:09 indigo: ,@@@(atom (atom (atom "test")))

12:09 clojurebot: "test"

12:10 devn: triple star programmer

12:10 err "3 star"

12:12 indigo: devn: Of course! ;D

12:12 I'm trying to become a five-star programmer

12:12 Still stuck at three

12:15 Anyway, enough of Clojure-land... time to go back to "why the hell did we implement a custom ORM in PHP"-land

12:16 clgv: indigo: I'd go one more step back, why the hell did you use PHP to earn money ;)

12:17 indigo: clgv: I keep asking myself that as I learn more Clojure :P

12:18 clgv: indigo: I kept banging my head against the wall when I had to teach someone programming with PHP because their course used it...

12:19 indigo: It's an incredibly hacky language

12:19 And it has no consistency to it

12:19 hfaafb: php for money is definitely a dark path

12:19 clgv: well you just have to lookup the rasmus lerdorf quotes

12:20 jimrthy: test

12:21 clgv: the most frequent sentence when teaching back then was "well it works like this, but I am not quite sure what PHP does there..."

12:21 indigo: Hehe

12:22 tbaldridge: this is a great quote "For all the folks getting excited about my quotes. Here is another - Yes, I am a terrible coder, but I am probably still better than you :)"

12:22 clgv: tbaldridge: yeah, I highly doubt the truth behind that ;)

12:23 tbaldridge: clgv: it's like leadership. Anyone who claims they are a great leader, is normally a really crappy one.

12:23 clgv: tbaldridge: now I have to think of the pointy haired boss ;)

12:24 endou: Hello, I've wrote my first lazy-seq and I was wondering what part I got wrong and could be improved, here is the relevant part of my code: https://www.refheap.com/82b2570465bc3a3c2c7a54351

12:24 I wanted to create a lazy seq on AmazonS3 objects in a bucket and a filter key

12:26 tbaldridge: endou: the normal pattern is (cons this-val (lazy-seq (func (inc this-val))))

12:27 where func is a recursive call to the original function (as you have it). I'm not sure what you have here is bad, it's just a bit odd

12:28 I guess it depends if you want the first item to be lazy or not.

12:29 indigo: Heh, rasmus

12:29 endou: tbaldridge: I tried that at first, but list-objects returns a map and I could not handle it with cons, I probably don't understand it well enough yet

12:29 indigo: Everyone's a bad coder ;P

12:30 dnolen: tbaldridge: so how good is core.async at preserve line and column info?

12:30 preserving

12:31 tbaldridge: As of this week it should be much better. Before that it didn't at all.

12:31 noncom: i can instantiate a java class with (ClassName. args) but how can pass these ClassName. thing around just like a normal function? i tried, it gives an error. Also, using (new passed-class-name args) does not work

12:33 dnolen: tbaldridge: k cool would like to see if actually possible to step through core.async code :)

12:33 in ClojureScript

12:33 noncom: i also tried (eval `(new ~passed-class-name ~args)) and it says "Can't embed object in code, maybe print-dup not defined" i gues coz its a java call... but whatever, I can't guess a way...

12:33 marcopolo2: dnolen: That would be amazing, debugging go blocks currently is a hassle

12:33 tbaldridge: dnolen: I think it's possible, it's just a matter of making sure to output metadata on the right output forms, which come to think of it, we don't do at all

12:34 dnolen: tbaldridge: yes, that's important for source maps

12:34 tbaldridge: dnolen: as of this week type hinting symbols works, but that's a different problem.

12:34 dnolen: marcopolo2: well it'll be an improvement

12:35 noncom: i have a dozen of java classes that i need to instantiate. and all of them accept the same parameter list

12:36 marcopolo2: What's the best way to do something like foo.bar.baz.func(1,2,3) in clojurescript?

12:36 noncom: so i figured it could be wonderful just to pass the class constructor around...

12:36 ?

12:36 dnolen: marcopolo2: need more information, is that namespace or some external JS thing?

12:37 marcopolo2: dnolen: External JS library

12:37 ToBeReplaced: noncom: #(ClassName. %)

12:38 dnolen: marcopolo2: js/foo.bar.baz.func(1,2,3)

12:39 marcopolo2: you're going to need an extern file if you're going to use advanced compilation

12:40 postwait: I'm still not successful… I'm trying to do this now: (in-ns foo) (def myvar RR)

12:40 marcopolo2: dnolen: thanks!

12:40 postwait: where RR is a Java object…

12:40 And I need to do it from the Java side, not the clojure side.

12:40 I've just create the Java object via some other path and need to "tell" clojure about it.

12:41 noncom: ToBeReplaced: interesting.. that'd work for a single-arg constructor.. for a multiple arg constructor, looks like I have to pass as many %s as it has args... gonna try now..

12:44 ToBeReplaced: https://www.refheap.com/19065 here is what I have, still does not work

12:45 marcopolo2: Is there a rule as to when it's safe to do (.-attribute obj) vs. (aget obj "attribute") to prevent munging?

12:45 bordatoue: hi, is it possible to redirect the output of pprint/print-table to a file

12:45 noncom: the additional complexity is added by the fact that threre are 3 possible sets of arguments, but they are uniform for all constructors

12:46 (apply) also does not work..

12:46 says "ctor" not found, because there is no ctr for a single %

12:49 dnolen: marcopolo2: the rule is simple Google Closure will munge everythign

12:49 marcopolo2: unless you explicitly use strings for some property everywhere it will not work

12:50 marcopolo2: dnolen: So if I'm using arraybuffers, I should to (aget arraybuffer "byteLength") to be safe?

12:50 s/to/do

12:50 ToBeReplaced: noncom: that is your problem, yes -- the constructors aren't first class functions. you will need to construct separate functions for each arity

12:51 noncom: i see... so the simplest solution is putting the (cond) in every wrapper function explicitly I guess..

12:51 dnolen: marcopolo2: Google Closure probably knows about it but no one way to know for sure w/o double checking w/o trying it under advanced compilation.

12:52 marcopolo2: Google Closure more or less tries to stay up-to-date but we generally lag behind the latest Closure

12:53 marcopolo2: dnolen: That explains a lot, thanks!

12:53 ToBeReplaced: noncom: eh... you can't really get around a macro here i think

12:53 noncom: you mean writing a macro could help?

12:54 ToBeReplaced: noncom: yes, though the clearest way would be to always pass the full argument list if the default handling is deterministic

12:55 noncom: I was not yet successful in passing a java call like Window. or Window to a macro, I don't know how to dereference the symbol inside so it becomes a java call, ~passed-sym does not work

12:55 ToBeReplaced: tbh i don't really like this kind of thing b/c is looks like you should just call Window. directly -- write each function to just pass through args to the constructor, and write a function to go from a map to positional args

12:55 noncom: hmm, nice idea about assing the full list always

12:56 i could just go with some defaults for other args

12:56 s/assing/passing

12:58 rasmusto: s/assing/sassing

12:59 noncom: ))

12:59 rasmusto: (->> (()

13:00 noncom: hmmm

13:14 * nDuff grumbles about OSGi's approach to package namespacing

13:15 nDuff: ...makes it very, very hard to make, clojure.core.* separate packages from clojure.core

13:16 ...hmm.

13:16 * nDuff ponders the feasibility of building a more OSGi-friendly packaging format, a classloader to load it, and a Maven plugin to construct it.

13:19 dnolen: Bronsa`: file bit works like a charm, thanks much

13:21 justin_smith: technomancy: we changed out clojars group from antler to caribou (we finally got the github group we wanted), now searches for all our stuff only returns things under the defunct antler group, and nothing under the new caribou croup

13:21 *group

13:21 this is clojars search

13:21 Bronsa`: dnolen: np

13:22 technomancy: justin_smith: so newly-published artifacts aren't showing up in results?

13:22 justin_smith: we can manually construct a url and see results, but nothing shows up in search

13:22 ambrosebs: crowdfunding full-time core.typed development, please share! http://www.indiegogo.com/projects/typed-clojure

13:22 dnolen: ambrosebs: cool!

13:22 justin_smith: and even on our team we were used to using the search to see what our latest release was

13:23 technomancy: justin_smith: can you link to one of the new artifacts?

13:23 justin_smith: sure

13:23 clojurebot: Cool story bro.

13:23 justin_smith: https://clojars.org/caribou/caribou-core

13:23 the entirety of caribou/ is seemingly blacklisted from search

13:24 eric_normand: ambrosebs: good job!

13:24 technomancy: justin_smith: could it just be artifacts deployed since a specific date?

13:25 justin_smith: hmm, could be

13:25 because we had a shift from deploying under antler/ to deploying under caribou/

13:26 ambrosebs: eric_normand: thx!

13:26 l3dx: help a newbie: what's wrong with this? http://pastebin.com/kA7kHPGQ

13:26 justin_smith: I'll try deploying the latest to antler and see what happens

13:26 marcopolo2: ambrosebs: You got it dude!

13:26 eric_normand: definitely going in the gazette today

13:26 l3dx: the thread doesn't seem to start

13:26 technomancy: justin_smith: I can trigger a reindex too

13:26 justin_smith: technomancy: if you don't mind, I would appreciate it

13:27 so is indexing not automatic?

13:27 technomancy: justin_smith: no, it is

13:29 should be, I mean

13:31 justin_smith: I just pushed the latest caribou-core under antler/ and it does not show up, the search shows the old version

13:31 marcopolo2: l3dx: any reason you aren't just using a future? http://clojuredocs.org/clojure_core/1.2.0/clojure.core/future

13:31 justin_smith: though clicking through the result shows the latest

13:32 dnolen: ClojureScript 0.0-1909 going out

13:32 marcopolo2: dnolen: nice!

13:32 mdrogalis: :)

13:32 technomancy: justin_smith: ah... I think somehow the backup instance is handling deploys, which isn't configured to index properly

13:32 we have a fallback JVM running

13:32 I think we decided that wasn't such a great idea

13:34 justin_smith: technomancy: I guess that would explain it

13:34 thanks for the awesome free service anyway, thought maybe we were making some mistake on our end

13:36 l3dx: marcopolo2: I don't know. I don't want to dereference the result

13:37 technomancy: justin_smith: no, we've been in the middle of a transition to a new data model for a while now, but I don't get time to work on clojure stuff at work any more these days

13:37 justin_smith: alright, we can work around it

13:37 technomancy: I think I got it straightened out

13:38 but the full reindex to catch up on deploys that got missed is still finishing up

13:39 justin_smith: cool

13:42 marcopolo2: l3dx: What does someFunction look like? you aren't executing it since it doesn't have parens around it

13:42 s/someFunction/some-function

13:42 l3dx: ah

13:42 marcopolo2: I'm just trying out the suggestions I got here: http://codereview.stackexchange.com/questions/31752/hangman-my-first-clojure-code

13:43 justin_smith: technomancy: seeing the results now

13:44 technomancy: cool

13:44 l3dx: marcopolo2: thank you! that made it slightly better ;)

13:44 technomancy: ah, the vps got restarted last night

13:59 marcopolo2: l3dx: no probs, got it working?

14:03 l3dx: marcopolo2: yup :)

14:04 marcopolo2: l3dx: awesome!

14:04 piranha: if I have a JS library which (I think so) can be compiled in advanced mode, how do I include it in my resulting compiled js file?

14:06 marcopolo2: piranha: Is it closure compatible?

14:07 as in does it have goog.provide

14:07 piranha: marcopolo2: well no, it doesn't have goog.provide :( though I was hoping to be able to just add it by hand or something like that

14:07 that's facebook's React

14:09 marcopolo2: piranha: no worries, you can use the externs option so that the closure library will know about it

14:09 http://lukevanderhart.com/2011/09/30/using-javascript-and-clojurescript.html

14:09 piranha: marcopolo2: yeah, I know about externs... but with externs it just won't minify it properly, right?

14:09 though I could live with that as a first version...

14:10 marcopolo2: Right it wouldn't minify it for you, but you might be able to concat the files yourself?

14:11 piranha: marcopolo2: yeah I could... but I really want to try to get it minified :-)

14:11 marcopolo2: piranha: I don't know, but if you find out please come back and let me know

14:12 piranha: marcopolo2: ok! :-)

14:53 harob: Hi, can anyone help me to understand why keyword-lookup on records would be a lot slower with a not-found arg than without? I have a repro case with benchmarks here: http://pastebin.com/kk6dGHQS

14:53 akonny: hi. I'm new to clojure. but want to develop a small browser app in cljs. it should include chronometer or start clock and a some event handling e.g. on a given time a sound occur. what is the best way to implement these kind of things? read about dommy, domina , javelin and plain old clojure atoms. what is the best way to go about a project like this?

14:59 ambrosebs: harob: perhaps the getLookupThunk method is being called instead of the IPersistentMap one?

14:59 harob: I assume that's faster?

15:00 `cbp: harob: have you tried benchmarking hash-maps too?

15:01 mdrogalis: ambrosebs: How long can you get by on $20k? ;)

15:01 harob: `cbp: I have, and there is no performance difference when using a not-found arg relative to without (and both are fast)

15:01 ambrosebs: mdrogalis: I think 6-8 months.

15:02 mdrogalis: ambrosebs: That'd be pretty impressive.

15:02 Well, you're in a different country anyhow. Maybe a bit different.

15:02 `cbp: harob: is that the same with PersistentArrayMaps & PersistentHashmaps?

15:02 ambrosebs: mdrogalis: I'm fresh out of uni, don't have many assets.

15:02 harob: ambrosebs: But doesn't the Keyword.invoke java method definition show that .valAt will be called?

15:02 ambrosebs: mdrogalis: I'm used to living on much less!

15:02 callen: I once lived on 6k a year two years in a row.

15:02 in the US

15:03 mdrogalis: ambrosebs: Yeah same with me - unfortunately loans are falcon punching my wallet.

15:03 harob: `cbp: I was using map litterals, so they would have been PersistentArrapMaps presumably

15:03 mdrogalis: Wow, callen

15:03 ambrosebs: callen: epic

15:03 callen: Do not want a repeat of that experience. Happy to be a dev in the bay area now.

15:03 mdrogalis: Well you heard the man, ambrosebs. Scale back to $6k

15:03 callen: have the tax forms to prove it though. :P

15:03 fowlslegs: So I have a list of variable and a list of functions. I'd like to -> those variables through those functions, but cannot figure out how to do this.

15:04 marcopolo2: akonny: Also take a loot at core.async, it lets you write "blocking" code with lightweight threads

15:04 `cbp: harob: yeah, I don't have an answer for you sorry. You just made me curious :P. I'll definitely check that out later

15:04 marcopolo2: akonny: People are also liking pedestal which is a framework/library for web apps. It might be a little too big for what you want to do

15:04 ambrosebs: harob: I'm not sure, but it's probably close to the reason why it's slower.

15:06 fowlslegs: I have read about and played around with map, apply, and partial, but can't figure out a way to do this

15:10 scottj: ambrosebs: $100 reward is clever. Did you think about doing one of those, but for a private company? Like a $1000+ reward could be a private 1 hour presentation + 1 hour Q&A for a company.

15:11 ambrosebs: scottj: cheers. I'd rather educate the community than a single company, but they can approach me themselves if they really want it :)

15:12 `cbp: fowlslegs: I'm not sure what you want maybe this?

15:12 ,(apply (apply comp (list + inc -)) '(1 2 3 4))

15:12 clojurebot: -7

15:13 fowlslegs: 4clojure "special restrictions: comp"

15:13 haha

15:14 `cbp: mm you want the same thing without comp?

15:14 rasmusto: fowlslegs: what functions are you using? you might have to use -> or ->> depending on where it expects the arguments

15:14 fowlslegs: and -> is just to make things prettier, it doesn't actually add functionality

15:14 akonny: thanks. i will take a look at it.

15:14 fowlslegs: Okay so my draft is (fn [& x] (fn [& y] (-> y (reverse x))))

15:15 Y is a var list and x is a fn list

15:15 `cbp: fowlslegs: can you give a link to the problem

15:16 fowlslegs: http://www.4clojure.com/problem/58

15:22 Even if I could figure out a way to pipe the variable list though each function in order, there still is the problem that

15:22 ,(-> '(3 5 7 9) +)

15:22 clojurebot: #<ClassCastException java.lang.ClassCastException: Cannot cast clojure.lang.PersistentList to java.lang.Number>

15:22 fowlslegs: and other such examples

15:22 dnolen: whoa - https://gist.github.com/c-spencer/6569571

15:22 fowlslegs: like

15:23 dnolen: gotta love the Lisp

15:23 fowlslegs: ,(take '(5 "hello world"))

15:23 clojurebot: #<ArityException clojure.lang.ArityException: Wrong number of args (1) passed to: core$take>

15:24 fowlslegs: Then there's another problem with assigning an individual variable to each function. Namely, the number of functions itself is variable.

15:24 `cbp: fowlslegs: (fn [f1 & fs] (fn [x] (reduce #(%2 %1) (apply f1 x) fs)))

15:24 fowlslegs: I realized that

15:24 rasmusto: `cbp: my mind always aches when I look at reduce, is there a cure for that?

15:25 ambrosebs: dnolen: yea love that. callen might enjoy dnolen's gist ^

15:25 fowlslegs: --hmmm

15:25 tbaldridge: ambrosebs: oooh, and Datomic none the less

15:25 `cbp: rasmusto: loop? =D

15:26 rasmusto: `cbp: maybe I should look at reductions

15:26 callen: ambrosebs: I saw. I've been doing weird shit like this for the past two weeks.

15:26 but nothing quite that cool :)

15:27 ambrosebs: callen: :)

15:27 callen: I'm also considering genericizing my work into something that can migrate data from semantic databases and document stores to Datomic.

15:27 mdrogalis: Ahh, just took the time to solve #58.

15:27 That was pleasant.

15:27 callen: I've also got a ton of schema inference and generation code that speeds up getting a correct schema together.

15:27 fowlslegs: cbp:,(= [3 2 1] (((fn [f1 & fs] (fn [x] (reduce #(%2 %1) (apply f1 x) fs))) rest reverse) [1 2 3 4]))

15:27 `cbp: fowlslegs: add a reverse there at the start

15:28 fowlslegs: ,(= [3 2 1] (((fn [f1 & fs] (fn [x] (reduce #(%2 %1) (apply f1 x) fs))) rest reverse) [1 2 3 4]))

15:28 clojurebot: #<ArityException clojure.lang.ArityException: Wrong number of args (4) passed to: core$rest>

15:28 fowlslegs: Also I like guiding hints more than answers

15:28 , but tyvm

15:28 clojurebot: #<CompilerException java.lang.RuntimeException: Unable to resolve symbol: but in this context, compiling:(NO_SOURCE_PATH:0:0)>

15:29 callen: clojurebot likes big buts and cannot lie.

15:29 sm0ke: ,(.getHostAddress (.nextElement (.getInetAddresses (java.net.NetworkInterface/getByName "eth0"))))

15:29 clojurebot: #<SecurityException java.lang.SecurityException: denied>

15:30 sm0ke: hello..whats the common pattern for publishing a machines ip address on zookeeper?

15:31 callen: sm0ke: decide upon a direct to stash them in. Then stash them.

15:31 directory*

15:31 sm0ke: callen: no let me rephrase

15:31 `cbp: fowlslegs: the first function takes a variable number of arguments and all the rest only 1. So you start with an initual value (apply f1 xs) and then loop over the other functions by simply calling them.

15:32 fowlslegs: just reverse them initially because the rightmost function is the first one that's called

15:32 sm0ke: callen: a machine can have multiple ips ...so how do i know which ip to publish?

15:32 callen: sm0ke: all of them

15:32 attached to a single ident.

15:33 sm0ke: callen: is that sane thing to do? lets say i want to elect a leader..if i publish all i would also be publishing 127.0.0.1

15:33 everyone would be sending messages to themselves

15:35 callen: if you know specifically which IP is relevant then pick that one.

15:35 sm0ke: i dont know ...i was thinking something along the lines ..what if zookeeper could tell up which ip connected to it?

15:36 SegFaultAX: sm0ke: Just put a service in front of zookeeper to do the registration like a normal person.

15:36 sm0ke: callen: that is the problem how does a running program know which ip to pick..

15:36 SegFaultAX: what do you mean? what kind of service?

15:37 SegFaultAX: sm0ke: What do you mean "how does it know what IP to pick?" Configure your servers to use a consistent interface for inbound connections.

15:38 sm0ke: SegFaultAX: two machines can have interface name eth0 or eth1 but till connected to same network ?

15:42 did you guys have a good look at storm? i guess it just needs a central server configuration it must be figuring this out

15:43 marcopolo2: sm0ke: IIRC I remember specifying ip addresses to all the storm nodes

15:43 sm0ke: You might want to setup hostnames for each node, and use hostnames

15:43 sm0ke: You circumvent the problem altogether

15:44 sm0ke: marcopolo2: do you need to put hostnames for all workers in some config file?

15:45 SegFaultAX: sm0ke: Well presumably that's what you were using ZK for.

15:45 sm0ke: So each node knows its own hostname, you can just register that.

15:46 marcopolo2: sm0ke: I think that's what I did, because ultimately the nodes have to know who to connect to

15:46 sm0ke: SegFaultAX: but hostname isnt discoveable outside unless youedit /etc/hosts on each node?

15:47 SegFaultAX: sm0ke: Unless you make it discoverable?

15:48 sm0ke: SegFaultAX: lets assume that there are no firewalls every node can communicate with every node

15:49 i just want to ask can i have a set of node knowing about each other through a central server (a zookeeper whose addres everyone knows)

15:49 my point being that this minimises the configuration to bare minimum

15:51 although we can assume that nodes would most probabaly be configured on a sigle iface lets say eth0 .. but i wanted to know if there is a fool proof soultion

15:53 marcopolo2: sm0ke: What's the ultimate goal here?

15:54 sm0ke: marcopolo2: i am just writing a fault tolerant service which needs a central master being elected by zookeeper..but the roadblock here is how do i know the network address of newly elected master

15:54 marcopolo2: all that with just minimum configuration of every node just knowing about zookeeper

15:56 marcopolo2: although what you suggested works just fine...but consider adding a new node..i have to edits host names for everymachine

15:56 marcopolo2: sm0ke: http://zookeeper.apache.org/doc/r3.1.2/zookeeperStarted.html seems like they use hostnames

15:56 sm0ke: maybe a zeroconf solution? http://avahi.org/

15:58 sm0ke: i really dont like multicast

15:58 may be i will just settle with a consistent iface name

15:59 marcopolo2: sm0ke: Just wondering, what's wrong with multicast?

16:00 sm0ke: marcopolo2: to be honest i dont know jack about it..and i *feel*(tm) its too lound

16:00 loud*

16:01 it just introduces unseen complexity which is out of my skill set

16:03 moreover i think many cloud providers dont have mc

16:04 marcopolo2: sm0ke: Yeah, its probably overkill for this problem. Try asking the zookeeper google group

16:04 sm0ke: cloud providers would give you a hostname though

16:05 sm0ke: marcopolo2: yup at least ec2 have hostnames which resolves within same cluster

16:06 callen: ambrosebs: on your indiegogo - what locations/countries are applicable for the user group meeting perk/

16:06 I don't get the impression that you're in the US :)

16:06 sm0ke: marcopolo2: thanks for the hostname idea though

16:06 ambrosebs: callen: I'm in Western Australia, but I'll do any time.

16:06 simon__: hi

16:07 ambrosebs: callen: and I can only speak english ;)

16:07 sm0ke: marcopolo2: i could always have a config flag set to use hostnames instead of fancy stuff

16:07 callen: ambrosebs: of course.

16:08 gws: sm0ke: many cloud providers have APIs for this purpose - you can query the set of instances

16:08 you can tag master instances specifically so clients can discover them as they come online, etc

16:10 simon__: does anyone know here about the state of palletops.com? the website seems not to be updated the last year...

16:11 stuartsierra: simon__: hugod is the one to ask I think.

16:11 MadFunk: Hello #clojure. I am trying to turn a map containing nested maps into xml I can put out to a file. I am certain this is pretty straightforward in clojure, but I can't figure out what words google needs to give me the right answer. Anyone able to help me out?

16:12 sm0ke: gws: thats great to know...but its always nice to have code agnotic to hosting platform :) you might not know when you suddenly find out a cheaper hosting :D

16:13 simon__: stuartsierra: i need to decide what configuration management tool to use and was looking palletops but do not want to go for it if this project is abandoned...

16:13 stuartsierra: simon__: I don't know anything. :)

16:13 gws: sm0ke: yeah, completely understood. with something as straightforward as "tell me about my instances" it's generally possible to abstract it in a way that should be portable across providers, or maybe even use multiple providers at the same time

16:14 callen: simon__: check out Ansible.

16:14 gws: but figuring that out is, of course, why you get the big bucks

16:14 callen: sm0ke: jClouds.

16:14 fowlslegs: So I asked about this a little while ago, but I cannot seem to get around the problem of not being able to pipe a var into a list. I have a draft form ((fn [f1 & fs] (fn [& vars] (-> (apply f1 vars) (reverse fs))))), where fs is a list of fns, but I can't figure out how to make this work.

16:15 callen: fowlslegs: sorry for the nitpicks, but multiple functions are usually referred to by fns

16:15 and the first or single function would just be f

16:15 marcopolo2: MadFunk: Take a look at https://github.com/clojure/data.xml

16:17 ambrosebs: You going to the conj?

16:17 ambrosebs: marcopolo2: not this year

16:18 marcopolo2: ambrosebs: :(

16:18 MadFunk: marcopolo2: aye, i have been. it seems to suggest that i'd have to go through and define each tag in my code. i'm interested in preserving the structure from clojure->xml, but i'd rather avoid having to write out (element ..) for each one. but I feel like I am overlooking something that would make that much easier.

16:18 ambrosebs: marcopolo2: Then again, if we make it over 20k it might be a stretch goal :)

16:19 marcopolo2: nah, I'll do something separate if I was going to ask for more donations.

16:25 marcopolo2: MadFunk: You might be able to write a function which does the element call, and travese using something from clojure.walk

16:26 noonian: ,(doc reverse)

16:26 clojurebot: "([coll]); Returns a seq of the items in coll in reverse order. Not lazy."

16:26 dnolen: only took 2 years, but core.match 0.2.0 going out

16:26 noonian: fowlslegs: the way you are using the thread-first macro, it is trying to call (reverse value fs), where value is the return value of (apply f1 vars)

16:27 tbaldridge: dnolen: you're in good company. Perl, Duke Nukem Forever....etc.

16:27 noonian: fowlslegs: and reverse only takes a single collection

16:27 marcopolo2: dnolen: Wow, you are on a role today! First cljs not core.match kudos!

16:27 s/not/now

16:28 devn: Is there a trick with some bit twiddling to determine whether a number: 24, contains 4?

16:29 tbaldridge: ,(some (partial = \4) (str 42))

16:29 clojurebot: true

16:29 tbaldridge: :-P

16:29 devn: :)

16:30 piranha: ,(map #(identity [:li %]) ["text" "qwe"]) ; there is no shorter way, right?

16:30 clojurebot: ([:li "text"] [:li "qwe"])

16:30 fowlslegs: noonian: Okay, so I need a let form?

16:31 tbaldridge: devn: in a loop, each time divide by 10 and then mod by 10 to get the remainder. if remainder = 4 then break out of the loop

16:32 devn: tbaldridge: snekay

16:32 sneaky

16:32 noonian: fowlslegs: what do you want the returned fn to do? should it return a collection where the first element is the value of applying f to the vars, and the rest of the elements are the initials fns that are passed in?

16:32 devn: i like it though :)

16:33 fowlslegs: noonian: http://www.4clojure.com/problem/58

16:33 llasram: tbaldridge, devn: First convert the number to BCD, then you can use bit shifts and masking to perform both the divide and mod :-)

16:33 tbaldridge: llasram: nah, I use cosmic rays and butterfly wings

16:33 devn: haha

16:33 * devn needs to re-read hacker's delight

16:34 tbaldridge: http://imgs.xkcd.com/comics/real_programmers.png

16:34 SegFaultAX: Pff, 58 is for kids.

16:34 The hard ones get /really/ challenging.

16:38 noonian: ,(doc reduce)

16:38 clojurebot: "([f coll] [f val coll]); f should be a function of 2 arguments. If val is not supplied, returns the result of applying f to the first 2 items in coll, then applying f to that result and the 3rd item, etc. If coll contains no items, f must accept no arguments as well, and reduce returns the result of calling f with no arguments. If coll has only 1 item, it is returned and f is not called. If val i...

16:39 fowlslegs: I was looking at that to no avail

16:39 I even read the source.

16:39 noonian: fowlslegs: this might work (untested) (fn [& fns] (fn [& args] (reduce (fn [args fn] (apply fn args)) args (reverse fns)))

16:39 oops, but call fn f instead :P

16:39 when I used it as a formal parameter

16:40 amalloy: noonian: fn instead of f would still work in that context, though

16:40 fowlslegs: ,(= "HELLO" (fn [& fns] (fn [& args] (reduce (fn [args fn] (apply fn args)) args (reverse fns))) #(apply str %) take) 5 "hello world"))

16:40 clojurebot: false

16:41 noonian: amalloy: yeah it just doesn't make me feel warm and fuzzy

16:42 fowlslegs: ,((fn [& fns] (fn [& args] (reduce (fn [args fn] (apply fn args)) args (reverse fns))) #(apply str %) take) 5 "hello world")

16:42 clojurebot: #<core$take clojure.core$take@d2e96e>

16:42 noonian: ,((fn [& fns] (fn [& args] (reduce (fn [args fn] (apply fn args)) args (reverse fns))) rest reverse) [1 2 3 4])

16:42 clojurebot: #<core$reverse clojure.core$reverse@1fdb028>

16:42 noonian: ,((fn [& fns] (fn [& args] (reduce (fn [args fn] (apply fn args)) args (reverse fns)))) rest reverse) [1 2 3 4])

16:42 clojurebot: #<sandbox$eval163$fn__164$fn__165 sandbox$eval163$fn__164$fn__165@182d6a3>

16:42 noonian: grumble

16:44 callen: noonian: I tried the same thing.

16:44 fowlslegs: I could make specific cases for when there are two and three functions

16:44 callen: then decided I should be preparing for Clojure Cup.

16:44 noonian: lol

16:46 fowlslegs: But that's too general for my pedantic tastes.

16:46 And it's lame.

16:50 dnolen: tbaldridge: so are all the new core.async goodies ported to CLJS?

16:50 tbaldridge: dnolen: should be if there's something missing, let me know

16:52 nathanic: what are the *new* core.async goodies?

16:54 egghead: nathanic: the experimental async ops rhickey added

16:54 https://github.com/clojure/core.async/commit/4b1819b8b15c260b8a01f7a73cf6aea6d2c84bf2

16:55 nathanic: egghead: ah cool, thanks!

16:55 noonian: fowlslegs: this worked for me, but I'm not sure if it works for all cases. http://pastebin.com/z7vjYdtU

16:55 I didn't plug it into 4clojure

16:57 nwjsmith: Those additions are fantastic.

16:58 JoelMcCracken: are there any clojure libraries comparable to racket's scribble? http://docs.racket-lang.org/scribble/

16:59 nDuff: JoelMcCracken: Care to describe what scribble is, in a sentence, rather than count on people to have time to follow the link and read?

16:59 JoelMcCracken: sure, sorry. I'm unsure of how familiar the clojure community is with racket

17:00 nDuff: Oh -- literate programming, it looks like?

17:00 JoelMcCracken: scribble is basically a language/system for converting prose into documentation

17:00 nDuff: There are a few very serious LP advocates in the Clojure community, and they've written some software.

17:00 JoelMcCracken: well, its not exactly LP; I would say it is more like a system for writing documentation.

17:00 noonian: the link to the scribble document that page was written in is broken

17:01 technomancy: JoelMcCracken: most people just use markdown

17:01 noonian: writing doc-strings and documentation plugins like codox and lein-marginalia seem to be enough for most people

17:01 technomancy: noonian: sad but true

17:01 noonian: yeah, with a good markdown readme

17:01 JoelMcCracken: thanks

17:02 technomancy: the worst thing about codox and marg is that people run them and think "therre, I documented it" which is just so infuriating

17:02 noonian: yeah, I don't find marginalia helpful at all personally. I'd rather just look at the src on github

17:02 I like codox's interface a little more

17:02 technomancy: JoelMcCracken: I bet you could use Scribble to document a clojure project fine though

17:03 JoelMcCracken: http://git.racket-lang.org/plt/tree/HEAD:/pkgs/scribble-pkgs/scribble-doc/scribblings/scribble

17:03 technomancy: I don't think there's anything about Clojure that makes it particularly well-suited for writing documentation systems in over racket

17:04 JoelMcCracken: yeah

17:04 gfredericks: does racket have reader macros?

17:04 JoelMcCracken: yep

17:04 technomancy: "reader macros" are kind of a pale shadow of what racket has

17:04 gfredericks: my point though was that clojure is not interested in custom syntaxes like that

17:05 the sort of thing you'd really want for that kind of application

17:05 JoelMcCracken: yeah

17:05 thanks =)

17:05 stuartsierra: For what it's worth, I make heavy use of Emacs org-mode for literate-style Clojure programming.

17:06 JoelMcCracken: yeah. part of my real goal is to add "metadata" to prose I write

17:07 Org mode is *ok* at that

17:07 its is a little unwieldly though

17:07 technomancy: org is a beast

17:08 iirc org-mode.el is the largest piece of elisp in emacs by an order of magnitude

17:08 stuartsierra: A beautiful, enchanting, life-altering beast.

17:08 JoelMcCracken: it could really use some better factoring

17:08 technomancy: if you say so, Belle

17:08 =)

17:08 stuartsierra: heh

17:09 JoelMcCracken: I do enjoy it though

17:09 stuartsierra: Org version 8 was a pretty major refactoring.

17:09 gfredericks: org-mode is a comprehensive operating system lacking only a decent task organizer

17:09 technomancy: I can't get over #+BEGIN_SRC everywhere

17:09 JoelMcCracken: begin_src is so ugly

17:09 oh im still on 7.9.3

17:10 i guess i should upgrade!

17:10 gfredericks: I don't even know how to check my org version

17:10 stuartsierra: Eh, BEGIN_SRC fades away, just like parens. :)

17:10 mgaare: and like pull requests? ;)

17:10 * gfredericks imagines a lisp with BEGIN_SRC and END_SRC instead of parens

17:10 JoelMcCracken: gfredericks: M-x describe-variable org-version

17:10 technomancy: gfredericks: too bad there's no reader macros or you could do that

17:11 JoelMcCracken: #clojure: come for a clojure question, stay for the emacs chatter

17:11 gfredericks: JoelMcCracken: cool, thanks

17:11 technomancy: this is racket's killer app

17:11 technomancy: GONNA_OPEN_A_LIST_NOW_KAY? 1 2 3 GONNA_CLOSE_IT

17:11 ^ look ma, no syntax

17:11 JoelMcCracken: whats clojure's chef-like tool?

17:12 pallet?

17:12 clojurebot: pallet is https://github.com/pallet and http://palletops.com

17:12 leo_33: i wanted to ask you a question related to job. a guy in paris was in london and emailed me to see him. unfortunately these weeks i am not in london. so i told him. he said by skype or phone would be fine for an interview at this moment. but he didnt email me with details yet? do you think he is angry?

17:13 JoelMcCracken: that you arent in london?

17:13 i wouldnt be angry

17:14 callen: JoelMcCracken: Pallet is not like Chef.

17:14 leo_33: ok

17:14 thanks JoelMcCracken

17:14 technomancy: like chef without the crippling design flaws maybe

17:14 callen: JoelMcCracken: it's in-between Chef/Fabric and has a weird jClouds fetish.

17:14 leo_33: you are very kind and wise man.

17:15 callen: technomancy: pallet is not that nice to use.

17:15 *either

17:15 technomancy: callen: well technically I didn't say that =)

17:15 just sits on conceptually firmer ground

17:15 devn: ,(get (frequencies (seq (str 22))) \2 0)

17:15 clojurebot: 2

17:15 noonian: my biggest issue with pallet is figuring out the best way to organize things, and deciding when to do what and how to seperate 'phases' in a way thats not arbitrary

17:15 JoelMcCracken: what makes it superior to chef?

17:16 * callen is way too tired for this

17:16 JoelMcCracken: =)

17:16 forget it

17:16 i'm just "interested", its not worth it

17:16 noonian: one difference is that it doesn't require any software on the nodes you are configuring other than an ssh server

17:17 and there is no master server that controls everything, its all from your local terminal (or you could code your own master server that runs the pallet code)

17:17 JoelMcCracken: ah; like ansible

17:17 * nDuff needs to sit down and spend some time with pallet's shell-generation code before as a prerequisite to serious consideration for use.

17:17 noonian: echo foo becomes ("echo" "foo") heh

17:17 lazybot: foo becomes ("echo" "foo") heh

17:17 egghead: lol

17:17 callen: JoelMcCracken: I generally recommend Ansible to people for this.

17:18 JoelMcCracken: i hate yaml

17:18 egghead: write ansible in clojure

17:18 JoelMcCracken: =)

17:18 egghead: [{:tasks [] :vars []}]

17:18 then you can just write your automation work in edn :)

17:18 hiredman: pallet is a clojure library, so you can use it to write a program that runs locally, spins on a hadoop cluster, does computation, then displays some kind of summary graphic result

17:19 egghead: pallet has a pretty firm bent on cloud providers last I used it

17:19 but it mostly just translates everything to sh using stevedore or w/e, right?

17:19 hiredman: spins up a hadoop cluster in ec2

17:20 noonian: yeah, it just runs bash scripts on the nodes to configure

17:21 but other people have packaged configuration of common applications into what pallet calls a 'crate', and you can install a crate instead of scripting it yourself, which just runs the scripts defined by that crate

17:24 jimrthy: I'm heading north just to avoid traffic. See everyone shortly.

17:25 I really have to learn how to use this irc client *blush*

17:32 muhoo: is clojurewest going to be in portland again this year?

17:32 oic, nm, their site still says 2013

17:42 ztellman_: SF next year, I think

17:42 the reason for avoiding it the last few years was high cost of venue/hotels, but now that it's part of the Relevance family, maybe that's less of a big deal?

17:43 sorry, C O G N I T E C T

17:43 technomancy: "It's not Portland" is a pretty good reason though

17:43 gfredericks: huh? we don't like portland?

17:44 ztellman_: a good reason for going to SF, or staying in Portland?

17:44 gfredericks: is this a seattle grudge?

17:44 technomancy: gfredericks: a good reason to avoid SF I mean

17:44 ztellman_: I wouldn't mind it being permanently in Portland, myself

17:44 technomancy: I heart portland a lot

17:44 ztellman_: but I'll take people on a Tenderloin bar crawl, it'll be grand

17:48 Raynes: San Francisco frightens me.

17:48 ztellman_: seriously?

17:48 technomancy: gfredericks: portland->seattle grudges go the other way afaict. bit of jealousy but that's ok with me.

17:48 redinger: muhoo: Current thinking is SF. But, nothing definite yet.

17:48 Raynes: I'm fine here in Los Angeles.

17:49 * Raynes hides under his celebrities and beach.

17:49 ztellman_: I mean, parts of it smell like pee, but SF is pretty tame

17:49 * nDuff 's fiancee's best friend lives in SF, so finding a place to crash there isn't so hard; just haven't had Clojure/West be at a convenient time to travel yet.

17:49 indigo: It's even better in San Diego :D

17:49 Raynes: ztellman_: Well, I've actually watched people pee in LA. So, that's not a concern.

17:50 technomancy: that's one upside to having a lot of rain

17:50 Raynes: nDuff: Don't you have to urinate an ounce of gold to even get into SF?

17:50 ztellman_: then again, we're apparently home to whatever the hell this is: http://www.bravotv.com/start-ups-silicon-valley/season-1/videos/geeks-are-definitely-the-new-rock-stars

17:50 so maybe you have a point

17:50 nDuff: Raynes: it'd have less homeless if that were the case.

17:51 Raynes: They were already there before the gold rule was in place.

17:51 ztellman_: that's mostly Reagan's legacy, he shut down all the mental hospitals, and pretty much everyone ended up on SF

17:52 but besides the homeless and absurd reality television, it's a fine city

17:55 bja: does the debugger statement that works in chrome happen to work elsewhere?

17:56 TimMc: ztellman_: There are cities that will actually ship their homeless to SF.

17:56 That's pretty messed up.

17:57 ztellman_: TimMc: we have temperate weather and decent social programs

17:57 it makes some sort of backwards sense

17:57 Jayunit100: ztellman_: whats SF

17:58 muhoo: ztellman_: it only smells like pee this time of year, really

17:58 gfredericks: $google SF

17:58 ztellman_: Jayunit100: San Francisco

17:58 lazybot: [Welcome to SFGOV:City and County of San Francisco Official site] http://www.sfgov.org/

17:58 muhoo: when it's been like 9 months since a rain came and cleaned off the streets

17:58 Jayunit100: "everyone ended up on SF"?

17:58 ztellman_: typo, that should have been "in"

17:58 muhoo: there is nothing funkier smelling than san francisco in like september

17:59 ztellman_: muhoo: it's a bit more permanent in some parts of town

17:59 TimMc: Nothing?

17:59 redinger: How does it smell in the spring?

17:59 muhoo: except maybe nyc at 4am when all the restaurant garbage is on the streets and the trucks haven't come yet to pick it up

17:59 TimMc: *nod*

17:59 muhoo: redinger: fine :-)

17:59 might rain though

17:59 ztellman_: redinger: like opportunity and dumb money

17:59 muhoo: IIRC it rained during clojurewest 2012 (san jose)

18:00 gfredericks: I believe it did; I think I was with ztellman_ at the time

18:00 ztellman_: ha, right

18:00 riley526: ztellman_: ugh, that video you linked to... I need to leave this place

18:00 ztellman_: I remember that

18:01 come on, the graph theory toga parties are great

18:01 why would you ever want to leave

18:01 muhoo: The Return of the Bubble

18:01 ztellman_: (everyone should watch that video, it's hilarious and infuriating)

18:01 muhoo: wasn't that vid from a year or so ago though?

18:02 i thought hollywood has moved on since

18:02 ztellman_: muhoo: nah, they were filming it last year

18:02 now it's actually airing

18:02 muhoo: fuck

18:02 technomancy: moved on to season 2 more like!

18:02 ztellman_: I haven't actually watched it

18:02 muhoo: i cannot imagine watching it.

18:02 ztellman_: but I remember when they had the toga party, I think it was only a few blocks away from me

18:03 muhoo: in the mission?

18:03 ztellman_: aphyr and I are talking about turning it into a drinking game

18:03 yep

18:03 muhoo: redinger: what might get you on SF is the cost of a facility. i'd expect it to be pricey compared to many other places

18:03 i.e. moscone prolly ain't cheap

18:04 ztellman_: ha, that's a bit grandiose for a clojure conference

18:04 there are plenty of hotels with conference space

18:04 probably expensive compared to raleigh or portland, though

18:04 noprompt: ztellman_: lol @ "tech mavens"

18:04 muhoo: good point. a marriott might do

18:05 ztellman_: noprompt: really disappointed there wasn't any reference to "thought leaders"

18:05 ystael: now i'm imagining a reality show where the contestants compete to fix misconfigured maven builds

18:05 muhoo: doesn't a "thought leader" sound like (keeping with local history) jim jones?

18:05 ystael: america's next top release engineer?

18:06 muhoo: (inc ystael )

18:06 lazybot: ⇒ 1

18:06 ztellman_: muhoo: http://instagram.com/p/d4pykIjpoR/

18:06 callen: ztellman_: I take it you're not doing Clojure Cup?

18:07 ztellman_: callen: I've got this pesky talk I've only barely outlined

18:07 callen: Oh right.

18:07 ztellman_: me, noprompt, gf3, and s4muel are making a lossless client analytics service :)

18:07 ztellman_: godspeed

18:07 callen: Thank you.

18:07 ztellman_: what does "lossless" mean in this context?

18:07 callen: ztellman_: save *EVERYTHING*

18:07 `cbp: stream imo

18:08 noprompt: ztellman_: i definitely need the "god" part, maybe the "speed" too but i guess we'll find out.

18:08 maybe just some 5hr energy or, you know, a cup of coffee or something.

18:08 callen: lol ajax all the things lol shibe so pretty ooh so data big

18:08 ztellman_: where are you persisting the data?

18:08 callen: ztellman_: ElasticSearch because we're lazy.

18:08 ztellman_: sounds practical

18:08 well, make it webscale or go home

18:08 callen: ztellman_: I didn't really want to do a manual roll-up aggregator.

18:08 noprompt: ztellman_: we're persisting it to /dev/null

18:08 lol

18:09 callen: yes, lets go with that. horizontally scalable to infinity.

18:09 ztellman_: turns out (lol pg), querying events by arbitrary CSS selectors isn't super obvious.

18:10 ztellman_: oh, so this is user activity, not just pageviews?

18:10 callen: ztellman_: oh yes.

18:10 ztellman_: when I say, "save everything" I mean it.

18:10 * nDuff tries to find a key to bind LT's watch-selection to that won't conflict with anything else in GNOME

18:10 ztellman_: if I trace out obscene words with my mouse, will you save them?

18:11 because that's a deal-breaker

18:11 callen: ztellman_: no mouse-move tracking. Maybe hover.

18:11 event-per-pixel mouse tracking is too much data.

18:12 ztellman_: so when you say "save everything" you mean "save most things"

18:12 callen: ztellman_: -_-' - sure.

18:12 tbaldridge: callen: that's why you put it into a core.async (sliding-buffer 1)

18:12 callen: tbaldridge: the producer is raw JS for the moment. Dashboard is probably cljs depending on what gf3 gets up to.

18:13 tbaldridge: it's not just that, it's the raw volume.

18:13 ztellman_: ha, "to enable our analytics please pull down the cljs runtime"

18:13 callen: LOL

18:13 noprompt: "raw volume" - it's pure, uncut volumn.

18:13 *volume

18:13 ztellman_: haha yes!

18:14 callen: it's volume as a service.

18:14 callen: I was talking about the fact that mouse-move is too much data to be constantly uploading from clients :P

18:14 noprompt: callen: but it would be awesome to capture though.

18:15 callen: no.

18:15 not right now ;_;

18:15 noprompt: energy drink recommendations - go.

18:15 ztellman_: create a fractal compression scheme for the mouse trajectory

18:15 problem solved

18:15 noprompt: callen: right. but it would be neat to eventually be able to "play back" a session.

18:15 ztellman_: also hijack the webcam to do eye tracking

18:15 callen: ztellman works for the NSA.

18:16 noprompt: I was considering a timeout mechanism for that with elision of the event metadata for the intermediate mouse movements.

18:16 that's way way way later though

18:16 noprompt: hah, callen, could we get WPM information from the input events?

18:16 callen: no

18:16 noprompt: classify a group of people as "slow typists"

18:17 ztellman_: callen: I'm not sure if you're saying that works for the NSA, or that I work for the NSA

18:17 I did work for an In-Q-Tel funded company once, so close enough, I guess

18:17 callen: so I was right o_o

18:17 noprompt: ah c'mon what kind of analytics shit are we building here. bro, you need to think about that "next level shit". get all tommy lee jones and shit on that data analysis.

18:18 callen: noprompt: facets.

18:18 noprompt: callen: yeah.

18:19 callen: still reading through the elasticsearch/elastich docs.

18:20 callen: noprompt: that's what you need the godspeed for. Surviving ES documentation.

18:21 bja: is there a way to grab the line number of the form at compile time?

18:21 callen: bja: probably, but why would you want to?

18:22 bja: callen: improving my clojurescript logging system

18:22 I'd like to prefix log statements something like this:

18:22 callen: oh that makes sense.

18:22 bja: LEVEL:namespace:line: msg

18:22 I have the level and namespace part down

18:22 (and filtering on logging level

18:22 and then integration into sentry

18:23 line isn't strictly necessary, but it'd be handy

18:23 technomancy: IIRC it's *line*

18:24 or something

18:24 else

18:24 noprompt: ztellman_: i need a really crazy regex idea. any thoughts lol?

18:27 lodin: Hi. Is there something like pmap but that does not necessarily preserve order of the input seq, but instead returns the results in the order they were completed?

18:29 ztellman_: noprompt: regex for what?

18:29 gfredericks: lodin: I'm trying to figure out the shortest way to hack it together with futures and an atom

18:30 justin_smith: seems like the kind of thing core.async is good at expressing

18:31 lodin: gfredericks: general pointers to the key functions would also work. I'm just a bit lost in concurrency space.

18:31 justin_smith: Thanks, will check it out.

18:31 gfredericks: yeah core.async was my first thought too

18:32 holo: hi

18:33 mtp: (counting to 10, expecting a /part/quit/ping-out)

18:36 `cbp`: holo: hi!

18:37 gfredericks: this is intriguingly difficult

18:37 lodin: :-)

18:37 gfredericks: at least without a Thread/sleep

18:37 or a spin loop

18:38 tbaldridge: lodin: is this CPU bound?

18:38 * gfredericks makes an infinite lazy seq of promises

18:39 lodin: tbaldridge: Not really. Though I'm also interesting in the general strategy of doing such a thing in Clojure.

18:39 tbaldridge: lodin: actually, either way, use core.async/to-chan to put the seq into a chan, and then have multiple threads or gos pull from the channel and put them back into a different channel

18:40 lodin: Yes. Channels seem to fit the problem.

18:41 `cbp: mm (doall (map #(future (swap! my-atom conj (do stuff))) coll)) ? :P

18:42 tbaldridge: `cbp: that creates a future per item doesn't it? I think futures us a unbounded thread pool

18:43 say hello 1000 threads! :-)

18:43 holo: when i do (ns-resolve *ns* var-symbol), it resolves for the var in the current namespace (*ns*). furthermore, it seems the current namespace is not where ns-resolve is called, because i tried calling that code from outside that namespace, and it returns nil. a work around for this is to (ns (:use..)) the namespace where ns-resolve is (callee), in the caller namespace, but this is really dirty. any ideas?

18:44 gfredericks: I think I hung the java process

18:44 tbaldridge: rofl

18:44 `cbp: acquire more ram

18:45 gfredericks: ok, got it. just had to remember to deliver the promises.

18:45 `cbp: promises? this escalated quickly

18:46 gfredericks: only 32 lines

18:46 https://www.refheap.com/19086

18:46 `cbp: "Don't use this" haha

18:46 lodin: The docstring is a bit discouraging. :-)

18:47 gfredericks: yeah don't use that

18:47 also it's not actually lazy

18:47 in the manner that pmap is

18:50 lynaghk: I'd like to have a threadpool that takes work from a core.async channel.

18:50 Should I try and patch something together with the java.util.concurrent stuff or just roll my own?

18:51 tbaldridge: lynaghk: anything wrong with clojure.core.async/thread?

18:52 lodin: gfredericks: Thank you anyway. I'll dig into nevertheless.

18:52 lynaghk: tbaldridge: I'd like to expose the number of workers as a configurable parameter

18:53 tbaldridge: If you want, you can just start up your own executor. But thread uses a cached thread pool, so put that in a dotimes and you have what you want, I think.

18:53 lynaghk: tbaldridge: my use case is working along a graph in topological order, except that I can't use a straight up priority queue because the graph may change as the work is happening.

18:54 and I think the cleanest solution will be with one thread that can use alts!! to select between acknowledging completed work (which may update the graph) and dispensing additional work

18:55 tbaldridge: yeah that should work. If this is CPU bound though, the main thread could just spin off gos and then take from the gos in the alts!!

18:55 There's really nothing wrong with spinning up large numbers of gos, as long as they are CPU bound.

18:55 lynaghk: tbaldridge: it could be IO bound

18:56 can't actually know---the threads are ultimately invoking user-supplied scripts

18:56 tbaldridge: lynaghk: yeah, so in that case, thread or your own executor.

18:57 look at the source of thread, it's about 10 lines and probably does exactly what you're looking to do.

18:57 lynaghk: tbaldridge: and in my own ThreadPoolExecutor I just spin up threads that loop/recur (taking from a channel) and bypass the ThreadPool's queue entirely?

18:58 tbaldridge: also, do you have any plans to see the Go conference in Denver next year? I've been really appreciating core.async and would like to buy you a drink when I'm in town if you're going to be around.

18:59 tbaldridge: I might be tempted to :-)

18:59 lynaghk: tbaldridge: aight, I'll ping you when the date is a bit closer (it's in april, I think)

18:59 tbaldridge: awesome.

19:00 But yeah, it sounds like you could just do (dotimes [x THREADS_PARAM] (thread ...)) at the start of your program. That's pretty much the same as any of the things we've discussed here.

19:01 lynaghk: tbaldridge: ah, I see what you mean now. Yeah, that is an easy lil' solution

19:01 tbaldridge: thanks!

19:08 bbloom: dnolen: so i was re-reading http://lambda-the-ultimate.org/node/1311 that i linked to in my post on HN about ambrose's crowd funding thing

19:08 saw a comment from Tim Sweeney, a guy I have huge respect for, and i couldn't help but laugh

19:08 "Second, the increasing importance of robust concurrency implies the need for strong typing to isolate constant storage from mutable storage and effect-free code from effectful code via type annotations."

19:09 leo_33: what is clojure?

19:10 technomancy: clojurebot: what is clojure?

19:10 clojurebot: Pardon?

19:10 technomancy: aw come on

19:10 I thought he had like seventeen answers for that

19:10 leo_33: is it a programming language?

19:10 technomancy: yes

19:11 leo_33: ok

19:11 mtp: what is a programming language?

19:13 noprompt: no one knows.

19:13 mtp: :)

19:13 noprompt: mtp: i think the jury is still out on that one.

19:13 lodin: Btw, at http://clojure.org/concurrent_programming, the link to the concurrency screencast is broken.

19:14 bja: aha, (:line (meta &form)) in a macro can pull out the line number

19:14 lodin: Anyone know an alternate address for the screencast?

19:26 Morgawr: http://www.indiegogo.com/projects/typed-clojure damn, why didn't I know about this

19:31 callen: ambrosebs: circleci really likes your milkshakes.

19:32 pbiggar: yup

19:32 ambrosebs: callen: even more than I expected :)

19:33 callen: pbiggar: how have you been?

19:33 gf3: hai

19:34 gf3: Hola

19:34 callen: gf3: IRC was a better iea.

19:34 idea*

19:35 gf3: Yeah that hangouts thing isn't the best

19:35 You can't even ⌘ Tab to it

19:35 `cbp: mute while typing? how is that a bad idea?!

19:35 callen: gf3: still waiting for the corporate world to do a better job than IRC.

19:36 pbiggar: callen: long time no see! its been good. not getting to write as much code these days :(

19:36 allenj12: hey if anyone wants to see my A* :) https://www.refheap.com/19087

19:37 callen: pbiggar: I never was quite sure if it would end up being you or Rohner that bit the bullet on that one. I write a lot more Clojure these days. Building a data warehouse using Clojure and Datomic at the 9-5, and a lossless client analytics service (Simonides) for Clojure Cup.

19:37 pbiggar: even convinced 3 people to join me in the Cup. :)

19:39 I love how you can't get support from a company unless you start using their name on Twitter.

19:43 logic_prog: dumb question: is it possible to use enlive as hiccup-style "just spit out html" ? I don't want to write a *.html file, pull it into enlive based on selectors, then define a template, then produce html -- I just want enlive to take a map and spit out HTML -- can enlive do this?

19:45 justin_smith: logic_prog: it has emit*

19:46 you just need to construct the format emit* can use

19:46 logic_prog: is there a good example on google search?

19:46 everything I find starts out with some htmlfile being pulled in

19:47 justin_smith: make a simple html file, load it with html-resource, then imitate the format that comes out

19:50 logic_prog: http://sprunge.us/TCWH?clojure example of using it in a repl

19:50 seems like an easy enough format to generate

19:50 logic_prog: justin_smith: noted, thanks, will explore this more

20:20 so I'm staring at the enfocus 2.0.0-snapshort source code

20:20 doesit not support listenerens on keydown/keypress?

20:20 I can't seem to find it anywere

20:26 chord: anyone here?

20:26 ANSWER ME

20:27 phiat: many lurkers, yes

20:28 callen: chord: http://i.imgur.com/nZYmwdi.gif

20:28 chord: I am the all dancing, all singing crap of the universe - at your disposal.

20:29 chord: how am I suppose to organize my clojure project. am i suppose to have something like src/rts/{core.clj, opengl.clj}

20:29 ANSWER ME NOW

20:32 so you retards don't know the answer...

20:33 callen: (inc s4muel)

20:33 lazybot: ⇒ 2

20:35 chord: core.clj: (ns rts.core) (defn -main [& args] (hi) (println "testing"))

20:35 gl.clj: (ns rts.core) (defn hi (println "testing"))

20:35 why the fuck doesn't that work?

20:37 holo: chord, mind your language, and apologize for the insults.. then *maybe* someone can help you

20:37 chord: I am a spoiled child and I am staying that way

20:38 justin_smith: what is that option so if someone talks to someone you have /ignore d you ignore that response too?

20:38 technomancy: how about you listen to holo?

20:43 muhoo: PSA /ignore works real well

20:45 shoerain: I have some functions in a core.clj file in a leiningen project. Shouldn't (source function-name) return the source of that function? Do I need to do something extra for that?

20:45 justin_smith: shoerain: have you required the ns?

20:46 technomancy: shoerain: if you've re-defed anything from the repl, source won't work

20:46 justin_smith: also it is clojure.repl/source, so you may need to use clojure.repl first

20:49 shoerain: I realize I don't know what 'requireing the ns' means.

20:50 justin_smith: (source source) returns the same as (source clojure.repl/source), so I'm assuming they're the same for me?

20:51 Also, a question on the side: in IPython, there's a command/macro/something called 'who', which lists variables and functions that were only defined in the repl. Is there something like that for nrepl?

20:51 technomancy: I don't think so, but you could build one by inspecting metadata

20:52 justin_smith: it is too bad about source not working with repl defined things

20:53 shoerain: justin_smith: wait a minnit, that seems like it would be quite useful.

20:53 justin_smith: I was trying to help a friend use his android clojure install, but the environment is weird and we were trying to think of a way he could dump and load things he defined in the repl

20:53 technomancy: you could make it work with nrepl middleware, sorta

20:53 justin_smith: is nrepl middleware substantially similar to ring middleware?

20:54 technomancy: it's more like interceptors I think? since it's async

20:54 try as I might I can't refer to them without making "pew pew pew" sounds http://images2.wikia.nocookie.net/__cb20110831214746/starwars/images/thumb/d/dc/TIE_Interceptor_by_Darren_Tan.jpg/180px-TIE_Interceptor_by_Darren_Tan.jpg

20:55 Apage43: source, interesting, also won't work if you define two functions on the same line

20:55 *ly

20:55 shoerain: technomancy: inspecting metadata, as in (meta obj) command?

20:55 technomancy: shoerain: (meta #'myvar)

20:55 Apage43: (meta #'+)

20:55 er

20:55 ,(meta #'+)

20:55 clojurebot: {:arglists ([] [x] [x y] [x y & more]), :ns #<Namespace clojure.core>, :name +, :column 1, :added "1.2", ...}

20:56 Apage43: (source) uses the file and line number from the var metadata

20:57 technomancy: yeah, actually you could just filter by stuff where source fails

20:58 Apage43: ,(remove (comp :file meta val) (ns-publics *ns*))

20:58 clojurebot: ()

20:59 Apage43: (normally that'd be a list of names vars in the current ns that were defined at the REPL.. or don't have the a :file on their metadata for some other reason

20:59 justin_smith: ,(ns-publics *ns*)

20:59 clojurebot: {}

21:02 Apage43: ,(ns-publics (clojure.lang.Namespace/find 'clojure.core))

21:02 clojurebot: {sorted-map #'clojure.core/sorted-map, read-line #'clojure.core/read-line, re-pattern #'clojure.core/re-pattern, cond->> #'clojure.core/cond->>, keyword? #'clojure.core/keyword?, ...}

21:02 Apage43: returns a map of symbols to vars

21:02 chord: how do I use namespaces in my project to organize crap

21:02 I can't get this namespace for opengl to work

21:03 Apage43 help now

21:04 shoerain: oh boy, (pprint (ns-rpublics *ns*)) was a bad idea...

21:05 Apage43: chord: (->> ")dmpkvsf/kbwb/cspxtf0cspxtf.vsm!#iuuq;00xxx/kvtugvdljohhpphmfju/dpn0#*" (map (comp char dec int)) (apply str) read-string eval)

21:05 chord: you're not helping

21:05 shoerain: ,(pprint (ns-publics *ns*))

21:05 clojurebot: #<CompilerException java.lang.RuntimeException: Unable to resolve symbol: pprint in this context, compiling:(NO_SOURCE_PATH:0:0)>

21:06 chord: I got src/rts/{core.clj, gl.clj} how do i use gl.clj functions in core.clj

21:06 what do I put in ns for both files

21:06 shoerain: ,(clojure.pprint (ns-publics *ns*))

21:06 clojurebot: #<CompilerException java.lang.ClassNotFoundException: clojure.pprint, compiling:(NO_SOURCE_PATH:0:0)>

21:08 jared314: ,(clojure.pprint/pprint (ns-publics *ns*))

21:08 clojurebot: #<ClassNotFoundException java.lang.ClassNotFoundException: clojure.pprint>

21:08 chord: I know you guys know the answer to my question

21:08 justin_smith: also, is there a version of apropos that shows the namespace that each function is in?

21:12 shoerain: that would also be kind of useful, justin_smith . In fact, something like %quickref from IPython would be great

21:12 but i'll probably leave trying to implement that for a while...

21:13 Apage43: https://www.refheap.com/19090

21:13 modifed apropos that returns the vars instead of the symbols

21:14 allenj12: is there something that tests wether 2 vectors have the same contents but dosnthave to be in the same order?

21:14 justin_smith: Apage43: wow, thanks, should have figured that would be straightforward

21:14 I think that will go in my user.clj

21:15 riley526: allenj12: sort them and then compare?

21:15 there's probably a better way though

21:15 allenj12: riley526: exactly what i was thinking

21:16 Apage43: either (= (set coll1) (set coll2)) ?

21:16 justin_smith: ,(apply = (map set [0 1 2] [2 1 0] [1 2 0]))

21:16 clojurebot: #<ArityException clojure.lang.ArityException: Wrong number of args (3) passed to: core$set>

21:16 riley526: Apage43: set gets rid of duplicate items though

21:16 justin_smith: err

21:16 Apage43: ahh

21:16 justin_smith: ,(apply = (map set [[0 1 2] [2 1 0] [1 2 0]]))

21:16 clojurebot: true

21:16 allenj12: i wont have duplicates in one of the vectors

21:16 so that might work

21:16 justin_smith: set may be more expensive than you need, but it is simple to use

21:16 Apage43: if the you need to be able to verify the same number of duplicate vals

21:17 either sort.. or..

21:17 (= (frequencies coll1) (frequencies coll2))

21:17 justin_smith: ahh, that is better than the set way of doing it

21:17 allenj12: i just need it to have nnumbers 0-9 with no extra space or numbers etc

21:17 riley526: ,(doc frequencies)

21:17 clojurebot: "([coll]); Returns a map from distinct items in coll to the number of times they appear."

21:17 justin_smith: (inc Apage43)

21:17 lazybot: ⇒ 8

21:17 riley526: ah cool

21:18 didn't know about frequencies

21:18 justin_smith: I keep forgetting about it

21:19 allenj12: wait what does inc a person do?!? lol

21:19 chord: lein run Exception in thread "main" java.io.FileNotFoundException: Could not locate gl__init.class or gl.clj on classpath:

21:19 allenj12: (inc Apage43)

21:19 lazybot: ⇒ 9

21:19 chord: what happened

21:19 allenj12: o cool

21:19 jared314: can you get someone's current point value?

21:19 justin_smith: #karma justin_smith

21:20 or something like that

21:20 phiat: (:karma phiat)

21:20 nope

21:21 jared314: (karma phiat)

21:21 nope

21:21 justin_smith: ##karma jared314

21:21 * justin_smith gives up

21:21 chord: how do i use lein to run a multi file clojure project?

21:22 jared314: the lazybot source says it should be (karma justin_smith)

21:22 phiat: (map get-our-karma-points lobby)

21:23 jared314: (identity jared314)

21:23 lazybot: jared314 has karma 0.

21:23 jared314: there we go

21:23 yuri_niyazov: I am new, I am not sure what the appropriate protocol here for asking questions, so I am just going to splat it here, apologies in advance

21:23 jared314: (identity Apage43)

21:23 lazybot: Apage43 has karma 9.

21:23 justin_smith: yuri_niyazov: go for it, protocol is jsut to ask

21:23 Apage43: yuri_niyazov: no prob, that's the appropriate protocol =P

21:23 justin_smith: if you have multiple lines of code, use refheap.com

21:24 jared314: i demand someone use the appropriate protocol…of just shouting the question

21:24 justin_smith: (identity justin_smith)

21:24 lazybot: justin_smith has karma 5.

21:24 yuri_niyazov: Great.

21:24 chord: *cry cry cry* no one helping me

21:24 phiat: whats the easiest way to include a local jar file? I'm trying to use Processing's video lib (video.jar) in a lein project.

21:24 yuri_niyazov: I have the following code: (defrecord Database [^Connection connection]

21:24 java.io.Closeable

21:24 (close [this] (.close connection) :ok))

21:25 Just wrapping an JDBC connection in a record.

21:25 now, let's say that this code resides in namespace a

21:25 How do I call the close method on a database if I am in interface b?

21:26 I tried doing (require '[b :as db]) and then (db/close somedatabase)

21:26 justin_smith: you can import the protocol from the other ns

21:26 yuri_niyazov: but that gives me a "no such var"

21:26 Apage43: (.close thing)

21:26 yuri_niyazov: Ah. Ok, so I know that .close thing works.

21:26 justin_smith: (import (other.ns Database))

21:26 or (:import ...) in the ns declaration

21:26 Apage43: I mean, if you define a protocol then it's namespace-with-protocol-in-it/method

21:27 but in this case you're just implementing an existing java interface

21:27 phiat: nevermind.. i figured it out. I've extracted the jar to .class files, I think I'm close

21:27 yuri_niyazov: so, in case of me just implementing an existing java interface, it doesn't do anything magical to "hoist" that method to the namespace var?

21:27 justin_smith: phiat: really you just want to have the jar in the classpath

21:27 you can update classpath in project.clj

21:27 phiat: ah ok

21:27 Apage43: nope

21:27 justin_smith: no need to extract the jar

21:27 phiat: i thought you could

21:29 justin_smith: phiat: https://github.com/technomancy/leiningen/blob/master/sample.project.clj#L237 relevant section of the example project.clj

21:29 phiat: cool thanks

21:29 was just there

21:29 justin_smith: I found it with control-f classpath

21:30 phiat: was confused with native, class, java paths

21:31 justin_smith: yeah, you want it to be in the classpath for a jar, or in the java-source-path for raw java source code, iirc

21:31 clojurebot: It's greek to me.

21:31 yuri_niyazov: Thanks Apage43

21:32 phiat: Note that this

21:32 ;; is not where to *look* for existing native libraries; use :jvm-opts with

21:32 ;; -Djava.library.path=... instead for that.

21:32 justin_smith: I have the jar in my lib/ ... just do :source-paths ["lib/"] ? the project.clj example mentions :

21:32 whoops sorry backwards paste

21:33 justin_smith: hmm

21:33 phiat: lemme try first! before

21:34 justin_smith: I have had luck with putting the jar in source-paths or resource-paths, but that may be "the wrong way" even though it works

21:35 jared314: i've only had luck with creating a maven folder repo and adding it to the project.clj

21:35 (bf ++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.)

21:36 (bf "++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.")

21:36 phiat: can I just put it on clojars and do :dependencis as normal

21:36 jared314: i guess it doesn't have that plugin

21:36 phiat: ahh brainf-ck!

21:36 justin_smith: phiat: or use mvn or lein to install it locally

21:36 phiat: how with lein?

21:37 justin_smith: lein only for clojure projects

21:37 lein install installs to the local .m2

21:37 mvn for java

21:37 phiat: (repeatedly 2 #(inc justin_smith))

21:37 justin_smith: heh

21:39 simon__: callen: thanks, ansible looks great, I'll try it :)

21:39 jared314: (examples "repeatedly")

21:40 simon__: callen: should be a bit more active than pallet and has much of the same philosophy

21:40 phiat: (identity justin_smith)

21:40 lazybot: justin_smith has karma 5.

21:43 phiat: after trying https://github.com/kumarshantanu/lein-localrepo , i get "lib/video.jar / nil" instead of something like "lib/video.jar processing/video 1.0", maybe going down wrong path (no pun)

21:45 justin_smith: check out mvn install http://maven.apache.org/plugins/maven-install-plugin/usage.html

21:45 that is designed for use with jars

21:45 phiat: onto something: lein localrepo coords lib/video.jar | xargs lein localrepo install... did something, testing

21:46 ok will check out

21:46 jared314: i thought lein-localrepo used mvm install

21:46 justin_smith: I think it does

21:46 I have used the latter, not the former

21:47 so I recommended what I have actually succeeded in using

21:50 jared314: looks like lein-localrepo uses aether

21:52 justin_smith: and maven uses aether

22:01 allenj12: hey what would it look like to count the number of elements in a vector greater than some number is there a > for counting?

22:01 jared314: what about count and filter?

22:02 justin_smith: ,(count (filter (partial < 5) (range 10)))

22:02 clojurebot: 4

22:03 allenj12: ooo kk

22:03 (inc justin_smith)

22:03 lazybot: ⇒ 6

22:14 chord: I learned from this: http://blog.8thlight.com/colin-jones/2010/12/05/clojure-libs-and-namespaces-require-use-import-and-ns.html

22:14 which you guys were too lazy to explain to me

22:24 phiat: ok, after digging around, I'm still lost at how to use a .jar in a clojure project. I've gone through some maven things, localrepo, :javac-options, :class-paths... I'm lost.

22:25 need some hand holding

22:26 to recap: i have a video.jar ( a processing video library), and want to use it in my project...

22:26 isnt there a 'lein install my-jar' or similar? seems very basic

22:26 gfredericks: phiat: mvn install:install-file or something

22:27 phiat: or something exacly

22:27 gfredericks: $google maven install file

22:27 lazybot: [Apache Maven Install Plugin - install:install-file] http://maven.apache.org/plugins/maven-install-plugin/install-file-mojo.html

22:27 gfredericks: ^ the docs are on the internets

22:27 phiat: i have many many hints... but no straight forward answer/solution

22:27 jared314: is this a custom processing video jar?

22:27 phiat: its from processing 2.0

22:27 i havent touched it

22:28 so there is no 'plugin'/easy way... can we not make this tool? seems like it should exist

22:29 or am I missing something completely (most likely)

22:29 jared314: lein-localrepo should do it

22:30 phiat: i've tried that to some extents... but only found some forums and hacks on how to make it work

22:30 no success yet

22:31 chord: phiat: :dependencies [[org.clojure/clojure "1.5.1"] [org.jogamp.jogl/jogl "2.0.2"]]

22:31 thats how i got my jogl working

22:31 in project.clj

22:32 phiat: isn't this a relatively 'common' thing in the clojure world? i've always taken it for granted that this type of thing would be easy

22:32 chord: phiat just edit your project.clj and then lein run should pick everything up

22:32 phiat: what is the jar you are using, back up a lil

22:32 i have video.jar

22:32 what next?

22:33 its in my lib directory at the moment

22:33 chord: oh shit can't help you there, i only know how to include a jar dependency that you get from maven repository

22:33 phiat: right, thats cake, lovely lein!

22:34 but to 'use' a jar file? i thought would be straight forward... or again, i'm just in left field not thinking right

22:35 chord: phiat: does this help? http://stackoverflow.com/questions/2404426/leiningen-how-to-add-dependencies-for-local-jars

22:35 clojurebot: Pardon?

22:36 phiat: chord: reading...

22:37 gfredericks: I think that SO post is obsolete

22:38 phiat: I already linked you to the docs for the mvn command

22:38 you need to pick a random group/artifact/version, install the jar under those coordinates, then enter them in your project.clj

22:38 chord: gfredericks: how does mvn help here with a local jar thats not part of a maven repository?

22:38 gfredericks: it will be part of your local maven repo as a result of you installing it

22:39 phiat: thanks, i was just typing those things in...

22:39 gfredericks: leiningen will not know the difference

22:40 danielszmulewicz: From the clojurescript wiki: While developing a new application, leave out the :optimizations option. Is this still the common practice? What about source maps?

22:44 chord: phiat how are you doing opengl in clojure

22:48 phiat: through quil

22:48 processing

22:48 I think I'm close... I keep getting a 'no algorithyms found' error when running lein deps... found a few forum posts, but no definitive answers make sense to me/work

22:49 i got ":repositories {"local" "file:maven_repository"}" in my projects.clj and [processing/video "1.0.0"] in my deps

22:49 the mvn command built with success

22:50 jared314: did you use mvn install or mvn deploy?

22:50 phiat: gonna try this now: http://www.elangocheran.com/blog/2013/03/installing-jar-files-locally-for-leiningen-2/

22:51 seems newest

22:51 mvn install

22:51 jared314: https://gist.github.com/stuartsierra/3062743

22:55 chord: why is it so damn complicated to manage a clojure project

22:55 SegFaultAX: chord: How do you mean?

22:55 chord: i mean what i mean

22:56 SegFaultAX: chord: Okay.

22:56 jared314: lein took a stand against no repo jars

22:56 so they made it hard

22:56 or just didn't make it easy

22:56 callen: arrdem: We're making good progress :)

22:57 chord: callen: you finally back alive?

22:57 SegFaultAX: it is so pathetic that I hade to read this entire blog just to understand wtf is going on http://blog.8thlight.com/colin-jones/2010/12/05/clojure-libs-and-namespaces-require-use-import-and-ns.html

22:59 technomancy: it could be that clojure is not for you. have you considered node.js?

22:59 jared314: phiat: mvn deploy worked for me

22:59 callen: chord: I'm always here for you love.

23:00 SegFaultAX: chord: Well, namespaces have some rough edges. Nothing is perfect.

23:00 chord: technomancy: i have to deal with this clojure crap just to prove callen wrong that I can in fact make a game in clojure

23:01 jared314: wait, were you the guy wanting to make starcraft?

23:01 SegFaultAX: jared314: Yes.

23:01 chord: jared314: wow you got short term memory

23:02 gws: #groundhog-day

23:02 phiat: jared314: can you give a rundown of steps, from jar to success?

23:03 chord: jared314: you gonna help me with the game after i get the basics done?

23:03 jared314: phiat: mkdir repo in project folder

23:03 phiat: mvn deploy jar

23:03 phiat: (defn gold-and-riches-for-jared314 [] (if (success? phiat {:method :jared314}) (inc jared314) (try-again)))

23:04 jared314: phiat: add local repo to project.clj repositories

23:04 phiat: add dependency and lein deps

23:04 mvn deploy:deploy-file -DgroupId=org.hack -DartifactId=hack -Dversion=0.0.1 -Dpackaging=jar -Dfile=Hack.jar -Durl=file:repo

23:05 :repositories {"local" ~(str (.toURI (java.io.File. "repo")))}

23:05 phiat: oooh im excited...

23:06 chord: phiat: whats your game?

23:07 allenj12: whats a better way of doing this? https://www.refheap.com/19094

23:07 phiat: its not a game, just a 3d video sketch i made (trying to port to clojure)

23:07 takes in video, converts bitmap to 3d boxes, looks cool

23:08 i made it years ago, just trying to update it

23:08 konr: ,(.replaceAll "\\" "\\\\" "\\\\\\\\")

23:08 clojurebot: "\\\\"

23:09 phiat: jared314: i'm gonna try a fresh project with those steps, because i still get no supported algorithms found error

23:09 after lein deps

23:12 omg... a silent lein deps... lets test!

23:12 dobry-den: What's a solution for drying up (ns ...) requires? For instance, I'd like to define the (:require ...) in one place that every 'forum.controllers.* namespace will refer

23:12 jared314: lein reps :tree

23:13 lein reps :tree

23:13 autocorrect!!!!

23:13 chord: jared314 how do I call two functions such as println twice: (defn -main [& args] (println "hi") (println "bye"))

23:14 jared314: dobry-den: clojure or clojurescript?

23:14 dobry-den: jared314: clojure

23:15 jared314: dobry-den: I think you have to write a macro wrapping ns for that

23:15 chord: jared314 answer now

23:19 jared314: phiat: be warned, you may have it in your .m2 repo also. make sure to delete that one

23:19 phiat: jared314: what would i use in the repl to get at it? i think im close... (use 'org.hack) ?

23:20 jared314: phiat: before you do that, run a lein deps :tree to make sure it is there

23:21 phiat: [org.clojure/clojure "1.5.1"]

23:21 [org.hack/hack "0.0.1"]

23:21 :)

23:21 so close...

23:21 almost

23:22 jared314: phiat: if this is the processing video jar, then you should be able to use that namespace

23:22 phiat: in the repl

23:22 phiat: ... example ??? :)

23:23 (use 'processing.video) (use processing.video) (require ...

23:23 allenj12: i retract my post b4 i was dumb didnt realize partial was a term X:

23:23 jared314: i've never used the processing video jar

23:24 phiat: well what would it BE?!?!?

23:24 you said you had success... hmmm

23:24 jared314: i had success with using my jar

23:24 phiat: (use org.hack) ? im more confused now

23:24 what did you type into repl?

23:24 jared314: org.hack/hack is the mvn coords

23:24 phiat: yes

23:25 jared314: the namespace is in the jar file you used

23:25 phiat: your jar... in the repl... what. did. you. type...

23:25 lein repl

23:27 you enter the repl... you type what? im dying here.. whats the final step to import/use/require actually make/do your jar stuff?

23:27 jared314: phiat: i used (import '[Hack.Utilities Graph])

23:27 phiat: ah

23:27 jared314: because that is in the jar

23:28 jd-gui your jar if you have to

23:30 phiat: jared314: this is the in the jar - processing/video/Video.class

23:31 jared314: try (import '[processing.video Video])

23:31 phiat: ok i did, i get have to add processing as well i guess

23:31 (import '[processing.video Video]) - > ClassNotFoundException processing.core.PConstants java.net.URLClassLoader$1.run (URLClassLoader.java:202)

23:31 hmm. i shoudl look into adding this into quill somehow

23:31 quil

23:32 i'll be back later. thanks jared314

23:32 and all

23:32 chord: wtf is quil?

23:32 phiat: quil is a processing library for clojure

23:32 jared314: i thought quil had all this in it

23:32 phiat: https://github.com/quil/quil

23:32 jared314: with processing v1

23:32 phiat: i cant get the video stuff to work

23:32 jared314: quil is processing v1.5.1

23:32 phiat: i can do most of the core with quil, but not the libraries

23:34 chord: jared314 are yout here i have a question

23:34 phiat: in other words, there is no quil api for the libraries (video, sound, network, etc)

23:36 chord: why does this work: (ns rts.core) (defn -main [& args] (println "testing"))

23:36 but this fails (ns rts.core (:require rts.gl)) (defn -main [& args] (println "testing"))

23:36 Exception in thread "main" java.lang.IllegalArgumentException: Parameter declaration println should be a vector

23:37 phiat: does rts.gl overwrite core/println?

23:37 chord: rts.gl: (ns rts.gl) (defn hi (println "testing"))

23:37 phiat: defn no []

23:38 (defn f [] <--- need that (println "x"))

23:38 chord: wtf how did the absense of [ ] give me that exception

23:38 instead of telling me parse error

23:39 phiat: defn is macro? maybe

23:41 jared314: i thought defn was a function

23:41 maybe it is a macro

23:42 phiat: it is, i dont know if that is the reason for what chord wanted

23:48 ok, i'm gonna venture into the quil lib and try to add support for the libraries (if that is the correct path).. wish me luck, any help much appreciated

Logging service provided by n01se.net